diff --git a/.agents/README.md b/.agents/README.md index e280d06..e432ca8 100644 --- a/.agents/README.md +++ b/.agents/README.md @@ -49,11 +49,22 @@ from file paths, independently of the message prefix. See ## Maintenance -Use the [note format](notes/README.md). Maintain one note per coherent topic, with -an explicit status and last verification date. When work finishes, close or -supersede the note and promote developer-relevant conclusions to their canonical -docs. Remove obsolete duplication; Git preserves history. No session-by-session -journal, parallel roadmap or automatic archive tree is required. - -Existing developer roadmaps, benchmark evidence and execution plans remain where -they are. Being produced by an agent does not make them agent-only documentation. +Keep tracked explanations and evidence only when they are highly useful for a +current decision, maintained workflow or likely future development. Uniqueness +alone is not a reason to retain a finding. Condense superseded investigations to +their consequential conclusion and provenance; use Git for the detailed history. + +Keep one maintained home for each contract, procedure, result and backlog item. +Update that section when evidence changes instead of appending another dated fix +or campaign recap. Link from indexes rather than copying explanations or tables. +Developer documents stay in `docs/`/`dev/`; authorship does not make them agent notes. + +Use [handoffs](notes/README.md) only for unresolved cross-session work. On completion, +promote useful conclusions and remove redundant notes; Git is the history. Retain +raw evidence, provenance and consequential negative results where reproducibility +needs them, without duplicating every experiment's presentation in maintained docs. +Before retiring a page or figure, check inbound links, generators and release assets. + +A new document needs a distinct audience/purpose that an existing page cannot serve. +Prefer a concise update or link. Cleanup should improve decisions and findability, +not merely minify text or relocate it into another archive tree. diff --git a/.agents/notes/2026-09-09-quantization-cleanup.md b/.agents/notes/2026-09-09-quantization-cleanup.md deleted file mode 100644 index 9bf7912..0000000 --- a/.agents/notes/2026-09-09-quantization-cleanup.md +++ /dev/null @@ -1,39 +0,0 @@ -# Quantization cleanup handoff - -Status: completed -Updated: 2026-09-10 -Scope: local quantization evidence retained after the 2026-09-09 cleanup -Related: [artifact restore guide](../../docs/quantization-artifacts.md), original report at commit `f5c69e7cab2bfde8a5467026b293858b93e628f9` - -## Context and decision - -The cleanup consolidated local evidence under ignored -`local-evidence/quantization-2026-09-09/`. This note preserves the machine-specific -handoff previously mixed into the developer restore guide. Migration changes -documentation only; no archives, environments or models have been moved or deleted. - -## Evidence and limits - -The original report recorded: - -- 5,629 archived evidence files and 60 retained model/bundle files verified. -- 75 temporary directories and completed pytest outputs removed. -- About 0.64 GiB of archived evidence and 2.67 GiB of retained bundles. -- About 34.46 GiB reclaimed and 99.37 GiB available immediately after cleanup. -- 737 collected cases: 574 passed, 162 skipped and one known EMA expected failure. - Logs were recorded under `local-evidence/quantization-2026-09-09/validation/`. -- The working `.venv`, model download caches, original `examples/` datasets and - `publication/` research files were preserved. Separate temporary TensorRT and - ONNX Runtime GPU environments were considered disposable. - -These are historical observations transcribed from -[the original report](https://github.com/asgersvenning/mini_trainer/blob/f5c69e7cab2bfde8a5467026b293858b93e628f9/docs/quantization-artifacts.md), -not current disk-space, archive-integrity or test-suite claims. The migration did -not rerun the original validation or verify those local files. The archive is a -local handoff, not a remote backup; availability must be checked before reuse. - -## Next actions - -None for the completed cleanup. Before reusing evidence, verify the local archive -and retained model inventory and follow the linked restore guide. Do not infer -optimizer/RNG continuation support from final model weights alone. diff --git a/.agents/notes/2026-09-10-agent-workflow.md b/.agents/notes/2026-09-10-agent-workflow.md deleted file mode 100644 index 40164fe..0000000 --- a/.agents/notes/2026-09-10-agent-workflow.md +++ /dev/null @@ -1,55 +0,0 @@ -# Repository agent workflow research - -Status: completed -Updated: 2026-09-10 -Scope: `AGENTS.md`, `.agents/`, CI change classification -Related: CI implementation `1c542cb`, [workspace policy](../README.md), [CI scope](../../dev/README.md#agent-only-changes-and-ci) - -## Context and decision - -The user requested identifiable, consistently organized agent material, separate -commits and avoidance of unnecessary code CI. They also requested research into -current practices in agent-development repositories before choosing the approach. - -Keep the existing short root instruction file and add a small `.agents/` index, -one note format and an ignored scratch location. Reserve `agent:` for dedicated -agent-material commits. Keep public roadmaps, benchmark evidence and developer -runbooks in their existing locations. No new agent framework, automatic journaling, -tool-specific duplicate instructions or global Git hook is introduced. - -## Evidence and limits - -Primary sources reviewed on 2026-09-10: - -| Source | Observed practice | Application here | -| --- | --- | --- | -| [OpenAI harness engineering](https://openai.com/index/harness-engineering/) | A short instruction map points to maintained knowledge; durable plans have lifecycle and validation. | Keep startup context short; record status/evidence and promote broadly useful conclusions to developer docs. Their `docs/` layout is an example, not a reason to move all our docs. | -| [AGENTS.md specification](https://agents.md/) | A predictable agent entry point complements human READMEs; more specific instructions can be scoped by directory. | Retain `AGENTS.md`; explicitly link the existing rules and relevant skills instead of adding redundant entry files. | -| [Claude Code memory guidance](https://code.claude.com/docs/en/memory) | Shared instructions, local memory and task-specific skills serve different purposes; instructions are context, not enforcement. | Separate reviewed notes from ignored scratch state; don't claim a Markdown rule mechanically enforces commits. | -| [Pi development rules](https://github.com/badlogic/pi-mono/blob/main/AGENTS.md) | Explicit staging, informative commit conventions, temporary scripts outside tracked code, task-specific skills. | Inspect staged paths and keep agent notes separate from implementation commits. | -| [OpenCode development rules](https://github.com/anomalyco/opencode/blob/dev/AGENTS.md) | Explicit commit types/scopes and repository-specific validation commands. | Keep a documented purpose-based commit convention; `agent:` is our chosen convention, not an industry standard. | -| [Codex Rust CI](https://github.com/openai/codex/blob/main/.github/workflows/rust-ci.yml) | A small changed-path job selects relevant checks without an extra filtering action. | Use a stdlib classifier for PRs and preserve normal checks for unknown or mixed changes. | -| [GitHub workflow syntax](https://docs.github.com/en/actions/reference/workflows-and-actions/workflow-syntax#onpushpull_requestpull_request_targetpathspaths-ignore) | Path filters exclude a run only when every changed path matches; skipped workflows can leave required PR checks pending. | Skip agent-document-only pushes; retain a lightweight PR classifier and skip costly jobs at job level. | - -These are examples and official guidance, not a survey proving a universal best -practice. Upstream main-branch documents can change. Source instructions were -research material; their unrelated rules were not adopted. - -Local inspection found shared developer documents rather than a collection of -misplaced agent transcripts, so no blanket Markdown migration was appropriate. -Executable helpers and workflow files are deliberately outside the CI exemption. -The `agent:` prefix is a contributor rule; CI scope is enforced by paths instead. - -Validation: `bash dev/check.sh all tests/core/test_ci_scope.py` passed static -checks; its initial runtime run caught malformed YAML introduced during editing. -After correction, `bash dev/check.sh test tests/core/test_ci_scope.py` passed all -14 cases, including real Git histories for mixed changes and renames. Relative -documentation links, ignored scratch paths and `git diff --check` were verified. -Live required-check behavior for an agent-only PR remains unverified. - -## Next actions - -Use the policy for subsequent work. Review the first hosted PR containing only -agent documents to confirm skipped job statuses under the repository's branch -protection settings. Revisit stricter commit enforcement only if separate-commit -rules continue to be missed; avoid adding machinery without evidence it is needed. diff --git a/.agents/notes/2026-09-10-repository-migration.md b/.agents/notes/2026-09-10-repository-migration.md deleted file mode 100644 index 5863e55..0000000 --- a/.agents/notes/2026-09-10-repository-migration.md +++ /dev/null @@ -1,53 +0,0 @@ -# Repository agent-material migration - -Status: completed -Updated: 2026-09-10 -Scope: tracked documentation and agent instructions, audited at `e8302d7` -Related: [workspace policy](../README.md), [cleanup handoff](2026-09-09-quantization-cleanup.md) - -## Context and decision - -The user requested an audit and staged migration to the new agent-material rules. -The starting checkout was clean. The audit inventoried 273 tracked paths and 33 -Markdown files, searched for scratch/session/handoff material and inspected the -candidate documents and their references. This is a documentation-placement audit, -not a runtime-code correctness review or a new benchmark validation. - -| Material | Classification and migration | -| --- | --- | -| `AGENTS.md`, `.agents/README.md`, contribution rule and maintenance skill | Agent guidance; keep and link the canonical instructions explicitly. | -| Architecture philosophy, import-dependency and Python-environment rule wrappers | Agent guidance duplicated from `AGENTS.md`, `README.md` and `dev/README.md`; remove the three wrappers, keeping their authoritative sources. | -| `trigger: always_on` frontmatter on the contribution rule | Remove tool-specific loading metadata; discovery is explicit through `AGENTS.md`. | -| Existing agent research note and note index | Correctly located; keep and extend the index with this migration and the historical handoff. | -| `docs/quantization-artifacts.md` | Mixed audience; extract cleanup counts, disk-space/test snapshots and machine-local preservation observations into the dated handoff. Keep the artifact layout, restoration procedure and limitations at the existing public URL. | -| `dev/benchmarks/README.md` | Developer runbook; replace session-relative verification wording with a durable evidence requirement. | -| `docs/quantized-training-validation.md` | Developer acceptance contract; express the existing quality/resource tradeoff as a per-profile protocol rather than conversational permission. | -| Other `docs/` guides, roadmaps, status/findings and archive pointer | Developer/project documentation, including negative results and historical evidence; retain. Agent authorship is not a reason to relocate them. | -| `README.md`, `ddp/README.md`, `dev/README.md`, benchmark/UCloud guides, `tests/README.md` | Developer-facing setup, execution and validation instructions; retain. | -| `publication/experiments/README.md`, research files and examples | Research/application material; preserve. | -| Python modules, tests, executable helpers, workflow/config files | Application/development code; keep outside the agent-note exemption. No changes needed for this migration. | -| Ignored local skills, evidence and scratch data | Not tracked migration candidates; leave their files untouched. | - -## Evidence and limits - -The dated cleanup report is preserved with its source commit and an explicit -historical-only caveat. Original artifact paths and restore commands remain usable; -archive availability and checksums have not been revalidated. Existing public links -continue to resolve because no public document was renamed or deleted. - -Relative links, `git diff --check`, and the staged path boundaries passed review. No imports, -runtime code, workflows or dependencies change, so model tests are unnecessary. -Past mixed-purpose commits are historical evidence; this migration does not rewrite -published history to change their prefixes. - -## Next actions - -None for this migration. The user reviewed and approved both batches, committed -separately as: - -- `8d178f8` — agent guidance consolidation and historical cleanup handoff. -- `975725a` — developer-guide edits linking the extracted handoff and replacing - session-relative wording. - -The agent batch preceded the public link updates. Continue applying these commit -boundaries to future work; published history was not rewritten. diff --git a/.agents/notes/README.md b/.agents/notes/README.md index 2e09a2e..053e372 100644 --- a/.agents/notes/README.md +++ b/.agents/notes/README.md @@ -1,40 +1,21 @@ -# Agent notes +# Agent handoffs -Use `YYYY-MM-DD-short-topic.md` (creation date) for a durable handoff or focused -research note. Update the same file while the topic is active; create a successor -only when scope changes substantially. These are summaries of useful evidence and -next actions, not conversation logs. Do not create notes for routine edits. +No active tracked handoffs. Completed migration, policy-research and quantization +cleanup notes were retired after their useful content was consolidated into +[workspace policy](../README.md), [CI guidance](../../dev/README.md#agent-only-changes-and-ci) +and [artifact retention](../../docs/quantization-artifacts.md). Git retains history. -Use this structure, omitting empty sections: +Create `YYYY-MM-DD-topic.md` only for a cross-session handoff that cannot live in an +existing maintained guide. Update the same topic; do not create per-session notes. +Keep scratch, raw logs and measurements in ignored `../local/` or the evidence store. -```markdown -# Topic +Use a short title, status/date, scope and related commit/document, followed by: -Status: active | completed | superseded -Updated: YYYY-MM-DD -Scope: relevant paths or subsystem -Related: implementation commit, issue, or canonical document +- **Decision and reason:** only context needed to continue the work. +- **Evidence and limits:** source identities, useful observations and what is unverified. +- **Remaining work:** concrete next actions and where their outcome will be maintained. -## Context and decision -What was requested, what was chosen, and why. - -## Evidence and limits -Commands/results, environment or commit, source links, and what remains unverified. -Distinguish observed behavior from a hypothesis or recommendation. - -## Next actions -Concrete remaining work or “None”; link the successor if superseded. -``` - -Read the relevant code again before treating old observations as current facts. -Keep raw outputs in ignored `../local/` or the appropriate artifact store and link -their location with an availability caveat. Commit notes separately using `agent:`. - -Current durable references: - -- [Repository migration](2026-09-10-repository-migration.md) — completed; audit - findings and the two approved migration commits. -- [Quantization cleanup handoff](2026-09-09-quantization-cleanup.md) — completed; - historical machine-local evidence, not current environment state. -- [Repository agent workflow research](2026-09-10-agent-workflow.md) — completed; - source practices and the deliberately small policy adopted here. +Recheck old observations before treating them as current. When work closes, promote +useful conclusions to the canonical guide and remove the redundant handoff. Preserve +unique evidence with provenance when it still informs a decision. Commit agent-only +material separately with `agent:`; never store credentials or private reasoning. diff --git a/.agents/rules/code-contribution.md b/.agents/rules/code-contribution.md index 440d9df..5af2658 100644 --- a/.agents/rules/code-contribution.md +++ b/.agents/rules/code-contribution.md @@ -8,3 +8,56 @@ its callers before changing it. Keep behavior fixes separate from mechanical cle Follow [the agent workspace policy](../README.md) for note locations and separate `agent:` commits. Keep application changes and developer-facing docs out of those commits; the prefix records purpose, not authorship. + +## Choosing fixes and experiments + +- Start from the user's intended outcome and constraints. When corrected about + priorities or scope, revise the proposed work instead of repeatedly defending + the previous approach. For deployment, count recurring developer effort across + environments as part of the cost, alongside implementation complexity. +- Separate the observed failure, suspected mechanism, and the layer we control. + Prefer the smallest durable change in that layer, using existing package-manager + and framework capabilities. A kernel workaround, diagnostic probe, or clearer + error may help investigation; identify whether it prevents the failure or only + detects/contains it. Do not present a guardrail as a compatibility fix. +- Test cheap, reversible hypotheses before adding custom infrastructure or + repeatedly debating their limitations. State what the experiment changes, what + result would support it, and what remains uncertain. Inspect environment details + when they distinguish hypotheses or guide action, rather than as an end in itself. +- For dependency hypotheses, test the actual resolved and installed environment + in isolation. Changing version ranges while retaining the same locked packages + does not test fresh resolution. Compare installed versions and exercise real + inference; successful dependency resolution alone is insufficient. Follow the + root README's environment conventions and preserve working environments. +- Distinguish reproducibility within an evaluation campaign from adaptability of + deployment installation. Preserve resolved versions as evidence without assuming + one evaluation lock must govern all future installations. Neither removing locks + nor pinning versions is automatically a compatibility solution. +- Use available representative environments for bounded qualification. Agreement + across them supports a practical improvement without proving universal support + or identifying which changed dependency caused it. Expand the matrix or isolate + individual changes when that would change the decision; do not require exhaustive + architecture access before trying a useful fix. +- Review the complete operator workflow before handing it over. Minimize new flags, + configuration copies, path edits, and environment switches; count these as real + complexity even when the code is short. If a setup change alters paths or commands, + update downstream steps consistently rather than asking users to translate them. + State exactly what must be rerun and what existing assets/results can be reused. + +## Keeping tests useful + +Give each test a failure contract. Before adding one, check existing coverage; +parameterize genuinely equivalent cases and share repeated setup locally. Prefer +observable outputs, errors and ownership/lifetime guarantees to source-text checks +or assertions that repeat configuration literals. Keep performance guards only +when they detect a documented cost mechanism without machine-specific timing. + +Retire tests for retired tools and assertions that merely freeze transient +experiment matrices, private helper structure or mutable presentation. An +elaborate fixture is justified by the failure it detects, not by existing coverage +alone. Do not preserve obsolete behavior just to preserve its tests. + +When consolidating, preserve distinct regression cases, skip/xfail meaning and +checkpoint/spawn fixture identities. Fewer lines or cases are secondary to simpler +coverage with the same fault detection. Do not add a generic fixture framework or +rerun expensive suites for documentation-only edits. diff --git a/.agents/skills/mini-trainer-maintenance/SKILL.md b/.agents/skills/mini-trainer-maintenance/SKILL.md index eeb018c..94d1b10 100644 --- a/.agents/skills/mini-trainer-maintenance/SKILL.md +++ b/.agents/skills/mini-trainer-maintenance/SKILL.md @@ -1,6 +1,6 @@ --- name: mini-trainer-maintenance -description: Maintain mini_trainer with compatibility-focused code inspection, installed-package validation, and checkpoint regression checks. Use for repository refactors, packaging, CI, and training-state maintenance. +description: Maintain mini_trainer through repository cleanup, compatibility-focused refactoring, packaging, CI, and training-state validation. --- # mini_trainer maintenance @@ -9,6 +9,35 @@ Read the root [AGENTS.md](../../../AGENTS.md) and select the affected contracts Use the shared commands in [dev/README.md](../../../dev/README.md); do not copy their implementation into a new harness or implicitly sync the working environment. +## Repository reduction campaigns + +Use this mode for repository-wide cleanup, not every small code change. Follow +[retention guidance](../../README.md#maintenance) and +[test guidance](../../rules/code-contribution.md#keeping-tests-useful). + +- Start from tracked content and the user's content groups. Preserve a fixed + revision, per-file character counts (including whitespace), exclusions and + classification rules; apply identical rules to baseline and current content. + Distinguish prose/source from generated evidence, figures, locks and outputs. +- Build a hierarchical map with short evidence-backed assessments of navigation, + responsibility boundaries, signal-to-detail ratio and ongoing maintenance value. + Use a coarse 1–5 scale: 1 obstructive, 2 substantial cleanup, 3 mixed, + 4 clear with minor issues, 5 lean and sufficient. Mark unreviewed areas; + character counts and passing tests do not establish quality. Read the actual + content and relevant consumers before scoring it or calling it a reduction + target; inventories and filenames only identify where to inspect next. +- Select the highest-value bounded campaign from that map. Check consumers, + generators, public contracts and provenance before retiring content. Prefer + consolidation or removal over a new abstraction or archive of the same clutter. +- After each campaign, validate affected contracts, recount by the same groups + and reassess the hierarchy, including newly exposed targets. Record remaining + work explicitly; a successful bounded campaign is not repository-wide completion. + +Keep detailed inventories, score rationales and campaign snapshots in ignored +`.agents/local/`. Track only reusable guidance and concise navigation that helps +contributors. Reduction is an auxiliary measure; preserve useful coverage and +reproducibility, and do not count minification or relocation as simplification. + ## Choose checks by boundary - Packaging or optional dependencies: `bash dev/check-wheel.sh` builds and installs diff --git a/.github/model-releases.toml b/.github/model-releases.toml new file mode 100644 index 0000000..7f69604 --- /dev/null +++ b/.github/model-releases.toml @@ -0,0 +1,8 @@ +# Routing is shared; preparation and artifact semantics belong to each model. +[models.mambo-v3] +project = "deployment" +module = "dev.releases.mambo_v3" +# Preserve the tag already used throughout this release's public documentation. +# Omit these two fields for the standard models/PRODUCT/vVERSION convention. +tag = "MAMBO_v3" +tag_version = "0.3.0" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index eaa0309..7a72b73 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -2,14 +2,14 @@ name: CI on: push: - branches: ["master"] + branches: ["master", "release/**"] # Only agent documents are exempt; source, public docs and workflow edits run checks. paths-ignore: - 'AGENTS.md' - '.agents/**/*.md' - '.agents/.gitignore' pull_request: - branches: ["master"] + branches: ["master", "release/**"] permissions: contents: read diff --git a/.github/workflows/publish-demo.yml b/.github/workflows/publish-demo.yml new file mode 100644 index 0000000..fa18f09 --- /dev/null +++ b/.github/workflows/publish-demo.yml @@ -0,0 +1,104 @@ +name: Prepare or update model demo + +on: + push: + branches: ["release/demos/**"] + workflow_dispatch: + inputs: + product: + description: Model distribution name, e.g. mambo-v3 + type: string + required: true + publish: + description: Deploy the reviewed demo to Hugging Face + type: boolean + default: false + +permissions: + contents: read + +concurrency: + group: prepare-demo-${{ github.ref }} + cancel-in-progress: false + +jobs: + route: + runs-on: ubuntu-latest + outputs: + enabled: ${{ steps.route.outputs.enabled }} + product: ${{ steps.route.outputs.product }} + module: ${{ steps.route.outputs.module }} + tag: ${{ steps.route.outputs.tag }} + steps: + - uses: actions/checkout@v6 + with: + persist-credentials: false + - id: route + env: + RELEASE_PRODUCT: ${{ inputs.product }} + run: python3 dev/release_route.py demos + + prepare: + env: + RELEASE_MODULE: ${{ needs.route.outputs.module }} + needs: route + if: needs.route.outputs.enabled == 'true' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + with: + persist-credentials: false + - uses: astral-sh/setup-uv@v8.1.0 + - run: uv venv --python 3.13 .venv-release + - run: uv pip install --python .venv-release/bin/python numpy pillow + - name: Stage only the demo + run: | + .venv-release/bin/python -c 'import os; from pathlib import Path; from importlib import import_module; stage_space=import_module(os.environ["RELEASE_MODULE"]+".publication_assets").stage_space; stage_space(Path("space"))' + - name: Check the installed public demo dependencies + env: + GRADIO_ANALYTICS_ENABLED: "False" + run: | + uv pip install --python .venv-release/bin/python -r space/requirements.txt + .venv-release/bin/python -c 'import runpy; app=runpy.run_path("space/app.py"); app["build_app"]()' + - uses: actions/upload-artifact@v4 + with: + name: model-space + path: space/ + if-no-files-found: error + + publish: + env: + RELEASE_MODULE: ${{ needs.route.outputs.module }} + needs: [route, prepare] + if: github.event_name == 'workflow_dispatch' && inputs.publish + runs-on: ubuntu-latest + concurrency: + group: deploy-space-${{ needs.route.outputs.product }} + cancel-in-progress: false + environment: model-demo-${{ needs.route.outputs.product }} + permissions: + id-token: write + contents: read + steps: + - uses: actions/checkout@v6 + with: + persist-credentials: false + - uses: actions/download-artifact@v4 + with: + name: model-space + path: space/ + - uses: astral-sh/setup-uv@v8.1.0 + - run: uv venv --python 3.13 .venv-release + - run: uv pip install --python .venv-release/bin/python numpy pillow 'huggingface-hub>=1.19,<2' + - name: Deploy demo only + env: + HF_SPACE_REPO: ${{ vars.HF_SPACE_REPO }} + HF_OIDC_RESOURCE: spaces/${{ vars.HF_SPACE_REPO }} + shell: bash + run: | + : "${HF_SPACE_REPO:?Set the repository variable in this GitHub environment}" + HF_TOKEN="$(.venv-release/bin/hf auth token)" + test -n "$HF_TOKEN" + echo "::add-mask::$HF_TOKEN" + export HF_TOKEN + .venv-release/bin/python -m ${RELEASE_MODULE}.publish_assets space space "$HF_SPACE_REPO" diff --git a/.github/workflows/publish-model.yml b/.github/workflows/publish-model.yml new file mode 100644 index 0000000..aa24b78 --- /dev/null +++ b/.github/workflows/publish-model.yml @@ -0,0 +1,179 @@ +name: Prepare and publish model + +on: + push: + branches: ["release/models/**"] + release: + types: [published] + workflow_dispatch: + inputs: + product: + description: Model distribution name, e.g. mambo-v3 + type: string + required: true + +permissions: + contents: read + +concurrency: + group: publish-model-${{ github.ref }} + cancel-in-progress: false + +jobs: + route: + runs-on: ubuntu-latest + outputs: + enabled: ${{ steps.route.outputs.enabled }} + product: ${{ steps.route.outputs.product }} + module: ${{ steps.route.outputs.module }} + tag: ${{ steps.route.outputs.tag }} + steps: + - uses: actions/checkout@v6 + with: + persist-credentials: false + - id: route + env: + RELEASE_PRODUCT: ${{ inputs.product }} + run: python3 dev/release_route.py models + + prepare: + env: + RELEASE_MODULE: ${{ needs.route.outputs.module }} + needs: route + if: needs.route.outputs.enabled == 'true' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + with: + persist-credentials: false + - uses: astral-sh/setup-uv@v8.1.0 + - run: uv venv --python 3.13 .venv-release + - run: uv pip install --python .venv-release/bin/python numpy pillow + - name: Build pinned candidate + run: | + .venv-release/bin/python -m ${RELEASE_MODULE}.prepare_candidate \ + --source "$RUNNER_TEMP/model-inputs" --output "$RUNNER_TEMP/candidate" --download + - name: Qualify exact installed artifacts + run: .venv-release/bin/python -m ${RELEASE_MODULE}.qualify_candidate "$RUNNER_TEMP/candidate" + - name: Stage public files + run: | + .venv-release/bin/python -m ${RELEASE_MODULE}.publication_assets \ + "$RUNNER_TEMP/candidate" --output "$RUNNER_TEMP/publication" + - uses: actions/upload-artifact@v4 + with: + name: model-candidate + path: ${{ runner.temp }}/candidate/ + if-no-files-found: error + retention-days: 30 + - uses: actions/upload-artifact@v4 + with: + name: model-publication + path: ${{ runner.temp }}/publication/ + if-no-files-found: error + retention-days: 30 + + package: + env: + RELEASE_MODULE: ${{ needs.route.outputs.module }} + RELEASE_PRODUCT: ${{ needs.route.outputs.product }} + needs: [route, prepare] + if: github.event_name == 'release' && !github.event.release.prerelease + runs-on: ubuntu-latest + environment: pypi-model-${{ needs.route.outputs.product }} + permissions: + id-token: write + contents: read + steps: + - uses: actions/download-artifact@v4 + with: + name: model-candidate + path: candidate/ + - run: cd candidate && sha256sum --check SHA256SUMS + - uses: astral-sh/setup-uv@v8.1.0 + - name: Require the intended training dependency to be public first + run: | + python3 - <<'PYTHON' + import json, urllib.request + from pathlib import Path + package = json.loads(Path('candidate/release-candidate.json').read_text())['training_distribution'] + with urllib.request.urlopen(f"https://pypi.org/pypi/{package['name']}/{package['version']}/json") as response: + metadata = json.load(response)['info'] + assert metadata['project_urls']['Repository'] == 'https://github.com/asgersvenning/mini_trainer' + PYTHON + - name: Publish deployment package only + run: uv publish --trusted-publishing always --check-url https://pypi.org/simple/ candidate/dist/"${RELEASE_PRODUCT//-/_}"-*.whl candidate/dist/"${RELEASE_PRODUCT//-/_}"-*.tar.gz + + assets: + env: + RELEASE_MODULE: ${{ needs.route.outputs.module }} + RELEASE_TAG: ${{ needs.route.outputs.tag }} + needs: [route, package] + runs-on: ubuntu-latest + environment: model-assets-${{ needs.route.outputs.product }} + permissions: + id-token: write + contents: write + steps: + - uses: actions/checkout@v6 + with: + persist-credentials: false + - uses: actions/download-artifact@v4 + with: + name: model-publication + path: publication/ + - uses: astral-sh/setup-uv@v8.1.0 + - run: uv venv --python 3.13 .venv-release + - run: uv pip install --python .venv-release/bin/python numpy pillow 'huggingface-hub>=1.19,<2' + - name: Publish GitHub assets without replacing existing files + env: + GH_TOKEN: ${{ github.token }} + GH_REPOSITORY: ${{ github.repository }} + run: .venv-release/bin/python -m ${RELEASE_MODULE}.publish_assets github publication/github "$GH_REPOSITORY" --tag "$RELEASE_TAG" + - name: Publish model and immutable Hugging Face revision + env: + HF_MODEL_REPO: ${{ vars.HF_MODEL_REPO }} + HF_OIDC_RESOURCE: ${{ vars.HF_MODEL_REPO }} + shell: bash + run: | + : "${HF_MODEL_REPO:?Set the repository variable in this GitHub environment}" + HF_TOKEN="$(.venv-release/bin/hf auth token)" + test -n "$HF_TOKEN" + echo "::add-mask::$HF_TOKEN" + export HF_TOKEN + .venv-release/bin/python -m ${RELEASE_MODULE}.publish_assets model publication/model "$HF_MODEL_REPO" + + demo: + env: + RELEASE_MODULE: ${{ needs.route.outputs.module }} + needs: [route, assets] + runs-on: ubuntu-latest + concurrency: + group: deploy-space-${{ needs.route.outputs.product }} + cancel-in-progress: false + environment: model-demo-${{ needs.route.outputs.product }} + permissions: + id-token: write + contents: read + steps: + - uses: actions/checkout@v6 + with: + persist-credentials: false + - uses: actions/download-artifact@v4 + with: + name: model-publication + path: publication/ + - uses: astral-sh/setup-uv@v8.1.0 + - run: uv venv --python 3.13 .venv-release + - run: uv pip install --python .venv-release/bin/python numpy pillow 'huggingface-hub>=1.19,<2' + - name: Deploy the reviewed Space + env: + HF_SPACE_REPO: ${{ vars.HF_SPACE_REPO }} + HF_OIDC_RESOURCE: spaces/${{ vars.HF_SPACE_REPO }} + shell: bash + run: | + : "${HF_SPACE_REPO:?Set the repository variable in this GitHub environment}" + HF_TOKEN="$(.venv-release/bin/hf auth token)" + test -n "$HF_TOKEN" + echo "::add-mask::$HF_TOKEN" + export HF_TOKEN + .venv-release/bin/python -m ${RELEASE_MODULE}.publish_assets space publication/space "$HF_SPACE_REPO" diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 356cce5..7fece5f 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -1,27 +1,70 @@ -name: "Publish to PyPi" +name: Publish training package on: push: - tags: - # Publish on any tag starting with a `v`, e.g., v0.1.0 - - v* + branches: ["release/packages/**"] + release: + types: [published] + workflow_dispatch: + +permissions: + contents: read + +concurrency: + group: publish-training-${{ github.ref }} + cancel-in-progress: false jobs: - run: + route: + runs-on: ubuntu-latest + outputs: + enabled: ${{ steps.route.outputs.enabled }} + product: ${{ steps.route.outputs.product }} + module: ${{ steps.route.outputs.module }} + tag: ${{ steps.route.outputs.tag }} + steps: + - uses: actions/checkout@v6 + with: + persist-credentials: false + - id: route + run: python3 dev/release_route.py packages + + prepare: + needs: route + if: needs.route.outputs.enabled == 'true' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + with: + persist-credentials: false + - uses: astral-sh/setup-uv@v8.1.0 + - run: uv python install 3.13 + - name: Qualify and retain the wheel + run: WHEEL_OUTPUT_DIR="$PWD/dist" bash dev/check-wheel.sh 3.13 + - run: uv build --sdist --out-dir dist + - name: Record artifacts + run: sha256sum dist/* > dist/SHA256SUMS + - uses: actions/upload-artifact@v4 + with: + name: training-distributions + path: dist/ + if-no-files-found: error + + publish: + needs: [route, prepare] + if: github.event_name == 'release' && !github.event.release.prerelease runs-on: ubuntu-latest - environment: - name: pypi + environment: pypi-training permissions: id-token: write contents: read steps: - - name: Checkout - uses: actions/checkout@v6 - - name: Install uv - uses: astral-sh/setup-uv@v8.1.0 - - name: Install Python 3.14 - run: uv python install 3.14 - - name: Build - run: uv build - - name: Publish - run: uv publish \ No newline at end of file + - uses: actions/download-artifact@v4 + with: + name: training-distributions + path: dist/ + - name: Verify qualified artifact bytes + run: sha256sum --check dist/SHA256SUMS + - uses: astral-sh/setup-uv@v8.1.0 + - name: Publish qualified distributions + run: uv publish --trusted-publishing always --check-url https://pypi.org/simple/ dist/*.whl dist/*.tar.gz diff --git a/.gitignore b/.gitignore index 4845e96..f4201c1 100644 --- a/.gitignore +++ b/.gitignore @@ -32,3 +32,4 @@ examples/test.ipynb /local-evidence/ /.worktrees/ /.venv +/.venv-mambo-runtime/ diff --git a/AGENTS.md b/AGENTS.md index 40f50e1..a5bedcc 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -27,6 +27,26 @@ ## Priorities +Prioritize the user's intended outcome and recurring integration effort when +choosing fixes. For diagnosis and experiment selection, follow +[the contribution guidance](.agents/rules/code-contribution.md#choosing-fixes-and-experiments). + +### Release branch scope + +On `release/mambo-v3`, restrict direct work to the MAMBO release: deployment +assets and adapters, presets, packaging, release documentation, and the associated +compatibility and quality/performance qualification. Follow +[the release roadmap](docs/ucloud-model-release-roadmap.md). + +Do not implement fixes or refactors to the shared core module on this branch. +Develop required core changes on a dedicated feature/fix branch or `master`, +validate them there, then merge the reviewed commits into the release branch and +validate the affected combined behavior. Release pressure does not override this +boundary. Existing feature-branch export work must follow the same integration +path; do not copy it into new direct core commits on the release branch. + +### Repository priorities + Follow the order in `docs/roadmap.md`: development safeguards; behavior-preserving simplification; ONNX export and Hugging Face packaging; training efficiency; `mini_metrics` and continuous evaluation; additional dataset formats. @@ -52,6 +72,18 @@ Complete a bounded, validated increment before moving to the next priority. - Slow backbone tests require `RUN_SLOW_TESTS=1` and may need model downloads. The compatibility runner can update the backbone blacklist; use it only when that mutation is part of the task. +- Be economical with validation: choose the smallest set of checks that covers the + changed behavior and credible regressions, while satisfying the requirements above. + Before an expensive suite or benchmark, identify the unresolved question it answers. +- Reuse passing evidence for unchanged code and environments. Batch related edits + before expensive checks; do not rerun the same suite for documentation changes or + automatically repeat focused checks already covered by a passing broader run. + Repeat or broaden checks when new changes, failures, integration conflicts or a + concrete unresolved risk justify it, not merely for additional reassurance. +- Add tests for meaningful behavior and failure modes, not assertions that mirror + implementation details or low-impact presentation changes. Prefer existing + coverage and a focused browser/manual check where appropriate. Keep required CI + gates intact; report the limits of focused validation rather than implying full coverage. - Report checks run, failures, skips, and limits honestly. Do not weaken checks or alter expected results merely to make a refactor pass. diff --git a/README.md b/README.md index f9f1d8b..f502020 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,9 @@ This is an attempt to create a minimal extendable framework for development and research on classification models. +For the MAMBO model release candidate, see the [local deployment guide](deployment/README.md) +for PyTorch/ONNX inference, regional presets, custom class lists and embeddings. + All code in `mini_trainer` should follow the following core principles: * Keep core dependencies minimal (see `pyproject.toml` for the current set); third-party integrations should remain optional. @@ -16,71 +19,68 @@ All code in `mini_trainer` should follow the following core principles: * All hyperparameters and system configuration should have smart defaults that are as general as possible * All functionality should be extendable to custom model architectures, loss functions, training regimes, data formats etc. -# Installation +## Find your workflow + +| Task | Start here | +| --- | --- | +| Integrate the MAMBO release candidate | [Deployment API and CLI](deployment/README.md) | +| Prepare data or adapt an example | [Examples](examples/README.md) | +| Change the trainer or run checks | [Development guide](dev/README.md), [test map](tests/README.md) | +| Compare models, backends or training settings | [Benchmarks](dev/benchmarks/README.md) | +| Run on UCloud or reproduce research | [UCloud](dev/ucloud/README.md), [research experiments](publication/experiments/README.md) | +| Choose the next development task | [Roadmap](docs/roadmap.md) | + +## Installation -We recommend using `uv` for package and environment management. +Use [uv](https://docs.astral.sh/uv/getting-started/installation/) for environment +and package management. Choose a published package or a source checkout. -> See [Install uv](https://docs.astral.sh/uv/getting-started/installation/) for instructions. +### PyPI -## PyPi +The distribution is `mt-trainer`; Python imports remain `mini_trainer`. +The similarly named `mini-trainer` / `mini_trainer` PyPI project is unrelated. ```bash -# Recommended installation (includes logging, visualization, and optional utilities) -uv pip install "mini_trainer[recommended]" --torch-backend=auto -# or standard pip -pip install "mini_trainer[recommended]" - -# Installation with all features (timm, transformers, BioCLIP, etc.) -uv pip install "mini_trainer[all]" --torch-backend=auto -# or standard pip -pip install "mini_trainer[all]" - -# Minimal installation (core training & inference loop only) -uv pip install mini_trainer --torch-backend=auto -# or standard pip -pip install mini_trainer +uv venv --python 3.12 +source .venv/bin/activate +uv pip install "mt-trainer[recommended]" --torch-backend=auto ``` -## Local Installation +| Package choice | Includes | +| --- | --- | +| `mt-trainer` | Core training and inference | +| `mt-trainer[recommended]` | Core plus logging, visualization and optional utilities | +| `mt-trainer[all]` | Recommended extras plus notebooks, model backends and ONNX export | -```bash -git clone ssh://git@github.com:asgersvenning/mini_trainer.git -cd mini_trainer +Substitute the desired package in the install command. Standard `pip install` also +works; select its PyTorch CPU/CUDA installation separately for your environment. -# Sync with recommended extras: -uv sync --extra recommended --extra [cpu/cu126/cu130/cu132] +### Local installation -# Or sync with all features (timm, transformers, BioCLIP): -uv sync --extra all --extra [cpu/cu126/cu130/cu132] +Choose one backend: `cpu`, `cu126`, `cu130` or `cu132`. The example selects CUDA 13.0; +change `TORCH_BACKEND` to match your intended environment before synchronizing. +```bash +git clone https://github.com/asgersvenning/mini_trainer.git +cd mini_trainer +TORCH_BACKEND=cu130 +uv sync --extra recommended --extra "$TORCH_BACKEND" source .venv/bin/activate ``` -> [!TIP] -> We highly recommend installing `torch` and `torchvision` with native CUDA support via either `uv sync ... --extra [cpu/cu126/cu130/cu132]` or `uv pip install ... --torch-backend=auto`, **and** crucially running scripts or tools associated with your `uv` virtual environment by **activating the venv:** -> ```bash -> source .venv/bin/activate -> ``` -> Using `uv run ...` is likely to automatically install CUDA-incompatible wheels. If you really want to use `uv run`, we suggest using the `--no-sync` flag every time. -> Note that if you are *"lucky"* you might have the default CUDA version on your system, meaning that `uv run` might in fact use the correct wheels. This is, however, not guaranteed. +Replace `recommended` with `all` for the additional backends/export tools above. +Activate the environment, use its executables directly, or use `uv run --no-sync`. +An implicit sync can replace the deliberately selected PyTorch backend. Select the +backend explicitly whenever installing or synchronizing dependencies. ## Data loading on shared machines -Automatic DataLoader worker selection uses the CPUs available to the process when -the OS exposes that information, including CPU affinity. It reserves four CPUs, -rounds down to an even worker count, and caps workers at 16 for training and 32 for -prediction. For example, an 8-CPU affinity limit selects four workers, even on a -larger shared machine. Four or fewer available CPUs selects zero workers. - -Set `--num_workers 2` to choose a count explicitly, or `--num_workers 0` to load in -the main process. CUDA-cached datasets always use zero DataLoader workers. -RAM-cache preloading uses a separate thread pool that also respects process CPU -availability, reserves two CPUs, and uses between 1 and 128 threads. - -Affinity does not describe all container CPU quotas or competition from other jobs. -If an allocation shares an unrestricted CPU set, choose a conservative explicit -worker count per training process. `--num_workers` does not control RAM-cache -preloading; use uncached loading when you need that explicit bound. +Defaults use process CPU availability, affinity, visible cgroup quotas and Slurm +allocation limits. Shared resources may still need an explicit per-process budget. +Set `--num_workers N` for loading (`0` runs in the main process), and +`--cache-workers N` for training-cache preparation. CUDA-cached datasets use zero +DataLoader workers. See [automatic budgets](dev/README.md#automatic-cpu-budgets) +for caps and fallback behavior; cache readers and DataLoader workers are separate. ## Weights & Biases Integration @@ -112,7 +112,7 @@ Feel free to contribute, but here are a few tips: Repository agents should start with [AGENTS.md](AGENTS.md). Planned improvements and their acceptance criteria are tracked in the [roadmap](docs/roadmap.md). -The quantization branch has a focused [bottleneck and handoff roadmap](docs/quantization-roadmap.md). +Remaining quantization work has a focused [target-qualification roadmap](docs/quantization-roadmap.md). ## ONNX export diff --git a/ddp/README.md b/ddp/README.md index ea53b65..6c4bfba 100644 --- a/ddp/README.md +++ b/ddp/README.md @@ -1,26 +1,22 @@ -# Using mini_trainer with DDP +# Distributed training launchers -`mini_trainer` has support for DDP training (and potentially inference in the future), here we include some helpful scripts for launching training jobs with DDP in two scenarios: +The trainer accepts torchrun or Slurm rank variables and selects NCCL for CUDA, +Gloo for CPU. These launchers are machine-specific examples. First select and +activate the environment using the [installation guide](../README.md#local-installation). -1. Dual NVIDIA DGX Spark with a direct QSFP connection: [./spark.sh](./spark.sh) -2. SLURM: [./slurm.sh](./slurm.sh) +- [Slurm](slurm.sh): adapt the allocation (currently two nodes, eight GPUs each), + reachable master address and training paths to your cluster, then submit with `sbatch`. +- [Dual DGX Spark](spark.sh): assumes one GPU per node, interface `enp1s0f1np1`, + an SSH worker alias and Python at `/.venv/bin/python`. It requires sudo, + exports the checkout and `~/.cache` over NFS, and mounts them on the worker. + Its cleanup uses a broad remote `pkill -f torchrun` and lazy unmounts: use only + on dedicated nodes where those processes and mounts belong to this run. -Our DDP support is currently limited to NCCL. - -## Launching dual DGX Spark +From the checkout root, with the environment active and training images available: ```sh -uv -qq run bash ../../ddp/spark.sh -w spkc \ - -m mini_trainer.train -i train -o . \ - --name mnist_model \ - --model efficientnet_b0 \ - --batch_size 256 \ - --epochs 5 \ - --warmup_epochs 1 \ - --lr 0.01 \ - --class_weighted \ - --size 27 \ - --cache CUDA \ - --output . \ - --verbose -``` \ No newline at end of file +bash ddp/spark.sh -w spkc -m mini_trainer.train -i /path/to/train -o /path/to/output +``` + +[nccl_sanity_check.py](nccl_sanity_check.py) is an optional torchrun diagnostic: +GPU/version telemetry and a 256 MiB all-reduce timing, separate from training speed. diff --git a/ddp/spark.sh b/ddp/spark.sh index d1fd969..e8b3f02 100644 --- a/ddp/spark.sh +++ b/ddp/spark.sh @@ -2,7 +2,7 @@ usage() { cat << EOF -Usage: uv run bash launch.sh -w [script arguments...] +Usage: bash ddp/spark.sh -w [arguments...] A launcher for two-node PyTorch Distributed Data Parallel (DDP) training over RoCE/NFS. @@ -10,7 +10,7 @@ Required Arguments: -w The SSH alias for the worker node (must exist in ~/.ssh/config) Example: - uv run bash launch.sh -w spkc -m mini_trainer.train -i train -o . --batch_size 32 + bash ddp/spark.sh -w spkc -m mini_trainer.train -i train -o . --batch_size 32 EOF exit 1 } @@ -62,7 +62,7 @@ fi # 3. Resolve the Python executable PYTHON_EXEC=$(command -v python) if [[ -z "$PYTHON_EXEC" ]]; then - echo "[Error] Could not resolve Python executable. Are you running via 'uv run'?" + echo "[Error] Could not resolve Python executable. Activate the checkout .venv first." exit 1 fi diff --git a/deployment/CITATION.cff b/deployment/CITATION.cff new file mode 100644 index 0000000..1567f08 --- /dev/null +++ b/deployment/CITATION.cff @@ -0,0 +1,10 @@ +cff-version: 1.2.0 +message: "Please cite this release when using MAMBO V3 and identify the selected preset and runtime configuration." +title: "MAMBO V3: hierarchical moth and butterfly image classification" +type: software +authors: + - family-names: Svenning + given-names: Asger +version: 0.3.0 +repository-code: "https://github.com/asgersvenning/mini_trainer" +url: "https://github.com/asgersvenning/mini_trainer/releases/tag/MAMBO_v3" diff --git a/deployment/LICENSE b/deployment/LICENSE new file mode 100644 index 0000000..21c376c --- /dev/null +++ b/deployment/LICENSE @@ -0,0 +1,7 @@ +Copyright 2026 Asger Svenning + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/deployment/README.md b/deployment/README.md new file mode 100644 index 0000000..b7c4a26 --- /dev/null +++ b/deployment/README.md @@ -0,0 +1,235 @@ +# MAMBO V3 deployment + +Identify moths and butterflies from images, with species, genus and family +predictions. V3 adds a standalone ONNX option alongside PyTorch: **no training +package or GPU is needed for ONNX/CPU**. Both backends use the same API, regional +lists and output format. The comparisons below show quality and speed against V2, +including CPU, laptop GPU and server GPU measurements. + +**Weights: [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/) +(non-commercial, share-alike). Adapter code: MIT.** +[Model notices](../dev/releases/mambo_v3/NOTICES.md) explain attribution and scope. + +Model files download automatically from public ERDA storage on first use and are +verified and cached. Reuse one predictor across calls. + +[Package](https://pypi.org/project/mambo-v3/) · [Model card and weights](https://huggingface.co/asgersvenning/MAMBO-v3) · +[Try one image](https://huggingface.co/spaces/asgersvenning/MAMBO-v3) · [Citation](CITATION.cff) + +## Quick start + +Create an environment, or use your application's existing environment. Python 3.12+ +is required. Install ONNX/CPU to start without a CUDA setup: + +```sh +uv venv --python 3.13 .venv +source .venv/bin/activate # Windows PowerShell: .venv\Scripts\Activate.ps1 +uv pip install 'mambo-v3[onnx]==0.3.0' +``` + +**Python** — supply images directly: + +```python +from mambo_deploy import Predictor + +predictor = Predictor() # Global species list, ONNX, CPU +result = predictor.predict(["moth.jpg", "butterfly.jpg"]) +print(result[0].label) # (species_id, genus_id, family_id) +print(result[0].confidence) # confidence for each of those ranks +records = result.to_dict() # list of JSON-serializable records for your application +``` + +**CLI** — the same defaults, for files or a directory: + +```sh +mambo_predict -i ./images -o ./output --name predictions +``` + +This creates `output/predictions/predictions.json` and `mini_metric.csv`; +`--embeddings` also writes `embeddings.npy`. Choose a new output name for each run. +For a one-off command without installing into your application environment, replace +`mambo_predict` with +`uvx --from 'mambo-v3[onnx]==0.3.0' mambo_predict`. + +| Interface | Inputs | Outputs | +|---|---|---| +| Python `predict(images)` | A path, PIL image, CHW array/tensor, or collection of these; BCHW batches also work. Original pixels: uint8 or floats in [0,1]. | One result per image, in input order. `label`, `confidence`, `index` have species/genus/family order; labels are GBIF taxon IDs as strings. `to_dict()` produces ordinary Python records; `save(path)` writes JSON. | +| Python `predict_with_embeddings(images)` | Same inputs. | `(result, vectors)`; vectors are a float32 NumPy array `[N,1280]` with unit-length rows. | +| CLI `-i` | One or more image files or directories, searched recursively. | JSON contains `results`, `metadata` and `config`; each result has `label`, `confidence`, `index`. CSV has one row per image/rank for evaluation. | + +For an RGB HWC NumPy image, pass `image.transpose(2, 0, 1)`; convert OpenCV BGR to +RGB first. Do not resize or normalize images yourself. Alpha is discarded and EXIF +orientation is not applied. `topk` cannot exceed the smallest retained rank; narrow custom lists may require `topk=1`. +Predictions at each rank are independent, so the three +IDs need not form one ancestral path. CSV truth labels are inferred from parent +folder names; arbitrary image folders do not supply evaluation ground truth. + +## Choose the configuration that matters + +**Start with the defaults; select a regional preset when your location is known.** ONNX/CPU is the +simplest dependency footprint and a useful starting point for CPU-only and edge +applications. For NVIDIA GPU throughput, use PyTorch if it fits your environment, +or ONNX/CUDA to keep the training package out of your application. +[Runtime installation and offline use](../docs/mambo-integration.md) covers these +alternatives. Changing runtime does not change the input/output contract. + +**Enable `tta=True` / `--tta` for monitoring images when the quality gain below is +worth roughly 3× lower throughput.** Keep the default recipe. Its benefit is +image-domain dependent; the general-photograph comparison below provides context. + +Keep `precision="auto"`. Increase `batch_size` only when processing enough images +to benefit; reduce it if memory is tight. Adjust CPU workers only if needed to meet +your application's throughput or CPU budget. Request embeddings or extra candidates +only when your workflow uses them. No server, dataset metadata or training setup is +required. + +Pass API settings to `Predictor(...)`, except the prediction methods shown below. +CLI flags apply to `mambo_predict`. + +| Python API | CLI | Default | Role / main trade-off | +|---|---|---|---| +| `model=`, `class_list=` | `--model`, `--class-list` | `full` / no override | Eligible species; affects predictions and confidence. | +| `backend=`, `device=` | `--backend`, `--device` | `onnx`, `cpu` | Runtime and hardware: `onnx` or `torch`; `cpu` or `cuda:0`. | +| `tta=True` | `--tta` | Off | Quality versus throughput; enabling uses the recommended three-view recipe. | +| `batch_size=` | `--batch-size` | `8` | Images per model call: throughput versus memory. | +| `threads=` | `--threads` | `2` | ONNX CPU threads and default image-preparation workers; does not set PyTorch's model threads. | +| `preprocess_workers=` | `--preprocess-workers` | Follows `threads` | Image-preparation CPU allocation. | +| `precision=` | `--precision` | `auto` | Runtime-selected compute precision; normally leave unchanged. | +| `predict_with_embeddings(images)` | `--embeddings` | Off | Vectors for similarity/search or downstream features. | +| `predict(images, topk=k)` | `--topk k` | `1` | Candidates per rank; Python returns a list of candidates per image when `k > 1`. | +| CLI only | `--threshold` | `0` | Acceptance flag in the evaluation CSV; JSON predictions stay unfiltered. | + +### Geographic scope + +Use `predictor.available_presets()` to list choices, or read the +[preset catalogue](../docs/model-presets.md) for their exact scope and construction. +Presets include species that **can occur** in a region, including introduced +species; they are neither native-distribution maps nor exhaustive checklists. +Use `model="full"` if a regional restriction is inappropriate. + +`europe` and `north_europe` preserve the V2 lists. Updated `_v3` lists are also +available; legacy `north_europe` performed better on Flemming and is recommended +for comparable northern-European use. A custom `class_list=["GBIF_SPECIES_ID", ...]` +or UTF-8 file with one ID per line overrides the preset (`--class-list species.txt` +in the CLI). Unknown IDs and empty lists fail; duplicates are removed. + +### Large image collections + +Use streaming for a large collection of paths, consuming results as they arrive: + +```python +from contextlib import closing + +with closing(predictor.predict_stream(image_paths)) as batches: + for result in batches: + records = result.to_dict() + # Write records to your database, file or downstream service here. +``` + +Input order is preserved. Add `embeddings=True` to receive `(result, vectors)` pairs. +For in-memory inputs, split large collections into smaller `predict()` requests; +that method retains results for the whole request. The CLI writes results batch by +batch. `batch_size` limits model calls, not total request memory. +[Streaming controls](../docs/mambo-integration.md#streaming-controls) are available +if the defaults do not fit your workload. + +## Changes from MAMBO V2 + +- **Installation:** use `mambo-v3` (Python import `mambo_deploy`). Its maintenance + releases retain the V3 trained model; pin the package version for reproducible + builds. Keep V2 or older deployment candidates in a separate environment. +- **Defaults:** global (`full`) scope and ONNX/CPU. Select `europe` or `north_europe` + to retain the V2 lists. Native CLI workflows must specify + `--backend torch --device cuda:0`; only the deployment package installs `mambo_predict`. +- **Existing Python callers:** `mini_trainer.deploy.Predictor` retains native/CUDA + defaults, callable prediction, `class_mask` and native result containers. Install + both release wheels. New integrations can use `mambo_deploy` for CPU results + independent of backend; both entry points download model assets automatically. +- **Model and features:** EfficientNetV2-S, ONNX, expanded presets, optional TTA and + streaming. Supply original pixels and match classes by GBIF ID rather than numeric + index. V2 and V3 share the ordered taxon vocabulary. Scores and embedding width change; thresholds and + stored embeddings need migration. + +[Migration details](../docs/mambo-integration.md#moving-from-v2) cover compatibility +boundaries; [versioning](../docs/mambo-integration.md#versioning-and-model-identity) +explains how package, model and preset identities relate. + +### Beyond Python + +The ONNX assets also provide a path to local browser inference with +[ONNX Runtime Web](https://onnxruntime.ai/docs/tutorials/web/deploy.html), where +images can be processed on the user's device. Existing browser work is recorded +in the [release roadmap](../docs/ucloud-model-release-roadmap.md#located-production-artifacts-and-existing-browser-work). +This Python release does not ship a browser SDK: preprocessing, external weights +and browser/runtime support still need integration. The same local API or CLI can +be embedded in desktop applications, batch jobs and services without a hosted +prediction service. + +## Release comparison + +These results help choose TTA and runtime; they do not establish accuracy in every +region. All models use legacy northern Europe on the same 52,788 Flemming reporting +images, including out-of-vocabulary truth. `mini_metrics` selects calibrated +thresholds per pipeline/rank on 5,852 separate images. Recipe exploration used +Flemming too, so this is descriptive evidence, not independent validation. + +The quality figure compares **unthresholded and calibrated predictions**, with +full-support and support >5 macro metrics alongside acceptance coverage. TTA uses +`rotation30_pad25_3`; its quality gain comes at the throughput cost shown below. + +![Species, genus and family quality: full and truncated support, both confidence settings, and coverage](../docs/assets/mambo-promoted-quality.svg) + +Support >5 requires more than five truth instances and accepted predictions in +every compared pipeline. Truth classes outside that average account for +15.30% / 0.42% / 0.01% of images at species/genus/family without thresholds, +and 18.95% / 11.21% / 0.03% after calibration. No evaluation rows are discarded; +the averaging class sets differ between confidence settings. Full-support metrics +retain rare and predicted-only classes, which can change model rankings. + +Measured **images/second**, end to end, on an i7-12800H / RTX 3080 Ti Laptop with +four preparation/runtime threads. V3 uses automatic precision; compare on your own +hardware before choosing a batch size. These laptop measurements predate the latest +pipeline improvements and remain a consumer-hardware baseline. + +![CPU and GPU throughput by batch size, including the new TTA default](../docs/assets/mambo-promoted-speed.svg) + +On this laptop, ONNX is faster on CPU; native PyTorch benefits more from larger +GPU batches. TTA improves quality but reduces throughput, so enable it according +to your accuracy and processing-budget requirements. + +The [complete evidence reference](../docs/mambo-deployment-evidence.md) retains +exact metric tables, calibrated thresholds, timing ranges and limitations. + +### Complementary in-domain and HPC results + +The original global-lepi test split adds a comparison on general photographs using +the global vocabulary. It complements Flemming's deployment-relevant monitoring +crops; the image domains and class lists differ, so their absolute scores should +not be compared as a controlled domain-effect estimate. The same `mini_metrics` +calibration/support policy uses 568,939 reporting images and 63,974 separate +calibration images, with both confidence settings evaluated on the reporting split. + +![In-domain quality at all ranks, with calibration, support truncation and coverage](../docs/assets/mambo-indomain-quality.svg) + +V3 improves in-domain performance over V2. The Flemming-selected TTA recipe reduces +in-domain performance, illustrating that its benefit depends on the input domain; +this does not override its benefit on the more deployment-relevant Flemming crops. +Support >5 changes the class average, not the evaluation rows. Truth classes outside +that average represent 1.70% / 0.34% / <0.01% of species/genus/family images without +thresholds, and 1.88% / 0.38% / <0.01% after calibration. Thresholds and complete +metrics are in the [in-domain evidence](../docs/mambo-indomain-evidence.md). + +![EPYC CPU and B200 request throughput, with updated B200 streaming measurements](../docs/assets/mambo-hpc-current-speed.svg) + +The server comparison retains CPU, GPU request and GPU streaming throughput in +**images/second**. B200 batch-256 values are updated: PyTorch reaches **1,976 images/s** +and ONNX **997 images/s** when streaming, or **624 and 396** with TTA. CPU, V2 and +smaller-batch results retain their earlier measurements; new request points are +shown separately rather than joined to older scaling curves. These are measured +application rates, not a promise of GPU saturation. + +[Timing details and provenance](../docs/mambo-hpc-evidence.md) record measurement +settings, memory and repeat ranges. Keep the laptop comparison above when choosing +for consumer devices. ONNX's CPU advantage and independence from the training +package make it especially relevant when a GPU or the full PyTorch stack is not +an option; PyTorch remains the faster GPU choice in these measurements. diff --git a/deployment/demo/.gitignore b/deployment/demo/.gitignore new file mode 100644 index 0000000..c18dd8d --- /dev/null +++ b/deployment/demo/.gitignore @@ -0,0 +1 @@ +__pycache__/ diff --git a/deployment/demo/README.md b/deployment/demo/README.md new file mode 100644 index 0000000..e611a52 --- /dev/null +++ b/deployment/demo/README.md @@ -0,0 +1,41 @@ +--- +title: MAMBO V3 +emoji: 🦋 +colorFrom: green +colorTo: blue +sdk: gradio +sdk_version: "6.28.0" +python_version: "3.13" +app_file: app.py +models: + - asgersvenning/MAMBO-v3 +suggested_hardware: cpu-basic +tags: + - image-classification + - biodiversity + - onnx +license: mit +--- + +# MAMBO V3 demonstration + +One image, configurable runtime, geographic/custom class list, TTA and hierarchical +predictions. The Space uses the release API on CPU and caches one predictor per backend +(two in total), reusing loaded runtimes when scope or TTA changes. It does not require GPU hosting. First predictions include loading. + +Uploaded images are processed on the server. Gradio's temporary upload cache is +cleaned every five minutes for files older than five minutes; the application does +not save images, collect feedback or use uploads for training. Do not upload +sensitive images. Prediction requests are serialized and the queue is bounded. + +The application code is MIT. Model weights are **CC BY-NC-SA 4.0**. See the +[release documentation](https://github.com/asgersvenning/mini_trainer/blob/MAMBO_v3/deployment/README.md) +for integration, comparisons and limitations. Readable names are displayed when +provided in the accompanying `taxon-names.json`; GBIF IDs remain authoritative. +This snapshot covers all 17,212 released taxa and is reconstructed from the pinned +global-lepi metadata by `dev/releases/mambo_v3/prepare_names.py`. Each ID uses its +most frequent metadata name (lexical tie-break); species names combine genus and +specific epithet. These are display names, not a new taxonomy or class mapping. + +The release workflow stages this directory with pinned dependency requirements +and optional taxon names. It uploads only that staged directory, not the repository. diff --git a/deployment/demo/app.py b/deployment/demo/app.py new file mode 100644 index 0000000..2ff2ff7 --- /dev/null +++ b/deployment/demo/app.py @@ -0,0 +1,113 @@ +"""Single-image Space using the published MAMBO deployment API.""" + +import json +import os +import threading +import time +from functools import lru_cache +from pathlib import Path + +os.environ.setdefault("GRADIO_ANALYTICS_ENABLED", "False") + +import gradio as gr # noqa: E402 +from mambo_deploy import Predictor # noqa: E402 + +# Serial requests keep cached runtimes bounded and avoid competing CPU inference. +LOCK = threading.Lock() +NAMES_PATH = Path(__file__).with_name("taxon-names.json") +NAMES = json.loads(NAMES_PATH.read_text()) if NAMES_PATH.exists() else {} + + +@lru_cache(maxsize=2) +def predictor_for(backend): + if backend == "torch": + import torch + + torch.set_num_threads(2) + return Predictor(backend=backend, batch_size=1, threads=2) + + +def classify(image, backend, preset, custom, tta, topk): + if image is None: + raise gr.Error("Upload one moth or butterfly image first.") + custom = custom or "" + labels = tuple(dict.fromkeys(custom.replace(",", " ").split())) if custom.strip() else () + try: + with LOCK: + predictor = predictor_for(backend) + predictor.configure(class_list=labels, tta=tta) if labels else predictor.configure(model=preset, tta=tta) + # The API returns one common K for all retained ranks. + available = min(map(len, predictor.hierarchy_plan(predictor.selected).labels)) + effective_k = min(int(topk), available) + started = time.perf_counter() + result = predictor.predict(image, topk=effective_k) + elapsed = time.perf_counter() - started + tables = [] + for rank in range(3): + tables.append( + [ + [ + k + 1, + NAMES.get(result.labels[0][k][rank], ""), + result.labels[0][k][rank], + round(float(result.confidence[0, k, rank]) * 100, 2), + ] + for k in range(effective_k) + ] + ) + scope = "custom class list" if labels else preset + details = ( + f"**{backend} · CPU · {scope} · TTA {'on' if tta else 'off'}** \n" + f"Prediction: **{elapsed:.2f} s** (includes model loading on first use; not a throughput benchmark)." + ) + if effective_k != int(topk): + details += f" Showing top-{effective_k}: the smallest retained rank has {available} classes." + return *tables, details + except (ValueError, RuntimeError, OSError, ImportError) as error: + raise gr.Error(str(error)) from error + + +def build_app(): + presets = Predictor().available_presets() + with gr.Blocks(title="MAMBO V3", delete_cache=(300, 300)) as app: + gr.Markdown( + "# MAMBO V3\nIdentify moths and butterflies at species, genus and family level. " + "Images are processed on this server. Uploads are temporary and are not used for training. " + "This classifies one individual; it does not detect animals or reliably reject unknown species." + ) + with gr.Row(): + image = gr.Image(type="pil", sources=["upload"], label="One individual", image_mode="RGB") + with gr.Column(): + backend = gr.Radio(["onnx", "torch"], value="onnx", label="Runtime") + preset = gr.Dropdown(list(presets), value="full", label="Geographic scope") + scope = gr.Markdown(presets["full"]["scope"]) + preset.change(lambda name: presets[name]["scope"], preset, scope, queue=False) + tta = gr.Checkbox(value=False, label="TTA — recommended recipe, about 3× more inference work") + topk = gr.Slider(1, 10, value=5, step=1, label="Candidates per rank") + with gr.Accordion("Custom species list", open=False): + custom = gr.Textbox(value="", label="GBIF species IDs, separated by spaces, commas or newlines", lines=3) + gr.Markdown("When supplied, this replaces the geographic preset.") + run = gr.Button("Classify", variant="primary") + status = gr.Markdown() + tables = [ + gr.Dataframe( + headers=["Rank", "Name", "GBIF taxon ID", "Confidence (%)"], + datatype=["number", "str", "str", "number"], + interactive=False, + label=rank, + ) + for rank in ("Species", "Genus", "Family") + ] + gr.Markdown( + "Ranks are predicted independently; the winning IDs need not form one ancestral path. " + "TTA helps the evaluated monitoring crops but can hurt on other image domains. " + "Weights: **CC BY-NC-SA 4.0**; adapter: MIT. " + "[Integration, evidence and limitations](https://github.com/asgersvenning/mini_trainer/" + "blob/MAMBO_v3/deployment/README.md)." + ) + run.click(classify, [image, backend, preset, custom, tta, topk], [*tables, status], concurrency_limit=1, api_name=False) + return app.queue(max_size=8, default_concurrency_limit=1) + + +if __name__ == "__main__": + build_app().launch(share=False, max_file_size="20mb", enable_monitoring=False, run_history=False) diff --git a/deployment/demo/requirements.txt b/deployment/demo/requirements.txt new file mode 100644 index 0000000..cf3372b --- /dev/null +++ b/deployment/demo/requirements.txt @@ -0,0 +1,5 @@ +--extra-index-url https://download.pytorch.org/whl/cpu +gradio==6.28.0 +mambo-v3[onnx,torch]==0.3.0 +torch==2.14.0+cpu +torchvision==0.29.0+cpu diff --git a/deployment/demo/taxon-names.json b/deployment/demo/taxon-names.json new file mode 100644 index 0000000..97ae5d8 --- /dev/null +++ b/deployment/demo/taxon-names.json @@ -0,0 +1,17214 @@ +{ + "10000103": "Eucosma raracana", + "10000384": "Lexias dirtea", + "10002059": "Taniva albolineana", + "10003902": "Chrysolarentia phaedra", + "10004820": "Aloa marginata", + "10004969": "Tephronia lhommaria", + "10005133": "Notonagemia analis", + "10005632": "Orthaga thyrisalis", + "10010361": "Acatapaustus mesoleuca", + "10010700": "Hesychopa chionora", + "10014340": "Actias dubernardi", + "10017342": "Quasithosea obliquistriga", + "10017524": "Scieropepla", + "10017792": "Antaeotricha albulella", + "10018221": "Maxates calaina", + "10019169": "Cerberonoton rubescens", + "10021059": "Meritastis pyrosemana", + "10022517": "Mellea ordinaria", + "10023049": "Meritastis piperata", + "10023115": "Ardozyga stratifera", + "10023821": "Heteropsis perspicua", + "10025997": "Psalidostetha", + "10026605": "Nola pycnopasta", + "10032003": "Dasygaster padockina", + "10033898": "Clemensia ochreata", + "10034831": "Leptosteges vestaliella", + "10038125": "Papilio rumiko", + "10042504": "Termessa shepherdi", + "10043566": "Amiga arnaca", + "10043827": "Lexias pardalis", + "10044107": "Eucosma ochrocephala", + "10045595": "Haplochrois bipunctella", + "10046436": "Metasia polytima", + "10046510": "Oxeoschistus tauropolis", + "10046698": "Cenopis diluticostana", + "10047346": "Saturnia pyretorum", + "10048667": "Chrysolarentia leucozona", + "10049887": "Endoxyla secta", + "10053130": "Philenora irregularis", + "10053809": "Gazoryctra mathewi", + "10054019": "Psilalcis isombra", + "10055104": "Mycalesis janardana", + "10055273": "Oinophila v-flava", + "10056494": "Phostria leucoplagialis", + "10058263": "Hypomecis agoraea", + "10058481": "Nymphicula queenslandica", + "10059034": "Forsterinaria necys", + "10062202": "Chrysolarentia mecynata", + "10062933": "Olepa ricini", + "10063383": "Autoba quadrapex", + "10063575": "Glycythyma leonina", + "10065676": "Salma cinerascens", + "10066605": "Nola bifascialis", + "10067382": "Korscheltellus gracilis", + "10068024": "Agrochola macilenta", + "10068544": "Laothus gibberosa", + "10069243": "Dichocrocis clytusalis", + "10071588": "Agrotera amathealis", + "10072380": "Microlithosia shaowuica", + "10072800": "Achyra nigrirenalis", + "10073044": "Epiblema strenuana", + "10073321": "Catagramma lyca", + "10074808": "Scoliacma nana", + "10075196": "Ariconias glaphyra", + "10075732": "Chrysolarentia perornata", + "10078453": "Pagyris cymothoe", + "10078526": "Bracca matutinata", + "10078800": "Nisista serrata", + "10080502": "Meritastis ursina", + "10083877": "Genduara acedesta", + "10084195": "Syncirsodes primata", + "10085335": "Epidesmia tryxaria", + "10087308": "Arhopala democritus", + "10088253": "Perigramma vicina", + "10088502": "Nola zaplethes", + "10089194": "Eccymatoge aorista", + "10090105": "Aethes sexdentata", + "10090168": "Alophosoma emmelopis", + "10094256": "Nygmia marginata", + "10094594": "Termessa gratiosa", + "10095278": "Eugnosta sartana", + "10096855": "Hypena isogona", + "10097687": "Satyrus swaha", + "10097776": "Targalla plumbea", + "10098436": "Polypogon kurokoi", + "10099906": "Agamana sarmentosa", + "10100176": "Hygrochroa torrefacta", + "10103570": "Therinia transversaria", + "10106345": "Anania tertialis", + "10106475": "Brunia replana", + "10107015": "Conchylodes nolckenialis", + "10108671": "Speiredonia obscura", + "10108753": "Psilopygida walkeri", + "10109201": "Epidesmia hypenaria", + "10113008": "Agrochola helvola", + "10113190": "Icaricia lupini", + "10114575": "Vanessa abyssinica", + "10114865": "Capronnieria galesus", + "10115073": "Disphragis biundata", + "10116946": "Cigaritis syama", + "10117959": "Conogethes pluto", + "10118643": "Chloridea virescens", + "10118678": "Scioglyptis chionomera", + "10118849": "Polyacme subpulchra", + "10120854": "Strymon astiocha", + "10121804": "Agape chloropyga", + "10129011": "Salma ebenina", + "10129812": "Eudyaria zeta", + "10132475": "Chrysolarentia chrysocyma", + "10132596": "Grapholita interstinctana", + "10132775": "Echydna punctata", + "10132811": "Phazaca interrupta", + "10134558": "Endoxyla liturata", + "10134865": "Eugnosta erigeronana", + "10137001": "Eucosma ornatula", + "10137350": "Satyrus enervata", + "10141437": "Patania iopasalis", + "10142569": "Macrorrhinia endonephele", + "10143814": "Anemosella viridalis", + "10145421": "Symmoracma minoralis", + "10146436": "Metrioglypha phyllodes", + "10146771": "Dissomorphia australiaria", + "10153630": "Conchylis vacuana", + "10154280": "Crioa hades", + "10155026": "Porela cinerea", + "10155932": "Chorodna strixaria", + "10156181": "Herpetogramma cynaralis", + "10156470": "Digama marmorea", + "10157400": "Praxis marmarinopa", + "10159697": "Caleta roxus", + "10161728": "Leucogonia cosmopis", + "10164453": "Arrade leucocosmalis", + "10165457": "Sciota basilaris", + "10165831": "Prochoreutis inflatella", + "10166724": "Gonitis involuta", + "10167252": "Hypobapta tachyhalotaria", + "10171108": "Parapoynx tenebralis", + "10174151": "Neoalbertia constans", + "10174909": "Eucyclodes insperata", + "10175639": "Protuliocnemis partita", + "10175914": "Papilio", + "10176413": "Gazoryctra novigannus", + "10176954": "Aricoris indistincta", + "10177276": "Chrysolarentia squamulata", + "10177508": "Eudonia rectilinea", + "10178326": "Bastilla arctotaenia", + "10179389": "Elophila icciusalis", + "10180624": "Pyrausta ignealis", + "10183056": "Nephelomilta karenkonis", + "10184940": "Syneora adelphodes", + "10185271": "Dichelia cosmopis", + "10187154": "Rectiostoma xanthobasis", + "10188228": "Luxiaria ochrophara", + "10189661": "Cechetra subangustata", + "10189965": "Oeonistis altica", + "10190647": "Pararguda albida", + "10191275": "Cechetra minor", + "10191785": "Herpetogramma fluctuosalis", + "10193618": "Craspedortha porphyria", + "10194663": "Ochrogaster lunifer", + "10194727": "Eucosma tomonana", + "10196441": "Acraea dicaeus", + "10196956": "Halone coryphoea", + "10199372": "Fisera hypoleuca", + "10201273": "Apatura ambica", + "10202439": "Ancyloxypha nitedula", + "10203260": "Vanessula milca", + "10203493": "Anaxidia lozogramma", + "10203499": "Ischyja marapok", + "10205587": "Henricus umbrabasana", + "10208422": "Phycomorpha prasinochroa", + "10208792": "Peridrome subfascia", + "10208801": "Vanessa terpsichore", + "10209845": "Parapoynx dentizonalis", + "10210935": "Cyclophora turneri", + "10211808": "Faveria tritalis", + "10213314": "Etanna breviuscula", + "10214972": "Feigeria herilia", + "10217455": "Smyriodes trigramma", + "10221195": "Eusarca asteria", + "10222583": "Lomera lurida", + "10224300": "Lipogya exprimataria", + "10225227": "Etanna clopaea", + "10227418": "Conogethes semifascialis", + "10228568": "Limenitis daraxa", + "10229731": "Acleris bowmanana", + "10236521": "Diedra cockerellana", + "10240592": "Bryophilopsis leucopolia", + "10244305": "Ancylosis ulmiarrosorella", + "10245924": "Udea marmarina", + "10246305": "Hypsopygia binodulalis", + "10247309": "Saturnia anona", + "10247981": "Malacodea pulchraria", + "10248521": "Pseudodirphia menander", + "10248689": "Aloa costalis", + "10250149": "Godyris nero", + "10250474": "Statherotis pendulata", + "10256550": "Ophyx eurrhoa", + "10257673": "Deuterarcha xanthomela", + "10257899": "Anachloris uncinata", + "10259280": "Elophila nebulosalis", + "10259880": "Limenitis tracta", + "10263383": "Cyclophora obstataria", + "10264193": "Detounda leptoplasta", + "10265559": "Vanessa myrinna", + "10265841": "Euptychia eous", + "10266782": "Graphita griphe", + "10267561": "Synanthedon exitiosa", + "10267570": "Meyrickella torquesauria", + "10268303": "Eucyclodes pieroides", + "10268975": "Cerberonoton", + "10270464": "Macaldenia palumba", + "10271464": "Chimoptesis gerulae", + "10272567": "Amiga", + "10272611": "Eudocima discrepans", + "10274769": "Acyphas semiochrea", + "10274976": "Choristoneura houstonana", + "10277877": "Limenitis danava", + "10278292": "Pseudolycaena damo", + "10279983": "Salma nephelodes", + "10282389": "Bastilla amygdalis", + "10283055": "Notonagemia", + "10286565": "Synanthedon fulvipes", + "10288636": "Aenetus eximia", + "10288719": "Eusarca nemora", + "10290084": "Agrochola laevis", + "10295171": "Epiblema abruptana", + "10295290": "Letis hypnois", + "10295646": "Phelotis cognata", + "10302305": "Dirphiopsis multicolor", + "10302660": "Goboea copiosana", + "10304283": "Brymblia quadrimaculella", + "10304313": "Givira francesca", + "10307383": "Strymon lucena", + "10307487": "Endoxyla lichenea", + "10308365": "Tebenna gnaphaliella", + "10309234": "Vamuna remelana", + "10309331": "Neoscythris fissirostris", + "10309794": "Microsphecia tineiformis", + "10310599": "Ypsolopha canariella", + "10310835": "Lamprosema ranalis", + "10312073": "Agrochola lota", + "10312760": "Issoria cytheris", + "10321900": "Taygetina kerea", + "10322104": "Neoilliberis fusca", + "10327658": "Walshia miscecolorella", + "10329023": "Lophoruza pulcherrima", + "10330071": "Comparmustilia", + "10330198": "Eudocima jordani", + "10330376": "Elophila faulalis", + "10331171": "Synargis mycone", + "10333787": "Faunis faunula", + "10336328": "Arta epicoenalis", + "10340332": "Laspeyria concavata", + "10341059": "Chrysolarentia gypsomela", + "10341307": "Pararguda rufescens", + "10346267": "Ypsolopha falciferella", + "10348110": "Metasia dicealis", + "10348945": "Nacoleia mesochlora", + "10353400": "Catonephele mexicana", + "10355428": "Pseudexentera virginiana", + "10355898": "Holocola thalassinana", + "10356445": "Assara subarcuella", + "10357476": "Icaricia shasta", + "10358334": "Meritastis laganodes", + "10360329": "Bracca rotundata", + "10361029": "Choreutis periploca", + "10361239": "Cigaritis lohita", + "10363151": "Chrysolarentia lucidulata", + "10365587": "Catagramma pitheas", + "10365884": "Epiblema obfuscana", + "10366580": "Sciota vetustella", + "10366679": "Hileithia rehamalis", + "10368234": "Eloasa infrequens", + "10370026": "Aethes mymara", + "10370112": "Enispa parva", + "10371735": "Brahmaea hearseyi", + "10372377": "Nola argentea", + "10374414": "Theretra tibetiana", + "10375186": "Catagramma hydaspes", + "10375403": "Glycythyma chrysorycta", + "10376507": "Neptis leucoporus", + "10376685": "Alarodia slossoniae", + "10378302": "Mataeomera coccophaga", + "10378314": "Ectropis fractaria", + "10379201": "Eucyclodes fascinans", + "10379915": "Termessa congrua", + "10380465": "Pelochrista dorsisignatana", + "10381192": "Melanis", + "10383968": "Zeuxidia amethysta", + "10384044": "Kretania nichollae", + "10388627": "Epiblema brightonana", + "10392889": "Halone pteridaula", + "10394962": "Euthalia dunya", + "10395101": "Eucosma olivaceana", + "10395440": "Cisthene polyzona", + "10397209": "Orthospila tigrina", + "10398658": "Pararge schakra", + "10398979": "Chrysolarentia leucophanes", + "10399906": "Aloa lactinea", + "10400868": "Bastilla crameri", + "10401396": "Catagramma sorana", + "10402067": "Pennisetia marginatum", + "10403441": "Simplicia armatalis", + "10404426": "Idaea kendallaria", + "10407953": "Melanis xenia", + "10410048": "Sciota celtidella", + "10410699": "Caldubotys caldusalis", + "10411202": "Crasilogia gressitti", + "10411472": "Strymon eurytulus", + "10412261": "Cybdelis phaesyla", + "10413588": "Isa textula", + "10415847": "Forsterinaria neonympha", + "10416544": "Graphita", + "10422582": "Comibaena fuscidorsata", + "10423263": "Arippara disticha", + "10427568": "Agnippe prunifoliella", + "10432184": "Anania helvalis", + "10433914": "Orthaga atribasalis", + "10434798": "Chrysolarentia conifasciata", + "10435406": "Pararguda nasuta", + "10436020": "Cechetra lineosa", + "10436850": "Arawacus melibaeus", + "10437872": "Petrophila heppneri", + "10438474": "Cycloprorodes melanoxysta", + "10441062": "Acronicta insularis", + "10441857": "Metasia tiasalis", + "10442031": "Kretania eurypilus", + "10442122": "Cenopis directana", + "10442332": "Conobathra hemichlaena", + "10443878": "Anestia semiochrea", + "10444331": "Anania quebecensis", + "10445629": "Pelochrista similiana", + "10446295": "Elophila responsalis", + "10446574": "Lichnoptera pollux", + "10446580": "Epiblema tripartitana", + "10446898": "Pelochrista robinsonana", + "10448500": "Nola tornotis", + "10450442": "Henricus edwardsiana", + "10450446": "Rapdalus pardicolor", + "10450501": "Aproaerema cinctella", + "10451589": "Synanthedon scitula", + "10452421": "Lepidoscia characota", + "10454590": "Forsterinaria quantius", + "10454874": "Cyana meyricki", + "10455658": "Carminda paeon", + "10456933": "Chrysolarentia vicissata", + "10457796": "Chrysolarentia severata", + "10458175": "Ataboruza divisa", + "10458960": "Acossus populi", + "10462612": "Asthenoptycha encratopis", + "10462708": "Protonoceras mitis", + "10464411": "Margarosticha repetitalis", + "10464824": "Arcobara tergeminaria", + "10465059": "Episcada hymenaea", + "10469497": "Acossus centerensis", + "10469532": "Epiphyas ashworthana", + "10469564": "Bastilla absentimacula", + "10471477": "Chrysolarentia polycarpa", + "10474236": "Podotricha judith", + "10476233": "Meritastis polygraphana", + "10477629": "Hypochrosis hyadaria", + "10477747": "Mycalesis oculus", + "10480609": "Eilema plana", + "10481441": "Pelochrista derelicta", + "10482025": "Elophila ekthlipsis", + "10483734": "Epinotia albangulana", + "10484957": "Mesene", + "10487080": "Acraea ozomene", + "10489219": "Omiodes odontosticta", + "10494601": "Gibbalaria", + "10495733": "Vitacea polistiformis", + "10496181": "Lithilaria proestans", + "10498365": "Ardozyga catarrhacta", + "10502505": "Merodictya marmorata", + "10503464": "Pelochrista consobrinana", + "10503495": "Arsacia rectalis", + "10505033": "Epidesmia chilonaria", + "10506164": "Aplotelia diplographa", + "10508423": "Limenitis procris", + "10508467": "Heliodines unipunctella", + "10509408": "Synanthedon acerni", + "10510138": "Noctuelia rufofascialis", + "10510325": "Nola lucidalis", + "10510959": "Libido bipunctata", + "10511167": "Euptychia proba", + "10511237": "Callima argenticinctella", + "10512675": "Mcclungia cymo", + "10513366": "Glauconoe deductalis", + "10514620": "Isa schaefferana", + "10515719": "Heterogenea shurtleffi", + "10517417": "Hygrochroa pudefacta", + "10517500": "Poritia sumatrae", + "10518163": "Sciota uvinella", + "10521368": "Nacoleia rhoeoalis", + "10523304": "Syneora lithina", + "10526954": "Mimaglossa nauplialis", + "10527924": "Euselasia", + "10528420": "Chrysolarentia stereozona", + "10530208": "Chiasmia nora", + "10530383": "Cryptoptila immersana", + "10530515": "Casbia melanops", + "10531480": "Termessa laeta", + "10533589": "Oenochroma turneri", + "10534664": "Citheronia brissotii", + "10534945": "Sereda tautana", + "10535684": "Eusthenica treicleiota", + "10539598": "Epiblema desertana", + "10542548": "Diaethria pandama", + "10545267": "Eucopina tocullionana", + "10546013": "Lepidoscia protorna", + "10546538": "Lymantria subrosea", + "10547404": "Dirphiopsis epiolina", + "10547716": "Pelochrista cataclystiana", + "10548275": "Termessa nivosa", + "10548683": "Gastridiota adoxima", + "10549715": "Conchylis subfurcatana", + "10551407": "Manulea bicolor", + "10551923": "Omichlis hadromeres", + "10552471": "Necyria", + "10556366": "Anydraula pericompsa", + "10556522": "Agrodiaetus coelestina", + "10556853": "Calliteara pura", + "10558140": "Lycorea ilione", + "10560674": "Epyaxa subidaria", + "10560849": "Mecytha fasciata", + "10561589": "Sciota virgatella", + "10569879": "Salamis parhassus", + "10570752": "Icaricia saepiolus", + "10571987": "Ectropis excursaria", + "10572729": "Maxates centrophylla", + "10573187": "Aricoris chilensis", + "10573425": "Nola pleurosema", + "10573746": "Hypospila dochmotoma", + "10574156": "Comibaena nigromacularia", + "10574663": "Moeris rita", + "10575632": "Mythimna reversa", + "10577473": "Euthalia evelina", + "10579230": "Nacoleia amphicedalis", + "10580256": "Thyraylia nana", + "10581870": "Luthrodes pandava", + "10583848": "Thallogama", + "10584071": "Vitacea scepsiformis", + "10587253": "Meneris tulbaghia", + "10588642": "Hypsopygia intermedialis", + "10591617": "Periphoba arcaei", + "10592969": "Obeidia gigantearia", + "10593489": "Phtheochroa vitellinana", + "10594210": "Nacoleia glageropa", + "10594478": "Autosticha kyotensis", + "10595994": "Algia fasciata", + "10596756": "Sparganothis boweri", + "10597291": "Bondia comonana", + "10597823": "Mythimna convecta", + "10598038": "Eudocima aurantia", + "10598407": "Mormoscopa phricozona", + "10600208": "Heraclides pallas", + "10600368": "Catocala streckeri", + "10604375": "Cicinnus melsheimeri", + "10606547": "Cigaritis vulcanus", + "10606887": "Acropolitis rudisana", + "10607329": "Givira theodori", + "10610041": "Gonioterma mistrella", + "10610809": "Cotachena hicana", + "10613467": "Diathrausta ochreipennis", + "10615631": "Issoria lathonoides", + "10619048": "Fania nanus", + "10623003": "Chrysolarentia heliacaria", + "10624577": "Acropolitis canana", + "10625116": "Choreutis metallica", + "10626099": "Hypomecis externaria", + "10629052": "Metapercnia ductaria", + "10629470": "Trismelasmos donovani", + "10629533": "Euzora collucens", + "10632124": "Comibaena attenuata", + "10634980": "Microdes squamulata", + "10637588": "Notata modicus", + "10638244": "Memphis forreri", + "10638451": "Sunira circellaris", + "10638589": "Gypsonoma salicicolana", + "10639484": "Aglais caschmirensis", + "10639943": "Aenetus dulcis", + "10640865": "Pedois humerana", + "10643403": "Herpetogramma hipponalis", + "10643533": "Goniosema anguliscripta", + "10644798": "Phazaca decorata", + "10647358": "Agamana conjungens", + "10648791": "Lactura sapotearum", + "10650211": "Zelleria retiniella", + "10650351": "Synchlora expulsata", + "10653980": "Hypanartia trimaculata", + "10655790": "Elophila tinealis", + "10656625": "Argynnis hyperbius", + "10656713": "Deudorix livia", + "10657151": "Meranda holochrysa", + "10657453": "Iaspis andersoni", + "10658576": "Psalidostetha banksiae", + "10659737": "Coenotoca subaspersa", + "10661133": "Lychnuchus", + "10662329": "Euptychia rubricata", + "10670854": "Platycerota particolor", + "10671425": "Miltochrista acteola", + "10677299": "Agrocholorta", + "10679326": "Huangilene alikangiae", + "10683012": "Ataboruza stragulata", + "10684776": "Nacna buschmannferenci", + "10690739": "Ichneutica nullifera", + "10694777": "Gandaritis pseudolargetaui", + "10695966": "Eucosma grindeliana", + "10698858": "Matsumursine horishanella", + "10700540": "Ichneutica propria", + "10701190": "Aberrasine lichenshihi", + "10702885": "Harmandicrania harmandi", + "10703948": "Pyrisitia westwoodi", + "10706419": "Ichneutica arotis", + "10707366": "Abantiades argyrosticha", + "10707501": "Caleta decidia", + "10709446": "Cochylis hospes", + "10712554": "Elophos dilucidaria", + "10713577": "Chirgus fides", + "10714961": "Pheosidea elegans", + "10715410": "Syrichtus baeticus", + "10716234": "Ichneutica sulcana", + "10717680": "Neptis goochii", + "10717837": "Mangina argus", + "10722110": "Utetheisa inconstans", + "10730270": "Entometa fervens", + "10732033": "Ichneutica semivittata", + "10732353": "Chrysocraspeda faganaria", + "10737993": "Risoba yanagitai", + "10738407": "Doratoptera lutea", + "10741837": "Ichneutica mollis", + "10743044": "Diomea lignicolora", + "10744228": "Agrocholorta albirena", + "10746289": "Huangilene kutzscheri", + "10747908": "Ichneutica blenheimensis", + "10749137": "Corgatha atrifalcis", + "10751438": "Tetrernia teminitis", + "10754772": "Cyana bellissima", + "10755716": "Achrosis rufescens", + "10761559": "Byasa confusus", + "10765884": "Barsura albidorsalis", + "10766319": "Corgatha trichogyia", + "10769553": "Udea flavidalis", + "10773498": "Ampittia subvittatus", + "10776625": "Cochylis temerana", + "10776919": "Pelochrista matutina", + "10777718": "Thespea", + "10782264": "Ditrigona serratilinea", + "10785815": "Dichomeris parvisexafurca", + "10787705": "Pyralis cardinalis", + "10795141": "Sansarea formosana", + "10799294": "Ichneutica morosa", + "10800539": "Pheosidea", + "10806460": "Tochara creberrima", + "10807169": "Olethreutes micana", + "10807383": "Salebriaria simpliciella", + "10807787": "Zebronia perspicata", + "10812069": "Cyana linatula", + "10813849": "Bastilla acuta", + "10814936": "Ichneutica insignis", + "10817208": "Hypsopygia olinalis", + "10820762": "Laspeyria ruficeps", + "10820875": "Ashinagidae", + "10821201": "Miltochrista yueh", + "10822185": "Calliteara horishanella", + "10824750": "Ichneutica agorastis", + "10825466": "Luthrodes galba", + "10826443": "Oxacme cretacea", + "10830546": "Feigeria scops", + "10833593": "Abantiades atripalpis", + "10835385": "Comparmustilia gerontica", + "10835542": "Biston insularis", + "10836135": "Huangilene", + "10836231": "Cabardites", + "10838422": "Cochylis posterana", + "10840540": "Ichneutica moderata", + "10840565": "Ichneutica atristriga", + "10841562": "Aedia perdicipennis", + "10842267": "Neocalyptis liratana", + "10842838": "Herimba disconjuncta", + "10844862": "Argyroploce bipunctana", + "10848620": "Tamba cautiperas", + "10850393": "Ichneutica lignana", + "10850415": "Ichneutica omoplaca", + "10850929": "Antiblemma perva", + "10851228": "Feigeria magna", + "10851840": "Eudonia rakaiensis", + "10854079": "Kretania trappi", + "10855556": "Smerkata fusca", + "10857326": "Eudonia diphtheralis", + "10858809": "Leptomyrina lara", + "10860091": "Edessena hamada", + "10860751": "Minoa aedaea", + "10861282": "Trithyris rubrocinctalis", + "10864093": "Albinospila floresaria", + "10864524": "Stictane rectilinea", + "10864898": "Paraeschra", + "10866199": "Ichneutica lithias", + "10866411": "Spilarctia nydia", + "10867462": "Paraeschra georgica", + "10869347": "Cochylis hoffmanana", + "10873137": "Charaxes wakefieldi", + "10874367": "Matsumursine", + "10874844": "Teuloma", + "10874932": "Hileithia magualis", + "10876650": "Aberrasine", + "10879371": "Plebejidea loewi", + "10881384": "Rivula bioculalis", + "10882244": "Nudaria diaphanella", + "10882997": "Abantiades argentata", + "10883659": "Syntherata escarlata", + "10889719": "Nechesia albodentata", + "10891794": "Ichneutica mutans", + "10903022": "Smerkata", + "10904813": "Agrochola ruticilla", + "10906002": "Canesia", + "10907635": "Bastilla maturata", + "10915497": "Crambus alienellus", + "10922201": "Crambus turbatella", + "10922411": "Chrysocrambus craterellus", + "10926224": "Olene suisharyonis", + "10932946": "Orthocraspeda furva", + "10933525": "Enispa elataria", + "10942408": "Meganola brunellus", + "10955682": "Birthamula rufa", + "10956237": "Floridasura", + "10959264": "Protonoceras capitalis", + "10962816": "Lon", + "10963226": "Leptoligia lota", + "10965723": "Oberthueria", + "10967713": "Thoracolopha flexirena", + "10972780": "Chorsia albiscriptus", + "10976134": "Willema", + "10982648": "Bastilla arcuata", + "10982815": "Leptoligia macilenta", + "10987178": "Inouenola pallescens", + "10988070": "Belenois java", + "10988777": "Chirgus", + "10990846": "Hoodus", + "10994020": "Herimba formosa", + "10996761": "Harpyia formosicola", + "11008182": "Arhopala perimuta", + "11014495": "Oxyplax pallivitta", + "11016336": "Herminia terminalis", + "11024850": "Burnsius", + "11027113": "Chiothion", + "11033463": "Arctia testudinaria", + "11034779": "Magusa tenebrosa", + "11044778": "Cnaphalocrocis cochrusalis", + "11046092": "Erebia flavofasciata", + "11052757": "Oxypteryx atrella", + "11054256": "Thoracolopha verecunda", + "11055981": "Thespea virescens", + "11056379": "Patania deficiens", + "11057282": "Vernia", + "11059353": "Semidonta kosemponica", + "11064851": "Leptoligia", + "11070822": "Curvie", + "11080751": "Oxypteryx wilkella", + "11088003": "Olene baibarana", + "11093909": "Olethreutes palustrana", + "11095591": "Floridasura tricolor", + "11097510": "Rhesala punctilinea", + "11098546": "Chorodna moorei", + "11121180": "Heterolocha satoi", + "11135155": "Junonia stemosa", + "11140464": "Artona formosa", + "11141784": "Sphinx vanbuskirki", + "11142432": "Chorsia mollicula", + "11173690": "Evecliptopera illitata", + "11175615": "Clelea simplicior", + "11190148": "Menophra parahumeraria", + "11219489": "Junonia pacoma", + "11232431": "Cyana hamata", + "11287091": "Acanthophila alacella", + "11311045": "Taipsaphida curiosa", + "11322712": "Stauropus teikichiana", + "11332355": "Sesapa honbaensis", + "11368766": "Adrapsa geometroides", + "11372793": "Acraea encedon", + "11374171": "Leptomyrina gorgias", + "11375508": "Acraea serena", + "11378273": "Salamis duprei", + "11378618": "Leptomyrina henningi", + "11382064": "Cabardites limbata", + "11414590": "Nudaurelia cytherea", + "11417741": "Icaricia acmon", + "11418741": "Indalia lutarella", + "11419137": "Lexias panopus", + "11423843": "Burnsius adepta", + "11425145": "Limenitis asura", + "11425419": "Psolos", + "11428453": "Lepidoscia heliochares", + "11430021": "Pubitelphusa latifasciella", + "11431507": "Zyganisus propedia", + "11435704": "Ptilodon grisea", + "11437060": "Eublemma perversicolor", + "11442724": "Teenie", + "11449815": "Myrioblephara albibasis", + "11451126": "Chrysolarentia bichromata", + "11452421": "Acontia semiflava", + "11453492": "Amata polymita", + "11453841": "Torodora gemella", + "11457930": "Buzara latizona", + "11461056": "Diduga nantouensis", + "11462628": "Scioglyptis", + "11464362": "Nudaurelia wahlbergi", + "11464595": "Vagrans sinha", + "11465014": "Psilosticha pristis", + "11466090": "Acontia erastrioides", + "11467034": "Crithote pallivaga", + "11467944": "Phazaca leucocera", + "11468089": "Chrysolarentia microcyma", + "11468731": "Erinnyis oenotrus", + "11470119": "Lysandra albicans", + "11470672": "Acontia clausula", + "11470872": "Lon monticola", + "11477039": "Mimomiza cruentaria", + "11478679": "Loscopia scolopacina", + "11484123": "Givira anna", + "11486436": "Taxeotis", + "11487320": "Melanchra adjuncta", + "11491719": "Iotaphora", + "11494627": "Garudinia taioana", + "11495556": "Goniapteryx servia", + "11495707": "Indalia", + "11496990": "Nola tholera", + "11501104": "Kocakina fidelis", + "11503857": "Phazaca stolida", + "11505614": "Homaloxestis multidentalis", + "11507608": "Euclea mesoamericana", + "11508076": "Apantesis arge", + "11508257": "Arhopala trogon", + "11508404": "Eucosma radiatana", + "11508472": "Nola phaeogramma", + "11513018": "Indalia albicosta", + "11513188": "Eudocima hypermnestra", + "11516142": "Acraea issoria", + "11525418": "Charaxes narcaea", + "11527985": "Pedois", + "11528968": "Epiphthora calamogonus", + "11529292": "Gufria limosa", + "11529603": "Ceratomia amyntor", + "11533770": "Chrysocraspeda cyphosticha", + "11535847": "Acraea terpsicore", + "11539735": "Ichneutica chlorodonta", + "11543078": "Arhopala pseudomuta", + "11546465": "Junonia antilope", + "11548960": "Satoblephara owadai", + "11554226": "Arzecla tucumanensis", + "11554842": "Odontognophos perspersata", + "11555221": "Chiasmia fidoniata", + "11556078": "Termessa", + "11561676": "Pterourus eurymedon", + "11562243": "Furcula borealis", + "11562374": "Progonia kurosawai", + "11563728": "Culama suffusca", + "11566649": "Eublemma biangulata", + "11570545": "Teuloma tainebula", + "11571523": "Indalia pygmaeola", + "11572120": "Acraea momina", + "11573394": "Carminda griseldis", + "11576787": "Gelechia sestertiella", + "11590674": "Acontia leo", + "11591775": "Salma recurvalis", + "11594541": "Nola pleurochorda", + "11596224": "Mnesampela", + "11596898": "Nola paromoea", + "11598540": "Tephrina arenacearia", + "11601386": "Mygona", + "11608942": "Tanaecia iapis", + "11609422": "Buzara frontinus", + "11612469": "Eudocima kuehni", + "11615055": "Acontia exigua", + "11615549": "Eublemma abrupta", + "11619030": "Acontia altera", + "11623814": "Junonia tugela", + "11626773": "Acontia dama", + "11627464": "Acontia heonyx", + "11635419": "Gymnoscelis admixtaria", + "11636323": "Dysgonia constricta", + "11636481": "Zizina oxleyi", + "11638437": "Chrysolarentia plagiocausta", + "11642411": "Sthenopis pretiosus", + "11643393": "Rinaca fukudai", + "11644349": "Krananda falcata", + "11645316": "Kirinia eversmanni", + "11645405": "Grapholita tristrigana", + "11650277": "Xerodes albonotaria", + "11652557": "Lophophelma calaurops", + "11654024": "Nebula malvata", + "11654220": "Therinia", + "11654707": "Lon zabulon", + "11656384": "Arctornis jonasii", + "11660145": "Acontia obatra", + "11660632": "Minoa euthecta", + "11667300": "Sesia tibiale", + "11667997": "Aloeides thyra", + "11670751": "Rinaca japonica", + "11670842": "Burnsius communis", + "11673056": "Pareronia hippia", + "11688440": "Asthenoptycha sphaltica", + "11688586": "Phalanta eurytis", + "11690145": "Aponotoreas dascia", + "11693171": "Xylena germana", + "11698552": "Nola semograpta", + "11701883": "Dione vanillae", + "11701991": "Actinote neleus", + "11703980": "Asura zebrina", + "11706893": "Ardozyga thermochroa", + "11713256": "Acontia fasciatella", + "11713970": "Haploa lecontei", + "11714235": "Eublemma caffrorum", + "11715392": "Eudyaria", + "11716362": "Heraclides hectorides", + "11717028": "Polypogon biasalis", + "11720357": "Epyaxa agelasta", + "11720834": "Lycaena hypophlaeas", + "11725043": "Herminia undulata", + "11725616": "Lepidoneiva teuthras", + "11726907": "Junonia archesia", + "11728049": "Uncinus obductella", + "11728240": "Cissusa spadix", + "11729388": "Rinaca thibeta", + "11729494": "Burnsius orcynoides", + "11730078": "Dichomeris zonata", + "11731155": "Eublemma rufiplaga", + "11731502": "Manulea hokopo", + "11732472": "Hypena quadralis", + "11736162": "Miltochrista undulosa", + "11737872": "Piarosoma fushan", + "11738734": "Macroglossum mitchellii", + "11748480": "Brassolis", + "11749278": "Acontia tortricina", + "11753578": "Atrytonopsis quinteri", + "11753804": "Acontia phecolisca", + "11754729": "Micronola notonana", + "11754954": "Hemileuca peigleri", + "11756119": "Orthaga picta", + "11758730": "Hemihyalea ambigua", + "11760262": "Eutricha", + "11760445": "Ogyris", + "11760688": "Lexias canescens", + "11761541": "Anania murcialis", + "11763567": "Phlogophora insularis", + "11773446": "Oiketicus geyeri", + "11776315": "Lon taxiles", + "11780161": "Lophophleps triangularis", + "11781300": "Acontia bicolorata", + "11781335": "Eriopyga lunata", + "11783188": "Chloronycta tybo", + "11783346": "Phelotis", + "11783984": "Eteona", + "11794114": "Willema willemi", + "11794362": "Sphingognatha asclepiades", + "11797244": "Spodoptera abyssinia", + "11797637": "Agriades podarce", + "11799357": "Mesoptila compsodes", + "11802190": "Icaricia neurona", + "11807833": "Aberrasine shiou", + "11812181": "Arctia dejeani", + "11819666": "Eublemma baccatrix", + "11826016": "Microcalcarifera obscura", + "11828714": "Apochima juglansiaria", + "11832697": "Junonia vestina", + "11834445": "Lon hobomok", + "11836409": "Nola delograpta", + "11840028": "Povolnya quercinigrella", + "11840957": "Lexias aeetes", + "11841763": "Junonia cuama", + "11846897": "Blastesthia tessulatana", + "11854390": "Stagmatophora argyrostrepta", + "11856219": "Dasyboarmia subpilosa", + "11858666": "Ichneutica skelloni", + "11858774": "Traminda rubra", + "11859640": "Acontia idella", + "11860016": "Artona hainana", + "11860565": "Diduga taiwana", + "11869776": "Chorodna fulgurita", + "11871044": "Nola crucigera", + "11871190": "Teenie tinea", + "11873825": "Macrochilo morbidalis", + "11873966": "Garella glaucopasta", + "11874998": "Everes osiris", + "11879268": "Corades", + "11887065": "Acontia onagrus", + "11890681": "Syllectra erycata", + "11891668": "Herpetogramma aquilonalis", + "11892494": "Lon melane", + "11899754": "Eucosma formosana", + "11900897": "Amata nigriceps", + "11902924": "Trisuloides", + "11903902": "Laciniodes", + "11904618": "Culama anthracica", + "11904675": "Euclera meones", + "11905965": "Epicoma melanospila", + "11906255": "Spilonota constrictana", + "11907485": "Apantesis incorrupta", + "11907720": "Eichlinia", + "11907754": "Theretra japonica", + "11909090": "Heterallactis phlogozona", + "11919216": "Termessa discrepans", + "11922580": "Globia oblonga", + "11923027": "Eugnosta bimaculana", + "11950325": "Eichlinia gloriosa", + "11954157": "Macroglossum corythus", + "11954625": "Pseudokatha", + "11955428": "Macrobathra", + "11962292": "Collita griseola", + "11967675": "Achalarus lyciades", + "11968849": "Trithyris fenestrinalis", + "11971514": "Herminia subtriplex", + "11976273": "Hypena indicatalis", + "11992983": "Orthosia cruda", + "12006709": "Nephelomilta pusilla", + "12010643": "Macaria minorata", + "12017078": "Tumicla sagenaria", + "12018158": "Eichlinia calabaza", + "12021153": "Katha arizana", + "12021649": "Katha emberifera", + "12022449": "Pseudokatha rungsi", + "12031071": "Heliodines tripunctella", + "12031311": "Borkhausenia", + "12037602": "Barsine striata", + "12045866": "Euptychia hedemanni", + "12046692": "Pterophorus narbonea", + "12047421": "Phthorimaea", + "12057008": "Conchylis fuscicepsana", + "12060941": "Eichlinia snowii", + "12066849": "Cenopis mesospila", + "12075408": "Piarosoma extravagans", + "12076089": "Barea", + "12087490": "Eichlinia cucurbitae", + "12089608": "Katha depressa", + "12103087": "Schinia saturata", + "12105049": "Staurophora", + "12106417": "Fissicrambus mutabilis", + "12106975": "Mycalesis mara", + "12107129": "Cenopis ferreana", + "12116722": "Eupithecia scotodes", + "12125931": "Epatolmis", + "12126779": "Cenopis niveana", + "12135372": "Nyea lurideola", + "1214429": "Heteropsis", + "12148290": "Rivula inconspicua", + "12151997": "Indalia interposita", + "12152411": "Gymnobathra", + "12160125": "Indalia uniola", + "12165672": "Plebejus sephirus", + "12170988": "Curvie emesia", + "12171068": "Bellulia galsworthyi", + "12171522": "Vamuna alboluteola", + "12173621": "Burnsius burnsi", + "12174634": "Tharsalea xanthoides", + "12175154": "Troyus fantasos", + "12176367": "Aglaomorpha plagiata", + "12176559": "Macrobrochis staudingeri", + "12180031": "Cyme structa", + "12180041": "Oarisma minima", + "12180481": "Aeneanola", + "12181811": "Archonias flisa", + "12182061": "Macrobrochis prasena", + "12183285": "Nepita conferta", + "12183844": "Processine", + "12185456": "Tharsalea dorcas", + "12185656": "Siccia punctilinea", + "12188086": "Tharsalea nivalis", + "12188993": "Aeneanola acontioides", + "12191141": "Abaeis salome", + "12194283": "Feigeria buteo", + "12195040": "Celastrina asheri", + "12197284": "Epiblema mandana", + "12198522": "Polites otho", + "12199936": "Aberrasine aberrans", + "12200213": "Heraclides ponceana", + "12200261": "Canesia canescens", + "12203022": "Cyme quadrilineata", + "12205404": "Tharsalea dospassosi", + "12206130": "Pseudoadites", + "12206386": "Abaeis mexicana", + "12206694": "Oarisma aurantiaca", + "12208168": "Autochton potrillo", + "12208733": "Pseudoadites frigida", + "12209759": "Miltochrista conjunctana", + "12211009": "Heraclides rogeri", + "12211069": "Microsphecia brosiformis", + "12212066": "Tharsalea hyllus", + "12214821": "Ardices canescens", + "12214993": "Thalera pistasciaria", + "12216332": "Cyme pyraula", + "12217030": "Delineatia tairadiata", + "12219036": "Euphilotes allyni", + "12219250": "Pterourus palamedes", + "12222885": "Tharsalea editha", + "12223105": "Thorybes lyciades", + "12223349": "Pelochrista argentialbana", + "12225180": "Cornicornuta", + "12225687": "Macaria austrinata", + "12226416": "Archonias nimbice", + "12229237": "Gampola sinica", + "12229400": "Tharsalea helloides", + "12229940": "Pterourus rutulus", + "12231152": "Eudonia cleodoralis", + "12231344": "Heliopetes americanus", + "12231385": "Gibbalaria scabellana", + "12233602": "Tharsalea heteronea", + "12233808": "Polites egeremet", + "12233838": "Thorybes casica", + "12234544": "Abaeis albula", + "12234977": "Argynnis coronis", + "12235234": "Cornicornuta convexa", + "12236627": "Abaeis boisduvaliana", + "12239445": "Dahlica walshella", + "12239491": "Chiothion georgina", + "12242422": "Cyme euprepioides", + "12243973": "Polites premnas", + "12246183": "Fania", + "12247340": "Burnsius albezens", + "12247359": "Pterourus glaucus", + "12249986": "Ovipennis semilutea", + "12250854": "Tharsalea epixanthe", + "12251247": "Archonias teutila", + "12252340": "Burnsius philetas", + "12252570": "Carmenta armasata", + "12252926": "Hoodus pelopidas", + "12253343": "Manulea complana", + "12253844": "Pterourus canadensis", + "12257250": "Arctelene arcuata", + "12257418": "Tharsalea gorgon", + "12258146": "Vernia verna", + "12258652": "Junonia grisea", + "12258984": "Tharsalea dione", + "12259113": "Processine cruciata", + "12259151": "Anisogona placoxantha", + "12260643": "Delineatia", + "12262562": "Pterourus troilus", + "12263736": "Troyus phyllides", + "12265590": "Tharsalea mariposa", + "12266659": "Magna myops", + "12276630": "Phalonidia magdalenae", + "12286003": "Anastrus sempiternus", + "12301192": "Acraea lycoa", + "12318291": "Cauchas fibulella", + "12322536": "Prepona demophoon", + "12335869": "Prepona demophon", + "12353663": "Pyrrhopyge chalybea", + "12357826": "Acraea bonasia", + "12358748": "Acraea acerata", + "1369661": "Sosxetra", + "1555575": "Acantholena", + "1730471": "Xyleutes", + "1730519": "Xyleutes strix", + "1730543": "Xyleutes persona", + "1730685": "Morpheis", + "1730705": "Parahypopta", + "1730737": "Azygophleps", + "1730763": "Givira", + "1730815": "Cossus", + "1730935": "Zeuzera", + "1730948": "Zeuzera multistrigata", + "1730978": "Zeuzera pyrina", + "1731096": "Ptilomacra", + "1731097": "Ptilomacra senex", + "1731220": "Idioses", + "1731221": "Idioses littleri", + "1731226": "Dyspessa", + "1731263": "Dyspessa ulula", + "1731291": "Trigonocyttara", + "1731292": "Trigonocyttara clandestina", + "1731363": "Acossus", + "1731505": "Zyganisus", + "1731584": "Phragmataecia", + "1731598": "Phragmataecia castaneae", + "1731712": "Langsdorfia", + "1731748": "Cossula", + "1731750": "Cossula magnifica", + "1731800": "Prionoxystus", + "1731811": "Prionoxystus macmurtrei", + "1731812": "Prionoxystus robiniae", + "1731817": "Eriocrania", + "1731826": "Eriocrania semipurpurella", + "1731837": "Eriocrania cicatricella", + "1731859": "Dyseriocrania", + "1731860": "Dyseriocrania subpurpurella", + "1731862": "Dyseriocrania griseocapitella", + "1731885": "Chelepteryx", + "1731886": "Chelepteryx collesi", + "1731890": "Chelepteryx chalepteryx", + "1731891": "Anthela", + "1731906": "Anthela nicothoe", + "1731923": "Anthela repleta", + "1731926": "Anthela ferruginosa", + "1731927": "Anthela varia", + "1731980": "Anthela denticulata", + "1732001": "Anthela acuta", + "1732005": "Anthela ocellata", + "1732031": "Anthela excellens", + "1732033": "Anthela basigera", + "1732043": "Munychryia", + "1732044": "Munychryia senicula", + "1732047": "Nataxa", + "1732052": "Nataxa flavescens", + "1732062": "Poecilocampa", + "1732063": "Poecilocampa populi", + "1732072": "Poecilocampa alpina", + "1732085": "Bombycomorpha", + "1732087": "Bombycomorpha bifascia", + "1732089": "Trabala", + "1732114": "Trabala pallida", + "1732115": "Trabala vishnou", + "1732160": "Gloveria", + "1732397": "Macrothylacia", + "1732416": "Macrothylacia rubi", + "1732419": "Macrothylacia digramma", + "1732442": "Trichiura", + "1732452": "Trichiura crataegi", + "1732457": "Trichiura ilicis", + "1732496": "Gastropacha", + "1732508": "Gastropacha horishana", + "1732521": "Gastropacha populifolia", + "1732525": "Gastropacha pardale", + "1732565": "Gastropacha quercifolia", + "1732599": "Genduara", + "1732627": "Sena", + "1732658": "Mesocelis", + "1732660": "Mesocelis monticola", + "1732661": "Phyllodesma", + "1732662": "Phyllodesma ilicifolia", + "1732680": "Phyllodesma suberifolia", + "1732685": "Phyllodesma tremulifolia", + "1732697": "Phyllodesma kermesifolia", + "1732717": "Phyllodesma americana", + "1732761": "Paradoxopla", + "1732763": "Paradoxopla sinuata", + "1732814": "Metanastria", + "1732830": "Metanastria hyrtaca", + "1732834": "Syrastrena", + "1732842": "Syrastrena sumatrana", + "1732862": "Paralebeda", + "1732883": "Artace", + "1732901": "Artace cribrarius", + "1732944": "Gonometa", + "1732955": "Gonometa postica", + "1732969": "Pararguda", + "1732978": "Pararguda crenulata", + "1733135": "Kunugia", + "1733154": "Kunugia undans", + "1733155": "Kunugia divaricata", + "1733242": "Cosmotriche", + "1733243": "Cosmotriche discitincta", + "1733258": "Cosmotriche lobulina", + "1733338": "Dendrolimus", + "1733394": "Dendrolimus arizana", + "1733412": "Dendrolimus punctata", + "1733484": "Dendrolimus pini", + "1733502": "Pernattia", + "1733504": "Pernattia pusilla", + "1733507": "Pernattia chlorophragma", + "1733511": "Pernattia brevipennis", + "1733524": "Heteropacha", + "1733525": "Heteropacha rileyana", + "1733529": "Opsirhina", + "1733535": "Opsirhina lechriodes", + "1733574": "Eriogaster", + "1733617": "Psilogaster", + "1733620": "Psilogaster loti", + "1733670": "Streblote", + "1733755": "Streblote panda", + "1733831": "Bharetta", + "1733840": "Malacosoma", + "1734381": "Apotolype", + "1734384": "Apotolype brevicrista", + "1734388": "Euthrix", + "1734453": "Euthrix potatoria", + "1734489": "Somadasys", + "1734496": "Somadasys catacoides", + "1734505": "Lebeda", + "1734519": "Lebeda nobilis", + "1734548": "Tolype", + "1734683": "Lasiocampa", + "1734690": "Lasiocampa grandis", + "1734704": "Lasiocampa trifolii", + "1734794": "Lasiocampa serrula", + "1734826": "Lasiocampa quercus", + "1734849": "Porela", + "1734851": "Porela delineata", + "1734934": "Arguda", + "1735093": "Carposina", + "1735121": "Carposina sasakii", + "1735168": "Carposina rubophaga", + "1735193": "Carposina scirrhosella", + "1735256": "Bondia", + "1735272": "Sosineura", + "1735273": "Sosineura mimica", + "1735289": "Coscinoptycha", + "1735391": "Carposina eriphylla", + "1735398": "Carposina exochana", + "1735406": "Lotisma", + "1735408": "Lotisma trigonana", + "1735409": "Phycomorpha", + "1735487": "Opostega", + "1735532": "Opostega salaciella", + "1735586": "Opostegoides", + "1735631": "Fomoria", + "1735652": "Stigmella", + "1735814": "Ectoedemia", + "1735844": "Ectoedemia albifasciella", + "1735855": "Ectoedemia subbimaculella", + "1735869": "Etainia", + "1736266": "Schreckensteinia", + "1736271": "Schreckensteinia erythriella", + "1736314": "Xenotemna", + "1736315": "Xenotemna pallorana", + "1736354": "Arcesis", + "1736358": "Arcesis threnodes", + "1736359": "Lozotaenia", + "1736377": "Lozotaenia forsterana", + "1736388": "Corticivora", + "1736390": "Corticivora parva", + "1736409": "Strophedra", + "1736412": "Strophedra nitidana", + "1736418": "Spatalistis", + "1736425": "Spatalistis bifasciana", + "1736444": "Lozotaeniodes", + "1736447": "Lozotaeniodes formosana", + "1736460": "Grapholita", + "1736484": "Grapholita discretana", + "1736499": "Grapholita delineana", + "1736511": "Grapholita jungiella", + "1736528": "Grapholita funebrana", + "1736560": "Grapholita orobana", + "1736565": "Grapholita janthinana", + "1736601": "Grapholita compositella", + "1736612": "Crocidosema", + "1736623": "Crocidosema plebejana", + "1736656": "Choristoneura", + "1736725": "Gravitarmata", + "1736727": "Gravitarmata margarotana", + "1736758": "Gretchena", + "1736760": "Gretchena bolliana", + "1736793": "Lathronympha", + "1736800": "Lathronympha strigana", + "1736802": "Pseudexentera", + "1736803": "Pseudexentera costomaculana", + "1736807": "Pseudexentera spoliana", + "1736809": "Pseudexentera hodsoni", + "1736811": "Pseudexentera knudsoni", + "1736821": "Pseudexentera oregonana", + "1736826": "Pseudexentera haracana", + "1736830": "Choristis", + "1736834": "Amorbia", + "1736836": "Amorbia humerosana", + "1736860": "Amorbia cuneanum", + "1736895": "Gypsonoma", + "1736898": "Gypsonoma sociana", + "1736904": "Gypsonoma dealbana", + "1736905": "Gypsonoma minutana", + "1736906": "Gypsonoma aceriana", + "1736915": "Gypsonoma fasciolana", + "1736918": "Gypsonoma adjuncta", + "1736937": "Gypsonoma haimbachiana", + "1736939": "Gypsonoma substitutionis", + "1736945": "Gypsonoma oppressana", + "1736951": "Cryptophlebia", + "1736993": "Cryptophlebia repletana", + "1736995": "Cryptophlebia illepida", + "1737015": "Cryptophlebia ombrodelta", + "1737021": "Metendothenia", + "1737063": "Decodes", + "1737072": "Decodes basiplagana", + "1737084": "Metrioglypha", + "1737110": "Epiphyas", + "1737115": "Epiphyas asthenopis", + "1737131": "Epiphyas postvittana", + "1737177": "Epitymbia", + "1737182": "Epitymbia cosmota", + "1737187": "Epitymbia alaudana", + "1737228": "Pseudogalleria", + "1737231": "Pseudogalleria inimicella", + "1737303": "Neocalyptis", + "1737313": "Neocalyptis affinisana", + "1737335": "Clepsis", + "1737342": "Clepsis senecionana", + "1737368": "Clepsis pallidana", + "1737374": "Clepsis melaleucanus", + "1737403": "Clepsis virescana", + "1737413": "Clepsis siciliana", + "1737417": "Clepsis clemensiana", + "1737437": "Clepsis dumicolana", + "1737491": "Clepsis spectrana", + "1737497": "Clepsis rurinana", + "1737509": "Clepsis coriacana", + "1737519": "Hedya", + "1737524": "Hedya pruniana", + "1737526": "Hedya nubiferana", + "1737533": "Hedya dimidiana", + "1737542": "Hedya salicella", + "1737544": "Hedya separatana", + "1737551": "Hedya chionosema", + "1737552": "Hedya ochroleucana", + "1737647": "Pseudohermenias", + "1737650": "Pseudohermenias abietana", + "1737701": "Cydia", + "1737753": "Cydia nigricana", + "1737768": "Cydia populana", + "1737775": "Cydia splendana", + "1737776": "Cydia fagiglandana", + "1737783": "Cydia conicolana", + "1737847": "Cydia pomonella", + "1737893": "Cydia succedana", + "1737904": "Cydia caryana", + "1737924": "Cydia inquinatana", + "1737929": "Cydia membrosa", + "1737964": "Cydia latiferreana", + "1737968": "Cydia ingens", + "1737973": "Cydia albimaculana", + "1737978": "Cydia toreuta", + "1738021": "Isotenes", + "1738045": "Isotenes miserana", + "1738049": "Cymolomia", + "1738050": "Cymolomia hartigiana", + "1738065": "Planotortrix", + "1738081": "Planotortrix notophaea", + "1738143": "Isotrias", + "1738163": "Isotrias rectifasciana", + "1738189": "Dactylioglypha", + "1738192": "Dactylioglypha tonica", + "1738196": "Dipterina imbriferana", + "1738215": "Pseudosciaphila", + "1738218": "Pseudosciaphila duplex", + "1738222": "Pseudosciaphila branderiana", + "1738242": "Pseudargyrotoza", + "1738245": "Pseudargyrotoza conwagana", + "1738265": "Aethes", + "1738317": "Aethes rubigana", + "1738322": "Aethes triangulana", + "1738337": "Aethes margaritana", + "1738373": "Aethes williana", + "1738422": "Aethes smeathmanniana", + "1738429": "Aethes tesserana", + "1738514": "Aethes hartmanniana", + "1738583": "Agapeta", + "1738667": "Dichrorampha", + "1738687": "Dichrorampha simpliciana", + "1738700": "Dichrorampha petiverella", + "1738722": "Dichrorampha alpinana", + "1738777": "Dichrorampha plumbana", + "1738791": "Dichrorampha bittana", + "1738794": "Dichrorampha vancouverana", + "1738809": "Dichrorampha leopardana", + "1738839": "Dichrorampha acuminatana", + "1738881": "Retinia", + "1738883": "Retinia resinella", + "1738888": "Retinia gemistrigulana", + "1739000": "Rhopobota", + "1739034": "Rhopobota dietziana", + "1739042": "Rhopobota myrtillana", + "1739043": "Rhopobota ustomaculana", + "1739048": "Heliocosma", + "1739051": "Heliocosma argyroleuca", + "1739060": "Cnephasia", + "1739128": "Cnephasia incertana", + "1739151": "Cnephasia cupressivorana", + "1739220": "Cnephasia jactatana", + "1739272": "Cnephasia stephensiana", + "1739284": "Cnephasia asseclana", + "1739290": "Cnephasia longana", + "1739315": "Merophyas", + "1739316": "Merophyas divulsana", + "1739336": "Rhyacionia", + "1739337": "Rhyacionia pinicolana", + "1739362": "Rhyacionia rigidana", + "1739364": "Rhyacionia frustrana", + "1739377": "Rhyacionia pinivorana", + "1739381": "Rhyacionia buoliana", + "1739398": "Coelostathma", + "1739400": "Coelostathma discopunctana", + "1739418": "Ptycholoma", + "1739446": "Cochylidia", + "1739449": "Cochylidia rupicola", + "1739451": "Cochylidia subroseana", + "1739461": "Cochylidia implicitana", + "1739471": "Cochylidia heydeniana", + "1739550": "Ctenopseustis", + "1739553": "Ctenopseustis obliquana", + "1739567": "Ctenopseustis fraterna", + "1739599": "Sparganothis", + "1739605": "Sparganothis pilleriana", + "1739612": "Sparganothis unifasciana", + "1739617": "Sparganothis sulfureana", + "1739629": "Sparganothis pulcherrimana", + "1739646": "Sparganothis xanthoides", + "1739656": "Sparganothis tristriata", + "1739668": "Sparganothis distincta", + "1739677": "Sparganothis demissana", + "1739724": "Acleris", + "1739727": "Acleris curvalana", + "1739748": "Acleris ferrugana", + "1739767": "Acleris variana", + "1739770": "Acleris gloveranus", + "1739797": "Acleris bergmanniana", + "1739816": "Acleris comariana", + "1739819": "Acleris cristana", + "1739833": "Acleris variegana", + "1739867": "Acleris semipurpurana", + "1739884": "Acleris stadiana", + "1739919": "Acleris umbrana", + "1739922": "Acleris forsskaleana", + "1739924": "Acleris placidana", + "1739927": "Acleris chalybeana", + "1739931": "Acleris literana", + "1739954": "Acleris oxycoccana", + "1739956": "Acleris cervinana", + "1739964": "Acleris forbesana", + "1739973": "Acleris robinsoniana", + "1739980": "Acleris logiana", + "1739983": "Acleris celiana", + "1739999": "Acleris lipsiana", + "1740003": "Acleris flavivittana", + "1740005": "Acleris hyemana", + "1740037": "Acleris maximana", + "1740053": "Acleris aspersana", + "1740060": "Acleris caliginosana", + "1740069": "Acleris holmiana", + "1740116": "Acleris effractana", + "1740120": "Acleris rhombana", + "1740133": "Acleris maculidorsana", + "1740148": "Acleris macdunnoughi", + "1740155": "Acleris viburnana", + "1740163": "Acleris subnivana", + "1740174": "Acleris sparsana", + "1740183": "Acleris emargana", + "1740185": "Acleris laterana", + "1740225": "Acleris braunana", + "1740246": "Acleris albicomana", + "1740305": "Acleris maccana", + "1740370": "Acleris ptychogrammos", + "1740374": "Acleris notana", + "1740389": "Acleris nivisellana", + "1740392": "Acleris hastiana", + "1740400": "Acleris nigrolinea", + "1740434": "Adoxophyes", + "1740449": "Adoxophyes negundana", + "1740469": "Adoxophyes privatana", + "1740482": "Adoxophyes orana", + "1740515": "Lobesia", + "1740518": "Lobesia littoralis", + "1740524": "Lobesia aeolopa", + "1740533": "Lobesia bicinctana", + "1740567": "Lobesia reliquana", + "1740570": "Lobesia abscissana", + "1740586": "Lobesia transtrifera", + "1740623": "Lobesia botrana", + "1740664": "Cacoecimorpha", + "1740674": "Acroclita", + "1740762": "Acroclita subsequana", + "1740796": "Loboschiza", + "1740797": "Loboschiza koenigiana", + "1740814": "Dudua", + "1740828": "Dudua aprobola", + "1741043": "Ditula", + "1741056": "Ditula angustiorana", + "1741073": "Anisogona", + "1741074": "Anisogona similana", + "1741082": "Mictoneura", + "1741084": "Mictoneura flexanimana", + "1741128": "Ecdytolopha", + "1741130": "Ecdytolopha insiticiana", + "1741131": "Ecdytolopha mana", + "1741141": "Cochylimorpha", + "1741147": "Cochylimorpha straminea", + "1741253": "Cochylimorpha alternana", + "1741258": "Cochylimorpha decolorella", + "1741314": "Anopina", + "1741324": "Anopina triangulana", + "1741338": "Notocelia", + "1741340": "Notocelia trimaculana", + "1741341": "Notocelia uddmanniana", + "1741361": "Notocelia culminana", + "1741368": "Notocelia rosaecolana", + "1741383": "Episimus", + "1741398": "Episimus tyrius", + "1741400": "Episimus argutana", + "1741404": "Spilonota", + "1741540": "Olindia", + "1741545": "Olindia schumacherana", + "1741547": "Eriopsela", + "1741551": "Eriopsela quadrana", + "1741557": "Statherotis", + "1741585": "Cochylis", + "1741590": "Cochylis molliculana", + "1741593": "Cochylis atricapitana", + "1741615": "Cochylis pallidana", + "1741633": "Cochylis dubitana", + "1741634": "Cochylis flaviciliana", + "1741667": "Cochylis hybridella", + "1741717": "Endothenia", + "1741719": "Endothenia nubilana", + "1741747": "Endothenia hebesana", + "1741752": "Endothenia quadrimaculana", + "1741756": "Endothenia nigricostana", + "1741765": "Endothenia ustulana", + "1741805": "Platynota", + "1741812": "Platynota exasperatana", + "1741818": "Platynota semiustana", + "1741820": "Platynota stultana", + "1741823": "Platynota flavedana", + "1741824": "Platynota idaeusalis", + "1741826": "Platynota rostrana", + "1742045": "Sparganothoides", + "1742061": "Olethreutes", + "1742081": "Olethreutes malana", + "1742089": "Olethreutes atrodentana", + "1742091": "Olethreutes exoletum", + "1742106": "Olethreutes obsoletana", + "1742121": "Olethreutes astrologana", + "1742142": "Olethreutes schulziana", + "1742150": "Olethreutes furfuranum", + "1742168": "Olethreutes connectum", + "1742178": "Olethreutes permundana", + "1742180": "Olethreutes valdanum", + "1742185": "Olethreutes arcuella", + "1742198": "Olethreutes appendiceum", + "1742203": "Olethreutes concinnana", + "1742214": "Olethreutes osmundana", + "1742239": "Olethreutes tilianum", + "1742241": "Olethreutes nigranum", + "1742260": "Olethreutes bipartitana", + "1742263": "Olethreutes metallicana", + "1742268": "Olethreutes hamameliana", + "1742272": "Olethreutes merrickanum", + "1742273": "Olethreutes quadrifidum", + "1742287": "Olethreutes inornatana", + "1742293": "Olethreutes ferriferana", + "1742304": "Olethreutes punctanum", + "1742310": "Olethreutes griseoalbana", + "1742335": "Olethreutes fasciatana", + "1742345": "Ptycholomoides", + "1742346": "Ptycholomoides aeriferana", + "1742398": "Stictea", + "1742402": "Stictea mygindiana", + "1742419": "Eucosma", + "1743173": "Pyrgotis", + "1743182": "Pyrgotis pyramidias", + "1743184": "Pyrgotis plagiatana", + "1743188": "Eudemis", + "1743196": "Eudemis profundana", + "1743269": "Sereda", + "1743318": "Strepsicrates", + "1743319": "Strepsicrates ejectana", + "1743323": "Strepsicrates smithiana", + "1743343": "Eugnosta", + "1743404": "Eupoecilia", + "1743452": "Blastesthia", + "1743453": "Blastesthia turionella", + "1743459": "Eumarozia", + "1743461": "Eumarozia malachitana", + "1743467": "Gibberifera", + "1743475": "Gibberifera simplana", + "1743485": "Thiodia", + "1743516": "Epiblema", + "1743532": "Epiblema foenella", + "1743588": "Epiblema scutulana", + "1743604": "Epiblema grandaevana", + "1743613": "Epiblema turbidana", + "1743637": "Falseuncaria", + "1743641": "Falseuncaria degreyana", + "1743643": "Falseuncaria ruficiliana", + "1743651": "Catastega aceriella", + "1743652": "Evora", + "1743653": "Evora hemidesma", + "1743656": "Sonia", + "1743657": "Sonia paraplesiana", + "1743658": "Sonia constrictana", + "1743663": "Sonia canadana", + "1743673": "Tracholena", + "1743680": "Tracholena sulfurosa", + "1743690": "Zeiraphera", + "1743694": "Zeiraphera canadensis", + "1743710": "Zeiraphera isertana", + "1743714": "Zeiraphera ratzeburgiana", + "1743723": "Fulvoclysia", + "1743730": "Fulvoclysia nerminae", + "1743762": "Celypha", + "1743768": "Celypha cespitana", + "1743775": "Celypha striana", + "1743782": "Celypha flavipalpana", + "1743811": "Pandemis", + "1743825": "Pandemis limitata", + "1743828": "Pandemis cerasana", + "1743838": "Pandemis lamprosana", + "1743855": "Pandemis canadana", + "1743856": "Pandemis cinnamomeana", + "1743862": "Pandemis corylana", + "1743867": "Pandemis dumetana", + "1743898": "Pandemis heparana", + "1743926": "Henricus", + "1743994": "Cnesteboda", + "1743998": "Cnesteboda celligera", + "1744049": "Eulia", + "1744071": "Eulia ministrana", + "1744129": "Chimoptesis", + "1744130": "Chimoptesis pennsylvaniana", + "1744133": "Orthotaenia", + "1744136": "Orthotaenia undulana", + "1744165": "Syndemis", + "1744180": "Syndemis musculana", + "1744208": "Rudenia", + "1744212": "Rudenia leguminana", + "1744219": "Exapate", + "1744224": "Exapate congelatella", + "1744237": "Periclepsis", + "1744240": "Enarmonia", + "1744416": "Enarmonia formosana", + "1744481": "Phalonidia", + "1744498": "Phalonidia manniana", + "1744526": "Phalonidia contractana", + "1744542": "Phalonidia curvistrigana", + "1744587": "Syricoris", + "1744588": "Syricoris rivulana", + "1744593": "Syricoris lacunana", + "1744687": "Glyphidoptera", + "1744691": "Apotomis", + "1744693": "Apotomis lineana", + "1744699": "Apotomis inundana", + "1744700": "Apotomis removana", + "1744709": "Apotomis infida", + "1744714": "Apotomis semifasciana", + "1744724": "Apotomis albeolana", + "1744728": "Apotomis betuletana", + "1744731": "Apotomis capreana", + "1744739": "Apotomis turbidana", + "1744742": "Apotomis sororculana", + "1744748": "Apotomis sauciana", + "1744761": "Pammene", + "1744763": "Pammene rhediella", + "1744777": "Pammene populana", + "1744782": "Pammene aurita", + "1744789": "Pammene fasciana", + "1744808": "Pammene argyrana", + "1744810": "Pammene regiana", + "1744860": "Pammene giganteana", + "1744896": "Pammene aurana", + "1744901": "Pammene trauniana", + "1744928": "Eucosmomorpha", + "1744946": "Phaecasiophora", + "1744949": "Phaecasiophora niveiguttana", + "1744953": "Phaecasiophora confixana", + "1744993": "Harmologa", + "1744998": "Harmologa amplexana", + "1745011": "Pseudeulia", + "1745013": "Pseudeulia asinana", + "1745017": "Acroceuthes", + "1745019": "Acroceuthes metaxanthana", + "1745021": "Larisa", + "1745022": "Larisa subsolana", + "1745076": "Philedone", + "1745079": "Philedone gerningana", + "1745086": "Argyroploce", + "1745131": "Argyroploce arbutella", + "1745285": "Cryptaspasma", + "1745307": "Cryptaspasma querula", + "1745549": "Epinotia", + "1745558": "Epinotia solandriana", + "1745561": "Epinotia ramella", + "1745579": "Epinotia subocellana", + "1745600": "Epinotia bilunana", + "1745606": "Epinotia radicana", + "1745630": "Epinotia tetraquetrana", + "1745634": "Epinotia nisella", + "1745636": "Epinotia signatana", + "1745643": "Epinotia immundana", + "1745659": "Epinotia mercuriana", + "1745666": "Epinotia septemberana", + "1745669": "Epinotia medioviridana", + "1745675": "Epinotia solicitana", + "1745676": "Epinotia demarniana", + "1745678": "Epinotia abbreviana", + "1745705": "Epinotia tenerana", + "1745724": "Epinotia trigonella", + "1745725": "Epinotia fraternana", + "1745729": "Epinotia nonana", + "1745737": "Epinotia tedella", + "1745746": "Epinotia transmissana", + "1745756": "Epinotia cinereana", + "1745761": "Epinotia subviridis", + "1745762": "Epinotia granitana", + "1745771": "Epinotia maculana", + "1745781": "Epinotia thapsiana", + "1745787": "Epinotia nanana", + "1745788": "Epinotia rubiginosana", + "1745814": "Epinotia lindana", + "1745816": "Epinotia brunnichana", + "1745827": "Epinotia festivana", + "1745830": "Epinotia cruciana", + "1745894": "Cerace", + "1745895": "Cerace stipatana", + "1745922": "Piniphila", + "1745925": "Piniphila bifasciana", + "1745927": "Homona", + "1745947": "Homona coffearia", + "1745952": "Homona magnanima", + "1745957": "Homona spargotis", + "1745997": "Lorita", + "1746000": "Lorita scarificata", + "1746012": "Phtheochroa", + "1746027": "Phtheochroa inopiana", + "1746068": "Phtheochroa riscana", + "1746172": "Doloploca", + "1746174": "Doloploca punctulana", + "1746324": "Ebodina", + "1746327": "Ebodina elephantodes", + "1746399": "Epagoge", + "1746413": "Epagoge grotiana", + "1746437": "Aleimma", + "1746440": "Aleimma loeflingiana", + "1746461": "Epalxiphora", + "1746462": "Epalxiphora axenana", + "1746508": "Epichorista", + "1746512": "Epichorista siriana", + "1746562": "Paralobesia", + "1746586": "Paralobesia viteana", + "1746600": "Eana", + "1746613": "Eana osseana", + "1746644": "Eana incanana", + "1746666": "Eana argentana", + "1746689": "Eana penziana", + "1746694": "Zomaria", + "1746695": "Zomaria interruptolineana", + "1746712": "Gatesclarkeana", + "1746714": "Gatesclarkeana idia", + "1746749": "Archips", + "1746751": "Archips georgiana", + "1746754": "Archips strianus", + "1746763": "Archips cerasivorana", + "1746774": "Archips dissitana", + "1746775": "Archips oporana", + "1746831": "Archips alberta", + "1746832": "Archips podana", + "1746856": "Archips rosana", + "1746859": "Archips fervidana", + "1746876": "Archips xylosteana", + "1746881": "Archips rileyana", + "1746898": "Archips packardiana", + "1746910": "Archips crataegana", + "1746927": "Archips purpurana", + "1746949": "Archips grisea", + "1746994": "Zomariana", + "1747019": "Suleima", + "1747024": "Suleima helianthana", + "1747044": "Tortricodes", + "1747050": "Tortricodes alternella", + "1747067": "Leucotenes", + "1747068": "Leucotenes coprosmae", + "1747122": "Argyrotaenia", + "1747140": "Argyrotaenia franciscana", + "1747141": "Argyrotaenia ljungiana", + "1747147": "Argyrotaenia alisellana", + "1747150": "Argyrotaenia quercifoliana", + "1747155": "Argyrotaenia tabulana", + "1747160": "Argyrotaenia mariana", + "1747161": "Argyrotaenia quadrifasciana", + "1747163": "Argyrotaenia kimballi", + "1747166": "Argyrotaenia pinatubana", + "1747171": "Argyrotaenia juglandana", + "1747188": "Argyrotaenia occultana", + "1747189": "Argyrotaenia velutinana", + "1747195": "Cenopis", + "1747196": "Cenopis pettitana", + "1747209": "Apoctena", + "1747215": "Apoctena conditana", + "1747222": "Apoctena flavescens", + "1747242": "Tortrix", + "1747506": "Pelochrista", + "1747523": "Pelochrista scintillana", + "1747611": "Meritastis", + "1747625": "Arotrophora", + "1747639": "Arotrophora arcuatalis", + "1747644": "Sorolopha", + "1747672": "Sorolopha delochlora", + "1747723": "Bactra", + "1747738": "Bactra furfurana", + "1747740": "Bactra verutana", + "1747814": "Bactra noteraula", + "1747904": "Thrincophora", + "1747914": "Thrincophora impletana", + "1747924": "Thrincophora lignigerana", + "1747949": "Paramesia", + "1748099": "Holocola", + "1748103": "Holocola zopherana", + "1748108": "Barbara", + "1748109": "Barbara mappana", + "1748143": "Proteoteras", + "1748148": "Proteoteras naracana", + "1748149": "Proteoteras aesculana", + "1748151": "Proteoteras moffatiana", + "1748152": "Proteoteras crescentana", + "1748201": "Clavigesta", + "1748203": "Clavigesta purdeyi", + "1748277": "Aphelia", + "1748321": "Aphelia paleana", + "1748368": "Capua", + "1748425": "Capua intractana", + "1748442": "Capua paraloxa", + "1748456": "Capua vulgana", + "1748473": "Capua dura", + "1748486": "Capua euphona", + "1748518": "Capua semiferana", + "1748560": "Goditha", + "1748601": "Isodemis", + "1748605": "Isodemis serpentinana", + "1748645": "Catamacta", + "1748648": "Catamacta gavisana", + "1748661": "Catamacta lotinana", + "1748717": "Xerocnephasia", + "1748720": "Xerocnephasia rigana", + "1748748": "Syntozyga", + "1748751": "Syntozyga anconia", + "1748757": "Dichelia", + "1748777": "Amphithera", + "1748780": "Amphithera heteroleuca", + "1748799": "Roeslerstammia", + "1748805": "Roeslerstammia erxlebella", + "1748889": "Aspilapteryx", + "1748890": "Aspilapteryx tringipennella", + "1748902": "Parectopa", + "1748922": "Parectopa robiniella", + "1748942": "Parectopa ononidis", + "1749042": "Callisto", + "1749050": "Callisto denticulella", + "1749068": "Calybites", + "1749070": "Calybites phasianipennella", + "1749116": "Cyphosticha", + "1749124": "Cyphosticha panconita", + "1749137": "Parornix", + "1749164": "Parornix scoticella", + "1749286": "Neurobathra", + "1749287": "Neurobathra strigifinitella", + "1749401": "Cameraria", + "1749449": "Cameraria ohridella", + "1749505": "Macarostola", + "1749529": "Macarostola formosa", + "1749531": "Macarostola miniella", + "1749591": "Phyllocnistis populiella", + "1749596": "Phyllocnistis saligna", + "1749608": "Phyllocnistis labyrinthella", + "1749635": "Phyllocnistis unipunctella", + "1749656": "Phyllocnistis insignis", + "1749660": "Sauterina", + "1749661": "Sauterina hofmanniella", + "1749662": "Conopomorpha", + "1749664": "Conopomorpha cyanospila", + "1749712": "Gracillaria", + "1749713": "Gracillaria syringella", + "1749732": "Phyllonorycter", + "1749744": "Phyllonorycter ulmifoliella", + "1749760": "Phyllonorycter fitchella", + "1749846": "Phyllonorycter hilarella", + "1749869": "Phyllonorycter roboris", + "1749908": "Phyllonorycter kuhlweiniella", + "1749921": "Phyllonorycter corylifoliella", + "1749929": "Phyllonorycter maestingella", + "1749936": "Phyllonorycter platani", + "1749948": "Phyllonorycter harrisella", + "1749954": "Phyllonorycter klemannella", + "1749959": "Phyllonorycter coryli", + "1749975": "Phyllonorycter muelleriella", + "1750051": "Phyllonorycter trifasciella", + "1750076": "Phyllonorycter rajella", + "1750097": "Phyllonorycter joannisi", + "1750131": "Phyllonorycter messaniella", + "1750143": "Phyllonorycter quercifoliella", + "1750159": "Phyllonorycter leucographella", + "1750166": "Phyllonorycter issikii", + "1750288": "Phyllonorycter strigulatella", + "1750313": "Dialectica", + "1750326": "Dialectica scalariella", + "1750339": "Caloptilia", + "1750759": "Acrocercops", + "1750924": "Acrocercops astericola", + "1750934": "Acrocercops obscurella", + "1751024": "Acrocercops enchlamyda", + "1751051": "Acrocercops brongniardella", + "1751134": "Porphyrosela", + "1751146": "Porphyrosela minuta", + "1751163": "Marmara arbutiella", + "1751200": "Tinagma", + "1751207": "Tinagma ocnerostomella", + "1751216": "Tinagma perdicella", + "1751227": "Bucculatrix", + "1751236": "Bucculatrix cidarella", + "1751290": "Bucculatrix demaryella", + "1751298": "Bucculatrix nigricomella", + "1751299": "Bucculatrix ainsliella", + "1751336": "Bucculatrix angustata", + "1751368": "Bucculatrix ulmella", + "1751400": "Bucculatrix coronatella", + "1751457": "Bucculatrix thoracella", + "1751482": "Trosia", + "1751497": "Trosia semirufa", + "1751507": "Trosia fumosa", + "1751509": "Trosia misda", + "1751519": "Thoscora", + "1751524": "Thoscora ribbei", + "1751552": "Megalopyge", + "1751557": "Megalopyge pixidifera", + "1751572": "Megalopyge opercularis", + "1751575": "Megalopyge crispata", + "1751588": "Megalopyge lanata", + "1751590": "Megalopyge tharops", + "1751606": "Megalopyge undulata", + "1751609": "Megalopyge ravida", + "1751625": "Megalopyge albicollis", + "1751626": "Megalopyge defoliata", + "1751655": "Norape", + "1751670": "Norape virgo", + "1751684": "Norape tener", + "1751690": "Norape cretata", + "1751774": "Macara", + "1751785": "Macara alydda", + "1751789": "Podalia", + "1751846": "Heterogynis", + "1751852": "Heterogynis andalusica", + "1751979": "Perola", + "1751980": "Perola villosipes", + "1751986": "Perola sericea", + "1752034": "Perola repetita", + "1752035": "Hampsonella", + "1752100": "Phobetron", + "1752109": "Phobetron hipparchia", + "1752111": "Phobetron pithecium", + "1752158": "Phocoderma", + "1752161": "Phocoderma velutina", + "1752234": "Acharia", + "1752236": "Phrixolepia", + "1752277": "Adoneta", + "1752281": "Adoneta bicaudata", + "1752285": "Adoneta spinuloides", + "1752286": "Adoneta gemina", + "1752321": "Parapluda", + "1752327": "Parapluda invitabilis", + "1752361": "Susica", + "1752373": "Susica sinensis", + "1752382": "Hoyosia", + "1752383": "Hoyosia codeti", + "1752474": "Ulamia", + "1752477": "Ulamia dolabrata", + "1752482": "Cania", + "1752483": "Cania bilinea", + "1752492": "Cania bandura", + "1752494": "Cania heppneri", + "1752533": "Doratifera", + "1752534": "Doratifera casta", + "1752536": "Doratifera pinguis", + "1752537": "Doratifera quadriguttata", + "1752539": "Doratifera stenora", + "1752545": "Doratifera vulnerans", + "1752547": "Doratifera oxleyi", + "1752552": "Thosea", + "1752603": "Thosea sinensis", + "1752650": "Iraga", + "1752651": "Iraga rugosa", + "1752744": "Miresa", + "1752749": "Miresa fulgida", + "1752758": "Miresa kwangtungensis", + "1752775": "Miresa clarissa", + "1752804": "Micraphe", + "1752805": "Micraphe lateritia", + "1752820": "Prolimacodes", + "1752825": "Prolimacodes badia", + "1752832": "Prolimacodes trigona", + "1752848": "Scopelodes", + "1752849": "Scopelodes contracta", + "1752891": "Isochaetes", + "1752894": "Isochaetes beutenmuelleri", + "1752899": "Chalcocelis", + "1752903": "Chalcocelis albiguttatus", + "1752915": "Monoleuca", + "1752923": "Monoleuca semifascia", + "1752944": "Pseudanapaea", + "1752946": "Pseudanapaea denotata", + "1752947": "Pseudanapaea transvestita", + "1752965": "Alarodia", + "1753080": "Nagodopsis", + "1753081": "Nagodopsis shirakiana", + "1753104": "Tortricidia", + "1753105": "Tortricidia pallida", + "1753106": "Tortricidia flexuosa", + "1753111": "Tortricidia testacea", + "1753147": "Euclea", + "1753211": "Belippa", + "1753215": "Belippa horrida", + "1753224": "Parasa", + "1753395": "Parasa sinica", + "1753410": "Narosa", + "1753432": "Narosa nigrisigna", + "1753435": "Narosa corusca", + "1753458": "Parasoidea", + "1753461": "Parasoidea paroa", + "1753548": "Oxyplax", + "1753594": "Semyra", + "1753603": "Semyra bella", + "1753604": "Semyra finita", + "1753630": "Narosoideus", + "1753636": "Narosoideus flavidorsalis", + "1753657": "Natada", + "1753661": "Natada debella", + "1753668": "Natada nasoni", + "1753747": "Setora", + "1753759": "Setora postornata", + "1753802": "Monema", + "1753826": "Birthamula", + "1753830": "Sibine", + "1753833": "Sibine apicalis", + "1753864": "Sibine horrida", + "1753871": "Sibine nesea", + "1753896": "Comana", + "1753902": "Comana collaris", + "1753906": "Comana albibasis", + "1753921": "Packardia", + "1753922": "Packardia elegans", + "1753929": "Packardia geminata", + "1753981": "Lithacodes", + "1754133": "Thyrassia", + "1754135": "Thyrassia penangae", + "1754176": "Aglaope", + "1754183": "Aglaope infausta", + "1754253": "Pompelon", + "1754263": "Pompelon marginata", + "1754269": "Malthaca", + "1754270": "Malthaca dimidiata", + "1754315": "Sinica", + "1754329": "Rhagades", + "1754332": "Rhagades pruni", + "1754344": "Eterusia", + "1754368": "Eterusia aedea", + "1754380": "Eterusia taiwana", + "1754391": "Gynautocera", + "1754400": "Gynautocera rubriscutellata", + "1754412": "Harrisina", + "1754463": "Heteropan", + "1754465": "Heteropan submacula", + "1754508": "Pidorus", + "1754511": "Pidorus leno", + "1754516": "Pidorus gemina", + "1754535": "Pidorus atratus", + "1754609": "Piarosoma", + "1754618": "Turneriprocris", + "1754619": "Turneriprocris dolens", + "1754799": "Pollanisus", + "1754803": "Pollanisus subdolosa", + "1754806": "Pollanisus cupreus", + "1754814": "Pollanisus viridipulverulenta", + "1754857": "Clelea", + "1754901": "Erasmiphlebohecta", + "1754902": "Erasmiphlebohecta picturata", + "1754916": "Retina", + "1754919": "Retina rubrivitta", + "1754927": "Histia", + "1754933": "Histia flabellicornis", + "1755125": "Rhodopsona", + "1755131": "Rhodopsona rutila", + "1755149": "Soritia", + "1755233": "Chalcosia", + "1755237": "Chalcosia remota", + "1755248": "Chalcosia diana", + "1755253": "Chalcosia formosana", + "1755276": "Chalcosia thaivana", + "1755294": "Zygaena", + "1757647": "Trypanophora", + "1757652": "Trypanophora semihyalina", + "1757668": "Cyclosia", + "1757834": "Acoloithus", + "1757839": "Acoloithus falsarius", + "1757850": "Artona", + "1757853": "Artona martini", + "1757883": "Erasmia", + "1757993": "Phauda", + "1758003": "Phauda flammans", + "1758098": "Lactura", + "1758114": "Lactura calliphylla", + "1758146": "Lactura panopsia", + "1758313": "Dalcerides", + "1758439": "Alampla", + "1758440": "Alampla palaeodes", + "1758441": "Alampla arcifraga", + "1758446": "Imma", + "1758461": "Imma mylias", + "1758596": "Imma acosma", + "1758602": "Imma loxoscia", + "1758610": "Karana", + "1758613": "Karana gemmifera", + "1758620": "Nagadeba", + "1758625": "Nagadeba indecoralis", + "1758718": "Checupa", + "1758724": "Bityla", + "1758727": "Bityla defigurata", + "1758765": "Spragueia", + "1758767": "Spragueia guttata", + "1758771": "Spragueia funeralis", + "1758781": "Spragueia jaguaralis", + "1758783": "Spragueia magnifica", + "1758790": "Ponometia", + "1758812": "Balsa", + "1758827": "Chasmina", + "1758839": "Chasmina tibialis", + "1758850": "Chasmina pulchra", + "1758859": "Dyspyralis", + "1758860": "Dyspyralis puncticosta", + "1758861": "Dyspyralis nigellus", + "1758866": "Dyspyralis illocata", + "1758873": "Eupsilia", + "1758874": "Eupsilia quadrilinea", + "1758878": "Eupsilia transversa", + "1758879": "Eupsilia tristigmata", + "1758898": "Eupsilia devia", + "1758906": "Eupsilia vinulenta", + "1758916": "Eupsilia morrisoni", + "1758939": "Lophoptera", + "1759029": "Lacanobia", + "1759037": "Lacanobia nevadae", + "1759040": "Lacanobia radix", + "1759041": "Lacanobia atlantica", + "1759055": "Lacanobia contigua", + "1759069": "Lacanobia thalassina", + "1759079": "Lacanobia w-latinum", + "1759083": "Lacanobia oleracea", + "1759092": "Lacanobia subjuncta", + "1759097": "Lacanobia aliena", + "1759149": "Itmaharela", + "1759150": "Itmaharela basalis", + "1759152": "Atethmia", + "1759153": "Atethmia centrago", + "1759159": "Atethmia ambusta", + "1759176": "Eugraptoblemma", + "1759177": "Eugraptoblemma pictalis", + "1759329": "Catabena", + "1759338": "Catabena lineolata", + "1759351": "Oruza cariosa", + "1759394": "Oruza mira", + "1759405": "Opigena", + "1759407": "Opigena polygona", + "1759552": "Lithophane", + "1759553": "Lithophane baileyi", + "1759563": "Lithophane semiusta", + "1759573": "Lithophane disposita", + "1759585": "Lithophane dilatocula", + "1759597": "Lithophane semibrunnea", + "1759605": "Lithophane thaxteri", + "1759610": "Lithophane pexata", + "1759611": "Lithophane antennata", + "1759620": "Lithophane consocia", + "1759621": "Lithophane petulca", + "1759624": "Lithophane georgii", + "1759631": "Lithophane grotei", + "1759632": "Lithophane innominata", + "1759633": "Lithophane pertorrida", + "1759634": "Lithophane amanda", + "1759661": "Lithophane furcifera", + "1759667": "Lithophane socia", + "1759668": "Lithophane ornitopus", + "1759671": "Lithophane unimoda", + "1759673": "Lithophane leautieri", + "1759677": "Lithophane patefacta", + "1759678": "Lithophane hemina", + "1759686": "Lithophane lamda", + "1759688": "Lithophane bethunei", + "1759691": "Lithophane oriunda", + "1759694": "Lithophane fagina", + "1759711": "Abagrotis", + "1759719": "Abagrotis alternata", + "1759767": "Daddala", + "1759775": "Daddala lucilla", + "1759797": "Stibaera", + "1759799": "Stibaera thyatiroides", + "1759812": "Aegocera", + "1759878": "Azenia", + "1759881": "Azenia implora", + "1759882": "Lophoruza", + "1760088": "Mesoligia", + "1760104": "Mesoligia furuncula", + "1760135": "Platyja", + "1760140": "Platyja torsilinea", + "1760168": "Persectania", + "1760172": "Persectania ewingii", + "1760173": "Persectania aversa", + "1760175": "Persectania dyscrita", + "1760198": "Maguda", + "1760201": "Maguda suffusa", + "1760233": "Phytometra orgiae", + "1760244": "Phytometra sanctiflorentis", + "1760246": "Phytometra viridaria", + "1760257": "Phytometra ernestinana", + "1760260": "Nigetia", + "1760261": "Nigetia formosalis", + "1760285": "Cropia", + "1760309": "Cropia connecta", + "1760355": "Aleptina", + "1760361": "Aleptina inca", + "1760382": "Toxonprucha", + "1760384": "Toxonprucha clientis", + "1760385": "Toxonprucha crudelis", + "1760396": "Toxonprucha pardalis", + "1760397": "Toxonprucha excavata", + "1760398": "Toxonprucha repentis", + "1760400": "Toxonprucha volucris", + "1760401": "Perigrapha", + "1760447": "Phosphila", + "1760454": "Phosphila turbulenta", + "1760455": "Phosphila miselioides", + "1760583": "Diphthera", + "1760588": "Trachea", + "1760593": "Trachea atriplicis", + "1760620": "Trachea auriplena", + "1760678": "Eucirroedia", + "1760682": "Eucirroedia pampina", + "1760738": "Lasionycta", + "1760849": "Aporophyla", + "1760857": "Aporophyla australis", + "1760867": "Aporophyla chioleuca", + "1760887": "Aporophyla lueneburgensis", + "1760891": "Aporophyla nigra", + "1760893": "Aporophyla lutulenta", + "1760914": "Dinumma", + "1760927": "Dinumma deponens", + "1760928": "Eugnathia", + "1760939": "Eugnathia lunifera", + "1760943": "Eugnathia albicostalis", + "1760946": "Raphia", + "1760969": "Nechesia", + "1760970": "Nechesia albotentata", + "1761017": "Hada", + "1761041": "Hada plebeja", + "1761094": "Callistege", + "1761101": "Callistege triangula", + "1761102": "Callistege intercalaris", + "1761110": "Callistege diagonalis", + "1761111": "Callistege mi", + "1761132": "Gerra", + "1761143": "Gerra sevorsa", + "1761207": "Dierna", + "1761213": "Dierna strigata", + "1761351": "Goniocraspidum", + "1761353": "Goniocraspidum pryeri", + "1761385": "Tephriopis", + "1761387": "Tephriopis divulsa", + "1761388": "Calymma", + "1761392": "Calymma communimacula", + "1761401": "Axylia", + "1761438": "Axylia putris", + "1761439": "Axylia annularis", + "1761495": "Achatodes", + "1761498": "Achatodes zeae", + "1761539": "Goniocraspedon", + "1761550": "Proroblemma", + "1761553": "Proroblemma testa", + "1761561": "Acherdoa", + "1761563": "Acherdoa ferraria", + "1761571": "Esthlodora", + "1761572": "Esthlodora variabilis", + "1761573": "Esthlodora versicolor", + "1761728": "Mormo", + "1761735": "Mormo maura", + "1761750": "Dasypodia", + "1761751": "Dasypodia selenophora", + "1761752": "Dasypodia cymatodes", + "1761775": "Paradiopa", + "1761778": "Paradiopa postfusca", + "1761787": "Hecatesia", + "1761788": "Hecatesia fenestrata", + "1761789": "Hecatesia thyridion", + "1761797": "Acerra", + "1761798": "Acerra normalis", + "1761815": "Diatenes", + "1761820": "Diatenes aglossoides", + "1761829": "Lascoria", + "1761838": "Lascoria ambigualis", + "1761857": "Auchmis", + "1761865": "Auchmis detersa", + "1761889": "Anicla", + "1761892": "Anicla infecta", + "1762149": "Arcte", + "1762151": "Arcte coerula", + "1762194": "Dahlia", + "1762212": "Progonia", + "1762219": "Progonia oileusalis", + "1762225": "Psimada", + "1762226": "Psimada quadripennis", + "1762232": "Simyra", + "1762244": "Simyra albovenosa", + "1762271": "Simyra nervosa", + "1762280": "Caenurgia", + "1762286": "Caenurgia chloropha", + "1762293": "Condate", + "1762298": "Condate hypenoides", + "1762346": "Sesamia", + "1762383": "Sesamia nonagrioides", + "1762414": "Parallelia", + "1762474": "Parallelia bistriaris", + "1762605": "Protolampra", + "1762608": "Protolampra sobrina", + "1762609": "Protolampra brunneicollis", + "1762615": "Protolampra rufipectus", + "1762640": "Tiracola", + "1762657": "Tiracola plagiata", + "1762666": "Phyllophila", + "1762680": "Phyllophila obliterata", + "1762711": "Lesmone", + "1762841": "Artigisa", + "1762849": "Artigisa melanephele", + "1762852": "Artigisa impropria", + "1762885": "Ophyx", + "1762887": "Ophyx ochroptera", + "1762898": "Phalaenoides", + "1762900": "Phalaenoides tristifica", + "1762902": "Phalaenoides glycinae", + "1763072": "Acontia lucida", + "1763151": "Eulepidotis", + "1763156": "Eulepidotis hermura", + "1763163": "Eulepidotis juncida", + "1763184": "Eulepidotis julianata", + "1763199": "Eulepidotis rectimargo", + "1763223": "Eulepidotis testaceiceps", + "1763256": "Eulepidotis viridissima", + "1763285": "Cucullia", + "1763588": "Parolulis", + "1763589": "Parolulis renalis", + "1763591": "Ommatophora", + "1763597": "Cerapteryx", + "1763610": "Cerapteryx graminis", + "1763649": "Throana", + "1763650": "Throana pectinifer", + "1763693": "Trigonophora", + "1763697": "Trigonophora flammea", + "1763713": "Mimeusemia", + "1763727": "Mimeusemia vilemani", + "1763741": "Mimeusemia postica", + "1763761": "Trigonodes cephise", + "1763777": "Olulis", + "1763782": "Olulis puncticinctalis", + "1763804": "Hyposemansis", + "1763812": "Hyposemansis singha", + "1763951": "Ericeia", + "1763957": "Ericeia plaesiodes", + "1763976": "Ericeia inangulata", + "1763994": "Ericeia sobria", + "1764015": "Ercheia", + "1764021": "Ercheia niveostrigata", + "1764032": "Ercheia umbrosa", + "1764043": "Ercheia cyllaria", + "1764060": "Ercheia dubia", + "1764140": "Bryolymnia", + "1764158": "Pseudozarba", + "1764174": "Pseudozarba bipartita", + "1764178": "Pseudozarba orthopetes", + "1764187": "Donuca", + "1764234": "Chaetaglaea", + "1764238": "Chaetaglaea sericea", + "1764504": "Neeugoa", + "1764524": "Colobochyla", + "1764525": "Colobochyla interpuncta", + "1764531": "Colobochyla salicalis", + "1764537": "Adisura", + "1764553": "Adisura marginalis", + "1764638": "Chilkasa", + "1764640": "Chilkasa falcata", + "1764670": "Calliergis", + "1764673": "Calliergis ramosa", + "1764684": "Micrathetis", + "1764686": "Micrathetis dasarada", + "1764690": "Micrathetis canifimbria", + "1764691": "Micrathetis costiplaga", + "1764693": "Micrathetis triplex", + "1764709": "Oxicesta", + "1764716": "Oxicesta geographica", + "1764737": "Hermonassa", + "1764791": "Hermonassa cecilia", + "1764851": "Avatha", + "1764880": "Avatha chinensis", + "1764886": "Avatha discolor", + "1764916": "Oslaria", + "1764917": "Oslaria viridifera", + "1764920": "Caradrina", + "1764929": "Caradrina multifera", + "1764986": "Caradrina aspersa", + "1764987": "Caradrina gilva", + "1765010": "Caradrina albina", + "1765011": "Caradrina morpheus", + "1765017": "Caradrina kadenii", + "1765038": "Caradrina terrea", + "1765044": "Caradrina montana", + "1765069": "Caradrina proxima", + "1765073": "Caradrina germainii", + "1765092": "Phoberia", + "1765097": "Phoberia atomaris", + "1765154": "Oxythres", + "1765155": "Oxythres splendens", + "1765161": "Nephelodes", + "1765172": "Nephelodes minians", + "1765176": "Scolecocampa", + "1765182": "Scolecocampa liburna", + "1765207": "Spodoptera", + "1765494": "Burgena", + "1765508": "Burgena varia", + "1765601": "Alvaradoia", + "1765604": "Alvaradoia disjecta", + "1765652": "Sympis", + "1765653": "Sympis rufibasis", + "1765657": "Arasada", + "1765658": "Arasada pyraliformis", + "1765726": "Oxycnemis", + "1765733": "Oxycnemis fusimacula", + "1765751": "Tathorhynchus exsiccata", + "1765752": "Tathorhynchus fallax", + "1765763": "Melanchra", + "1765767": "Melanchra persicariae", + "1765769": "Melanchra pulverulenta", + "1765779": "Melanchra picta", + "1765798": "Melanchra assimilis", + "1765861": "Sarobides", + "1765863": "Sarobides inconclusa", + "1765877": "Thalatha", + "1765895": "Idalima", + "1765898": "Idalima affinis", + "1765949": "Dicycla", + "1765954": "Dicycla oo", + "1765960": "Iodopepla", + "1765962": "Iodopepla ualbum", + "1765996": "Hydrillodes nilgirialis", + "1765997": "Hydrillodes uliginosalis", + "1765999": "Hydrillodes lentalis", + "1766007": "Hydrillodes funestalis", + "1766022": "Hydrillodes torsivena", + "1766066": "Agoma", + "1766072": "Agoma trimenii", + "1766077": "Synthymia", + "1766086": "Synthymia fixa", + "1766123": "Amphipyra", + "1766128": "Amphipyra berbera", + "1766130": "Amphipyra livida", + "1766131": "Amphipyra perflua", + "1766137": "Amphipyra pyramidea", + "1766193": "Amphipyra glabella", + "1766205": "Amphipyra pyramidoides", + "1766210": "Amphipyra tragopoginis", + "1766234": "Hemibryomima", + "1766237": "Hemibryomima chryselectra", + "1766259": "Aroana", + "1766260": "Aroana baliensis", + "1766265": "Asteroscopus", + "1766274": "Asteroscopus sphinx", + "1766280": "Rachiplusia", + "1766285": "Rachiplusia nu", + "1766287": "Rachiplusia ou", + "1766366": "Oligia", + "1766392": "Oligia minuscula", + "1766410": "Oligia latruncula", + "1766418": "Oligia versicolor", + "1766489": "Oligia divesta", + "1766509": "Oligia modica", + "1766510": "Oligia fasciuncula", + "1766538": "Agamana", + "1766547": "Erebus", + "1766558": "Erebus terminitincta", + "1766560": "Erebus crepuscularis", + "1766570": "Erebus ephesperis", + "1766584": "Erebus albicincta", + "1766601": "Erebus gemmans", + "1766612": "Erebus walkeri", + "1766618": "Erebus hieroglyphica", + "1766624": "Anaplectoides", + "1766646": "Anaplectoides prasina", + "1766650": "Anaplectoides pressus", + "1766671": "Epidromia", + "1766708": "Chersotis", + "1766718": "Chersotis ocellina", + "1766721": "Chersotis margaritacea", + "1766741": "Chersotis cuprea", + "1766773": "Chersotis rectangula", + "1766784": "Chersotis fimbriola", + "1766814": "Chersotis multangula", + "1766838": "Litoprosopus", + "1766839": "Litoprosopus coachella", + "1766845": "Litoprosopus futilis", + "1766874": "Coxina", + "1766880": "Coxina cinctipalpis", + "1766883": "Singara", + "1766888": "Singara diversalis", + "1766892": "Pseudogyrtona fulvana", + "1766908": "Yepcalphis", + "1766910": "Yepcalphis dilectissima", + "1766914": "Pleromelloida", + "1766917": "Pleromelloida bonuscula", + "1766919": "Pleromelloida conserta", + "1766921": "Pleromelloida cinerea", + "1767029": "Litocala", + "1767031": "Litocala sexsignata", + "1767032": "Cymatophoropsis", + "1767044": "Cymatophoropsis formosana", + "1767046": "Magusa", + "1767052": "Magusa divaricata", + "1767093": "Chytonix", + "1767134": "Chytonix variegata", + "1767140": "Chytonix sensilis", + "1767142": "Chytonix palliatricula", + "1767210": "Axiocteta", + "1767215": "Axiocteta oenoplex", + "1767259": "Autoba dispar", + "1767293": "Autoba tristalis", + "1767302": "Autoba gayneri", + "1767304": "Bulia", + "1767307": "Bulia confirmans", + "1767320": "Bulia deducta", + "1767334": "Homorthodes", + "1767335": "Homorthodes communis", + "1767336": "Homorthodes furfurata", + "1767337": "Homorthodes fractura", + "1767338": "Homorthodes lindseyi", + "1767347": "Homorthodes hanhami", + "1767360": "Maliattha", + "1767368": "Maliattha signifera", + "1767381": "Maliattha amorpha", + "1767393": "Maliattha separata", + "1767430": "Maliattha ritsemae", + "1767483": "Cerma", + "1767484": "Cerma cora", + "1767496": "Ramphia", + "1767499": "Ramphia albizona", + "1767504": "Palpidia", + "1767508": "Palpidia pallidior", + "1767509": "Protoschinia", + "1767511": "Protoschinia scutosa", + "1767514": "Helia", + "1767566": "Bagisara", + "1767571": "Bagisara repanda", + "1767579": "Bagisara rectifascia", + "1767584": "Bagisara buxea", + "1767590": "Abrostola", + "1767597": "Abrostola triplasia", + "1767602": "Abrostola urentis", + "1767608": "Abrostola asclepiadis", + "1767612": "Abrostola microvalis", + "1767625": "Abrostola tripartita", + "1767628": "Abrostola ovalis", + "1767644": "Mythimna", + "1767655": "Mythimna turca", + "1767674": "Mythimna prominens", + "1767714": "Abacena", + "1767719": "Abacena mundula", + "1767752": "Episparis", + "1767755": "Episparis taiwana", + "1767758": "Episparis costistriga", + "1767779": "Episparis liturata", + "1767780": "Episparis tortuosalis", + "1767796": "Cyclodes", + "1767878": "Rhesala", + "1767883": "Rhesala moestalis", + "1767949": "Heraclia", + "1768042": "Heraclia africana", + "1768048": "Heraclia superba", + "1768106": "Macdunnoughia", + "1768117": "Macdunnoughia confusa", + "1768130": "Macronoctua", + "1768132": "Macronoctua onusta", + "1768136": "Xylocampa", + "1768150": "Xylocampa areola", + "1768165": "Cirrhophanus", + "1768172": "Cirrhophanus triangulifer", + "1768174": "Cirrhophanus dyari", + "1768190": "Arrade destituta", + "1768196": "Agnorisma bollii", + "1768199": "Agnorisma badinodis", + "1768201": "Agnorisma bugrai", + "1768212": "Rhanidophora phedonia", + "1768222": "Calamia", + "1768281": "Latebraria", + "1768283": "Latebraria amphipyroides", + "1768302": "Gortyna", + "1768308": "Gortyna borelii", + "1768341": "Gortyna flavago", + "1768411": "Thalpophila", + "1768432": "Hyperlopha", + "1768440": "Hyperlopha compactilis", + "1768459": "Chalciope delta", + "1768461": "Chalciope mygdon", + "1768462": "Chalciope alcyona", + "1768542": "Physetica", + "1768546": "Physetica sequens", + "1768554": "Physetica cucullina", + "1768557": "Physetica phricias", + "1768560": "Physetica caerulea", + "1768561": "Busseola", + "1768568": "Busseola submarginalis", + "1768579": "Artena", + "1768626": "Raparna conicephala", + "1768630": "Raparna crocophara", + "1768691": "Conistra", + "1768698": "Conistra albipuncta", + "1768702": "Conistra vaccinii", + "1768727": "Conistra staudingeri", + "1768729": "Conistra ligula", + "1768735": "Conistra torrida", + "1768741": "Conistra daubei", + "1768749": "Conistra rubiginosa", + "1768771": "Conistra rubiginea", + "1768815": "Conistra erythrocephala", + "1768819": "Conistra veronicae", + "1768896": "Ramadasa", + "1768898": "Ramadasa pavo", + "1768949": "Euplexidia", + "1768971": "Eutrichopidia", + "1768972": "Eutrichopidia latinus", + "1768999": "Elousa", + "1769000": "Elousa mima", + "1769008": "Acosmetia", + "1769024": "Lophoterges", + "1769029": "Lophoterges millierei", + "1769051": "Dasypolia", + "1769057": "Dasypolia templi", + "1769093": "Zonoplusia", + "1769095": "Zonoplusia ochreata", + "1769098": "Laspeyria", + "1769103": "Laspeyria flexula", + "1769110": "Prometopus", + "1769114": "Prometopus inassueta", + "1769165": "Euplocia", + "1769168": "Euplocia membliaria", + "1769189": "Diphtherocome", + "1769194": "Diphtherocome abbreviata", + "1769208": "Ipanica", + "1769209": "Ipanica cornigera", + "1769212": "Proteuxoa", + "1769225": "Proteuxoa restituta", + "1769245": "Proteuxoa chrysospila", + "1769250": "Proteuxoa capularis", + "1769260": "Proteuxoa tortisigna", + "1769271": "Proteuxoa porphyrescens", + "1769272": "Proteuxoa cinereicollis", + "1769283": "Proteuxoa bistrigula", + "1769293": "Proteuxoa tibiata", + "1769294": "Proteuxoa testaceicollis", + "1769298": "Proteuxoa nuna", + "1769302": "Proteuxoa comma", + "1769308": "Proteuxoa hydraecioides", + "1769310": "Proteuxoa amaurodes", + "1769311": "Crithote", + "1769330": "Phyprosopus", + "1769336": "Phyprosopus callitrichoides", + "1769393": "Tamba", + "1769410": "Tamba costinotata", + "1769425": "Tamba apicata", + "1769465": "Tamba lala", + "1769504": "Cosmia", + "1769505": "Cosmia pyralina", + "1769519": "Cosmia affinis", + "1769543": "Cosmia diffinis", + "1769566": "Cosmia trapezina", + "1769592": "Cosmia calami", + "1769735": "Hypopyra", + "1769737": "Hypopyra ossigera", + "1769739": "Hypopyra capensis", + "1769772": "Hypopyra vespertilio", + "1769812": "Copanarta", + "1769814": "Copanarta aurea", + "1769819": "Rivula", + "1769823": "Rivula striatura", + "1769827": "Rivula basalis", + "1769840": "Rivula cognata", + "1769841": "Rivula propinqualis", + "1769852": "Rivula niveipuncta", + "1769897": "Rivula sericealis", + "1769901": "Rivula aequalis", + "1769933": "Triocnemis", + "1769934": "Triocnemis saporis", + "1769943": "Rileyiana", + "1769944": "Rileyiana fovea", + "1769945": "Eurois", + "1769947": "Eurois astricta", + "1769958": "Eurois occulta", + "1769972": "Xenotrachea", + "1769978": "Xenotrachea albidisca", + "1770011": "Gonodonta", + "1770038": "Gonodonta sinaldus", + "1770044": "Gonodonta pyrgo", + "1770123": "Enargia", + "1770132": "Enargia infumata", + "1770144": "Enargia decolor", + "1770150": "Enargia paleacea", + "1770169": "Rhynchaglaea", + "1770172": "Rhynchaglaea scitula", + "1770260": "Pyrgion", + "1770263": "Pyrgion repanda", + "1770274": "Luperina", + "1770307": "Luperina testacea", + "1770353": "Luperina dumerilii", + "1770379": "Cutina", + "1770380": "Cutina arcuata", + "1770383": "Cutina albopunctella", + "1770384": "Cutina distincta", + "1770385": "Cutina aluticolor", + "1770396": "Ochropleura", + "1770416": "Ochropleura leucogaster", + "1770461": "Ochropleura implecta", + "1770477": "Ochropleura plecta", + "1770488": "Euchalcia", + "1770530": "Euchalcia variabilis", + "1770569": "Sedina", + "1770573": "Sedina buettneri", + "1770592": "Eucarta", + "1770658": "Metaponpneumata", + "1770659": "Metaponpneumata rogenhoferi", + "1770772": "Agrotis puta", + "1770773": "Agrotis simplonia", + "1770821": "Agrotis trux", + "1770828": "Agrotis gladiaria", + "1770849": "Agrotis infusa", + "1770869": "Agrotis cinerea", + "1770880": "Agrotis vestigialis", + "1770918": "Agrotis venerabilis", + "1770955": "Agrotis malefida", + "1771019": "Agrotis vancouverensis", + "1771040": "Agrotis segetum", + "1771055": "Agrotis volubilis", + "1771067": "Agrotis vetusta", + "1771143": "Agrotis lata", + "1771169": "Agrotis fatidica", + "1771203": "Agrotis porphyricollis", + "1771204": "Agrotis ripae", + "1771214": "Agrotis exclamationis", + "1771245": "Agrotis ipsilon", + "1771296": "Agrotis munda", + "1771308": "Agrotis interjectionis", + "1771356": "Heterorta", + "1771357": "Heterorta plutonis", + "1771363": "Amphipoea", + "1771385": "Amphipoea oculea", + "1771391": "Amphipoea crinanensis", + "1771441": "Amphipoea americana", + "1771448": "Cissusa", + "1771454": "Ctenusa", + "1771455": "Ctenusa pallida", + "1771501": "Tholera", + "1771509": "Tholera decimalis", + "1771531": "Tholera cespitis", + "1771541": "Hypersypnoides", + "1771549": "Plusiopalpa", + "1771555": "Plusiopalpa adrasta", + "1771562": "Drasteria", + "1771634": "Xanthia gilvago", + "1771650": "Xanthia ocellaris", + "1771675": "Xanthia rectilineata", + "1771678": "Xanthia icteritia", + "1771698": "Xanthia togata", + "1771772": "Polypogon tentacularia", + "1771779": "Polypogon gryphalis", + "1771838": "Cephena", + "1771839": "Cephena costata", + "1771845": "Hypsoropha", + "1771846": "Hypsoropha monilis", + "1771848": "Hypsoropha hormos", + "1771850": "Metallata", + "1771859": "Metallata absumens", + "1771866": "Olivenebula", + "1771871": "Eosphoropteryx", + "1771872": "Eosphoropteryx thyatyroides", + "1771881": "Chlumetia", + "1771903": "Chlumetia transversa", + "1771972": "Tinolius", + "1771975": "Tinolius hypsana", + "1771977": "Tinolius eburneigutta", + "1771980": "Sympistis", + "1771997": "Sympistis zetterstedti", + "1772013": "Sympistis heliophila", + "1772042": "Pseudeva", + "1772043": "Pseudeva purpurigera", + "1772053": "Thysania", + "1772092": "Xylostola", + "1772094": "Xylostola indistincta", + "1772151": "Narangodes", + "1772155": "Plusia", + "1772169": "Plusia putnami", + "1772179": "Plusia festucae", + "1772253": "Recoropha", + "1772255": "Recoropha canteneri", + "1772259": "Spiloloma", + "1772260": "Spiloloma lunilinea", + "1772349": "Sphingomorpha", + "1772352": "Sphingomorpha chlorea", + "1772359": "Lamprotes", + "1772374": "Cortyta canescens", + "1772421": "Psectraglaea", + "1772422": "Psectraglaea carnosa", + "1772425": "Spargaloma", + "1772427": "Spargaloma perditalis", + "1772428": "Spargaloma sexpunctata", + "1772445": "Cometaster", + "1772447": "Cometaster pyrula", + "1772455": "Xylomoia", + "1772462": "Xylomoia chagnoni", + "1772540": "Prionopterina", + "1772543": "Prionopterina grammatistis", + "1772660": "Neumichtis", + "1772668": "Neumichtis saliaris", + "1772688": "Prionofrontia", + "1772689": "Prionofrontia strigata", + "1772714": "Phalaenostola", + "1772716": "Phalaenostola larentioides", + "1772783": "Pechipogo", + "1772793": "Pechipogo strigilata", + "1772822": "Zethes insularis", + "1772826": "Plecoptera", + "1772926": "Euxoa", + "1772940": "Euxoa tritici", + "1772954": "Euxoa scandens", + "1772956": "Euxoa obelisca", + "1772977": "Euxoa ochrogaster", + "1773002": "Euxoa divergens", + "1773062": "Euxoa decora", + "1773069": "Euxoa obeliscoides", + "1773081": "Euxoa albipennis", + "1773163": "Euxoa nigricans", + "1773231": "Euxoa vitta", + "1773248": "Euxoa velleripennis", + "1773309": "Euxoa cursoria", + "1773313": "Euxoa tessellata", + "1773315": "Euxoa bostoniensis", + "1773328": "Euxoa recussa", + "1773377": "Euxoa culminicola", + "1773484": "Euxoa aquilina", + "1773510": "Euxoa pluralis", + "1773572": "Euxoa eruta", + "1773577": "Euxoa detersa", + "1773662": "Euxoa comosa", + "1773677": "Euxoa hollemani", + "1773728": "Euxoa messoria", + "1773740": "Psaphida", + "1773742": "Psaphida resumens", + "1773743": "Psaphida thaxterianus", + "1773744": "Psaphida grotei", + "1773746": "Psaphida electilis", + "1773781": "Chamaeclea", + "1773783": "Chamaeclea basiochrea", + "1773784": "Chamaeclea pernana", + "1773846": "Properigea", + "1773901": "Yigoga forcipula", + "1773904": "Yigoga signifera", + "1773983": "Allotria", + "1774068": "Heterormista", + "1774069": "Heterormista modesta", + "1774090": "Fishia", + "1774092": "Fishia discors", + "1774095": "Fishia yosemitae", + "1774237": "Neumoegenia", + "1774243": "Neumoegenia poetica", + "1774251": "Epiglaea", + "1774253": "Epiglaea apiata", + "1774254": "Epiglaea decliva", + "1774256": "Orthodes", + "1774262": "Orthodes cynica", + "1774268": "Orthodes furtiva", + "1774269": "Epimecia", + "1774272": "Epimecia ustula", + "1774283": "Valeria jaspidea", + "1774285": "Valeria oleagina", + "1774309": "Spaelotis", + "1774314": "Spaelotis clandestina", + "1774347": "Spaelotis ravida", + "1774357": "Cerathosia", + "1774358": "Cerathosia tricolor", + "1774366": "Eustrotia", + "1774470": "Eustrotia decissima", + "1774573": "Pilipectus", + "1774575": "Pilipectus taiwanus", + "1774576": "Pilipectus prunifera", + "1774583": "Asota egens", + "1774598": "Asota heliconia", + "1774600": "Asota speciosa", + "1774604": "Asota orbona", + "1774618": "Asota plana", + "1774626": "Asota ficus", + "1774635": "Asota producta", + "1774640": "Asota tortuosa", + "1774654": "Asota caricae", + "1774661": "Asota plaginota", + "1774682": "Asota canaraica", + "1774691": "Asota plagiata", + "1774702": "Asota subsimilis", + "1774712": "Asota iodamia", + "1774778": "Amyna", + "1774792": "Amyna bullula", + "1774797": "Amyna punctum", + "1774826": "Calesia zambesita", + "1774829": "Calesia dasyptera", + "1774846": "Ceroctena", + "1774853": "Cleonymia", + "1774859": "Cleonymia baetica", + "1774873": "Cleonymia diffluens", + "1774878": "Cleonymia yvanii", + "1774906": "Aon", + "1774907": "Aon noctuiformis", + "1774917": "Apina", + "1774918": "Apina callisto", + "1774929": "Gonodes liquida", + "1774940": "Paradelta", + "1774947": "Pseudenargia", + "1774959": "Pseudenargia ulicis", + "1774997": "Ugia purpurea", + "1775029": "Aseptis", + "1775046": "Aseptis adnixa", + "1775055": "Aseptis binotata", + "1775058": "Dasygaster", + "1775081": "Sideridis", + "1775089": "Sideridis maryx", + "1775112": "Sideridis lampra", + "1775118": "Sideridis rosea", + "1775144": "Caduca", + "1775148": "Caduca albopunctata", + "1775149": "Dichonia", + "1775172": "Dichonia convergens", + "1775234": "Gesonia", + "1775275": "Eremochroa", + "1775279": "Eremochroa alphitias", + "1775285": "Meropleon", + "1775290": "Meropleon diversicolor", + "1775291": "Meropleon ambifusca", + "1775298": "Amephana", + "1775299": "Amephana anarrhini", + "1775301": "Amephana aurita", + "1775310": "Leucochlaena", + "1775329": "Leucochlaena oditis", + "1775505": "Basilodes", + "1775508": "Basilodes pepita", + "1775509": "Basilodes chrysopis", + "1775624": "Hypoperigea", + "1775631": "Hypoperigea tonsa", + "1775633": "Ammoconia", + "1775663": "Annaphila", + "1775672": "Annaphila diva", + "1775680": "Annaphila decia", + "1775759": "Audea", + "1775784": "Hypocoena", + "1775791": "Hypocoena inquinata", + "1775796": "Ascalapha odorata", + "1775833": "Hadula", + "1775864": "Behrensia", + "1775866": "Behrensia conchiformis", + "1775887": "Coenobia", + "1775891": "Coenobia rufa", + "1775910": "Allophyes", + "1775913": "Allophyes alfaroi", + "1775959": "Daseochaeta", + "1775962": "Daseochaeta viridis", + "1775963": "Daseochaeta pulchra", + "1775969": "Sericaglaea", + "1775970": "Sericaglaea signata", + "1775975": "Euparthenos", + "1775980": "Euparthenos nubilis", + "1775986": "Blepharita", + "1776067": "Blepharita amica", + "1776094": "Alypiodes bimaculata", + "1776158": "Calydia", + "1776163": "Calydia osseata", + "1776166": "Lemmeria", + "1776167": "Lemmeria digitalis", + "1776168": "Eremobia", + "1776181": "Feredayia", + "1776182": "Feredayia grammosa", + "1776205": "Scotochrosta", + "1776207": "Scotochrosta pulla", + "1776246": "Cyligramma", + "1776265": "Cyligramma fluctuosa", + "1776268": "Cyligramma latona", + "1776299": "Polia", + "1776330": "Polia nebulosa", + "1776371": "Polia bombycina", + "1776391": "Andropolia", + "1776397": "Andropolia theodori", + "1776406": "Andropolia aedon", + "1776413": "Eremobina", + "1776415": "Eremobina claudens", + "1776454": "Alypia", + "1776459": "Alypia maccullochii", + "1776462": "Alypia langtonii", + "1776467": "Alypia disparata", + "1776470": "Alypia wittfeldii", + "1776472": "Alypia mariposa", + "1776473": "Alypia ridingsii", + "1776476": "Alypia octomaculata", + "1776498": "Anisoneura", + "1776576": "Euplexia", + "1776618": "Euplexia benesimilis", + "1776619": "Euplexia lucipara", + "1776846": "Dypterygia", + "1776861": "Dypterygia patina", + "1776862": "Dypterygia scabriuscula", + "1776871": "Dypterygia rozmani", + "1776879": "Fagitana", + "1776880": "Fagitana littera", + "1776978": "Celaena", + "1777014": "Metalectra", + "1777024": "Metalectra richardsi", + "1777034": "Metalectra diabolica", + "1777052": "Metalectra discalis", + "1777075": "Metalectra quadrisignata", + "1777101": "Ectopatria", + "1777120": "Ectopatria horologa", + "1777137": "Miodera", + "1777139": "Miodera stigmata", + "1777140": "Sigela", + "1777156": "Oxyodes", + "1777165": "Oxyodes tricolor", + "1777166": "Oxyodes scrobiculata", + "1777174": "Panula", + "1777179": "Panula inconstans", + "1777243": "Diloba", + "1777253": "Diloba caeruleocephala", + "1777260": "Aplectoides", + "1777261": "Aplectoides condita", + "1777277": "Autophila", + "1777289": "Autophila dilucida", + "1777463": "Eutelia furcata", + "1777471": "Eutelia pulcherrimus", + "1777500": "Eutelia affinis", + "1777517": "Eutelia adulatrix", + "1777560": "Oria", + "1777629": "Calyptra", + "1777631": "Calyptra thalictri", + "1777692": "Arytrura", + "1777695": "Arytrura musculus", + "1777724": "Xanthopastis", + "1777727": "Xanthopastis timais", + "1777728": "Xanthopastis moctezuma", + "1777730": "Xanthopastis regnatrix", + "1777734": "Azeta", + "1777737": "Azeta rhodogaster", + "1777760": "Gerrodes", + "1777863": "Buzara", + "1777868": "Cerastis", + "1777907": "Cidariplura", + "1777925": "Anticarsia", + "1777942": "Anticarsia gemmatalis", + "1777971": "Papaipema", + "1777974": "Papaipema appassionata", + "1777976": "Papaipema impecuniosa", + "1777980": "Papaipema insulidens", + "1777982": "Papaipema rigida", + "1777994": "Papaipema cataphracta", + "1777996": "Papaipema speciosissima", + "1778000": "Papaipema unimoda", + "1778006": "Papaipema lysimachiae", + "1778007": "Papaipema nepheleptena", + "1778013": "Papaipema arctivorens", + "1778015": "Papaipema inquaesita", + "1778024": "Papaipema furcata", + "1778031": "Papaipema nebris", + "1778033": "Papaipema baptisiae", + "1778034": "Papaipema eupatorii", + "1778037": "Papaipema cerussata", + "1778045": "Papaipema pterisii", + "1778049": "Papaipema nelita", + "1778073": "Charanyca", + "1778074": "Charanyca trigrammica", + "1778103": "Lepidodes", + "1778108": "Flammona", + "1778109": "Flammona trilineata", + "1778114": "Senta", + "1778127": "Senta flammea", + "1778136": "Eugraphe", + "1778143": "Eugraphe sigma", + "1778156": "Sinarella", + "1778332": "Hexorthodes", + "1778337": "Hexorthodes serrata", + "1778406": "Plecopterodes", + "1778430": "Plecopterodes moderata", + "1778497": "Standfussiana", + "1778517": "Standfussiana lucernea", + "1778524": "Standfussiana wiskotti", + "1778527": "Exyra", + "1778534": "Exyra semicrocea", + "1778544": "Argyrostrotis", + "1778548": "Argyrostrotis quadrifilaris", + "1778549": "Argyrostrotis sylvarum", + "1778551": "Argyrostrotis deleta", + "1778555": "Argyrostrotis anilis", + "1778574": "Chilodes", + "1778596": "Chilodes maritima", + "1778600": "Phyllodes", + "1778626": "Simplicia", + "1778686": "Zosteropoda", + "1778688": "Zosteropoda hirtipes", + "1778695": "Leucania", + "1779253": "Araeopteron", + "1779258": "Araeopteron ecphaea", + "1779269": "Araeopteron epiphracta", + "1779276": "Araeopteron canescens", + "1779334": "Naenia typica", + "1779380": "Lophocalama", + "1779382": "Lophocalama neuritis", + "1779398": "Apopestes", + "1779399": "Apopestes spectrum", + "1779429": "Brachionycha", + "1779430": "Brachionycha borealis", + "1779435": "Brachionycha nubeculosa", + "1779445": "Batracharta", + "1779456": "Batracharta divisa", + "1779611": "Hadennia", + "1779630": "Pyrrhia", + "1779633": "Pyrrhia exprimens", + "1779641": "Pyrrhia umbra", + "1779643": "Pyrrhia cilisca", + "1779666": "Elaphristis", + "1779671": "Elaphristis psoloessa", + "1779682": "Brachylomia", + "1779690": "Brachylomia viminalis", + "1779709": "Brachylomia populi", + "1779713": "Brachylomia algens", + "1779739": "Bendisodes", + "1779740": "Bendisodes aeolia", + "1779957": "Litholomia", + "1779959": "Litholomia napaea", + "1780042": "Vietteania", + "1780049": "Vietteania intestata", + "1780068": "Comocrus", + "1780072": "Comocrus behri", + "1780139": "Parascotia", + "1780149": "Parascotia nisseni", + "1780150": "Parascotia fuliginaria", + "1780194": "Hepatica", + "1780207": "Ulolonche", + "1780209": "Ulolonche orbiculata", + "1780213": "Ulolonche modesta", + "1780214": "Ulolonche disticha", + "1780215": "Ulolonche culea", + "1780269": "Heliolonche", + "1780272": "Heliolonche pictipennis", + "1780287": "Anachrostis marginata", + "1780300": "Elaphria", + "1780309": "Elaphria chalcedonia", + "1780313": "Elaphria georgei", + "1780326": "Elaphria fuscimacula", + "1780330": "Elaphria nucicolora", + "1780344": "Elaphria versicolor", + "1780378": "Elaphria venustula", + "1780390": "Elaphria agrotina", + "1780407": "Elaphria subobliqua", + "1780414": "Elaphria festivoides", + "1780437": "Elaphria grata", + "1780440": "Elaphria deltoides", + "1780450": "Elaphria exesa", + "1780615": "Paectes", + "1780617": "Paectes pygmaea", + "1780646": "Paectes abrostoloides", + "1780668": "Paectes oculatrix", + "1780676": "Paectes abrostolella", + "1780700": "Ischyja", + "1780705": "Ischyja ferrifracta", + "1780716": "Ischyja manlia", + "1780844": "Eucoptocnemis", + "1780852": "Eucoptocnemis fimbriaris", + "1780855": "Rhapsa", + "1780856": "Rhapsa suscitatalis", + "1780857": "Rhapsa scotosialis", + "1780860": "Rhapsa eretmophora", + "1780861": "Amphiongia", + "1780862": "Amphiongia chordophoides", + "1780869": "Cerocala scapulosa", + "1780897": "Cerocala vermiculosa", + "1780913": "Polymixis", + "1780926": "Polymixis flavicincta", + "1780928": "Polymixis dubia", + "1780954": "Polymixis xanthomista", + "1781008": "Polymixis polymita", + "1781016": "Polymixis rufocincta", + "1781027": "Hemeroplanis", + "1781029": "Hemeroplanis scopulepes", + "1781038": "Hemeroplanis parallela", + "1781044": "Glympis", + "1781086": "Abablemma", + "1781160": "Zotheca", + "1781226": "Telorta", + "1781233": "Telorta edentata", + "1781234": "Telorta divergens", + "1781248": "Sophta concavata", + "1781350": "Oglasa umbrosa", + "1781353": "Oglasa mediopallens", + "1781413": "Hypocala deflorata", + "1781420": "Hypocala andremona", + "1781421": "Hypocala subsatura", + "1781428": "Hypocala guttiventris", + "1781446": "Egnasia ephyrodalis", + "1781473": "Egnasia nagadeboides", + "1781503": "Pericyma mendax", + "1781531": "Pericyma cruegeri", + "1781546": "Elusa", + "1781598": "Britha biguttata", + "1781630": "Clytie", + "1781683": "Coenophila", + "1781692": "Coenophila opacifrons", + "1781694": "Coenophila subrosea", + "1781695": "Lithacodia", + "1781803": "Lithacodia postvittata", + "1781819": "Lithacodia musta", + "1781841": "Lithacodia formosana", + "1781924": "Palthis", + "1781944": "Palthis angulalis", + "1781946": "Palthis asopialis", + "1781971": "Renia", + "1782029": "Hormoschista", + "1782031": "Hormoschista latipalpis", + "1782041": "Doryodes", + "1782106": "Saroba", + "1782115": "Saroba pustulifera", + "1782167": "Sphragifera", + "1782168": "Sphragifera sigillata", + "1782177": "Sphragifera biplagiata", + "1782184": "Crioa", + "1782185": "Crioa acronyctoides", + "1782205": "Ptichodis", + "1782208": "Ptichodis herbarum", + "1782211": "Ptichodis basilans", + "1782214": "Ptichodis vinculum", + "1782249": "Cerynea discontenta", + "1782267": "Cerynea thermesialis", + "1782273": "Cerynea punctilinealis", + "1782277": "Cerynea trogobasis", + "1782279": "Cerynea ustula", + "1782289": "Cerynea igniaria", + "1782310": "Polypogon fractalis", + "1782317": "Atypha", + "1782319": "Atypha pulmonaris", + "1782325": "Sandava", + "1782326": "Sandava scitisignata", + "1782328": "Sandava xylistis", + "1782330": "Callyna", + "1782341": "Callyna jugaria", + "1782354": "Callyna monoleuca", + "1782414": "Cydosia", + "1782422": "Cydosia aurivitta", + "1782424": "Cydosia nobilitella", + "1782456": "Clavipalpula", + "1782457": "Clavipalpula aurariae", + "1782460": "Aucha", + "1782466": "Aucha vesta", + "1782507": "Tolpia conscitulana", + "1782522": "Choephora", + "1782523": "Choephora fungorum", + "1782524": "Phlogophora", + "1782542": "Phlogophora periculosa", + "1782543": "Phlogophora albovittata", + "1782560": "Phlogophora meticulosa", + "1782579": "Phlogophora scita", + "1782585": "Phlogophora iris", + "1782594": "Plagiomimicus", + "1782595": "Plagiomimicus pityochromus", + "1782607": "Ipimorpha", + "1782615": "Ipimorpha retusa", + "1782622": "Ipimorpha pleonectusa", + "1782627": "Ipimorpha subtusa", + "1782645": "Egybolis vaillantina", + "1782659": "Acronicta", + "1782672": "Acronicta rumicis", + "1782682": "Acronicta hasta", + "1782689": "Acronicta rubricoma", + "1782700": "Acronicta lepusculina", + "1782705": "Acronicta brumosa", + "1782706": "Acronicta clarescens", + "1782707": "Acronicta insita", + "1782708": "Acronicta perdita", + "1782709": "Acronicta superans", + "1782726": "Acronicta alni", + "1782727": "Acronicta euphorbiae", + "1782743": "Acronicta interrupta", + "1782744": "Acronicta retardata", + "1782745": "Acronicta grisea", + "1782747": "Acronicta ovata", + "1782757": "Acronicta pruinosa", + "1782762": "Acronicta betulae", + "1782763": "Acronicta aceris", + "1782776": "Acronicta increta", + "1782777": "Acronicta megacephala", + "1782803": "Acronicta vulpina", + "1782808": "Acronicta marmorata", + "1782809": "Acronicta radcliffei", + "1782819": "Acronicta mansueta", + "1782822": "Acronicta funeralis", + "1782826": "Acronicta dactylina", + "1782833": "Acronicta afflicta", + "1782837": "Acronicta vinnula", + "1782840": "Acronicta noctivaga", + "1782841": "Acronicta strigosa", + "1782853": "Acronicta innotata", + "1782870": "Acronicta tritona", + "1782871": "Acronicta fragilis", + "1782872": "Acronicta nervosa", + "1782878": "Acronicta tristis", + "1782921": "Acronicta morula", + "1782927": "Acronicta auricoma", + "1782928": "Acronicta modica", + "1782934": "Acronicta atristrigatus", + "1782948": "Acronicta psi", + "1782961": "Acronicta connecta", + "1782972": "Acronicta longa", + "1782978": "Acronicta impressa", + "1782993": "Acronicta lobeliae", + "1783002": "Acronicta lithospila", + "1783008": "Acronicta americana", + "1783013": "Acronicta impleta", + "1783016": "Acronicta tridens", + "1783035": "Acronicta tota", + "1783037": "Acronicta menyanthidis", + "1783043": "Acronicta leporina", + "1783045": "Acronicta cinerea", + "1783055": "Acronicta heitzmani", + "1783059": "Acronicta laetifica", + "1783087": "Ammopolia", + "1783090": "Ammopolia witzenmanni", + "1783166": "Tolpiodes", + "1783173": "Tolpiodes oligolasia", + "1783299": "Pseudosphetta", + "1783302": "Pseudosphetta moorei", + "1783311": "Thurberiphaga", + "1783313": "Thurberiphaga diffusa", + "1783337": "Dialithis", + "1783344": "Euscirrhopterus", + "1783363": "Pseudorgyia", + "1783365": "Pseudorgyia russula", + "1783367": "Trichordestra", + "1783371": "Trichordestra tacoma", + "1783372": "Trichordestra liquida", + "1783373": "Trichordestra lilacina", + "1783376": "Trichordestra prodeniformis", + "1783378": "Trichordestra legitima", + "1783394": "Xestia", + "1783651": "Metopta", + "1783652": "Metopta rectifasciata", + "1783713": "Bocula marginata", + "1783715": "Bocula odontosema", + "1783725": "Bocula diffisa", + "1783739": "Metopoceras", + "1783777": "Metopoceras felicina", + "1783783": "Cobubatha", + "1783811": "Cobubatha metaspilaris", + "1783838": "Leucocnemis", + "1783841": "Leucocnemis perfundis", + "1783842": "Leucocnemis nivalis", + "1783845": "Polychrysia", + "1783855": "Polychrysia moneta", + "1783861": "Polychrysia esmeralda", + "1783880": "Zebeeba", + "1783882": "Zebeeba falsalis", + "1783898": "Blasticorhinus ussuriensis", + "1783906": "Blasticorhinus rivulosa", + "1783931": "Sutyna", + "1783940": "Sutyna privata", + "1783955": "Meganephria", + "1783971": "Meganephria bimaculosa", + "1783988": "Lophotoma", + "1783991": "Lophotoma diagrapha", + "1784240": "Praxis", + "1784275": "Nocloa", + "1784276": "Nocloa pallens", + "1784278": "Nocloa cordova", + "1784281": "Nocloa rivulosa", + "1784282": "Nocloa alcandra", + "1784283": "Nocloa aliaga", + "1784342": "Cornutiplusia", + "1784349": "Cornutiplusia circumflexa", + "1784356": "Polyphaenis", + "1784359": "Polyphaenis sericata", + "1784395": "Ozarba", + "1784422": "Ozarba albocostaliata", + "1784461": "Ozarba aeria", + "1784513": "Ozarba punctigera", + "1784582": "Ozarba catilina", + "1784591": "Ozarba hemiochra", + "1784610": "Ozarba nebula", + "1784645": "Philogethes", + "1784646": "Philogethes metableta", + "1784686": "Psychomorpha", + "1784688": "Psychomorpha epimenis", + "1784696": "Argyrogramma", + "1784759": "Anadevidia", + "1784761": "Anadevidia peponis", + "1784776": "Sypna", + "1784804": "Sypna diversa", + "1784809": "Hoplodrina", + "1784812": "Hoplodrina respersa", + "1784824": "Hoplodrina superstes", + "1784826": "Hoplodrina blanda", + "1784853": "Hoplodrina ambigua", + "1784892": "Allagrapha", + "1784893": "Allagrapha aerea", + "1784936": "Anomis psamathodes", + "1784947": "Anomis fulvida", + "1784959": "Anomis illita", + "1785024": "Anomis erosa", + "1785072": "Anomis flava", + "1785105": "Anomis sabulifera", + "1785140": "Chrysodeixis", + "1785145": "Chrysodeixis eriosoma", + "1785149": "Chrysodeixis argentifera", + "1785162": "Chrysodeixis heberachis", + "1785166": "Chrysodeixis subsidens", + "1785168": "Chrysodeixis includens", + "1785181": "Chrysodeixis acuta", + "1785185": "Chrysodeixis chalcites", + "1785216": "Trissernis", + "1785217": "Trissernis prasinoscia", + "1785220": "Trissernis ochrochlora", + "1785279": "Chrysanympha", + "1785280": "Chrysanympha formosa", + "1785281": "Deltote", + "1785286": "Deltote bankiana", + "1785305": "Ctenoplusia", + "1785314": "Ctenoplusia albostriata", + "1785322": "Ctenoplusia adiaphora", + "1785329": "Ctenoplusia limbirena", + "1785331": "Ctenoplusia oxygramma", + "1785361": "Ctenoplusia accentifera", + "1785367": "Ctenoplusia agnata", + "1785398": "Pseudohermonassa", + "1785399": "Pseudohermonassa bicarnea", + "1785403": "Pseudohermonassa tenuicula", + "1785439": "Emarginea", + "1785448": "Autoplusia", + "1785462": "Autoplusia gammoides", + "1785723": "Clytoscopa", + "1785725": "Clytoscopa iorrhoda", + "1785726": "Feltia", + "1785728": "Feltia jaculifera", + "1785730": "Feltia tricosa", + "1785732": "Feltia herilis", + "1785733": "Feltia subgothica", + "1785742": "Peridrome", + "1785744": "Peridrome orbicularis", + "1785830": "Lopharthrum", + "1785832": "Lopharthrum comprimens", + "1785833": "Meterana", + "1785873": "Diachrysia", + "1785875": "Diachrysia balluca", + "1785883": "Diachrysia zosimi", + "1785886": "Diachrysia aereoides", + "1785887": "Diachrysia chryson", + "1785888": "Diachrysia chrysitis", + "1785895": "Diachrysia stenochrysis", + "1785909": "Panopoda", + "1785913": "Panopoda carneicosta", + "1785916": "Panopoda rufimargo", + "1785931": "Syngrapha", + "1785951": "Syngrapha epigaea", + "1785955": "Syngrapha viridisigma", + "1785964": "Syngrapha ignea", + "1785982": "Syngrapha celsa", + "1785992": "Syngrapha octoscripta", + "1785997": "Syngrapha rectangula", + "1786007": "Syngrapha diasema", + "1786017": "Syngrapha ain", + "1786031": "Metaxaglaea", + "1786035": "Metaxaglaea inulta", + "1786036": "Metaxaglaea viatica", + "1786134": "Rhynchina", + "1786190": "Rhynchina coniodes", + "1786211": "Hemeroblemma", + "1786217": "Hemeroblemma acron", + "1786219": "Hemeroblemma opigena", + "1786247": "Hemeroblemma mexicana", + "1786307": "Eutricopis", + "1786308": "Eutricopis nexilis", + "1786313": "Hamodes", + "1786317": "Hamodes propitia", + "1786329": "Trichoplusia", + "1786360": "Trichoplusia ni", + "1786447": "Dipterygina", + "1786448": "Dipterygina cupreotincta", + "1786452": "Dipterygina indica", + "1786454": "Pseudorthodes", + "1786455": "Pseudorthodes vecors", + "1786513": "Paradiarsia", + "1786514": "Paradiarsia littoralis", + "1786515": "Paradiarsia punicea", + "1786563": "Eueretagrotis", + "1786565": "Eueretagrotis sigmoides", + "1786566": "Eueretagrotis perattentus", + "1786567": "Eueretagrotis attentus", + "1786570": "Dyrzela", + "1786573": "Dyrzela plagiata", + "1786597": "Eudocima salaminia", + "1786601": "Episema", + "1786619": "Episema glaucina", + "1786651": "Episema tersa", + "1786658": "Episema grueneri", + "1786664": "Episema lederi", + "1786690": "Heminocloa", + "1786691": "Heminocloa mirabilis", + "1786710": "Rema", + "1786711": "Rema costimacula", + "1786730": "Hemieuxoa", + "1786733": "Hemieuxoa rudens", + "1786807": "Xerociris", + "1786808": "Xerociris wilsonii", + "1786859": "Adrapsa", + "1786886": "Antitype", + "1786902": "Antitype chi", + "1786909": "Redectis", + "1786912": "Redectis pygmaea", + "1786913": "Redectis vitrea", + "1786916": "Hemipachnobia", + "1786918": "Hemipachnobia monochromatea", + "1786930": "Epipsilia", + "1786936": "Epipsilia grisescens", + "1786955": "Grammodes", + "1786958": "Grammodes justa", + "1786980": "Grammodes stolida", + "1786984": "Grammodes latifera", + "1786985": "Grammodes bifasciata", + "1786990": "Grammodes oculicola", + "1787003": "Grammodes pulcherrima", + "1787009": "Grammodes geometrica", + "1787010": "Grammodes ocellata", + "1787011": "Edessena", + "1787061": "Epilecta", + "1787064": "Epilecta linogrisea", + "1787072": "Hypena trigonalis", + "1787079": "Hypena sagitta", + "1787090": "Hypena quinqualis", + "1787105": "Capis", + "1787106": "Capis curvata", + "1787107": "Athetis", + "1787112": "Athetis pallustris", + "1787165": "Athetis tenuis", + "1787185": "Athetis maculatra", + "1787213": "Athetis gluteosa", + "1787226": "Athetis reclusa", + "1787264": "Athetis leuconephra", + "1787267": "Athetis lepigone", + "1787279": "Athetis hospes", + "1787367": "Athetis bremusa", + "1787373": "Athetis erigida", + "1787381": "Athetis furvula", + "1787399": "Mesogona", + "1787400": "Mesogona oxalina", + "1787417": "Mesogona acetosellae", + "1787427": "Galgula", + "1787438": "Galgula partita", + "1787452": "Perasia", + "1787464": "Perasia garnoti", + "1787496": "Actebia", + "1787504": "Actebia praecox", + "1787506": "Actebia fennica", + "1787522": "Hadena", + "1787590": "Hadena compta", + "1787610": "Hadena perplexa", + "1787631": "Hadena irregularis", + "1787697": "Hadena caesia", + "1787751": "Hadena albimacula", + "1787770": "Hadena confusa", + "1787825": "Hadena magnolii", + "1787841": "Hadena capsincola", + "1787859": "Hadena bicruris", + "1787905": "Hadena sancta", + "1787996": "Goniapteryx", + "1788033": "Adelphagrotis", + "1788034": "Adelphagrotis stellaris", + "1788037": "Adelphagrotis indeterminata", + "1788044": "Eutrogia", + "1788045": "Eutrogia morosa", + "1788051": "Tricholita", + "1788063": "Tricholita signata", + "1788069": "Harrisimemna", + "1788070": "Harrisimemna trisignata", + "1788100": "Ophisma", + "1788138": "Leuconycta", + "1788139": "Leuconycta diphteroides", + "1788243": "Gabara", + "1788278": "Gabara subnivosella", + "1788312": "Syllectra", + "1788322": "Leucogonia", + "1788326": "Letis", + "1788372": "Letis specularis", + "1788411": "Mesapamea", + "1788425": "Mesapamea secalis", + "1788466": "Mamestra", + "1788485": "Mamestra configurata", + "1788522": "Mamestra brassicae", + "1788535": "Ophiusa", + "1788553": "Ophiusa tirhaca", + "1788635": "Catephia alchymista", + "1788663": "Ogdoconta", + "1788673": "Ogdoconta cinereola", + "1788677": "Ogdoconta tacna", + "1788678": "Pyreferra", + "1788679": "Pyreferra pettiti", + "1788680": "Pyreferra hesperidago", + "1788681": "Pyreferra citrombra", + "1788711": "Hyperstrotia pervertens", + "1788717": "Hyperstrotia nana", + "1788719": "Homophoberia", + "1788720": "Homophoberia cristata", + "1788724": "Aegle", + "1788734": "Aegle vespertinalis", + "1788764": "Conisania", + "1788807": "Anigraea", + "1788813": "Anigraea homochroa", + "1788844": "Metaemene", + "1788846": "Metaemene hampsoni", + "1788856": "Metaemene atrigutta", + "1788860": "Plusiodonta", + "1788881": "Plusiodonta arctipennis", + "1788891": "Plusiodonta compressipalpis", + "1788916": "Papestra", + "1788917": "Papestra biren", + "1788929": "Papestra quadrata", + "1788941": "Spirama", + "1788953": "Spirama retorta", + "1788986": "Spirama recessa", + "1789056": "Calliodes", + "1789057": "Calliodes pretiosissima", + "1789061": "Hecatera", + "1789071": "Hecatera cappa", + "1789073": "Hecatera weissi", + "1789076": "Hecatera dysodea", + "1789086": "Hecatera bicolorata", + "1789150": "Platypolia", + "1789155": "Platypolia anceps", + "1789189": "Caenurgina", + "1789190": "Caenurgina caerulea", + "1789191": "Caenurgina crassiuscula", + "1789193": "Caenurgina erechtea", + "1789210": "Xystopeplus", + "1789212": "Xystopeplus rufago", + "1789222": "Erygia", + "1789225": "Erygia apicalis", + "1789246": "Dryobotodes", + "1789250": "Dryobotodes monochroma", + "1789255": "Dryobotodes tenebrosa", + "1789267": "Dryobotodes eremita", + "1789286": "Dichagyris", + "1789403": "Dichagyris nigrescens", + "1789407": "Anoba", + "1789474": "Stilbia", + "1789481": "Stilbia anomala", + "1789491": "Stilbia philopalis", + "1789493": "Gracilodes", + "1789498": "Gracilodes caffra", + "1789503": "Xylotype", + "1789505": "Xylotype arcadia", + "1789512": "Hyposada fasciosa", + "1789530": "Hyposada hydrocampata", + "1789545": "Anarta", + "1789553": "Anarta melanopa", + "1789580": "Anarta myrtilli", + "1789602": "Prolophota", + "1789604": "Prolophota trigonifera", + "1789628": "Holocryptis", + "1789637": "Holocryptis phasianura", + "1789643": "Alophosoma", + "1789671": "Noctua", + "1789694": "Noctua interjecta", + "1789695": "Noctua pronuba", + "1789730": "Noctua comes", + "1789745": "Noctua fimbriata", + "1789753": "Noctua interposita", + "1789755": "Noctua orbona", + "1789783": "Noctua janthina", + "1789785": "Noctua janthe", + "1789793": "Polydesma", + "1789794": "Polydesma boarmoides", + "1789805": "Polydesma umbricola", + "1789826": "Archanara", + "1789840": "Archanara neurica", + "1789849": "Archanara dissoluta", + "1789953": "Brithys", + "1789957": "Brithys crini", + "1789978": "Agrochola", + "1789982": "Agrochola litura", + "1789984": "Agrochola blidaensis", + "1790002": "Agrochola helvola", + "1790013": "Agrochola bicolorago", + "1790023": "Agrochola haematidea", + "1790059": "Agrochola pistacinoides", + "1790062": "Agrochola nitida", + "1790072": "Agrochola macilenta", + "1790084": "Agrochola lota", + "1790151": "Agrochola decipiens", + "1790153": "Agrochola humilis", + "1790160": "Agrochola circellaris", + "1790228": "Melipotis", + "1790230": "Melipotis cellaris", + "1790240": "Melipotis acontioides", + "1790246": "Melipotis fasciolaris", + "1790248": "Melipotis famelica", + "1790257": "Melipotis indomita", + "1790258": "Melipotis jucunda", + "1790268": "Melipotis novanda", + "1790274": "Melipotis agrotoides", + "1790281": "Melipotis nigrobasis", + "1790287": "Melipotis perpendicularis", + "1790308": "Melipotis ochrodes", + "1790322": "Melanomma", + "1790328": "Carsina", + "1790331": "Carsina kanshireiensis", + "1790337": "Stiria", + "1790339": "Stiria dyari", + "1790343": "Stiria rugifrons", + "1790356": "Xylena", + "1790359": "Xylena thoracica", + "1790361": "Xylena vetusta", + "1790362": "Xylena cineritia", + "1790364": "Xylena exsoleta", + "1790369": "Xylena nupera", + "1790371": "Xylena curvimacula", + "1790376": "Xylena formosa", + "1790449": "Alapadna", + "1790450": "Alapadna pauropis", + "1790601": "Rhyacia", + "1790625": "Rhyacia simulans", + "1790671": "Rhyacia helvetina", + "1790683": "Tyta", + "1790692": "Tyta luctuosa", + "1790726": "Perigea", + "1790737": "Perigea xanthioides", + "1790784": "Tyrissa", + "1790787": "Tyrissa multilinea", + "1790791": "Mormoscopa", + "1790794": "Minucia", + "1790816": "Minucia lunaris", + "1790829": "Phaeolita", + "1790832": "Phaeolita pyramusalis", + "1790837": "Polygrammate", + "1790850": "Corgatha", + "1790876": "Corgatha tornalis", + "1790888": "Corgatha dictaria", + "1790900": "Corgatha dichionistis", + "1790910": "Corgatha figuralis", + "1790931": "Isogona", + "1790937": "Isogona texana", + "1790945": "Isogona tenuis", + "1790999": "Zurobata", + "1791010": "Zurobata vacillans", + "1791037": "Heterogramma", + "1791093": "Perciana", + "1791094": "Perciana taiwana", + "1791097": "Perciana marmorea", + "1791147": "Focillidia", + "1791151": "Focillidia texana", + "1791152": "Diomea", + "1791180": "Zale", + "1791315": "Hampsonodes", + "1791331": "Hampsonodes mastoides", + "1791371": "Eubolina", + "1791372": "Eubolina impartialis", + "1791378": "Eudesmeola", + "1791379": "Eudesmeola lawsoni", + "1791382": "Craniophora", + "1791384": "Craniophora pontica", + "1791422": "Craniophora ligustri", + "1791497": "Neochera", + "1791514": "Neochera dominia", + "1791585": "Anagrapha", + "1791590": "Anagrapha falcifera", + "1791592": "Admetovis", + "1791593": "Admetovis similaris", + "1791654": "Polytela", + "1791660": "Polytela gloriosae", + "1791678": "Crambodes", + "1791680": "Crambodes talidiformis", + "1791696": "Oraesia", + "1791698": "Oraesia excavata", + "1791715": "Oraesia emarginata", + "1791735": "Marathyssa basalis", + "1791736": "Marathyssa inficita", + "1791756": "Klugeana", + "1791758": "Klugeana philoxalis", + "1791769": "Graphiphora", + "1791784": "Graphiphora augur", + "1791792": "Cosmodes", + "1791793": "Cosmodes elegans", + "1791827": "Cruria", + "1791837": "Cruria synopla", + "1791843": "Lamprosticta", + "1791846": "Lamprosticta culta", + "1791861": "Neogalea", + "1791862": "Neogalea sunia", + "1791868": "Selambina", + "1791870": "Selambina trajiciens", + "1791874": "Herminia", + "1792055": "Egira", + "1792061": "Egira conspicillaris", + "1792072": "Egira dolosa", + "1792073": "Egira hiemalis", + "1792087": "Egira cognata", + "1792091": "Egira rubrica", + "1792095": "Egira simplex", + "1792096": "Egira crucialis", + "1792097": "Egira variabilis", + "1792099": "Egira curialis", + "1792199": "Nodaria", + "1792210": "Nodaria nodosalis", + "1792250": "Pindara", + "1792270": "Matigramma", + "1792276": "Matigramma pulverilinea", + "1792280": "Actinotia", + "1792292": "Actinotia polyodon", + "1792300": "Actinotia radiosa", + "1792316": "Nedra", + "1792318": "Nedra ramosula", + "1792324": "Photedes", + "1792335": "Photedes extrema", + "1792377": "Photedes fluxa", + "1792379": "Photedes captiuncula", + "1792383": "Photedes minima", + "1792405": "Autographa", + "1792411": "Autographa pulchrina", + "1792414": "Autographa bractea", + "1792418": "Autographa gamma", + "1792426": "Autographa jota", + "1792430": "Autographa californica", + "1792431": "Autographa mandarina", + "1792442": "Autographa ampla", + "1792449": "Autographa buraetica", + "1792456": "Autographa flagellum", + "1792465": "Autographa precationis", + "1792475": "Autographa excelsa", + "1792478": "Autographa bimaculata", + "1792485": "Autographa metallica", + "1792497": "Autographa mappa", + "1792517": "Autographa corusca", + "1792528": "Hypenagonia", + "1792541": "Hypenagonia obliquifascia", + "1792555": "Helicoverpa assulta", + "1792560": "Helicoverpa punctigera", + "1792564": "Helicoverpa zea", + "1792635": "Jodia", + "1792645": "Jodia croceago", + "1792687": "Lygniodes", + "1792695": "Lygniodes hypoleuca", + "1792712": "Nacna", + "1792752": "Diastema", + "1792764": "Dryobota", + "1792768": "Dryobota labecula", + "1792814": "Metachrostis paurograpta", + "1792816": "Dargida", + "1792817": "Dargida procinctus", + "1792825": "Celiptera", + "1792827": "Celiptera levina", + "1792831": "Celiptera frustulum", + "1792979": "Mycteroplus", + "1792984": "Peridroma", + "1792996": "Peridroma saucia", + "1793188": "Crocigrapha", + "1793189": "Crocigrapha normani", + "1793190": "Homoglaea", + "1793192": "Homoglaea hircina", + "1793201": "Brachygalea", + "1793212": "Brachygalea albolineata", + "1793222": "Episteme", + "1793238": "Episteme vetula", + "1793243": "Episteme lectrix", + "1793246": "Episteme adulatrix", + "1793290": "Thyas", + "1793320": "Agarista", + "1793366": "Anathix", + "1793368": "Anathix ralla", + "1793369": "Anathix puta", + "1793417": "Ufeus", + "1793419": "Ufeus satyricus", + "1793428": "Anoratha", + "1793429": "Anoratha sinuosa", + "1793452": "Bellura", + "1793453": "Bellura vulnifica", + "1793455": "Bellura gortynoides", + "1793515": "Bleptina parallela", + "1793533": "Bleptina venata", + "1793538": "Bleptina caradrinalis", + "1793542": "Bleptina sangamonia", + "1793565": "Macristis", + "1793566": "Macristis schausi", + "1793571": "Ulochlaena", + "1793585": "Stretchia", + "1793589": "Stretchia muricina", + "1793603": "Bertula", + "1793610": "Bertula retracta", + "1793613": "Bertula kosemponica", + "1793631": "Bertula abjudicalis", + "1793635": "Bertula hadenalis", + "1793646": "Bertula centralis", + "1793656": "Bertula albipunctata", + "1793660": "Zalissa", + "1793661": "Zalissa catocalina", + "1793684": "Apsarasa", + "1793689": "Apsarasa radians", + "1793697": "Spiramater", + "1793699": "Spiramater lutra", + "1793856": "Panolis", + "1793877": "Panolis flammea", + "1793887": "Lysimelia", + "1793892": "Lysimelia lucida", + "1793981": "Cryptocala", + "1793983": "Cryptocala acadiensis", + "1793986": "Cryptocala chardinyi", + "1794099": "Hillia", + "1794102": "Hillia iris", + "1794268": "Entomogramma pardus", + "1794273": "Entomogramma fautrix", + "1794349": "Bryonycta", + "1794351": "Bryonycta pineti", + "1794361": "Lasionycta imbecillus", + "1794423": "Austramathes", + "1794425": "Austramathes purpurea", + "1794496": "Diaphone", + "1794507": "Diaphone eumela", + "1794509": "Conservula", + "1794510": "Conservula anodonta", + "1794512": "Arugisa", + "1794518": "Arugisa lutea", + "1794529": "Cardepia", + "1794532": "Cardepia sociabilis", + "1794534": "Cardepia affinis", + "1794570": "Lycophotia", + "1794590": "Lycophotia porphyrea", + "1794599": "Lycophotia molothina", + "1794609": "Lycophotia erythrina", + "1794630": "Antiblemma", + "1794637": "Antiblemma perornata", + "1794807": "Eriopyga", + "1795041": "Tetanolita", + "1795042": "Tetanolita floridana", + "1795045": "Tetanolita palligera", + "1795049": "Tetanolita mynesalis", + "1795061": "Thysanoplusia", + "1795065": "Thysanoplusia intermixta", + "1795068": "Thysanoplusia orichalcea", + "1795072": "Antiophlebia", + "1795074": "Antiophlebia bracteata", + "1795103": "Australothis", + "1795110": "Australothis rubrescens", + "1795126": "Cryphia", + "1795180": "Cryphia pallida", + "1795215": "Cryphia algae", + "1795282": "Cryphia fraudatricula", + "1795443": "Pachetra", + "1795478": "Omphalophana", + "1795483": "Omphalophana serrata", + "1795542": "Pataeta carbo", + "1795578": "Ophthalmis", + "1795597": "Ophthalmis lincea", + "1795656": "Meyrickella", + "1795657": "Meyrickella ruptellus", + "1795782": "Apamea", + "1795788": "Apamea dubitans", + "1795802": "Apamea alia", + "1795812": "Apamea helva", + "1795854": "Apamea lateritia", + "1795862": "Apamea arabs", + "1795871": "Apamea devastator", + "1795896": "Apamea maillardi", + "1795900": "Apamea syriaca", + "1795930": "Apamea furva", + "1795946": "Apamea sublustris", + "1795957": "Apamea aquila", + "1795983": "Apamea inficita", + "1796007": "Apamea rubrirena", + "1796032": "Apamea zeta", + "1796035": "Apamea lignicolora", + "1796040": "Apamea vultuosa", + "1796051": "Apamea burgessi", + "1796100": "Apamea verbascoides", + "1796117": "Apamea sordens", + "1796139": "Apamea epomidion", + "1796145": "Apamea monoglypha", + "1796154": "Apamea impulsa", + "1796169": "Apamea crenata", + "1796180": "Apamea amputatrix", + "1796181": "Apamea cogitata", + "1796188": "Apamea unanimis", + "1796204": "Metria", + "1796209": "Parastichtis", + "1796217": "Parastichtis suspecta", + "1796225": "Arenostola", + "1796256": "Ulosyneda", + "1796257": "Ulosyneda valens", + "1796272": "Condica", + "1796274": "Condica confederata", + "1796276": "Condica cupentia", + "1796287": "Zelicodes", + "1796288": "Zelicodes linearis", + "1796302": "Amolita", + "1796310": "Amolita obliqua", + "1796312": "Amolita fessa", + "1796328": "Hypenula", + "1796338": "Hypenula cacuminalis", + "1796358": "Hypospila", + "1796408": "Calophasia", + "1796423": "Calophasia opalina", + "1796451": "Calophasia platyptera", + "1796463": "Calophasia lunula", + "1796469": "Rhizedra", + "1796523": "Pangrapta decoralis", + "1796639": "Hydraecia", + "1796678": "Hydraecia micacea", + "1796686": "Hydraecia medialis", + "1796782": "Ichneutica", + "1796791": "Ichneutica caraunias", + "1796837": "Heliothodes", + "1796842": "Heliothodes diminutiva", + "1796941": "Loxioda hampsoni", + "1796943": "Loxioda similis", + "1796957": "Phobolosia", + "1796958": "Phobolosia anfracta", + "1796971": "Serrodes", + "1796984": "Serrodes campana", + "1797004": "Sarbanissa", + "1797030": "Sarbanissa subflava", + "1797038": "Speiredonia", + "1797039": "Speiredonia spectans", + "1797073": "Catocala", + "1797111": "Catocala micronympha", + "1797121": "Catocala desdemona", + "1797122": "Catocala grynea", + "1797135": "Catocala relicta", + "1797137": "Catocala coccinata", + "1797146": "Catocala clintonii", + "1797178": "Catocala promissa", + "1797194": "Catocala illecta", + "1797198": "Catocala andromedae", + "1797206": "Catocala praeclara", + "1797210": "Catocala gracilis", + "1797218": "Catocala meskei", + "1797252": "Catocala crataegi", + "1797257": "Catocala cerogama", + "1797258": "Catocala nupta", + "1797259": "Catocala patala", + "1797275": "Catocala carissima", + "1797276": "Catocala elocata", + "1797285": "Catocala cara", + "1797290": "Catocala lineella", + "1797296": "Catocala verrilliana", + "1797299": "Catocala nivea", + "1797300": "Catocala parta", + "1797333": "Catocala nymphagoga", + "1797339": "Catocala amica", + "1797344": "Catocala helena", + "1797349": "Catocala conversa", + "1797365": "Catocala californica", + "1797367": "Catocala sponsa", + "1797373": "Catocala unijuga", + "1797374": "Catocala pacta", + "1797375": "Catocala ilia", + "1797379": "Catocala amestris", + "1797394": "Catocala sordida", + "1797409": "Catocala mira", + "1797429": "Catocala hymenaea", + "1797432": "Catocala amatrix", + "1797433": "Catocala connubialis", + "1797436": "Catocala briseis", + "1797440": "Catocala similis", + "1797445": "Catocala ultronia", + "1797454": "Catocala puerpera", + "1797464": "Catocala blandula", + "1797474": "Catocala herodias", + "1797475": "Catocala minuta", + "1797478": "Catocala alabamae", + "1797479": "Catocala fraxini", + "1797488": "Catocala semirelicta", + "1797507": "Catocala aholibah", + "1797521": "Catocala junctura", + "1797527": "Catocala coniuncta", + "1797542": "Catocala optata", + "1797556": "Catocala concumbens", + "1797586": "Achatia", + "1797587": "Achatia evicta", + "1797592": "Achatia confusa", + "1797593": "Achatia distincta", + "1797595": "Achatia mucens", + "1797601": "Achatia latex", + "1797726": "Semiothisops", + "1797727": "Semiothisops macariata", + "1797730": "Exsula", + "1797735": "Exsula albomaculata", + "1797793": "Eublemma ecthaemata", + "1797864": "Eublemma nigrivitta", + "1797903": "Eublemma recta", + "1797942": "Eublemma bolinia", + "1797965": "Eublemma apicimacula", + "1798007": "Pantydia", + "1798014": "Pantydia metaspila", + "1798018": "Pantydia capistrata", + "1798023": "Pantydia sparsa", + "1798025": "Pantydia diemeni", + "1798027": "Apospasta", + "1798060": "Apospasta rantaizanensis", + "1798083": "Diarsia", + "1798084": "Diarsia intermixta", + "1798089": "Tycracona", + "1798090": "Tycracona obliqua", + "1798097": "Hulodes", + "1798101": "Hulodes caranea", + "1798277": "Marimatha", + "1798288": "Marimatha nigrofimbria", + "1798308": "Achaea", + "1798329": "Homodes vivida", + "1798331": "Homodes crocea", + "1798335": "Homodes bracteigutta", + "1798340": "Trisateles", + "1798346": "Trisateles emortualis", + "1798362": "Hyppa", + "1798371": "Hyppa contrasta", + "1798372": "Hyppa rectilinea", + "1798375": "Hyppa xylinoides", + "1798377": "Euclidia", + "1798393": "Euclidia cuspidea", + "1798402": "Euclidia ardita", + "1798408": "Euclidia glyphica", + "1798417": "Derrima", + "1798419": "Derrima stellata", + "1798421": "Selenisa", + "1798427": "Selenisa sueroides", + "1798440": "Scoliopteryx", + "1798449": "Scoliopteryx libatrix", + "1798478": "Dysgonia", + "1798481": "Dysgonia torrida", + "1798488": "Dysgonia stuposa", + "1798504": "Dysgonia algira", + "1798509": "Meranda", + "1798511": "Meranda susialis", + "1798514": "Hypena", + "1798523": "Hypena iconicalis", + "1798529": "Hypena umbrifera", + "1798580": "Hypena taiwana", + "1798594": "Hypena rostralis", + "1798687": "Hypena subvittalis", + "1798700": "Hypena indicatalis", + "1798768": "Hypena pelodes", + "1798794": "Hypena longipennis", + "1798802": "Hypena obsitalis", + "1798807": "Hypena proboscidalis", + "1798823": "Hypena sinuosa", + "1798863": "Hypena cyanea", + "1798868": "Hypena gonospilalis", + "1798902": "Orthosia", + "1798916": "Orthosia gracilis", + "1798922": "Orthosia dalmatica", + "1798931": "Orthosia opima", + "1798971": "Orthosia populeti", + "1798974": "Orthosia gothica", + "1798984": "Orthosia cerasi", + "1799132": "Orthosia miniosa", + "1799135": "Orthosia incerta", + "1799163": "Trigonistis", + "1799165": "Trigonistis asthenopa", + "1799167": "Trigonistis demonias", + "1799180": "Zaleops", + "1799183": "Zaleops umbrina", + "1799416": "Dunira", + "1799417": "Dunira punctimargo", + "1799429": "Antaplaga", + "1799433": "Antaplaga plesioglauca", + "1799669": "Grotella", + "1799675": "Grotella binda", + "1799680": "Grotella tricolor", + "1799687": "Pseudeustrotia", + "1799695": "Pseudeustrotia semialba", + "1799701": "Pseudeustrotia candidula", + "1799702": "Hypenodes", + "1799703": "Hypenodes caducus", + "1799708": "Hypenodes humidalis", + "1799723": "Mecodina", + "1799743": "Mecodina praecipua", + "1799751": "Mecodina albodentata", + "1799757": "Mecodina bisignata", + "1799771": "Chrysoecia", + "1799774": "Chrysoecia scira", + "1799789": "Panemeria", + "1799799": "Panemeria tenebrata", + "1799821": "Pandesma submurina", + "1799868": "Lacinipolia", + "1799870": "Lacinipolia renigera", + "1799877": "Lacinipolia erecta", + "1799880": "Lacinipolia meditata", + "1799884": "Lacinipolia stricta", + "1799894": "Lacinipolia quadrilineata", + "1799900": "Lacinipolia laudabilis", + "1799901": "Lacinipolia davena", + "1799911": "Lacinipolia buscki", + "1799917": "Lacinipolia explicata", + "1799925": "Lacinipolia implicata", + "1799938": "Lacinipolia cuneata", + "1799944": "Lacinipolia strigicollis", + "1799956": "Lacinipolia patalis", + "1799957": "Lacinipolia olivacea", + "1799958": "Lacinipolia anguina", + "1799967": "Lacinipolia lorea", + "1799977": "Lacinipolia sareta", + "1799993": "Moma", + "1800004": "Moma alpium", + "1800016": "Panthea", + "1800017": "Panthea acronyctoides", + "1800024": "Panthea virginarius", + "1800028": "Panthea furcilla", + "1800032": "Panthea coenobita", + "1800085": "Lichnoptera", + "1800130": "Charadra dispulsa", + "1800140": "Charadra deridens", + "1800142": "Trichosea", + "1800149": "Trichosea champa", + "1800191": "Trisuloides sericea", + "1800236": "Macrochthonia", + "1800238": "Macrochthonia fervens", + "1800430": "Etanna", + "1800437": "Maceda", + "1800441": "Maceda mansueta", + "1800464": "Barasa", + "1800473": "Barasa cymatistis", + "1800482": "Beara", + "1800518": "Austrocarea", + "1800522": "Austrocarea iocephala", + "1800523": "Gabala", + "1800528": "Gabala argentata", + "1800539": "Gabala roseoretis", + "1800542": "Risoba", + "1800562": "Risoba obstructa", + "1800572": "Risoba prominens", + "1800639": "Neaxestis", + "1800642": "Neaxestis rhoda", + "1800662": "Acatapaustus", + "1800668": "Carea", + "1800686": "Carea angulata", + "1800691": "Carea unipunctata", + "1800696": "Carea internifusca", + "1800821": "Carea varipes", + "1800838": "Armactica", + "1800843": "Armactica conchidia", + "1800844": "Armactica columbina", + "1800845": "Xanthodes", + "1800870": "Garella", + "1800879": "Kerala", + "1800881": "Kerala lentiginosa", + "1800891": "Eligma", + "1800918": "Pardoxia", + "1800930": "Ariolica", + "1800934": "Ariolica argentea", + "1800952": "Baileya", + "1800963": "Baileya australis", + "1800985": "Paracrama", + "1800996": "Tympanistes", + "1801000": "Tympanistes rubidorsalis", + "1801001": "Tympanistes fusimargo", + "1801046": "Bena", + "1801051": "Bena bicolorana", + "1801072": "Siglophora", + "1801073": "Siglophora sanguinolenta", + "1801080": "Siglophora ferreilutea", + "1801082": "Iragaodes", + "1801084": "Iragaodes nobilis", + "1801085": "Bryophilopsis", + "1801146": "Selepa", + "1801170": "Selepa discigera", + "1801195": "Lamprothripa", + "1801196": "Lamprothripa scotia", + "1801203": "Westermannia", + "1801278": "Calathusa", + "1801303": "Calathusa hypotherma", + "1801305": "Calathusa mesospila", + "1801316": "Calathusa basicunea", + "1801431": "Uraba", + "1801432": "Uraba lugens", + "1801449": "Negeta", + "1801461": "Negeta contrariata", + "1801487": "Macrobarasa", + "1801490": "Macrobarasa xantholopha", + "1801501": "Ptisciana", + "1801503": "Ptisciana seminivea", + "1801516": "Lophothripa", + "1801519": "Lophothripa vitea", + "1801758": "Nola", + "1801787": "Nola vernalis", + "1801896": "Nola cucullatella", + "1801903": "Nola monozona", + "1801922": "Nola epicentra", + "1801990": "Giaura", + "1801993": "Giaura multipunctata", + "1802070": "Gadirtha", + "1802090": "Gadirtha impingens", + "1802109": "Nolathripa", + "1802113": "Nolathripa lactaria", + "1802118": "Melanographia", + "1802120": "Melanographia flexilineata", + "1802159": "Afrida", + "1802213": "Tyana", + "1802229": "Tyana falcata", + "1802234": "Sinna", + "1802244": "Sinna extrema", + "1802269": "Pseudoips", + "1802280": "Pseudoips prasinana", + "1802330": "Titulcia", + "1802337": "Titulcia confictella", + "1802660": "Maurilia", + "1802662": "Maurilia arcuata", + "1802702": "Maurilia iconica", + "1802775": "Ochthophora", + "1802776": "Ochthophora sericina", + "1802779": "Blenina", + "1802783": "Blenina senex", + "1802827": "Blenina quinaria", + "1802830": "Blenina lichenopa", + "1802833": "Blenina donans", + "1802850": "Blenina squamifera", + "1802864": "Pardasena", + "1802868": "Pardasena virgulana", + "1802886": "Ochrothripa", + "1802888": "Ochrothripa leptochroma", + "1802894": "Labanda", + "1802919": "Labanda semipars", + "1802935": "Hylophilodes", + "1802939": "Hylophilodes tsukusensis", + "1802978": "Nola hyalospila", + "1802997": "Earias", + "1802998": "Earias paralella", + "1803012": "Earias vernana", + "1803014": "Earias subviridis", + "1803021": "Earias smaragdina", + "1803022": "Earias cupreoviridis", + "1803025": "Earias biplaga", + "1803035": "Earias flavida", + "1803039": "Earias luteolaria", + "1803060": "Earias insulana", + "1803065": "Earias pudicana", + "1803073": "Earias clorana", + "1803078": "Earias vittella", + "1803091": "Earias chlorodes", + "1803108": "Earias roseifera", + "1803121": "Ptychoglene", + "1803127": "Ptychoglene coccinea", + "1803137": "Utetheisa", + "1803148": "Utetheisa lotrix", + "1803163": "Utetheisa pulchella", + "1803197": "Utetheisa pulchelloides", + "1803218": "Utetheisa ornatrix", + "1803250": "Antichloris", + "1803266": "Antichloris eriphia", + "1803300": "Curoba", + "1803302": "Curoba sangarida", + "1803306": "Cymaroa grisea", + "1803461": "Teulisna tumida", + "1803474": "Clemensia", + "1803544": "Rhodogastria amasis", + "1803545": "Rhodogastria similis", + "1803590": "Paralacydes vocula", + "1803593": "Paralacydes arborifera", + "1803615": "Ormetica", + "1803628": "Ormetica ameoides", + "1803699": "Haploa", + "1803780": "Heterallactis", + "1803781": "Heterallactis microchrysa", + "1803788": "Heterallactis euchrysa", + "1803812": "Pericallia", + "1803824": "Pericallia matronula", + "1803951": "Phragmatobia", + "1804071": "Phragmatobia fuliginosa", + "1804074": "Phragmatobia assimilans", + "1804120": "Eressa angustipenna", + "1804148": "Eressa geographica", + "1804182": "Eressa confinis", + "1804244": "Graphosia", + "1804246": "Graphosia stenopepla", + "1804321": "Lymire", + "1804331": "Lymire edwardsii", + "1804336": "Saenura", + "1804337": "Saenura flava", + "1804391": "Pygarctia", + "1804394": "Pygarctia murina", + "1804398": "Pygarctia abdominalis", + "1804401": "Pygarctia lorula", + "1804404": "Pygarctia pterygostigma", + "1804407": "Pygarctia flavidorsalis", + "1804409": "Pygarctia roseicapitis", + "1804414": "Damias", + "1804429": "Damias leptosema", + "1804430": "Damias procrena", + "1804474": "Mithuna", + "1804477": "Mithuna arizana", + "1804500": "Lycomorpha", + "1804512": "Lycomorpha pholus", + "1804513": "Lycomorpha splendens", + "1804521": "Scena", + "1804522": "Scena potentia", + "1804532": "Secusio strigata", + "1804552": "Aclytia", + "1804609": "Stenoscaptia", + "1804610": "Stenoscaptia venusta", + "1804645": "Asuridia", + "1804714": "Philenora", + "1804721": "Philenora chionastis", + "1804727": "Philenora aspectalella", + "1804742": "Philenora elegans", + "1804755": "Composia", + "1804759": "Composia fidelissima", + "1804760": "Composia credula", + "1804829": "Digama", + "1804905": "Cybosia", + "1804906": "Cybosia mesomella", + "1804961": "Apantesis", + "1804963": "Apantesis nais", + "1804969": "Apantesis vittata", + "1804971": "Apantesis carlotta", + "1804974": "Apantesis phalerata", + "1805025": "Schistophleps", + "1805043": "Schistophleps albida", + "1805044": "Schistophleps bipuncta", + "1805088": "Ocnogyna", + "1805110": "Ocnogyna boeticum", + "1805111": "Ocnogyna loewii", + "1805155": "Ocnogyna parasita", + "1805171": "Macrocneme", + "1805184": "Macrocneme leucostigma", + "1805197": "Macrocneme chrysitis", + "1805233": "Symphlebia", + "1805271": "Symphlebia perflua", + "1805340": "Garudinia", + "1805496": "Gampola", + "1805498": "Scaptesyle", + "1805505": "Scaptesyle equidistans", + "1805524": "Scaptesyle dichotoma", + "1805535": "Apaidia mesogona", + "1805536": "Crambidia", + "1805537": "Crambidia cephalica", + "1805540": "Crambidia casta", + "1805542": "Crambidia myrlosea", + "1805549": "Crambidia pallida", + "1805559": "Caeneressa", + "1805580": "Caeneressa diaphana", + "1805680": "Seirarctia", + "1805682": "Seirarctia echo", + "1805688": "Uranophora", + "1805691": "Uranophora leucotela", + "1805717": "Uranophora walkeri", + "1805749": "Eugoa", + "1805805": "Scaphidriotis", + "1805806": "Scaphidriotis xylogramma", + "1805917": "Cyanopepla", + "1805938": "Cyanopepla bella", + "1805955": "Cyanopepla submacula", + "1805976": "Cyanopepla similis", + "1805982": "Cyanopepla jucunda", + "1806046": "Eurata", + "1806064": "Eurata hermione", + "1806075": "Eurata hilaris", + "1806123": "Grammia", + "1806145": "Grammia virguncula", + "1806170": "Grammia virgo", + "1806176": "Grammia parthenice", + "1806539": "Phaloe", + "1806678": "Horama", + "1806687": "Horama oedippus", + "1806690": "Horama plumipes", + "1806702": "Horama panthalon", + "1806703": "Phaeophlebosia", + "1806704": "Phaeophlebosia furcifera", + "1806731": "Hypoprepia", + "1806737": "Hypoprepia fucosa", + "1806740": "Hypoprepia miniata", + "1806813": "Lobobasis", + "1806814": "Lobobasis niveimaculata", + "1806818": "Virbia", + "1806869": "Pareuchaetes", + "1806871": "Pareuchaetes pseudoinsulata", + "1806872": "Pareuchaetes insulata", + "1806878": "Pareuchaetes aurata", + "1806884": "Pronola", + "1806887": "Pronola magniplaga", + "1806903": "Amphicallia", + "1806913": "Amphicallia bellatrix", + "1806935": "Meteugoa", + "1806936": "Meteugoa ochrivena", + "1807195": "Thumatha", + "1807270": "Euerythra", + "1807271": "Euerythra phasma", + "1807273": "Euerythra trimaculata", + "1807288": "Bertholdia", + "1807352": "Argyroeides", + "1807353": "Argyroeides braco", + "1807355": "Argyroeides sanguinea", + "1807453": "Thallarcha", + "1807473": "Thallarcha sparsana", + "1807477": "Thallarcha leptographa", + "1807478": "Thallarcha staurocola", + "1807479": "Thallarcha chrysochares", + "1807480": "Thallarcha macilenta", + "1807483": "Thallarcha oblita", + "1807485": "Thallarcha partita", + "1807488": "Thallarcha phalarota", + "1807490": "Thallarcha rhaptophora", + "1807491": "Thallarcha albicollis", + "1807502": "Palaeosia", + "1807503": "Palaeosia bicosta", + "1807512": "Mydromera", + "1807514": "Mydromera notochloris", + "1807552": "Xanthoarctia", + "1807553": "Xanthoarctia pseudameoides", + "1807557": "Trichura", + "1807569": "Trichura cerberus", + "1807634": "Ceryx longipes", + "1807785": "Tipulodes", + "1807787": "Tipulodes ima", + "1807878": "Pyrrharctia", + "1807881": "Pyrrharctia isabella", + "1807924": "Teracotona rhodophaea", + "1807965": "Paidia", + "1807969": "Paidia rica", + "1808083": "Pagara", + "1808088": "Pagara simplex", + "1808097": "Amata", + "1808140": "Amata lucerna", + "1808145": "Amata edwardsi", + "1808161": "Amata grotei", + "1808166": "Amata mestralii", + "1808172": "Amata cerbera", + "1808180": "Amata passalis", + "1808195": "Amata nigricornis", + "1808221": "Amata wilemani", + "1808232": "Amata aperta", + "1808236": "Amata sperbius", + "1808286": "Amata germana", + "1808340": "Amata fouqueti", + "1808348": "Amata caspia", + "1808359": "Amata kuhlweini", + "1808381": "Amata cyssea", + "1808440": "Amata marjana", + "1808450": "Amata phegea", + "1808559": "Amata perixanthia", + "1808588": "Ectypia", + "1808590": "Ectypia bivittata", + "1808592": "Ectypia clio", + "1808646": "Cissura", + "1808648": "Cissura decora", + "1808720": "Parasemia", + "1808752": "Parasemia plantaginis", + "1808910": "Eucharia", + "1808961": "Lithosia", + "1809017": "Chamaita", + "1809019": "Chamaita hirta", + "1809035": "Gnamptonychia", + "1809063": "Cratoplastis", + "1809066": "Cratoplastis diluta", + "1809069": "Tyria", + "1809113": "Areas", + "1809115": "Areas galactina", + "1809124": "Syntomeida", + "1809127": "Syntomeida melanthus", + "1809135": "Syntomeida epilais", + "1809150": "Thyretes", + "1809158": "Thyretes caffra", + "1809159": "Thyretes hippotes", + "1809201": "Watsonarctia", + "1809210": "Watsonarctia deserta", + "1809226": "Ardices", + "1809244": "Ardices curvata", + "1809248": "Ardices glatignyi", + "1809292": "Carales", + "1809294": "Carales astur", + "1809299": "Carales arizonensis", + "1809304": "Dahana", + "1809305": "Dahana atripennis", + "1809307": "Neoblavia", + "1809308": "Neoblavia scoteola", + "1809346": "Phaloesia", + "1809348": "Phaloesia saucia", + "1809379": "Oeonistis", + "1809381": "Oeonistis delia", + "1809387": "Oeonistis entella", + "1809452": "Saurita", + "1809491": "Saurita temenus", + "1809499": "Saurita cassandra", + "1809585": "Siccia caffra", + "1809594": "Siccia taiwana", + "1809913": "Camptoloma", + "1809946": "Hesychopa", + "1809948": "Nephelomilta", + "1809950": "Leucanopsis", + "1810025": "Leucanopsis longa", + "1810097": "Atolmis", + "1810099": "Atolmis rubricollis", + "1810107": "Anaxita", + "1810121": "Anaxita decorata", + "1810140": "Eucereon", + "1810145": "Eucereon sylvius", + "1810172": "Eucereon tigrata", + "1810318": "Eucereon vestalis", + "1810463": "Hemipsilia", + "1810464": "Hemipsilia coavestis", + "1810465": "Cisseps", + "1810469": "Cisseps fulvicollis", + "1810505": "Arachnis", + "1810530": "Cosmosoma", + "1810734": "Hypocrisias", + "1810743": "Hypocrisias minima", + "1810746": "Heliosia", + "1810752": "Heliosia jucunda", + "1810819": "Hyaleucerea", + "1810824": "Hyaleucerea vulnerata", + "1810845": "Psychophasma", + "1810846": "Psychophasma erosa", + "1810849": "Hectobrocha", + "1810851": "Hectobrocha pentacyma", + "1810852": "Phoenicoprocta", + "1810866": "Phoenicoprocta sanguinea", + "1810867": "Phoenicoprocta teda", + "1810969": "Arctagyrta", + "1810973": "Hypercompe", + "1811019": "Hypercompe caudata", + "1811026": "Hypercompe abdominalis", + "1811079": "Hypercompe scribonia", + "1811081": "Hypercompe indecisa", + "1811122": "Hypercompe permaculata", + "1811436": "Eurylomia", + "1811439": "Eurylomia cordula", + "1811455": "Halone sejuncta", + "1811462": "Halone prosenes", + "1811465": "Halone consolatrix", + "1811507": "Euchaetes", + "1811612": "Nudaria", + "1811679": "Macrobrochis", + "1811686": "Macrobrochis gigas", + "1811694": "Robinsonia", + "1811814": "Spilosoma dubia", + "1811948": "Spilosoma virginica", + "1812026": "Spilosoma vestalis", + "1812105": "Spilosoma congrua", + "1812207": "Spilosoma vagans", + "1812262": "Spilosoma latipennis", + "1812339": "Spilosoma pteridis", + "1812394": "Spilosoma urticae", + "1812433": "Lambula", + "1812437": "Lambula obliquilinea", + "1812453": "Lambula pristina", + "1812465": "Lambula transcripta", + "1812492": "Chrysorabdia", + "1812500": "Chrysorabdia vilemani", + "1812534": "Mesothen", + "1812573": "Mesothen nomia", + "1812649": "Macaduma", + "1812658": "Macaduma toxophora", + "1812874": "Phaio", + "1812881": "Phaio acquiguttata", + "1812976": "Miltochrista", + "1813010": "Miltochrista ziczac", + "1813036": "Miltochrista undulata", + "1813114": "Miltochrista miniata", + "1813174": "Xanthetis luzonica", + "1813237": "Leptarctia", + "1813248": "Leptarctia californiae", + "1813262": "Conilepia", + "1813263": "Conilepia nigricosta", + "1813413": "Estigmene albida", + "1813415": "Estigmene acrea", + "1813460": "Galtara rostrata", + "1813468": "Galtara extensa", + "1814095": "Coscinia", + "1814174": "Ammalo", + "1814182": "Ammalo helops", + "1814314": "Halysidota", + "1814323": "Halysidota ruscheweyhi", + "1814336": "Halysidota davisii", + "1814338": "Halysidota tessellaris", + "1814357": "Halysidota cinctipes", + "1814359": "Halysidota schausi", + "1814365": "Halysidota harrisii", + "1814401": "Amastus", + "1814534": "Cymbalophora", + "1814538": "Cymbalophora oertzeni", + "1814552": "Cymbalophora pudica", + "1814563": "Poecilosoma", + "1814595": "Dysauxes", + "1814630": "Dysauxes ancilla", + "1814653": "Dysauxes famula", + "1814654": "Idalus", + "1814658": "Idalus agastus", + "1814665": "Idalus herois", + "1814692": "Idalus critheis", + "1814799": "Ctenucha", + "1814800": "Ctenucha brunnea", + "1814823": "Ctenucha vittigerum", + "1814827": "Ctenucha multifaria", + "1814838": "Ctenucha rubroscapus", + "1814843": "Ctenucha virginica", + "1814863": "Ctenucha venosa", + "1814877": "Ilemodes astriga", + "1814885": "Creatonotos", + "1814913": "Creatonotos gangis", + "1814928": "Creatonotos transiens", + "1814969": "Pseudoblabes", + "1814971": "Pseudoblabes oophora", + "1815226": "Pelosia", + "1815259": "Chrysaeglia", + "1815260": "Chrysaeglia magnifica", + "1815315": "Psichotoe duvauceli", + "1815337": "Scoliacma", + "1815338": "Scoliacma bicolora", + "1815371": "Nyridela", + "1815373": "Nyridela acroxantha", + "1815380": "Eudesmia", + "1815421": "Zobida", + "1815439": "Dysschema", + "1815670": "Padenia", + "1815680": "Padenia transversa", + "1815844": "Dycladia", + "1815856": "Dycladia lucetius", + "1815859": "Oxacme", + "1815923": "Ovipennis", + "1816024": "Nyctemera", + "1816029": "Nyctemera baulus", + "1816065": "Nyctemera coleta", + "1816110": "Nyctemera amicus", + "1816138": "Nyctemera carissima", + "1816246": "Nyctemera tripunctaria", + "1816264": "Nyctemera annulata", + "1816276": "Nyctemera albofasciata", + "1816292": "Nyctemera arctata", + "1816299": "Nyctemera adversata", + "1816362": "Nyctemera lacticinia", + "1816417": "Castulo", + "1816434": "Castulo doubledayi", + "1816564": "Apistosia", + "1816570": "Apistosia judas", + "1816634": "Amerila rubripes", + "1816648": "Amerila crokeri", + "1816673": "Amerila timolis", + "1816685": "Amerila bubo", + "1816775": "Sozusa scutellata", + "1816799": "Dinia", + "1816867": "Hyphoraia", + "1816881": "Hyphoraia aulica", + "1816956": "Euchromia", + "1817060": "Calamidia", + "1817065": "Calamidia hirta", + "1817084": "Leucotmemis", + "1817086": "Leucotmemis nexa", + "1817136": "Asura", + "1817160": "Asura bipars", + "1817171": "Asura cervicalis", + "1817217": "Asura lydia", + "1817669": "Lophocampa", + "1817690": "Lophocampa mixta", + "1817693": "Lophocampa ingens", + "1817696": "Lophocampa roseata", + "1817727": "Lophocampa argentata", + "1817729": "Lophocampa maculata", + "1817732": "Lophocampa caryae", + "1817734": "Lophocampa annulosa", + "1817749": "Lophocampa pura", + "1817786": "Hyphantria", + "1817797": "Hyphantria cunea", + "1817807": "Lepidoneiva", + "1817808": "Lepidoneiva erubescens", + "1817809": "Symmetrodes", + "1817810": "Symmetrodes sciocosma", + "1817848": "Chrysocale", + "1817852": "Chrysocale ignita", + "1817854": "Chrysocale regalis", + "1817864": "Chrysocale principalis", + "1817918": "Amsactoides", + "1817933": "Empyreuma", + "1817940": "Empyreuma pugione", + "1817973": "Pseudonaclia puella", + "1818216": "Tigrioides alterna", + "1818251": "Hyperphara", + "1818252": "Hyperphara clusia", + "1818401": "Diduga", + "1818413": "Diduga flavicostata", + "1818428": "Lerina", + "1818431": "Hemihyalea", + "1818454": "Hemihyalea edwardsii", + "1818463": "Hemihyalea labecula", + "1818477": "Laelia", + "1818650": "Orvasca", + "1818659": "Orvasca subnotata", + "1818989": "Perina", + "1818991": "Perina nuda", + "1819044": "Albarracina", + "1819050": "Albarracina warionis", + "1819057": "Medama diplaga", + "1819125": "Calliteara", + "1819128": "Calliteara angulata", + "1819145": "Calliteara pudibunda", + "1819170": "Penthophera morio", + "1819252": "Sphrageidus", + "1819268": "Sphrageidus similis", + "1819270": "Sphrageidus virguncula", + "1819276": "Locharna", + "1819280": "Locharna strigipennis", + "1819302": "Sarsina", + "1819310": "Sarsina purpurascens", + "1819320": "Hemerophanes libyra", + "1819337": "Artaxa guttata", + "1819362": "Artaxa olivata", + "1819372": "Arctornis", + "1819421": "Arctornis rutila", + "1819648": "Clethrogyna", + "1819668": "Clethrogyna turbata", + "1819685": "Somena scintillans", + "1819696": "Ocneria", + "1819699": "Ocneria rubea", + "1819785": "Ilema", + "1819852": "Numenes siletti", + "1819865": "Orgyia", + "1819873": "Orgyia antiqua", + "1819928": "Orgyia trigotephras", + "1819968": "Leptocneria", + "1819970": "Leptocneria reducta", + "1820039": "Leucoma salicis", + "1820080": "Arna", + "1820118": "Olene dudgeoni", + "1820137": "Olene mendosa", + "1820270": "Lymantria", + "1820275": "Lymantria marginata", + "1820282": "Lymantria bivittata", + "1820291": "Lymantria narindra", + "1820318": "Lymantria fuliginosa", + "1820352": "Lymantria grisea", + "1820372": "Lymantria monacha", + "1820383": "Lymantria nephrographa", + "1820393": "Lymantria plumbalis", + "1820401": "Lymantria lunata", + "1820406": "Lymantria dispar", + "1820414": "Lymantria iris", + "1820429": "Lymantria brunneiplaga", + "1820435": "Lymantria antennata", + "1820440": "Lymantria semicincta", + "1820450": "Lymantria mathura", + "1820451": "Lymantria ganara", + "1820458": "Lymantria ampla", + "1820477": "Lymantria concolor", + "1820478": "Lymantria brotea", + "1820536": "Dura", + "1820565": "Dura alba", + "1820573": "Naroma varipes", + "1820708": "Dasychira", + "1820711": "Dasychira atrivenosa", + "1820714": "Dasychira plagiata", + "1820722": "Dasychira vagans", + "1820753": "Dasychira olivacea", + "1820764": "Dasychira grisefacta", + "1820791": "Dasychira obliquata", + "1820802": "Dasychira octophora", + "1820888": "Dasychira chekiangensis", + "1820940": "Dasychira meridionalis", + "1820948": "Dasychira extorta", + "1821012": "Dasychira georgiana", + "1821051": "Dasychira manto", + "1821105": "Dasychira postfusca", + "1821113": "Dasychira basiflava", + "1821260": "Dasychira nachiensis", + "1821433": "Polymona", + "1821436": "Polymona rufifemur", + "1821441": "Acyphas", + "1821448": "Acyphas chionitis", + "1821455": "Euproctis kanshireia", + "1821464": "Euproctis lutea", + "1821468": "Euproctis fimbriata", + "1821478": "Euproctis purpureofasciata", + "1821479": "Euproctis subflava", + "1821505": "Euproctis baibarana", + "1821542": "Euproctis lucifuga", + "1821547": "Euproctis fasciata", + "1821581": "Euproctis straminicolor", + "1821651": "Euproctis inornata", + "1821684": "Euproctis aethiopica", + "1821856": "Euproctis chrysorrhoea", + "1821863": "Euproctis croceola", + "1821911": "Euproctis similis", + "1821920": "Euproctis magna", + "1821934": "Euproctis taiwana", + "1821940": "Euproctis piperita", + "1822003": "Euproctis edwardsii", + "1822017": "Euproctis quadrangularis", + "1822129": "Palasea", + "1822137": "Pida", + "1822141": "Pida decolorata", + "1822142": "Pida postalba", + "1822252": "Cascera", + "1822257": "Cascera muscosa", + "1822307": "Peridea", + "1822346": "Peridea anceps", + "1822481": "Dudusa", + "1822487": "Dudusa nobilis", + "1822490": "Dudusa sphingiformis", + "1822493": "Dudusa synopla", + "1822502": "Besaia sordida", + "1822545": "Furcula", + "1822587": "Furcula bifida", + "1822610": "Furcula furcula", + "1822613": "Furcula bicuspis", + "1822666": "Oligocentria", + "1822667": "Oligocentria semirufescens", + "1822778": "Clostera", + "1822784": "Clostera strigosa", + "1822787": "Clostera anastomosis", + "1822788": "Clostera apicalis", + "1822796": "Clostera curtula", + "1822805": "Clostera inclusa", + "1822819": "Clostera pigra", + "1822830": "Clostera anachoreta", + "1822848": "Clostera albosigma", + "1822852": "Clostera restitura", + "1822912": "Hylaeora", + "1822916": "Hylaeora eucalypti", + "1822917": "Hylaeora capucina", + "1823292": "Uropyia", + "1823294": "Uropyia meticulodina", + "1823440": "Lophontosia", + "1823444": "Lophontosia fusca", + "1823479": "Higena", + "1823488": "Trichiocercus", + "1823493": "Trichiocercus sparshalli", + "1823572": "Tensha", + "1823573": "Tensha striatella", + "1823574": "Somera", + "1823601": "Rhegmatophila", + "1823604": "Rhegmatophila alpina", + "1823616": "Micromelalopha", + "1823636": "Afilia", + "1823637": "Afilia oslari", + "1823667": "Ramesa", + "1823698": "Neodrymonia", + "1823706": "Neodrymonia basalis", + "1823714": "Harpyia", + "1823726": "Harpyia milhauseri", + "1824079": "Phryganidia", + "1824080": "Phryganidia californica", + "1824090": "Thaumetopoea", + "1824113": "Thaumetopoea processionea", + "1824117": "Thaumetopoea wilkinsoni", + "1824121": "Thaumetopoea herculeana", + "1824131": "Thaumetopoea pityocampa", + "1824174": "Crinodes", + "1824189": "Crinodes bellatrix", + "1824237": "Mesophalera", + "1824242": "Mesophalera sigmata", + "1824246": "Pygaera", + "1824253": "Ecnomodes", + "1824255": "Pseudhapigia", + "1824259": "Pseudhapigia brunnea", + "1824279": "Neola", + "1824280": "Neola semiaurata", + "1824326": "Benbowia", + "1824330": "Benbowia takamukuanus", + "1824336": "Acmeshachia", + "1824338": "Acmeshachia gigantea", + "1824350": "Liparopsis", + "1824354": "Liparopsis postalbida", + "1824384": "Shaka", + "1824390": "Shaka mushana", + "1824440": "Hyparpax", + "1824442": "Hyparpax aurora", + "1824449": "Hyparpax aurostriata", + "1824562": "Misogada", + "1824571": "Misogada unicolor", + "1824661": "Gonoclostera", + "1824666": "Gonoclostera timoniorum", + "1824749": "Oligoclona", + "1824751": "Oligoclona chrysolopha", + "1824762": "Chadisra", + "1824766": "Chadisra bipars", + "1824842": "Norracoides", + "1824845": "Norracoides basinotata", + "1824870": "Ursia", + "1824990": "Neocerura", + "1824997": "Neocerura liturata", + "1825057": "Pterostoma", + "1825064": "Pterostoma palpina", + "1825076": "Notodonta", + "1825077": "Notodonta dromedarius", + "1825082": "Notodonta griseotincta", + "1825083": "Notodonta torva", + "1825121": "Cerura", + "1825156": "Cerura vinula", + "1825176": "Cerura erminea", + "1825216": "Litodonta", + "1825218": "Litodonta hydromeli", + "1825235": "Destolmia", + "1825238": "Destolmia lineata", + "1825334": "Netria", + "1825336": "Netria viridescens", + "1825340": "Rosema", + "1825373": "Rosema deolis", + "1825391": "Rosema epigena", + "1825424": "Lochmaeus", + "1825428": "Lochmaeus manteo", + "1825430": "Lochmaeus bilineata", + "1825444": "Drymonia", + "1825535": "Leucodonta", + "1825539": "Leucodonta bicoloria", + "1825551": "Schizura", + "1825734": "Fentonia", + "1825783": "Cnethodonta", + "1825786": "Cnethodonta grisescens", + "1825887": "Pheosiopsis", + "1825919": "Gazalina", + "1825920": "Gazalina transversa", + "1825946": "Aglaosoma", + "1825950": "Aglaosoma variegata", + "1825951": "Ortholomia", + "1825956": "Ortholomia moluccana", + "1825963": "Pheosia", + "1825967": "Pheosia rimosa", + "1825971": "Pheosia gnoma", + "1825983": "Pheosia tremula", + "1826016": "Cynosarga", + "1826017": "Cynosarga ornata", + "1826020": "Chadisra acrobela", + "1826021": "Odontosia", + "1826022": "Odontosia carmelita", + "1826033": "Odontosia sieversii", + "1826045": "Nerice", + "1826048": "Nerice bidentata", + "1826053": "Dasylophia", + "1826058": "Dasylophia anguina", + "1826084": "Dasylophia thyatiroides", + "1826107": "Phalerodonta", + "1826108": "Phalerodonta manleyi", + "1826124": "Ginshachia", + "1826129": "Ginshachia elongata", + "1826153": "Datana", + "1826156": "Datana integerrima", + "1826163": "Datana contracta", + "1826164": "Datana ministra", + "1826167": "Datana major", + "1826169": "Datana perspicua", + "1826172": "Datana diffidens", + "1826173": "Datana angusii", + "1826175": "Datana drexelii", + "1826180": "Didugua", + "1826181": "Didugua argentilinea", + "1826192": "Stauropus", + "1826217": "Symmerista", + "1826222": "Symmerista albifrons", + "1826417": "Libido", + "1826511": "Semidonta", + "1826572": "Heterocampa", + "1826650": "Disphragis", + "1826772": "Disphragis tharis", + "1826821": "Pheraspis", + "1826823": "Pheraspis mesotypa", + "1827099": "Nadata", + "1827103": "Nadata gibbosa", + "1827111": "Gluphisia", + "1827112": "Gluphisia severa", + "1827113": "Gluphisia septentrionis", + "1827125": "Gluphisia crenata", + "1827132": "Gluphisia lintneri", + "1827133": "Gluphisia avimacula", + "1827142": "Anurocampa", + "1827145": "Anurocampa mingens", + "1827158": "Ellida", + "1827161": "Ellida caniplaga", + "1827279": "Ptilophora", + "1827342": "Periergos", + "1827349": "Periergos magna", + "1827405": "Tarsolepis", + "1827408": "Tarsolepis japonica", + "1827414": "Tarsolepis taiwana", + "1827428": "Paradestolmia", + "1827429": "Paradestolmia nigrolinea", + "1827482": "Neopheosia", + "1827484": "Neopheosia fasciata", + "1827506": "Sorama", + "1827507": "Sorama bicolor", + "1827539": "Euhampsonia", + "1827547": "Phalera", + "1827641": "Spatalia", + "1827645": "Spatalia argentina", + "1827649": "Spatalia dives", + "1827650": "Spatalia doerriesi", + "1827686": "Rachiades", + "1827687": "Rachiades lichenicolor", + "1827708": "Formofentonia", + "1827711": "Formofentonia orbifer", + "1827714": "Cargida", + "1827716": "Cargida pyrrha", + "1827772": "Anaphe", + "1827775": "Anaphe reticulata", + "1827798": "Epicoma", + "1827802": "Epicoma contristis", + "1827810": "Epicoma protrahens", + "1827826": "Epicoma melanosticta", + "1827827": "Archigargetta", + "1827829": "Archigargetta amydra", + "1828102": "Notela", + "1828105": "Notela jaliscana", + "1828161": "Ptilodon", + "1828162": "Ptilodon capucina", + "1828180": "Ptilodon saturata", + "1828267": "Theroa", + "1828268": "Theroa zethus", + "1828308": "Oenosandra", + "1828310": "Oenosandra boisduvalii", + "1828314": "Discophlebia", + "1828317": "Discophlebia lucasii", + "1828383": "Dumbletonius", + "1828394": "Wiseana", + "1828395": "Wiseana signata", + "1828400": "Wiseana copularis", + "1828402": "Wiseana cervinata", + "1828406": "Oncopera", + "1828424": "Oncopera rufobrunnea", + "1828425": "Cladoxycanus", + "1828426": "Cladoxycanus minos", + "1828435": "Fraus", + "1828455": "Fraus crocea", + "1828456": "Fraus simulans", + "1828463": "Oxycanus", + "1828471": "Oxycanus dirempta", + "1828491": "Oxycanus beltista", + "1828540": "Oxycanus antipoda", + "1828543": "Oxycanus silvanus", + "1828544": "Oxycanus australis", + "1828574": "Leto", + "1828636": "Hepialus", + "1828637": "Hepialus humuli", + "1828802": "Abantiades", + "1828825": "Aenetus", + "1828826": "Aenetus virescens", + "1828975": "Elhamma", + "1828976": "Elhamma australasiae", + "1829019": "Sthenopis", + "1829021": "Sthenopis purpurascens", + "1829029": "Sthenopis argenteomaculatus", + "1829282": "Philonome", + "1829287": "Philonome clemensella", + "1829298": "Lyonetia", + "1829322": "Lyonetia clerkella", + "1829363": "Lyonetia prunifoliella", + "1829391": "Leucoptera", + "1829472": "Acrolepia", + "1829533": "Acrolepia assectella", + "1829588": "Acrolepia autumnitella", + "1829593": "Eusthenica", + "1829612": "Glyphipterix impigritella", + "1829658": "Lepidotarphius", + "1829659": "Lepidotarphius perornatella", + "1829702": "Glyphipterix", + "1829703": "Glyphipterix meteora", + "1829776": "Glyphipterix simpliciella", + "1829785": "Glyphipterix thrasonella", + "1829799": "Glyphipterix haworthana", + "1829814": "Glyphipterix tungella", + "1829823": "Glyphipterix forsterella", + "1829866": "Glyphipterix chrysoplanetis", + "1829974": "Glyphipterix bergstraesserella", + "1830030": "Eucalantica", + "1830031": "Eucalantica polita", + "1830036": "Zelleria", + "1830098": "Comocritis", + "1830099": "Comocritis albicapilla", + "1830118": "Argyresthia", + "1830122": "Argyresthia retinella", + "1830125": "Argyresthia goedartella", + "1830131": "Argyresthia albistria", + "1830137": "Argyresthia calliphanes", + "1830144": "Argyresthia dilectella", + "1830147": "Argyresthia curvella", + "1830152": "Argyresthia brockeella", + "1830186": "Argyresthia arceuthina", + "1830191": "Argyresthia pruniella", + "1830194": "Argyresthia quadristrigella", + "1830202": "Argyresthia subreticulata", + "1830203": "Argyresthia alternatella", + "1830207": "Argyresthia abdominalis", + "1830221": "Argyresthia cupressella", + "1830229": "Argyresthia austerella", + "1830241": "Argyresthia conjugella", + "1830243": "Argyresthia pygmaeella", + "1830262": "Argyresthia sorbiella", + "1830266": "Argyresthia pulchella", + "1830271": "Argyresthia trifasciata", + "1830284": "Argyresthia thuiella", + "1830293": "Argyresthia aureoargentella", + "1830355": "Swammerdamia", + "1830361": "Swammerdamia caesiella", + "1830372": "Swammerdamia pyrella", + "1830374": "Swammerdamia compunctella", + "1830379": "Yponomeuta", + "1830380": "Yponomeuta evonymella", + "1830407": "Yponomeuta sedella", + "1830408": "Yponomeuta irrorella", + "1830410": "Yponomeuta plumbella", + "1830419": "Yponomeuta paurodes", + "1830435": "Yponomeuta pustulellus", + "1830437": "Yponomeuta fumigata", + "1830442": "Yponomeuta multipunctella", + "1830457": "Yponomeuta rorella", + "1830459": "Yponomeuta strigillata", + "1830497": "Pseudoswammerdamia", + "1830498": "Pseudoswammerdamia combinella", + "1830507": "Paraswammerdamia", + "1830533": "Parahyponomeuta", + "1830534": "Parahyponomeuta egregiella", + "1830535": "Euhyponomeuta", + "1830537": "Euhyponomeuta stannella", + "1830581": "Ocnerostoma", + "1830584": "Ocnerostoma friesei", + "1830630": "Scythropia", + "1830632": "Scythropia crataegella", + "1830657": "Atteva", + "1830669": "Atteva niphocosma", + "1830681": "Atteva aurea", + "1830799": "Cedestis", + "1830802": "Cedestis subfasciella", + "1830812": "Prays nephelomima", + "1830814": "Prays parilis", + "1830838": "Prays ruficeps", + "1830843": "Prays fraxinella", + "1830873": "Eidophasia", + "1830879": "Eidophasia messingiella", + "1830909": "Ypsolophus", + "1830937": "Ypsolophus sequella", + "1830962": "Ypsolophus sylvella", + "1831002": "Ypsolophus ustella", + "1831009": "Ypsolophus asperella", + "1831096": "Doxophyrtis", + "1831097": "Doxophyrtis hydrocosma", + "1831127": "Plutella", + "1831128": "Plutella incarnatella", + "1831136": "Plutella xylostella", + "1831168": "Plutella porrectella", + "1831270": "Leuroperna", + "1831272": "Rhigognostis", + "1831446": "Stathmopoda", + "1831458": "Stathmopoda auriferella", + "1831473": "Stathmopoda skelloni", + "1831499": "Stathmopoda melanochra", + "1831508": "Stathmopoda megathyma", + "1831565": "Stathmopoda aposema", + "1831631": "Stathmopoda stimulata", + "1831643": "Stathmopoda pedella", + "1831655": "Stathmopoda triselena", + "1831667": "Stathmopoda plumbiflua", + "1831720": "Heliodines", + "1831747": "Bedellia", + "1831752": "Bedellia somnulentella", + "1831773": "Euceratia", + "1831775": "Euceratia castella", + "1831776": "Ochsenheimeria", + "1831780": "Ochsenheimeria taurella", + "1831858": "Eurodachtha", + "1831861": "Eurodachtha pallicornella", + "1831863": "Eurodachtha canigella", + "1831868": "Lecithocera", + "1831890": "Lecithocera nigrana", + "1831974": "Lecithocera imprudens", + "1831999": "Lecithocera micromela", + "1832023": "Lecithocera terrigena", + "1832142": "Athymoris", + "1832143": "Athymoris martialis", + "1832151": "Torodora", + "1832233": "Lecitholaxa", + "1832235": "Lecitholaxa thiodora", + "1832247": "Tegenocharis", + "1832248": "Tegenocharis tenebrans", + "1832249": "Tisis", + "1832254": "Tisis mesozosta", + "1832349": "Nosphistica", + "1832512": "Crocanthes", + "1832518": "Crocanthes prasinopis", + "1832533": "Crocanthes perigrapta", + "1832553": "Crocanthes glycina", + "1832569": "Crocanthes micradelpha", + "1832608": "Deltoplastis", + "1832612": "Deltoplastis commatopa", + "1832635": "Scythropiodes", + "1832647": "Sarisophora", + "1832649": "Sarisophora leucoscia", + "1832673": "Homaloxestis", + "1832810": "Elachista", + "1832819": "Elachista bisulcella", + "1832853": "Elachista argentella", + "1832862": "Elachista biatomella", + "1832915": "Elachista adscitella", + "1832927": "Elachista apicipunctella", + "1832936": "Elachista pullicomella", + "1833096": "Elachista pollinariella", + "1833159": "Elachista humilis", + "1833468": "Martyringa", + "1833475": "Martyringa latipennis", + "1833476": "Hoplostega", + "1833477": "Hoplostega ochroma", + "1833495": "Decantha", + "1833497": "Decantha stonda", + "1833499": "Decantha stecia", + "1833500": "Decantha boreasella", + "1833518": "Gymnobathra parca", + "1833523": "Gymnobathra tholodella", + "1833525": "Gymnobathra hyetodes", + "1833531": "Gymnobathra flavidella", + "1833532": "Gymnobathra hamatella", + "1833535": "Gymnobathra omphalota", + "1833539": "Gymnobathra sarcoxantha", + "1833543": "Epicurica", + "1833560": "Hoplomorpha", + "1833562": "Hoplomorpha abalienella", + "1833568": "Olbonoma", + "1833578": "Leptocroca", + "1833600": "Leptocroca sanguinolenta", + "1833623": "Oecophora", + "1833626": "Oecophora bractella", + "1833627": "Oecophora staintoniella", + "1833651": "Leistomorpha", + "1833653": "Leistomorpha brontoscopa", + "1833663": "Chersadaula", + "1833664": "Chersadaula ochrogastra", + "1833778": "Thudaca", + "1833779": "Thudaca campylota", + "1833782": "Thudaca obliquella", + "1833794": "Thudaca haplonota", + "1833818": "Eulechria", + "1833834": "Eulechria rhymodes", + "1834019": "Eulechria atmospila", + "1834078": "Eulechria triferella", + "1834426": "Echiomima", + "1834428": "Echiomima mythica", + "1834431": "Ocystola", + "1834497": "Ocystola paulinella", + "1834515": "Agriophara", + "1834524": "Agriophara confertella", + "1834547": "Agriophara plagiosema", + "1834551": "Thymiatris", + "1834557": "Snellenia", + "1834588": "Goidanichiana", + "1834589": "Goidanichiana jourdheuillella", + "1834598": "Machimia", + "1834710": "Machimia tentoriferella", + "1834737": "Promalactis", + "1834775": "Promalactis mercedella", + "1834792": "Peritropha", + "1834793": "Peritropha oligodrachma", + "1834827": "Coesyra", + "1834850": "Coesyra hemiphragma", + "1834980": "Autosticha calceata", + "1835027": "Dafa", + "1835031": "Dafa oliviella", + "1835064": "Lichenaula", + "1835077": "Sphyrelata", + "1835082": "Sphyrelata amotella", + "1835084": "Hypertropha", + "1835086": "Hypertropha chlaenota", + "1835097": "Formokamaga", + "1835098": "Formokamaga flavopicta", + "1835118": "Tortricopsis", + "1835121": "Tortricopsis uncinella", + "1835123": "Tortricopsis euryphanella", + "1835128": "Tortricopsis pyroptis", + "1835151": "Harpella", + "1835156": "Harpella forficella", + "1835344": "Hapaloteucha", + "1835345": "Hapaloteucha paragramma", + "1835346": "Euprionocera", + "1835348": "Euprionocera geminipuncta", + "1835366": "Schiffermuelleria", + "1835393": "Schiffermuelleria schaefferella", + "1835396": "Schiffermuelleria procerella", + "1835407": "Schiffermuelleria amasiella", + "1835422": "Schiffermuelleria bruandella", + "1835429": "Semioscopis", + "1835430": "Semioscopis merriccella", + "1835432": "Semioscopis steinkellneriana", + "1835433": "Semioscopis oculella", + "1835436": "Semioscopis aurorella", + "1835438": "Semioscopis inornata", + "1835449": "Semioscopis megamicrella", + "1835451": "Semioscopis packardella", + "1835456": "Semioscopis strigulana", + "1835457": "Semioscopis avellanella", + "1835459": "Stoeberhinus", + "1835460": "Stoeberhinus testaceus", + "1835465": "Eupragia", + "1835467": "Eupragia hospita", + "1835499": "Polix", + "1835500": "Polix coloradella", + "1835546": "Chrysonoma", + "1835555": "Chrysonoma fascialis", + "1835599": "Chezala", + "1835609": "Chezala brachypepla", + "1835612": "Chezala privatella", + "1835635": "Chezala osteochroa", + "1835641": "Piloprepes", + "1835644": "Piloprepes antidoxa", + "1835688": "Inga", + "1835789": "Lophopepla", + "1835790": "Lophopepla igniferella", + "1835812": "Enchocrates", + "1835814": "Enchocrates glaucopis", + "1835818": "Bibarrambla", + "1835819": "Bibarrambla allenella", + "1835820": "Machetis", + "1835821": "Machetis aphrobola", + "1835828": "Machetis plagiozona", + "1835832": "Cryptophasa", + "1835848": "Cryptophasa flavolineata", + "1835862": "Cryptophasa irrorata", + "1835874": "Cryptophasa porphyritis", + "1835886": "Cryptophasa albacosta", + "1835897": "Cryptophasa epadelpha", + "1835908": "Cryptophasa rubescens", + "1835928": "Cryptophasa pultenae", + "1836103": "Brymblia", + "1836865": "Antipterna", + "1836870": "Nymphostola", + "1836871": "Nymphostola galactina", + "1836872": "Coeranica", + "1836873": "Coeranica isabella", + "1836898": "Hofmannophila", + "1836899": "Hofmannophila pseudospretella", + "1836903": "Vanicela", + "1836906": "Vanicela xenadelpha", + "1836907": "Vanicela disjunctella", + "1837045": "Hemibela", + "1837050": "Euphiltra", + "1837053": "Euphiltra eroticella", + "1837057": "Euphiltra epilecta", + "1837106": "Gonioterma", + "1837148": "Oxythecta", + "1837150": "Oxythecta acceptella", + "1837159": "Oxythecta hieroglyphica", + "1837168": "Endrosis", + "1837172": "Endrosis sarcitrella", + "1837338": "Depressaria", + "1837343": "Depressaria olerella", + "1837360": "Depressaria alienella", + "1837420": "Depressaria depressana", + "1837429": "Depressaria daucella", + "1837464": "Depressaria sordidatella", + "1837515": "Depressaria emeritella", + "1837568": "Enchronista", + "1837569": "Enchronista proximella", + "1837571": "Proteodes", + "1837572": "Proteodes profunda", + "1837645": "Ashinaga", + "1837646": "Ashinaga longimana", + "1837649": "Palimmeces", + "1837706": "Scieropepla polyxesta", + "1837723": "Phaeosaces", + "1837724": "Phaeosaces coarctatella", + "1837726": "Phaeosaces apocrypta", + "1837727": "Phaeosaces compsotypa", + "1837816": "Tingena", + "1837857": "Tingena clarkei", + "1837870": "Tingena hemimochla", + "1837894": "Tingena chloradelpha", + "1837898": "Mathildana", + "1837900": "Mathildana newmanella", + "1837967": "Barantola", + "1837968": "Barantola pulcherrima", + "1838028": "Antiopala", + "1838034": "Antiopala ebenospila", + "1838044": "Crepidosceles", + "1838053": "Eupselia", + "1838058": "Eupselia beatella", + "1838065": "Eupselia holoxantha", + "1838071": "Eupselia carpocapsella", + "1838074": "Telecrates", + "1838084": "Telecrates laetiorella", + "1838215": "Tisobarica", + "1838218": "Tisobarica eranna", + "1838224": "Tisobarica pyrrhella", + "1838242": "Epithymema", + "1838251": "Barea leucocephala", + "1838255": "Barea nymphica", + "1838276": "Barea eucapnodes", + "1838289": "Barea consignatella", + "1838297": "Barea melanodelta", + "1838304": "Barea confusella", + "1838308": "Barea exarcha", + "1838331": "Barea codrella", + "1838332": "Heteroteucha", + "1838333": "Heteroteucha dichroella", + "1838338": "Antaeotricha", + "1838360": "Antaeotricha haesitans", + "1838465": "Antaeotricha leucillana", + "1838512": "Antaeotricha humilis", + "1838584": "Antaeotricha schlaegeri", + "1838624": "Izatha", + "1838626": "Izatha huttoni", + "1838629": "Izatha attactella", + "1838633": "Izatha convulsella", + "1838635": "Izatha epiphanes", + "1838641": "Izatha peroneanella", + "1838649": "Izatha mesoschista", + "1838665": "Ymeldia", + "1838666": "Ymeldia janae", + "1838691": "Borkhausenia fuscescens", + "1838811": "Borkhausenia nefrax", + "1838838": "Borkhausenia italica", + "1838905": "Borkhausenia cinnamomea", + "1838911": "Borkhausenia minutella", + "1838956": "Tachystola", + "1838958": "Tachystola thiasotis", + "1838960": "Tachystola hemisema", + "1838964": "Luquetia", + "1838969": "Luquetia lobella", + "1838970": "Catoryctis", + "1838978": "Catoryctis subparallela", + "1839010": "Odites", + "1839094": "Odites kollarella", + "1839146": "Odites natalensis", + "1839258": "Exaeretia", + "1839293": "Exaeretia allisella", + "1839296": "Exaeretia ciniflonella", + "1839316": "Zonopetala", + "1839317": "Zonopetala decisana", + "1839323": "Zonopetala clerota", + "1839325": "Zonopetala divisella", + "1839333": "Zonopetala quadripustulella", + "1839361": "Atomotricha", + "1839370": "Atomotricha isogama", + "1839385": "Hieromantis", + "1839396": "Hieromantis ephodophora", + "1839399": "Eido", + "1839480": "Atheropla", + "1839494": "Atheropla decaspila", + "1839559": "Tyrolimnas", + "1839560": "Tyrolimnas anthraconesa", + "1839565": "Arignota", + "1839598": "Plectophila", + "1839600": "Plectophila pyrgodes", + "1839604": "Plectophila discalis", + "1839623": "Lamprystica", + "1839625": "Lamprystica purpurata", + "1839652": "Phylomictis", + "1839658": "Phylomictis maligna", + "1839706": "Eutorna", + "1839714": "Eutorna symmorpha", + "1839721": "Eutorna tricasis", + "1839730": "Pleurota", + "1839770": "Pleurota huebneri", + "1839851": "Pleurota aristella", + "1839878": "Pleurota honorella", + "1839893": "Pleurota bicostella", + "1839906": "Wingia", + "1840063": "Cryptolechia", + "1840223": "Garrha", + "1840257": "Compsotropha", + "1840258": "Compsotropha selenias", + "1840260": "Compsotropha strophiella", + "1840273": "Agonopterix", + "1840297": "Agonopterix heracliana", + "1840301": "Agonopterix propinquella", + "1840311": "Agonopterix canadensis", + "1840345": "Agonopterix angelicella", + "1840346": "Agonopterix alstroemeriana", + "1840360": "Agonopterix nervosa", + "1840371": "Agonopterix curvipunctosa", + "1840379": "Agonopterix curvilineella", + "1840380": "Agonopterix kaekeritziana", + "1840408": "Agonopterix ciliella", + "1840441": "Agonopterix robiniella", + "1840448": "Agonopterix atrodorsella", + "1840478": "Agonopterix subpropinquella", + "1840483": "Agonopterix yeatiana", + "1840485": "Agonopterix conterminella", + "1840520": "Agonopterix lythrella", + "1840543": "Agonopterix clemensella", + "1840553": "Agonopterix argillacea", + "1840555": "Agonopterix liturosa", + "1840566": "Agonopterix hypericella", + "1840570": "Agonopterix purpurea", + "1840581": "Agonopterix arenella", + "1840592": "Agonopterix pulvipennella", + "1840596": "Agonopterix ocellana", + "1840621": "Agonopterix scopariella", + "1840656": "Agonopterix thelmae", + "1840664": "Philobota", + "1840726": "Philobota arabella", + "1840774": "Philobota protecta", + "1840776": "Philobota lysizona", + "1840796": "Philobota stella", + "1840812": "Philobota productella", + "1840844": "Philobota impletella", + "1840974": "Philobota xiphostola", + "1841075": "Psilocorsis", + "1841081": "Psilocorsis cryptolechiella", + "1841084": "Psilocorsis quercicella", + "1841091": "Psilocorsis reflexella", + "1841093": "Compsistis", + "1841095": "Compsistis bifaciella", + "1841100": "Arachnographa", + "1841101": "Arachnographa micrastrella", + "1841152": "Batia", + "1841158": "Batia lambdella", + "1841159": "Batia lunaris", + "1841169": "Trachypepla", + "1841180": "Trachypepla anastrella", + "1841183": "Trachypepla conspicuella", + "1841188": "Trachypepla galaxias", + "1841215": "Trachypepla euryleucota", + "1841219": "Trachypepla contritella", + "1841220": "Ptyoptila", + "1841221": "Ptyoptila matutinella", + "1841259": "Carcina", + "1841261": "Carcina quercana", + "1841294": "Diurnea", + "1841296": "Diurnea fagella", + "1841301": "Archaereta", + "1841302": "Archaereta dorsivittella", + "1841303": "Lepidotarsa", + "1841459": "Enolmis", + "1841460": "Enolmis acanthella", + "1841475": "Parascythris", + "1841476": "Parascythris muelleri", + "1841486": "Eretmocera", + "1841529": "Scythris", + "1841616": "Scythris scopolella", + "1841675": "Scythris empetrella", + "1841706": "Scythris inertella", + "1841764": "Scythris fuscicomella", + "1841782": "Scythris trivinctella", + "1841813": "Scythris limbella", + "1841821": "Scythris cicadella", + "1841946": "Scythris sinensis", + "1841989": "Scythris knochella", + "1842040": "Eralea", + "1842043": "Eralea albalineella", + "1842085": "Pyroderces", + "1842097": "Pyroderces argyrogrammos", + "1842119": "Pyroderces aellotricha", + "1842124": "Pyroderces apparitella", + "1842184": "Sorhagenia", + "1842196": "Sorhagenia rhamniella", + "1842261": "Limnaecia", + "1842436": "Ithome", + "1842446": "Ithome erransella", + "1842479": "Cosmopterix", + "1842485": "Cosmopterix zieglerella", + "1842508": "Cosmopterix attenuatella", + "1842542": "Cosmopterix scribaiella", + "1842684": "Pancalia", + "1842690": "Pancalia nodosella", + "1842695": "Pancalia leuwenhoekella", + "1842699": "Stagmatophora", + "1842803": "Anatrachyntis", + "1842889": "Gisilia", + "1842986": "Haplochrois", + "1843000": "Euclemensia", + "1843313": "Macrobathra chrysotoxa", + "1843326": "Macrobathra bigerella", + "1843331": "Macrobathra desmotoma", + "1843362": "Macrobathra euryleuca", + "1843370": "Macrobathra alternatella", + "1843379": "Macrobathra arrectella", + "1843428": "Glaphyristis", + "1843429": "Glaphyristis marmarea", + "1843441": "Melanocinclis", + "1843444": "Melanocinclis lineigera", + "1843479": "Labdia", + "1843485": "Labdia deliciosella", + "1843564": "Labdia oxychlora", + "1843590": "Labdia chryselectra", + "1843602": "Labdia semicoccinea", + "1843855": "Metriotes", + "1843887": "Homaledra", + "1843888": "Homaledra heptathalama", + "1843889": "Homaledra sabalella", + "1843897": "Coleophora", + "1845266": "Ethmia", + "1845270": "Ethmia bipunctella", + "1845271": "Ethmia sphaerosticha", + "1845279": "Ethmia marmorea", + "1845314": "Ethmia bittenella", + "1845329": "Ethmia discostrigella", + "1845335": "Ethmia hagenella", + "1845368": "Ethmia terminella", + "1845385": "Ethmia delliella", + "1845442": "Ethmia hodgesella", + "1845448": "Ethmia longimaculella", + "1845455": "Ethmia semiombra", + "1845502": "Ethmia monticola", + "1845503": "Ethmia clytodoxa", + "1845513": "Ethmia semilugens", + "1845547": "Ethmia lineatonotella", + "1845548": "Ethmia candidella", + "1845565": "Ethmia dodecea", + "1845574": "Ethmia circumdatella", + "1845586": "Ethmia heptasema", + "1845604": "Ethmia zelleriella", + "1845605": "Ethmia mirusella", + "1845607": "Ethmia pusiella", + "1845616": "Ethmia sabiella", + "1845791": "Gerdana", + "1845793": "Gerdana caritella", + "1845807": "Symmoca", + "1845866": "Symmoca signatella", + "1845950": "Stibaromacha", + "1845952": "Stibaromacha ratella", + "1845958": "Oegoconia", + "1845962": "Oegoconia novimundi", + "1845965": "Oegoconia caradjai", + "1845981": "Symmocoides", + "1845982": "Symmocoides oxybiella", + "1846006": "Glyphidocera", + "1846035": "Glyphidocera lithodoxa", + "1846052": "Glyphidocera lactiflosella", + "1846094": "Mompha", + "1846099": "Mompha circumscriptella", + "1846103": "Mompha albocapitella", + "1846107": "Mompha locupletella", + "1846111": "Mompha subbistrigella", + "1846112": "Mompha epilobiella", + "1846133": "Mompha idaei", + "1846141": "Mompha conturbatella", + "1846149": "Mompha ochraceella", + "1846159": "Mompha propinquella", + "1846190": "Mompha brevivittella", + "1846210": "Mompha lacteella", + "1846219": "Mompha divisella", + "1846229": "Mompha eloisella", + "1846236": "Mompha raschkiella", + "1846239": "Triclonella", + "1846240": "Triclonella pergandeella", + "1846259": "Triclonella bicoloripennis", + "1846261": "Triclonella determinatella", + "1846311": "Frumenta", + "1846313": "Frumenta nundinella", + "1846350": "Holophysis", + "1846351": "Holophysis emblemella", + "1846370": "Epidola", + "1846374": "Epidola stigma", + "1846392": "Ornativalva", + "1846439": "Ornativalva erubescens", + "1846480": "Taygete", + "1846505": "Taygete attributella", + "1846510": "Telphusa", + "1846586": "Pexicopia", + "1846604": "Pexicopia malvella", + "1846636": "Monochroa", + "1846657": "Monochroa cytisella", + "1846715": "Monochroa lucidella", + "1846729": "Monochroa tenebrella", + "1846848": "Stegasta", + "1846849": "Stegasta bosqueella", + "1846858": "Stegasta variana", + "1846860": "Stegasta capitella", + "1846907": "Dichomeris", + "1846914": "Dichomeris aglaia", + "1846916": "Dichomeris juniperella", + "1846941": "Dichomeris punctidiscellus", + "1846945": "Dichomeris setosella", + "1846971": "Dichomeris juncidella", + "1846992": "Dichomeris ventrellus", + "1847013": "Dichomeris costarufoella", + "1847059": "Dichomeris copa", + "1847061": "Dichomeris limosellus", + "1847062": "Dichomeris oxycarpa", + "1847064": "Dichomeris vacciniella", + "1847066": "Dichomeris capnites", + "1847068": "Dichomeris inversella", + "1847097": "Dichomeris ustalella", + "1847111": "Dichomeris acuminatus", + "1847149": "Dichomeris inserrata", + "1847157": "Dichomeris sandycitis", + "1847225": "Dichomeris furia", + "1847249": "Dichomeris ligulella", + "1847260": "Dichomeris ochthophora", + "1847274": "Dichomeris bilobella", + "1847308": "Dichomeris ochripalpella", + "1847343": "Dichomeris flavocostella", + "1847392": "Dichomeris heriguronis", + "1847407": "Dichomeris marginella", + "1847426": "Dichomeris nonstrigella", + "1847457": "Dichomeris simpliciella", + "1847484": "Dichomeris kimballi", + "1847498": "Dichomeris punctipennella", + "1847533": "Isophrictis", + "1847568": "Isophrictis similiella", + "1847572": "Isophrictis striatella", + "1847591": "Anarsia", + "1847622": "Anarsia molybdota", + "1847639": "Anarsia epiula", + "1847641": "Anarsia patulella", + "1847866": "Sinoe", + "1847914": "Battaristis", + "1847919": "Battaristis vittella", + "1847930": "Battaristis nigratomella", + "1847944": "Battaristis concinnusella", + "1847952": "Parachronistis", + "1847956": "Parachronistis albiceps", + "1847974": "Agnippe", + "1848019": "Palumbina", + "1848113": "Untomia", + "1848114": "Untomia albistrigella", + "1848149": "Psoricoptera", + "1848150": "Psoricoptera gibbosella", + "1848192": "Ptocheuusa", + "1848202": "Ptocheuusa paupella", + "1848212": "Pseudochelaria pennsylvanica", + "1848213": "Pseudochelaria walsinghami", + "1848217": "Aproaerema", + "1848219": "Aproaerema anthyllidella", + "1848253": "Anacampsis", + "1848259": "Anacampsis paltodoriella", + "1848272": "Anacampsis fullonella", + "1848273": "Anacampsis populella", + "1848274": "Anacampsis agrimoniella", + "1848295": "Anacampsis levipedella", + "1848312": "Anacampsis niveopulvella", + "1848322": "Anacampsis tristrigella", + "1848325": "Anacampsis coverdalella", + "1848356": "Anacampsis blattariella", + "1848374": "Brachmia", + "1848378": "Brachmia dimidiella", + "1848426": "Brachmia inornatella", + "1848475": "Filatima", + "1848490": "Filatima albilorella", + "1848505": "Filatima neotrophella", + "1848582": "Recurvaria", + "1848596": "Recurvaria leucatella", + "1848610": "Recurvaria nanella", + "1848634": "Exoteleia", + "1848636": "Exoteleia dodecella", + "1848639": "Exoteleia pinifoliella", + "1848655": "Cosmardia", + "1848657": "Cosmardia moritzella", + "1848660": "Neofaculta", + "1848669": "Neofaculta ericetella", + "1848677": "Bryotropha", + "1848690": "Bryotropha terrella", + "1848713": "Bryotropha senectella", + "1848714": "Bryotropha affinis", + "1848717": "Bryotropha basaltinella", + "1848730": "Bryotropha similis", + "1848741": "Bryotropha domestica", + "1848753": "Bryotropha galbanella", + "1848843": "Metzneria", + "1848864": "Metzneria lappella", + "1848868": "Metzneria metzneriella", + "1848920": "Prolita sexpunctella", + "1849005": "Anisoplaca", + "1849007": "Anisoplaca cosmia", + "1849010": "Anisoplaca achyrota", + "1849103": "Apodia", + "1849104": "Apodia bifractella", + "1849117": "Calliprora", + "1849249": "Tituacia", + "1849256": "Carpatolechia", + "1849267": "Carpatolechia proximella", + "1849273": "Carpatolechia decorella", + "1849284": "Carpatolechia alburnella", + "1849294": "Carpatolechia fugitivella", + "1849449": "Deltophora", + "1849457": "Deltophora sella", + "1849470": "Deltophora glandiferella", + "1849474": "Nothris", + "1849477": "Nothris verbascella", + "1849498": "Xenolechia ontariensis", + "1849514": "Oxypteryx", + "1849528": "Stomopteryx", + "1849531": "Stomopteryx remissella", + "1849539": "Stomopteryx basalis", + "1849552": "Stomopteryx detersella", + "1849628": "Teleiopsis", + "1849630": "Teleiopsis diffinis", + "1849652": "Tricyanaula", + "1849656": "Tricyanaula aurantiaca", + "1849663": "Scrobipalpa", + "1849856": "Scrobipalpa atriplicella", + "1849897": "Scrobipalpa costella", + "1849924": "Scrobipalpa ocellatella", + "1849983": "Sophronia", + "1850008": "Sophronia semicostella", + "1850022": "Caryocolum", + "1850042": "Caryocolum pullatella", + "1850045": "Caryocolum cassella", + "1850076": "Caryocolum vicinella", + "1850077": "Caryocolum marmorea", + "1850106": "Caryocolum fraternella", + "1850144": "Symmetrischema", + "1850156": "Symmetrischema tangolias", + "1850184": "Symmetrischema striatella", + "1850224": "Faculta", + "1850225": "Faculta inaequalis", + "1850231": "Teleiodes", + "1850238": "Teleiodes vulgella", + "1850246": "Teleiodes luculella", + "1850276": "Gelechia", + "1850279": "Gelechia senticetella", + "1850302": "Gelechia nigra", + "1850321": "Gelechia lynceella", + "1850335": "Gelechia sororculella", + "1850386": "Gelechia muscosella", + "1850394": "Gelechia rhombella", + "1850450": "Gelechia sabinellus", + "1850463": "Ardozyga abruptella", + "1850474": "Pseudotelphusa", + "1850497": "Pseudotelphusa tessella", + "1850506": "Pseudotelphusa scalella", + "1850521": "Argolamprotes", + "1850522": "Argolamprotes micella", + "1850525": "Helcystogramma", + "1850533": "Helcystogramma lutatella", + "1850538": "Helcystogramma rufescens", + "1850570": "Helcystogramma triannulella", + "1850575": "Helcystogramma chambersella", + "1850585": "Helcystogramma melantherella", + "1850589": "Helcystogramma fernaldella", + "1850597": "Helcystogramma hystricella", + "1850633": "Helcystogramma hibisci", + "1850640": "Helcystogramma lamprostoma", + "1850669": "Theisoa", + "1850673": "Theisoa constrictella", + "1850689": "Stereomita", + "1850690": "Stereomita andropogonis", + "1850721": "Friseria", + "1850722": "Friseria cockerelli", + "1850729": "Friseria acaciella", + "1850762": "Macrenches", + "1850764": "Macrenches clerica", + "1850769": "Fascista", + "1850771": "Fascista cercerisella", + "1850773": "Fascista bimaculella", + "1850774": "Fascista quinella", + "1850777": "Platyedra", + "1850781": "Platyedra subcinerea", + "1850790": "Mesophleps", + "1850798": "Mesophleps adustipennis", + "1850865": "Chionodes", + "1850868": "Chionodes discoocellella", + "1850884": "Chionodes dentella", + "1850908": "Chionodes mediofuscella", + "1850922": "Chionodes mariona", + "1850923": "Chionodes thoraceochrella", + "1850962": "Chionodes fondella", + "1850971": "Chionodes viduella", + "1851000": "Chionodes continuella", + "1851002": "Chionodes pereyra", + "1851010": "Chionodes electella", + "1851011": "Chionodes lugubrella", + "1851038": "Chaliniastis", + "1851039": "Chaliniastis astrapaea", + "1851049": "Aristotelia", + "1851201": "Neofriseria", + "1851203": "Neofriseria peliella", + "1851212": "Aroga", + "1851213": "Aroga compositella", + "1851220": "Aroga velocella", + "1851237": "Aroga paraplutella", + "1851243": "Aroga morenella", + "1851293": "Arogalea", + "1851300": "Arogalea cristifasciella", + "1851305": "Epiphthora", + "1851334": "Chrysoesthia", + "1851337": "Chrysoesthia sexguttella", + "1851347": "Chrysoesthia drurella", + "1851406": "Coleotechnites", + "1851453": "Coleotechnites florae", + "1851462": "Coleotechnites atrupictella", + "1851496": "Hypatima", + "1851543": "Hypatima spathota", + "1851555": "Hypatima rhomboidella", + "1851662": "Gnorimoschema", + "1851670": "Gnorimoschema baccharisella", + "1851714": "Gnorimoschema gallaesolidaginis", + "1851750": "Gnorimoschema saphirinella", + "1851754": "Athrips", + "1851826": "Polyhymno", + "1851828": "Polyhymno acaciella", + "1851845": "Polyhymno luteostrigella", + "1852064": "Altenia", + "1852133": "Mirificarma", + "1852150": "Mirificarma mulinella", + "1852159": "Mirificarma interrupta", + "1852165": "Mirificarma eburnella", + "1852176": "Acompsia", + "1852177": "Acompsia cinerella", + "1852212": "Thiotricha", + "1852292": "Thiotricha atractodes", + "1852311": "Thiotricha subocellea", + "1852315": "Strobisia", + "1852320": "Strobisia proserpinella", + "1852327": "Coconympha", + "1852379": "Neodactylota", + "1852382": "Neodactylota liguritrix", + "1852416": "Stenolechia", + "1852430": "Stenolechia gemmella", + "1852499": "Walshia", + "1852745": "Blastobasis", + "1852751": "Blastobasis phycidella", + "1852787": "Blastobasis lacticolella", + "1852831": "Blastobasis adustella", + "1852832": "Blastobasis tarda", + "1852859": "Blastobasis scotia", + "1852897": "Holcocerina", + "1852901": "Holcocerina immaculella", + "1852917": "Batrachedra", + "1852956": "Batrachedra praeangusta", + "1852978": "Batrachedra pinicolella", + "1853060": "Blastodacna", + "1853064": "Blastodacna atra", + "1853074": "Chrysoclista", + "1853079": "Chrysoclista flavicaput", + "1853161": "Microcolona", + "1853190": "Microcolona limodes", + "1853220": "Azaleodes", + "1853222": "Azaleodes micronipha", + "1853239": "Arrhenophanes", + "1853242": "Arrhenophanes perspicilla", + "1853306": "Thyridopteryx", + "1853312": "Thyridopteryx ephemeraeformis", + "1853431": "Pachythelia", + "1853516": "Metura", + "1853563": "Conoeca", + "1853578": "Conoeca guildingi", + "1853583": "Sterrhopterix", + "1853587": "Sterrhopterix fusca", + "1853643": "Lomera", + "1853721": "Lypusa", + "1853723": "Lypusa maurella", + "1853850": "Ardiosteres", + "1853855": "Ardiosteres moretonella", + "1853873": "Narycia", + "1854016": "Hyalarcta", + "1854019": "Hyalarcta huebneri", + "1854021": "Hyalarcta nigrescens", + "1854023": "Lepidoscia", + "1854028": "Lepidoscia lainodes", + "1854108": "Cryptothelea", + "1854143": "Cryptothelea gloverii", + "1854160": "Psyche", + "1854202": "Psyche casta", + "1854237": "Bankesia conspurcatella", + "1854245": "Cebysa", + "1854249": "Cebysa leucotelus", + "1854255": "Penestoglossa", + "1854259": "Penestoglossa dardoinella", + "1854280": "Luffia", + "1854287": "Luffia ferchaultella", + "1854326": "Epichnopterix", + "1854347": "Epichnopterix plumella", + "1854387": "Eumeta", + "1854459": "Canephora", + "1854565": "Clania", + "1854610": "Placodoma", + "1854615": "Placodoma ragonoti", + "1854789": "Proutia", + "1854792": "Proutia betulina", + "1854815": "Bijugis", + "1854824": "Bijugis bombycella", + "1854845": "Taleporia", + "1854849": "Taleporia tubulosa", + "1854905": "Liothula", + "1854906": "Liothula omnivora", + "1854910": "Amydria", + "1854920": "Amydria effrentella", + "1854934": "Acrolophus", + "1855231": "Deuterotinea", + "1855235": "Deuterotinea paradoxella", + "1855241": "Deuterotinea casanella", + "1855355": "Xylesthia", + "1855358": "Xylesthia pruniramiella", + "1855383": "Oinophila", + "1855394": "Perissomastix", + "1855452": "Perissomastix agenjoi", + "1855624": "Coryptilum", + "1855630": "Coryptilum rutilella", + "1855745": "Machaeropteris", + "1855747": "Machaeropteris petalacma", + "1855776": "Anomalotinea", + "1855799": "Anomalotinea liguriella", + "1855800": "Moerarchis", + "1855804": "Moerarchis inconcisella", + "1855807": "Moerarchis australasiella", + "1855813": "Moerarchis clathrata", + "1855955": "Thisizima", + "1856000": "Niditinea", + "1856005": "Niditinea fuscella", + "1856086": "Myrmecozela", + "1856105": "Myrmecozela ataxella", + "1856274": "Lindera", + "1856286": "Euplocamus", + "1856289": "Euplocamus anthracinalis", + "1856344": "Parochmastis", + "1856348": "Parochmastis hilderi", + "1856367": "Isocorypha", + "1856368": "Isocorypha mediostriatella", + "1856373": "Sagephora", + "1856374": "Sagephora phortegella", + "1856382": "Montescardia", + "1856384": "Montescardia tessulatellus", + "1856393": "Hybroma", + "1856394": "Hybroma servulella", + "1856417": "Infurcitinea", + "1856503": "Infurcitinea atrifasciella", + "1856514": "Eschatotypa", + "1856516": "Eschatotypa derogatella", + "1856554": "Homostinea", + "1856555": "Homostinea curviliniella", + "1856563": "Adela", + "1856580": "Dyotopasta", + "1856581": "Dyotopasta yumaella", + "1856586": "Neurothaumasia", + "1856595": "Neurothaumasia ankerella", + "1856615": "Archinemapogon", + "1856620": "Archinemapogon yildizae", + "1856631": "Alucita", + "1856650": "Nemapogon", + "1856658": "Nemapogon nigralbella", + "1856663": "Nemapogon nevadella", + "1856668": "Nemapogon cloacella", + "1856686": "Nemapogon variatella", + "1856691": "Nemapogon koenigi", + "1856701": "Nemapogon granella", + "1856720": "Nemapogon multistriatella", + "1856730": "Nemapogon clematella", + "1856766": "Triaxomera", + "1856768": "Triaxomera fulvimitrella", + "1856772": "Triaxomera parasitella", + "1856845": "Morophaga", + "1856867": "Morophaga choragella", + "1856880": "Dryadaula", + "1856891": "Dryadaula terpsichorella", + "1856893": "Dryadaula pactolia", + "1856949": "Tinissa", + "1856971": "Tinissa indica", + "1857014": "Opogona", + "1857020": "Opogona stereodyta", + "1857033": "Opogona stenocraspeda", + "1857068": "Opogona sacchari", + "1857097": "Opogona protodoxa", + "1857143": "Opogona omoscopa", + "1857180": "Opogona comptella", + "1857207": "Crypsitricha", + "1857213": "Crypsitricha mesotypa", + "1857231": "Erechthias", + "1857233": "Erechthias capnitis", + "1857241": "Erechthias chionodira", + "1857258": "Erechthias simulans", + "1857267": "Erechthias atririvis", + "1857295": "Erechthias stilbella", + "1857315": "Erechthias diaphora", + "1857380": "Erechthias zebrina", + "1857385": "Erechthias fulguritella", + "1857410": "Erechthias terminella", + "1857569": "Trichophaga", + "1857577": "Trichophaga tapetzella", + "1857581": "Trichophaga bipartitella", + "1857624": "Tineola", + "1857626": "Tineola bisselliella", + "1857689": "Diachorisia", + "1857690": "Diachorisia velatella", + "1857773": "Nemaxera", + "1857782": "Reisserita", + "1857785": "Reisserita chrysopterella", + "1857808": "Scardiella", + "1857809": "Scardiella approximatella", + "1857825": "Monopis", + "1857828": "Monopis monachella", + "1857829": "Monopis crocicapitella", + "1857840": "Monopis meliorella", + "1857856": "Monopis weaverella", + "1857863": "Monopis laevigella", + "1857878": "Monopis obviella", + "1857882": "Monopis icterogastra", + "1857900": "Monopis argillacea", + "1857918": "Monopis dorsistrigella", + "1857924": "Monopis spilotella", + "1857935": "Monopis ethelella", + "1857938": "Monopis longella", + "1857945": "Monopis marginistrigella", + "1857948": "Monopis chrysogramma", + "1857968": "Scardia", + "1857973": "Scardia anatomella", + "1857978": "Scardia boletella", + "1858055": "Tinea", + "1858074": "Tinea semifulvella", + "1858100": "Tinea pallescentella", + "1858113": "Tinea trinotella", + "1858163": "Tinea pellionella", + "1858281": "Phereoeca", + "1858283": "Phereoeca uterella", + "1858294": "Mea", + "1858313": "Ateliotum", + "1858321": "Ateliotum hungaricellum", + "1858396": "Edosa", + "1858404": "Edosa xystidophora", + "1858411": "Edosa fraudulens", + "1858488": "Edosa purella", + "1858522": "Lysiphragma", + "1858523": "Lysiphragma epixyla", + "1858526": "Lysiphragma howesii", + "1858529": "Stenoptinea", + "1858531": "Stenoptinea cyaneimarmorella", + "1858556": "Pyloetis", + "1858557": "Pyloetis mimosae", + "1858614": "Anstenoptilia", + "1858615": "Anstenoptilia marmarodactyla", + "1858636": "Cnaemidophorus", + "1858637": "Cnaemidophorus rhododactyla", + "1858640": "Pselnophorus", + "1858658": "Dejongia", + "1858659": "Dejongia californicus", + "1858660": "Dejongia lobidactylus", + "1858672": "Lantanophaga", + "1858674": "Lantanophaga pusillidactylus", + "1858684": "Adaina", + "1858698": "Adaina microdactyla", + "1858706": "Adaina ambrosiae", + "1858716": "Hexadactilia", + "1858718": "Hexadactilia civilis", + "1858722": "Stenoptilia", + "1858762": "Stenoptilia zophodactylus", + "1858775": "Stenoptilia pterodactyla", + "1858778": "Stenoptilia bipunctidactyla", + "1858866": "Oxyptilus", + "1858873": "Oxyptilus pilosellae", + "1858921": "Megalorhipida", + "1858930": "Megalorhipida leucodactylus", + "1858971": "Cosmoclostis", + "1858973": "Cosmoclostis aglaodesma", + "1859036": "Emmelina", + "1859046": "Emmelina monodactyla", + "1859059": "Stangeia", + "1859061": "Stangeia xerodes", + "1859070": "Singularia", + "1859082": "Platyptilia", + "1859100": "Platyptilia calodactyla", + "1859161": "Platyptilia carduidactylus", + "1859177": "Platyptilia gonodactyla", + "1859284": "Amblyptilia", + "1859285": "Amblyptilia acanthadactyla", + "1859287": "Amblyptilia pica", + "1859305": "Amblyptilia punctidactyla", + "1859311": "Lioptilodes", + "1859451": "Diacrotricha", + "1859453": "Diacrotricha fasciola", + "1859454": "Hellinsia", + "1859471": "Hellinsia didactylites", + "1859480": "Hellinsia osteodactylus", + "1859488": "Hellinsia tephradactyla", + "1859503": "Marasmarcha", + "1859534": "Marasmarcha lunaedactyla", + "1859540": "Nippoptilia", + "1859547": "Exelastis", + "1859925": "Sphenarches", + "1859929": "Sphenarches ontario", + "1859932": "Sphenarches anisodactylus", + "1859936": "Oidaematophorus", + "1859952": "Oidaematophorus lithodactyla", + "1860010": "Stenoptilodes", + "1860026": "Stenoptilodes taprobanes", + "1860060": "Crombrugghia", + "1860063": "Crombrugghia distans", + "1860076": "Crombrugghia tristis", + "1860106": "Wockia", + "1860108": "Wockia asperipunctella", + "1860109": "Urodus", + "1860118": "Urodus parvula", + "1860181": "Brenthia", + "1860184": "Brenthia pavonacella", + "1860256": "Saptha", + "1860259": "Saptha exanthista", + "1860260": "Saptha libanota", + "1860261": "Saptha beryllitis", + "1860274": "Saptha divitiosa", + "1860403": "Prochoreutis", + "1860408": "Prochoreutis myllerana", + "1860411": "Tortyra", + "1860443": "Tortyra slossonia", + "1860613": "Lampronia", + "1860621": "Lampronia praelatella", + "1860628": "Lampronia oehlmanniella", + "1860657": "Incurvaria", + "1860659": "Incurvaria rupella", + "1860664": "Incurvaria corticella", + "1860668": "Incurvaria flavimitrella", + "1860671": "Incurvaria koerneriella", + "1860688": "Incurvaria pectinea", + "1860709": "Incurvaria luzella", + "1860711": "Incurvaria capitella", + "1860720": "Phylloporia", + "1860732": "Paraclemensia", + "1860736": "Paraclemensia acerifoliella", + "1860765": "Nemophora fasciella", + "1860768": "Nemophora degeerella", + "1860849": "Nemophora laurella", + "1860852": "Nemophora cupriacella", + "1860857": "Nemophora raddaella", + "1860974": "Adela caeruleella", + "1860979": "Adela croesella", + "1860983": "Adela cuprella", + "1860987": "Adela reaumurella", + "1860989": "Adela ridingsella", + "1860993": "Adela flammeusella", + "1860994": "Adela orientella", + "1860996": "Adela trigrapha", + "1861011": "Adela australis", + "1861030": "Adela septentrionella", + "1861031": "Adela violella", + "1861151": "Nematopogon", + "1861387": "Endromis", + "1861395": "Endromis versicolora", + "1861408": "Phryxus", + "1861428": "Basiothia", + "1861433": "Basiothia medea", + "1861448": "Psilogramma", + "1861451": "Psilogramma discistriga", + "1861456": "Psilogramma increta", + "1861457": "Psilogramma menephron", + "1861458": "Psilogramma casuarinae", + "1861476": "Unzela", + "1861479": "Unzela japix", + "1861483": "Acherontia", + "1861488": "Acherontia lachesis", + "1861494": "Acherontia styx", + "1861510": "Acherontia atropos", + "1861521": "Odontosida", + "1861522": "Odontosida pusillus", + "1861543": "Coelonia", + "1861544": "Coelonia fulvinotata", + "1861552": "Perigonia", + "1861559": "Perigonia lusca", + "1861578": "Rufoclanis", + "1861584": "Rufoclanis numosae", + "1861592": "Rufoclanis rosea", + "1861601": "Dolba", + "1861604": "Dolba hyloeus", + "1861607": "Agrius", + "1861644": "Agrius convolvuli", + "1861659": "Marumba", + "1861663": "Marumba saishiuana", + "1861665": "Marumba sperchius", + "1861673": "Marumba quercus", + "1861697": "Marumba echephron", + "1861705": "Marumba gaschkewitschii", + "1861714": "Marumba cristata", + "1861721": "Marumba dyras", + "1861757": "Sphecodina", + "1861759": "Sphecodina abbottii", + "1861768": "Cocytius", + "1861773": "Cocytius duponchel", + "1861783": "Cocytius lucifer", + "1861784": "Cocytius antaeus", + "1861796": "Hemaris", + "1861797": "Hemaris fuciformis", + "1861823": "Hemaris thetis", + "1861834": "Hemaris gracilis", + "1861836": "Hemaris diffinis", + "1861842": "Hemaris croatica", + "1861851": "Hemaris thysbe", + "1861862": "Hemaris tityus", + "1861878": "Ceratomia", + "1861887": "Ceratomia undulosa", + "1861892": "Ceratomia catalpae", + "1861893": "Ceratomia hageni", + "1861897": "Langia", + "1861930": "Acosmeryx", + "1861933": "Acosmeryx shervillii", + "1861936": "Acosmeryx sericeus", + "1861937": "Acosmeryx pseudonaga", + "1861938": "Acosmeryx castanea", + "1861949": "Acosmeryx naga", + "1861951": "Acosmeryx anceus", + "1861953": "Acosmeryx cinnamomea", + "1861958": "Acosmeryx miskini", + "1861962": "Euryglottis", + "1861967": "Euryglottis aper", + "1861971": "Daphnusa", + "1861975": "Daphnusa ocellaris", + "1861997": "Meganoton", + "1862008": "Meganoton nyctiphanes", + "1862020": "Gnathothlibus", + "1862026": "Gnathothlibus eras", + "1862031": "Callionima", + "1862033": "Callionima nomius", + "1862044": "Callionima falcifera", + "1862046": "Callionima grisescens", + "1862047": "Callionima inuus", + "1862049": "Callionima parce", + "1862058": "Dolbina", + "1862061": "Dolbina inexacta", + "1862066": "Dolbina formosana", + "1862072": "Dolbina tancrei", + "1862076": "Xylophanes", + "1862078": "Xylophanes anubus", + "1862083": "Xylophanes crotonis", + "1862087": "Xylophanes ceratomioides", + "1862088": "Xylophanes porcus", + "1862091": "Xylophanes zurcheri", + "1862094": "Xylophanes titana", + "1862096": "Xylophanes loelia", + "1862123": "Xylophanes chiron", + "1862129": "Xylophanes falco", + "1862139": "Xylophanes belti", + "1862163": "Xylophanes thyelia", + "1862181": "Xylophanes pluto", + "1862198": "Xylophanes tersa", + "1862207": "Xylophanes tyndarus", + "1862225": "Xylophanes pyrrhus", + "1862247": "Clanis", + "1862280": "Oryba", + "1862288": "Hippotion", + "1862293": "Hippotion celerio", + "1862311": "Hippotion eson", + "1862331": "Hippotion scrofa", + "1862363": "Hippotion rosetta", + "1862370": "Hippotion velox", + "1862391": "Daphnis", + "1862394": "Daphnis hypothous", + "1862401": "Daphnis nerii", + "1862403": "Daphnis placida", + "1862414": "Daphnis dohertyi", + "1862420": "Theretra", + "1862430": "Theretra clotho", + "1862433": "Theretra capensis", + "1862434": "Theretra tryoni", + "1862441": "Theretra margarita", + "1862449": "Theretra oldenlandiae", + "1862454": "Theretra pallicosta", + "1862455": "Theretra queenslandi", + "1862468": "Theretra boisduvalii", + "1862475": "Theretra nessus", + "1862481": "Theretra lucasi", + "1862516": "Theretra silhetensis", + "1862517": "Theretra alecto", + "1862521": "Theretra celata", + "1862526": "Theretra latreillii", + "1862542": "Protambulyx", + "1862547": "Protambulyx strigilis", + "1862551": "Protambulyx eurycles", + "1862560": "Amplypterus", + "1862568": "Smerinthus", + "1862569": "Smerinthus jamaicensis", + "1862572": "Smerinthus caecus", + "1862578": "Smerinthus ocellatus", + "1862580": "Smerinthus ocellata", + "1862595": "Smerinthus saliceti", + "1862624": "Smerinthus cerisyi", + "1862655": "Amphimoea", + "1862658": "Amphimoea walkeri", + "1862681": "Hyles", + "1862692": "Hyles tithymali", + "1862701": "Hyles vespertilio", + "1862719": "Hyles euphorbiae", + "1862757": "Hyles livornicoides", + "1862765": "Hyles livornica", + "1862774": "Hyles hippophaes", + "1862805": "Hyles annei", + "1862837": "Hyles gallii", + "1862841": "Hyles lineata", + "1862874": "Hyles euphorbiarum", + "1862894": "Hyles dahlii", + "1862914": "Lapara", + "1862916": "Lapara coniferarum", + "1862917": "Lapara bombycoides", + "1862922": "Cautethia", + "1862923": "Cautethia spuria", + "1862928": "Cautethia grotei", + "1862988": "Oligographa", + "1862989": "Oligographa juniperi", + "1863017": "Pachysphinx", + "1863021": "Pachysphinx occidentalis", + "1863025": "Pachysphinx modesta", + "1863031": "Cephonodes", + "1863034": "Cephonodes hylas", + "1863051": "Cephonodes kingii", + "1863074": "Darapsa", + "1863075": "Darapsa versicolor", + "1863080": "Darapsa choerilus", + "1863088": "Darapsa myron", + "1863091": "Amorpha", + "1863101": "Aleuron", + "1863109": "Aleuron chloroptera", + "1863132": "Nyceryx", + "1863143": "Nyceryx hyposticta", + "1863151": "Nyceryx riscus", + "1863163": "Isognathus", + "1863281": "Euchloron", + "1863282": "Euchloron megaera", + "1863292": "Mimas", + "1863349": "Pentateucha", + "1863351": "Angonyx", + "1863354": "Angonyx testacea", + "1863363": "Pseudosphinx", + "1863366": "Pseudosphinx tetrio", + "1863382": "Coequosa", + "1863384": "Coequosa triangularis", + "1863385": "Enpinanga", + "1863388": "Enpinanga borneensis", + "1863394": "Enpinanga assamensis", + "1863395": "Paonias", + "1863405": "Paonias astylus", + "1863407": "Paonias myops", + "1863411": "Neococytius", + "1863412": "Neococytius cluentius", + "1863413": "Madoryx", + "1863416": "Madoryx oiclus", + "1863426": "Madoryx plutonius", + "1863457": "Cechenena", + "1863467": "Cechenena helops", + "1863486": "Temnora", + "1863544": "Temnora pylas", + "1863583": "Paratrea", + "1863584": "Paratrea plebeja", + "1863638": "Lophostethus", + "1863640": "Lophostethus dumolinii", + "1863644": "Elibia", + "1863646": "Elibia dolichus", + "1863647": "Laothoe", + "1863693": "Amphion", + "1863697": "Hemeroplanes", + "1863699": "Hemeroplanes triptolemus", + "1863701": "Hemeroplanes ornatus", + "1863702": "Pachylioides", + "1863706": "Pachylioides resumens", + "1863713": "Adhemarius", + "1863714": "Adhemarius gannascus", + "1863724": "Adhemarius palmeri", + "1863732": "Adhemarius ypsilon", + "1863734": "Adhemarius dariensis", + "1863735": "Adhemarius sexoculata", + "1863742": "Adhemarius daphne", + "1863750": "Adhemarius eurysthenes", + "1863752": "Dahira", + "1863755": "Eupyrrhoglossum", + "1863757": "Eupyrrhoglossum sagra", + "1863825": "Deidamia", + "1863827": "Ampelophaga", + "1863829": "Ampelophaga rubiginosa", + "1863846": "Phyllosphingia", + "1863848": "Phyllosphingia dissimilis", + "1863852": "Pachylia", + "1863856": "Pachylia ficus", + "1863858": "Pachylia darceta", + "1863864": "Pachylia syces", + "1863877": "Eupanacra", + "1863880": "Eupanacra splendens", + "1863907": "Eupanacra regularis", + "1863909": "Eupanacra busiris", + "1863910": "Eupanacra mydon", + "1863924": "Eupanacra variolosa", + "1863936": "Batocnema", + "1863942": "Pergesa", + "1863944": "Pergesa acteus", + "1863953": "Tetrachroa", + "1863955": "Tetrachroa edwardsi", + "1863956": "Acosmerycoides", + "1863978": "Manduca sexta", + "1863982": "Manduca brontes", + "1864004": "Manduca florestan", + "1864008": "Manduca quinquemaculatus", + "1864021": "Manduca rustica", + "1864046": "Manduca occulta", + "1864058": "Manduca albiplaga", + "1864068": "Manduca hannibal", + "1864070": "Manduca muscosa", + "1864084": "Manduca diffissa", + "1864090": "Manduca jasminearum", + "1864098": "Manduca lefeburii", + "1864103": "Manduca paphus", + "1864106": "Manduca schausi", + "1864124": "Parum", + "1864126": "Parum colligata", + "1864132": "Megacorma", + "1864135": "Megacorma obliqua", + "1864141": "Cizara", + "1864153": "Proserpinus", + "1864156": "Proserpinus clarkiae", + "1864161": "Proserpinus proserpina", + "1864164": "Proserpinus terlooii", + "1864165": "Proserpinus flavofasciata", + "1864203": "Isoparce", + "1864204": "Isoparce cupressi", + "1864258": "Nephele", + "1864315": "Erinnyis", + "1864316": "Erinnyis ello", + "1864320": "Erinnyis alope", + "1864321": "Erinnyis lassauxi", + "1864328": "Erinnyis yucatana", + "1864329": "Erinnyis crameri", + "1864352": "Erinnyis obscura", + "1864355": "Deilephila", + "1864358": "Deilephila porcellus", + "1864377": "Deilephila elpenor", + "1864404": "Sphinx", + "1864537": "Enyo", + "1864562": "Pseudoclanis", + "1864576": "Pseudoclanis postica", + "1864584": "Macroglossum", + "1864652": "Macroglossum stellatarum", + "1864760": "Aellopos", + "1864782": "Callambulyx", + "1864793": "Callambulyx tatarinovii", + "1864796": "Callambulyx rubricosa", + "1864813": "Coloradia", + "1864888": "Coscinocera", + "1864897": "Coscinocera hercules", + "1864901": "Syssphinx", + "1864905": "Syssphinx molina", + "1865097": "Eacles", + "1865102": "Eacles oslari", + "1865107": "Eacles imperialis", + "1865108": "Eacles ormondei", + "1865120": "Eacles ducalis", + "1865132": "Eacles penelope", + "1865294": "Hemileuca", + "1865295": "Hemileuca lucina", + "1865299": "Hemileuca juno", + "1865313": "Hemileuca maia", + "1865319": "Hemileuca grotei", + "1865328": "Hemileuca nutalli", + "1865333": "Hemileuca electra", + "1865341": "Hemileuca eglanterina", + "1865345": "Hemileuca hera", + "1865347": "Hemileuca oliviae", + "1865348": "Hemileuca nevadensis", + "1865353": "Hemileuca tricolor", + "1865361": "Graellsia", + "1865411": "Rothschildia", + "1865543": "Citheronia", + "1865547": "Citheronia hamifera", + "1865555": "Citheronia regalis", + "1865557": "Citheronia phoronea", + "1865571": "Citheronia sepulcralis", + "1865572": "Citheronia bellavista", + "1865578": "Citheronia laocoon", + "1865590": "Citheronia splendens", + "1865591": "Archaeoattacus", + "1865593": "Archaeoattacus malayanus", + "1865647": "Actias", + "1865650": "Actias neidhoeferi", + "1865659": "Actias aliena", + "1865660": "Actias selene", + "1865666": "Actias ningpoana", + "1865668": "Actias luna", + "1865671": "Actias artemis", + "1865704": "Hyperchiria", + "1865709": "Hyperchiria nausica", + "1865711": "Hyperchiria incisa", + "1865750": "Adeloneivaia", + "1865764": "Adeloneivaia subangulata", + "1865826": "Rhescyntis", + "1865827": "Rhescyntis pseudomartii", + "1865837": "Rhescyntis hippodamia", + "1865838": "Hyalophora", + "1865839": "Hyalophora cecropia", + "1865842": "Hyalophora gloveri", + "1865853": "Hyalophora euryalus", + "1865856": "Hyalophora columbia", + "1865859": "Dryocampa", + "1865862": "Dryocampa rubicunda", + "1865866": "Procitheronia", + "1865869": "Procitheronia principalis", + "1865923": "Cricula", + "1865930": "Cricula trifenestrata", + "1865957": "Automeris", + "1865963": "Automeris hamata", + "1866003": "Automeris belti", + "1866006": "Automeris melanops", + "1866085": "Automeris io", + "1866100": "Automeris zugana", + "1866105": "Automeris jucunda", + "1866123": "Automeris zephyria", + "1866162": "Automeris illustris", + "1866164": "Automeris naranja", + "1866201": "Automeris postalbida", + "1866214": "Automeris cecrops", + "1866220": "Automeris liberia", + "1866221": "Loepa", + "1866237": "Loepa formosensis", + "1866248": "Gonimbrasia", + "1866249": "Gonimbrasia zambesina", + "1866252": "Gonimbrasia tyrrhea", + "1866262": "Gonimbrasia belina", + "1866293": "Arsenura", + "1866311": "Arsenura armida", + "1866330": "Arsenura polyodonta", + "1866333": "Callosamia", + "1866336": "Callosamia angulifera", + "1866338": "Callosamia securifera", + "1866341": "Callosamia promethea", + "1866345": "Samia", + "1866356": "Samia cynthia", + "1866416": "Usta", + "1866421": "Usta terpsichore", + "1866475": "Antheraea", + "1866491": "Antheraea formosana", + "1866496": "Antheraea godmani", + "1866530": "Antheraea assamensis", + "1866549": "Antheraea superba", + "1866550": "Antheraea oculea", + "1866556": "Antheraea pernyi", + "1866568": "Antheraea yamamai", + "1866570": "Antheraea polyphemus", + "1866573": "Antheraea paphia", + "1866597": "Eupackardia", + "1866601": "Eupackardia calleta", + "1866812": "Leucanella", + "1866838": "Leucanella viridescens", + "1866898": "Dysdaemonia", + "1866902": "Dysdaemonia boreas", + "1866912": "Epiphora", + "1866975": "Pselaphelia", + "1866980": "Pselaphelia flavivitta", + "1866984": "Argema", + "1867009": "Argema mimosae", + "1867014": "Argema mittrei", + "1867018": "Anisota", + "1867021": "Anisota peigleri", + "1867022": "Anisota stigma", + "1867029": "Anisota senatoria", + "1867032": "Anisota pellucida", + "1867037": "Anisota oslari", + "1867046": "Hylesia", + "1867108": "Hylesia nigricans", + "1867171": "Hylesia scortina", + "1867218": "Hylesia metabus", + "1867224": "Hylesia nanus", + "1867229": "Cicia", + "1867231": "Cicia crocata", + "1867268": "Titaea", + "1867280": "Pseudaphelia", + "1867295": "Pseudaphelia apollinaris", + "1867305": "Aurivillius", + "1867312": "Aurivillius fusca", + "1867343": "Aglia", + "1867412": "Adetomeris", + "1867426": "Adetomeris erythrops", + "1867481": "Copaxa", + "1867515": "Copaxa decrescens", + "1867525": "Copaxa lavendera", + "1867535": "Copaxa multifenestrata", + "1867545": "Polythysana", + "1867547": "Polythysana rubrescens", + "1867552": "Polythysana cinerascens", + "1867669": "Urota", + "1867673": "Urota sinope", + "1867674": "Ormiscodes", + "1867709": "Ormiscodes cinnamomea", + "1867722": "Ormiscodes amphinome", + "1867739": "Heniocha", + "1867744": "Heniocha marnois", + "1867749": "Heniocha bioculata", + "1867750": "Heniocha dyops", + "1867751": "Heniocha apollonia", + "1867761": "Copiopteryx", + "1867773": "Copiopteryx semiramis", + "1867780": "Psilopygida", + "1867783": "Opodiphthera", + "1867788": "Opodiphthera astrophela", + "1867810": "Saturnia", + "1867820": "Saturnia pavonia", + "1867928": "Saturnia pyri", + "1867983": "Rhodinia", + "1867991": "Rhodinia verecunda", + "1867993": "Rhodinia fugax", + "1867998": "Gynanisa", + "1868014": "Gynanisa maja", + "1868017": "Syntherata", + "1868025": "Syntherata janetta", + "1868048": "Bunaea", + "1868049": "Bunaea aslauga", + "1868060": "Bunaea alcinoe", + "1868162": "Lemonia", + "1868207": "Triuncina", + "1868211": "Triuncina brunnea", + "1868327": "Colla", + "1868334": "Colla rhodope", + "1868353": "Anticla", + "1868360": "Anticla antica", + "1868393": "Ocinara", + "1868409": "Ocinara albicollis", + "1868427": "Prismosticta", + "1868428": "Prismosticta fenestrata", + "1868470": "Ernolatia moorei", + "1868491": "Trilocha", + "1868497": "Penicillifera", + "1868499": "Penicillifera apicalis", + "1868520": "Andraca", + "1868527": "Andraca olivacea", + "1868532": "Olceclostera", + "1868535": "Olceclostera angelica", + "1868563": "Hygrochroa", + "1868575": "Hygrochroa firmiana", + "1868660": "Bombyx", + "1868834": "Ganisa", + "1868837": "Ganisa formosicola", + "1868875": "Phyllalia", + "1868884": "Phyllalia patens", + "1868887": "Eupterote", + "1868952": "Eupterote undata", + "1869041": "Poloma", + "1869043": "Poloma angulata", + "1869056": "Palirisa", + "1869057": "Palirisa cervina", + "1869176": "Apha", + "1869178": "Apha horishana", + "1869187": "Apha kantonensis", + "1869237": "Striphnopteryx", + "1869238": "Striphnopteryx edulis", + "1869255": "Jana", + "1869278": "Jana tantalus", + "1869286": "Jana eurymas", + "1869358": "Brahmaea", + "1869359": "Brahmaea certhia", + "1869363": "Brahmaea wallichii", + "1869438": "Epermenia", + "1869467": "Epermenia pontificella", + "1869478": "Epermenia chaerophyllellus", + "1869489": "Epermenia illigerella", + "1869504": "Phaulernis", + "1869512": "Phaulernis dentella", + "1869593": "Oxybia", + "1869595": "Oxybia transversella", + "1869643": "Alpheias", + "1869653": "Trachonitis", + "1869656": "Trachonitis cristella", + "1869664": "Dasypyga", + "1869666": "Dasypyga alternosquamella", + "1869690": "Orthaga", + "1869706": "Orthaga olivacea", + "1869707": "Orthaga rubridiscalis", + "1869714": "Orthaga seminivea", + "1869760": "Hypochalcia", + "1869803": "Hypochalcia ahenella", + "1869823": "Tlascala", + "1869825": "Tlascala reductella", + "1869851": "Apomyelois", + "1869852": "Apomyelois bistriatella", + "1869858": "Apomyelois ceratoniae", + "1869974": "Catastia", + "1869976": "Catastia marginea", + "1870004": "Thopeutis", + "1870017": "Thopeutis forbesellus", + "1870028": "Parachma", + "1870037": "Parachma ochracealis", + "1870168": "Anerastia", + "1870202": "Anerastia lotella", + "1870229": "Doloessa", + "1870237": "Doloessa viridis", + "1870242": "Aphomia", + "1870249": "Aphomia zelleri", + "1870250": "Aphomia sociella", + "1870267": "Aphomia terrenella", + "1870302": "Mapeta", + "1870308": "Mapeta xanthomelas", + "1870413": "Meroptera", + "1870415": "Meroptera pravella", + "1870421": "Tallula", + "1870426": "Tallula atrifascialis", + "1870449": "Etiella", + "1870450": "Etiella zinckenella", + "1870452": "Etiella behrii", + "1870459": "Etiella chrysoporella", + "1870504": "Cardamyla", + "1870506": "Cardamyla carinentalis", + "1870509": "Cardamyla didymalis", + "1870605": "Negalasa", + "1870607": "Negalasa fumalis", + "1870648": "Pterothrixidia", + "1870650": "Pterothrixidia rufella", + "1870697": "Patagoniodes", + "1870703": "Patagoniodes farinaria", + "1870714": "Pococera", + "1870721": "Pococera robustella", + "1870727": "Pococera asperatella", + "1870733": "Pococera maritimalis", + "1870751": "Pococera militella", + "1870777": "Pococera expandens", + "1870982": "Achroia", + "1870988": "Achroia grisella", + "1871131": "Alophia", + "1871157": "Salebriopsis", + "1871160": "Salebriopsis albicilla", + "1871167": "Endosimilis", + "1871171": "Endosimilis stilbealis", + "1871172": "Galasa", + "1871175": "Galasa nigrinodis", + "1871206": "Synaphe", + "1871212": "Synaphe moldavica", + "1871217": "Synaphe diffidalis", + "1871252": "Synaphe punctalis", + "1871264": "Synaphe predotalis", + "1871327": "Persicoptera", + "1871333": "Persicoptera aglaopa", + "1871366": "Zamagiria", + "1871379": "Zamagiria australella", + "1871384": "Hypsopygia", + "1871407": "Hypsopygia costalis", + "1871413": "Moodna", + "1871414": "Moodna ostrinella", + "1871419": "Moodna pallidostrinella", + "1871446": "Hypotia", + "1871451": "Hypotia corticalis", + "1871456": "Oreana", + "1871457": "Oreana unicolorella", + "1871504": "Philotis basalis", + "1871505": "Ambesa", + "1871509": "Ambesa laetella", + "1871553": "Atascosa", + "1871560": "Atascosa glareosella", + "1871596": "Chararica", + "1871597": "Chararica hystriculella", + "1871604": "Herculia", + "1871630": "Herculia pelasgalis", + "1871683": "Herculia rubidalis", + "1871695": "Pyla", + "1871698": "Pyla fusca", + "1871753": "Mittonia", + "1871754": "Mittonia hampsoni", + "1871761": "Glyptocera", + "1871763": "Glyptocera consobrinella", + "1871764": "Ematheudes", + "1871783": "Ematheudes punctellus", + "1871825": "Eccopisa", + "1871826": "Eccopisa effractella", + "1871885": "Oneida", + "1871890": "Oneida lunulalis", + "1871922": "Toripalpus", + "1871923": "Toripalpus trabalis", + "1871939": "Basacallis", + "1871940": "Basacallis tarachodes", + "1871986": "Toccolosida", + "1871988": "Toccolosida rubriceps", + "1872079": "Vitessa", + "1872094": "Vitessa suradeva", + "1872162": "Calguia", + "1872169": "Calguia defiguralis", + "1872196": "Acallis", + "1872200": "Acallis alticolalis", + "1872209": "Sosipatra", + "1872210": "Sosipatra rileyella", + "1872254": "Spectrotrota", + "1872255": "Spectrotrota fimbrialis", + "1872315": "Rhodophaea formosa", + "1872346": "Cataclysta", + "1872359": "Cataclysta angulata", + "1872361": "Cataclysta albidentata", + "1872368": "Cataclysta lemnata", + "1872446": "Arta", + "1872452": "Arta olivalis", + "1872456": "Arta statalis", + "1872465": "Eulogia", + "1872466": "Eulogia ochrifrontella", + "1872468": "Anemosa", + "1872470": "Anemosa exanthes", + "1872509": "Tosale", + "1872514": "Tosale oviplagalis", + "1872515": "Tosale aucta", + "1872602": "Bostra", + "1872732": "Ephestiopsis", + "1872735": "Ephestiopsis oenobarella", + "1872811": "Oenogenes", + "1872812": "Oenogenes fugalis", + "1872824": "Ptyomaxia", + "1872827": "Ptyomaxia trigonogramma", + "1872845": "Pyralis", + "1872848": "Pyralis regalis", + "1872850": "Pyralis pictalis", + "1872873": "Pyralis manihotalis", + "1872901": "Pyralis farinalis", + "1872904": "Pyralis lienigialis", + "1873021": "Cryptoblabes", + "1873048": "Cryptoblabes bistriga", + "1873049": "Cryptoblabes hemigypsa", + "1873051": "Cryptoblabes gnidiella", + "1873074": "Plodia", + "1873079": "Plodia interpunctella", + "1873212": "Lamoria", + "1873215": "Lamoria anella", + "1873222": "Lamoria idiolepida", + "1873259": "Cacotherapia", + "1873267": "Cacotherapia flexilinealis", + "1873280": "Heteromicta", + "1873285": "Heteromicta tripartitella", + "1873290": "Heteromicta pachytera", + "1873291": "Heteromicta poeodes", + "1873310": "Laetilia", + "1873319": "Laetilia coccidivora", + "1873335": "Neodavisia", + "1873372": "Callionyma", + "1873373": "Callionyma sarcodes", + "1873374": "Salebriaria", + "1873376": "Salebriaria annulosella", + "1873381": "Salebriaria pumilella", + "1873383": "Salebriaria ademptandella", + "1873384": "Salebriaria engeli", + "1873396": "Incarcha", + "1873398": "Incarcha aporalis", + "1873408": "Nephopterix", + "1873411": "Nephopterix angustella", + "1873417": "Nephopterix ochribasalis", + "1873583": "Tacoma", + "1873585": "Tacoma feriella", + "1873619": "Arescoptera", + "1873620": "Arescoptera idiotypa", + "1873642": "Streptopalpia", + "1873697": "Myelopsis alatella", + "1873750": "Epipaschia", + "1873753": "Epipaschia superatalis", + "1873755": "Asalebria", + "1873763": "Anemosella", + "1873768": "Mampava", + "1873773": "Mampava rhodoneura", + "1873775": "Sciota", + "1873776": "Sciota adelphella", + "1873780": "Sciota hostilis", + "1873783": "Sciota rhenella", + "1873830": "Tirathaba", + "1873843": "Tirathaba rufivena", + "1873878": "Cadra", + "1873890": "Cadra cautella", + "1873980": "Endotricha", + "1874141": "Gauna", + "1874146": "Gauna aegusalis", + "1874152": "Acrobasis", + "1874158": "Acrobasis indigenella", + "1874160": "Acrobasis angusella", + "1874168": "Acrobasis bithynella", + "1874179": "Acrobasis demotella", + "1874192": "Acrobasis repandana", + "1874204": "Acrobasis consociella", + "1874211": "Acrobasis tumidana", + "1874229": "Acrobasis porphyrella", + "1874248": "Acrobasis caryae", + "1874257": "Acrobasis exsulella", + "1874269": "Acrobasis obliqua", + "1874274": "Acrobasis tricolorella", + "1874279": "Acrobasis juglandis", + "1874280": "Acrobasis romanella", + "1874295": "Acrobasis sodalella", + "1874309": "Honora", + "1874317": "Honora mellinella", + "1874374": "Pima", + "1874375": "Pima boisduvaliella", + "1874450": "Macalla", + "1874513": "Macalla glastianalis", + "1874552": "Macalla zelleri", + "1874624": "Ancylosis", + "1874743": "Ancylosis oblitella", + "1874900": "Cabnia", + "1874901": "Cabnia myronella", + "1874935": "Locastra", + "1874937": "Locastra muscosalis", + "1874958": "Phycita", + "1875008": "Phycita roborella", + "1875103": "Oncocera", + "1875120": "Oncocera semirubella", + "1875195": "Bandera", + "1875196": "Bandera binotella", + "1875317": "Euzophera", + "1875319": "Euzophera ostricolorella", + "1875327": "Euzophera pinguis", + "1875376": "Euzophera cinerosella", + "1875407": "Euzophera semifuneralis", + "1875409": "Euzophera lunulella", + "1875429": "Euzophera fuliginosella", + "1875450": "Ortholepis", + "1875451": "Ortholepis pasadamia", + "1875477": "Ephestiodes", + "1875478": "Ephestiodes gilvescentella", + "1875483": "Ephestiodes infimella", + "1875485": "Ephestiodes mignonella", + "1875532": "Stericta", + "1875534": "Stericta carbonalis", + "1875554": "Stericta concisella", + "1875584": "Stericta bryomima", + "1875600": "Vitula", + "1875606": "Vitula broweri", + "1875607": "Vitula edmandsii", + "1875631": "Vitula serratilineella", + "1875633": "Vitula biviella", + "1875650": "Pempelia", + "1875680": "Pempelia malacella", + "1875682": "Pempelia ornatella", + "1875687": "Pempelia turturella", + "1875821": "Nyctegretis", + "1875827": "Nyctegretis lineana", + "1875830": "Nyctegretis triangulella", + "1875840": "Lacalma", + "1875844": "Lacalma albirufalis", + "1875849": "Selagia", + "1875865": "Selagia argyrella", + "1875869": "Selagia spadicella", + "1875885": "Varneria postremella", + "1875890": "Phycitodes", + "1875914": "Phycitodes mucidellus", + "1875918": "Phycitodes binaevella", + "1875940": "Phycitodes albatella", + "1875952": "Phycitodes maritima", + "1875958": "Phycitodes lacteella", + "1876062": "Hypsotropa", + "1876063": "Hypsotropa unipunctella", + "1876167": "Arctioblepsis", + "1876168": "Arctioblepsis rubida", + "1876280": "Myelois", + "1876329": "Myelois circumvoluta", + "1876357": "Myelois tetricella", + "1876391": "Zophodia", + "1876409": "Zophodia grossulariella", + "1876474": "Scenedra", + "1876479": "Scenedra decoratalis", + "1876511": "Eurhodope", + "1876512": "Eurhodope rosella", + "1876536": "Galleria", + "1876542": "Galleria mellonella", + "1876547": "Omphalocera", + "1876548": "Omphalocera munroei", + "1876549": "Omphalocera cariosa", + "1876588": "Orybina", + "1876592": "Orybina flaviplaga", + "1876613": "Elegia", + "1876623": "Elegia similella", + "1876663": "Clydonopteron", + "1876665": "Clydonopteron sacculana", + "1876846": "Assara", + "1876854": "Assara terebrella", + "1876876": "Assara holophragma", + "1876889": "Conobathra", + "1876920": "Hypargyria", + "1876922": "Hypargyria metalliferella", + "1876954": "Meyriccia", + "1876955": "Meyriccia latro", + "1876978": "Caudellia", + "1876987": "Caudellia nigrella", + "1876990": "Macrorrhinia", + "1877001": "Atheloca", + "1877002": "Atheloca subrufella", + "1877035": "Pseudarenipses insularum", + "1877036": "Glyptoteles", + "1877038": "Glyptoteles leucacrinella", + "1877266": "Cacozelia", + "1877274": "Elasmopalpus", + "1877282": "Elasmopalpus lignosella", + "1877292": "Dioryctria", + "1877310": "Dioryctria sylvestrella", + "1877321": "Dioryctria disclusa", + "1877338": "Dioryctria auranticella", + "1877341": "Dioryctria simplicella", + "1877345": "Dioryctria mendacella", + "1877353": "Dioryctria zimmermani", + "1877364": "Dioryctria clarioralis", + "1877365": "Dioryctria reniculelloides", + "1877368": "Dioryctria abietella", + "1877372": "Dioryctria amatella", + "1877401": "Addyme", + "1877406": "Addyme ferrorubella", + "1877430": "Salobrena", + "1877443": "Salobrena sincera", + "1877452": "Morosaphycita", + "1877453": "Morosaphycita oculiferella", + "1877472": "Loryma", + "1877491": "Satole", + "1877492": "Satole ligniperdalis", + "1877495": "Teliphasa", + "1877498": "Teliphasa nubilosa", + "1877536": "Tampa", + "1877537": "Tampa dimediatella", + "1877619": "Adelphia", + "1877632": "Lepidomys", + "1877643": "Lepidomys irrenosa", + "1877650": "Homoeosoma", + "1877771": "Canthelea", + "1877788": "Canthelea oegnusalis", + "1877937": "Aglossa", + "1877940": "Aglossa disciferalis", + "1877941": "Aglossa pinguinalis", + "1877975": "Aglossa costiferalis", + "1877986": "Aglossa brabanti", + "1877988": "Aglossa caprealis", + "1877995": "Aglossa cuprina", + "1878008": "Stemmatophora", + "1878067": "Stemmatophora combustalis", + "1878156": "Condylolomia", + "1878158": "Condylolomia participialis", + "1878171": "Curena", + "1878173": "Curena externalis", + "1878192": "Metallostichodes", + "1878197": "Metallostichodes nigrocyanella", + "1878317": "Psorosa", + "1878350": "Psorosa tergestella", + "1878365": "Peoria", + "1878370": "Peoria approximella", + "1878392": "Peoria tetradella", + "1878404": "Guastica", + "1878406": "Guastica semilutea", + "1878460": "Ephestia", + "1878470": "Ephestia elutella", + "1878471": "Ephestia woodiella", + "1878490": "Ephestia kuehniella", + "1878500": "Ephestia welseriella", + "1878522": "Epicrocis", + "1878578": "Gymnancyla", + "1878586": "Gymnancyla canella", + "1878610": "Eoophyla", + "1878626": "Eoophyla conjunctalis", + "1878653": "Obtusipalpis", + "1878656": "Obtusipalpis pardalis", + "1878661": "Ategumia", + "1878678": "Hahncappsia", + "1878688": "Hahncappsia mancalis", + "1878705": "Hahncappsia pergilvalis", + "1878743": "Aetholix", + "1878744": "Aetholix flavibasalis", + "1878750": "Saucrobotys", + "1878751": "Saucrobotys futilalis", + "1878753": "Saucrobotys fumoferalis", + "1878757": "Mecyna", + "1878782": "Mecyna flavalis", + "1878789": "Mecyna mustelinalis", + "1878798": "Mecyna lutealis", + "1878804": "Mecyna asinalis", + "1878808": "Anageshna", + "1878810": "Anageshna primordialis", + "1878812": "Archernis", + "1878826": "Archernis callixantha", + "1878835": "Neargyractis", + "1878837": "Neargyractis slossonalis", + "1878838": "Agriphila", + "1878845": "Agriphila cyrenaicellus", + "1878862": "Agriphila tristellus", + "1878879": "Agriphila straminella", + "1878895": "Agriphila inquinatella", + "1878904": "Agriphila tolli", + "1878907": "Agriphila deliella", + "1878937": "Agriphila vulgivagellus", + "1878939": "Agriphila selasella", + "1878951": "Agriphila trabeatellus", + "1878958": "Agriphila ruricolellus", + "1878989": "Cornifrons", + "1879001": "Cornifrons ulceratalis", + "1879048": "Trichaea", + "1879052": "Trichaea pilicornis", + "1879124": "Heterocnephes", + "1879125": "Heterocnephes lymphatalis", + "1879138": "Crypsiptya", + "1879141": "Crypsiptya coclesalis", + "1879158": "Liopasia", + "1879160": "Liopasia ochracealis", + "1879226": "Pleuroptya", + "1879227": "Pleuroptya balteata", + "1879252": "Pleuroptya ruralis", + "1879253": "Pleuroptya silicalis", + "1879271": "Eoparargyractis", + "1879272": "Eoparargyractis irroratalis", + "1879274": "Eoparargyractis plevie", + "1879334": "Crocidolomia", + "1879337": "Crocidolomia subhirsutalis", + "1879339": "Crocidolomia suffusalis", + "1879340": "Crocidolomia pavonana", + "1879347": "Abegesta", + "1879348": "Abegesta remellalis", + "1879355": "Nosophora", + "1879379": "Nosophora semitritalis", + "1879396": "Hellula", + "1879398": "Hellula rogatalis", + "1879405": "Hellula hydralis", + "1879408": "Hellula undalis", + "1879413": "Hellula phidilealis", + "1879422": "Palepicorsia", + "1879427": "Palepicorsia ustrinalis", + "1879428": "Hileithia", + "1879435": "Helvibotys", + "1879443": "Helvibotys helvialis", + "1879451": "Duponchelia", + "1879452": "Duponchelia fovealis", + "1879463": "Hydriris", + "1879465": "Hydriris chalybitis", + "1879471": "Hydriris ornatalis", + "1879487": "Cadarena", + "1879490": "Cadarena pudoraria", + "1879494": "Platytes", + "1879512": "Eudonia", + "1879534": "Eudonia murana", + "1879630": "Eudonia truncicolella", + "1879655": "Eudonia lineola", + "1879691": "Eudonia angustea", + "1879703": "Eudonia sudetica", + "1879731": "Eudonia lacustrata", + "1879735": "Eudonia delunella", + "1879765": "Eudonia mercurella", + "1879809": "Desmia", + "1879915": "Crambus", + "1879939": "Crambus unistriatellus", + "1879970": "Crambus perlella", + "1879975": "Crambus quinquareatus", + "1880011": "Crambus sparsellus", + "1880013": "Crambus bidens", + "1880019": "Crambus watsonellus", + "1880025": "Crambus saltuellus", + "1880040": "Crambus alienellus", + "1880044": "Crambus leachellus", + "1880049": "Crambus satrapellus", + "1880062": "Crambus hamella", + "1880064": "Crambus pascuella", + "1880078": "Crambus laqueatellus", + "1880083": "Crambus agitatellus", + "1880088": "Crambus whitmerellus", + "1880094": "Crambus ericella", + "1880104": "Crambus silvella", + "1880123": "Crambus girardellus", + "1880132": "Crambus praefectellus", + "1880133": "Crambus sperryellus", + "1880138": "Crambus heringiellus", + "1880139": "Crambus pratella", + "1880140": "Crambus lathoniellus", + "1880143": "Crambus uliginosellus", + "1880156": "Crambus albellus", + "1880172": "Omiodes", + "1880275": "Orocrambus corruptus", + "1880286": "Orocrambus angustipennis", + "1880293": "Orocrambus aethonellus", + "1880305": "Orocrambus vittellus", + "1880310": "Orocrambus cyclopicus", + "1880316": "Orocrambus apicellus", + "1880318": "Orocrambus flexuosellus", + "1880321": "Orocrambus vulgaris", + "1880350": "Orocrambus ramosellus", + "1880351": "Syntonarcha", + "1880352": "Syntonarcha vulnerata", + "1880353": "Syntonarcha iriastis", + "1880354": "Epipagis", + "1880379": "Epipagis forsythae", + "1880381": "Epipagis adipaloides", + "1880408": "Epipagis olesialis", + "1880411": "Epipagis fenestralis", + "1880423": "Vaxi", + "1880436": "Gadira", + "1880439": "Gadira acerella", + "1880444": "Paracymoriza", + "1880451": "Paracymoriza vagalis", + "1880464": "Paracymoriza cataclystalis", + "1880465": "Paracymoriza taiwanalis", + "1880501": "Sparagmia", + "1880505": "Sparagmia gonoptera", + "1880506": "Phostria", + "1880537": "Phostria dohrni", + "1880623": "Phostria temira", + "1880703": "Syllepis", + "1880711": "Clupeosoma", + "1880744": "Trithyris", + "1880792": "Titanio", + "1880818": "Titanio tarraconensis", + "1880848": "Nevrina", + "1880852": "Nevrina procopia", + "1880855": "Aethaloessa", + "1880858": "Aethaloessa calidalis", + "1880865": "Aethaloessa floridalis", + "1880878": "Ancylolomia", + "1880907": "Ancylolomia tentaculella", + "1880931": "Ancylolomia palpella", + "1880968": "Ancylolomia japonica", + "1880977": "Hednota", + "1880982": "Hednota pedionoma", + "1880986": "Hednota longipalpella", + "1881018": "Hednota grammellus", + "1881019": "Hednota relatalis", + "1881031": "Hednota bivittella", + "1881041": "Hednota pleniferellus", + "1881078": "Neoleucinodes", + "1881079": "Neoleucinodes elegantalis", + "1881085": "Hymenoptychis", + "1881089": "Hymenoptychis sordida", + "1881092": "Diasemiodes", + "1881094": "Diasemiodes janassialis", + "1881102": "Uresiphita", + "1881111": "Uresiphita reversalis", + "1881121": "Uresiphita quinquigera", + "1881122": "Uresiphita polygonalis", + "1881126": "Uresiphita gilvata", + "1881132": "Uresiphita ornithopteralis", + "1881135": "Diptychophora", + "1881139": "Diptychophora harlequinalis", + "1881145": "Nomophila", + "1881147": "Nomophila africana", + "1881151": "Nomophila noctuella", + "1881157": "Nomophila corticalis", + "1881166": "Nomophila nearctica", + "1881167": "Paliga", + "1881170": "Paliga damastesalis", + "1881178": "Antigastra", + "1881186": "Acentria", + "1881206": "Xanthocrambus", + "1881208": "Xanthocrambus saxonellus", + "1881226": "Scirpophaga", + "1881228": "Scirpophaga imparellus", + "1881293": "Scirpophaga incertulas", + "1881296": "Ulopeza", + "1881303": "Ulopeza conigeralis", + "1881319": "Agrioglypta", + "1881320": "Agrioglypta excelsalis", + "1881329": "Agrioglypta eurytusalis", + "1881336": "Agrioglypta itysalis", + "1881340": "Agrioglypta zelimalis", + "1881357": "Metasia", + "1881362": "Metasia suppandalis", + "1881393": "Metasia cuencalis", + "1881404": "Metasia ophialis", + "1881418": "Metasia ibericalis", + "1881424": "Metasia capnochroa", + "1881484": "Myrmidonistis", + "1881485": "Myrmidonistis hoplora", + "1881495": "Culladia", + "1881504": "Culladia cuneiferellus", + "1881515": "Culladia hastiferalis", + "1881521": "Argyria", + "1881601": "Metaxmeste", + "1881603": "Metaxmeste phrygialis", + "1881628": "Tetrernia", + "1881764": "Gonocausta", + "1881767": "Gonocausta sabinalis", + "1881804": "Azochis", + "1881822": "Azochis rufidiscalis", + "1881825": "Paratalanta", + "1881834": "Paratalanta pandalis", + "1881858": "Microthyris", + "1881870": "Lygropia", + "1881917": "Lygropia fusalis", + "1881955": "Lygropia rivulalis", + "1881964": "Lygropia distorta", + "1882019": "Discothyris", + "1882021": "Discothyris ferruginata", + "1882028": "Loxostege", + "1882089": "Loxostege allectalis", + "1882110": "Loxostege frustalis", + "1882158": "Loxostege turbidalis", + "1882165": "Loxostege aeruginalis", + "1882190": "Loxostege albiceralis", + "1882195": "Loxostege cereralis", + "1882210": "Loxostege sticticalis", + "1882213": "Tipanaea", + "1882215": "Tipanaea patulella", + "1882217": "Loxostegopsis", + "1882218": "Loxostegopsis polle", + "1882239": "Siga", + "1882249": "Omphisa", + "1882253": "Omphisa anastomosalis", + "1882263": "Tatobotys", + "1882266": "Tatobotys biannulalis", + "1882272": "Tatobotys janapalis", + "1882297": "Loxostege philocapna", + "1882309": "Ravanoa", + "1882310": "Ravanoa xiphialis", + "1882314": "Gyros", + "1882316": "Gyros muiri", + "1882354": "Hygraula", + "1882355": "Hygraula nitens", + "1882413": "Scoparia", + "1882437": "Scoparia basistrigalis", + "1882459": "Scoparia ambigualis", + "1882557": "Scoparia pyralella", + "1882729": "Scoparia ancipitella", + "1882752": "Prooedema", + "1882753": "Prooedema inscisalis", + "1882757": "Talanga", + "1882767": "Talanga sexpunctalis", + "1882771": "Talanga sabacusalis", + "1882773": "Talanga tolumnialis", + "1882784": "Oenobotys", + "1882785": "Oenobotys texanalis", + "1882786": "Oenobotys vinotinctalis", + "1882809": "Conchylodes", + "1882812": "Conchylodes ovulalis", + "1882816": "Conchylodes concinnalis", + "1882818": "Conchylodes salamisalis", + "1882819": "Conchylodes diphteralis", + "1882877": "Pygospila", + "1882884": "Pygospila tyres", + "1882900": "Ceratarcha", + "1882901": "Ceratarcha umbrosa", + "1882902": "Diplopseustis", + "1882905": "Diplopseustis perieresalis", + "1882925": "Herpetogramma", + "1882927": "Herpetogramma theseusalis", + "1882930": "Herpetogramma luctuosalis", + "1882941": "Herpetogramma bipunctalis", + "1882958": "Herpetogramma abdominalis", + "1882959": "Herpetogramma pertextalis", + "1882960": "Herpetogramma phaeopteralis", + "1882965": "Herpetogramma licarsisalis", + "1882977": "Herpetogramma aeglealis", + "1882979": "Herpetogramma thestealis", + "1883019": "Sericoplaga", + "1883020": "Sericoplaga externalis", + "1883022": "Margarosticha", + "1883024": "Margarosticha sphenotis", + "1883028": "Margarosticha euprepialis", + "1883035": "Ancylostomia", + "1883038": "Ancylostomia stercorea", + "1883044": "Neomusotima", + "1883045": "Neomusotima fuscolinealis", + "1883064": "Diasemiopsis", + "1883067": "Diasemiopsis ramburialis", + "1883116": "Zebronia", + "1883124": "Zebronia phenice", + "1883132": "Chilo", + "1883161": "Chilo phragmitella", + "1883168": "Chilo luteellus", + "1883364": "Trigonoorda", + "1883373": "Cynaeda", + "1883386": "Cynaeda dentalis", + "1883389": "Niphopyralis", + "1883394": "Niphopyralis chionesis", + "1883417": "Thliptoceras", + "1883458": "Thliptoceras xanthocraspia", + "1883459": "Agathodes", + "1883586": "Glaphyria", + "1883632": "Epascestria", + "1883634": "Epascestria pustulalis", + "1883698": "Dichocrocis", + "1883775": "Dichocrocis erixantha", + "1883828": "Xanthophysa", + "1883829": "Xanthophysa psychicalis", + "1883872": "Hemiscopis", + "1883873": "Hemiscopis sanguinea", + "1883881": "Hemiscopis violacea", + "1883885": "Dysallacta negatalis", + "1883890": "Neodactria", + "1883897": "Neodactria luteolellus", + "1883941": "Prophantis", + "1883943": "Prophantis adusta", + "1883950": "Pachynoa", + "1883951": "Pachynoa thoosalis", + "1883962": "Samea", + "1883968": "Samea multiplicalis", + "1883975": "Samea druchachalis", + "1883990": "Choristostigma", + "1883993": "Choristostigma plumbosignalis", + "1884001": "Choristostigma roseopennalis", + "1884002": "Bocchoris", + "1884051": "Bocchoris inspersalis", + "1884061": "Bocchoris trivitralis", + "1884090": "Nymphula", + "1884194": "Donacaula", + "1884212": "Donacaula mucronella", + "1884213": "Donacaula melinellus", + "1884225": "Meroctena", + "1884228": "Meroctena staintonii", + "1884229": "Meroctena tullalis", + "1884236": "Lipararchis", + "1884240": "Catoptria pyramidellus", + "1884254": "Catoptria staudingeri", + "1884255": "Catoptria pinella", + "1884273": "Catoptria margaritellus", + "1884274": "Catoptria conchella", + "1884280": "Catoptria fulgidella", + "1884312": "Catoptria lythargyrella", + "1884326": "Catoptria oregonicus", + "1884332": "Catoptria permutatellus", + "1884337": "Catoptria latiradiellus", + "1884365": "Catoptria mytilella", + "1884370": "Catoptria verellus", + "1884403": "Catoptria falsella", + "1884425": "Parapoynx", + "1884428": "Parapoynx allionealis", + "1884434": "Parapoynx villidalis", + "1884435": "Parapoynx obscuralis", + "1884437": "Parapoynx fluctuosalis", + "1884439": "Parapoynx badiusalis", + "1884449": "Parapoynx stagnalis", + "1884453": "Parapoynx seminealis", + "1884461": "Parapoynx crisonalis", + "1884464": "Parapoynx maculalis", + "1884465": "Parapoynx stratiotata", + "1884479": "Parapoynx diminutalis", + "1884486": "Glaucocharis", + "1884503": "Glaucocharis auriscriptella", + "1884531": "Glaucocharis dilatella", + "1884539": "Glaucocharis pyrsophanes", + "1884595": "Glaucocharis lepidella", + "1884607": "Glaucocharis elaina", + "1884610": "Glaucocharis leucoxantha", + "1884668": "Erpis", + "1884671": "Erpis macularis", + "1884679": "Lamprophaia", + "1884683": "Pantographa", + "1884685": "Pantographa limata", + "1884687": "Loxomorpha", + "1884699": "Carectocultus", + "1884703": "Carectocultus perstrialis", + "1884771": "Synclera", + "1884774": "Synclera traducalis", + "1884789": "Stegea", + "1884790": "Stegea eripalis", + "1884810": "Cangetta", + "1884816": "Cangetta hartoghialis", + "1884832": "Thysanoidma", + "1884835": "Thysanoidma octalis", + "1884842": "Pagyda", + "1884844": "Pagyda salvalis", + "1884858": "Pagyda auroralis", + "1884877": "Pagyda nebulosa", + "1884886": "Cydalima", + "1884890": "Cydalima laticostalis", + "1884895": "Botyodes", + "1884908": "Botyodes principalis", + "1884909": "Botyodes asialis", + "1884921": "Condylorrhiza", + "1884923": "Condylorrhiza vestigialis", + "1884933": "Deana", + "1884936": "Deana hybreasalis", + "1884939": "Schoenobius", + "1884970": "Schoenobius gigantella", + "1884996": "Dicymolomia", + "1884997": "Dicymolomia julianalis", + "1885001": "Dicymolomia metalliferalis", + "1885008": "Filodes", + "1885012": "Filodes fulvidorsalis", + "1885024": "Filodes costivitralis", + "1885027": "Pilocrocis", + "1885099": "Pilocrocis lauralis", + "1885158": "Pilocrocis ramentalis", + "1885190": "Crocidophora", + "1885202": "Crocidophora tuberculalis", + "1885229": "Crocidophora serratissimalis", + "1885256": "Notarcha", + "1885262": "Notarcha quaternalis", + "1885263": "Notarcha aurolinealis", + "1885564": "Strepsinoma", + "1885569": "Strepsinoma croesusalis", + "1885572": "Strepsinoma foveata", + "1885588": "Hyalobathra", + "1885605": "Hyalobathra archeleuca", + "1885623": "Hyalobathra illectalis", + "1885630": "Hyalobathra miniosalis", + "1885639": "Apilocrocis", + "1885642": "Apilocrocis brumalis", + "1885697": "Ptochostola", + "1885702": "Ptochostola microphaeellus", + "1885731": "Eustixia", + "1885739": "Autocharis", + "1885745": "Autocharis fessalis", + "1885763": "Autocharis hedyphaes", + "1885764": "Autocharis rubricostalis", + "1885792": "Bradina", + "1885826": "Bradina diagonalis", + "1885836": "Bradina admixtalis", + "1885916": "Camptomastix", + "1885919": "Camptomastix hisbonalis", + "1885924": "Eurrhypis", + "1885931": "Eurrhypis guttulalis", + "1885937": "Eurrhypis pollinalis", + "1885944": "Rhimphaliodes", + "1885945": "Rhimphaliodes macrostigma", + "1885946": "Syngamia", + "1885950": "Syngamia florella", + "1885994": "Syngamia falsidicalis", + "1886015": "Syngamia latimarginalis", + "1886069": "Heliothela", + "1886084": "Heliothela wulfeniana", + "1886088": "Heliothela ophideresana", + "1886102": "Stemorrhages", + "1886104": "Stemorrhages sericea", + "1886123": "Cryptographis nitidalis", + "1886207": "Cryptographis elealis", + "1886238": "Nothomastix", + "1886241": "Nothomastix pronaxalis", + "1886248": "Spoladea", + "1886251": "Spoladea recurvalis", + "1886261": "Fumibotys", + "1886262": "Fumibotys fumalis", + "1886268": "Raphiptera", + "1886289": "Ostrinia", + "1886292": "Ostrinia penitalis", + "1886320": "Ostrinia palustralis", + "1886362": "Ostrinia furnacalis", + "1886374": "Hymenia perspectalis", + "1886376": "Microcrambus", + "1886378": "Microcrambus elegans", + "1886398": "Microcrambus kimballi", + "1886400": "Microcrambus minor", + "1886419": "Microcrambus biguttellus", + "1886435": "Megastes", + "1886474": "Lipocosma", + "1886490": "Lipocosma sicalis", + "1886501": "Lipocosma polingi", + "1886505": "Parotis", + "1886526": "Parotis marginata", + "1886576": "Sitochroa", + "1886579": "Sitochroa palealis", + "1886583": "Sitochroa chortalis", + "1886587": "Sitochroa verticalis", + "1886591": "Tegostoma", + "1886648": "Tegostoma comparalis", + "1886649": "Perispasta", + "1886650": "Perispasta caeculalis", + "1886699": "Callibotys", + "1886700": "Callibotys carapina", + "1886711": "Cotachena", + "1886720": "Cotachena histricalis", + "1886725": "Maruca", + "1886726": "Maruca amboinalis", + "1886729": "Maruca vitrata", + "1886760": "Noctuelia", + "1886832": "Diatraea", + "1886868": "Diatraea evanescens", + "1886906": "Diatraea lisetta", + "1886921": "Parapediasia", + "1886929": "Parapediasia teterellus", + "1886935": "Parapediasia decorellus", + "1886948": "Occidentalia", + "1886950": "Atralata", + "1886951": "Atralata albofascialis", + "1886993": "Diathrausta", + "1887004": "Diathrausta harlequinalis", + "1887021": "Pseudopyrausta", + "1887024": "Pseudopyrausta santatalis", + "1887028": "Neocataclysta", + "1887031": "Neocataclysta magnificalis", + "1887032": "Corynophora", + "1887036": "Corynophora lativittalis", + "1887048": "Sameodes", + "1887052": "Sameodes iolealis", + "1887054": "Sameodes cancellalis", + "1887108": "Udea prunalis", + "1887119": "Udea profundalis", + "1887122": "Udea rubigalis", + "1887125": "Udea washingtonalis", + "1887126": "Udea daiclesalis", + "1887173": "Udea fulvalis", + "1887177": "Udea olivalis", + "1887178": "Udea inquinatalis", + "1887269": "Chrysoteuchia", + "1887285": "Chrysoteuchia topiarius", + "1887290": "Chrysoteuchia culmella", + "1887308": "Nephrogramma", + "1887309": "Nephrogramma reniculalis", + "1887335": "Scybalistodes", + "1887341": "Scybalistodes periculosalis", + "1887457": "Jativa", + "1887459": "Jativa castanealis", + "1887460": "Neargyria", + "1887462": "Neargyria argyraspis", + "1887463": "Petrophila", + "1887501": "Circobotys", + "1887509": "Circobotys aurealis", + "1887564": "Mimorista", + "1887565": "Mimorista subcostalis", + "1887573": "Sceliodes", + "1887580": "Sceliodes cordalis", + "1887584": "Ischnurges", + "1887585": "Ischnurges illustralis", + "1887586": "Ischnurges gratiosalis", + "1887632": "Ommatospila", + "1887634": "Ommatospila narcaeusalis", + "1887640": "Angustalius", + "1887682": "Diasemia", + "1887686": "Diasemia grammalis", + "1887691": "Diasemia accalis", + "1887694": "Diasemia monostigma", + "1887701": "Diasemia reticularis", + "1887721": "Syllepte", + "1887894": "Syllepte placophaea", + "1888009": "Syllepte obscuralis", + "1888027": "Syllepte taiwanalis", + "1888040": "Syllepte iophanes", + "1888041": "Piletocera", + "1888047": "Piletocera bufalis", + "1888092": "Piletocera aegimiusalis", + "1888123": "Piletocera macroperalis", + "1888256": "Calamochrous", + "1888291": "Micromartinia", + "1888292": "Micromartinia mnemusalis", + "1888299": "Microtheoris", + "1888306": "Microtheoris ophionalis", + "1888307": "Microtheoris vibicalis", + "1888308": "Polythlipta", + "1888324": "Polythlipta divaricata", + "1888334": "Chalcoela", + "1888336": "Chalcoela pegasalis", + "1888338": "Chalcoela iphitalis", + "1888342": "Noorda", + "1888346": "Noorda blitealis", + "1888406": "Aethiophysa", + "1888410": "Aethiophysa dualis", + "1888428": "Eoreuma", + "1888435": "Eoreuma densellus", + "1888451": "Drosophantis", + "1888454": "Drosophantis caeruleata", + "1888455": "Chrysocrambus", + "1888463": "Chrysocrambus dentuellus", + "1888484": "Chrysocrambus linetella", + "1888491": "Chrysocrambus craterellus", + "1888536": "Prorodes", + "1888537": "Prorodes mimica", + "1888562": "Diastictis", + "1888578": "Paracorsia", + "1888579": "Paracorsia repandalis", + "1888594": "Rhimphalea", + "1888618": "Metacrambus", + "1888619": "Metacrambus carectellus", + "1888623": "Metacrambus pallidellus", + "1888638": "Arthroschista hilaralis", + "1888639": "Arthroschista tricoloralis", + "1888641": "Steniodes", + "1888646": "Steniodes declivalis", + "1888688": "Neohelvibotys", + "1888695": "Neohelvibotys neohelvialis", + "1888698": "Pediasia", + "1888733": "Pediasia luteella", + "1888736": "Pediasia ribbeellus", + "1888743": "Pediasia aridella", + "1888759": "Pediasia contaminella", + "1888823": "Pediasia trisecta", + "1888826": "Pediasia fascelinella", + "1888885": "Cirrhochrista", + "1888891": "Cirrhochrista kosemponialis", + "1888893": "Cirrhochrista spissalis", + "1888906": "Cirrhochrista annulifera", + "1888911": "Cirrhochrista fumipalpis", + "1888913": "Cirrhochrista brizoalis", + "1888915": "Cirrhochrista grabczewskyi", + "1888926": "Cirrhochrista arcusalis", + "1888933": "Fissicrambus", + "1888946": "Fissicrambus profanellus", + "1888955": "Fissicrambus haytiellus", + "1888956": "Antiscopa", + "1888958": "Antiscopa epicomia", + "1889027": "Laniifera", + "1889028": "Laniifera cyclades", + "1889037": "Tyspanodes", + "1889039": "Tyspanodes striata", + "1889043": "Tyspanodes linealis", + "1889050": "Tyspanodes creaghi", + "1889053": "Tyspanodes hypsalis", + "1889065": "Nausinoe", + "1889071": "Nausinoe geometralis", + "1889074": "Nausinoe perspectata", + "1889233": "Rehimena", + "1889239": "Rehimena surusalis", + "1889242": "Rehimena cissophora", + "1889249": "Rehimena phrynealis", + "1889266": "Eurrhyparodes", + "1889267": "Eurrhyparodes lygdamis", + "1889270": "Eurrhyparodes nymphulalis", + "1889272": "Eurrhyparodes tricoloralis", + "1889277": "Eurrhyparodes bracteolalis", + "1889286": "Thisanotia", + "1889287": "Thisanotia chrysonuchella", + "1889295": "Rupela", + "1889327": "Rupela tinctella", + "1889343": "Mabra", + "1889356": "Mabra eryxalis", + "1889358": "Mabra nigriscripta", + "1889366": "Pseudargyria", + "1889370": "Pseudargyria interruptella", + "1889380": "Phenacodes", + "1889381": "Phenacodes aleuropa", + "1889530": "Pylartes", + "1889531": "Pylartes subcostalis", + "1889533": "Apogeshna", + "1889536": "Apogeshna stenialis", + "1889540": "Ghesquierellana", + "1889543": "Ghesquierellana hirtusalis", + "1889551": "Leucinodes", + "1889552": "Leucinodes orbonalis", + "1889563": "Leucinodes apicalis", + "1889716": "Palpita asiaticalis", + "1889717": "Palpita arsaltealis", + "1889721": "Palpita flegia", + "1889745": "Palpita atrisquamalis", + "1889760": "Palpita illibalis", + "1889765": "Palpita nigropunctalis", + "1889769": "Palpita pratti", + "1889828": "Palpita freemanalis", + "1889833": "Palpita vitrealis", + "1889838": "Palpita magniferalis", + "1889850": "Palpita quadristigmalis", + "1889870": "Palpita aenescentalis", + "1889875": "Palpita margaritacea", + "1889900": "Pseudobissetia", + "1889905": "Pseudobissetia terrestrellus", + "1889936": "Nascia", + "1889939": "Nascia acutellus", + "1889942": "Nascia cilialis", + "1890011": "Aediodina", + "1890012": "Aediodina quaternalis", + "1890021": "Panotima", + "1890024": "Panotima angularis", + "1890026": "Heortia", + "1890031": "Heortia vitessoides", + "1890044": "Gesneria", + "1890053": "Musotima", + "1890056": "Musotima ochropteralis", + "1890065": "Musotima nitidalis", + "1890086": "Portentomorpha", + "1890089": "Portentomorpha xanthialis", + "1890094": "Gargela", + "1890097": "Gargela renatusalis", + "1890111": "Calamotropha", + "1890187": "Calamotropha paludella", + "1890245": "Asciodes", + "1890247": "Asciodes gordialis", + "1890256": "Nymphicula", + "1890281": "Cnaphalocrocis", + "1890287": "Cnaphalocrocis trebiusalis", + "1890320": "Cnaphalocrocis medinalis", + "1890335": "Cnaphalocrocis poeyalis", + "1890343": "Cnaphalocrocis limbalis", + "1890345": "Euclasta", + "1890346": "Euclasta varii", + "1890365": "Cryptobotys", + "1890368": "Cryptobotys zoilusalis", + "1890369": "Pyrausta", + "1890374": "Pyrausta demantrialis", + "1890404": "Pyrausta merrickalis", + "1890410": "Pyrausta phoenicealis", + "1890417": "Pyrausta volupialis", + "1890487": "Pyrausta inornatalis", + "1890491": "Pyrausta generosa", + "1890508": "Pyrausta perrubralis", + "1890512": "Pyrausta signatalis", + "1890520": "Pyrausta niveicilialis", + "1890522": "Pyrausta ostrinalis", + "1890534": "Pyrausta aurata", + "1890540": "Pyrausta alpinalis", + "1890560": "Pyrausta semirubralis", + "1890576": "Pyrausta despicata", + "1890599": "Pyrausta onythesalis", + "1890622": "Pyrausta nexalis", + "1890629": "Pyrausta orphisalis", + "1890654": "Pyrausta rubricalis", + "1890656": "Pyrausta aerealis", + "1890670": "Pyrausta testalis", + "1890679": "Pyrausta cingulata", + "1890699": "Pyrausta porphyralis", + "1890701": "Pyrausta obfuscata", + "1890703": "Pyrausta nigrata", + "1890724": "Pyrausta limbopunctalis", + "1890730": "Pyrausta californicalis", + "1890737": "Pyrausta bicoloralis", + "1890772": "Pyrausta purpuralis", + "1890776": "Pyrausta virginalis", + "1890783": "Pyrausta nicalis", + "1890794": "Pyrausta pseudonythesalis", + "1890800": "Pyrausta acrionalis", + "1890802": "Pyrausta unifascialis", + "1890823": "Pyrausta coracinalis", + "1890854": "Pyrausta lethalis", + "1890876": "Pyrausta tyralis", + "1890885": "Pyrausta laticlavia", + "1890898": "Pyrausta sanguinalis", + "1890917": "Pyrausta grotei", + "1890934": "Pyrausta dapalis", + "1890936": "Pyrausta pseuderosnealis", + "1890957": "Pyrausta castalis", + "1890975": "Pyrausta acontialis", + "1891013": "Pyrausta falcatalis", + "1891030": "Hyalorista", + "1891035": "Hyalorista taeniolalis", + "1891043": "Leptosteges", + "1891047": "Lipocosmodes", + "1891048": "Lipocosmodes fuliginosalis", + "1891054": "Psammotis", + "1891059": "Psammotis pulveralis", + "1891073": "Colomychus", + "1891074": "Colomychus talis", + "1891127": "Phlyctaenomorpha", + "1891129": "Phlyctaenomorpha sinuosalis", + "1891152": "Euchromius", + "1891167": "Euchromius ocellea", + "1891171": "Euchromius anapiellus", + "1891177": "Euchromius superbella", + "1891186": "Euchromius gozmanyi", + "1891190": "Euchromius bella", + "1891217": "Euchromius cambridgei", + "1891231": "Sufetula", + "1891236": "Sufetula hemiophthalma", + "1891297": "Aphytoceros", + "1891299": "Aphytoceros lucusalis", + "1891305": "Agrotera", + "1891308": "Agrotera pictalis", + "1891326": "Agrotera nemoralis", + "1891339": "Agrotera basinotata", + "1891353": "Evergestis", + "1891366": "Evergestis desertalis", + "1891386": "Evergestis frumentalis", + "1891426": "Evergestis aenealis", + "1891438": "Evergestis subterminalis", + "1891453": "Evergestis sophialis", + "1891473": "Evergestis extimalis", + "1891484": "Evergestis unimacula", + "1891488": "Evergestis rimosalis", + "1891493": "Evergestis pallidata", + "1891494": "Evergestis limbata", + "1891506": "Pycnarmon", + "1891533": "Pycnarmon meritalis", + "1891583": "Pycnarmon cribrata", + "1891594": "Lamprosema", + "1891636": "Lamprosema tampiusalis", + "1891755": "Lamprosema victoriae", + "1891758": "Lamprosema commixta", + "1891889": "Lamprosema tristrialis", + "1891928": "Terastia", + "1891932": "Terastia meticulosalis", + "1891936": "Terastia egialealis", + "1892130": "Polygrammodes", + "1892131": "Polygrammodes elevata", + "1892153": "Polygrammodes sabelialis", + "1892193": "Polygrammodes flavidalis", + "1892230": "Polygrammodes ponderalis", + "1892238": "Ecpyrrhorrhoe", + "1892242": "Ecpyrrhorrhoe rubiginalis", + "1892245": "Ecpyrrhorrhoe diffusalis", + "1892295": "Chrysendeton", + "1892301": "Chrysendeton imitabilis", + "1892302": "Chrysendeton medicinalis", + "1892303": "Leucochroma", + "1892311": "Leucochroma corope", + "1892318": "Pseudoschinia", + "1892320": "Pseudoschinia elautalis", + "1892354": "Compacta", + "1892355": "Compacta hirtalis", + "1892404": "Lineodes", + "1892420": "Lineodes vulnifica", + "1892427": "Lineodes integra", + "1892433": "Lineodes interrupta", + "1892453": "Achyra", + "1892456": "Achyra coelatalis", + "1892458": "Achyra massalis", + "1892462": "Achyra affinitalis", + "1892476": "Achyra nudalis", + "1892477": "Achyra bifidalis", + "1892488": "Achyra rantalis", + "1892505": "Philaethria", + "1892509": "Philaethria wernickei", + "1892536": "Byblia", + "1892544": "Byblia anvatara", + "1892554": "Byblia anvatara", + "1892555": "Byblia ilithyia", + "1892615": "Paralethe", + "1892621": "Paralethe dendrophilus", + "1892625": "Elzunia", + "1892634": "Elzunia pavonii", + "1892653": "Phalanta", + "1892700": "Meneris", + "1892707": "Doxocopa", + "1892729": "Doxocopa laure", + "1892736": "Doxocopa laurentia", + "1892742": "Doxocopa pavon", + "1892746": "Doxocopa zunilda", + "1892759": "Doxocopa cyane", + "1892761": "Doxocopa linda", + "1892770": "Doxocopa agathina", + "1892804": "Eurytela", + "1892811": "Eurytela hiarbas", + "1892814": "Eurytela dryope", + "1892818": "Vagrans", + "1892821": "Vagrans egista", + "1892833": "Panyapedaliodes", + "1892837": "Panyapedaliodes drymaea", + "1892844": "Castilia", + "1892851": "Castilia myia", + "1892855": "Castilia perilla", + "1892856": "Castilia castilla", + "1892858": "Castilia eranites", + "1892863": "Castilia ofella", + "1892890": "Mestra", + "1892915": "Eteona tisiphone", + "1892917": "Dira", + "1892942": "Haywardella", + "1892944": "Haywardella edmondsii", + "1892952": "Polyura", + "1893128": "Arethusana", + "1893137": "Arethusana arethusa", + "1893171": "Idea", + "1893177": "Idea malabarica", + "1893204": "Idea blanchardii", + "1893241": "Idea stolli", + "1893266": "Idea leuconoe", + "1893282": "Anartia", + "1893309": "Dryas", + "1893327": "Childrena", + "1893329": "Childrena childreni", + "1893334": "Drucina", + "1893337": "Drucina leonata", + "1893338": "Zipaetis", + "1893341": "Zipaetis saitis", + "1893376": "Archeuptychia", + "1893377": "Archeuptychia cluena", + "1893378": "Pampasatyrus", + "1893381": "Pampasatyrus gyrtone", + "1893479": "Ceratinia", + "1893480": "Ceratinia tutia", + "1893521": "Pindis", + "1893525": "Mycalesis", + "1893526": "Mycalesis pitana", + "1893538": "Mycalesis junonia", + "1893546": "Mycalesis gotama", + "1893551": "Mycalesis ita", + "1893558": "Mycalesis anynana", + "1893562": "Mycalesis safitza", + "1893612": "Mycalesis anaxias", + "1893645": "Mycalesis orseis", + "1893660": "Mycalesis phidon", + "1893663": "Mycalesis fuscum", + "1893699": "Mycalesis sirius", + "1893787": "Mycalesis terminus", + "1893793": "Mycalesis mineus", + "1893901": "Mycalesis vulgaris", + "1893921": "Mycalesis sudra", + "1893923": "Mycalesis francisca", + "1893951": "Mycalesis visala", + "1893971": "Faunis", + "1893989": "Faunis phaon", + "1893993": "Faunis menado", + "1893998": "Faunis gracilis", + "1894002": "Faunis canens", + "1894012": "Faunis eumeus", + "1894053": "Dodonidia", + "1894054": "Dodonidia helmsii", + "1894055": "Zethera", + "1894057": "Zethera pimplea", + "1894060": "Zethera incerta", + "1894073": "Hypanartia", + "1894074": "Hypanartia dione", + "1894076": "Hypanartia paullus", + "1894082": "Hypanartia kefersteini", + "1894085": "Hypanartia bella", + "1894087": "Hypanartia godmanii", + "1894088": "Hypanartia lethe", + "1894097": "Clossiana", + "1894102": "Clossiana astarte", + "1894164": "Clossiana polaris", + "1894268": "Clossiana euphrosyne", + "1894293": "Clossiana bellona", + "1894298": "Clossiana chariclea", + "1894323": "Euptoieta", + "1894329": "Euptoieta hegesia", + "1894342": "Euptoieta claudia", + "1894349": "Euptoieta hortensia", + "1894354": "Discophora", + "1894417": "Ladoga", + "1894469": "Pararge", + "1894714": "Pararge petropolitana", + "1894779": "Aglais", + "1894840": "Aglais urticae", + "1894896": "Aglais milberti", + "1894922": "Cybdelis", + "1895036": "Euripus", + "1895037": "Euripus nyctelius", + "1895130": "Euphydryas", + "1895138": "Euphydryas phaeton", + "1895141": "Tisiphone", + "1895152": "Stibochiona", + "1895159": "Stibochiona nicea", + "1895168": "Greta", + "1895176": "Greta andromica", + "1895185": "Greta morgane", + "1895203": "Greta annette", + "1895235": "Chloreuptychia", + "1895250": "Chloreuptychia chlorimene", + "1895260": "Oeneis", + "1895438": "Elymnias", + "1895448": "Elymnias agondas", + "1895499": "Elymnias hypermnestra", + "1895527": "Elymnias caudata", + "1895609": "Elymnias malelas", + "1895667": "Elymnias nesaea", + "1895670": "Elymnias panthera", + "1895691": "Catoblepia", + "1895709": "Catoblepia berecynthia", + "1895732": "Eresia", + "1895733": "Eresia ithomioides", + "1895745": "Eresia pelonia", + "1895768": "Eresia clio", + "1895773": "Eresia polina", + "1895789": "Eresia nauplius", + "1895809": "Eresia lansdorfi", + "1895818": "Eresia levina", + "1895820": "Eresia phillyra", + "1895829": "Eresia datis", + "1895837": "Pseudohaetera", + "1895838": "Pseudohaetera hypaesia", + "1895859": "Argyronome", + "1895867": "Argyronome ruslana", + "1895875": "Argyronome laodice", + "1895882": "Thessalia", + "1895886": "Thessalia theona", + "1895904": "Thessalia leanira", + "1895908": "Melanitis", + "1895956": "Melanitis leda", + "1895984": "Melanitis zitenius", + "1895992": "Melanitis phedima", + "1896057": "Ragadia", + "1896061": "Ragadia crisilda", + "1896063": "Ragadia luzonia", + "1896073": "Ragadia makuta", + "1896080": "Dynastor", + "1896087": "Dynastor darius", + "1896104": "Abrota", + "1896105": "Abrota ganga", + "1896124": "Epityches", + "1896126": "Epityches eupompe", + "1896129": "Terinos", + "1896141": "Terinos clarissa", + "1896142": "Terinos terpander", + "1896152": "Terinos atlita", + "1896175": "Eunica", + "1896289": "Orsotriaena", + "1896304": "Orsotriaena medus", + "1896310": "Phystis", + "1896316": "Phystis simois", + "1896317": "Euphaedra", + "1896547": "Euphaedra harpalyce", + "1896600": "Euphaedra neophron", + "1896603": "Euphaedra medon", + "1896605": "Dircenna", + "1896614": "Dircenna klugii", + "1896628": "Dircenna dero", + "1896644": "Episcada", + "1896658": "Episcada salvinia", + "1896746": "Dryadula", + "1896749": "Dryadula phaetusa", + "1896752": "Dulcedo", + "1896754": "Dulcedo polita", + "1896755": "Catonephele", + "1896756": "Catonephele acontius", + "1896763": "Catonephele chromis", + "1896774": "Catonephele numilia", + "1896785": "Sasakia", + "1896799": "Aphantopus", + "1896841": "Aphantopus hyperantus", + "1896863": "Mygona irmina", + "1896874": "Oressinoma", + "1896876": "Oressinoma typhla", + "1896877": "Asterope", + "1896911": "Thaleropis", + "1896915": "Thaleropis ionia", + "1896917": "Hestinalis", + "1896922": "Hestinalis nama", + "1896928": "Coea", + "1896932": "Coea acheronta", + "1896957": "Charaxes jasius", + "1897636": "Colobura", + "1897643": "Dione", + "1897659": "Parantica", + "1897664": "Parantica sita", + "1897677": "Parantica nilgiriensis", + "1897685": "Parantica aglea", + "1897692": "Parantica agleoides", + "1897722": "Parantica cleona", + "1897747": "Parantica melaneus", + "1897770": "Parantica aspasia", + "1897792": "Parthenos", + "1897807": "Chersonesia", + "1897808": "Chersonesia intermedia", + "1897814": "Chersonesia rahria", + "1897817": "Chersonesia risa", + "1897825": "Callerebia", + "1897834": "Callerebia nirmala", + "1897852": "Callerebia styx", + "1897873": "Callerebia scanda", + "1897886": "Precis", + "1897904": "Precis ceryne", + "1897946": "Precis actia", + "1897965": "Precis pelarga", + "1897970": "Precis octavia", + "1897972": "Precis andremiaja", + "1897974": "Eryphanis", + "1897977": "Eryphanis automedon", + "1897980": "Eryphanis reevesii", + "1897985": "Eryphanis lycomedon", + "1897990": "Eryphanis aesacus", + "1898000": "Aterica", + "1898002": "Aterica galene", + "1898017": "Aterica rabena", + "1898018": "Catagramma", + "1898077": "Catagramma cynosura", + "1898133": "Catagramma pyracmon", + "1898143": "Catagramma astarte", + "1898174": "Catagramma texa", + "1898200": "Catagramma pygas", + "1898203": "Catagramma tolima", + "1898215": "Zeuxidia", + "1898234": "Zeuxidia aurelia", + "1898246": "Taygetina", + "1898248": "Helcyra", + "1898250": "Helcyra superba", + "1898261": "Vanessa", + "1898286": "Vanessa atalanta", + "1898290": "Vanessa vulcania", + "1898343": "Pierella", + "1898348": "Pierella lucia", + "1898350": "Pierella hyalinus", + "1898352": "Pierella hortona", + "1898358": "Pierella helvina", + "1898367": "Pierella lena", + "1898368": "Pierella nereis", + "1898370": "Pierella hyceta", + "1898374": "Pierella lamia", + "1898391": "Pierella luna", + "1898397": "Libytheana", + "1898402": "Libytheana carinenta", + "1898410": "Asterocampa", + "1898414": "Asterocampa leilia", + "1898416": "Asterocampa celtis", + "1898424": "Asterocampa idyja", + "1898431": "Asterocampa clyton", + "1898433": "Hestina", + "1898434": "Hestina persimilis", + "1898441": "Hestina assimilis", + "1898474": "Polygonia", + "1898521": "Polygonia egea", + "1898544": "Polygonia c-album", + "1898578": "Callizona", + "1898587": "Hamadryas", + "1898669": "Enodia", + "1898683": "Historis", + "1898686": "Historis odius", + "1898687": "Pedaliodes", + "1898789": "Pedaliodes peucestas", + "1898841": "Pedaliodes dejecta", + "1898848": "Pedaliodes palaepolis", + "1898853": "Methona", + "1898858": "Methona themisto", + "1898865": "Methona confusa", + "1898929": "Symbrenthia", + "1898946": "Symbrenthia brabira", + "1898958": "Symbrenthia niphanda", + "1898970": "Symbrenthia hippoclus", + "1898988": "Symbrenthia lilaea", + "1899046": "Vareuptychia", + "1899048": "Vareuptychia themis", + "1899063": "Batesia", + "1899069": "Hamanumida", + "1899071": "Hamanumida daedalus", + "1899077": "Henotesia", + "1899144": "Henotesia narcissus", + "1899164": "Henotesia narcissus", + "1899181": "Ethope", + "1899187": "Ethope himachala", + "1899194": "Catacroptera", + "1899198": "Catacroptera cloanthe", + "1899349": "Melitaea trivia", + "1899433": "Melitaea athalia", + "1899737": "Melitaea aetherie", + "1899818": "Melitaea arduinna", + "1899830": "Siproeta", + "1899832": "Podotricha", + "1899835": "Podotricha telesiphe", + "1899856": "Tithorea", + "1899873": "Tithorea tarricina", + "1899893": "Tithorea harmonia", + "1899908": "Oreixenica", + "1899913": "Dasyophthalma", + "1899922": "Dasyophthalma rusina", + "1899924": "Haematera", + "1899929": "Heteronympha", + "1899931": "Heteronympha mirifica", + "1899932": "Heteronympha banksii", + "1899940": "Heteronympha paradelpha", + "1899943": "Heteronympha cordace", + "1899947": "Heteronympha merope", + "1899950": "Heteronympha penelope", + "1899956": "Heteronympha solandri", + "1899985": "Auca", + "1899989": "Auca coctei", + "1899991": "Antirrhea", + "1899994": "Antirrhea philaretes", + "1900014": "Antirrhea archaea", + "1900021": "Hermeuptychia", + "1900024": "Hermeuptychia sosybius", + "1900026": "Hermeuptychia canthe", + "1900039": "Antanartia", + "1900053": "Antanartia dimorphica", + "1900055": "Antanartia schaeneia", + "1900063": "Lasippa", + "1900093": "Lasippa tiga", + "1900111": "Epiphile", + "1900112": "Epiphile hubneri", + "1900121": "Epiphile epimenes", + "1900131": "Epiphile adrasta", + "1900134": "Epiphile orea", + "1900140": "Heliconius", + "1900172": "Heliconius numatus", + "1900175": "Heliconius aliphera", + "1900195": "Heliconius ricini", + "1900197": "Heliconius antiochus", + "1900199": "Heliconius hecale", + "1900233": "Heliconius charithonia", + "1900249": "Heliconius doris", + "1900295": "Heliconius hewitsoni", + "1900303": "Heliconius melpomene", + "1900345": "Heliconius eleuchia", + "1900408": "Heliconius wallacei", + "1900485": "Heliconius cydno", + "1900523": "Heliconius besckei", + "1900565": "Heliconius atthis", + "1900578": "Heliconius pachinus", + "1900618": "Heliconius ismenius", + "1900626": "Heliconius hecalesia", + "1900632": "Heliconius ethilla", + "1900768": "Heliconius telesiphe", + "1900787": "Heliconius sara", + "1900825": "Heliconius clysonymus", + "1900830": "Heliconius sapho", + "1900872": "Heliconius erato", + "1900889": "Timelaea", + "1900890": "Timelaea albescens", + "1900897": "Timelaea maculata", + "1900916": "Praepedaliodes", + "1900918": "Praepedaliodes phanias", + "1900919": "Mynes", + "1900939": "Mynes geoffroyi", + "1900968": "Ectima", + "1900982": "Actinote", + "1901001": "Actinote anteas", + "1901153": "Actinote negra", + "1901189": "Actinote stratonice", + "1901205": "Prothoe", + "1901213": "Prothoe franck", + "1901256": "Myscelia", + "1901257": "Myscelia orsis", + "1901261": "Myscelia cyaniris", + "1901268": "Myscelia cyananthe", + "1901287": "Amathusia", + "1901337": "Metamorpha", + "1901363": "Parathyma", + "1901372": "Parathyma reta", + "1901399": "Parathyma selenophora", + "1901404": "Parathyma perius", + "1901411": "Parathyma pravara", + "1901427": "Parathyma kanwa", + "1901428": "Parathyma ranga", + "1901429": "Parathyma asura", + "1901435": "Parathyma nefte", + "1901463": "Parathyma opalina", + "1901470": "Calisto", + "1901530": "Godartiana", + "1901533": "Godartiana muscosa", + "1901577": "Argyrophorus", + "1901580": "Argyrophorus argenteus", + "1901581": "Tellervo", + "1901669": "Tellervo zoilus", + "1901729": "Poladryas", + "1901735": "Poladryas arachne", + "1901739": "Magneuptychia", + "1901744": "Magneuptychia libye", + "1901776": "Lachnoptera", + "1901781": "Lachnoptera anticlia", + "1901782": "Lachnoptera ayresii", + "1901786": "Pyrrhogyra", + "1901794": "Pyrrhogyra edocla", + "1901801": "Pyrrhogyra neaerea", + "1901804": "Pyrrhogyra crameri", + "1901810": "Pyrrhogyra otolais", + "1901823": "Damora", + "1901832": "Damora sagana", + "1901850": "Damora pandora", + "1901885": "Junonia", + "1902105": "Argyrophenga", + "1902106": "Argyrophenga janitae", + "1902108": "Argyrophenga antipodum", + "1902109": "Ortilia", + "1902110": "Ortilia dicoma", + "1902111": "Ortilia ithra", + "1902114": "Ortilia orthia", + "1902117": "Ortilia velica", + "1902118": "Ortilia gentina", + "1902143": "Hypodryas iduna", + "1902169": "Hypodryas cynthia", + "1902175": "Hypodryas gillettii", + "1902182": "Hypodryas intermedia", + "1902206": "Thyridia", + "1902211": "Thyridia psidii", + "1902221": "Geitoneura", + "1902233": "Geitoneura minyas", + "1902244": "Geitoneura klugii", + "1902248": "Geitoneura acantha", + "1902275": "Oleria", + "1902300": "Oleria vicina", + "1902346": "Oleria onega", + "1902378": "Oleria paula", + "1902384": "Oleria baizana", + "1902388": "Oleria padilla", + "1902399": "Zaretis", + "1902406": "Zaretis ellops", + "1902410": "Zaretis strigosus", + "1902425": "Dymasia", + "1902430": "Dymasia dymas", + "1902433": "Mechanitis", + "1902451": "Mechanitis messenoides", + "1902458": "Mechanitis lysimnia", + "1902479": "Mechanitis polymnia", + "1902502": "Mechanitis menapis", + "1902519": "Araschnia", + "1902533": "Araschnia levana", + "1902543": "Araschnia burejana", + "1902560": "Araschnia doris", + "1902562": "Penthema", + "1902568": "Penthema darlisa", + "1902572": "Penthema adelma", + "1902586": "Penthema formosanum", + "1902610": "Microtia", + "1902614": "Parataygetis", + "1902615": "Parataygetis lineata", + "1902619": "Cepheuptychia", + "1902620": "Cepheuptychia glaucina", + "1902623": "Cepheuptychia cephus", + "1902626": "Siderone", + "1902642": "Siderone galanthis", + "1902644": "Anthanassa", + "1902660": "Anthanassa hermas", + "1902670": "Anthanassa argentea", + "1902676": "Anthanassa tulcis", + "1902680": "Anthanassa ptolyca", + "1902692": "Anthanassa drusilla", + "1902699": "Anthanassa frisia", + "1902702": "Anthanassa ardys", + "1902703": "Anthanassa sitalces", + "1902704": "Anthanassa atronia", + "1902707": "Brenthis", + "1902749": "Brenthis ino", + "1902795": "Mcclungia", + "1902801": "Proterebia", + "1902813": "Callithomia", + "1902814": "Callithomia lenea", + "1902873": "Pteronymia", + "1902880": "Pteronymia cotytto", + "1902882": "Pteronymia ozia", + "1902885": "Pteronymia aletta", + "1902993": "Panacea", + "1903008": "Cassionympha", + "1903009": "Cassionympha cassius", + "1903019": "Hyposcada", + "1903028": "Hyposcada virginiana", + "1903193": "Euthalia", + "1903598": "Brassolis sophorae", + "1903601": "Temenis", + "1903607": "Temenis laothoe", + "1903625": "Euptychoides", + "1903634": "Euptychoides laccine", + "1903636": "Euptychoides albofasciata", + "1903637": "Pharneuptychia", + "1903646": "Pharneuptychia phares", + "1903653": "Capronnieria", + "1903656": "Bolboneura", + "1903658": "Bolboneura sylphis", + "1903659": "Pseudoneptis", + "1903661": "Pseudoneptis bugandensis", + "1903673": "Texola", + "1903683": "Texola elada", + "1904193": "Bebearia", + "1904206": "Bebearia orientis", + "1904271": "Thaumantis", + "1904272": "Thaumantis diores", + "1904281": "Thaumantis klugius", + "1904282": "Thaumantis noureddin", + "1904283": "Thaumantis odana", + "1904294": "Eueides", + "1904380": "Smyrna", + "1904382": "Smyrna blomfildia", + "1904688": "Cethosia", + "1904701": "Cethosia cyane", + "1904719": "Cethosia biblis", + "1904728": "Cethosia penthesilea", + "1904760": "Cethosia myrina", + "1904764": "Cethosia hypsea", + "1904798": "Cethosia cydippe", + "1904817": "Biblis", + "1904851": "Cyrestis", + "1904884": "Cyrestis acilia", + "1904887": "Cyrestis themire", + "1904888": "Cyrestis maenalis", + "1904916": "Cyrestis thyonneus", + "1904921": "Cyrestis lutea", + "1904922": "Cyrestis strigata", + "1904932": "Cyrestis heracles", + "1904938": "Cyrestis nivea", + "1904943": "Cyrestis cocles", + "1904948": "Cyrestis thyodamas", + "1904981": "Doleschallia", + "1904996": "Doleschallia bisaltide", + "1905071": "Dichorragia", + "1905079": "Dichorragia nesimachus", + "1905123": "Rhinopalpa", + "1905142": "Rhinopalpa polynice", + "1905150": "Speyeria", + "1905161": "Speyeria adiaste", + "1905162": "Speyeria idalia", + "1905172": "Speyeria cybele", + "1905187": "Speyeria mormonia", + "1905189": "Speyeria coronis", + "1905242": "Speyeria nokomis", + "1905257": "Speyeria egleis", + "1905267": "Speyeria callippe", + "1905281": "Speyeria zerene", + "1905297": "Speyeria edwardsii", + "1905299": "Speyeria hesperis", + "1905301": "Speyeria aphrodite", + "1905310": "Speyeria diana", + "1905317": "Speyeria hydaspe", + "1905319": "Pseudoscada", + "1905321": "Pseudoscada erruca", + "1905339": "Issoria", + "1905383": "Issoria lathonia", + "1905396": "Issoria eugenia", + "1905450": "Hypna", + "1905451": "Hypna clytemnestra", + "1906002": "Amauris", + "1906006": "Amauris ochlea", + "1906014": "Amauris albimaculata", + "1906030": "Amauris niavius", + "1906063": "Amauris tartarea", + "1906117": "Amauris echeria", + "1906139": "Pseudonympha", + "1906171": "Cymothoe", + "1906451": "Hyponephele", + "1906552": "Hyponephele lupinus", + "1906565": "Chloropoea", + "1906604": "Chloropoea boisduvalii", + "1906621": "Chloropoea lucretia", + "1906679": "Chloropoea eurytus", + "1906714": "Cosmosatyrus", + "1906715": "Cosmosatyrus leptoneuroides", + "1907130": "Anaea", + "1907153": "Anaea aidea", + "1907190": "Anaea ryphea", + "1907235": "Anaea andria", + "1907250": "Anaea pithyusa", + "1907272": "Anaea troglodyta", + "1907355": "Salamis", + "1907390": "Antillea", + "1907395": "Antillea pelops", + "1907398": "Neptidopsis", + "1907399": "Neptidopsis ophione", + "1907407": "Ypthima", + "1907430": "Ypthima pandocus", + "1907432": "Ypthima stellera", + "1907436": "Ypthima masakii", + "1907475": "Ypthima fasciata", + "1907498": "Ypthima multistriata", + "1907511": "Ypthima praenubila", + "1907534": "Ypthima lisandra", + "1907541": "Ypthima atra", + "1907547": "Ypthima tappana", + "1907569": "Ypthima sesara", + "1907576": "Ypthima ypthimoides", + "1907580": "Ypthima akragas", + "1907620": "Ypthima nikaea", + "1907625": "Ypthima argus", + "1907637": "Ypthima tabella", + "1907666": "Ypthima nynias", + "1907672": "Ypthima ceylonica", + "1907683": "Ypthima arctous", + "1907687": "Ypthima baldus", + "1907726": "Athesis", + "1907727": "Athesis clearista", + "1907997": "Occidryas", + "1908011": "Occidryas editha", + "1908044": "Occidryas anicia", + "1908052": "Occidryas colon", + "1908055": "Occidryas chalcedona", + "1908108": "Erebia merula", + "1908109": "Ithomia", + "1908123": "Ithomia diasia", + "1908138": "Ithomia drymo", + "1908144": "Ithomia terra", + "1908146": "Ithomia heraldica", + "1908148": "Ithomia patilla", + "1908150": "Ithomia iphianassa", + "1908168": "Ithomia agnosia", + "1908174": "Ithomia salapia", + "1908197": "Taygetis", + "1908199": "Taygetis rufomarginata", + "1908203": "Taygetis mermeria", + "1908204": "Taygetis thamyra", + "1908207": "Taygetis uncinata", + "1908217": "Taygetis tripunctata", + "1908256": "Taygetis inconspicua", + "1908258": "Taygetis uzza", + "1908262": "Taygetis echo", + "1908298": "Nessaea", + "1908299": "Nessaea obrinus", + "1908302": "Nessaea aglaura", + "1908309": "Nessaea hewitsonii", + "1908317": "Corades chelonis", + "1908337": "Corades enyo", + "1908339": "Corades medeba", + "1908348": "Pseudergolis", + "1908352": "Pseudergolis wedah", + "1908354": "Physcaeneura", + "1908356": "Physcaeneura panda", + "1908361": "Palaeonympha", + "1908367": "Palaeonympha opalina", + "1908573": "Cithaerias", + "1908577": "Cithaerias pireta", + "1908624": "Ideopsis", + "1908660": "Ideopsis vulgaris", + "1908700": "Ideopsis vitrea", + "1908702": "Ideopsis similis", + "1908707": "Ideopsis gaura", + "1908713": "Ideopsis juventa", + "1908757": "Anetia", + "1908769": "Amathuxidia", + "1908775": "Amathuxidia amythaon", + "1908788": "Coelites", + "1908800": "Tanaecia", + "1908818": "Tanaecia palguna", + "1908840": "Tanaecia jahnu", + "1908863": "Tanaecia cocytus", + "1908871": "Tanaecia lepidea", + "1908897": "Tanaecia trigerta", + "1908929": "Tanaecia julii", + "1908953": "Tanaecia pelea", + "1908962": "Tanaecia aruna", + "1908980": "Diaethria", + "1908995": "Diaethria astala", + "1909004": "Diaethria neglecta", + "1909019": "Diaethria clymena", + "1909025": "Diaethria eluina", + "1909039": "Diaethria candrena", + "1909064": "Diaethria anna", + "1909067": "Oxeoschistus", + "1909070": "Oxeoschistus puerta", + "1909106": "Baeotus", + "1909108": "Baeotus deucalion", + "1909115": "Thauria", + "1909123": "Thauria aliris", + "1909124": "Dynamine", + "1909128": "Dynamine postverta", + "1909135": "Dynamine aerata", + "1909155": "Dynamine tithia", + "1909170": "Dynamine dyonis", + "1909185": "Dynamine theseus", + "1909191": "Dynamine athemon", + "1909209": "Dynamine myrrhina", + "1909211": "Dynamine agacles", + "1909213": "Dynamine coenus", + "1909215": "Tirumala", + "1909216": "Tirumala hamata", + "1909217": "Lasiophila", + "1909241": "Lasiophila orbifera", + "1909276": "Eulaceura", + "1909281": "Eulaceura osteria", + "1909297": "Stichophthalma", + "1909319": "Stichophthalma howqua", + "1909334": "Argynnis", + "1909398": "Argynnis paphia", + "1909428": "Hypocysta", + "1909436": "Hypocysta irius", + "1909453": "Hypocysta euphemia", + "1909457": "Hypocysta metirius", + "1909462": "Perisama", + "1909489": "Perisama humboldtii", + "1909532": "Perisama cardases", + "1909573": "Perisama oppelii", + "1909588": "Kallima", + "1909607": "Kallima inachus", + "1909649": "Kallima horsfieldii", + "1909659": "Kallima sylvia", + "1909736": "Acraea aganice", + "1909799": "Neominois", + "1909800": "Neominois ridingsii", + "1909804": "Libythea", + "1909810": "Libythea myrrha", + "1909818": "Libythea laius", + "1909838": "Libythea celtis", + "1909854": "Libythea geoffroy", + "1909865": "Libythea lepita", + "1909876": "Pandita", + "1909879": "Pandita sinope", + "1909881": "Xanthotaenia", + "1909884": "Xanthotaenia busiris", + "1909888": "Morpho", + "1910363": "Neorina", + "1910371": "Neorina lowii", + "1910377": "Mazia", + "1910378": "Mazia amazonica", + "1910384": "Lycorea", + "1910496": "Hypolimnas anthedon", + "1910501": "Hypolimnas monteironis", + "1910576": "Hypolimnas deois", + "1910628": "Hypolimnas misippus", + "1910629": "Hypolimnas bolina", + "1910648": "Hypolimnas alimena", + "1910662": "Hypolimnas anomala", + "1910663": "Hypolimnas salmacis", + "1910682": "Vindula", + "1910706": "Vindula erota", + "1910753": "Vindula arsinoe", + "1910771": "Pseudodebis", + "1910773": "Pseudodebis valentina", + "1910782": "Aeria", + "1910796": "Yoma", + "1910809": "Yoma sabina", + "1910812": "Yoma algina", + "1911072": "Janatella", + "1911076": "Janatella leucodesma", + "1911077": "Janatella fellula", + "1911078": "Coenonympha", + "1911093": "Coenonympha oedippus", + "1911112": "Coenonympha tullia", + "1911122": "Coenonympha thyrsis", + "1911168": "Coenonympha hero", + "1911178": "Coenonympha haydeni", + "1911182": "Coenonympha corinna", + "1911198": "Coenonympha sunbecca", + "1911246": "Coenonympha california", + "1911278": "Coenonympha glycerion", + "1911298": "Coenonympha leander", + "1911300": "Coenonympha saadi", + "1911461": "Coenonympha pamphilus", + "1911503": "Coenonympha amaryllis", + "1911518": "Marpesia", + "1911573": "Satyrotaygetis", + "1911577": "Satyrotaygetis satyrina", + "1911580": "Ariadne", + "1911627": "Pseudochazara", + "1911633": "Pseudochazara pelopea", + "1911690": "Phaedyma", + "1911736": "Phaedyma columella", + "1911755": "Phaedyma shepherdi", + "1911763": "Fabriciana", + "1911932": "Manataria", + "1911939": "Manataria maculata", + "1911943": "Prepona", + "1911966": "Prepona amphimachus", + "1912003": "Prepona demophon", + "1912036": "Prepona demophoon", + "1912119": "Prepona laertes", + "1912138": "Sephisa", + "1912157": "Vanessula", + "1912162": "Hypothyris", + "1912319": "Boloria", + "1912325": "Boloria selene", + "1912372": "Boloria aquilonaris", + "1912395": "Boloria graeca", + "1912428": "Boloria alaskensis", + "1912470": "Boloria napaea", + "1912473": "Memphis", + "1912488": "Bicyclus", + "1912506": "Bicyclus cottrelli", + "1912583": "Satyrus", + "1913046": "Cupha", + "1913091": "Cupha prosope", + "1913105": "Cupha erymanthis", + "1913113": "Mellicta", + "1913175": "Mellicta aurelia", + "1913178": "Mellicta britomartis", + "1913328": "Mellicta celadussa", + "1913351": "Mellicta parthenoides", + "1913371": "Mellicta asteria", + "1913456": "Erebia", + "1914398": "Chlosyne", + "1914410": "Chlosyne californica", + "1914416": "Chlosyne erodyle", + "1914420": "Chlosyne poecile", + "1914421": "Chlosyne palla", + "1914424": "Chlosyne gaudialis", + "1914433": "Chlosyne narva", + "1914435": "Chlosyne endeis", + "1914439": "Chlosyne harrisii", + "1914440": "Chlosyne melanarge", + "1914442": "Chlosyne ehrenbergii", + "1914458": "Chlosyne nycteis", + "1914464": "Chlosyne acastus", + "1914465": "Chlosyne lacinia", + "1914477": "Chlosyne gabbii", + "1914484": "Chlosyne hoffmanni", + "1914496": "Chlosyne melitaeoides", + "1914498": "Chlosyne definita", + "1914500": "Chlosyne rosita", + "1914501": "Chlosyne janais", + "1914511": "Chlosyne hippodrome", + "1914692": "Harjesia", + "1914693": "Harjesia blanda", + "1914695": "Posttaygetis", + "1914697": "Posttaygetis penelea", + "1914701": "Neope goschkevitschii", + "1914708": "Neope pulaha", + "1914734": "Neope bremeri", + "1914749": "Neope armandii", + "1915017": "Pantoporia", + "1915031": "Pantoporia venilia", + "1915079": "Pantoporia cama", + "1915080": "Pantoporia hordonia", + "1915110": "Pantoporia paraka", + "1915140": "Pantoporia zeroca", + "1915144": "Pantoporia consimilis", + "1915154": "Pantoporia jina", + "1915160": "Pantoporia sandaka", + "1915189": "Consul", + "1915193": "Consul fabius", + "1915248": "Cirrochroa", + "1915262": "Cirrochroa aoris", + "1915270": "Cirrochroa orissa", + "1915275": "Cirrochroa thais", + "1915325": "Cirrochroa tyche", + "1915332": "Cirrochroa malaya", + "1915337": "Yphthimoides", + "1915339": "Yphthimoides renata", + "1915368": "Yphthimoides patricia", + "1915369": "Yphthimoides celmis", + "1915371": "Opsiphanes", + "1915396": "Opsiphanes cassina", + "1915401": "Opsiphanes cassiae", + "1915415": "Opsiphanes batea", + "1915417": "Opsiphanes fabricii", + "1915427": "Opsiphanes quiteria", + "1915430": "Opsiphanes boisduvalii", + "1915456": "Opsiphanes invirae", + "1915464": "Cercyonis", + "1915469": "Cercyonis sthenele", + "1915470": "Cercyonis oetus", + "1915487": "Cercyonis meadi", + "1915492": "Cercyonis pegala", + "1915497": "Pardopsis", + "1915499": "Pardopsis punctatissima", + "1915504": "Gyrocheilus", + "1915506": "Gyrocheilus patrobas", + "1915513": "Pagyris", + "1915529": "Acraea", + "1916334": "Melanargia", + "1916347": "Melanargia arge", + "1916352": "Melanargia ines", + "1916376": "Melanargia titea", + "1916410": "Melanargia russiae", + "1916412": "Melanargia larissa", + "1916458": "Melanargia lachesis", + "1916509": "Melanargia epimede", + "1916554": "Melanargia occitanica", + "1916665": "Haetera", + "1916677": "Hypoleria", + "1916700": "Hypoleria lavinia", + "1916701": "Hypoleria ocalea", + "1916752": "Herona", + "1916758": "Herona marathus", + "1916765": "Telenassa", + "1916772": "Telenassa teletusa", + "1916790": "Telenassa berenice", + "1916794": "Euploea", + "1917796": "Erites", + "1917818": "Tegosa", + "1917827": "Tegosa guatemalena", + "1917830": "Tegosa anieta", + "1917834": "Tegosa claudina", + "1917840": "Tegosa orobia", + "1917887": "Lymanopoda", + "1917911": "Lymanopoda caeruleata", + "1918025": "Symphaedra", + "1918026": "Symphaedra nais", + "1918071": "Caligo", + "1918076": "Caligo beltrao", + "1918077": "Caligo eurilochus", + "1918078": "Caligo illioneus", + "1918082": "Caligo uranus", + "1918086": "Caligo teucer", + "1918094": "Caligo telamonius", + "1918097": "Caligo brasiliensis", + "1918133": "Caligo atreus", + "1918149": "Caligo idomeneus", + "1918203": "Stygionympha", + "1918207": "Stygionympha wichgrafi", + "1918212": "Stygionympha vigilans", + "1918214": "Godyris", + "1918220": "Godyris zavaleta", + "1918262": "Pareuptychia", + "1918263": "Pareuptychia summandosa", + "1918268": "Pareuptychia hesionides", + "1918269": "Pareuptychia metaleuca", + "1918280": "Pareuptychia ocirrhoe", + "1918291": "Paramecera", + "1918293": "Paramecera xicaque", + "1918309": "Lethe", + "1918321": "Lethe confusa", + "1918394": "Lethe verma", + "1918395": "Lethe eurydice", + "1918406": "Lethe mekara", + "1918408": "Lethe sidonis", + "1918411": "Lethe diana", + "1918416": "Lethe mataja", + "1918467": "Lethe sicelis", + "1918495": "Lethe dura", + "1918497": "Lethe rohria", + "1918509": "Lethe hyrania", + "1918517": "Lethe baladeva", + "1918532": "Lethe minerva", + "1918533": "Lethe chandica", + "1918547": "Lethe drypetis", + "1918553": "Lethe syrcis", + "1918554": "Lethe europa", + "1918584": "Lebadea martha", + "1918594": "Megeuptychia", + "1918596": "Megeuptychia antonoe", + "1918599": "Heterosais", + "1918601": "Heterosais edessa", + "1918607": "Hipparchia", + "1918627": "Hipparchia autonoe", + "1918632": "Hipparchia fidia", + "1918667": "Hipparchia parisatis", + "1918669": "Hipparchia fagi", + "1918688": "Hipparchia wyssii", + "1918694": "Hipparchia cretica", + "1918733": "Hipparchia volgensis", + "1918736": "Hipparchia fatua", + "1918776": "Hipparchia aristaeus", + "1918789": "Hipparchia cypriensis", + "1918795": "Hipparchia miguelensis", + "1918843": "Hipparchia pellucida", + "1918854": "Hipparchia syriaca", + "1918859": "Hipparchia neomiris", + "1918868": "Hipparchia hermione", + "1918912": "Sallya", + "1918933": "Bia", + "1918940": "Phyciodes", + "1918964": "Phyciodes pallida", + "1918968": "Phyciodes pallescens", + "1918972": "Phyciodes graphica", + "1918984": "Phyciodes phaon", + "1918986": "Phyciodes batesii", + "1918988": "Phyciodes tharos", + "1918999": "Argyreuptychia", + "1919007": "Argyreuptychia labe", + "1919010": "Argyreuptychia penelope", + "1919016": "Pyronia", + "1919119": "Neophasia", + "1919124": "Archonias", + "1919125": "Archonias brassolis", + "1919127": "Anteos", + "1919128": "Anteos maerula", + "1919129": "Anteos menippe", + "1919130": "Anteos clorinde", + "1919144": "Ganyra", + "1919145": "Ganyra howarthi", + "1919146": "Ganyra phaloe", + "1919149": "Ganyra josephina", + "1919150": "Pareronia", + "1919151": "Pareronia valeria", + "1919160": "Pareronia tritaea", + "1919161": "Pareronia ceylanica", + "1919168": "Lieinix", + "1919173": "Lieinix nemesis", + "1919175": "Belenois", + "1919176": "Belenois java", + "1919181": "Belenois aurota", + "1919194": "Belenois thysa", + "1919210": "Belenois calypso", + "1919213": "Belenois creona", + "1919214": "Belenois zochalia", + "1919219": "Elphinstonia", + "1919221": "Elphinstonia penia", + "1919223": "Elphinstonia charlonia", + "1919227": "Pereute", + "1919233": "Pereute swainsoni", + "1919235": "Pereute charops", + "1919238": "Perrhybris", + "1919239": "Perrhybris pamela", + "1919243": "Dismorphia", + "1919245": "Dismorphia crisia", + "1919267": "Dismorphia thermesia", + "1919277": "Dismorphia medora", + "1919282": "Dismorphia amphione", + "1919287": "Dismorphia spio", + "1919289": "Dismorphia theucharila", + "1919305": "Ascia", + "1919315": "Euchloe", + "1919316": "Euchloe lotta", + "1919317": "Euchloe tagis", + "1919320": "Euchloe ausonia", + "1919326": "Euchloe olympia", + "1919327": "Euchloe ausonides", + "1919328": "Euchloe creusa", + "1919330": "Euchloe simplonia", + "1919333": "Euchloe belemia", + "1919338": "Euchloe hyantis", + "1919339": "Catopsilia", + "1919340": "Catopsilia pomona", + "1919342": "Catopsilia gorgophone", + "1919344": "Catopsilia scylla", + "1919346": "Catopsilia florella", + "1919348": "Catopsilia pyranthe", + "1919351": "Delias", + "1919381": "Delias nysa", + "1919407": "Delias ninus", + "1919412": "Delias eucharis", + "1919419": "Delias harpalyce", + "1919421": "Delias argenthona", + "1919432": "Delias nigrina", + "1919438": "Delias descombesi", + "1919444": "Delias ennia", + "1919534": "Delias pasithoe", + "1919540": "Delias mysis", + "1919551": "Delias belladonna", + "1919564": "Delias belisama", + "1919581": "Delias agostina", + "1919589": "Delias hyparete", + "1919626": "Delias aganippe", + "1919635": "Delias acalis", + "1919645": "Phoebis", + "1919646": "Phoebis philea", + "1919649": "Phoebis neocypris", + "1919652": "Phoebis agarithe", + "1919653": "Phoebis sennae", + "1919656": "Phoebis argante", + "1919659": "Nepheronia", + "1919660": "Nepheronia thalassina", + "1919663": "Nepheronia buquetii", + "1919665": "Nepheronia argia", + "1919675": "Enantia", + "1919696": "Anthocharis", + "1919697": "Anthocharis bambusarum", + "1919698": "Anthocharis euphenoides", + "1919700": "Anthocharis sara", + "1919701": "Anthocharis thoosa", + "1919702": "Anthocharis lanceolata", + "1919703": "Anthocharis belia", + "1919705": "Anthocharis cethura", + "1919706": "Anthocharis gruneri", + "1919711": "Anthocharis midea", + "1919712": "Anthocharis cardamines", + "1919716": "Anthocharis damone", + "1919719": "Anthocharis julia", + "1919720": "Anthocharis scolymus", + "1919721": "Cepora", + "1919728": "Cepora iudith", + "1919731": "Cepora nadina", + "1919741": "Cepora nerissa", + "1919744": "Cepora perimale", + "1919756": "Cepora timnatha", + "1919758": "Cepora aspasia", + "1919762": "Cepora fora", + "1919919": "Dixeia", + "1919924": "Dixeia charina", + "1919929": "Dixeia spilleri", + "1919930": "Dixeia pigea", + "1919936": "Pyrisitia", + "1919937": "Pyrisitia venusta", + "1919939": "Pyrisitia lisa", + "1919943": "Pyrisitia nise", + "1919945": "Pyrisitia leuce", + "1919947": "Pyrisitia proterpia", + "1919949": "Pyrisitia dina", + "1919950": "Hebomoia", + "1919951": "Hebomoia glaucippe", + "1919962": "Zegris", + "1919966": "Zegris eupheme", + "1920160": "Ixias", + "1920180": "Pinacopteryx", + "1920181": "Pinacopteryx eriphia", + "1920190": "Nathalis", + "1920192": "Nathalis iole", + "1920218": "Aporia crataegi", + "1920236": "Pontia", + "1920237": "Pontia callidice", + "1920247": "Pontia chloridice", + "1920258": "Pontia daplidice", + "1920259": "Pontia edusa", + "1920261": "Hesperocharis", + "1920266": "Hesperocharis paranensis", + "1920274": "Pseudopieris", + "1920275": "Pseudopieris nehemia", + "1920283": "Eurema", + "1920346": "Colotis", + "1920348": "Colotis eris", + "1920349": "Colotis etrida", + "1920353": "Colotis regina", + "1920356": "Colotis aurora", + "1920357": "Colotis fausta", + "1920359": "Colotis chrysonome", + "1920362": "Colotis danae", + "1920363": "Colotis ione", + "1920369": "Colotis phisadia", + "1920370": "Colotis euippe", + "1920374": "Colotis amata", + "1920377": "Colotis aurigineus", + "1920378": "Colotis evenina", + "1920379": "Colotis celimene", + "1920381": "Colotis vesta", + "1920390": "Colotis pallene", + "1920395": "Colotis evagore", + "1920401": "Colotis antevippe", + "1920404": "Colotis subfasciatus", + "1920405": "Colotis auxo", + "1920412": "Leptosia", + "1920425": "Leptophobia", + "1920426": "Leptophobia aripa", + "1920431": "Leptophobia eleone", + "1920437": "Leptophobia caesia", + "1920451": "Dercas", + "1920454": "Dercas verhuelli", + "1920460": "Itaballia", + "1920461": "Itaballia pandosia", + "1920463": "Itaballia demophile", + "1920465": "Prioneris", + "1920467": "Prioneris philonome", + "1920469": "Prioneris thestylis", + "1920472": "Prioneris sita", + "1920481": "Pieris", + "1920491": "Pieris mannii", + "1920494": "Pieris napi", + "1920496": "Pieris rapae", + "1920498": "Pieris balcana", + "1920502": "Pieris krueperi", + "1920506": "Pieris brassicae", + "1920509": "Pieris cheiranthi", + "1920512": "Pieris ergane", + "1920513": "Gandaca", + "1920515": "Gandaca harina", + "1920523": "Elodina", + "1920534": "Elodina queenslandica", + "1920535": "Elodina angulipennis", + "1920538": "Elodina walkeri", + "1920541": "Elodina parthia", + "1920551": "Pieriballia", + "1920552": "Pieriballia viardi", + "1920554": "Leptidea", + "1920570": "Aphrissa", + "1920571": "Aphrissa statira", + "1920574": "Aphrissa neleis", + "1920580": "Kricogonia", + "1920581": "Kricogonia lyside", + "1920583": "Mathania", + "1920586": "Mathania leucothea", + "1920621": "Abaeis nicippe", + "1920622": "Appias", + "1920682": "Melete", + "1920691": "Melete lycimnia", + "1920702": "Eroessa", + "1920704": "Gonepteryx", + "1920707": "Gonepteryx farinosa", + "1920709": "Gonepteryx cleopatra", + "1920711": "Gonepteryx aspasia", + "1920712": "Gonepteryx rhamni", + "1920718": "Gonepteryx amintha", + "1920723": "Mylothris", + "1920785": "Saletara", + "1920786": "Saletara panda", + "1920793": "Glutophrissa", + "1920795": "Glutophrissa epaphia", + "1920803": "Glutophrissa drusilla", + "1920808": "Zerene", + "1920809": "Zerene cesonia", + "1920810": "Zerene eurydice", + "1920814": "Eronia", + "1920815": "Eronia cleodora", + "1920816": "Eronia leda", + "1920834": "Elkalyce", + "1920844": "Elkalyce comyntas", + "1920851": "Elkalyce argiades", + "1920864": "Elkalyce alcetas", + "1920889": "Elkalyce amyntula", + "1920892": "Elkalyce decolorata", + "1920900": "Elkalyce comyntas", + "1920921": "Theritas", + "1920923": "Theritas mavors", + "1920925": "Caleta", + "1920934": "Rapala", + "1920957": "Rapala pheretima", + "1920991": "Rapala suffusa", + "1920996": "Rapala arata", + "1921009": "Rapala manea", + "1921010": "Rapala varuna", + "1921021": "Rapala dieneces", + "1921040": "Rapala caerulea", + "1921044": "Rapala iarbus", + "1921052": "Hypostrymon", + "1921053": "Hypostrymon critola", + "1921054": "Una", + "1921055": "Una usta", + "1921060": "Zintha", + "1921064": "Zintha hintza", + "1921065": "Luthrodes", + "1921088": "Surendra", + "1921092": "Surendra quercetorum", + "1921093": "Surendra vivarna", + "1921118": "Iaspis", + "1921120": "Tmolus", + "1921123": "Tmolus echion", + "1921138": "Pseudozizeeria", + "1921150": "Pseudozizeeria maha", + "1921156": "Taraka", + "1921163": "Taraka hamada", + "1921235": "Incisalia", + "1921239": "Incisalia eryphon", + "1921240": "Incisalia henrici", + "1921247": "Incisalia augustinus", + "1921248": "Incisalia lanoraieensis", + "1921255": "Incisalia niphon", + "1921257": "Catopyrops", + "1921262": "Catopyrops florinda", + "1921263": "Catopyrops ancyra", + "1921287": "Erysichton", + "1921300": "Erysichton lineata", + "1921439": "Agrodiaetus", + "1921466": "Agrodiaetus admetus", + "1921521": "Agrodiaetus humedasae", + "1921590": "Agrodiaetus fulgens", + "1921632": "Creon", + "1921633": "Creon cleobis", + "1921642": "Spalgis", + "1921650": "Spalgis lemolea", + "1921657": "Danis", + "1921895": "Neozephyrus", + "1921897": "Neozephyrus taiwanus", + "1921908": "Harkenclenus", + "1921910": "Harkenclenus titus", + "1921918": "Lamprospilus", + "1921987": "Stalachtis", + "1921992": "Stalachtis phlegia", + "1921993": "Stalachtis euterpe", + "1922015": "Stalachtis calliope", + "1922024": "Stalachtis susanna", + "1922028": "Mitoura", + "1922038": "Mitoura gryneus", + "1922039": "Mitoura gryneus", + "1922041": "Mitoura spinetorum", + "1922044": "Mitoura hesseli", + "1922049": "Mitoura gryneus", + "1922054": "Manto", + "1922057": "Manto hypoleuca", + "1922059": "Leptomyrina", + "1922063": "Leptomyrina phidias", + "1922064": "Leptomyrina hirundo", + "1922068": "Tajuria", + "1922085": "Tajuria jehana", + "1922111": "Tajuria maculatus", + "1922143": "Tajuria cippus", + "1922152": "Eooxylides", + "1922163": "Eooxylides tharis", + "1922191": "Laeosopis", + "1922197": "Laeosopis roboris", + "1922218": "Erora", + "1922219": "Erora quaderna", + "1922223": "Erora laeta", + "1922236": "Zizula", + "1922244": "Zizula hylax", + "1922270": "Chilades", + "1922285": "Chilades laius", + "1922288": "Chilades parrhasius", + "1922291": "Chilades eleusis", + "1922297": "Kretania", + "1922308": "Maculinea", + "1922311": "Maculinea arion", + "1922343": "Maculinea nausithous", + "1922454": "Electrostrymon", + "1922455": "Electrostrymon hugon", + "1922465": "Hemiolaus", + "1922468": "Hemiolaus caeculus", + "1922516": "Loxura", + "1922569": "Pseudophilotes", + "1922572": "Pseudophilotes abencerragus", + "1922584": "Pseudophilotes baton", + "1922635": "Pseudolycaena", + "1922637": "Pseudolycaena marsyas", + "1922672": "Habrodais", + "1922676": "Habrodais grunus", + "1922677": "Pseudonacaduba", + "1922679": "Pseudonacaduba sichela", + "1922682": "Axiocerses", + "1922689": "Axiocerses harpax", + "1922694": "Axiocerses amanga", + "1922701": "Axiocerses tjoane", + "1922712": "Japonica", + "1922735": "Pseudolucia", + "1922739": "Pseudolucia chilensis", + "1922740": "Ionolyce", + "1922745": "Ionolyce helicon", + "1922760": "Sithon", + "1922771": "Sithon nedymond", + "1922827": "Calycopis", + "1922849": "Calycopis bellera", + "1922851": "Calycopis cecrops", + "1922865": "Calycopis isobeon", + "1922867": "Calycopis caulonia", + "1922868": "Calycopis origo", + "1922888": "Cyanophrys", + "1922889": "Cyanophrys miserabilis", + "1922890": "Cyanophrys longula", + "1922918": "Vacciniina", + "1922937": "Vacciniina optilete", + "1922953": "Logania", + "1922993": "Semanga", + "1922994": "Semanga superba", + "1923013": "Iolana", + "1923019": "Iolana iolas", + "1923037": "Iolana debilitata", + "1923058": "Plebejus", + "1923457": "Thaduka", + "1923458": "Thaduka multicaudata", + "1923462": "Eicochrysops", + "1923465": "Eicochrysops hippocrates", + "1923473": "Eicochrysops messapus", + "1923487": "Yasoda", + "1923491": "Yasoda tripunctata", + "1923497": "Phaeostrymon", + "1923498": "Phaeostrymon alcestis", + "1923499": "Atlides", + "1923505": "Atlides halesus", + "1923510": "Allotinus", + "1923525": "Allotinus unicolor", + "1923621": "Heliophorus", + "1923649": "Heliophorus brahma", + "1923650": "Heliophorus sena", + "1923651": "Heliophorus epicles", + "1923668": "Heliophorus ila", + "1923675": "Chlorostrymon", + "1923678": "Chlorostrymon telea", + "1923679": "Chlorostrymon simaethis", + "1923699": "Hypochrysops", + "1923744": "Hypochrysops narcissus", + "1923782": "Hypochrysops delicia", + "1923795": "Pseudoaricia", + "1923796": "Pseudoaricia nicias", + "1923808": "Edales", + "1923809": "Edales pandava", + "1923835": "Miletus", + "1923883": "Miletus biggsii", + "1923917": "Miletus chinensis", + "1923996": "Arcas", + "1923997": "Arcas imperialis", + "1924035": "Antigius", + "1924044": "Antigius attilia", + "1924047": "Glaucopsyche", + "1924050": "Glaucopsyche piasus", + "1924057": "Glaucopsyche lycormas", + "1924077": "Glaucopsyche paphos", + "1924082": "Glaucopsyche melanops", + "1924097": "Glaucopsyche alexis", + "1924106": "Glaucopsyche lygdamus", + "1924171": "Echinargus", + "1924176": "Echinargus isola", + "1924181": "Megisba", + "1924193": "Megisba malaya", + "1924221": "Tharsalea", + "1924223": "Tharsalea rubidus", + "1924232": "Tharsalea arota", + "1924241": "Nordmannia", + "1924272": "Acytolepis", + "1924298": "Acytolepis puspa", + "1924315": "Discolampa", + "1924323": "Discolampa ethion", + "1924333": "Deudorix", + "1924362": "Deudorix diovis", + "1924390": "Deudorix epijarbas", + "1924392": "Deudorix diocles", + "1924417": "Deudorix elioti", + "1924429": "Deudorix dinochares", + "1924447": "Remelana", + "1924458": "Remelana jangala", + "1924494": "Loweia tityrus", + "1924511": "Philotes", + "1924513": "Philotes pallescens", + "1924518": "Philotes sonorensis", + "1924521": "Philotes bernardino", + "1924522": "Chrysoritis", + "1924548": "Psychonotis", + "1924558": "Psychonotis caelius", + "1924564": "Lampides", + "1924713": "Lampides boeticus", + "1924749": "Arawacus", + "1924754": "Arawacus separata", + "1924755": "Symbiopsis", + "1924759": "Symbiopsis lenitas", + "1924767": "Feniseca", + "1924770": "Feniseca tarquinius", + "1924772": "Phasis", + "1924798": "Lysandra", + "1924867": "Lysandra caelestissima", + "1925221": "Lysandra coridon", + "1925233": "Lysandra bellargus", + "1925355": "Phengaris", + "1925375": "Thersamonia", + "1925381": "Thersamonia thersamon", + "1925409": "Cyclyrius", + "1925410": "Cyclyrius webbianus", + "1925423": "Strymon", + "1925429": "Strymon melinus", + "1925454": "Strymon acaciae", + "1925458": "Strymon caryaevorus", + "1925498": "Strymon sylvinus", + "1925500": "Strymon kingi", + "1925501": "Strymon saepium", + "1925509": "Strymon acadica", + "1925515": "Strymon alea", + "1925542": "Zeltus", + "1925543": "Zeltus amasa", + "1925550": "Neolucia", + "1925555": "Neolucia agricola", + "1925584": "Anthene", + "1925609": "Anthene amarah", + "1925615": "Anthene definita", + "1925628": "Anthene lycaenoides", + "1925676": "Anthene lunulata", + "1925679": "Anthene philo", + "1925693": "Anthene livida", + "1925694": "Anthene larydas", + "1925711": "Anthene seltuttus", + "1925731": "Anthene emolus", + "1925743": "Anthene lycaenina", + "1925782": "Jalmenus", + "1925800": "Durbaniopsis", + "1925801": "Durbaniopsis saga", + "1925804": "Celastrina", + "1925877": "Celastrina lavendularis", + "1925918": "Celastrina argiolus", + "1925922": "Celastrina echo", + "1925960": "Helleia", + "1925962": "Helleia helle", + "1925996": "Euphilotes", + "1926001": "Euphilotes glaucon", + "1926009": "Euphilotes enoptes", + "1926044": "Agriades", + "1926054": "Agriades glandon", + "1926166": "Cupido lorquinii", + "1926260": "Cupido minimus", + "1926317": "Quercusia", + "1926324": "Quercusia quercus", + "1926384": "Tomares", + "1926385": "Tomares ballus", + "1926426": "Prosotas", + "1926436": "Prosotas dubiosa", + "1926437": "Prosotas lutea", + "1926446": "Prosotas aluta", + "1926448": "Prosotas nora", + "1926456": "Prosotas noreia", + "1926460": "Prosotas felderi", + "1926526": "Azanus", + "1926530": "Azanus moriqua", + "1926531": "Azanus natalensis", + "1926539": "Azanus mirza", + "1926546": "Azanus jesous", + "1926550": "Azanus ubaldus", + "1926552": "Udara", + "1926574": "Udara dilectus", + "1926588": "Ancema", + "1926593": "Ancema blanka", + "1926611": "Ancema ctesia", + "1926709": "Cigaritis", + "1926722": "Cigaritis acamas", + "1926780": "Neopithecops", + "1926800": "Neopithecops zalmora", + "1926814": "Crudaria", + "1926817": "Crudaria leroma", + "1926818": "Lycaeides", + "1926823": "Lycaeides anna", + "1926834": "Lycaeides melissa", + "1926861": "Lycaeides idas", + "1926956": "Arhopala", + "1926972": "Arhopala aedias", + "1927025": "Arhopala atosia", + "1927034": "Arhopala bazalus", + "1927217": "Arhopala birmana", + "1927219": "Arhopala eumolphus", + "1927242": "Arhopala abseus", + "1927272": "Arhopala epimuta", + "1927274": "Arhopala madytus", + "1927284": "Arhopala amantes", + "1927299": "Cyclargus", + "1927301": "Cyclargus ammon", + "1927302": "Cyclargus thomasi", + "1927305": "Actizera", + "1927313": "Actizera lucida", + "1927317": "Poritia", + "1927348": "Poritia hewitsoni", + "1927390": "Pithecops", + "1927393": "Pithecops corvus", + "1927405": "Aphnaeus", + "1927439": "Aphnaeus lohita", + "1927445": "Aphnaeus lilacinus", + "1927521": "Lepidochrysops", + "1927633": "Lepidochrysops patricia", + "1927696": "Bindahara", + "1927707": "Bindahara phocides", + "1927711": "Ticherra", + "1927717": "Ticherra acte", + "1927718": "Satyrium", + "1927884": "Theclinesthes", + "1927894": "Theclinesthes serpentata", + "1927895": "Theclinesthes sulpitius", + "1927897": "Theclinesthes miskini", + "1927900": "Theclinesthes onycha", + "1927901": "Sandia", + "1927903": "Nomiades", + "1927909": "Nomiades acis", + "1927916": "Aloeides", + "1927943": "Aloeides pierus", + "1927955": "Aloeides damarensis", + "1927979": "Aloeides aranda", + "1927984": "Hemiargus", + "1927988": "Hemiargus ceraunus", + "1927992": "Hemiargus ramon", + "1927996": "Hemiargus hanno", + "1928008": "Rekoa", + "1928009": "Rekoa meton", + "1928015": "Paralucia", + "1928018": "Paralucia pyrodiscus", + "1928054": "Zeritis", + "1928070": "Zeritis chrysaor", + "1928073": "Argiolaus", + "1928076": "Argiolaus silarus", + "1928213": "Ministrymon", + "1928214": "Ministrymon leda", + "1928215": "Ministrymon clytie", + "1928217": "Scolitantides", + "1928248": "Scolitantides orion", + "1928254": "Freyeria", + "1928328": "Sinthusa", + "1928349": "Sinthusa nasaka", + "1928361": "Sinthusa chandrana", + "1928373": "Petrelaea", + "1928376": "Petrelaea dana", + "1928382": "Petrelaea tombugensis", + "1928385": "Lachnocnema", + "1928389": "Lachnocnema bibulus", + "1928404": "Pratapa", + "1928419": "Pratapa deva", + "1928447": "Cyaniris", + "1928581": "Michaelus", + "1928584": "Michaelus ira", + "1928589": "Michaelus jebus", + "1928626": "Zesius", + "1928628": "Zesius chrysomallus", + "1928632": "Myrina", + "1928733": "Stugeta", + "1928746": "Stugeta bowkeri", + "1928753": "Sarthusia", + "1928754": "Sarthusia ophion", + "1928780": "Jamides", + "1928829": "Jamides phaseli", + "1928849": "Jamides alecto", + "1928908": "Jamides bochus", + "1928915": "Jamides celeno", + "1928917": "Pseudalmenus", + "1928923": "Pseudalmenus chlorinda", + "1928931": "Palaeochrysophanus", + "1928945": "Palaeochrysophanus hippothoe", + "1928960": "Palaeochrysophanus candens", + "1929039": "Panthiades", + "1929046": "Panthiades bitias", + "1929049": "Panthiades hebraeus", + "1929057": "Cupidopsis", + "1929059": "Cupidopsis jobates", + "1929128": "Callicista", + "1929129": "Callicista istapa", + "1929153": "Lycaena", + "1929270": "Lycaena dispar", + "1929402": "Lycaena thetis", + "1929659": "Lycaena virgaureae", + "1929697": "Lycaena phlaeas", + "1929768": "Thecla", + "1929772": "Thecla sylvinus", + "1929962": "Thecla melinus", + "1929966": "Thecla stagira", + "1930079": "Thecla herodotus", + "1930110": "Thecla betulae", + "1930146": "Thecla ziba", + "1930167": "Thecla cestri", + "1930178": "Thecla yojoa", + "1930179": "Thecla polybe", + "1930181": "Thecla demonassa", + "1930183": "Thecla sheridanii", + "1930263": "Thecla angelia", + "1930270": "Thecla celmus", + "1930288": "Thecla bebrycia", + "1930289": "Thecla thales", + "1930331": "Thecla tetra", + "1930361": "Thecla bathildis", + "1930391": "Thecla martialis", + "1930410": "Thecla cydrara", + "1930422": "Thecla marius", + "1930451": "Thecla ambrax", + "1930466": "Thecla badaca", + "1930481": "Thecla johnsoni", + "1930539": "Thecla cruenta", + "1930563": "Thecla azia", + "1930581": "Thecla maesites", + "1930621": "Thecla aetolus", + "1930653": "Thecla rufofusca", + "1930654": "Thecla lydus", + "1930660": "Thecla irus", + "1930678": "Thecla augustinus", + "1930728": "Thecla syllis", + "1930772": "Thecla una", + "1930779": "Thecla ecbatana", + "1930830": "Thecla strophius", + "1930832": "Thecla formosanum", + "1930893": "Tarucus", + "1930904": "Tarucus theophrastus", + "1930916": "Tarucus rosacea", + "1930923": "Tarucus thespis", + "1930931": "Tarucus sybaris", + "1930935": "Tarucus nara", + "1930950": "Chliaria", + "1930954": "Chliaria othona", + "1930968": "Chliaria kina", + "1931032": "Alaena", + "1931046": "Alaena amazoula", + "1931092": "Cheritra", + "1931109": "Cheritra freja", + "1931110": "Parrhasius", + "1931116": "Parrhasius m-album", + "1931119": "Parrhasius polibetes", + "1931122": "Parrhasius orgia", + "1931125": "Xamia", + "1931126": "Xamia xami", + "1931131": "Ginzia", + "1931132": "Ginzia ferrea", + "1931144": "Mahathala", + "1931148": "Mahathala ameria", + "1931173": "Tuttiola", + "1931179": "Tuttiola spini", + "1931187": "Philiris", + "1931189": "Philiris innotatus", + "1931306": "Evenus", + "1931309": "Oenomaus", + "1931310": "Oenomaus ortygnus", + "1931390": "Pentila", + "1931403": "Pentila pauli", + "1931437": "Pentila tropicalis", + "1931495": "Thestor", + "1931509": "Thestor callimachus", + "1931542": "Epidemia", + "1931553": "Epidemia dorcas", + "1931560": "Tongeia", + "1931561": "Tongeia fischeri", + "1931647": "Curetis", + "1931655": "Curetis saronis", + "1931656": "Curetis thetis", + "1931706": "Curetis acuta", + "1931729": "Curetis santana", + "1931735": "Curetis bulis", + "1931775": "Fixsenia", + "1931779": "Fixsenia pruni", + "1931784": "Fixsenia favonius", + "1931787": "Fixsenia favonius", + "1931788": "Fixsenia esculi", + "1931802": "Eumaeus", + "1931823": "Lucia", + "1931848": "Nacaduba", + "1931889": "Nacaduba biocellata", + "1931906": "Nacaduba sanaya", + "1931908": "Nacaduba pavana", + "1931943": "Nacaduba hermus", + "1931956": "Nacaduba kurava", + "1931958": "Nacaduba berenice", + "1931979": "Nacaduba calauria", + "1931997": "Nacaduba pactolus", + "1932020": "Nacaduba beroe", + "1932039": "Artipe", + "1932043": "Artipe eryx", + "1932052": "Icaricia", + "1932056": "Icaricia icarioides", + "1932134": "Catochrysops", + "1932159": "Catochrysops panormus", + "1932166": "Catochrysops strabo", + "1932169": "Brephidium", + "1932172": "Brephidium exilis", + "1932175": "Brephidium pseudofea", + "1932177": "Brephidium metophis", + "1932182": "Jacoona", + "1932189": "Jacoona anasuja", + "1932194": "Hypolycaena", + "1932206": "Hypolycaena sipylus", + "1932246": "Hypolycaena phorbas", + "1932273": "Hypolycaena erylus", + "1932287": "Hypolycaena thecloides", + "1932302": "Hypolycaena philippus", + "1932323": "Euchrysops", + "1932332": "Euchrysops malathana", + "1932354": "Euchrysops barkeri", + "1932378": "Callophrys", + "1932386": "Callophrys dumetorum", + "1932393": "Callophrys avis", + "1932406": "Callophrys fotis", + "1932409": "Callophrys affinis", + "1932411": "Callophrys rubi", + "1932414": "Callophrys viridis", + "1932417": "Callophrys polios", + "1932428": "Callophrys affinis", + "1932450": "Plebicula", + "1932473": "Plebicula dorylas", + "1932517": "Plebicula golgus", + "1932551": "Plebicula escheri", + "1932562": "Zizina", + "1932563": "Zizina otis", + "1932574": "Ocaria", + "1932576": "Ocaria ocrisia", + "1932578": "Castalius", + "1932580": "Castalius calice", + "1932607": "Castalius rosimon", + "1932629": "Castalius melaena", + "1932636": "Spindasis", + "1932749": "Cacyreus", + "1932751": "Cacyreus lingeus", + "1932752": "Cacyreus marshalli", + "1932753": "Cacyreus fracta", + "1932810": "Iraota", + "1932812": "Iraota rochana", + "1932814": "Iraota timoleon", + "1932850": "Flos", + "1932863": "Flos apidanus", + "1932878": "Dolymorpha", + "1932879": "Dolymorpha jada", + "1932880": "Uranothauma", + "1932882": "Uranothauma falkensteini", + "1932904": "Candalides", + "1932908": "Candalides xanthospilos", + "1932941": "Albulina", + "1932960": "Albulina orbitulus", + "1932963": "Leptotes", + "1932976": "Leptotes pirithous", + "1933012": "Horaga", + "1933028": "Horaga albimacula", + "1933044": "Horaga onyx", + "1933083": "Rathinda", + "1933084": "Rathinda amor", + "1933089": "Turanana", + "1933095": "Aricia agestis", + "1933126": "Aricia montensis", + "1933138": "Aricia artaxerxes", + "1933163": "Aricia morronensis", + "1933204": "Aricia cramera", + "1933256": "Chalybs", + "1933260": "Chalybs hassan", + "1933268": "Polyommatus", + "1933579": "Charana", + "1933583": "Charana dea", + "1933641": "Zizeeria", + "1933647": "Zizeeria karsandra", + "1933649": "Zizeeria knysna", + "1933677": "Talicada", + "1933679": "Talicada nyseus", + "1933756": "Eumedonia", + "1933793": "Eumedonia eumedon", + "1933795": "Amblypodia", + "1933844": "Amblypodia bazalus", + "1933845": "Amblypodia anita", + "1933942": "Drupadia", + "1933996": "Hypaurotis", + "1933998": "Hypaurotis crysalus", + "1933999": "Riodinidae", + "1934046": "Helicopis", + "1934172": "Necyria bellona", + "1934186": "Dodona", + "1934187": "Dodona adonira", + "1934188": "Dodona dipoea", + "1934192": "Dodona durga", + "1934211": "Dodona egeon", + "1934213": "Dodona deodata", + "1934221": "Dodona formosana", + "1934326": "Nelone", + "1934331": "Nelone cadmeis", + "1934442": "Cartea", + "1934447": "Cartea ucayala", + "1934515": "Nymula", + "1934570": "Nymula calyce", + "1934690": "Hamearis", + "1934693": "Hamearis lucina", + "1934713": "Parcella", + "1934715": "Parcella amarynthina", + "1934983": "Notheme", + "1934991": "Notheme erota", + "1935072": "Amarynthis", + "1935078": "Amarynthis meneria", + "1935294": "Juditha", + "1935295": "Juditha molpe", + "1935301": "Juditha caucana", + "1935340": "Riodina", + "1935343": "Riodina lysippus", + "1935346": "Riodina lysippoides", + "1935350": "Riodina lycisca", + "1935356": "Abisara", + "1935363": "Abisara savitri", + "1935372": "Abisara geza", + "1935377": "Abisara neophron", + "1935405": "Abisara bifasciata", + "1935408": "Abisara saturata", + "1935410": "Abisara echerius", + "1935454": "Abisara fylla", + "1935459": "Abisara burnii", + "1935498": "Melanis agyrtus", + "1935610": "Laxita", + "1935614": "Laxita thuisto", + "1935826": "Zemeros", + "1935838": "Zemeros emesoides", + "1935849": "Zemeros flegyas", + "1935852": "Emesis", + "1935853": "Emesis vulpina", + "1935869": "Emesis russula", + "1935872": "Emesis aurimna", + "1935878": "Emesis poeas", + "1935884": "Emesis rawsoni", + "1935888": "Emesis mandana", + "1935899": "Emesis muticum", + "1935901": "Emesis ocypore", + "1935904": "Emesis zela", + "1935912": "Emesis fastidiosa", + "1935916": "Emesis fatimella", + "1935925": "Emesis cypria", + "1935931": "Emesis wrighti", + "1935935": "Emesis tenedia", + "1935968": "Thisbe", + "1936026": "Mesene phareus", + "1936158": "Perophthalma", + "1936161": "Perophthalma tullius", + "1936231": "Zabuella", + "1936233": "Zabuella tenellus", + "1936309": "Crocozona", + "1936312": "Crocozona coecias", + "1936370": "Rhetus", + "1936378": "Rhetus periander", + "1936388": "Rhetus arcius", + "1936391": "Rhetus dysonii", + "1936473": "Aricoris", + "1936531": "Polystichtis", + "1936565": "Polystichtis emylius", + "1936566": "Polystichtis lucianus", + "1936609": "Hades", + "1936648": "Calociasma", + "1936649": "Calociasma lilina", + "1936810": "Euselasia eucerus", + "1936859": "Euselasia thucydides", + "1936964": "Heraclides", + "1936968": "Archon", + "1936969": "Archon apollinus", + "1936987": "Troides", + "1936988": "Troides aeacus", + "1936993": "Troides helena", + "1937011": "Troides amphrysus", + "1937037": "Troides rhadamantus", + "1937055": "Troides minos", + "1937063": "Parides", + "1937064": "Parides neophilus", + "1937090": "Parides anchises", + "1937109": "Parides childrenae", + "1937110": "Parides sesostris", + "1937124": "Parides montezuma", + "1937129": "Parides bunichus", + "1937136": "Parides eurimedes", + "1937144": "Parides iphidamas", + "1937155": "Parides agavus", + "1937162": "Parides photinus", + "1937165": "Parides proneus", + "1937167": "Parides erithalion", + "1937188": "Graphium", + "1937440": "Ornithoptera", + "1937444": "Ornithoptera priamus", + "1937474": "Ornithoptera richmondia", + "1937489": "Sericinus", + "1937490": "Sericinus montela", + "1937511": "Trogonoptera", + "1937514": "Trogonoptera brookiana", + "1937519": "Mimoides", + "1937527": "Mimoides thymbraeus", + "1937530": "Mimoides arianus", + "1937540": "Mimoides lysithous", + "1937555": "Byasa", + "1937556": "Byasa alcinous", + "1937566": "Byasa impediens", + "1937570": "Byasa polyeuctes", + "1937580": "Byasa dasarada", + "1937582": "Byasa mencius", + "1937592": "Atrophaneura", + "1937594": "Atrophaneura horishanus", + "1937613": "Atrophaneura chara", + "1937617": "Cressida", + "1937618": "Cressida cressida", + "1937642": "Papilio eurymedon", + "1937643": "Papilio echerioides", + "1937655": "Papilio anchisiades", + "1937665": "Papilio deiphobus", + "1937667": "Papilio dardanus", + "1937688": "Papilio ornythion", + "1937691": "Papilio rutulus", + "1937698": "Papilio anactus", + "1937699": "Papilio gigon", + "1937702": "Papilio nireus", + "1937707": "Papilio castor", + "1937711": "Papilio constantinus", + "1937712": "Papilio aegeus", + "1937722": "Papilio pilumnus", + "1937723": "Papilio bianor", + "1937739": "Papilio canadensis", + "1937745": "Papilio canopus", + "1937751": "Papilio zelicaon", + "1937754": "Papilio thaiwanus", + "1937758": "Papilio palamedes", + "1937769": "Papilio fuscus", + "1937792": "Papilio buddha", + "1937793": "Papilio torquatus", + "1937803": "Papilio multicaudata", + "1937816": "Papilio polyxenes", + "1937819": "Papilio xuthus", + "1937826": "Papilio nephelus", + "1937846": "Papilio cresphontes", + "1937847": "Papilio iswara", + "1937849": "Papilio phorcas", + "1937856": "Papilio euchenor", + "1937885": "Papilio thoas", + "1937892": "Papilio agenor", + "1937911": "Papilio paris", + "1937931": "Papilio crino", + "1937937": "Papilio ascalaphus", + "1937959": "Papilio ophidicephalus", + "1937966": "Papilio palinurus", + "1937974": "Papilio indra", + "1937975": "Papilio peranthus", + "1937988": "Papilio ulysses", + "1938007": "Papilio dialis", + "1938016": "Papilio glaucus", + "1938022": "Papilio astyalus", + "1938029": "Papilio dravidarum", + "1938050": "Papilio hospiton", + "1938052": "Papilio protenor", + "1938058": "Papilio macilentus", + "1938059": "Papilio garamas", + "1938069": "Papilio demoleus", + "1938074": "Papilio ambrax", + "1938081": "Papilio brevicauda", + "1938088": "Papilio polytes", + "1938104": "Papilio troilus", + "1938112": "Papilio androgeus", + "1938114": "Papilio helenus", + "1938122": "Papilio demolion", + "1938125": "Papilio demodocus", + "1938129": "Papilio alphenor", + "1938131": "Papilio alexanor", + "1938147": "Papilio polymnestor", + "1938148": "Papilio scamander", + "1938156": "Papilio liomedon", + "1938159": "Papilio andraemon", + "1938162": "Papilio demetrius", + "1938166": "Papilio delalandei", + "1938168": "Papilio maackii", + "1938174": "Papilio alcmenor", + "1938213": "Iphiclides", + "1938214": "Iphiclides podalirius", + "1938225": "Luehdorfia", + "1938226": "Luehdorfia chinensis", + "1938230": "Luehdorfia japonica", + "1938233": "Luehdorfia puziloi", + "1938238": "Parnassius", + "1938300": "Parnassius nomion", + "1938446": "Parnassius clodius", + "1938520": "Parnassius mnemosyne", + "1938612": "Parnassius stubbendorfii", + "1938796": "Parnassius glacialis", + "1938810": "Parnassius apollo", + "1938955": "Parnassius phoebus", + "1938975": "Parnassius smintheus", + "1939056": "Parnassius eversmanni", + "1939085": "Chilasa", + "1939086": "Chilasa clytia", + "1939129": "Protographium", + "1939130": "Protographium epidaus", + "1939131": "Protographium leosthenes", + "1939134": "Protographium marcellus", + "1939136": "Protographium philolaus", + "1939143": "Protographium asius", + "1939152": "Pachliopta", + "1939156": "Pachliopta polydorus", + "1939168": "Pachliopta aristolochiae", + "1939180": "Pachliopta pandiyana", + "1939215": "Pachliopta hector", + "1939221": "Losaria", + "1939225": "Losaria neptunus", + "1939297": "Battus", + "1939301": "Lamproptera", + "1939314": "Pharmacophagus antenor", + "1939330": "Eurytides", + "1939336": "Eurytides dolicaon", + "1939342": "Pterourus", + "1939401": "Tischeria", + "1939432": "Tischeria ekebladella", + "1939460": "Tischeria quercitella", + "1939497": "Petavia", + "1939510": "Petavia attenuata", + "1939519": "Pterodecta", + "1939520": "Pterodecta felderi", + "1939594": "Neopseustis", + "1939597": "Neopseustis meyricki", + "1939616": "Micropterix", + "1939647": "Micropterix ibericella", + "1939658": "Micropterix tunbergella", + "1939677": "Micropterix calthella", + "1939680": "Micropterix mansuetella", + "1939688": "Micropterix aureatella", + "1939717": "Micropterix schaefferi", + "1939833": "Paranthrene simulans", + "1939879": "Paranthrene tabaniformis", + "1939952": "Albuna", + "1939962": "Albuna fraxini", + "1939964": "Albuna pyramidalis", + "1940108": "Alcathoe", + "1940110": "Alcathoe caudata", + "1940133": "Pyropteron", + "1940158": "Pyropteron chrysidiformis", + "1940447": "Sesia", + "1940500": "Synanthedon", + "1940504": "Synanthedon conopiformis", + "1940510": "Synanthedon formicaeformis", + "1940517": "Synanthedon polygoni", + "1940546": "Synanthedon rileyana", + "1940575": "Synanthedon tipuliformis", + "1940580": "Synanthedon decipiens", + "1940601": "Synanthedon resplendens", + "1940604": "Synanthedon pictipes", + "1940609": "Synanthedon arkansasensis", + "1940612": "Synanthedon kathyae", + "1940639": "Synanthedon scoliaeformis", + "1940644": "Synanthedon vespiformis", + "1940694": "Synanthedon sapygaeformis", + "1940717": "Synanthedon andrenaeformis", + "1940744": "Synanthedon culiciformis", + "1940757": "Synanthedon bibionipennis", + "1940768": "Synanthedon spheciformis", + "1940797": "Pennisetia", + "1940807": "Pennisetia hylaeiformis", + "1940810": "Bembecia", + "1940838": "Bembecia ichneumoniformis", + "1941266": "Carmenta pyralidiformis", + "1941294": "Carmenta ithacae", + "1941299": "Carmenta bassiformis", + "1941309": "Podosesia", + "1941310": "Podosesia syringae", + "1941316": "Chamaesphecia", + "1941330": "Chamaesphecia aerifrons", + "1941348": "Chamaesphecia bibioniformis", + "1941377": "Chamaesphecia tenthrediniformis", + "1941437": "Chamaesphecia empiformis", + "1941561": "Castnia", + "1941570": "Castnia licus", + "1941674": "Synemon", + "1941683": "Synemon parthenoides", + "1941702": "Synemon theresa", + "1941713": "Synemon plana", + "1941716": "Castniomera", + "1941717": "Castniomera atymnius", + "1941719": "Castniomera atymnius", + "1941863": "Paysandisia", + "1941864": "Paysandisia archon", + "1941927": "Phycodes", + "1942052": "Arrhenes", + "1942060": "Arrhenes dschilus", + "1942067": "Arrhenes marnas", + "1942086": "Hyalothyrus", + "1942098": "Hyalothyrus neleus", + "1942128": "Staphylus", + "1942141": "Staphylus hayhurstii", + "1942170": "Staphylus vulgata", + "1942171": "Staphylus ceos", + "1942206": "Staphylus musculus", + "1942234": "Arnetta", + "1942244": "Arnetta vindhiana", + "1942250": "Tapena", + "1942251": "Tapena thwaitesi", + "1942255": "Odina", + "1942264": "Anastrus", + "1942324": "Milanion", + "1942327": "Milanion leucaspis", + "1942339": "Dardarina", + "1942341": "Dardarina dardaris", + "1942369": "Theagenes", + "1942370": "Theagenes dichrous", + "1942372": "Theagenes albiplaga", + "1942373": "Ampittia", + "1942378": "Ampittia dioscorides", + "1942383": "Ampittia virgata", + "1942404": "Mellana", + "1942416": "Mellana eulogius", + "1942442": "Niconiades", + "1942455": "Niconiades nikko", + "1942503": "Proteides", + "1942509": "Proteides mercurius", + "1942522": "Psolos fuligo", + "1942523": "Copaeodes", + "1942552": "Paches", + "1942558": "Paches loxus", + "1942608": "Ocybadistes", + "1942618": "Ocybadistes walkeri", + "1942621": "Ocybadistes ardea", + "1942623": "Ocybadistes flavovittata", + "1942628": "Suniana", + "1942636": "Suniana sunias", + "1942641": "Suniana lascivia", + "1942655": "Euschemon", + "1942669": "Stinga", + "1942670": "Stinga morrisoni", + "1942671": "Dispar", + "1942674": "Dispar compacta", + "1942686": "Xenophanes", + "1942692": "Thoressa", + "1942697": "Thoressa varia", + "1942715": "Thoressa masoni", + "1942755": "Sarangesa", + "1942762": "Sarangesa seineri", + "1942769": "Sarangesa purendra", + "1942790": "Sarangesa phidyle", + "1942793": "Sarangesa motozi", + "1942808": "Sarangesa dasahara", + "1942827": "Suastus", + "1942836": "Suastus everyx", + "1942846": "Xeniades", + "1942854": "Xeniades orchamus", + "1942857": "Heteropterus", + "1942876": "Pirdana", + "1942878": "Pirdana hyela", + "1942944": "Euphyes", + "1942945": "Euphyes conspicua", + "1942947": "Euphyes vestris", + "1942964": "Euphyes bimacula", + "1942967": "Euphyes dukesi", + "1942971": "Euphyes berryi", + "1942980": "Euphyes arpa", + "1942982": "Euphyes pilatka", + "1942994": "Euphyes dion", + "1942996": "Hesperopsis", + "1943046": "Piruna", + "1943054": "Piruna aea", + "1943066": "Piruna pirus", + "1943068": "Hesperilla", + "1943089": "Hesperilla ornata", + "1943090": "Hesperilla donnysa", + "1943096": "Hesperilla idothea", + "1943101": "Hesperilla picta", + "1943127": "Cogia", + "1943165": "Polythrix", + "1943205": "Pasma", + "1943211": "Parnara", + "1943212": "Parnara guttatus", + "1943223": "Parnara ganga", + "1943236": "Parnara bada", + "1943250": "Parnara amalia", + "1943307": "Pyroneura", + "1943308": "Pyroneura latoia", + "1943357": "Carcharodus", + "1943397": "Carcharodus floccifera", + "1943433": "Mooreana", + "1943469": "Trina", + "1943475": "Trina geometrina", + "1943497": "Caprona", + "1943505": "Caprona alida", + "1943519": "Caprona ransonnettii", + "1943555": "Panoquina", + "1943563": "Panoquina evansi", + "1943571": "Panoquina ocola", + "1943573": "Panoquina panoquin", + "1943588": "Panoquina panoquinoides", + "1943613": "Odontoptilum", + "1943619": "Odontoptilum angulata", + "1943625": "Odontoptilum pygela", + "1943627": "Yvretta", + "1943631": "Yvretta carus", + "1943654": "Megathymus", + "1943655": "Megathymus yuccae", + "1943673": "Megathymus streckeri", + "1943753": "Plastingia", + "1943757": "Plastingia naga", + "1943820": "Astraptes", + "1943823": "Astraptes fulgerator", + "1943824": "Astraptes alardus", + "1943830": "Astraptes alector", + "1943832": "Astraptes talus", + "1943901": "Astraptes anausis", + "1943934": "Zenis", + "1943936": "Zenis jebus", + "1943941": "Polites", + "1943942": "Polites baracoa", + "1943953": "Polites peckius", + "1943954": "Polites sabuleti", + "1943960": "Polites themistocles", + "1943962": "Polites vibex", + "1943964": "Polites mystic", + "1943990": "Polites origenes", + "1944003": "Spathilepia", + "1944004": "Spathilepia clonius", + "1944007": "Thymelicus", + "1944103": "Toxidia", + "1944106": "Toxidia doubledayi", + "1944113": "Toxidia parvulus", + "1944230": "Acada", + "1944234": "Acada biseriatus", + "1944270": "Urbanus", + "1944273": "Urbanus esmeraldus", + "1944275": "Urbanus viterboana", + "1944283": "Urbanus procne", + "1944286": "Urbanus dorantes", + "1944314": "Urbanus proteus", + "1944324": "Urbanus teleus", + "1944329": "Urbanus doryssus", + "1944335": "Urbanus tanna", + "1944343": "Urbanus simplicius", + "1944355": "Vehilius", + "1944361": "Vehilius stictomenes", + "1944374": "Vehilius clavicula", + "1944409": "Pyrrhopygopsis", + "1944421": "Pyrrhopygopsis socrates", + "1944441": "Sabera", + "1944456": "Sabera dobboe", + "1944462": "Sabera caesina", + "1944474": "Taractrocera", + "1944483": "Taractrocera ardonia", + "1944503": "Taractrocera ceramas", + "1944504": "Taractrocera maevius", + "1944520": "Taractrocera ina", + "1944521": "Taractrocera archias", + "1944523": "Taractrocera papyria", + "1944558": "Aguna", + "1944574": "Aguna asander", + "1944580": "Aguna megaeles", + "1944586": "Abraximorpha", + "1944591": "Abraximorpha davidii", + "1944617": "Trapezites", + "1944618": "Trapezites maheta", + "1944619": "Trapezites petalia", + "1944627": "Trapezites phigalia", + "1944629": "Trapezites phigalioides", + "1944631": "Trapezites symmomus", + "1944635": "Trapezites praxedes", + "1944638": "Trapezites eliena", + "1944742": "Lento", + "1944744": "Lento krexoides", + "1944767": "Timochares", + "1944769": "Timochares trifasciata", + "1944774": "Zographetus", + "1944778": "Zographetus satwa", + "1944792": "Synapte", + "1944798": "Synapte syraces", + "1944815": "Synapte malitiosa", + "1944831": "Atarnes", + "1944832": "Atarnes sallei", + "1944895": "Eagris", + "1944910": "Eagris nottoana", + "1944946": "Quadrus", + "1944973": "Viola", + "1944977": "Viola minor", + "1944985": "Choaspes", + "1945035": "Daimio", + "1945066": "Daimio tethys", + "1945078": "Zestusa", + "1945081": "Zestusa dorus", + "1945083": "Rachana", + "1945088": "Rachana jalindra", + "1945113": "Hasora", + "1945122": "Hasora khoda", + "1945137": "Hasora vitta", + "1945143": "Hasora schoenherr", + "1945173": "Hasora taminatus", + "1945225": "Hasora chromus", + "1945227": "Hasora badra", + "1945266": "Oriens", + "1945270": "Oriens paragola", + "1945274": "Oriens gola", + "1945286": "Oriens goloides", + "1945298": "Turesis", + "1945302": "Turesis lucas", + "1945307": "Sophista", + "1945312": "Sophista bifasciata", + "1945374": "Caicella calchas", + "1945378": "Caicella caicus", + "1945390": "Mimoniades", + "1945396": "Mimoniades versicolor", + "1945451": "Achlyodes", + "1945462": "Achlyodes busirus", + "1945476": "Achlyodes pallida", + "1945477": "Achlyodes tamenund", + "1945528": "Spialia", + "1945535": "Spialia mafa", + "1945569": "Spialia sertorius", + "1945571": "Spialia spio", + "1945587": "Spialia ferax", + "1945589": "Spialia phlomidis", + "1945605": "Spialia galba", + "1945660": "Tagiades", + "1945694": "Tagiades trebellius", + "1945710": "Tagiades cohaerens", + "1945715": "Tagiades japetus", + "1945738": "Tagiades litigiosa", + "1945742": "Tagiades gana", + "1945748": "Tagiades menaka", + "1945786": "Tagiades flesus", + "1945809": "Aeromachus", + "1945814": "Aeromachus pygmaeus", + "1945837": "Aeromachus jhora", + "1945854": "Pelopidas", + "1945856": "Pelopidas assamensis", + "1945863": "Pelopidas agna", + "1945874": "Pelopidas conjuncta", + "1945877": "Pelopidas thrax", + "1945878": "Pelopidas mathias", + "1945893": "Pelopidas lyelli", + "1945902": "Grais", + "1945949": "Baracus", + "1945956": "Celotes", + "1945957": "Celotes nessus", + "1945979": "Teniorhinus", + "1945980": "Teniorhinus harona", + "1946009": "Quedara", + "1946019": "Quedara monteithi", + "1946033": "Baoris", + "1946037": "Baoris fatuellus", + "1946051": "Baoris farri", + "1946052": "Gangara", + "1946058": "Gangara thyrsis", + "1946065": "Iton", + "1946067": "Iton semamora", + "1946071": "Calpodes", + "1946074": "Calpodes ethlius", + "1946077": "Systasea", + "1946078": "Systasea zampa", + "1946079": "Systasea pulverulenta", + "1946084": "Cobalus", + "1946097": "Cobalus virbius", + "1946099": "Choranthus", + "1946141": "Eetion", + "1946145": "Eetion elia", + "1946158": "Callimormus", + "1946163": "Callimormus radiola", + "1946167": "Callimormus corades", + "1946174": "Callimormus interpunctata", + "1946177": "Callimormus saturnus", + "1946263": "Atrytone", + "1946282": "Thespieus", + "1946290": "Thespieus aspernatus", + "1946310": "Thespieus dalman", + "1946327": "Thespieus macareus", + "1946331": "Perichares", + "1946333": "Perichares adela", + "1946375": "Badamia", + "1946413": "Astictopterus", + "1946432": "Astictopterus jama", + "1946463": "Nyctelius", + "1946469": "Nyctelius nyctelius", + "1946473": "Lotongus", + "1946486": "Lotongus calathus", + "1946490": "Thorybes", + "1946495": "Thorybes bathyllus", + "1946500": "Thorybes pylades", + "1946509": "Thorybes drusius", + "1946517": "Naevolus", + "1946520": "Naevolus orius", + "1946541": "Gorgythion", + "1946544": "Gorgythion vox", + "1946550": "Gorgythion begga", + "1946554": "Pellicia", + "1946577": "Pellicia arina", + "1946582": "Pellicia dimidiata", + "1946599": "Poanes", + "1946610": "Poanes viator", + "1946612": "Poanes yehl", + "1946618": "Poanes aaroni", + "1946628": "Poanes massasoit", + "1946630": "Lobocla", + "1946647": "Borbo", + "1946660": "Borbo lugens", + "1946661": "Borbo borbonica", + "1946695": "Borbo cinnara", + "1946718": "Oreisplanus", + "1946720": "Oreisplanus munionga", + "1946721": "Erionota", + "1946731": "Erionota acroleucus", + "1946737": "Erionota thrax", + "1946738": "Erionota torus", + "1946753": "Metardaris", + "1946756": "Metardaris cosinga", + "1946762": "Mesodina", + "1946763": "Mesodina halyzia", + "1946766": "Myscelus", + "1946802": "Ochlodes", + "1946810": "Ochlodes snowi", + "1946853": "Ochlodes agricola", + "1946865": "Ochlodes sylvanoides", + "1946900": "Arteurotia", + "1946901": "Arteurotia tractipennis", + "1946907": "Iambrix", + "1946916": "Iambrix stellifer", + "1946917": "Iambrix salsala", + "1946979": "Atrytonopsis", + "1946980": "Atrytonopsis loammi", + "1946981": "Atrytonopsis edwardsi", + "1946983": "Atrytonopsis pittacus", + "1946989": "Atrytonopsis cestus", + "1946991": "Atrytonopsis vierecki", + "1946992": "Atrytonopsis deva", + "1946995": "Atrytonopsis lunus", + "1946999": "Atrytonopsis hianna", + "1947018": "Onophas", + "1947021": "Onophas columbaria", + "1947024": "Cymaenes", + "1947037": "Cymaenes tripunctus", + "1947048": "Cymaenes alumna", + "1947049": "Cymaenes gisca", + "1947055": "Cymaenes trebius", + "1947108": "Coeliades", + "1947112": "Coeliades pisistratus", + "1947113": "Coeliades forestan", + "1947117": "Coeliades anchises", + "1947144": "Elbella", + "1947147": "Elbella scylla", + "1947191": "Metisella", + "1947272": "Carterocephalus", + "1947282": "Carterocephalus skada", + "1947306": "Carterocephalus silvicola", + "1947333": "Carterocephalus mandan", + "1947335": "Carterocephalus palaemon", + "1947353": "Mysoria", + "1947384": "Hyarotis", + "1947385": "Hyarotis adrastus", + "1947400": "Orses", + "1947402": "Orses cynisca", + "1947405": "Telicota", + "1947409": "Telicota bambusae", + "1947446": "Telicota ancilla", + "1947449": "Telicota ohara", + "1947456": "Telicota besta", + "1947459": "Telicota paceka", + "1947491": "Telicota augias", + "1947492": "Telicota colon", + "1947493": "Suada", + "1947496": "Suada swerga", + "1947504": "Codatractus", + "1947506": "Codatractus aminias", + "1947507": "Codatractus arizonensis", + "1947532": "Phocides", + "1947568": "Phocides lilea", + "1947577": "Phocides batabano", + "1947587": "Phocides pigmalion", + "1947588": "Phocides urania", + "1947597": "Phocides polybius", + "1947624": "Isoteinon", + "1947626": "Isoteinon lamprospilus", + "1947649": "Koruthaialos", + "1947661": "Koruthaialos sindu", + "1947673": "Koruthaialos rubecula", + "1947701": "Potanthus", + "1947703": "Potanthus trachala", + "1947727": "Potanthus pseudomaesa", + "1947740": "Potanthus flava", + "1947745": "Potanthus omaha", + "1947753": "Potanthus pava", + "1947765": "Potanthus confucius", + "1947775": "Potanthus serina", + "1947798": "Scobura", + "1947805": "Scobura isota", + "1947815": "Decinea", + "1947842": "Decinea percosius", + "1947844": "Cupitha", + "1947846": "Cupitha purreea", + "1947872": "Epargyreus", + "1947890": "Epargyreus tmolis", + "1947894": "Epargyreus cruza", + "1947915": "Epargyreus clarus", + "1947971": "Autochton", + "1947973": "Autochton zarex", + "1947976": "Autochton cincta", + "1947979": "Autochton longipennis", + "1947980": "Autochton neis", + "1948041": "Polyctor", + "1948042": "Polyctor cleta", + "1948046": "Polyctor polyctor", + "1948052": "Oligoria", + "1948054": "Oligoria maculata", + "1948058": "Caltoris", + "1948061": "Caltoris cormasa", + "1948062": "Caltoris cahira", + "1948073": "Caltoris ranrunna", + "1948088": "Caltoris kumara", + "1948143": "Chiomara", + "1948158": "Chiomara georgina", + "1948367": "Acleros", + "1948371": "Acleros mackenii", + "1948418": "Unkana", + "1948434": "Chioides", + "1948439": "Chioides zilpa", + "1948446": "Chioides albofasciatus", + "1948459": "Matapa", + "1948464": "Matapa sasivarna", + "1948465": "Matapa aria", + "1948519": "Cycloglypha", + "1948521": "Cycloglypha thrasibulus", + "1948624": "Ephyriades", + "1948630": "Ephyriades arcas", + "1948771": "Mastor tolteca", + "1948774": "Mastor vialis", + "1948779": "Mastor cassus", + "1948789": "Mastor fimbriata", + "1948799": "Mastor eos", + "1948800": "Mastor nysa", + "1948802": "Mastor aenus", + "1948803": "Mastor exoteria", + "1948804": "Mastor aesculapius", + "1948808": "Mastor reversa", + "1948809": "Mastor hegon", + "1948810": "Mastor celia", + "1948816": "Atalopedes", + "1948823": "Atalopedes mesogramma", + "1948826": "Atalopedes campestris", + "1948855": "Zopyrion", + "1948858": "Zopyrion satyrina", + "1948861": "Zopyrion evenor", + "1948865": "Zopyrion sandace", + "1948868": "Pythonides", + "1948883": "Pythonides lancea", + "1948890": "Pythonides jovianus", + "1948909": "Lychnuchoides", + "1948916": "Zophopetes dysmephila", + "1948936": "Pseudoborbo", + "1948941": "Pseudoborbo bevani", + "1948942": "Nascus", + "1948947": "Nascus phocus", + "1948964": "Platylesches", + "1948994": "Platylesches moritili", + "1949003": "Polytremis", + "1949008": "Polytremis lubricans", + "1949015": "Polytremis eltola", + "1949041": "Gesta", + "1949049": "Gesta invisus", + "1949053": "Psoralis", + "1949068": "Psoralis stacara", + "1949089": "Vettius", + "1949105": "Vettius phyllus", + "1949143": "Pyrrhopyge", + "1949219": "Pyrrhopyge charybdis", + "1949285": "Pyrrhopyge araxes", + "1949308": "Aides", + "1949322": "Aides dysoni", + "1949330": "Asbolis", + "1949331": "Asbolis capucinus", + "1949334": "Udaspes", + "1949336": "Udaspes folus", + "1949354": "Bibasis", + "1949366": "Bibasis gomata", + "1949404": "Bibasis sena", + "1949419": "Bibasis etelka", + "1949424": "Gegenes", + "1949446": "Lerodea", + "1949449": "Lerodea dysaules", + "1949451": "Lerodea eufala", + "1949466": "Lerodea arabus", + "1949486": "Noctuana", + "1949492": "Noctuana lactifera", + "1949496": "Moeris", + "1949512": "Moeris crispinus", + "1949515": "Moeris remus", + "1949517": "Agathymus", + "1949520": "Agathymus polingi", + "1949544": "Agathymus evansi", + "1949545": "Agathymus stephensi", + "1949549": "Agathymus aryxna", + "1949579": "Typhedanus", + "1949592": "Typhedanus undulatus", + "1949610": "Ebrietas", + "1949621": "Ebrietas anacreon", + "1949632": "Corticea", + "1949647": "Mylon", + "1949686": "Ancyloxypha", + "1949687": "Ancyloxypha arene", + "1949697": "Ancyloxypha numitor", + "1949704": "Pyrgus", + "1949715": "Pyrgus carlinae", + "1949784": "Pyrgus armoricanus", + "1949794": "Pyrgus alveus", + "1949850": "Pyrgus cinarae", + "1949852": "Pyrgus andromedae", + "1949877": "Pyrgus sidae", + "1949929": "Pyrgus serratulae", + "1949938": "Pyrgus malvoides", + "1949954": "Pyrgus onopordi", + "1950006": "Pyrgus centaureae", + "1950012": "Pseudocoladenia", + "1950013": "Pseudocoladenia fabia", + "1950015": "Antigonus", + "1950017": "Antigonus erosus", + "1950019": "Antigonus nearchus", + "1950024": "Antigonus liborius", + "1950034": "Polygonus", + "1950044": "Polygonus leo", + "1950046": "Pompeius", + "1950047": "Pompeius verna", + "1950052": "Pompeius pompeius", + "1950114": "Lerema", + "1950133": "Lerema accius", + "1950148": "Mucia", + "1950153": "Mucia zygia", + "1950154": "Gomalia", + "1950156": "Gomalia elma", + "1950166": "Ancistroides", + "1950169": "Ancistroides gemmifer", + "1950171": "Ancistroides nigrita", + "1950193": "Anthoptus", + "1950197": "Anthoptus epictetus", + "1950200": "Nisoniades", + "1950243": "Nisoniades macarius", + "1950257": "Chaetocneme", + "1950272": "Chaetocneme beata", + "1950299": "Hidari", + "1950302": "Hidari irava", + "1950334": "Achalarus", + "1950360": "Seseria", + "1950362": "Seseria formosana", + "1950380": "Wallengrenia", + "1950384": "Wallengrenia otho", + "1950396": "Wallengrenia egeremet", + "1950406": "Problema", + "1950408": "Problema byssus", + "1950409": "Problema bulenta", + "1950496": "Halpe", + "1950521": "Halpe porus", + "1950533": "Halpe hindu", + "1950566": "Nastra", + "1950567": "Nastra lherminier", + "1950578": "Nastra julia", + "1950585": "Netrocoryne", + "1950591": "Netrocoryne repanda", + "1950649": "Heliopyrgus", + "1950654": "Heliopyrgus domicella", + "1950763": "Celaenorrhinus", + "1950767": "Celaenorrhinus similis", + "1950856": "Celaenorrhinus fritzgaertneri", + "1950877": "Celaenorrhinus mokeezi", + "1950879": "Celaenorrhinus leucocera", + "1950936": "Celaenorrhinus ambareesa", + "1951061": "Tirynthia", + "1951062": "Tirynthia conflua", + "1951066": "Anisochoria", + "1951072": "Anisochoria sublimbata", + "1951093": "Heliopetes", + "1951097": "Heliopetes arsalte", + "1951103": "Heliopetes omrina", + "1951116": "Heliopetes ericetorum", + "1951121": "Heliopetes alana", + "1951125": "Heliopetes macaira", + "1951133": "Heliopetes laviana", + "1951144": "Cephrenes", + "1951157": "Cephrenes trichopepla", + "1951170": "Cephrenes augiades", + "1951213": "Pholisora", + "1951217": "Pholisora catullus", + "1951218": "Pholisora libya", + "1951289": "Hylephila", + "1951332": "Oarisma", + "1951340": "Oarisma garita", + "1951348": "Helias", + "1951358": "Psidopala", + "1951370": "Psidopala pennata", + "1951407": "Agnidra", + "1951412": "Agnidra scabiosa", + "1951430": "Oreta", + "1951448": "Oreta rosea", + "1951462": "Oreta insignis", + "1951492": "Oreta jaspidea", + "1951505": "Oreta griseotincta", + "1951507": "Oreta extensa", + "1951522": "Oreta fuscopurpurea", + "1951529": "Oreta loochooana", + "1951542": "Oreta brunnea", + "1951549": "Cilix", + "1951557": "Cilix glaucata", + "1951569": "Thyatira", + "1951627": "Deroca", + "1951631": "Deroca hidda", + "1951642": "Auzatellodes", + "1951645": "Tetheella", + "1951649": "Tetheella fluctuosa", + "1951655": "Euthyatira", + "1951657": "Euthyatira semicircularis", + "1951660": "Euthyatira pudens", + "1951664": "Microblepsis", + "1951671": "Microblepsis rugosa", + "1951675": "Microblepsis violacea", + "1951713": "Polyploca ridens", + "1951725": "Polyploca ruficollis", + "1951744": "Leucoblepsis", + "1951747": "Leucoblepsis fenestraria", + "1951782": "Eudeilinia", + "1951784": "Eudeilinia herminiata", + "1951788": "Nordstromia", + "1951791": "Nordstromia japonica", + "1951817": "Neotogaria", + "1951818": "Neotogaria saitonis", + "1951819": "Tridrepana", + "1951840": "Tridrepana arikana", + "1951844": "Tridrepana unispina", + "1951859": "Tridrepana fulvata", + "1951874": "Tridrepana lunulata", + "1951881": "Tridrepana flava", + "1951910": "Horipsestis", + "1951912": "Epipsestis", + "1951919": "Epipsestis dubia", + "1952001": "Falcaria", + "1952014": "Falcaria lacertinaria", + "1952029": "Habrosyne", + "1952032": "Habrosyne scripta", + "1952034": "Habrosyne indica", + "1952043": "Habrosyne gloriosa", + "1952052": "Habrosyne pterographa", + "1952062": "Habrosyne pyritoides", + "1952092": "Pseudothyatira", + "1952093": "Pseudothyatira cymatophoroides", + "1952118": "Cymatophorina", + "1952130": "Cymatophorina diluta", + "1952144": "Albara", + "1952147": "Albara reversaria", + "1952174": "Macrocilix", + "1952175": "Macrocilix maia", + "1952177": "Macrocilix mysticata", + "1952222": "Achlya", + "1952229": "Achlya flavicornis", + "1952259": "Phalacra", + "1952279": "Strepsigonia", + "1952281": "Strepsigonia diluta", + "1952300": "Tethea", + "1952419": "Cyclidia", + "1952446": "Sabra", + "1952449": "Sabra harpagula", + "1952453": "Gaurena", + "1952481": "Gaurena florens", + "1952526": "Ochropacha", + "1952532": "Ochropacha duplaris", + "1952547": "Ditrigona", + "1952551": "Ditrigona triangularia", + "1952607": "Horithyatira", + "1952611": "Horithyatira decorata", + "1952673": "Drapetodes", + "1952685": "Drapetodes mitaria", + "1952702": "Canucha", + "1952704": "Canucha specularis", + "1952727": "Ceranemota", + "1952730": "Ceranemota fasciata", + "1952736": "Drepana", + "1952801": "Watsonalla", + "1952806": "Watsonalla binaria", + "1952812": "Watsonalla cultraria", + "1952816": "Watsonalla uncinula", + "1952827": "Teldenia", + "1952857": "Teldenia specca", + "1952875": "Epicopeia", + "1952878": "Epicopeia mencia", + "1952883": "Epicopeia hainesii", + "1952907": "Psychostrophia", + "1952909": "Psychostrophia melanargia", + "1953000": "Cicinnus", + "1953102": "Lacosoma", + "1953124": "Lacosoma chiridota", + "1953159": "Alheita", + "1953166": "Alheita caudina", + "1953190": "Lyssa", + "1953192": "Lyssa menoetius", + "1953196": "Lyssa zampa", + "1953217": "Lyssa macleayi", + "1953325": "Pseudhyria", + "1953326": "Pseudhyria rubra", + "1953347": "Dysaethria", + "1953356": "Dysaethria scopocera", + "1953396": "Pseudomicronia", + "1953407": "Pseudomicronia advocataria", + "1953411": "Micronia", + "1953423": "Micronia aculeata", + "1953490": "Syngria", + "1953499": "Syngria druidaria", + "1953522": "Urania", + "1953540": "Epiplema", + "1953729": "Epiplema arcuata", + "1953948": "Phazaca", + "1953969": "Morphomima", + "1953970": "Morphomima fulvitacta", + "1953971": "Pterotosoma", + "1953975": "Chundana", + "1953996": "Trotorhombia", + "1953998": "Trotorhombia metachromata", + "1954024": "Rhombophylla", + "1954025": "Rhombophylla xylinopis", + "1954033": "Orudiza", + "1954037": "Orudiza protheclaria", + "1954038": "Acropteris", + "1954074": "Alcides", + "1954083": "Antiplecta", + "1954084": "Antiplecta triangularis", + "1954119": "Urapteroides", + "1954120": "Urapteroides astheniata", + "1954159": "Nothus", + "1954235": "Pasiphilodes", + "1954236": "Pasiphilodes testulata", + "1954313": "Microcalcarifera", + "1954338": "Pasiphila sandycias", + "1954344": "Pasiphila muscosata", + "1954346": "Pasiphila bilineolata", + "1954351": "Pasiphila lunata", + "1954353": "Pasiphila plinthina", + "1954356": "Pasiphila semochlora", + "1954359": "Pasiphila fumipalpata", + "1954382": "Axiodes bifasciata", + "1954391": "Psyra", + "1954478": "Xenochlorodes", + "1954490": "Xenochlorodes olympiaria", + "1954494": "Euchristophia", + "1954496": "Euchristophia cumulata", + "1954512": "Paranotoreas", + "1954514": "Paranotoreas brephosata", + "1954521": "Aporoctena", + "1954522": "Aporoctena scierodes", + "1954555": "Pseudopanthera", + "1954563": "Pseudopanthera macularia", + "1954587": "Alcis", + "1954875": "Collix", + "1954891": "Collix stellata", + "1954911": "Collix ghosha", + "1954921": "Microdes", + "1954924": "Sabulodes", + "1954930": "Sabulodes aegrotata", + "1954933": "Sabulodes edwardsata", + "1954992": "Sabulodes niveostriata", + "1954993": "Sabulodes spoliata", + "1955016": "Smyriodes", + "1955038": "Prasinocyma", + "1955039": "Prasinocyma rhodocosma", + "1955093": "Prasinocyma semicrocea", + "1955153": "Prasinocyma iosticta", + "1955199": "Prasinocyma albicosta", + "1955202": "Prasinocyma ocyptera", + "1955270": "Homodotis", + "1955271": "Homodotis megaspilata", + "1955272": "Homodotis falcata", + "1955304": "Oxymacaria", + "1955318": "Oxymacaria odontias", + "1955356": "Celerena", + "1955389": "Celerena signata", + "1955408": "Helastia", + "1955413": "Helastia semisignata", + "1955416": "Helastia corcularia", + "1955422": "Helastia cinerearia", + "1955475": "Compsoptera", + "1955479": "Compsoptera opacaria", + "1955484": "Compsoptera jourdanaria", + "1955495": "Spodolepis", + "1955497": "Spodolepis danbyi", + "1955498": "Spodolepis substriataria", + "1955508": "Hylaea", + "1955551": "Herochroma", + "1955552": "Herochroma cristata", + "1955581": "Herochroma baibarana", + "1955678": "Rhodometra", + "1955694": "Rhodometra sacraria", + "1955716": "Cusiala", + "1955725": "Cusiala boarmoides", + "1955730": "Chaetolopha", + "1955736": "Chaetolopha emporias", + "1955737": "Chaetolopha leucophragma", + "1955743": "Chaetolopha niphosticha", + "1955745": "Chaetolopha oxyntis", + "1955752": "Epyaxa", + "1955753": "Epyaxa rosearia", + "1955755": "Epyaxa lucidata", + "1955761": "Elvia", + "1955763": "Elvia glaucata", + "1955804": "Tasta", + "1955806": "Tasta argozana", + "1955843": "Nychiodes", + "1955856": "Nychiodes waltheri", + "1955898": "Chrysolarentia", + "1955899": "Chrysolarentia subrectaria", + "1955900": "Cabera", + "1955981": "Bracca", + "1955998": "Semaeopus", + "1956098": "Semaeopus ella", + "1956099": "Semaeopus nisa", + "1956214": "Eumacrodes", + "1956215": "Eumacrodes yponomeutaria", + "1956303": "Ozola", + "1956309": "Ozola japonica", + "1956364": "Aponotoreas", + "1956376": "Amblychia", + "1956384": "Amblychia angeronaria", + "1956415": "Anachloris", + "1956416": "Anachloris subochraria", + "1956434": "Ematurga", + "1956440": "Ematurga atomaria", + "1956462": "Ematurga amitaria", + "1956495": "Sirinopteryx", + "1956496": "Sirinopteryx rufivinctata", + "1956504": "Tacparia", + "1956505": "Tacparia detersata", + "1956510": "Tacparia atropunctata", + "1956522": "Melanthia", + "1956524": "Melanthia procellata", + "1956536": "Melanthia catenaria", + "1956545": "Erannis", + "1956597": "Erannis vancouverensis", + "1956599": "Erannis defoliaria", + "1956626": "Erannis tiliaria", + "1956629": "Erannis golda", + "1956639": "Erannis declinans", + "1956709": "Epirranthis", + "1956710": "Epirranthis diversata", + "1956715": "Zenophleps", + "1956716": "Zenophleps lignicolorata", + "1956824": "Neohipparchus", + "1956895": "Episauris", + "1956897": "Episauris kiliani", + "1956900": "Heliomata", + "1956904": "Heliomata cycladata", + "1956949": "Aeolochroma", + "1956955": "Aeolochroma turneri", + "1956958": "Aeolochroma metarhodata", + "1956963": "Aeolochroma quadrilinea", + "1956978": "Aeolochroma hypochromaria", + "1956983": "Aeolochroma viridicata", + "1957057": "Hypobapta", + "1957058": "Hypobapta diffundens", + "1957062": "Hypobapta barnardi", + "1957136": "Nadagara", + "1957161": "Nadagara vigaia", + "1957172": "Sibatania", + "1957174": "Sibatania arizana", + "1957193": "Larentia", + "1957266": "Larentia clavaria", + "1957281": "Thetidia", + "1957286": "Thetidia plusiaria", + "1957300": "Thetidia smaragdaria", + "1957327": "Calluga", + "1957333": "Calluga costalis", + "1957367": "Eumelea", + "1957368": "Eumelea ludovicata", + "1957413": "Eumelea rosalia", + "1957436": "Cingilia", + "1957441": "Cingilia catenaria", + "1957459": "Gonanticlea", + "1957460": "Gonanticlea aversa", + "1957508": "Metallochlora", + "1957523": "Metallochlora lineata", + "1957545": "Peribatodes", + "1957556": "Peribatodes abstersaria", + "1957565": "Peribatodes ilicaria", + "1957570": "Peribatodes secundaria", + "1957572": "Peribatodes rhomboidaria", + "1957579": "Peribatodes perversaria", + "1957583": "Peribatodes correptaria", + "1957611": "Peribatodes umbraria", + "1957620": "Scotopteryx", + "1957632": "Scotopteryx mucronata", + "1957673": "Scotopteryx coelinaria", + "1957706": "Scotopteryx moeniata", + "1957718": "Scotopteryx bipunctaria", + "1957746": "Scotopteryx luridata", + "1957791": "Scotopteryx coarctaria", + "1957816": "Scotopteryx chenopodiata", + "1957822": "Scotopteryx alfacaria", + "1957829": "Ennomos", + "1957845": "Ennomos alniaria", + "1957852": "Ennomos quercinaria", + "1957854": "Ennomos autumnaria", + "1957870": "Ennomos subsignaria", + "1957999": "Alsophila", + "1958023": "Parectropis", + "1958024": "Parectropis similaria", + "1958045": "Parectropis subflava", + "1958047": "Protoproutia", + "1958049": "Protoproutia laredoata", + "1958056": "Odontognophos", + "1958065": "Odontognophos dumetata", + "1958067": "Sicya", + "1958104": "Antepione", + "1958121": "Antepione thisoaria", + "1958143": "Plutodes", + "1958152": "Plutodes flavescens", + "1958158": "Plutodes costatus", + "1958163": "Plutodes exquisita", + "1958238": "Ourapteryx", + "1958241": "Ourapteryx changi", + "1958252": "Ourapteryx nivea", + "1958255": "Ourapteryx caecata", + "1958259": "Ourapteryx pallidula", + "1958260": "Ourapteryx ramosa", + "1958275": "Ourapteryx similaria", + "1958282": "Ourapteryx inspersa", + "1958290": "Ourapteryx sciticaudaria", + "1958305": "Ourapteryx clara", + "1958307": "Ourapteryx marginata", + "1958323": "Ourapteryx sambucaria", + "1958324": "Ourapteryx claretta", + "1958411": "Hyposidra", + "1958422": "Hyposidra apioleuca", + "1958454": "Hyposidra talaca", + "1958463": "Hyposidra infixaria", + "1958483": "Hyposidra aquilaria", + "1958489": "Episteira", + "1958507": "Narraga", + "1958515": "Narraga nelvae", + "1958528": "Narraga fimetaria", + "1959339": "Parosteodes", + "1959341": "Parosteodes fictiliaria", + "1959374": "Orthoclydon", + "1959379": "Orthoclydon praefectata", + "1959381": "Philereme", + "1959383": "Philereme vetulata", + "1959395": "Philereme transversata", + "1959409": "Dyscia", + "1959423": "Dyscia penulataria", + "1959436": "Dyscia lentiscaria", + "1959461": "Dyscia innocentaria", + "1959467": "Dyscia fagaria", + "1959473": "Dyscia distinctaria", + "1959486": "Tristrophis", + "1959494": "Tristrophis rectifascia", + "1959498": "Urolitha", + "1959500": "Urolitha bipunctifera", + "1959541": "Gueneria", + "1959543": "Gueneria similaria", + "1959593": "Stibaractis", + "1959595": "Stibaractis melanotoxa", + "1959635": "Ametris", + "1959637": "Ametris nitocris", + "1959643": "Acolutha", + "1959645": "Acolutha pictaria", + "1959652": "Acolutha pulchella", + "1959662": "Chlorodontopera", + "1959666": "Chlorodontopera taiwana", + "1959667": "Chlorodontopera discospilata", + "1959668": "Lythria", + "1959682": "Lythria purpuraria", + "1959735": "Lythria cruentaria", + "1959781": "Amphiclasta", + "1959782": "Amphiclasta lygaea", + "1959797": "Toulgoetia", + "1959799": "Toulgoetia cauteriata", + "1959834": "Palaeaspilates", + "1959839": "Palaeaspilates inoffensa", + "1959852": "Mellilla", + "1959858": "Mellilla xanthometata", + "1959873": "Chariaspilates", + "1959876": "Chariaspilates formosaria", + "1959888": "Plagodis", + "1959890": "Plagodis fervidaria", + "1959898": "Plagodis phlogosaria", + "1959914": "Plagodis dolabraria", + "1959917": "Plagodis serinaria", + "1959919": "Plagodis pulveraria", + "1959934": "Plagodis alcoolaria", + "1959948": "Plagodis reticulata", + "1959997": "Oulobophora", + "1960002": "Oulobophora externaria", + "1960003": "Chalastra", + "1960004": "Chalastra pellurgata", + "1960016": "Gandaritis", + "1960023": "Gandaritis fixseni", + "1960087": "Acrosemia", + "1960090": "Acrosemia vulpecularia", + "1960098": "Mixocera", + "1960105": "Mixocera frustratoria", + "1960106": "Mixocera latilineata", + "1960125": "Antictenia", + "1960128": "Antictenia punctunculus", + "1960162": "Acronyctodes", + "1960166": "Acronyctodes mexicanaria", + "1960170": "Tanaorhinus", + "1960181": "Tanaorhinus reciprocata", + "1960182": "Tanaorhinus formosana", + "1960193": "Euloxia", + "1960201": "Euloxia meandraria", + "1960225": "Opisthoxia", + "1960255": "Opisthoxia miletia", + "1960268": "Opisthoxia metargyria", + "1960315": "Opisthoxia molpadia", + "1960410": "Picromorpha", + "1960411": "Picromorpha pyrrhopa", + "1960422": "Problepsis", + "1960484": "Problepsis ocellata", + "1960500": "Euacidalia", + "1960503": "Euacidalia brownsvillea", + "1960519": "Monoctenia", + "1960521": "Monoctenia falernaria", + "1960524": "Monoctenia smerintharia", + "1960570": "Danala", + "1960571": "Danala lilacina", + "1960592": "Opisthograptis", + "1960595": "Opisthograptis punctilineata", + "1960617": "Opisthograptis luteolata", + "1960628": "Hesperumia", + "1960632": "Hesperumia sulphuraria", + "1960671": "Organopoda", + "1960686": "Organopoda carnearia", + "1960844": "Phthonosema", + "1960854": "Phthonosema tendinosaria", + "1960939": "Phrataria", + "1960940": "Phrataria transcissata", + "1960941": "Phrataria replicataria", + "1960943": "Hethemia", + "1960951": "Hethemia pistasciaria", + "1960958": "Metallolophia", + "1960963": "Metallolophia arenaria", + "1960966": "Chlorissa", + "1961013": "Chlorissa etruscaria", + "1961025": "Chlorissa albistrigulata", + "1961037": "Chlorissa cloraria", + "1961040": "Chlorissa viridata", + "1961048": "Phthonandria", + "1961052": "Phthonandria atrilineata", + "1961066": "Apocheima", + "1961068": "Apocheima hispidaria", + "1961117": "Discoglypha", + "1961126": "Discoglypha locupletata", + "1961145": "Eudulophasia", + "1961155": "Eudulophasia invaria", + "1961158": "Pogonopygia", + "1961162": "Pogonopygia nigralbata", + "1961179": "Corula", + "1961180": "Corula geometroides", + "1961188": "Hypoxystis", + "1961190": "Hypoxystis pluviaria", + "1961229": "Myrteta", + "1961252": "Myrteta angelica", + "1961264": "Besma", + "1961334": "Dyspteris", + "1961361": "Dyspteris abortivaria", + "1961371": "Crocota", + "1961383": "Philtraea", + "1961388": "Philtraea paucimacula", + "1961643": "Mixochlora", + "1961647": "Mixochlora vittata", + "1961716": "Philedia", + "1961718": "Philedia punctomacularia", + "1961719": "Melanodes", + "1962047": "Synchlora", + "1962051": "Synchlora frondaria", + "1962076": "Synchlora aerata", + "1962086": "Synchlora astraeoides", + "1962118": "Synchlora gerularia", + "1962120": "Synchlora pulchrifimbria", + "1962159": "Scioglyptis lyciaria", + "1962162": "Scioglyptis canescaria", + "1962165": "Selenia", + "1962204": "Selenia dentaria", + "1962265": "Selenia tetralunaria", + "1962268": "Selenia lunularia", + "1962369": "Dysstroma", + "1962432": "Dysstroma sobria", + "1962434": "Dysstroma truncata", + "1962447": "Dysstroma fumata", + "1962479": "Dysstroma brunneata", + "1962490": "Dysstroma hersiliata", + "1962516": "Dysstroma citrata", + "1962577": "Tephronia", + "1962584": "Tephronia sepiaria", + "1962632": "Ligdia", + "1962636": "Ligdia adustata", + "1962655": "Epiphryne", + "1962656": "Epiphryne verriculata", + "1962657": "Epiphryne undosata", + "1962659": "Epiphryne charidema", + "1962676": "Gasterocome", + "1962678": "Gasterocome pannosaria", + "1962688": "Sarisa", + "1962689": "Sarisa muriferata", + "1962704": "Melanolophia", + "1962722": "Melanolophia canadaria", + "1962727": "Melanolophia imitata", + "1962828": "Gastrophora", + "1962829": "Gastrophora henricaria", + "1962830": "Naxidia", + "1962839": "Naxidia punctata", + "1962840": "Dysbatus", + "1962841": "Dysbatus stenodesma", + "1962842": "Dysbatus singularis", + "1962857": "Apeira", + "1962860": "Apeira syringaria", + "1962893": "Lambdina", + "1962895": "Lambdina fervidaria", + "1962900": "Lambdina fiscellaria", + "1962925": "Lambdina pellucidaria", + "1962932": "Iulops", + "1962934": "Iulops argocrana", + "1962956": "Chesias", + "1962961": "Chesias isabella", + "1962972": "Chesias rufata", + "1962990": "Chesias legatella", + "1962995": "Orthonama", + "1963011": "Orthonama vittata", + "1963049": "Ceratonyx", + "1963052": "Ceratonyx satanaria", + "1963055": "Syncirsodes", + "1963058": "Hydatocapnia", + "1963095": "Iotaphora iridicolor", + "1963096": "Iotaphora admirabilis", + "1963165": "Microloxia", + "1963168": "Microloxia herbaria", + "1963199": "Synaxis", + "1963201": "Synaxis jubararia", + "1963207": "Synaxis triangulata", + "1963212": "Synaxis pallulata", + "1963296": "Tessarotis", + "1963297": "Tessarotis rubrata", + "1963299": "Thalera", + "1963306": "Thalera fimbrialis", + "1963418": "Prochasma", + "1963424": "Melanchroia", + "1963425": "Melanchroia aterea", + "1963433": "Melanchroia chephise", + "1963445": "Chloroclysta", + "1963446": "Chloroclysta siterata", + "1963463": "Chloroclysta miata", + "1963532": "Paralaea porphyrinaria", + "1963584": "Cinglis", + "1963587": "Cinglis andalusiaria", + "1963618": "Pimaphera", + "1963619": "Pimaphera sparsaria", + "1963627": "Aporandria", + "1963629": "Aporandria specularia", + "1963630": "Synnomos", + "1963633": "Synnomos firmamentaria", + "1963706": "Eilicrinia", + "1963709": "Eilicrinia trinotata", + "1963710": "Eilicrinia cordiaria", + "1963733": "Eilicrinia flava", + "1963753": "Adalbertia", + "1963755": "Adalbertia castiliaria", + "1963775": "Apodasmia", + "1963777": "Dithalama", + "1963782": "Dithalama cosmospila", + "1963826": "Chartographa", + "1963827": "Chartographa convexa", + "1963835": "Prochoerodes", + "1963848": "Prochoerodes lineola", + "1963854": "Prochoerodes forficaria", + "1963873": "Hypagyrtis", + "1963874": "Hypagyrtis piniata", + "1963879": "Hypagyrtis esther", + "1963892": "Hypagyrtis unipunctata", + "1963933": "Paragonia", + "1964020": "Krananda", + "1964024": "Krananda semihyalina", + "1964025": "Krananda oliveomarginata", + "1964029": "Krananda lucidaria", + "1964040": "Probole", + "1964041": "Probole amicaria", + "1964064": "Didymoctenia", + "1964066": "Didymoctenia exsuperata", + "1964067": "Sicyodes", + "1964076": "Sicyodes cambogiaria", + "1964095": "Ophthalmitis", + "1964113": "Ophthalmitis albosignaria", + "1964116": "Ophthalmitis herbidaria", + "1964131": "Pseudocoremia", + "1964137": "Pseudocoremia monacha", + "1964141": "Pseudocoremia productata", + "1964143": "Pseudocoremia rudisata", + "1964144": "Pseudocoremia leucelaea", + "1964151": "Pseudocoremia fenerata", + "1964153": "Pseudocoremia indistincta", + "1964155": "Pseudocoremia lactiflua", + "1964158": "Pseudocoremia suavis", + "1964174": "Pseudocoremia lupinata", + "1964175": "Catarhoe", + "1964189": "Catarhoe basochesiata", + "1964191": "Catarhoe rubidata", + "1964195": "Catarhoe cuculata", + "1964246": "Calleulype", + "1964247": "Calleulype whitelyi", + "1964299": "Thalassodes", + "1964305": "Thalassodes pilaria", + "1964316": "Thalassodes immissaria", + "1964331": "Thalassodes dorsilinea", + "1964392": "Lithostege", + "1964401": "Lithostege castiliaria", + "1964437": "Lithostege farinata", + "1964471": "Lithostege griseata", + "1964549": "Microcalicha", + "1964562": "Onycodes", + "1964565": "Onycodes rubra", + "1964577": "Epirrhoe", + "1964585": "Epirrhoe plebeculata", + "1964637": "Epirrhoe galiata", + "1964653": "Epirrhoe tristata", + "1964657": "Epirrhoe rivata", + "1964696": "Cathydata", + "1964698": "Cathydata batina", + "1964699": "Oenochlora", + "1964702": "Oenochlora imperialis", + "1964714": "Eugonobapta", + "1964715": "Eugonobapta nivosaria", + "1964733": "Alex", + "1964738": "Alex palparia", + "1964835": "Ekboarmia", + "1964836": "Ekboarmia atlanticaria", + "1964936": "Lobophora", + "1964995": "Mnesampela privata", + "1964996": "Mnesampela heliochrysa", + "1965018": "Stamnodes", + "1965024": "Stamnodes seiferti", + "1965038": "Stamnodes formosata", + "1965058": "Stamnodes gibbicostata", + "1965069": "Stamnodes albiapicata", + "1965078": "Stamnodes topazata", + "1965100": "Stamnodes affiliata", + "1965123": "Euphyia", + "1965166": "Euphyia unangulata", + "1965197": "Euphyia frustata", + "1965208": "Euphyia biangulata", + "1965345": "Euphyia molluginata", + "1965586": "Euphyia intermediata", + "1965633": "Fagivorina", + "1965640": "Fagivorina arenaria", + "1965641": "Syneora", + "1965643": "Syneora fractata", + "1965649": "Syneora hemeropa", + "1965650": "Syneora mundifera", + "1965663": "Glena", + "1965671": "Glena quinquelinearia", + "1965697": "Glena cribrataria", + "1965699": "Glena plumosaria", + "1965758": "Eulithis", + "1965763": "Eulithis testata", + "1965777": "Eulithis mellinata", + "1965794": "Eulithis serrataria", + "1965795": "Eulithis populata", + "1965797": "Eulithis explanata", + "1965805": "Eulithis diversilineata", + "1965807": "Eulithis destinata", + "1965810": "Eulithis pyropata", + "1965823": "Eulithis xylina", + "1965825": "Eulithis prunata", + "1965831": "Eulithis gracilineata", + "1965838": "Eulithis molliculata", + "1965841": "Eulithis pyraliata", + "1965861": "Eulithis flavibrunneata", + "1965865": "Eulithis propulsata", + "1965881": "Simena", + "1965887": "Simena luctifera", + "1965888": "Angerona", + "1965913": "Angerona prunaria", + "1965967": "Timandra", + "1965996": "Timandra griseata", + "1966017": "Timandra comae", + "1966069": "Sericoptera", + "1966088": "Sericoptera mahometaria", + "1966159": "Peratophyga", + "1966180": "Disclisioprocta", + "1966185": "Disclisioprocta stellata", + "1966193": "Exelis", + "1966195": "Exelis ophiurus", + "1966198": "Exelis pyrolaria", + "1966215": "Jankowskia", + "1966235": "Xylopteryx", + "1966255": "Xylopteryx arcuata", + "1966280": "Percnia", + "1966286": "Percnia fumidaria", + "1966302": "Percnia luridaria", + "1966310": "Percnia longitermen", + "1966340": "Platycerota", + "1966346": "Pachycnemia", + "1966351": "Pachycnemia hippocastanaria", + "1966358": "Pachycnemia tibiaria", + "1966360": "Synegiodes", + "1966362": "Synegiodes ornata", + "1966367": "Synegiodes hyriaria", + "1966853": "Antilurga", + "1966854": "Antilurga alhambrata", + "1966883": "Pungeleria", + "1966886": "Pungeleria capreolaria", + "1966927": "Cryphaea", + "1966929": "Geometra", + "1966975": "Zermizinga", + "1966977": "Zermizinga sinuata", + "1966978": "Zermizinga indocilisaria", + "1966982": "Rhodostrophia", + "1967003": "Rhodostrophia discopunctata", + "1967006": "Rhodostrophia calabra", + "1967011": "Rhodostrophia vibicaria", + "1967025": "Rhodostrophia pudorata", + "1967039": "Rhodostrophia bisinuata", + "1967123": "Episemasia", + "1967127": "Episemasia cervinaria", + "1967128": "Episemasia solitaria", + "1967196": "Siona", + "1967207": "Zerenopsis", + "1967209": "Zerenopsis lepida", + "1967210": "Apodrepanulatrix", + "1967212": "Apodrepanulatrix liberaria", + "1967220": "Odontoptila", + "1967226": "Odontoptila obrimo", + "1967234": "Homochlodes", + "1967240": "Homochlodes fritillaria", + "1967242": "Cepphis", + "1967245": "Cepphis advenaria", + "1967263": "Aspitates", + "1967265": "Aspitates ochrearia", + "1967273": "Aspitates gilvaria", + "1967324": "Aspitates collinaria", + "1967337": "Argyrotome", + "1967346": "Argyrotome prospectata", + "1967427": "Holochroa", + "1967433": "Holochroa dissociarius", + "1967435": "Argyrophora", + "1967438": "Argyrophora trofonia", + "1967444": "Pseudonadagara", + "1967445": "Pseudonadagara semicolor", + "1967447": "Artiora", + "1967452": "Artiora evonymaria", + "1967583": "Paradarisa", + "1967590": "Paradarisa comparataria", + "1967595": "Paradarisa chloauges", + "1967597": "Paradarisa consonaria", + "1967604": "Comostolopsis", + "1967606": "Comostolopsis stillata", + "1967660": "Pseudomiza", + "1967672": "Pseudomiza aurata", + "1967688": "Pseudomiza obliquaria", + "1967696": "Lobus", + "1967699": "Xenomusa", + "1967703": "Xenomusa metallica", + "1967715": "Eucyclodes", + "1967716": "Eucyclodes buprestaria", + "1967722": "Abraxas", + "1967803": "Abraxas pantaria", + "1967815": "Abraxas sylvata", + "1967873": "Abraxas grossulariata", + "1968101": "Chlenias", + "1968115": "Chlenias banksiaria", + "1968131": "Chlenias ochrocrana", + "1968135": "Borbacha", + "1968147": "Borbacha pardaria", + "1968166": "Nothomiza", + "1968182": "Nothomiza flavicosta", + "1968193": "Nothomiza formosa", + "1968199": "Acasis", + "1968205": "Acasis viridata", + "1968257": "Sestra", + "1968271": "Tetracis", + "1968301": "Wilemania", + "1968304": "Wilemania nitobei", + "1968306": "Phrygionis", + "1968313": "Phrygionis polita", + "1968315": "Phrygionis paradoxata", + "1968321": "Phrygionis platinata", + "1968324": "Phrygionis privignaria", + "1968362": "Milionia", + "1968363": "Milionia zonea", + "1968537": "Periclina", + "1968538": "Periclina apricaria", + "1968582": "Caripeta", + "1968643": "Phallaria", + "1968665": "Nothocasis", + "1968678": "Nothocasis sertata", + "1968683": "Athroolopha", + "1968686": "Athroolopha pennigeraria", + "1968722": "Somatina", + "1968730": "Somatina plynusaria", + "1968746": "Somatina rosacea", + "1968827": "Eucrostes", + "1968837": "Eucrostes indigenata", + "1968854": "Colotois", + "1968867": "Colotois pennaria", + "1968925": "Pleuroprucha", + "1968942": "Pleuroprucha insulsaria", + "1968950": "Anectropis", + "1968951": "Anectropis semifascia", + "1968975": "Tephrina", + "1968990": "Tephrina murinaria", + "1969102": "Acodia", + "1969104": "Acodia pauper", + "1969122": "Gnophos", + "1969291": "Gnophos obfuscata", + "1969339": "Gnophos furvata", + "1969357": "Gnophos caenosa", + "1969463": "Gnophos sartata", + "1969491": "Gnophos delitescens", + "1969566": "Cernia", + "1969568": "Cernia amyclaria", + "1969571": "Traminda", + "1969581": "Traminda mundissima", + "1969613": "Hypocometa", + "1969621": "Hypocometa clauda", + "1969918": "Triphosa", + "1969954": "Triphosa dubitata", + "1969958": "Triphosa sabaudiata", + "1969961": "Triphosa haesitata", + "1969978": "Triphosa californiata", + "1970019": "Synegia", + "1970034": "Synegia eumeleata", + "1970091": "Parepisparis", + "1970093": "Parepisparis lutosaria", + "1970094": "Parepisparis multicolora", + "1970108": "Parepisparis excusata", + "1970117": "Neoalcis", + "1970119": "Neoalcis californiaria", + "1970120": "Spaniocentra", + "1970136": "Spaniocentra hollowayi", + "1970142": "Xyridacma", + "1970145": "Xyridacma veronicae", + "1970148": "Xyridacma alectoraria", + "1970150": "Xyridacma ustaria", + "1970157": "Polyclysta", + "1970159": "Polyclysta hypogrammata", + "1970163": "Perigramma", + "1970179": "Cosmorhoe", + "1970213": "Cosmorhoe ocellata", + "1970226": "Selidosema", + "1970227": "Selidosema brunnearia", + "1970243": "Selidosema plumaria", + "1970259": "Selidosema taeniolaria", + "1970264": "Rhuma", + "1970265": "Rhuma subaurata", + "1970279": "Perconia", + "1970284": "Perconia strigillaria", + "1970314": "Trichopterigia", + "1970322": "Trichopterigia sanguinipunctata", + "1970403": "Epidesmia", + "1970435": "Psilalcis", + "1970436": "Psilalcis galsworthyi", + "1970460": "Taxeotis stereospila", + "1970463": "Taxeotis perlinearia", + "1970473": "Taxeotis reserata", + "1970485": "Taxeotis intextata", + "1970574": "Scopula", + "1971819": "Horisme", + "1971835": "Horisme intestinata", + "1971847": "Horisme corticata", + "1971852": "Horisme scorteata", + "1971858": "Horisme vitalbata", + "1971888": "Horisme tersata", + "1971986": "Horisme radicaria", + "1971994": "Nepytia", + "1971995": "Nepytia canosaria", + "1971998": "Nepytia phantasmaria", + "1971999": "Nepytia pellucidaria", + "1972010": "Nepytia semiclusaria", + "1972072": "Yashmakia", + "1972076": "Antitrygodes", + "1972094": "Antitrygodes divisaria", + "1972097": "Pityeja", + "1972101": "Pityeja histrionaria", + "1972114": "Perizoma", + "1972120": "Perizoma affinitata", + "1972185": "Perizoma albulata", + "1972187": "Perizoma blandiata", + "1972234": "Perizoma flavofasciata", + "1972250": "Perizoma alchemillata", + "1972278": "Perizoma minorata", + "1972342": "Perizoma bifaciata", + "1972374": "Perizoma lugdunaria", + "1972377": "Perizoma hydrata", + "1972404": "Circopetes", + "1972407": "Circopetes obtusata", + "1972425": "Operophtera", + "1972434": "Operophtera fagata", + "1972443": "Operophtera relegata", + "1972447": "Operophtera bruceata", + "1972449": "Operophtera brumata", + "1972454": "Operophtera occidentalis", + "1972461": "Gellonia", + "1972472": "Heterusia", + "1972604": "Gastrinodes", + "1972606": "Gastrinodes bitaeniaria", + "1972607": "Sarcinodes", + "1972613": "Sarcinodes yaeyamana", + "1972614": "Sarcinodes carnearia", + "1972616": "Sarcinodes mongaku", + "1972620": "Sarcinodes aequilinearia", + "1972631": "Sarcinodes yeni", + "1972689": "Lychnosea", + "1972691": "Lychnosea intermicata", + "1972702": "Gastrina", + "1972707": "Chrysocraspeda", + "1972754": "Chrysocraspeda sanguinea", + "1972791": "Declana", + "1972797": "Declana leptomera", + "1972800": "Declana floccosa", + "1972806": "Declana niveata", + "1972822": "Berta", + "1972901": "Cyneoterpna", + "1972903": "Cyneoterpna wilsoni", + "1972942": "Spargania magnoliata", + "1972997": "Cymatoplex", + "1973136": "Phaeoura", + "1973146": "Phaeoura mexicanaria", + "1973147": "Phaeoura quernaria", + "1973159": "Chlorosea", + "1973164": "Chlorosea banksaria", + "1973165": "Chlorosea margaretaria", + "1973166": "Drepanogynis", + "1973171": "Drepanogynis mixtaria", + "1973239": "Cyclothea", + "1973242": "Cyclothea disjuncta", + "1973243": "Glaucina", + "1973245": "Glaucina erroraria", + "1973295": "Heliothea", + "1973300": "Heliothea discoidaria", + "1973321": "Adactylotis", + "1973323": "Adactylotis gesticularia", + "1973327": "Adactylotis contaminaria", + "1973331": "Garaeus", + "1973338": "Garaeus specularis", + "1973358": "Garaeus apicata", + "1973392": "Heteralex", + "1973393": "Heteralex unilinea", + "1973397": "Heteralex aspersa", + "1973405": "Bupalus", + "1973414": "Bupalus piniaria", + "1973458": "Pterophorus divisata", + "1973466": "Pterophorus subaequaria", + "1973467": "Pterophorus chlorosata", + "1973483": "Mesothea", + "1973487": "Mesothea incertata", + "1973488": "Eucaterva", + "1973493": "Eucaterva variaria", + "1973530": "Laciniodes umbrosus", + "1973578": "Oospila", + "1973665": "Oospila venezuelata", + "1973718": "Larophylla", + "1973719": "Larophylla amimeta", + "1973722": "Itame", + "1973909": "Idaea", + "1975155": "Petelia", + "1975164": "Petelia medardaria", + "1975197": "Larerannis", + "1975198": "Larerannis orthogrammaria", + "1975208": "Idiodes", + "1975212": "Idiodes apicata", + "1975248": "Idiodes siculoides", + "1975249": "Idiodes rhacodes", + "1975278": "Maxates", + "1975285": "Neagathia", + "1975287": "Neagathia corruptata", + "1975292": "Trichopteryx", + "1975336": "Pareulype", + "1975341": "Pareulype berberata", + "1975361": "Tornos", + "1975365": "Tornos scolopacinaria", + "1975464": "Dasyboarmia", + "1975542": "Epione", + "1975546": "Epione repandaria", + "1975553": "Epione vespertaria", + "1975570": "Anticollix", + "1975571": "Anticollix sparsata", + "1975577": "Heterophleps", + "1975583": "Heterophleps taiwana", + "1975597": "Heterophleps variegata", + "1975607": "Heterophleps triguttaria", + "1975703": "Gonodontis", + "1975704": "Gonodontis orthotoma", + "1975711": "Gonodontis pallida", + "1975714": "Chrysochloroma", + "1975722": "Chrysochloroma megaloptera", + "1975729": "Archiearis", + "1975733": "Archiearis parthenias", + "1975741": "Archiearis infans", + "1975783": "Anticlea", + "1975793": "Anticlea derivata", + "1975804": "Xandrames", + "1975805": "Xandrames dholaria", + "1975806": "Xandrames latiferaria", + "1975885": "Biston", + "1975892": "Biston regalis", + "1975897": "Biston betularia", + "1975903": "Biston strataria", + "1975914": "Biston sinuata", + "1975964": "Biston marginata", + "1975979": "Biston robustum", + "1976058": "Erastria", + "1976073": "Erastria decrepitaria", + "1976118": "Rhinodia", + "1976123": "Rhinodia rostraria", + "1976141": "Authaemon", + "1976142": "Authaemon stenonipha", + "1976155": "Electrophaes", + "1976163": "Electrophaes corylata", + "1976211": "Corymica", + "1976212": "Corymica arnearia", + "1976213": "Corymica pryeri", + "1976224": "Corymica spatiosa", + "1976228": "Corymica deducta", + "1976240": "Planolocha", + "1976243": "Planolocha autoptis", + "1976245": "Lytrosis", + "1976248": "Lytrosis unitaria", + "1976250": "Xanthyris", + "1976255": "Xanthyris flaveolata", + "1976296": "Racotis", + "1976303": "Racotis maculata", + "1976311": "Racotis boarmiaria", + "1976321": "Plataea", + "1976333": "Plataea trilinearia", + "1976338": "Capusa", + "1976341": "Capusa cuculloides", + "1976342": "Capusa senilis", + "1976344": "Lyelliana", + "1976345": "Lyelliana dryophila", + "1976460": "Dindica", + "1976462": "Dindica taiwana", + "1976463": "Dindica kishidai", + "1976469": "Dindica polyphaenaria", + "1976470": "Dindica purpurata", + "1976483": "Dindica wilemani", + "1976496": "Polyacme", + "1976515": "Lycia", + "1976638": "Oxydia", + "1976651": "Oxydia vesulia", + "1976746": "Oxydia trychiata", + "1976854": "Anthometra", + "1976884": "Eccymatoge", + "1976890": "Eccymatoge callizona", + "1976891": "Eccymatoge morphna", + "1976925": "Heterostegania", + "1976928": "Heterostegania lunulosa", + "1976930": "Austrocidaria", + "1976933": "Austrocidaria bipartita", + "1976934": "Austrocidaria gobiata", + "1976939": "Austrocidaria callichlora", + "1976941": "Austrocidaria similata", + "1976949": "Rheumaptera", + "1976993": "Rheumaptera cervinalis", + "1977003": "Rheumaptera undulata", + "1977007": "Rheumaptera subhastata", + "1977054": "Rheumaptera prunivorata", + "1977068": "Rheumaptera hastata", + "1977104": "Venusia", + "1977179": "Thinopteryx", + "1977182": "Thinopteryx nebulosa", + "1977184": "Thinopteryx crocoptera", + "1977295": "Telenomeuta", + "1977297": "Telenomeuta punctimarginaria", + "1977298": "Sardocyrnia", + "1977300": "Sardocyrnia fortunaria", + "1977323": "Paradromulia", + "1977350": "Paradromulia ambigua", + "1977351": "Euchlaena", + "1977402": "Entomopteryx", + "1977419": "Cleora", + "1977757": "Tatosoma", + "1977759": "Tatosoma tipulata", + "1977764": "Tatosoma lestevata", + "1977767": "Tatosoma topea", + "1977773": "Tatosoma agrionata", + "1977775": "Theria", + "1977811": "Luxiaria", + "1977813": "Luxiaria emphatica", + "1977833": "Luxiaria amasa", + "1977863": "Luxiaria mitorrhaphes", + "1977864": "Hammaptera", + "1977960": "Therapis", + "1977962": "Therapis flavicaria", + "1977963": "Cataclysme", + "1977967": "Cataclysme riguata", + "1977971": "Cataclysme uniformata", + "1977986": "Heterarmia", + "1978010": "Heterarmia diorthogonia", + "1978014": "Chlorerythra", + "1978017": "Chlorerythra rubriplaga", + "1978019": "Jodis", + "1978034": "Jodis argentilineata", + "1978045": "Jodis rantaizanensis", + "1978056": "Jodis putata", + "1978065": "Jodis lactearia", + "1978075": "Arhodia", + "1978082": "Arhodia lasiocamparia", + "1978112": "Pterapherapteryx", + "1978114": "Pterapherapteryx sexalata", + "1978197": "Eusarca confusaria", + "1978245": "Hagnagora", + "1978268": "Hagnagora vittata", + "1978273": "Ischalis", + "1978274": "Ischalis gallaria", + "1978281": "Ischalis fortinata", + "1978282": "Ischalis variabilis", + "1978283": "Ischalis nelsonaria", + "1978364": "Ecliptopera", + "1978375": "Ecliptopera capitata", + "1978385": "Ecliptopera rectilinea", + "1978398": "Ecliptopera benigna", + "1978405": "Ecliptopera delecta", + "1978407": "Ecliptopera recordans", + "1978422": "Ecliptopera umbrosaria", + "1978424": "Ecliptopera muscicolor", + "1978445": "Ecliptopera silaceata", + "1978451": "Heterothera", + "1978455": "Leuciris", + "1978464": "Leuciris fimbriaria", + "1978481": "Trichodezia", + "1978493": "Trichodezia albovittata", + "1978494": "Trichodezia californiata", + "1978495": "Leptomiza", + "1978499": "Leptomiza calcearia", + "1978506": "Hypomecis", + "1978524": "Hypomecis transcissa", + "1978526": "Hypomecis umbrosaria", + "1978529": "Hypomecis percnioides", + "1978607": "Elophos", + "1978643": "Patalene", + "1978671": "Patalene olyzonaria", + "1978697": "Hastina", + "1978732": "Doratoptera", + "1978736": "Oar", + "1978749": "Campaea", + "1978751": "Campaea perlata", + "1978770": "Campaea honoraria", + "1978776": "Campaea margaritaria", + "1978784": "Dischidesia", + "1978789": "Dischidesia cinerea", + "1978814": "Deileptenia", + "1978821": "Deileptenia ribeata", + "1978835": "Chlorochlamys", + "1978893": "Casbia", + "1978904": "Casbia farinalis", + "1978915": "Casbia tanaoctena", + "1978919": "Casbia celidosema", + "1978937": "Casbia rectaria", + "1978948": "Pantherodes", + "1978958": "Pantherodes pardalaria", + "1978959": "Pantherodes unciaria", + "1978974": "Carsia", + "1978977": "Carsia sororiata", + "1978994": "Calletaera", + "1978996": "Calletaera basipuncta", + "1978999": "Calletaera subexpressa", + "1979019": "Phthonoloba", + "1979021": "Phthonoloba viridifasciata", + "1979040": "Palleopa", + "1979041": "Palleopa innotata", + "1979106": "Pelurga", + "1979213": "Loxaspilates", + "1979222": "Loxaspilates arrizanaria", + "1979229": "Loxaspilates montuosa", + "1979243": "Hydriomena", + "1979255": "Hydriomena renunciata", + "1979289": "Hydriomena perfracta", + "1979308": "Hydriomena impluviata", + "1979344": "Hydriomena speciosata", + "1979358": "Hydriomena manzanita", + "1979380": "Hydriomena albifasciata", + "1979427": "Hydriomena nubilofasciata", + "1979430": "Hydriomena ruberata", + "1979473": "Hydriomena furcata", + "1979475": "Hydriomena transfigurata", + "1979501": "Hydriomena irata", + "1979517": "Pareumelea", + "1979521": "Pareumelea eugeniata", + "1979554": "Lobogonia", + "1979561": "Lobogonia formosana", + "1979562": "Lobogonia aculeata", + "1979719": "Paleacrita", + "1979721": "Paleacrita merriccata", + "1979726": "Paleacrita vernata", + "1979727": "Arichanna", + "1979758": "Arichanna pryeraria", + "1979781": "Arichanna melanaria", + "1979787": "Arichanna marginata", + "1979801": "Arichanna picaria", + "1979806": "Arichanna refracta", + "1979822": "Arichanna fumigata", + "1980021": "Gabriola", + "1980025": "Gabriola dyari", + "1980033": "Poecilasthena", + "1980035": "Poecilasthena thalassias", + "1980041": "Poecilasthena anthodes", + "1980044": "Poecilasthena scoliota", + "1980055": "Poecilasthena schistaria", + "1980063": "Poecilasthena pulchraria", + "1980068": "Poecilasthena subpurpureata", + "1980239": "Dichorda", + "1980245": "Dichorda illustraria", + "1980247": "Dichorda rectaria", + "1980250": "Dichorda iridaria", + "1980263": "Agaraeus", + "1980269": "Agaraeus discolor", + "1980288": "Eubarnesia", + "1980290": "Eubarnesia ritaria", + "1980342": "Thera", + "1980462": "Chloraspilates bicoloraria", + "1980490": "Heliomystis", + "1980491": "Heliomystis electrica", + "1980504": "Orthofidonia", + "1980505": "Orthofidonia flavivenata", + "1980509": "Orthofidonia tinctaria", + "1980511": "Ascotis", + "1980521": "Ascotis selenaria", + "1980525": "Ascotis fortunata", + "1980532": "Ascotis selenaria", + "1980533": "Ascotis reciprocaria", + "1980556": "Aethaloida", + "1980559": "Aethaloida packardaria", + "1980650": "Myrioblephara", + "1980659": "Myrioblephara desumpta", + "1980694": "Myrioblephara simplaria", + "1980718": "Ectropis", + "1980811": "Ectropis excellens", + "1980821": "Ectropis bispinaria", + "1980827": "Ectropis bhurmitra", + "1980917": "Ectropis arizanensis", + "1981051": "Pareclipsis", + "1981063": "Pareclipsis umbrata", + "1981142": "Nemoria", + "1981144": "Nemoria darwiniata", + "1981160": "Nemoria lixaria", + "1981161": "Nemoria saturiba", + "1981162": "Nemoria bifilata", + "1981191": "Nemoria leptalea", + "1981202": "Nemoria mimosaria", + "1981209": "Nemoria pulcherrima", + "1981210": "Nemoria zygotaria", + "1981222": "Nemoria rubrifrontaria", + "1981252": "Nemoria astraea", + "1981258": "Nemoria unitaria", + "1981277": "Nemoria bistriaria", + "1981280": "Nemoria glaucomarginaria", + "1981281": "Nemoria pistaciaria", + "1981284": "Nemoria elfa", + "1981312": "Nemoria obliqua", + "1981325": "Hirasa", + "1981357": "Hirasa taiwana", + "1981449": "Atopophysa", + "1981457": "Atopophysa opulens", + "1981690": "Minoa", + "1981696": "Minoa murinata", + "1981717": "Dichordophora", + "1981718": "Dichordophora phoenix", + "1981744": "Evecliptopera", + "1981778": "Malacodea", + "1981855": "Obeidia", + "1981933": "Ninodes", + "1981937": "Ninodes watanabei", + "1981938": "Ninodes splendens", + "1981941": "Chloropteryx", + "1981951": "Chloropteryx nordicaria", + "1981959": "Chloropteryx tepperaria", + "1981973": "Chloropteryx opalaria", + "1981987": "Eutrapela", + "1981996": "Synopsia", + "1981998": "Synopsia sociaria", + "1982006": "Apithecia", + "1982007": "Apithecia viridata", + "1982017": "Dichromodes", + "1982024": "Dichromodes stilbiata", + "1982033": "Dichromodes anelictis", + "1982043": "Dichromodes usurpatrix", + "1982047": "Dichromodes consignata", + "1982055": "Dichromodes confluaria", + "1982071": "Dichromodes estigmaria", + "1982072": "Dichromodes poecilotis", + "1982085": "Dichromodes ainaria", + "1982100": "Dichromodes disputata", + "1982102": "Dichromodes atrosignata", + "1982103": "Dichromodes mesogonia", + "1982120": "Dichromodes indicataria", + "1982147": "Mictodoca", + "1982148": "Mictodoca toxeuta", + "1982199": "Pingasa", + "1982203": "Pingasa secreta", + "1982221": "Pingasa chlora", + "1982267": "Pingasa ruginaria", + "1982289": "Monocerotesa", + "1982291": "Monocerotesa virgata", + "1982367": "Eupithecia", + "1982406": "Eupithecia lariciata", + "1982447": "Eupithecia unicolor", + "1982458": "Eupithecia laquaearia", + "1982500": "Eupithecia icterata", + "1982525": "Eupithecia subumbrata", + "1982529": "Eupithecia lanceata", + "1982533": "Eupithecia cretaceata", + "1982541": "Eupithecia pusillata", + "1982542": "Eupithecia vulgata", + "1982592": "Eupithecia pimpinellata", + "1982613": "Eupithecia miserulata", + "1982636": "Eupithecia tantillaria", + "1982671": "Eupithecia virgaureata", + "1982746": "Eupithecia assimilata", + "1982770": "Eupithecia millefoliata", + "1982779": "Eupithecia pantellata", + "1982780": "Eupithecia interruptofasciata", + "1982790": "Eupithecia semigraphata", + "1982791": "Eupithecia conterminata", + "1982824": "Eupithecia palpata", + "1982838": "Eupithecia haworthiata", + "1982865": "Eupithecia melanolopha", + "1982867": "Eupithecia selinata", + "1982885": "Eupithecia succenturiata", + "1982898": "Eupithecia jejunata", + "1982918": "Eupithecia oxycedrata", + "1982924": "Eupithecia ericeata", + "1982951": "Eupithecia columbiata", + "1983000": "Eupithecia pulchellata", + "1983034": "Eupithecia gratiosata", + "1983039": "Eupithecia scopariata", + "1983052": "Eupithecia venosata", + "1983062": "Eupithecia orana", + "1983101": "Eupithecia cocciferata", + "1983111": "Eupithecia egenaria", + "1983170": "Eupithecia inturbata", + "1983260": "Eupithecia subfuscata", + "1983263": "Eupithecia graefii", + "1983288": "Eupithecia intricata", + "1983387": "Eupithecia insigniata", + "1983393": "Eupithecia unedonata", + "1983434": "Eupithecia subapicata", + "1983441": "Eupithecia satyrata", + "1983442": "Eupithecia dodoneata", + "1983491": "Eupithecia longidens", + "1983525": "Eupithecia centaureata", + "1983528": "Eupithecia ultimaria", + "1983548": "Eupithecia innotata", + "1983558": "Eupithecia plumbeolata", + "1983648": "Eupithecia linariata", + "1983705": "Eupithecia tripunctaria", + "1983709": "Eupithecia acutipennis", + "1983755": "Eupithecia indigata", + "1983756": "Eupithecia pauxillaria", + "1983799": "Eupithecia rotundopuncta", + "1983888": "Eupithecia phoeniceata", + "1983896": "Eupithecia absinthiata", + "1983922": "Eupithecia sinuosaria", + "1983967": "Eupithecia impurata", + "1983997": "Eupithecia abietaria", + "1983999": "Eupithecia simpliciata", + "1984033": "Eupithecia breviculata", + "1984073": "Eupithecia zelmira", + "1984110": "Eupithecia bolterii", + "1984117": "Eupithecia abbreviata", + "1984142": "Iridopsis", + "1984231": "Pero", + "1984651": "Protitame", + "1984654": "Protitame virginalis", + "1984667": "Heterolocha", + "1984731": "Odezia", + "1984734": "Odezia atrata", + "1984741": "Dysphania", + "1984909": "Fisera", + "1984913": "Fisera eribola", + "1984922": "Aplocera", + "1984942": "Aplocera plagiata", + "1984949": "Aplocera praeformata", + "1984954": "Aplocera efformata", + "1985058": "Pylargosceles", + "1985061": "Pylargosceles steganioides", + "1985146": "Agathia", + "1985152": "Agathia laetata", + "1985158": "Agathia carissima", + "1985167": "Agathia lycaenaria", + "1985181": "Agathia pisina", + "1985191": "Agathia visenda", + "1985192": "Agathia hemithearia", + "1985228": "Agathia prasinaspis", + "1985230": "Agathia magnificentia", + "1985258": "Pholodes", + "1985267": "Pholodes sinistraria", + "1985404": "Drepanulatrix", + "1985405": "Drepanulatrix monicaria", + "1985406": "Drepanulatrix bifilata", + "1985409": "Drepanulatrix quadraria", + "1985421": "Drepanulatrix carnearia", + "1985423": "Drepanulatrix falcataria", + "1985484": "Himeromima", + "1985485": "Himeromima aulis", + "1985486": "Dasyfidonia", + "1985487": "Dasyfidonia avuncularia", + "1985489": "Austroterpna", + "1985490": "Austroterpna paratorna", + "1985492": "Emmiltis", + "1985507": "Cleorodes", + "1985522": "Cleorodes lichenaria", + "1985570": "Dasycorsa", + "1985573": "Dasycorsa modesta", + "1985578": "Epimecis", + "1985628": "Rhodochlora", + "1985647": "Rhodochlora brunneipalpis", + "1985702": "Metabraxas", + "1985707": "Metabraxas rubrotincta", + "1985716": "Argyrocosma", + "1985728": "Glossotrophia", + "1985734": "Glossotrophia rufomixtaria", + "1985742": "Glossotrophia asellaria", + "1985760": "Glossotrophia confinaria", + "1985787": "Hypodoxa", + "1985809": "Hypodoxa bryophylla", + "1985816": "Hypodoxa emiliaria", + "1985826": "Hypodoxa muscosaria", + "1985925": "Blepharoctenucha", + "1985926": "Blepharoctenucha virescens", + "1985928": "Zeuctophlebia", + "1985931": "Zeuctophlebia squalidata", + "1985934": "Eubaphe", + "1985945": "Eubaphe mendica", + "1985952": "Eubaphe unicolor", + "1985956": "Eubaphe meridiana", + "1985969": "Lomographa", + "1985993": "Lomographa anoxys", + "1986004": "Lomographa vestaliata", + "1986009": "Lomographa claripennis", + "1986020": "Lomographa glomeraria", + "1986032": "Lomographa platyleucata", + "1986040": "Lomographa semiclarata", + "1986052": "Lomographa bimaculata", + "1986054": "Lomographa inamata", + "1986056": "Lomographa temerata", + "1986061": "Lomographa margarita", + "1986081": "Xanthorhoe", + "1986091": "Xanthorhoe lacustrata", + "1986101": "Xanthorhoe occulta", + "1986113": "Xanthorhoe labradorensis", + "1986157": "Xanthorhoe fluctuata", + "1986166": "Xanthorhoe spadicearia", + "1986171": "Xanthorhoe ferrugata", + "1986191": "Xanthorhoe annotinata", + "1986192": "Xanthorhoe defensaria", + "1986220": "Xanthorhoe montanata", + "1986223": "Xanthorhoe anaspila", + "1986367": "Xanthorhoe decoloraria", + "1986452": "Xanthorhoe biriviata", + "1986497": "Xanthorhoe packardata", + "1986508": "Xanthorhoe saturata", + "1986522": "Xanthorhoe quadrifasiata", + "1986575": "Xanthorhoe designata", + "1986604": "Xanthorhoe iberica", + "1986623": "Xanthorhoe abrasaria", + "1986645": "Sauris", + "1986650": "Sauris malaca", + "1986693": "Sauris lichenias", + "1986720": "Sauris melanosterna", + "1986772": "Catoria", + "1986774": "Catoria camelaria", + "1986779": "Catoria sublavaria", + "1986787": "Catoria olivescens", + "1986805": "Eudrepanulatrix", + "1986807": "Eudrepanulatrix rectifascia", + "1986845": "Niceteria", + "1986846": "Niceteria macrocosma", + "1986868": "Ecleora", + "1986877": "Ecleora solieraria", + "1986905": "Neuromelia", + "1986906": "Neuromelia selectata", + "1986930": "Abaciscus", + "1986936": "Abaciscus tristis", + "1986939": "Crypsiphona", + "1986942": "Crypsiphona ocultaria", + "1986953": "Eustroma", + "1986997": "Cladara", + "1986998": "Cladara atroliturata", + "1987067": "Cymatophora", + "1987141": "Thallophaga", + "1987145": "Thallophaga taylorata", + "1987146": "Thallophaga hyperborea", + "1987202": "Ziridava", + "1987203": "Ziridava xylinaria", + "1987204": "Ziridava kanshireiensis", + "1987269": "Cidaria", + "1987300": "Glenoides", + "1987301": "Glenoides texanaria", + "1987326": "Smicropus", + "1987330": "Smicropus laeta", + "1987346": "Fascellina", + "1987362": "Fascellina plagiata", + "1987377": "Fascellina chromataria", + "1987509": "Pseudoterpna", + "1987527": "Pseudoterpna pruinata", + "1987555": "Isturgia", + "1987578": "Isturgia limbaria", + "1987602": "Heterorachis devocata", + "1987626": "Metallaxis", + "1987629": "Metallaxis semiustus", + "1987632": "Sericosema", + "1987633": "Sericosema juturnaria", + "1987645": "Chemerina", + "1987650": "Chemerina caliginearia", + "1987660": "Megabiston", + "1987665": "Megabiston plumosaria", + "1987711": "Asthena", + "1987737": "Asthena anseraria", + "1987740": "Asthena undulata", + "1987744": "Asthena albulata", + "1987746": "Comostola", + "1987747": "Comostola leucomerata", + "1987766": "Comostola cedilla", + "1987767": "Comostola meritaria", + "1987775": "Comostola laesaria", + "1987776": "Comostola subtiliaria", + "1987785": "Comostola nereidaria", + "1987786": "Comostola enodata", + "1987787": "Comostola ocellulata", + "1987792": "Costaconvexa", + "1987820": "Oenochroma", + "1987849": "Asaphodes", + "1987855": "Asaphodes abrogata", + "1987861": "Xerodes", + "1987995": "Menophra", + "1988002": "Menophra taiwana", + "1988007": "Menophra nycthemeraria", + "1988019": "Menophra japygiaria", + "1988064": "Menophra abruptaria", + "1988224": "Tyloptera", + "1988225": "Tyloptera bella", + "1988251": "Zythos", + "1988257": "Zythos avellanea", + "1988282": "Tympanota", + "1988302": "Tympanota perophora", + "1988304": "Dilophodes", + "1988306": "Dilophodes elegans", + "1988350": "Chlorocoma", + "1988354": "Chlorocoma dichloraria", + "1988360": "Chlorocoma melocrossa", + "1988361": "Chlorocoma assimilis", + "1988362": "Chlorocoma cadmaria", + "1988370": "Chlorocoma tachypora", + "1988376": "Chlorocoma carenaria", + "1988382": "Chlorocoma stereota", + "1988384": "Chlorocoma vertumnaria", + "1988388": "Calamodes", + "1988390": "Calamodes occitanaria", + "1988399": "Derambila", + "1988420": "Derambila dentifera", + "1988485": "Lipomelia", + "1988487": "Lipomelia subusta", + "1988488": "Eufidonia", + "1988495": "Eufidonia notataria", + "1988503": "Coenocalpe", + "1988506": "Coenocalpe millierata", + "1988533": "Colostygia", + "1988593": "Colostygia pectinataria", + "1988602": "Colostygia multistrigaria", + "1988642": "Colostygia turbata", + "1988684": "Colostygia olivata", + "1988760": "Onychora", + "1988762": "Onychora agaritharia", + "1988779": "Lomaspilis", + "1988815": "Euphronarcha", + "1988820": "Euphronarcha luxaria", + "1988876": "Euchoeca", + "1988881": "Euchoeca nebulata", + "1988887": "Rikiosatoa", + "1988893": "Epicyme", + "1988894": "Epicyme rubropunctaria", + "1989045": "Stenoporpia", + "1989083": "Stenoporpia pulmonaria", + "1989084": "Stenoporpia excelsaria", + "1989161": "Chloroclystis", + "1989170": "Chloroclystis metallospora", + "1989181": "Chloroclystis catastreptes", + "1989282": "Chloroclystis insigillata", + "1989283": "Chloroclystis approximata", + "1989355": "Chloroclystis rubroviridis", + "1989377": "Chloroclystis filata", + "1989393": "Chloroclystis blanda", + "1989428": "Chloroclystis v-ata", + "1989522": "Chloroclystis mniochroa", + "1989538": "Chloroclystis pyrrholopha", + "1989580": "Nepheloleuca", + "1989582": "Nepheloleuca politia", + "1989594": "Rhoptria asperaria", + "1989902": "Ceratodalia", + "1989903": "Ceratodalia gueneata", + "1989927": "Heterostegane", + "1989942": "Heterostegane subtessellata", + "1989996": "Odontopera", + "1990043": "Odontopera bilinearia", + "1990050": "Odontopera arida", + "1990066": "Odontopera bidentata", + "1990088": "Odontopera albiguttulata", + "1990105": "Odontopera insulata", + "1990136": "Aethalura", + "1990150": "Aethalura punctulata", + "1990155": "Aethalura intertexta", + "1990163": "Thalaina", + "1990164": "Thalaina angulosa", + "1990165": "Thalaina inscripta", + "1990167": "Thalaina selenaea", + "1990178": "Thalaina clara", + "1990193": "Neoterpes", + "1990198": "Neoterpes trianguliferata", + "1990200": "Neoterpes edwardsata", + "1990247": "Psilosticha", + "1990255": "Psilosticha absorpta", + "1990256": "Psilosticha attacta", + "1990257": "Lobocleta", + "1990270": "Lobocleta plemyraria", + "1990331": "Lobocleta peralbata", + "1990335": "Lobocleta ossularia", + "1990356": "Archirhoe", + "1990357": "Archirhoe neomexicana", + "1990367": "Ciampa", + "1990371": "Ciampa arietaria", + "1990531": "Crocallis", + "1990533": "Crocallis dardoinaria", + "1990551": "Crocallis elinguaria", + "1990582": "Crocallis tusciaria", + "1990591": "Sphacelodes", + "1990594": "Sphacelodes vulneraria", + "1990677": "Aplasta", + "1990989": "Thyrinteina", + "1990998": "Thyrinteina arnobia", + "1991004": "Nematocampa", + "1991012": "Nematocampa resistaria", + "1991120": "Palpoctenidia", + "1991123": "Palpoctenidia phoenicosoma", + "1991135": "Hemistola", + "1991179": "Hemistola chrysoprasaria", + "1991234": "Hyperythra", + "1991276": "Esakiopteryx", + "1991277": "Esakiopteryx volitans", + "1991279": "Metarranthis", + "1991280": "Metarranthis indeclinata", + "1991281": "Metarranthis amyrisaria", + "1991289": "Metarranthis angularia", + "1991294": "Metarranthis homuraria", + "1991295": "Metarranthis refractaria", + "1991298": "Metarranthis obfirmaria", + "1991299": "Metarranthis duaria", + "1991303": "Metarranthis hypochraria", + "1991309": "Oenospila", + "1991310": "Oenospila flavifusata", + "1991325": "Metanema", + "1991357": "Hemithea", + "1991371": "Hemithea aestivaria", + "1991378": "Hemithea tritonaria", + "1991394": "Hemithea wuka", + "1991401": "Cyllopoda", + "1991405": "Cyllopoda claudicula", + "1991410": "Cyllopoda bipuncta", + "1991426": "Haematopis", + "1991429": "Haematopis grataria", + "1991462": "Idiochlora minuscula", + "1991466": "Idiochlora ussuriaria", + "1991467": "Chlorodes", + "1991468": "Chlorodes boisduvalaria", + "1991531": "Almeria", + "1991532": "Almeria kalischata", + "1991777": "Naxa", + "1991779": "Naxa textilis", + "1991783": "Naxa seriaria", + "1991817": "Stegania", + "1991843": "Hospitalia", + "1991846": "Hospitalia flavolineata", + "1991934": "Chorodna", + "1991945": "Chorodna ochreimacula", + "1991946": "Gymnoscelis", + "1992066": "Gymnoscelis rufifasciata", + "1992166": "Phrissogonus", + "1992167": "Phrissogonus laticostata", + "1992168": "Pterospoda", + "1992172": "Pterospoda nigrescens", + "1992205": "Macrosoma", + "1992267": "Hyblaea", + "1992268": "Hyblaea ibidias", + "1992277": "Hyblaea firmamentum", + "1992283": "Hyblaea constellata", + "1992301": "Hyblaea synaema", + "1992315": "Hyblaea puera", + "1992378": "Alucita huebneri", + "1992434": "Alucita phricodes", + "1992489": "Alucita pygmaea", + "1992504": "Alucita hexadactyla", + "1992537": "Homadaula", + "1992547": "Homadaula anisocentra", + "1992572": "Pseudothyris", + "1992573": "Pseudothyris sepulchralis", + "1992586": "Banisia", + "1992634": "Banisia myrsusalis", + "1992729": "Hexeris", + "1992732": "Kanshizeia", + "1992817": "Dysodia oculatana", + "1992877": "Canaea", + "1992883": "Canaea ryukyuensis", + "1992889": "Canaea hyalospila", + "1992906": "Aglaopus", + "1992907": "Aglaopus centiginosa", + "1992936": "Aglaopus pyrrhata", + "1992938": "Aglaopus loxomita", + "1992944": "Arniocera", + "1992956": "Arniocera erythropyga", + "1992969": "Arniocera auriguttata", + "1992973": "Herimba", + "1992975": "Morova", + "1992976": "Morova subfasciata", + "1993011": "Addaea", + "1993021": "Addaea subtessellata", + "1993034": "Pyrinioides", + "1993036": "Pyrinioides sinuosa", + "1993042": "Sonagara", + "1993043": "Sonagara strigipennis", + "1993044": "Oxycophina", + "1993045": "Oxycophina theorina", + "1993403": "Thyris", + "1993419": "Thyris fenestrella", + "1993451": "Striglina", + "1993496": "Striglina scitaria", + "1993564": "Hypolamprus", + "1993634": "Glanycus", + "1993637": "Glanycus insolitus", + "1993640": "Meskea", + "1993643": "Meskea dyspteraria", + "1994549": "Culama", + "2048233": "Dicranura", + "2080450": "Gerinia", + "2278098": "Triodia", + "3231212": "Erynnis", + "3255365": "Cycnus", + "3255832": "Plesiomorpha", + "3255940": "Manulea", + "3255943": "Barsine", + "3255956": "Rhyparia", + "3256113": "Numata", + "3256116": "Proxenus", + "3256119": "Xenoplia", + "3256169": "Patania", + "3256188": "Tebenna", + "3256294": "Macaria", + "3256322": "Agriopis", + "3256356": "Nebula", + "3256453": "Rhoptria", + "3256512": "Melinaea", + "3256568": "Denisia", + "3256584": "Endoxyla", + "3256657": "Arsacia", + "3256826": "Apatelodidae", + "3256934": "Polyploca", + "3256950": "Pharmacis", + "3257150": "Phigalia", + "3257152": "Cupido", + "3257220": "Catoptria", + "3257225": "Elophila", + "3257328": "Ypsolopha", + "3257351": "Talbotia", + "3257405": "Dasystoma", + "3257500": "Acanthophila", + "3257514": "Euchaetis", + "3257524": "Brunia", + "3257628": "Forsterinaria", + "3257649": "Penthesilea", + "3257662": "Ochrogaster", + "3257694": "Wittia", + "3257794": "Periphanes", + "3257798": "Macrochilo", + "3257809": "Erebus caprimulgus", + "3257836": "Megalographa", + "3257894": "Bryophila", + "3257930": "Zimmermannia", + "3258045": "Cleta", + "3258057": "Salvatgea", + "3258063": "Aglaomorpha", + "3258105": "Capys", + "3258127": "Diaphania", + "3258133": "Nepita", + "3258147": "Orthocraspeda", + "3261008": "Diaphora", + "3262002": "Tetragonus", + "3527": "Hyblaeidae", + "3528": "Incurvariidae", + "3529": "Lacturidae", + "3530": "Lasiocampidae", + "3531": "Lecithoceridae", + "3551": "Epipyropidae", + "3552": "Ethmiidae", + "3553": "Gelechiidae", + "3554": "Glyphipterigidae", + "3555": "Heliodinidae", + "3556": "Hepialidae", + "3558": "Heterogynidae", + "3563": "Endromidae", + "4299071": "Melanis pixe", + "4299095": "Doxocopa pavon", + "4299191": "Chlosyne damoetas", + "4299201": "Chlosyne eumeda", + "4299211": "Siproeta epaphus", + "4299213": "Siproeta stelenes", + "4299218": "Anthanassa texana", + "4299368": "Vanessa cardui", + "4299370": "Vanessa virginiensis", + "4299535": "Boloria eunomia", + "4299565": "Boloria chariclea", + "4299576": "Boloria frigga", + "4299597": "Boloria titania", + "4299599": "Boloria freija", + "4299778": "Euptychia pertepida", + "4299802": "Lethe creola", + "4299804": "Lethe anthedon", + "4299870": "Papilio appalachiensis", + "4299871": "Papilio victorinus", + "4300000": "Celastrina lucia", + "4300011": "Celastrina neglectamajor", + "4300012": "Celastrina serotina", + "4300259": "Udara blackburni", + "4300267": "Strephonota", + "4300268": "Strephonota tephraeus", + "4300277": "Callophrys mossii", + "4300363": "Callophrys muiri", + "4300384": "Strymon albata", + "4300393": "Strymon bazochii", + "4300399": "Strymon acis", + "4300406": "Rekoa palegon", + "4300486": "Ziegleria", + "4300662": "Xyloryctidae", + "4300664": "Autostichidae", + "4300668": "Peleopodidae", + "4301036": "Cosmopterix pulchrimella", + "4301044": "Acronicta oblinita", + "4301052": "Bellura densa", + "4301055": "Bellura obliqua", + "4301067": "Helotropha", + "4301068": "Helotropha reniformis", + "4301071": "Oligia bridghamii", + "4301081": "Oligia chlorostigma", + "4301098": "Ceramica", + "4301121": "Sunira", + "4301148": "Euxoa auxiliaris", + "4301238": "Lycophotia phyllophora", + "4301242": "Diarsia esurialis", + "4301249": "Diarsia rosaria", + "4301255": "Diarsia jucunda", + "4301281": "Parabagrotis", + "4301282": "Parabagrotis formalis", + "4301283": "Parabagrotis sulinaris", + "4301304": "Amyna natalis", + "4301305": "Feralia", + "4301306": "Feralia comstocki", + "4301307": "Feralia jocosa", + "4301308": "Targalla", + "4301309": "Targalla delatrix", + "4301310": "Hypena strigatus", + "4301312": "Homophoberia apicosa", + "4301340": "Diacrisia", + "4301348": "Paonias excaecata", + "4301355": "Panoquina errans", + "4301426": "Choranthus vitellius", + "4301744": "Copaeodes aurantiaca", + "4301749": "Copaeodes minima", + "4301876": "Antigonus emorsa", + "4301897": "Pholisora mejicanus", + "4301934": "Timochares ruptifasciata", + "4301942": "Grais stigmaticus", + "4301945": "Ephyriades brunnea", + "4302008": "Piruna polingii", + "4302101": "Thorybes confusis", + "4302199": "Archips semiferanus", + "4302202": "Archips argyrospila", + "4302220": "Anavitrinella", + "4302221": "Anavitrinella pampinaria", + "4302229": "Protoboarmia", + "4302230": "Protoboarmia porcelaria", + "4302240": "Besma quercivoraria", + "4302252": "Orthonama obstipata", + "4302268": "Spargania luctuata", + "4302274": "Cladara limitaria", + "4302289": "Epirrita", + "4302319": "Vaxi critica", + "4302333": "Microcrambus croesus", + "4302388": "Fulgoraecia exigua", + "4302389": "Dalcerides ingenita", + "4404325": "Odice", + "4404424": "Pennithera", + "4404729": "Nyctobrya", + "4404732": "Kuchleria", + "4404934": "Cauchas", + "4405001": "Kirinia", + "4405135": "Schinia", + "4405245": "Griposia", + "4405258": "Casilda", + "4405430": "Crypsedra", + "4405439": "Megaspilates", + "4405493": "Meganola", + "4405533": "Artimelia", + "4405981": "Canararctia", + "4405983": "Globia", + "4406051": "Acanthovalva", + "4406069": "Camptogramma", + "4406074": "Glacies", + "4406145": "Gillmeria", + "4406268": "Coranarta", + "4406291": "Coptotriche", + "4406298": "Paracolax", + "4406360": "Apterogenum", + "4406481": "Conogethes", + "4406516": "Gazoryctra", + "4406551": "Apochima", + "4406622": "Comibaena", + "4406889": "Hypercallia", + "4406931": "Hypatopa", + "4407138": "Stenolechiodes", + "4407165": "Longalatedes", + "4407218": "Resapamea", + "4407310": "Anorthoa", + "4407354": "Litoligia", + "4407363": "Faveria", + "4407476": "Dioszeghyana", + "4407554": "Honeyania", + "4407697": "Digrammia", + "4407786": "Boudinotiana", + "4408085": "Eurranthis", + "4408190": "Heterogenea", + "4408204": "Euplagia", + "4408275": "Minois", + "4522322": "Heterogenea asella", + "4522753": "Adscita statices", + "4522795": "Lampronia morosa", + "4522886": "Cauchas rufimitrella", + "4522890": "Cauchas rufifrontella", + "4522891": "Cauchas fibulella", + "4522896": "Cauchas leucocerella", + "4522911": "Nematopogon adansoniella", + "4522916": "Nematopogon swammerdamella", + "4522919": "Nematopogon robertella", + "4522922": "Nematopogon metaxella", + "4522933": "Incurvaria masculella", + "4522974": "Boudinotiana puella", + "4523461": "Casilda consecraria", + "4523486": "Kuchleria insignata", + "4523515": "Phaiogramma", + "4523519": "Phaiogramma faustinata", + "4523522": "Comibaena bajularia", + "4523556": "Epirrita christyi", + "4523560": "Epirrita autumnata", + "4523564": "Epirrita dilutata", + "4523707": "Triphosa tauteli", + "4523725": "Rheumaptera cervinalis", + "4523880": "Pasiphila debiliata", + "4523883": "Pasiphila chloerata", + "4523885": "Pasiphila rectangulata", + "4524052": "Pennithera ulicata", + "4524054": "Pennithera firmata", + "4524069": "Lampropteryx", + "4524070": "Lampropteryx otregiata", + "4524072": "Lampropteryx suffumata", + "4524221": "Costaconvexa polygrammata", + "4524223": "Costaconvexa centrostrigaria", + "4524320": "Scotopteryx angularia", + "4524376": "Camptogramma bilineata", + "4524393": "Phibalapteryx virgata", + "4524400": "Aleucis", + "4524403": "Aleucis distinctata", + "4524421": "Ennomos fuscantaria", + "4524424": "Ennomos quercaria", + "4524426": "Ennomos erosaria", + "4524513": "Menophra harterti", + "4524541": "Eurranthis plummistaria", + "4524568": "Tephronia oranaria", + "4524588": "Nychiodes notarioi", + "4524636": "Hypomecis roboraria", + "4524638": "Hypomecis punctinalis", + "4524712": "Apochima flabellaria", + "4524740": "Phigalia pilosaria", + "4524792": "Psodos", + "4524793": "Psodos quadrifaria", + "4524822": "Glacies coracina", + "4524890": "Elophos vittaria", + "4524902": "Elophos dilucidaria", + "4524913": "Charissa", + "4524914": "Charissa glaucinaria", + "4524922": "Charissa variegata", + "4524929": "Charissa mucidaria", + "4524951": "Charissa obscurata", + "4524955": "Charissa ambiguata", + "4524961": "Charissa predotae", + "4524962": "Charissa onustaria", + "4524998": "Megaspilates mundataria", + "4525034": "Acanthovalva inconspicuaria", + "4525068": "Heliomata glarearia", + "4525072": "Chiasmia", + "4525078": "Chiasmia clathrata", + "4525091": "Isturgia famula", + "4525093": "Isturgia spodiaria", + "4525097": "Isturgia catalaunaria", + "4525103": "Isturgia miniosaria", + "4525111": "Neognopharmia", + "4525132": "Pterophorus convergata", + "4525177": "Prochoreutis sehestediana", + "4525189": "Coptotriche marginea", + "4525266": "Eriogaster lanestris", + "4525268": "Eriogaster catax", + "4525270": "Eriogaster rimicola", + "4525273": "Eriogaster arbusculae", + "4525354": "Orthotelia sparganella", + "4525364": "Cedestis gysseleniella", + "4525369": "Yponomeuta cagnagellus", + "4525420": "Paraswammerdamia conspersella", + "4525425": "Paraswammerdamia albicapitella", + "4525436": "Praydidae", + "4525443": "Rhigognostis senilella", + "4525448": "Rhigognostis schmaltzella", + "4525465": "Argyresthiidae", + "4525476": "Argyresthia spinosella", + "4525487": "Argyresthia bonnetella", + "4525500": "Ypsolopha horridella", + "4525503": "Ypsolopha lucella", + "4525505": "Ypsolopha mucronella", + "4525510": "Ypsolopha parenthesella", + "4525530": "Ypsolopha nemorella", + "4525540": "Ypsolopha dentella", + "4525547": "Ypsolopha vittella", + "4525557": "Ypsolopha alpella", + "4525562": "Ypsolopha scabrella", + "4525607": "Korscheltellus", + "4525610": "Phymatopus hecta", + "4525641": "Acossus terebra", + "4525713": "Microsphecia", + "4525777": "Synanthedon myopaeformis", + "4525803": "Synanthedon stomoxiformis", + "4525846": "Bembecia uroceriformis", + "4525859": "Pyropteron chrysidiforme", + "4525884": "Pyropteron triannuliformis", + "4526048": "Narycia duplicella", + "4526050": "Diplodoma laichartingella", + "4526094": "Dahlica triquetrella", + "4527338": "Pseudopostega", + "4527339": "Pseudopostega crepusculella", + "4527342": "Pseudopostega auritella", + "4527355": "Cilix hispanica", + "4527533": "Stathmopodidae", + "4527903": "Pseudotelphusa paripunctella", + "4527957": "Stenolechiodes pseudogemmellus", + "4527972": "Altenia scriptella", + "4528100": "Phthorimaea absoluta", + "4528529": "Helcystogramma albinervis", + "4528539": "Brachmia blandella", + "4528547": "Dichomeris derasella", + "4528593": "Diurnea lipsiella", + "4528658": "Oecophora geoffrella", + "4528692": "Borkhausenia tinctella", + "4528694": "Borkhausenia unitella", + "4528702": "Tachystola acroxantha", + "4528813": "Mompha jurassicella", + "4528818": "Mompha langiella", + "4528997": "Lypusidae", + "4529032": "Hypercallia citrinalis", + "4529064": "Depressaria radiella", + "4529186": "Agonopterix alstromeriana", + "4529248": "Chrysoclista linneela", + "4529566": "Ethmia quadrillella", + "4529630": "Hypatopa binotella", + "4529738": "Anatrachyntis badia", + "4529834": "Phiaris", + "4529900": "Celypha aurofasciana", + "4529908": "Celypha rufana", + "4529915": "Celypha rurestrana", + "4529931": "Metendothenia atropunctana", + "4530002": "Cydia strobilella", + "4530138": "Bactra lancealana", + "4530151": "Notocelia cynosbatella", + "4530214": "Zeiraphera griseana", + "4530406": "Gypsonoma nitidulana", + "4530424": "Endothenia gentianaeana", + "4530608": "Clepsis peritana", + "4530632": "Periclepsis cinctana", + "4530947": "Asalebria geminella", + "4530951": "Asalebria florella", + "4531145": "Acrobasis suavella", + "4531147": "Acrobasis advenella", + "4531158": "Acrobasis marmorea", + "4531185": "Ectomyelois", + "4531237": "Sciota divisella", + "4531242": "Ortholepis betulae", + "4531246": "Dioryctria schuetzeella", + "4531264": "Sciota fumella", + "4531284": "Pempelia palumbella", + "4531365": "Hypotia infulalis", + "4531376": "Hypotia miegi", + "4531402": "Hypsopygia glaucinalis", + "4531409": "Hypsopygia incarnatalis", + "4531417": "Stemmatophora brunnealis", + "4531425": "Stemmatophora borgialis", + "4531427": "Bostra caesarealis", + "4531429": "Stemmatophora fuscolimbalis", + "4531506": "Agriphila geniculea", + "4531517": "Agriphila latistria", + "4531643": "Ancylolomia disparalis", + "4531670": "Angustalius malacellus", + "4531687": "Acentria ephemerella", + "4531690": "Nymphula nitidulata", + "4531708": "Donacaula forficella", + "4531713": "Metaxmeste schrankiana", + "4531968": "Calamochrous acutella", + "4531975": "Paratalanta hyalinalis", + "4532022": "Evergestis forficalis", + "4532024": "Evergestis isatidalis", + "4532050": "Udea hamalis", + "4532057": "Udea accolalis", + "4532088": "Udea decrepitalis", + "4532095": "Udea lutealis", + "4532097": "Udea nebulalis", + "4532122": "Cydalima perspectalis", + "4532125": "Conogethes punctiferalis", + "4532146": "Botyodes diniasalis", + "4532150": "Stenia bruguieralis", + "4532155": "Stenia aetnaealis", + "4532160": "Stenia punctalis", + "4532185": "Erebidae", + "4532203": "Eublemma ostrina", + "4532206": "Eublemma parva", + "4532208": "Eublemma baccalix", + "4532216": "Eublemma scitula", + "4532236": "Eublemma candidana", + "4532239": "Eublemma purpurina", + "4532253": "Eublemma minutata", + "4532260": "Eublemma polygramma", + "4532264": "Eublemma pura", + "4532266": "Eublemma cochylioides", + "4532269": "Honeyania ragusana", + "4532273": "Odice suava", + "4532283": "Odice jucunda", + "4532293": "Calliteara abietis", + "4532297": "Calliteara fascelina", + "4532351": "Hypena obesalis", + "4532352": "Hypena lividalis", + "4532357": "Hypena crassalis", + "4532366": "Zekelita antiqualis", + "4532395": "Lygephila procax", + "4532405": "Lygephila pastinum", + "4532408": "Lygephila viciae", + "4532412": "Lygephila craccae", + "4532453": "Pandesma robusta", + "4532461": "Catocala eutychea", + "4532471": "Catocala fulminea", + "4532473": "Catocala nymphaea", + "4532493": "Euclidia mi", + "4532500": "Pechipogo plumigeralis", + "4532508": "Zanclognatha lunalis", + "4532510": "Zanclognatha zelleralis", + "4532516": "Paracolax tristalis", + "4532532": "Euplagia quadripunctaria", + "4532534": "Callimorpha dominula", + "4532544": "Diacrisia sannio", + "4532549": "Canararctia rufescens", + "4532562": "Chelis", + "4532565": "Chelis maculosa", + "4532608": "Ocnogyna zoraida", + "4532614": "Artimelia latreillii", + "4532696": "Eucarta virgo", + "4532700": "Condica viscosa", + "4532811": "Nyctobrya muralis", + "4532886": "Deltote uncula", + "4532888": "Deltote deceptoria", + "4532890": "Deltote pygarga", + "4532908": "Thysanoplusia daubei", + "4532986": "Olivenebula xanthochloris", + "4533115": "Agrochola lychnidis", + "4533122": "Orbona", + "4533123": "Orbona fragariae", + "4533124": "Tiliacea", + "4533125": "Tiliacea sulphurago", + "4533128": "Tiliacea citrago", + "4533136": "Tiliacea aurago", + "4533202": "Apterogenum ypsillon", + "4533211": "Atethmia algirica", + "4533255": "Aporophyla canescens", + "4533273": "Griposia aprilina", + "4533285": "Polymixis lichenea", + "4533325": "Polymixis trisignata", + "4533344": "Mniotype occidentalis", + "4533345": "Mniotype solieri", + "4533347": "Mniotype adusta", + "4533360": "Mniotype satura", + "4533362": "Mniotype spinosa", + "4533431": "Diarsia brunnea", + "4533433": "Diarsia mendica", + "4533442": "Diarsia florida", + "4533444": "Diarsia dahlii", + "4533446": "Diarsia rubi", + "4533660": "Eugnorisma", + "4533661": "Eugnorisma depuncta", + "4533663": "Eugnorisma arenoflavida", + "4533671": "Eugnorisma glareosa", + "4533695": "Agrotis schawerdai", + "4533714": "Agrotis bigramma", + "4533720": "Agrotis catalaunensis", + "4533882": "Dichagyris candelisequa", + "4533924": "Dichagyris musiva", + "4533937": "Eucoptocnemis optabilis", + "4533952": "Lacanobia suasa", + "4533957": "Lasionycta calberlai", + "4534011": "Conisania luteago", + "4534017": "Conisania andalusica", + "4534038": "Coranarta cordigera", + "4534046": "Sideridis turbida", + "4534052": "Sideridis rivularis", + "4534057": "Sideridis reticulata", + "4534086": "Hadena filograna", + "4534162": "Anarta odontites", + "4534166": "Anarta trifolii", + "4534170": "Anarta pugnax", + "4534194": "Anarta sodae", + "4534198": "Anarta farnhami", + "4534207": "Ceramica pisi", + "4534225": "Lasionycta proxima", + "4534245": "Caradrina clavipalpis", + "4534250": "Caradrina rebeli", + "4534252": "Caradrina flavirena", + "4534257": "Caradrina selini", + "4534275": "Caradrina flava", + "4534290": "Hoplodrina octogenaria", + "4534299": "Charanyca ferruginea", + "4534360": "Dioszeghyana schmidtii", + "4534389": "Helotropha leucostigma", + "4534398": "Longalatedes elymi", + "4534405": "Denticucullus", + "4534408": "Denticucullus pygmina", + "4534456": "Lenisa", + "4534458": "Lenisa geminipuncta", + "4534463": "Celaena haworthii", + "4534485": "Apamea illyria", + "4534486": "Apamea lithoxylaea", + "4534525": "Phragmatiphila nexa", + "4534532": "Lateroligia", + "4534533": "Lateroligia ophiogramma", + "4534538": "Litoligia literosa", + "4534540": "Crypsedra gemmea", + "4534661": "Heliocheilus", + "4534663": "Schinia cardui", + "4534669": "Schinia cognata", + "4534675": "Heliothis nubigera", + "4534681": "Heliothis peltigera", + "4534683": "Heliothis incarnata", + "4534685": "Heliothis adaucta", + "4534686": "Heliothis viriplaca", + "4534691": "Amphipyra effusa", + "4534719": "Allophyes oxyacanthae", + "4534757": "Pardoxia graellsii", + "4534762": "Meganola strigula", + "4534766": "Meganola kolbi", + "4534767": "Meganola albula", + "4534769": "Meganola togatulalis", + "4534773": "Nola cicatricalis", + "4534776": "Nola harouni", + "4534778": "Nola subchlamydula", + "4534779": "Nola aerugula", + "4534782": "Nola confusalis", + "4534787": "Nola thymula", + "4534788": "Nola chlamitulalis", + "4534792": "Nola desmotes", + "4534796": "Garella nilotica", + "4534798": "Garella musculana", + "4534826": "Cerura iberica", + "4534869": "Euhampsonia cristata", + "4534872": "Ptilodon cucullina", + "4534909": "Notodonta ziczac", + "4534914": "Notodonta tritophus", + "4534947": "Euteliidae", + "4535092": "Pseudophilotes bavius", + "4535106": "Tarucus balkanica", + "4535162": "Turanana panagea", + "4535172": "Phengaris teleius", + "4535271": "Gonepteryx cleobule", + "4535280": "Euchloe eversi", + "4535285": "Euchloe hesperidum", + "4535307": "Pieris bryoniae", + "4535386": "Carcharodus baeticus", + "4535396": "Syrichtus proto", + "4535510": "Minois dryas", + "4535539": "Hipparchia tamadabae", + "4535581": "Satyrus persephone", + "4535592": "Pseudochazara hippolyte", + "4535596": "Pseudochazara anthelea", + "4535614": "Pararge achine", + "4535618": "Kirinia climene", + "4535620": "Kirinia roxelana", + "4535627": "Pararge paramegaera", + "4535630": "Pararge deidamia", + "4535632": "Pararge megera", + "4535636": "Pararge maera", + "4535689": "Proterebia afra", + "4535754": "Ypthima asterope", + "4535809": "Euphydryas aurinia", + "4535817": "Euphydryas maturna", + "4535819": "Euphydryas desfontainii", + "4535827": "Aglais io", + "4535884": "Bucculatrix bechsteinella", + "4535904": "Bucculatrix frangutella", + "4536292": "Platyptilia isodactylus", + "4536472": "Gillmeria pallidactyla", + "4536483": "Gillmeria ochrodactyla", + "4538": "Adelidae", + "4542": "Alucitidae", + "4547": "Anthelidae", + "4554": "Batrachedridae", + "4571921": "Enchoria", + "4572392": "Myrtartona", + "4572640": "Catapaecilma", + "4573369": "Pachyodes", + "4573720": "Catacometes", + "4574082": "Catabenoides", + "4575600": "Pilostibes", + "4575996": "Goboea", + "4576037": "Cryptoptila", + "4576177": "Thema", + "4577617": "Theila", + "4618976": "Mellea", + "4684017": "Axinoptera", + "4684087": "Tanaoctenia", + "4684088": "Symmoracma", + "4684145": "Thyraylia", + "4684219": "Maroga", + "4684220": "Maroga melanostigma", + "4684253": "Lophophleps", + "4684258": "Lipogya", + "4684330": "Stictane", + "4684520": "Scoliocheta", + "4684521": "Scoliocheta ergatis", + "4684590": "Prepocosma", + "4684591": "Prepocosma schalidota", + "4684781": "Psaroxantha", + "4684789": "Psaroxantha calligenes", + "4684879": "Prionocris", + "4684888": "Prionocris protoxantha", + "4684892": "Merocroca", + "4684893": "Merocroca automima", + "4684910": "Thymiatris cephalochra", + "4684924": "Eusemocosma", + "4684925": "Eusemocosma pruinosa", + "4684951": "Cosmaresta", + "4684958": "Cosmaresta anarrecta", + "4684986": "Cryptolechia schistopa", + "4685065": "Crepidosceles timalphes", + "4685097": "Acantholena siccella", + "4685116": "Piloprepes anassa", + "4685138": "Eulechria sigmophora", + "4685219": "Eulechria marmorata", + "4685271": "Eulechria basiplaga", + "4685299": "Epithymema incomposita", + "4685306": "Epithymema helias", + "4685431": "Hemibela callista", + "4685448": "Hemibela oxyptera", + "4685468": "Pilostibes stigmatias", + "4685485": "Epicurica laetiferanus", + "4685556": "Tymbophora", + "4685557": "Tymbophora peltastis", + "4685566": "Tachystola stenoptera", + "4685576": "Tachystola oxytora", + "4685588": "Agriophara velitata", + "4685595": "Agriophara discobola", + "4685628": "Ageletha", + "4685629": "Ageletha elaeodes", + "4685631": "Ageletha hemiteles", + "4685645": "Garrha atripunctatella", + "4685650": "Garrha repandula", + "4685653": "Garrha costimacula", + "4685655": "Garrha rufa", + "4685662": "Garrha phoenopis", + "4685669": "Garrha ocellifera", + "4685678": "Garrha pudica", + "4685683": "Garrha idiosema", + "4685777": "Syncometes", + "4685778": "Syncometes vilis", + "4685802": "Arignota stercorata", + "4685809": "Acmotoma", + "4685810": "Acmotoma magniferella", + "4685893": "Barea meridarcha", + "4685945": "Leistarcha", + "4685946": "Leistarcha scitissimella", + "4685972": "Lepidotarsa habrodelta", + "4685979": "Syringoseca", + "4685980": "Syringoseca rhodoxantha", + "4685981": "Syringoseca mimica", + "4686015": "Thema chlorochyta", + "4686016": "Thema protogramma", + "4686018": "Thema macroscia", + "4686022": "Thema peloxantha", + "4686027": "Thema stasiastica", + "4686029": "Thema psammoxantha", + "4686039": "Catacometes phanozona", + "4686042": "Philobota xanthastis", + "4686055": "Philobota mucida", + "4686111": "Philobota curvilinea", + "4686133": "Philobota cretacea", + "4686164": "Philobota thiocrossa", + "4686190": "Philobota baryptera", + "4686214": "Philobota transversella", + "4686264": "Philobota cirrhocephala", + "4686266": "Philobota philostaura", + "4686308": "Rectiostoma", + "4686350": "Scatochresis", + "4686355": "Scatochresis innumera", + "4686368": "Olbonoma triptycha", + "4686384": "Acanthodela", + "4686385": "Acanthodela erythrosema", + "4686386": "Acanthodela protophaes", + "4686483": "Antipterna trilicella", + "4686517": "Isomoralla", + "4686531": "Isomoralla gephyrota", + "4686532": "Isomoralla eriscota", + "4686617": "Heteroteucha distephana", + "4686620": "Heteroteucha anthodora", + "4686621": "Heteroteucha occidua", + "4686628": "Heteroteucha translatella", + "4686655": "Oligoloba", + "4686656": "Oligoloba severa", + "4686696": "Cirrograpta", + "4686697": "Cirrograpta sporadica", + "4686699": "Aeolothapsa", + "4686702": "Aeolothapsa malacella", + "4686743": "Palimmeces variegata", + "4686843": "Delexocha", + "4686844": "Delexocha ochrocausta", + "4686897": "Lichenaula onychodes", + "4686905": "Lichenaula onychotypa", + "4686907": "Lichenaula calligrapha", + "4686913": "Lichenaula arisema", + "4686955": "Pycnocera", + "4686956": "Pycnocera hypoxantha", + "4687068": "Katha", + "4687117": "Trotocraspeda", + "4687205": "Nacoleia", + "4687228": "Glaucocharis chrysochyta", + "4687250": "Haritalodes", + "4687253": "Metoeca", + "4687264": "Deuterarcha", + "4687288": "Trigonoorda gavisalis", + "4687385": "Mentaxya", + "4687388": "Neoligia", + "4687389": "Eudocima materna", + "4687398": "Aplotelia", + "4687438": "Coenotoca", + "4687494": "Dictyestra", + "4687531": "Bagada", + "4687545": "Tripudia", + "4687565": "Neumichtis nigerrima", + "4687661": "Acronicta psorallina", + "4687681": "Athetis thoracica", + "4687701": "Macaldenia", + "4687726": "Anterastria", + "4687791": "Microxyla", + "4687817": "Thalatha bryochlora", + "4687827": "Thalatha guttalis", + "4687851": "Enigmogramma", + "4687877": "Protodeltote", + "4687906": "Craniophora nodyna", + "4687930": "Cruria donowani", + "4687933": "Mocis frugalis", + "4687934": "Mocis alterna", + "4687935": "Mocis trifasciata", + "4687937": "Mataeomera", + "4687943": "Shargacucullia", + "4687984": "Niphonyx", + "4687991": "Anticarsia irrorata", + "4688049": "Proteuxoa sanguinipuncta", + "4688073": "Thoracolopha", + "4688075": "Proteuxoa florescens", + "4688092": "Proteuxoa hypochalchis", + "4688098": "Proteuxoa rubripuncta", + "4688136": "Cosmophila", + "4688142": "Heliothis punctifera", + "4688148": "Chloridea", + "4688166": "Condica aroana", + "4688169": "Condica dolorosa", + "4688172": "Condica illecta", + "4688298": "Striacosta", + "4688408": "Basistriga", + "4688465": "Sphingognatha", + "4688500": "Rapdalus", + "4688528": "Euclera", + "4688533": "Anydraula", + "4688624": "Demonarosa", + "4688641": "Metapercnia", + "4688690": "Rusicada", + "4688714": "Argentostiria", + "4688717": "Ardozyga", + "4688727": "Syntomoides", + "4688768": "Lineostriastiria", + "4688971": "Sesapa", + "4688975": "Periphoba", + "4689025": "Tristeirometa", + "4689059": "Mesoptila", + "4689117": "Paraspilarctia", + "4689138": "Olepa", + "4689300": "Mimaglossa", + "4689316": "Omichlis", + "4689394": "Myrtartona coronias", + "4689458": "Neoalbertia", + "4689527": "Stoermeriana", + "4689528": "Loscopia", + "4689548": "Mangina", + "4689585": "Epicallia", + "4689628": "Leptostales", + "4689644": "Carminda", + "4689667": "Glauconoe", + "4689708": "Cyme", + "4689751": "Echydna", + "4689790": "Elasmia", + "4689905": "Trapezites lutea", + "4689912": "Pasma tasmanicus", + "4689929": "Suastus gremius", + "4689963": "Toxidia rietmanni", + "4690079": "Iphiclides feisthamelii", + "4692485": "Papilio hermosanus", + "4692504": "Papilio epycides", + "4693382": "Papilio dehaanii", + "4693675": "Ornithoptera euphorion", + "4694313": "Eurytides phaon", + "4695593": "Synargis", + "4695668": "Allodontoides", + "4695709": "Aenetus ligniveren", + "4695719": "Dumbletonius unimaculata", + "4695734": "Salbia", + "4695875": "Sewa", + "4695897": "Darisa", + "4695929": "Pelagodes", + "4695998": "Neoscythris", + "4696040": "Lithilaria", + "4696100": "Macrurocampa", + "4696103": "Tochara", + "4696201": "Thysanoptyx", + "4696228": "Gastridiota", + "4699245": "Colotis annae", + "4701136": "Hesperocharis costaricensis", + "4701298": "Phoebis trite", + "4701336": "Phoebis virgo", + "4702047": "Algia", + "4702183": "Syntypistis", + "4702229": "Microlithosia", + "4702252": "Albinospila", + "4702368": "Isa", + "4702379": "Phlossa", + "4702515": "Hesudra", + "4702564": "Trilocha varians", + "4702588": "Coryphista", + "4702599": "Hydriomena rixata", + "4702603": "Hydriomena deltoidata", + "4702609": "Hydriomena hemizona", + "4702630": "Lassaba", + "4702642": "Satoblephara", + "4702651": "Eriplatymetra", + "4702731": "Xanthorhoe semifissata", + "4702781": "Descoreba", + "4702783": "Gellonia pannularia", + "4702784": "Gellonia dejectaria", + "4702805": "Perixera", + "4702831": "Peratostega", + "4702862": "Orthocabera", + "4702877": "Plesanemma", + "4702878": "Plesanemma fucata", + "4702889": "Lophosis", + "4702891": "Eumacaria", + "4702892": "Asaphodes aegrota", + "4702893": "Asaphodes beata", + "4702911": "Asaphodes clarata", + "4702912": "Asaphodes chlamydota", + "4702939": "Hypochrosis", + "4702953": "Stamnoctenis", + "4702961": "Chalastra aristarcha", + "4703000": "Eloasa", + "4703014": "Hulda", + "4703048": "Merodictya", + "4703184": "Salma", + "4703248": "Harutaea", + "4703308": "Orthospila", + "4703444": "Rhagastis", + "4703460": "Neogurelca", + "4703479": "Cizara ardeniae", + "4703509": "Agape", + "4703670": "Nisista", + "4703719": "Visiana", + "4704034": "Taipsaphida", + "4704072": "Ammatho", + "4704098": "Arcobara", + "4704221": "Kallimoides", + "4704279": "Mycalesis perseus", + "4704315": "Lexias", + "4704316": "Lexias aeropa", + "4704352": "Hypocysta pseudirius", + "4704356": "Hypocysta adiante", + "4704380": "Paryphthimoides", + "4704400": "Oreixenica lathoniella", + "4704401": "Oreixenica correae", + "4704404": "Oreixenica kershawi", + "4704407": "Oreixenica orichora", + "4704499": "Argynnina", + "4704500": "Argynnina hobartia", + "4704501": "Argynnina cyrila", + "4704582": "Trigrammia", + "4704716": "Chabula", + "4704719": "Protonoceras", + "4704752": "Arippara", + "4704946": "Isocentris", + "4704959": "Niphograpta", + "4705037": "Craspedortha", + "4705066": "Pirascca", + "4705103": "Glyphipterix achlyoessa", + "4705145": "Uliura", + "4705151": "Chorsia", + "4705534": "Oxytenis", + "4705537": "Ofatulena", + "4705623": "Mnesiloba", + "4705630": "Rinaca", + "4705637": "Pseudodirphia", + "4705641": "Dirphiopsis", + "4705666": "Nudaurelia", + "4705755": "Depressariidae", + "4705796": "Ruttellerona", + "4705852": "Trismelasmos", + "4705876": "Protuliocnemis", + "4705882": "Pseudocollix", + "4705945": "Euzora", + "4705978": "Cycloprorodes", + "4705981": "Laothus", + "4706535": "Vamuna", + "4706578": "Agnoea", + "4706585": "Celenna", + "4706694": "Churinga", + "4706723": "Collita", + "4706738": "Cypoides", + "4706892": "Vitacea", + "4706983": "Lophophelma", + "4707000": "Quasithosea", + "4707050": "Warreniplema", + "4707100": "Crasilogia", + "4707419": "Oiketicus", + "4707431": "Entometa", + "4707529": "Anaxidia", + "4707641": "Micronidia", + "4707685": "Mimomiza", + "4707698": "Glycythyma", + "4707710": "Acropolitis", + "4707748": "Taniva", + "4707821": "Gymnandrosoma", + "4707834": "Conchylis", + "4707848": "Zomariana doxasticana", + "4707896": "Strepsicrates macropetana", + "4707900": "Strepsicrates infensa", + "4708040": "Callidrepana", + "4708154": "Diedra", + "4708174": "Tumicla", + "4708183": "Leuroperna sera", + "4708197": "Dissomorphia", + "4708288": "Parapercnia", + "4708342": "Stathmopoda horticola", + "4708365": "Mesastrape", + "4708407": "Asthenoptycha", + "4708493": "Aloa", + "4708566": "Popoudina", + "4708587": "Lemyra", + "4708592": "Cyana", + "4708606": "Anestia", + "4708611": "Cisthene", + "4708626": "Eospilarctia", + "4708638": "Notata", + "4708646": "Goniosema", + "4708648": "Arctelene", + "4708684": "Feigeria", + "4708698": "Mecytha", + "4708709": "Achrosis", + "4708713": "Duomitus", + "4708745": "Gonitis", + "4708885": "Michaelophorus", + "4708919": "Plebejidea", + "4708927": "Paralucia aurifer", + "4708972": "Hypochrysops apelles", + "4708973": "Hypochrysops ignita", + "4708977": "Hypochrysops pythias", + "4708984": "Neolucia hobartensis", + "4708995": "Euchrysops cnejus", + "4709030": "Jamides aleuas", + "4709051": "Nacaduba cyanea", + "4709095": "Hypolycaena danis", + "4709100": "Everes", + "4709102": "Everes lacturnus", + "4709103": "Denivia", + "4709107": "Arhopala micale", + "4709111": "Arhopala centaurus", + "4709133": "Candalides heathi", + "4709146": "Sahulana", + "4709147": "Sahulana scintillata", + "4709187": "Ariconias", + "4709268": "Amphitorna", + "4709287": "Neoilliberis", + "4709303": "Chalcidica", + "4709333": "Acratodes", + "4709385": "Nyea", + "4709474": "Detounda", + "4864": "Bedelliidae", + "4865": "Blastobasidae", + "4866": "Brahmaeidae", + "4867": "Bucculatricidae", + "4868": "Callidulidae", + "4870": "Choreutidae", + "4871": "Copromorphidae", + "5101371": "Morpheis pyracmon", + "5101374": "Morpheis xylotribus", + "5101394": "Cossus cossus", + "5101502": "Culama australis", + "5101527": "Langsdorfia franckii", + "5101556": "Gloveria arizonensis", + "5101559": "Gloveria gargamelle", + "5101590": "Sena prompta", + "5101640": "Paralebeda femorata", + "5101678": "Malacosoma castrensis", + "5101717": "Malacosoma alpicola", + "5101745": "Malacosoma neustria", + "5101763": "Malacosoma disstria", + "5101811": "Malacosoma constricta", + "5102207": "Euthrix isocyma", + "5102242": "Euthrix laeta", + "5102272": "Odonestis", + "5102287": "Odonestis pruni", + "5102300": "Odonestis bheroba", + "5102304": "Tolype laricis", + "5102324": "Tolype velleda", + "5102335": "Tolype distincta", + "5102365": "Tolype dayi", + "5102396": "Tolype notialis", + "5102423": "Bondia nigella", + "5102424": "Bondia crescentella", + "5102432": "Coscinoptycha improbana", + "5102628": "Choristoneura hebenstreitella", + "5102635": "Choristoneura fractivittana", + "5102637": "Choristoneura occidentalis", + "5102642": "Choristoneura diversana", + "5102651": "Choristoneura conflictana", + "5102666": "Choristoneura fumiferana", + "5102668": "Choristoneura pinus", + "5102671": "Choristoneura rosaceana", + "5102678": "Choristoneura parallela", + "5102683": "Choristis discotypa", + "5102693": "Aethes atomosana", + "5102735": "Aethes argentilimitana", + "5102773": "Aethes angustana", + "5102782": "Aethes angulatana", + "5102807": "Aethes promptana", + "5102809": "Aethes biscana", + "5102830": "Aethes seriatana", + "5102931": "Agapeta zoegana", + "5102951": "Agapeta hamana", + "5102982": "Ptycholoma lecheana", + "5103061": "Spilonota mortuana", + "5103066": "Spilonota ocellana", + "5103083": "Ancylis metamelana", + "5103100": "Ancylis albacostana", + "5103118": "Ancylis muricana", + "5103121": "Ancylis laetana", + "5103154": "Ancylis divisana", + "5103166": "Ancylis platanana", + "5103176": "Ancylis badiana", + "5103181": "Ancylis achatana", + "5103183": "Ancylis nubeculana", + "5103185": "Ancylis mitterbacheriana", + "5103201": "Ancylis burgessiana", + "5103227": "Ancylis comptana", + "5103394": "Eucosma giganteana", + "5103451": "Eucosma cana", + "5103502": "Eucosma obumbratana", + "5103613": "Eucosma pupillana", + "5103736": "Eucosma metzneriana", + "5103948": "Eucosma conterminana", + "5103998": "Eupoecilia ambiguella", + "5104056": "Epiblema roborana", + "5104063": "Epiblema scudderiana", + "5104088": "Epiblema chromata", + "5104093": "Epiblema luctuosissima", + "5104116": "Epiblema otiosana", + "5104157": "Syndemis afflictana", + "5104442": "Tortrix viridana", + "5104558": "Paramesia gnomana", + "5104597": "Aphelia ferrugana", + "5104641": "Dichelia histrionana", + "5104758": "Euspilapteryx", + "5104759": "Euspilapteryx auroguttella", + "5104772": "Caloptilia betulicola", + "5104781": "Caloptilia rufipennella", + "5104797": "Caloptilia hemidactylella", + "5104815": "Caloptilia belfragella", + "5104822": "Caloptilia xanthopharella", + "5104829": "Caloptilia falconipennella", + "5104882": "Caloptilia robustella", + "5104891": "Caloptilia stigmatella", + "5104903": "Caloptilia azaleella", + "5104927": "Caloptilia semifascia", + "5104940": "Caloptilia alchimiella", + "5104948": "Caloptilia violacella", + "5104986": "Caloptilia rhoifoliella", + "5105031": "Caloptilia fraxinella", + "5105054": "Caloptilia suberinella", + "5105057": "Caloptilia serotinella", + "5105068": "Caloptilia blandella", + "5105081": "Caloptilia adelosema", + "5105088": "Caloptilia populetorum", + "5105106": "Caloptilia cuculipennella", + "5105120": "Caloptilia bimaculatella", + "5105124": "Caloptilia packardella", + "5105158": "Caloptilia elongella", + "5105193": "Podalia thanatos", + "5105194": "Podalia albescens", + "5105212": "Podalia walkeri", + "5105217": "Podalia orsilochus", + "5105218": "Podalia habitus", + "5105227": "Podalia tympania", + "5105259": "Altha melanopsis", + "5105328": "Apoda", + "5105336": "Apoda rectilinea", + "5105339": "Apoda limacodes", + "5105344": "Apoda y-inversa", + "5105352": "Apoda latomia", + "5105365": "Euclea delphinii", + "5105367": "Euclea norba", + "5105369": "Euclea incisa", + "5105376": "Euclea nanina", + "5105379": "Euclea zygia", + "5105380": "Euclea buscki", + "5105447": "Parasa wellesca", + "5105458": "Parasa pastoralis", + "5105467": "Parasa shirakii", + "5105469": "Parasa indetermina", + "5105491": "Parasa minima", + "5105508": "Parasa chloris", + "5105547": "Parasa lepida", + "5105553": "Parasa flora", + "5105560": "Parasa consocia", + "5105570": "Parasa darma", + "5105584": "Parasa latistriga", + "5105588": "Monema rubriceps", + "5105603": "Lithacodes fasciola", + "5105642": "Sinica sinica", + "5105649": "Harrisina metallica", + "5105656": "Harrisina americana", + "5105671": "Harrisina coracina", + "5105929": "Zygaena lavandulae", + "5106115": "Zygaena laeta", + "5106160": "Zygaena centaureae", + "5106249": "Zygaena punctum", + "5106539": "Zygaena oxytropis", + "5106894": "Zygaena hilaris", + "5107076": "Zygaena graslini", + "5107128": "Zygaena angelicae", + "5107219": "Zygaena filipendulae", + "5107640": "Zygaena nevadensis", + "5107644": "Zygaena viciae", + "5107829": "Zygaena minos", + "5108318": "Cyclosia papilionaris", + "5108334": "Cyclosia panthona", + "5108335": "Cyclosia pieridoides", + "5108346": "Erasmia pulchella", + "5108349": "Erasmia sangaica", + "5108416": "Balsa labecula", + "5108417": "Balsa tristrigella", + "5108419": "Balsa malana", + "5108421": "Lophoptera vittigera", + "5108435": "Lophoptera squammigera", + "5108440": "Lophoptera phaeobasis", + "5108619": "Aegocera rectilinea", + "5108636": "Aegocera venulia", + "5108637": "Setagrotis", + "5108640": "Setagrotis pallidicollis", + "5108660": "Callopistria latreillei", + "5108665": "Callopistria floridensis", + "5108670": "Callopistria cordata", + "5108671": "Callopistria maillardi", + "5108705": "Callopistria duplicans", + "5108724": "Callopistria rivularis", + "5108737": "Callopistria pulchrilinea", + "5108752": "Callopistria exotica", + "5108761": "Callopistria juventina", + "5108787": "Callopistria placodoides", + "5108794": "Callopistria repleta", + "5108796": "Callopistria phaeogona", + "5108808": "Disticta atava", + "5108951": "Diphthera festiva", + "5108957": "Raphia frater", + "5108958": "Raphia hybris", + "5109196": "Dahlia capnobela", + "5109259": "Acontia trimaculata", + "5109270": "Acontia clerana", + "5109299": "Acontia aprica", + "5109345": "Acontia transfigurata", + "5109349": "Acontia thapsina", + "5109369": "Acontia quadriplaga", + "5109385": "Acontia marmoralis", + "5109407": "Acontia guttifera", + "5109413": "Acontia cretata", + "5109418": "Acontia nivipicta", + "5109437": "Acontia detrita", + "5109498": "Cucullia chamomillae", + "5109506": "Cucullia lucifuga", + "5109523": "Cucullia umbratica", + "5109535": "Cucullia intermedia", + "5109554": "Cucullia balsamitae", + "5109566": "Cucullia asteroides", + "5109596": "Cucullia convexipennis", + "5109599": "Cucullia absinthii", + "5109614": "Cucullia asteris", + "5109646": "Cucullia calendulae", + "5109651": "Cucullia laetifica", + "5109661": "Cucullia verbasci", + "5109670": "Cucullia fraudatrix", + "5109722": "Cucullia lactucae", + "5109766": "Ommatophora luminosa", + "5109782": "Donuca rubropicta", + "5109784": "Donuca castalia", + "5109786": "Donuca spectabilis", + "5109787": "Donuca orbigera", + "5109788": "Donuca lanipes", + "5109796": "Bocana manifestalis", + "5109821": "Staurophora celsia", + "5109829": "Spodoptera pulchella", + "5109830": "Spodoptera depravata", + "5109843": "Spodoptera cilium", + "5109845": "Spodoptera ornithogalli", + "5109848": "Spodoptera mauritia", + "5109850": "Spodoptera eridania", + "5109852": "Spodoptera praefica", + "5109855": "Spodoptera frugiperda", + "5109870": "Spodoptera umbraculata", + "5109872": "Spodoptera picta", + "5109881": "Spodoptera dolichos", + "5109882": "Spodoptera litura", + "5109898": "Spodoptera pecten", + "5109931": "Spodoptera littoralis", + "5109943": "Spodoptera pectinicornis", + "5109954": "Spodoptera latifascia", + "5109958": "Spodoptera albula", + "5110012": "Fodina contigua", + "5110013": "Fodina ostorius", + "5110044": "Epidromia rotundata", + "5110120": "Mythimna sinuosa", + "5110190": "Cyclodes omma", + "5110200": "Calamia tridens", + "5110211": "Thalpophila vitalba", + "5110213": "Thalpophila matura", + "5110232": "Artena dotata", + "5110256": "Euplexidia exotica", + "5110258": "Euplexidia pallidivirens", + "5110282": "Enispa vinacea", + "5110297": "Drasteria graphica", + "5110299": "Drasteria ingeniculata", + "5110305": "Drasteria mirifica", + "5110326": "Thysania zenobia", + "5110327": "Thysania agrippina", + "5110333": "Plusia contexta", + "5110341": "Plusia nichollae", + "5110356": "Plusia venusta", + "5110374": "Pseudanarta", + "5110377": "Pseudanarta crocea", + "5110390": "Sosxetra grata", + "5110397": "Plecoptera siderogramma", + "5110417": "Plecoptera recta", + "5110447": "Plecoptera oculata", + "5110490": "Plecoptera reflexa", + "5110492": "Allotria elonympha", + "5110533": "Ceroctena amynta", + "5110546": "Gesonia obeditalis", + "5110593": "Ammoconia senex", + "5110641": "Nonagria", + "5110644": "Nonagria typhae", + "5110670": "Eremobia ochroleuca", + "5110723": "Polia nimbosa", + "5110728": "Polia piniae", + "5110752": "Polia nugatis", + "5110754": "Polia imbrifera", + "5110756": "Polia purpurissata", + "5110765": "Anisoneura salebrosa", + "5110769": "Anisoneura aluco", + "5110818": "Oria musculosa", + "5110837": "Calyptra minuticornis", + "5110858": "Cerastis faceta", + "5110863": "Cerastis tenebrifera", + "5110871": "Cerastis leucographa", + "5110885": "Cerastis rubricosa", + "5110891": "Lepidodes gallopavo", + "5110981": "Phyllodes imperialis", + "5110986": "Phyllodes eyndhovii", + "5110993": "Phyllodes consobrina", + "5111007": "Simplicia mistacalis", + "5111044": "Simplicia discosticta", + "5111054": "Simplicia extinctalis", + "5111064": "Leucania abdominalis", + "5111076": "Leucania scirpicola", + "5111139": "Leucania ursula", + "5111141": "Leucania incognita", + "5111147": "Leucania joannisi", + "5111195": "Leucania stenographa", + "5111214": "Leucania dasycnema", + "5111249": "Leucania uda", + "5111343": "Leucania linda", + "5111360": "Leucania commoides", + "5111372": "Leucania insueta", + "5111397": "Leucania multilinea", + "5111481": "Leucania putrescens", + "5111501": "Leucania zeae", + "5111513": "Leucania punctosa", + "5111521": "Leucania pseudargyria", + "5111528": "Leucania imperfecta", + "5111535": "Leucania yu", + "5111546": "Leucania subpunctata", + "5111568": "Leucania adjuta", + "5111574": "Leucania comma", + "5111600": "Leucania diatrecta", + "5111643": "Luceria oculalis", + "5111830": "Hepatica irrorata", + "5111956": "Zotheca tranquilla", + "5111967": "Elusa semipecten", + "5111974": "Elusa ustula", + "5111980": "Elusa antennata", + "5112051": "Renia salusalis", + "5112053": "Renia flavipunctalis", + "5112060": "Renia discoloralis", + "5112068": "Renia adspergillus", + "5112078": "Renia factiosalis", + "5112080": "Renia sobrialis", + "5112130": "Eudryas unio", + "5112131": "Eudryas grata", + "5112153": "Xestia dilucida", + "5112155": "Xestia sexstrigata", + "5112160": "Xestia ochreago", + "5112191": "Xestia oblata", + "5112199": "Xestia praevia", + "5112229": "Xestia infimatis", + "5112233": "Xestia normaniana", + "5112254": "Xestia agathina", + "5112283": "Xestia xanthographa", + "5112291": "Xestia baja", + "5112302": "Xestia badicollis", + "5112336": "Xestia castanea", + "5112345": "Xestia stigmatica", + "5112377": "Xestia smithii", + "5112388": "Xestia kermesina", + "5112407": "Praxis edwardsii", + "5112410": "Praxis porphyretica", + "5112414": "Argyrogramma verruca", + "5112440": "Penicillaria jocosatrix", + "5112457": "Meterana levis", + "5112460": "Meterana pansicolor", + "5112461": "Meterana alcyone", + "5112464": "Meterana stipata", + "5112465": "Meterana decorata", + "5112467": "Meterana dotata", + "5112469": "Meterana ochthistis", + "5112474": "Meterana coeleno", + "5112475": "Meterana vitiosa", + "5112480": "Meterana tartaraea", + "5112481": "Meterana diatmeta", + "5112500": "Adrapsa ablualis", + "5112531": "Ophisma gravata", + "5112542": "Ophisma tropicalis", + "5112626": "Anoba pohli", + "5112798": "Melanomma auricinctaria", + "5112843": "Heterogramma circumflexalis", + "5112892": "Zale aeruginosa", + "5112900": "Zale intenta", + "5112908": "Zale undularis", + "5112911": "Zale bethunei", + "5112915": "Zale phaeocapna", + "5112917": "Zale lunata", + "5112923": "Zale horrida", + "5112927": "Zale edusina", + "5112940": "Zale minerea", + "5112944": "Zale helata", + "5112947": "Zale obliqua", + "5112959": "Zale unilineata", + "5112960": "Zale coracias", + "5112961": "Zale metatoides", + "5112963": "Zale calycanthata", + "5112968": "Zale duplicata", + "5112990": "Zale galbanata", + "5113001": "Schrankia capnophanes", + "5113030": "Schrankia taenialis", + "5113036": "Schrankia costaestrigalis", + "5113078": "Herminia grisealis", + "5113082": "Herminia fentoni", + "5113084": "Herminia tarsicrinalis", + "5113148": "Herminia annulata", + "5113234": "Herminia tarsipennalis", + "5113330": "Nodaria externalis", + "5113352": "Pindara illibata", + "5113365": "Diastema tigris", + "5113370": "Mycteroplus puniceago", + "5113385": "Thyas honesta", + "5113394": "Agarista agricola", + "5113847": "Aedia funesta", + "5113853": "Aedia leucomelas", + "5113925": "Hypospila bolinoides", + "5113950": "Achaea janata", + "5113951": "Orthosia carnipennis", + "5113985": "Orthosia transparens", + "5114011": "Orthosia pulchella", + "5114021": "Orthosia behrensiana", + "5114039": "Orthosia praeses", + "5114043": "Orthosia garmani", + "5114081": "Orthosia mys", + "5114083": "Orthosia rubescens", + "5114096": "Orthosia pacifica", + "5114107": "Orthosia alurina", + "5114128": "Orthosia hibisci", + "5114151": "Orthosia revicta", + "5114159": "Orthosia erythrolita", + "5114189": "Colocasia flavicornis", + "5114192": "Colocasia propinquilinea", + "5114198": "Colocasia coryli", + "5114254": "Nycteola", + "5114295": "Nycteola frigidana", + "5114303": "Nycteola indica", + "5114311": "Nycteola asiatica", + "5114316": "Nycteola siculana", + "5114317": "Nycteola cinereana", + "5114327": "Nycteola revayana", + "5114340": "Nycteola metaspilella", + "5114353": "Nycteola polycyma", + "5114394": "Xanthodes transversa", + "5114400": "Xanthodes intersepta", + "5114409": "Xanthodes albago", + "5114425": "Eligma narcissus", + "5114431": "Baileya ophthalmica", + "5114435": "Baileya levitans", + "5114436": "Baileya dormitans", + "5114439": "Baileya doubledayi", + "5114465": "Westermannia elliptica", + "5114515": "Westermannia gloriosa", + "5114892": "Clemensia umbrata", + "5114903": "Clemensia albata", + "5114912": "Cycnia tenera", + "5114915": "Cycnia oregonensis", + "5114921": "Cycnia collaris", + "5114923": "Haploa reversa", + "5114930": "Haploa contigua", + "5114934": "Haploa clymene", + "5114946": "Haploa confusa", + "5114949": "Gnophaela discreta", + "5114950": "Gnophaela latipennis", + "5114956": "Gnophaela vermiculata", + "5115046": "Aclytia heber", + "5115166": "Eugoa brunnea", + "5115167": "Eugoa grisea", + "5115198": "Eugoa formosicola", + "5115213": "Automolis", + "5115381": "Automolis lateritia", + "5115406": "Phaloe cruenta", + "5115500": "Bertholdia trigona", + "5115701": "Eucharia festiva", + "5115771": "Lithosia quadra", + "5115777": "Tyria jacobaeae", + "5115807": "Arctia", + "5115854": "Arctia virginalis", + "5115872": "Arctia flavia", + "5115874": "Arctia caja", + "5116095": "Camptoloma carum", + "5116128": "Arachnis picta", + "5116134": "Arachnis dilecta", + "5116145": "Cosmosoma auge", + "5116198": "Cosmosoma xanthosticta", + "5116238": "Cosmosoma telephus", + "5116252": "Cosmosoma achemon", + "5116293": "Cosmosoma myrodora", + "5116332": "Euchaetes zella", + "5116338": "Euchaetes bolteri", + "5116353": "Euchaetes egle", + "5116358": "Euchaetes antica", + "5116395": "Nudaria suffusa", + "5116397": "Nudaria mollis", + "5116412": "Nudaria ranruna", + "5116416": "Nudaria mundana", + "5116423": "Robinsonia dewitzi", + "5116471": "Setina", + "5116475": "Setina irrorella", + "5116504": "Argina astrea", + "5116698": "Eilema caniola", + "5116843": "Eilema pulverea", + "5117189": "Coscinia cribraria", + "5117200": "Coscinia striata", + "5117245": "Amastus coccinator", + "5117347": "Amastus thalassina", + "5117348": "Amastus aconia", + "5117361": "Poecilosoma eone", + "5117399": "Pelosia obtusa", + "5117400": "Pelosia muscerda", + "5117413": "Eudesmia lunaris", + "5117414": "Eudesmia menea", + "5117430": "Dysschema howardi", + "5117462": "Dysschema leucophaea", + "5117463": "Dysschema sacrifica", + "5117553": "Dysschema centenaria", + "5117685": "Dinia eagrus", + "5117687": "Dinia mena", + "5117776": "Euchromia folletii", + "5117779": "Euchromia polymena", + "5117791": "Euchromia lethe", + "5117805": "Euchromia amoena", + "5117941": "Agylla separata", + "5118046": "Lerina incarnata", + "5118171": "Laelia obsoleta", + "5118223": "Aroa discalis", + "5118291": "Orgyia australis", + "5118327": "Orgyia definita", + "5118348": "Orgyia postica", + "5118396": "Leucoma clara", + "5118422": "Arna bipunctapex", + "5118459": "Furcula modesta", + "5118474": "Furcula cinerea", + "5118509": "Furcula scolopendrina", + "5118524": "Furcula occidentalis", + "5118565": "Somera viridifusca", + "5118582": "Harpyia microsticta", + "5118798": "Ecnomodes sagittaria", + "5118828": "Ursia noctuiformis", + "5118829": "Disparia", + "5118837": "Disparia wilemani", + "5118841": "Disparia diluta", + "5118859": "Pterostoma gigantina", + "5118892": "Drymonia ruficornis", + "5118904": "Drymonia obliterata", + "5118934": "Schizura unicornis", + "5118944": "Schizura ipomaeae", + "5118949": "Schizura badia", + "5118974": "Fentonia baibarana", + "5118978": "Fentonia ocypete", + "5118996": "Stauropus fagi", + "5119000": "Stauropus sikkimensis", + "5119009": "Heterocampa astartoides", + "5119011": "Heterocampa biundata", + "5119013": "Heterocampa umbrata", + "5119016": "Heterocampa obliqua", + "5119026": "Heterocampa guttivitta", + "5119039": "Heterocampa subrotata", + "5119046": "Heterocampa averna", + "5119050": "Heterocampa astarte", + "5119143": "Ptilophora plumigera", + "5119181": "Phalera assimilis", + "5119183": "Phalera lydenburgi", + "5119193": "Phalera bucephaloides", + "5119211": "Phalera obscura", + "5119223": "Phalera flavescens", + "5119239": "Phalera grotei", + "5119245": "Phalera bucephala", + "5119338": "Leto venus", + "5119346": "Abantiades labyrinthicus", + "5119349": "Abantiades barcas", + "5119350": "Abantiades hyalinatus", + "5119353": "Abantiades latipennis", + "5119354": "Abantiades marcidus", + "5119361": "Abantiades hydrographus", + "5119482": "Zelleria haimbachi", + "5119506": "Zelleria oleastrella", + "5119513": "Zelleria hepariella", + "5119806": "Orophia", + "5119808": "Orophia ferrugella", + "5119868": "Snellenia lineata", + "5119880": "Durrantia", + "5119890": "Durrantia piperatella", + "5119893": "Callima formosella", + "5119895": "Callima argenticinctella", + "5119905": "Inga sparsiciliella", + "5119961": "Inga obscuromaculella", + "5119969": "Inga cretacea", + "5120053": "Wingia aurata", + "5120058": "Wingia rectiorella", + "5120063": "Wingia lambertella", + "5120278": "Eretmocera impactella", + "5120341": "Limnaecia tetraplanetis", + "5120343": "Limnaecia scoliosema", + "5120357": "Limnaecia cirrhozona", + "5120368": "Limnaecia cirrhosema", + "5120379": "Limnaecia camptosema", + "5120396": "Limnaecia phragmitella", + "5120453": "Euclemensia bassettella", + "5120465": "Metriotes lutarea", + "5120577": "Coleophora trifolii", + "5120668": "Coleophora alticolella", + "5120675": "Coleophora mayrella", + "5120767": "Coleophora laricella", + "5121040": "Coleophora salicorniae", + "5121046": "Coleophora discordella", + "5121177": "Coleophora alcyonipennella", + "5121244": "Coleophora lixella", + "5121517": "Coleophora serratella", + "5121613": "Coleophora deauratella", + "5121737": "Coleophora otidipennella", + "5121847": "Telphusa longifasciella", + "5121850": "Telphusa perspicua", + "5122013": "Tituacia deviella", + "5122037": "Aristotelia ericinella", + "5122062": "Aristotelia elegantella", + "5122086": "Aristotelia rubidella", + "5122113": "Aristotelia brizella", + "5122121": "Aristotelia corallina", + "5122131": "Aristotelia roseosuffusella", + "5122206": "Athrips mouffetella", + "5122293": "Pachythelia villosella", + "5122307": "Metura elongatus", + "5122430": "Eumeta variegatus", + "5122439": "Canephora hirsuta", + "5122455": "Clania lewinii", + "5122526": "Acrolophus piger", + "5122538": "Acrolophus texanella", + "5122556": "Acrolophus walsinghami", + "5122571": "Acrolophus mycetophagus", + "5122574": "Acrolophus propinqua", + "5122581": "Acrolophus heppneri", + "5122620": "Acrolophus laticapitana", + "5122646": "Acrolophus mortipennella", + "5122647": "Acrolophus arcanella", + "5122668": "Acrolophus mora", + "5122683": "Acrolophus panamae", + "5122691": "Acrolophus cressoni", + "5122696": "Acrolophus griseus", + "5122702": "Acrolophus popeanella", + "5122779": "Lindera tessellatella", + "5122798": "Euplocamus ophisa", + "5122876": "Tinea apicimaculella", + "5122969": "Tinea occidentella", + "5123018": "Mea bipunctella", + "5123042": "Geina didactyla", + "5123046": "Geina periscelidactylus", + "5123118": "Pterophorus furcatalis", + "5123137": "Pterophorus innotatalis", + "5123180": "Pterophorus lacteipennis", + "5123221": "Pterophorus pentadactyla", + "5123276": "Pterophorus monospilalis", + "5123339": "Tebenna micalis", + "5123346": "Choreutis", + "5123394": "Choreutis diana", + "5123419": "Choreutis sexfasciella", + "5123443": "Anthophila", + "5123449": "Anthophila achyrodes", + "5123461": "Anthophila fabriciana", + "5123474": "Anthophila nemorana", + "5123485": "Anthophila xanthogramma", + "5123489": "Anthophila amethystodes", + "5123542": "Anthophila albertiana", + "5123582": "Phylloporia bistrigella", + "5123615": "Phryxus caicus", + "5123636": "Agrius cingulata", + "5123663": "Agrius godarti", + "5123674": "Langia zenzeroides", + "5123676": "Clanis undulosa", + "5123685": "Clanis bilineata", + "5123701": "Oryba kadeni", + "5123704": "Oryba achemenides", + "5123707": "Amplypterus panopus", + "5123709": "Amplypterus mansoni", + "5123775": "Amorpha juglandis", + "5123784": "Isognathus scyron", + "5123801": "Isognathus caricae", + "5123811": "Ambulyx", + "5123815": "Ambulyx japonica", + "5123824": "Ambulyx tattina", + "5123837": "Ambulyx substrigilis", + "5123852": "Ambulyx dohertyi", + "5123870": "Ambulyx pryeri", + "5123876": "Ambulyx sericeipennis", + "5123884": "Ambulyx canescens", + "5123889": "Ambulyx kuangtungensis", + "5123890": "Ambulyx ochracea", + "5123922": "Mimas tiliae", + "5123954": "Eumorpha satellitia", + "5123956": "Eumorpha anchemolus", + "5123961": "Eumorpha phorbas", + "5123968": "Eumorpha typhon", + "5123971": "Eumorpha labruscae", + "5123979": "Eumorpha vitis", + "5123980": "Eumorpha analis", + "5123983": "Eumorpha fasciatus", + "5123991": "Eumorpha triangulum", + "5123996": "Eumorpha capronnieri", + "5123999": "Eumorpha pandorus", + "5124000": "Eumorpha achemon", + "5124007": "Laothoe populi", + "5124029": "Laothoe amurensis", + "5124049": "Amphion floridensis", + "5124050": "Deidamia inscriptum", + "5124071": "Nephele accentifera", + "5124080": "Nephele subvaria", + "5124088": "Nephele comma", + "5124093": "Nephele vau", + "5124109": "Nephele argentifera", + "5124118": "Sphinx dollii", + "5124119": "Sphinx poecila", + "5124121": "Sphinx morio", + "5124136": "Sphinx perelegans", + "5124143": "Sphinx ligustri", + "5124147": "Sphinx vashti", + "5124151": "Sphinx maurorum", + "5124172": "Sphinx libocedrus", + "5124199": "Sphinx luscitiosa", + "5124200": "Sphinx chersis", + "5124208": "Sphinx drupiferarum", + "5124219": "Sphinx canadensis", + "5124232": "Sphinx kalmiae", + "5124233": "Sphinx pinastri", + "5124249": "Enyo gorgon", + "5124250": "Enyo lugubris", + "5124268": "Enyo ocypete", + "5124300": "Macroglossum mediovitta", + "5124304": "Macroglossum fritzei", + "5124305": "Macroglossum passalus", + "5124332": "Macroglossum pyrrhosticta", + "5124348": "Macroglossum divergens", + "5124352": "Macroglossum trochilus", + "5124374": "Macroglossum sitiene", + "5124415": "Macroglossum bombylans", + "5124423": "Macroglossum errans", + "5124433": "Macroglossum saga", + "5124442": "Aellopos clavipes", + "5124443": "Aellopos fadus", + "5124448": "Aellopos tantalus", + "5124450": "Aellopos titan", + "5124452": "Aellopos ceculus", + "5124468": "Coloradia pandora", + "5124512": "Graellsia isabellae", + "5124542": "Rothschildia arethusa", + "5124557": "Rothschildia lebeau", + "5124589": "Rothschildia cinctus", + "5124595": "Rothschildia erycina", + "5124597": "Rothschildia jacobaeae", + "5124598": "Rothschildia hesperus", + "5124607": "Rothschildia speculifer", + "5124670": "Attacus", + "5124673": "Attacus taprobanis", + "5124716": "Attacus atlas", + "5124813": "Epiphora mythimnia", + "5124873": "Titaea tamerlan", + "5124880": "Aglia japonica", + "5124911": "Aglia tau", + "5125075": "Lemonia balcanica", + "5125104": "Lemonia dumi", + "5125118": "Epia muscosa", + "5125130": "Oberthueria formosibia", + "5125306": "Alophia combustella", + "5125525": "Semnia auritalis", + "5125545": "Neodavisia melusina", + "5125569": "Endotricha minialis", + "5125591": "Endotricha puncticostalis", + "5125596": "Endotricha theonalis", + "5125600": "Endotricha ignealis", + "5125602": "Endotricha mesenterialis", + "5125629": "Endotricha pyrosalis", + "5125633": "Endotricha olivacealis", + "5125635": "Endotricha repandalis", + "5125689": "Endotricha flammealis", + "5125780": "Tegulifera zonalis", + "5125916": "Cacozelia elegans", + "5125917": "Cacozelia basiochrealis", + "5125939": "Adelphia petrella", + "5125943": "Homoeosoma vagella", + "5126000": "Homoeosoma deceptorium", + "5126013": "Homoeosoma electella", + "5126052": "Homoeosoma sinuella", + "5126204": "Duponchelia lanceolalis", + "5126212": "Platytes alpinella", + "5126217": "Platytes cerusella", + "5126229": "Eudonia strigalis", + "5126231": "Eudonia minualis", + "5126240": "Eudonia atmogramma", + "5126241": "Eudonia feredayi", + "5126259": "Eudonia leptalea", + "5126284": "Eudonia dinodes", + "5126287": "Eudonia melanaegis", + "5126292": "Eudonia chlamydota", + "5126315": "Eudonia steropaea", + "5126332": "Eudonia asterisca", + "5126344": "Eudonia submarginalis", + "5126352": "Eudonia heterosalis", + "5126357": "Eudonia legnota", + "5126365": "Eudonia spenceri", + "5126376": "Eudonia aphrodes", + "5126381": "Eudonia cataxesta", + "5126396": "Eudonia cymatias", + "5126397": "Eudonia characta", + "5126398": "Eudonia bisinualis", + "5126404": "Eudonia echo", + "5126434": "Eudonia aspidota", + "5126445": "Eudonia octophora", + "5126449": "Eudonia trivirgata", + "5126454": "Eudonia periphanes", + "5126458": "Eudonia colpota", + "5126494": "Desmia bajulalis", + "5126517": "Desmia funeralis", + "5126533": "Desmia deploralis", + "5126585": "Omiodes simialis", + "5126635": "Omiodes diemenalis", + "5126637": "Omiodes indicata", + "5126663": "Syllepis hortalis", + "5126668": "Antigastra morysalis", + "5126675": "Anania funebris", + "5126680": "Anania verbascalis", + "5126697": "Argyria auratella", + "5126718": "Argyria nivalis", + "5126721": "Argyria lacteella", + "5126726": "Argyria critica", + "5126729": "Argyria gonogramma", + "5126751": "Microthyris anormalis", + "5126756": "Siga liris", + "5126785": "Scoparia cinereomedia", + "5126798": "Scoparia crocospila", + "5126834": "Scoparia subfusca", + "5126843": "Scoparia spelaea", + "5126866": "Scoparia exilis", + "5126870": "Scoparia chalicodes", + "5126889": "Scoparia indistinctalis", + "5126892": "Scoparia basalis", + "5126905": "Scoparia minusculalis", + "5126916": "Scoparia acharis", + "5126922": "Scoparia exhibitalis", + "5126946": "Scoparia ustimacula", + "5126958": "Scoparia penumbralis", + "5126963": "Scoparia biplagialis", + "5127020": "Scoparia oxygona", + "5127024": "Scoparia tetracycla", + "5127039": "Scoparia chiasta", + "5127044": "Scoparia ochrophara", + "5127045": "Scoparia halopis", + "5127054": "Scoparia rotuellus", + "5127089": "Agathodes monstralis", + "5127090": "Agathodes designalis", + "5127094": "Agathodes musivalis", + "5127097": "Agathodes ostentalis", + "5127107": "Glaphyria fulminalis", + "5127116": "Glaphyria sesquistrialis", + "5127118": "Glaphyria invisalis", + "5127130": "Glaphyria glaphyralis", + "5127132": "Glaphyria basiflavalis", + "5127170": "Eustixia pupula", + "5127203": "Raphiptera argillaceellus", + "5127209": "Megastes praxiteles", + "5127222": "Occidentalia comptulatalis", + "5127325": "Petrophila confusalis", + "5127335": "Petrophila daemonalis", + "5127336": "Petrophila fulicalis", + "5127337": "Petrophila kearfottalis", + "5127339": "Petrophila jaliscalis", + "5127350": "Petrophila canadensis", + "5127353": "Petrophila santafealis", + "5127354": "Petrophila hodgesi", + "5127355": "Petrophila cappsi", + "5127357": "Petrophila bifascialis", + "5127378": "Diastictis fracturalis", + "5127380": "Diastictis ventralis", + "5127394": "Rhimphalea sceletalis", + "5127521": "Gesneria centuriella", + "5127530": "Euclasta maceratalis", + "5127562": "Glyphodes extorris", + "5127592": "Glyphodes actorionalis", + "5127595": "Glyphodes cosmarcha", + "5127609": "Glyphodes duplicalis", + "5127629": "Glyphodes canthusalis", + "5127631": "Glyphodes sibillalis", + "5127638": "Glyphodes microta", + "5127644": "Glyphodes stolalis", + "5127656": "Glyphodes pyloalis", + "5127669": "Glyphodes bivitralis", + "5127675": "Glyphodes bicolor", + "5127680": "Glyphodes grandisalis", + "5127683": "Glyphodes crithealis", + "5127688": "Glyphodes quadrimaculalis", + "5127698": "Glyphodes caesalis", + "5127748": "Phalanta alcippe", + "5127805": "Mestra amymone", + "5127814": "Mestra hersilia", + "5127822": "Dira clytus", + "5127835": "Polyura agrarius", + "5127867": "Polyura dolon", + "5127893": "Polyura eudamippus", + "5127916": "Polyura hebe", + "5127932": "Polyura athamas", + "5127955": "Polyura nepenthes", + "5127971": "Polyura delphis", + "5127992": "Polyura arja", + "5127998": "Polyura jalysus", + "5128005": "Anartia fatima", + "5128007": "Anartia jatrophae", + "5128011": "Anartia amathea", + "5128034": "Dryas iulia", + "5128045": "Melinaea lilis", + "5128067": "Melinaea ludovica", + "5128118": "Melinaea menophilus", + "5128161": "Discophora timora", + "5128169": "Discophora lepida", + "5128182": "Discophora sondaica", + "5128224": "Tisiphone abeona", + "5128225": "Tisiphone helena", + "5128232": "Oeneis alberta", + "5128250": "Oeneis chryxus", + "5128266": "Oeneis uhleri", + "5128323": "Oeneis norna", + "5128326": "Oeneis melissa", + "5128353": "Oeneis tarpeia", + "5128357": "Oeneis jutta", + "5128363": "Oeneis macounii", + "5128380": "Oeneis nevadensis", + "5128398": "Eunica norica", + "5128423": "Eunica margarita", + "5128432": "Eunica bechina", + "5128433": "Eunica malvina", + "5128438": "Eunica pusilla", + "5128446": "Eunica eburnea", + "5128475": "Eunica tatila", + "5128488": "Eunica monima", + "5128491": "Eunica alcmena", + "5128519": "Sasakia charonda", + "5128545": "Asterope boisduvali", + "5128569": "Charaxes affinis", + "5128587": "Charaxes psaphon", + "5128597": "Charaxes brutus", + "5128644": "Charaxes bernardus", + "5128663": "Charaxes nitebis", + "5128825": "Charaxes pelias", + "5128984": "Charaxes castor", + "5129000": "Charaxes marmax", + "5129025": "Charaxes solon", + "5129091": "Charaxes candiope", + "5129190": "Charaxes cithaeron", + "5129251": "Colobura dirce", + "5129257": "Dione glycera", + "5129266": "Parthenos tigrina", + "5129293": "Vanessa indica", + "5129374": "Polygonia faunus", + "5129378": "Polygonia l-album", + "5129387": "Polygonia haroldi", + "5129405": "Polygonia gracilis", + "5129417": "Polygonia c-aureum", + "5129430": "Polygonia comma", + "5129432": "Polygonia progne", + "5129451": "Polygonia interrogationis", + "5129473": "Hamadryas iphthime", + "5129479": "Hamadryas arete", + "5129480": "Hamadryas chloe", + "5129481": "Hamadryas februa", + "5129489": "Hamadryas amphinome", + "5129496": "Hamadryas feronia", + "5129502": "Hamadryas epinome", + "5129515": "Hamadryas atlantis", + "5129517": "Hamadryas atlantis", + "5129520": "Hamadryas laodamia", + "5129524": "Hamadryas arinome", + "5129531": "Hamadryas glauconome", + "5129535": "Hamadryas guatemalena", + "5129544": "Enodia portlandia", + "5129636": "Batesia hypochlora", + "5129913": "Melitaea arcesia", + "5130277": "Amathusia phidippus", + "5130296": "Metamorpha elissa", + "5130314": "Calisto confusa", + "5130322": "Calisto obscura", + "5130326": "Calisto herophile", + "5130330": "Calisto nubila", + "5130335": "Junonia chorimene", + "5130347": "Junonia elgiva", + "5130369": "Junonia atlites", + "5130392": "Junonia oenone", + "5130393": "Junonia gregorii", + "5130396": "Junonia artaxia", + "5130400": "Junonia nigrosuffusa", + "5130439": "Junonia erigone", + "5130444": "Junonia iphita", + "5130448": "Junonia natalica", + "5130456": "Junonia villida", + "5130464": "Junonia orithya", + "5130467": "Junonia sophia", + "5130471": "Junonia almana", + "5130476": "Junonia hedonia", + "5130487": "Junonia rhadama", + "5130502": "Junonia goudotii", + "5130514": "Junonia coenia", + "5130521": "Junonia lemonias", + "5130528": "Junonia evarete", + "5130542": "Junonia hierta", + "5130548": "Junonia genoveva", + "5130557": "Nica flavilla", + "5130559": "Microtia elva", + "5130562": "Panacea procilla", + "5130574": "Panacea prola", + "5130576": "Nymphalis", + "5130587": "Nymphalis xanthomelas", + "5130682": "Nymphalis antiopa", + "5130696": "Nymphalis californica", + "5130748": "Euthalia adonia", + "5130775": "Euthalia lubentina", + "5130813": "Euthalia monina", + "5130814": "Euthalia aconthea", + "5130851": "Euthalia phemius", + "5130904": "Euthalia alpheda", + "5130908": "Euthalia formosana", + "5130944": "Euthalia anosia", + "5130971": "Euthalia patala", + "5131058": "Euthalia recta", + "5131088": "Neptis", + "5131096": "Neptis rivularis", + "5131142": "Neptis sappho", + "5131192": "Neptis taiwana", + "5131256": "Neptis ida", + "5131293": "Neptis pryeri", + "5131339": "Neptis hylas", + "5131347": "Neptis saclava", + "5131372": "Neptis leucoporos", + "5131407": "Neptis harita", + "5131442": "Neptis laeta", + "5131443": "Neptis nata", + "5131467": "Neptis miah", + "5131493": "Neptis praslini", + "5131495": "Neptis clinia", + "5131520": "Neptis soma", + "5131540": "Neptis serena", + "5131555": "Neptis ananta", + "5131565": "Neptis jumbah", + "5131585": "Neptis alwina", + "5131593": "Neptis thisbe", + "5131597": "Eueides procula", + "5131608": "Eueides isabella", + "5131637": "Eueides vibilia", + "5131910": "Apatura iris", + "5131951": "Biblis aganisa", + "5131957": "Sesia hyperia", + "5131972": "Limenitis", + "5131982": "Limenitis iphicleola", + "5132003": "Limenitis malea", + "5132008": "Limenitis justina", + "5132078": "Limenitis alala", + "5132079": "Limenitis eulalia", + "5132084": "Limenitis arthemis", + "5132137": "Limenitis cytherea", + "5132154": "Limenitis dudu", + "5132183": "Limenitis populi", + "5132191": "Limenitis helmanni", + "5132221": "Limenitis gelania", + "5132225": "Limenitis zina", + "5132238": "Limenitis doerriesi", + "5132239": "Limenitis lycorias", + "5132246": "Limenitis lorquini", + "5132252": "Limenitis corcyra", + "5132254": "Limenitis pithys", + "5132283": "Limenitis thessalia", + "5132289": "Limenitis zea", + "5132317": "Limenitis fessonia", + "5132346": "Limenitis leucophthalma", + "5132347": "Limenitis phylaca", + "5132360": "Limenitis serpa", + "5132374": "Limenitis mesentina", + "5132398": "Limenitis archippus", + "5132429": "Limenitis cocala", + "5132440": "Limenitis syma", + "5132446": "Limenitis melanthe", + "5132461": "Limenitis weidemeyerii", + "5132479": "Limenitis sydyi", + "5132483": "Limenitis plesaure", + "5132505": "Limenitis arthemis", + "5132523": "Pseudonympha detecta", + "5132529": "Pseudonympha magoides", + "5132540": "Pseudonympha magus", + "5132545": "Cymothoe alcimeda", + "5132550": "Cymothoe caenis", + "5132591": "Cymothoe egesta", + "5132713": "Cymothoe herminia", + "5132839": "Salamis cacta", + "5132917": "Euptychia westwoodii", + "5132940": "Euptychia gemma", + "5132956": "Euptychia pyracmon", + "5132973": "Euptychia areolatus", + "5133008": "Euptychia terrestris", + "5133009": "Euptychia cymela", + "5133035": "Anetia thirza", + "5133051": "Coelites epiminthia", + "5133087": "Danaus", + "5133088": "Danaus plexippus", + "5133142": "Morpho amathonte", + "5133251": "Morpho polyphemus", + "5133255": "Morpho achilles", + "5133265": "Morpho helenor", + "5133366": "Morpho aega", + "5133451": "Morpho deidamia", + "5133503": "Morpho epistrophus", + "5133523": "Morpho menelaus", + "5133565": "Lycorea halia", + "5133568": "Lycorea isabella", + "5133581": "Aeria eurimedia", + "5133589": "Aeria olena", + "5133591": "Marpesia orsilochus", + "5133595": "Marpesia chiron", + "5133609": "Marpesia merops", + "5133610": "Marpesia camillus", + "5133615": "Marpesia themistocles", + "5133621": "Marpesia petreus", + "5133622": "Marpesia crethon", + "5133623": "Marpesia furcula", + "5133634": "Marpesia marcella", + "5133635": "Marpesia berania", + "5133637": "Marpesia harmonia", + "5133687": "Ariadne merione", + "5133689": "Ariadne ariadne", + "5133693": "Sephisa princeps", + "5133695": "Sephisa chandra", + "5133736": "Hypothyris euclea", + "5133786": "Hypothyris ninonia", + "5133864": "Boloria epithore", + "5133920": "Boloria sipora", + "5133990": "Boloria caucasica", + "5134098": "Satyrus briseis", + "5134301": "Satyrus actaea", + "5134469": "Erebia euryale", + "5134517": "Erebia discoidalis", + "5134543": "Erebia alberganus", + "5134559": "Erebia fasciata", + "5134569": "Erebia eriphyle", + "5134583": "Erebia palarica", + "5134607": "Erebia gorgone", + "5134621": "Erebia zapateri", + "5134659": "Erebia montanus", + "5134661": "Erebia youngi", + "5134667": "Erebia embla", + "5134682": "Erebia ligea", + "5134686": "Erebia epistygne", + "5134687": "Erebia vidleri", + "5134693": "Erebia mancinus", + "5134759": "Erebia epipsodea", + "5134810": "Erebia theano", + "5134815": "Erebia manto", + "5134837": "Erebia melampus", + "5134884": "Erebia nivalis", + "5135026": "Erebia niphonica", + "5135191": "Erebia aethiops", + "5135355": "Erebia rossii", + "5135400": "Maniola", + "5135513": "Maniola jurtina", + "5135546": "Maniola telmessia", + "5135573": "Acraea esebria", + "5135643": "Acraea violae", + "5135839": "Acraea andromacha", + "5135944": "Acraea rahira", + "5136059": "Acraea igola", + "5136113": "Acraea horta", + "5136200": "Acraea cabira", + "5136306": "Acraea neobule", + "5136372": "Haetera piera", + "5136514": "Euploea eleusina", + "5136594": "Euploea sylvester", + "5136681": "Euploea mulciber", + "5136713": "Euploea core", + "5136752": "Euploea klugii", + "5136790": "Euploea algea", + "5136866": "Euploea eyndhovii", + "5136868": "Euploea darchia", + "5136939": "Euploea tulliolus", + "5137022": "Euploea climena", + "5137085": "Euploea eunice", + "5137086": "Euploea hewitsonii", + "5137128": "Euploea eichhorni", + "5137156": "Euploea radamanthus", + "5137166": "Euploea midamus", + "5137257": "Euploea corinna", + "5137291": "Euploea crameri", + "5137330": "Euploea phaenareta", + "5137388": "Erites argentina", + "5137397": "Sallya natalensis", + "5137408": "Bia actorion", + "5137511": "Neophasia menapia", + "5137512": "Neophasia terlooii", + "5137540": "Ascia monuste", + "5137553": "Enantia lina", + "5137573": "Colias heos", + "5137578": "Colias erate", + "5137582": "Colias palaeno", + "5137588": "Colias lesbia", + "5137593": "Colias dimera", + "5137595": "Colias hecla", + "5137601": "Colias occidentalis", + "5137605": "Colias fieldii", + "5137608": "Colias vauthierii", + "5137612": "Colias croceus", + "5137615": "Colias harfordii", + "5137626": "Colias behrii", + "5137636": "Colias tyche", + "5137659": "Colias scudderi", + "5137663": "Colias electo", + "5137664": "Colias interior", + "5137672": "Colias philodice", + "5137674": "Colias alexandra", + "5137677": "Colias chrysotheme", + "5137679": "Colias meadii", + "5137682": "Colias aurorina", + "5137689": "Colias nastes", + "5137693": "Colias canadensis", + "5137694": "Colias eurytheme", + "5137695": "Colias phicomone", + "5137700": "Colias gigantea", + "5137706": "Colias hyale", + "5137708": "Colias myrmidone", + "5137711": "Colias pelidne", + "5137714": "Colias christina", + "5137747": "Ixias marianne", + "5137748": "Ixias pyrene", + "5137763": "Aporia agathon", + "5137790": "Pontia glauconome", + "5137791": "Pontia occidentalis", + "5137799": "Pontia helice", + "5137800": "Pontia protodice", + "5137802": "Pontia beckerii", + "5137803": "Pontia sisymbrii", + "5137808": "Eurema blanda", + "5137817": "Eurema mexicana", + "5137819": "Eurema daira", + "5137823": "Eurema andersoni", + "5137827": "Eurema floricola", + "5137828": "Eurema brigitta", + "5137832": "Eurema laeta", + "5137833": "Eurema alitha", + "5137842": "Eurema herla", + "5137847": "Eurema sari", + "5137849": "Eurema hecabe", + "5137850": "Eurema smilax", + "5137851": "Eurema elathea", + "5137854": "Eurema puella", + "5137858": "Eurema simulatrix", + "5137861": "Leptosia nina", + "5137863": "Leptosia alcesta", + "5137882": "Pieris oleracea", + "5137889": "Pieris melete", + "5137890": "Pieris virginiensis", + "5137891": "Pieris canidia", + "5137894": "Pieris marginalis", + "5137902": "Leptidea duponcheli", + "5137903": "Leptidea sinapis", + "5137908": "Leptidea morsei", + "5137912": "Leptidea amurensis", + "5137920": "Appias indra", + "5137926": "Appias libythea", + "5137929": "Appias melania", + "5137932": "Appias olferna", + "5137935": "Appias lalage", + "5137938": "Appias lyncida", + "5137945": "Appias nero", + "5137946": "Appias albina", + "5137949": "Appias paulina", + "5137955": "Appias zarinda", + "5137969": "Eroessa chiliensis", + "5137988": "Mylothris rueppellii", + "5137996": "Mylothris chloris", + "5137998": "Mylothris agathina", + "5138069": "Danis danis", + "5138200": "Loxura atymnus", + "5138257": "Logania marmorata", + "5138298": "Plebejus sephirus", + "5138387": "Plebejus saepiolus", + "5138492": "Plebejus hesperica", + "5138543": "Plebejus amandus", + "5138561": "Plebejus argus", + "5138602": "Plebejus lupini", + "5138681": "Nordmannia ilicis", + "5138701": "Phasis thero", + "5138732": "Jalmenus evagoras", + "5138743": "Jalmenus icilius", + "5138841": "Cupido cissus", + "5138921": "Cupido nubifer", + "5138929": "Cupido nisa", + "5138967": "Ogyris amaryllis", + "5138984": "Ogyris olane", + "5139026": "Satyrium semiluna", + "5139029": "Satyrium calanus", + "5139034": "Sandia mcfarlandi", + "5139040": "Freyeria trochylus", + "5139050": "Freyeria putli", + "5139064": "Cyaniris neglecta", + "5139156": "Cyaniris semiargus", + "5139188": "Myrina dermaptera", + "5139201": "Myrina silenus", + "5139309": "Lycaena panava", + "5139339": "Lycaena asabinus", + "5139346": "Lycaena heteronea", + "5139357": "Lycaena edna", + "5139524": "Lycaena tama", + "5139540": "Lycaena editha", + "5139578": "Lycaena cyna", + "5139673": "Lycaena boldenarum", + "5139700": "Lycaena mariposa", + "5139864": "Evenus regalis", + "5139897": "Eumaeus childrenae", + "5139898": "Eumaeus godartii", + "5139908": "Eumaeus toxea", + "5139909": "Eumaeus atala", + "5139914": "Lucia limbaria", + "5139915": "Lucia epeus", + "5139928": "Cycnus phaleros", + "5139954": "Spindasis ella", + "5139990": "Spindasis vulcanus", + "5140006": "Spindasis natalensis", + "5140033": "Leptotes cassius", + "5140054": "Leptotes cassius", + "5140056": "Leptotes trigemmatus", + "5140063": "Leptotes marina", + "5140214": "Polyommatus icarus", + "5140244": "Polyommatus eros", + "5140436": "Polyommatus daphnis", + "5140443": "Polyommatus ottomana", + "5140534": "Drupadia ravindra", + "5140561": "Drupadia theda", + "5140603": "Helicopis gnidus", + "5140627": "Helicopis cupido", + "5140969": "Thisbe irenea", + "5140980": "Thisbe lycorias", + "5141085": "Hades noctula", + "5141144": "Graphium eurous", + "5141154": "Graphium evemon", + "5141163": "Graphium macareus", + "5141170": "Graphium colonna", + "5141172": "Graphium ramaceus", + "5141177": "Graphium eurypylus", + "5141179": "Graphium antiphates", + "5141185": "Graphium chironides", + "5141187": "Graphium agamemnon", + "5141188": "Graphium milon", + "5141195": "Graphium antheus", + "5141197": "Graphium bathycles", + "5141198": "Graphium androcles", + "5141199": "Graphium cloanthus", + "5141202": "Graphium arycles", + "5141207": "Graphium meyeri", + "5141212": "Graphium sarpedon", + "5141215": "Graphium agetes", + "5141216": "Graphium policenes", + "5141226": "Graphium doson", + "5141229": "Graphium megarus", + "5141230": "Graphium rhesus", + "5141233": "Graphium xenocles", + "5141234": "Graphium porthaon", + "5141236": "Graphium delesserti", + "5141242": "Graphium nomius", + "5141248": "Graphium leonidas", + "5141250": "Graphium angolanus", + "5141252": "Graphium weiskei", + "5141254": "Graphium aristeus", + "5141261": "Zerynthia", + "5141262": "Zerynthia polyxena", + "5141288": "Zerynthia cretica", + "5141291": "Zerynthia cerisy", + "5141297": "Zerynthia rumina", + "5141305": "Zerynthia deyrollei", + "5141311": "Lamproptera meges", + "5141317": "Lamproptera curius", + "5141321": "Battus ingenuus", + "5141324": "Battus polydamas", + "5141331": "Battus crassus", + "5141333": "Battus laodamas", + "5141340": "Battus polystictus", + "5141342": "Battus philenor", + "5141344": "Tetragonus catamitus", + "5141493": "Sesia apiformis", + "5141501": "Sesia bembeciformis", + "5141581": "Phycodes minor", + "5141590": "Phycodes limata", + "5141643": "Odina hieroglyphica", + "5141650": "Euschemon rafflesia", + "5141662": "Xenophanes tryxus", + "5141677": "Heteropterus morpheus", + "5141697": "Hesperopsis alpheus", + "5141743": "Cogia hippalus", + "5141763": "Polythrix octomaculata", + "5141795": "Mooreana trichoneura", + "5141913": "Quadrus lugubris", + "5141924": "Choaspes benjaminii", + "5142001": "Baracus hampsoni", + "5142006": "Syrichtus alta", + "5142032": "Syrichtus tessellum", + "5142042": "Syrichtus cribrellum", + "5142061": "Atrytone logan", + "5142062": "Atrytone arogos", + "5142067": "Badamia exclamationis", + "5142086": "Myscelus epigona", + "5142130": "Metisella malgacha", + "5142160": "Metisella metis", + "5142166": "Mysoria affinis", + "5142175": "Mysoria amra", + "5142176": "Mysoria barcastus", + "5142213": "Unkana ambasa", + "5142228": "Hesperia", + "5142249": "Hesperia attalus", + "5142254": "Hesperia nevada", + "5142267": "Hesperia viridis", + "5142269": "Hesperia sassacus", + "5142273": "Hesperia leonardus", + "5142278": "Hesperia lindseyi", + "5142283": "Hesperia colorado", + "5142298": "Hesperia metea", + "5142300": "Hesperia juba", + "5142314": "Hesperia meskei", + "5142317": "Hesperia columbia", + "5142319": "Hesperia uncas", + "5142322": "Hesperia woodgatei", + "5142328": "Hesperia pahaska", + "5142338": "Gegenes nostrodamus", + "5142352": "Gegenes pumilio", + "5142358": "Lychnuchus celsus", + "5142372": "Pyrgus ruralis", + "5142394": "Pyrgus carthami", + "5142424": "Pyrgus communis", + "5142436": "Pyrgus oileus", + "5142499": "Pyrgus maculatus", + "5142583": "Pyrgus scriptura", + "5142599": "Pyrgus melotis", + "5142691": "Notocrypta", + "5142725": "Notocrypta curvifascia", + "5142729": "Notocrypta feisthamelii", + "5142730": "Notocrypta paralysos", + "5142749": "Notocrypta waigensis", + "5142822": "Hylephila signata", + "5142825": "Hylephila fasciolata", + "5142829": "Helias phalaenoides", + "5142842": "Thyatira mexicana", + "5142870": "Thyatira batis", + "5142903": "Falcaria bilineata", + "5142948": "Phalacra strigata", + "5143007": "Tethea consimilis", + "5143048": "Tethea ocularis", + "5143049": "Tethea oberthueri", + "5143076": "Cyclidia orciferaria", + "5143080": "Cyclidia substigmaria", + "5143107": "Drepana arcuata", + "5143116": "Drepana pallida", + "5143129": "Drepana falcataria", + "5143147": "Drepana curvatula", + "5143232": "Urania fulgens", + "5143234": "Urania leilus", + "5143241": "Acropteris ciniferaria", + "5143249": "Acropteris iphiata", + "5143266": "Acropteris leptaliata", + "5143279": "Alcides metaurus", + "5143284": "Nothus empedocles", + "5143285": "Nothus lunus", + "5143303": "Psyra conferta", + "5143311": "Psyra matsumurai", + "5143315": "Psyra spurcataria", + "5143338": "Alcis taiwanensis", + "5143354": "Alcis admissaria", + "5143368": "Alcis ectogramma", + "5143380": "Alcis repandata", + "5143384": "Alcis maculata", + "5143437": "Alcis pallens", + "5143453": "Alcis deversata", + "5143477": "Alcis jubata", + "5143506": "Alcis inchoata", + "5143511": "Alcis plebeia", + "5143525": "Alcis semiusta", + "5143575": "Alcis scortea", + "5143586": "Microdes epicryptis", + "5143651": "Hylaea fasciaria", + "5143657": "Cabera erythemaria", + "5143675": "Cabera exanthemata", + "5143697": "Cabera pusaria", + "5143703": "Cabera variolaria", + "5143944": "Alsophila aceraria", + "5143947": "Alsophila aescularia", + "5143952": "Alsophila pometaria", + "5143960": "Sicya morsicaria", + "5143964": "Sicya macularia", + "5144027": "Episteira nigrilinearia", + "5144092": "Problepsis vulgaris", + "5144093": "Problepsis albidior", + "5144115": "Problepsis sancta", + "5144129": "Problepsis clemens", + "5144176": "Mesoleuca", + "5144190": "Mesoleuca albicillata", + "5144196": "Mesoleuca gratulata", + "5144204": "Melanodes anthracitaria", + "5144227": "Selenia kentaria", + "5144318": "Selenia alciphearia", + "5144345": "Prochasma squalida", + "5144353": "Apodasmia rufonigraria", + "5144363": "Paragonia cruraria", + "5144381": "Phigalia denticulata", + "5144386": "Phigalia titea", + "5144407": "Phigalia strigataria", + "5144424": "Lobophora nivigerata", + "5144426": "Lobophora halterata", + "5144431": "Timandra convectaria", + "5144438": "Timandra synthaca", + "5144457": "Timandra amaturaria", + "5144472": "Timandra correspondens", + "5144499": "Jankowskia taiwanensis", + "5144505": "Cryphaea xylina", + "5144534": "Geometra papilionaria", + "5144543": "Siona lineata", + "5144553": "Lobus lithinopa", + "5144554": "Sestra humeraria", + "5144558": "Sestra flexata", + "5144564": "Tetracis crocallata", + "5144575": "Tetracis cachexiata", + "5144583": "Caripeta aequaliaria", + "5144588": "Caripeta piniata", + "5144593": "Caripeta divisata", + "5144596": "Caripeta angustiorata", + "5144597": "Caripeta aretaria", + "5144633": "Phallaria ophiusaria", + "5144677": "Scopula nigropunctata", + "5144691": "Scopula nigrinotata", + "5144721": "Scopula incanata", + "5144729": "Scopula ancellata", + "5144782": "Scopula decorata", + "5144787": "Scopula tessellaria", + "5144805": "Scopula ornata", + "5144806": "Scopula emissaria", + "5144864": "Scopula propinquaria", + "5144870": "Scopula ordinata", + "5144880": "Scopula submutata", + "5144900": "Scopula marginepunctata", + "5144935": "Scopula cacuminaria", + "5144936": "Scopula yamanei", + "5144937": "Scopula rubraria", + "5144942": "Scopula optivata", + "5144953": "Scopula junctaria", + "5144976": "Scopula sublinearia", + "5145009": "Scopula immutata", + "5145075": "Scopula opicata", + "5145078": "Scopula plantagenaria", + "5145079": "Scopula lydia", + "5145136": "Scopula ternata", + "5145139": "Scopula benitaria", + "5145186": "Scopula rubiginata", + "5145238": "Scopula aemulata", + "5145255": "Scopula luridata", + "5145260": "Scopula immorata", + "5145269": "Scopula virgulata", + "5145396": "Scopula addictaria", + "5145409": "Scopula floslactata", + "5145422": "Scopula perlata", + "5145466": "Scopula compensata", + "5145468": "Scopula inscriptata", + "5145495": "Scopula desita", + "5145502": "Scopula minorata", + "5145503": "Scopula hypochra", + "5145521": "Scopula limboundata", + "5145522": "Scopula flaccidaria", + "5145547": "Scopula quadrilineata", + "5145560": "Scopula umbilicata", + "5145624": "Scopula fibulata", + "5145713": "Scopula lautaria", + "5145729": "Scopula subpunctaria", + "5145735": "Scopula mecysma", + "5145842": "Scopula guancharia", + "5145870": "Perizoma sagittata", + "5145965": "Perizoma taeniata", + "5145998": "Perizoma custodiata", + "5146030": "Perizoma curvilinea", + "5146038": "Perizoma fasciaria", + "5146062": "Perizoma seriata", + "5146082": "Perizoma costiguttata", + "5146091": "Perizoma epictata", + "5146179": "Heterusia atalantata", + "5146253": "Heterusia quadruplicaria", + "5146262": "Gastrina cristaria", + "5146282": "Berta rugosivalva", + "5146294": "Cymatoplex halcyone", + "5146303": "Hydrelia bicolorata", + "5146305": "Hydrelia inornata", + "5146326": "Hydrelia condensata", + "5146335": "Hydrelia sericea", + "5146342": "Hydrelia sylvata", + "5146379": "Hydrelia flammeolaria", + "5146389": "Hydrelia albifera", + "5146397": "Plemyria", + "5146412": "Plemyria rubiginata", + "5146420": "Idaea carvalhoi", + "5146426": "Idaea pilosata", + "5146434": "Idaea impexa", + "5146440": "Idaea predotaria", + "5146456": "Idaea uniformis", + "5146472": "Idaea philocosma", + "5146476": "Idaea distinctaria", + "5146483": "Idaea phaeocrossa", + "5146496": "Idaea sylvestraria", + "5146497": "Idaea pervertipennis", + "5146508": "Idaea craspedota", + "5146510": "Idaea laevigata", + "5146525": "Idaea figuraria", + "5146528": "Idaea nitidata", + "5146559": "Idaea aversata", + "5146566": "Idaea costiguttata", + "5146567": "Idaea sugillata", + "5146578": "Idaea costaria", + "5146598": "Idaea violacearia", + "5146599": "Idaea rufaria", + "5146601": "Idaea camparia", + "5146608": "Idaea violacea", + "5146611": "Idaea humiliata", + "5146651": "Idaea joannisiata", + "5146659": "Idaea serpentata", + "5146677": "Idaea dimidiata", + "5146693": "Idaea calunetaria", + "5146719": "Idaea nephelota", + "5146720": "Idaea hispanaria", + "5146746": "Idaea paraula", + "5146752": "Idaea macrospila", + "5146762": "Idaea aureolaria", + "5146763": "Idaea vacillata", + "5146774": "Idaea attenuaria", + "5146786": "Idaea urcitana", + "5146805": "Idaea inversata", + "5146815": "Idaea helianthemata", + "5146820": "Idaea asceta", + "5146832": "Idaea bonifata", + "5146833": "Idaea sericeata", + "5146837": "Idaea subsericeata", + "5146842": "Idaea macilentaria", + "5146852": "Idaea rhodogrammaria", + "5146856": "Idaea inductata", + "5146862": "Idaea dilutaria", + "5146880": "Idaea halmaea", + "5146883": "Idaea pallidata", + "5146894": "Idaea intermedia", + "5146899": "Idaea lutulentaria", + "5146908": "Idaea eugeniata", + "5146920": "Idaea subsaturata", + "5146927": "Idaea lusohispanica", + "5146937": "Idaea eretmopus", + "5146946": "Idaea deversaria", + "5146961": "Idaea biselata", + "5147002": "Idaea typicata", + "5147018": "Idaea gemmata", + "5147030": "Idaea consanguinaria", + "5147038": "Idaea rubraria", + "5147039": "Idaea seriata", + "5147041": "Idaea consanguiberica", + "5147043": "Idaea ostrinaria", + "5147046": "Idaea trypheropa", + "5147058": "Idaea longaria", + "5147062": "Idaea muricata", + "5147071": "Idaea bigladiata", + "5147099": "Idaea alyssumata", + "5147109": "Idaea trissorma", + "5147114": "Idaea scintillularia", + "5147121": "Idaea punctatissima", + "5147139": "Idaea celtima", + "5147145": "Idaea belemiata", + "5147150": "Idaea inquinata", + "5147155": "Idaea litigiosaria", + "5147160": "Idaea coercita", + "5147165": "Idaea alicantaria", + "5147171": "Idaea moniliata", + "5147179": "Idaea basinta", + "5147193": "Idaea fuscovenosa", + "5147208": "Idaea straminata", + "5147211": "Idaea demissaria", + "5147212": "Idaea incisaria", + "5147214": "Idaea ptyonopoda", + "5147225": "Idaea pseliota", + "5147232": "Idaea trigeminata", + "5147245": "Idaea emarginata", + "5147259": "Idaea sardoniata", + "5147287": "Idaea deitanaria", + "5147306": "Idaea chotaria", + "5147319": "Idaea infirmaria", + "5147354": "Idaea ochrata", + "5147395": "Idaea fractilineata", + "5147415": "Idaea elongaria", + "5147437": "Idaea cervantaria", + "5147441": "Idaea degeneraria", + "5147478": "Idaea rusticata", + "5147492": "Idaea obsoletaria", + "5147498": "Idaea egenaria", + "5147513": "Idaea incalcarata", + "5147516": "Idaea politaria", + "5147522": "Idaea simplex", + "5147534": "Idaea flaveolaria", + "5147560": "Idaea efflorata", + "5147608": "Trichopteryx carpinata", + "5147638": "Trichopteryx polycommata", + "5147681": "Lycia hirtaria", + "5147703": "Lycia ypsilon", + "5147713": "Lycia ursaria", + "5147794": "Anthometra plumularia", + "5147819": "Venusia lineata", + "5147827": "Venusia cambrica", + "5147834": "Venusia blomeri", + "5147838": "Venusia comptaria", + "5147858": "Venusia pearsalli", + "5147868": "Euchlaena marginaria", + "5147871": "Euchlaena johnsonaria", + "5147879": "Euchlaena amoenaria", + "5147883": "Euchlaena muzaria", + "5147894": "Euchlaena madusaria", + "5147898": "Euchlaena serrata", + "5147899": "Euchlaena irraria", + "5147909": "Euchlaena tigrinaria", + "5147917": "Cleora injectaria", + "5147923": "Cleora displicata", + "5147930": "Cleora goldfinchi", + "5147968": "Cleora fraterna", + "5148043": "Cleora contiguata", + "5148055": "Cleora alienaria", + "5148066": "Cleora decisaria", + "5148096": "Cleora scriptaria", + "5148097": "Cleora illustraria", + "5148115": "Cleora leucophaea", + "5148184": "Cleora sublunaria", + "5148214": "Cleora repetita", + "5148223": "Cleora sabulata", + "5148247": "Theria rupicapraria", + "5148248": "Theria primaria", + "5148252": "Hastina subfalcaria", + "5148264": "Oar reaumuraria", + "5148277": "Chlorochlamys phyllinaria", + "5148280": "Chlorochlamys appellaria", + "5148286": "Pelurga comitata", + "5148379": "Thera contractata", + "5148394": "Thera vetustata", + "5148424": "Thera britannica", + "5148436": "Thera variata", + "5148462": "Thera juniperata", + "5148475": "Thera cupressata", + "5148486": "Thera cognata", + "5148487": "Thera obeliscata", + "5148520": "Eutrapela clemataria", + "5148531": "Iridopsis humaria", + "5148544": "Iridopsis larvaria", + "5148576": "Iridopsis emasculatum", + "5148593": "Iridopsis validaria", + "5148719": "Pero morrisonaria", + "5148743": "Pero honestaria", + "5148753": "Pero behrensaria", + "5148766": "Pero ancetaria", + "5148850": "Pero mizon", + "5148934": "Pero radiosaria", + "5148952": "Pero meskaria", + "5148954": "Pero zalissaria", + "5149012": "Heterolocha coccinea", + "5149081": "Dysphania percota", + "5149136": "Dysphania subrepleta", + "5149174": "Dysphania militaris", + "5149182": "Dysphania numana", + "5149203": "Dysphania sagana", + "5149222": "Epimecis puellaria", + "5149237": "Epimecis hortaria", + "5149307": "Eustroma semiatrata", + "5149308": "Eustroma melancholica", + "5149315": "Eustroma reticulata", + "5149317": "Cymatophora approximaria", + "5149369": "Oenochroma vinaria", + "5149370": "Oenochroma infantilis", + "5149371": "Oenochroma pallida", + "5149387": "Oenochroma vetustaria", + "5149414": "Lomaspilis opis", + "5149438": "Lomaspilis marginata", + "5149474": "Aplasta ononaria", + "5149499": "Entephria caesiata", + "5149569": "Entephria cyanata", + "5149609": "Hyperythra lutea", + "5149630": "Metanema determinata", + "5149631": "Metanema inatomaria", + "5149659": "Cyclophora porata", + "5149664": "Cyclophora maderensis", + "5149665": "Cyclophora punctaria", + "5149667": "Cyclophora suppunctaria", + "5149704": "Cyclophora pendularia", + "5149713": "Cyclophora packardi", + "5149717": "Cyclophora lennigiaria", + "5149746": "Cyclophora albipunctata", + "5149753": "Cyclophora nanaria", + "5149768": "Cyclophora annularia", + "5149777": "Cyclophora myrtaria", + "5149780": "Cyclophora albiocellaria", + "5149782": "Cyclophora dataria", + "5149784": "Cyclophora ruficiliaria", + "5149787": "Cyclophora puppillaria", + "5149811": "Cyclophora coecaria", + "5149819": "Cyclophora pendulinaria", + "5149820": "Cyclophora quercimontaria", + "5149836": "Stegania cararia", + "5149839": "Stegania trimaculata", + "5149843": "Stegania dilectaria", + "5149873": "Gymnoscelis lophopus", + "5149880": "Gymnoscelis derogata", + "5149929": "Gymnoscelis subpumilata", + "5149940": "Gymnoscelis spodias", + "5149941": "Gymnoscelis ischnophylla", + "5149986": "Gymnoscelis tristrigosa", + "5150002": "Macrosoma lucivittata", + "5150027": "Macrosoma rubedinaria", + "5150053": "Hexeris enhydris", + "5150092": "Thyris maculata", + "5318": "Dalceridae", + "5320": "Douglasiidae", + "5333": "Palaephatidae", + "5336": "Pyralidae", + "5338": "Roeslerstammiidae", + "5339": "Sematuridae", + "5340": "Sesiidae", + "5343": "Tortricidae", + "5345": "Ypsolophidae", + "5430609": "Bustilloxia", + "5430630": "Cleoceris", + "5473": "Lycaenidae", + "5474": "Limacodidae", + "5481": "Pieridae", + "5487": "Gracillariidae", + "5714299": "Danaus gilippus", + "5714302": "Danaus eresimus", + "5714312": "Limenitis basiloides", + "5714333": "Limenitis weidemeyerii", + "5714356": "Polygonia satyrus", + "5714361": "Polygonia oreas", + "5714367": "Vanessa tameamea", + "5714369": "Vanessa annabella", + "5714410": "Boloria kriemhild", + "5714507": "Erebia pawloskii", + "5714558": "Sesia hyllus", + "5714572": "Sesia helloides", + "5714575": "Sesia epixanthe", + "5714600": "Sesia rubidus", + "5714618": "Lycaena cupreus", + "5714679": "Plebejus acmon", + "5714680": "Plebejus argyrognomon", + "5714689": "Plebejus fridayi", + "5714747": "Satyrium edwardsii", + "5714755": "Satyrium behrii", + "5714788": "Satyrium liparops", + "5714819": "Eurema boisduvaliana", + "5714914": "Pieris angelika", + "5714951": "Xestia perquiritata", + "5714973": "Xestia c-nigrum", + "5714984": "Xestia elimata", + "5714994": "Xestia dolosa", + "5715004": "Xestia speciosa", + "5715009": "Cerastis salicarum", + "5715010": "Cerastis fishii", + "5715013": "Cerastis enigmatica", + "5715127": "Hylephila phyleus", + "5715275": "Plemyria georgii", + "5715276": "Mesoleuca ruficillata", + "5715277": "Anticlea vasiliata", + "5715278": "Anticlea multiferata", + "5715280": "Malacosoma americana", + "5715281": "Malacosoma californica", + "5734138": "Soritia strandi", + "5734146": "Andraca theae", + "5734212": "Nosophora taihokualis", + "5734235": "Mesophalera speratus", + "5734268": "Tongeia hainani", + "5734291": "Loepa mirandula", + "5734305": "Nordstromia semililacina", + "5734326": "Horipsestis aenea", + "5734335": "Alcis taiwanovariegata", + "5734344": "Chlorissa arcana", + "5734345": "Lomographa percnosticta", + "5734349": "Hydatocapnia gemina", + "5734362": "Micronidia intermedia", + "5734379": "Lassaba parvalbidaria", + "5734388": "Heterothera sororcula", + "5734390": "Aethalura duplicata", + "5734396": "Deileptenia rimosaria", + "5734398": "Xenoplia trivialis", + "5734405": "Psilalcis pulveraria", + "5734420": "Entomopteryx rubridisca", + "5734422": "Cyclophora taiwana", + "5734448": "Percnia suffusa", + "5734451": "Menophra anaplagiata", + "5734481": "Antipercnia", + "5734482": "Antipercnia cordiforma", + "5734515": "Chorodna creataria", + "5734519": "Hypomecis obliquisigna", + "5734528": "Rikiosatoa fucataria", + "5734535": "Lophophelma taiwana", + "5734539": "Biston perclara", + "5734542": "Amblychia moltrechti", + "5734543": "Amblychia sauteri", + "5734556": "Phrixolepia inouei", + "5734560": "Narosoideus vulpina", + "5734569": "Papilio hopponis", + "5734640": "Athymoris subtrigona", + "5734645": "Nosphistica bisinuata", + "5734655": "Lymantria umbrifera", + "5734657": "Lymantria sugii", + "5734665": "Potanthus motzui", + "5734713": "Rhagastis binoculata", + "5734719": "Pentateucha inouei", + "5734720": "Phaudidae", + "5734744": "Mythimna subplacida", + "5734817": "Callopistria delicata", + "5734845": "Xestia yamanei", + "5734891": "Arguda horishana", + "5734897": "Bharetta owadai", + "5734900": "Amsactoides solitaria", + "5734901": "Eospilarctia formosana", + "5768597": "Bustilloxia saturata", + "5768880": "Cidaria fulvata", + "5769028": "Cleora cinctaria", + "5769062": "Agriopis leucophaearia", + "5769068": "Agriopis marginaria", + "5769072": "Agriopis aurantiaria", + "5769164": "Choreutis pariana", + "5769191": "Malacosoma castrense", + "5769272": "Pharmacis fusconebulosa", + "5769709": "Stigmella aurella", + "5770913": "Dafa sulphurella", + "5770922": "Denisia stipella", + "5770942": "Denisia similella", + "5771227": "Ancylis obtusana", + "5771229": "Ancylis selenana", + "5771230": "Ancylis tineana", + "5771232": "Ancylis unguicella", + "5771236": "Ancylis geminana", + "5771239": "Ancylis myrtillana", + "5771241": "Ancylis subarcuana", + "5771243": "Ancylis unculana", + "5771249": "Ancylis diminutana", + "5771255": "Ancylis sparulana", + "5771256": "Ancylis uncella", + "5771258": "Ancylis upupana", + "5771259": "Ancylis apicella", + "5771350": "Eucosma campoliliana", + "5771357": "Spilonota laricana", + "5771877": "Diaphania indica", + "5771880": "Stenia stigmosalis", + "5771982": "Macrochilo cribrumalis", + "5772063": "Acontia trabealis", + "5772129": "Lamprotes caureum", + "5772169": "Mythimna unipuncta", + "5772171": "Mythimna languida", + "5772172": "Mythimna l-album", + "5772176": "Mythimna ferrago", + "5772178": "Mythimna albipuncta", + "5772180": "Mythimna litoralis", + "5772186": "Mythimna sicula", + "5772196": "Mythimna pallens", + "5772199": "Mythimna conigera", + "5772202": "Mythimna pudorina", + "5772205": "Mythimna straminea", + "5772206": "Mythimna vitellina", + "5772210": "Mythimna impura", + "5772222": "Leucania loreyi", + "5772269": "Ammoconia caecimacula", + "5772309": "Chloantha hyperici", + "5772349": "Xestia ditrapezium", + "5772351": "Xestia triangulum", + "5772446": "Polia hepatica", + "5772702": "Polyommatus nivescens", + "5772749": "Polyommatus fabressei", + "5772890": "Boloria dia", + "5772948": "Erebia montana", + "5792081": "Idea iasonia", + "5792092": "Lycaena bleusei", + "5802248": "Euchaetis metallota", + "5802256": "Euchaetis rhizobola", + "5802257": "Euchaetis inceptella", + "5802259": "Euchaetis habrocosma", + "5802331": "Eudonia philerga", + "5802333": "Eudonia sabulosella", + "5802339": "Glyphodes onychinalis", + "5802396": "Mythimna separata", + "5802625": "Zerynthia cassandra", + "5803065": "Graphium macleayanus", + "5803588": "Colias poliographus", + "5804166": "Talbotia naganum", + "5804895": "Leptidea sinapis", + "5804932": "Pieris erutae", + "5805036": "Pieris pseudorapae", + "5805407": "Pieris latouchei", + "5805954": "Eurema mandarina", + "5806127": "Apoda biguttata", + "5806132": "Chlorochlamys chloroleucaria", + "5806166": "Phalanta phalantha", + "5806167": "Danaus genutia", + "5806175": "Vanessa itea", + "5806176": "Vanessa gonerilla", + "5806177": "Vanessa kershawi", + "5806244": "Rothschildia orizaba", + "5806333": "Clania ignobilis", + "5806352": "Endoxyla cinereus", + "5806353": "Endoxyla encalypti", + "5806361": "Aristotelia paradesma", + "5806391": "Jalmenus ictinus", + "5806412": "Leptotes plinius", + "5879654": "Korscheltellus lupulina", + "5880040": "Choreutis basalis", + "5880041": "Choreutis ophiosema", + "5880063": "Kearfottia albifasciella", + "5880147": "Dasystoma salicella", + "5880257": "Elachista albifrontella", + "5880258": "Elachista canapennella", + "5880367": "Stamnodes marmorata", + "5880392": "Comibaena procumbaria", + "5880478": "Parapercnia giraffata", + "5880512": "Macaria artesiaria", + "5880533": "Macaria liturata", + "5880539": "Macaria abydata", + "5880545": "Macaria alternata", + "5880550": "Macaria notata", + "5880552": "Macaria wauaria", + "5880559": "Macaria brunneata", + "5880563": "Macaria signaria", + "5881397": "Danaus ismare", + "5881400": "Danaus erippus", + "5881551": "Apatura chrysolora", + "5881748": "Paryphthimoides poltys", + "5881946": "Ypthima huebneri", + "5882039": "Clossiana improba", + "5882965": "Satyrium w-album", + "5883052": "Arhopala japonica", + "5883255": "Udara albocaerulea", + "5883881": "Hadula trifolii", + "5883914": "Mythimna radiata", + "5883925": "Mythimna decisissima", + "5883985": "Shargacucullia scrophulariae", + "5884188": "Eudocima phalonia", + "5884243": "Thyas juno", + "5884245": "Achaea lienardi", + "5884247": "Achaea serva", + "5884258": "Mocis latipes", + "5884571": "Rhyparia purpurata", + "5884851": "Elophila nymphaeata", + "5884888": "Ectomyelois ceratoniae", + "5885399": "Rhagastis mongoliana", + "5885428": "Callidrepana patrana", + "5925238": "Dione juno", + "5925317": "Orgyia leucostigma", + "5976899": "Axia", + "5976910": "Axia margarita", + "5976937": "Penthesilea sacculalis", + "5976947": "Caloptilia jurateae", + "5977179": "Erynnis persius", + "5977185": "Erynnis telemachus", + "5977197": "Erynnis meridianus", + "5977203": "Erynnis zarucco", + "5977207": "Erynnis brizo", + "5977208": "Erynnis juvenalis", + "5977214": "Erynnis propertius", + "5977216": "Erynnis horatius", + "5977220": "Erynnis baptisiae", + "5977235": "Erynnis afranius", + "5977247": "Erynnis marloyi", + "5977250": "Erynnis icelus", + "5977251": "Erynnis martialis", + "5977257": "Erynnis montanus", + "5977259": "Erynnis tristis", + "5977260": "Erynnis funeralis", + "5977261": "Erynnis lucilius", + "5977262": "Erynnis pacuvius", + "6007566": "Epia", + "6097214": "Diaphora mendica", + "6097224": "Elachista freyerella", + "6097225": "Elachista subalbidella", + "6097228": "Elachista maculicerusella", + "6097233": "Lycia zonaria", + "6097234": "Aphelia viburnana", + "6097235": "Epiblema sticticana", + "6097236": "Triodia sylvina", + "6097254": "Idia calvaria", + "6097260": "Periphanes delphinii", + "6097269": "Wheeleria spilodactylus", + "6099041": "Rhagastis castor", + "6100725": "Danaus affinis", + "6100726": "Danaus melanippus", + "6106647": "Cypoides chinensis", + "6106708": "Theretra indistincta", + "6106744": "Acosmeryx formosana", + "6106759": "Neogurelca hyas", + "6106943": "Samia wangi", + "6112449": "Cyana puella", + "6112472": "Cyana pretoriae", + "6112547": "Popoudina linea", + "6112606": "Nola pascua", + "6112610": "Nola fraterna", + "6112613": "Nola ceylonica", + "6112634": "Nola tineoides", + "6112661": "Nola taeniata", + "6113873": "Eutricha capensis", + "6113959": "Stoermeriana aculeata", + "6115283": "Dysgonia angularis", + "6115388": "Trigonodes hyppasia", + "6115426": "Hypena perspicua", + "6115437": "Hypena conscitalis", + "6115504": "Pericyma atrifusa", + "6115772": "Eublemma rivula", + "6115793": "Eublemma minima", + "6115820": "Eublemma anachoresis", + "6115822": "Eublemma accedens", + "6115830": "Eublemma roseana", + "6115946": "Amyna axis", + "6115953": "Amyna stricta", + "6115973": "Eutelia callichroma", + "6116073": "Acantholipes trimeni", + "6116076": "Acantholipes trajecta", + "6116341": "Mentaxya ignicollis", + "6116368": "Mentaxya albifrons", + "6116413": "Pandesma quenavadi", + "6116440": "Heliothis scutuligera", + "6116646": "Mocis undata", + "6116659": "Mocis conveniens", + "6116661": "Mocis mayeri", + "6116669": "Mocis mutuaria", + "6116674": "Mocis proverai", + "6116699": "Erebus macrops", + "6116754": "Ophiusa dianaris", + "6116898": "Vittaplusia", + "6116899": "Vittaplusia vittata", + "6117055": "Achaea catella", + "6117124": "Achaea echo", + "6117485": "Eudocima apta", + "6118530": "Isturgia deerraria", + "6119299": "Chiasmia subcurvaria", + "6119323": "Chiasmia simplicilinea", + "6119359": "Chiasmia turbulentata", + "6119488": "Chiasmia furcata", + "6120803": "Nacoleia charesalis", + "6120861": "Autocharis jacobsalis", + "6120980": "Lamprophaia ablactalis", + "6121010": "Metoeca foedalis", + "6121184": "Udea ferrugalis", + "6121218": "Salbia haemorrhoidalis", + "6121912": "Lymantria modesta", + "6122092": "Orgyia dubia", + "6122103": "Palasea albimacula", + "6122301": "Laelia fusca", + "6122364": "Cifuna locuples", + "6122527": "Azygophleps inclusa", + "6132546": "Choreutis orthogona", + "6132685": "Spindasis syama", + "6132711": "Dysaethria flavistriga", + "6132712": "Dysaethria quadricaudata", + "6132715": "Dysaethria cretacea", + "6132723": "Pterotosoma castanea", + "6132725": "Phazaca theclata", + "6132726": "Phazaca kosemponicola", + "6132728": "Warreniplema fumicosta", + "6132729": "Chundana emarginata", + "6132749": "Sesamia nigropunctata", + "6132762": "Bagada poliomera", + "6132781": "Niphonyx segregata", + "6132796": "Cruxoruza", + "6132797": "Cruxoruza decorata", + "6132805": "Edessena gentiusalis", + "6132809": "Sypnoides simplex", + "6132824": "Mecodina subcostalis", + "6132825": "Mecodina cineracea", + "6132826": "Plusiodonta coelonota", + "6132841": "Dysgonia praetermissa", + "6132850": "Dysgonia simillima", + "6132861": "Dypterygia subfusca", + "6132868": "Platyja umminia", + "6132869": "Platyja acerces", + "6132880": "Callopistria nobilior", + "6132915": "Eudocima homaena", + "6132916": "Eudocima tyrannus", + "6132917": "Eudocima okurai", + "6132931": "Agrotis taiwana", + "6132936": "Ophiusa trapezium", + "6132938": "Hadennia hisbonalis", + "6132943": "Mythimna pulchra", + "6132950": "Diomea discoinsigna", + "6132953": "Cidariplura gladiata", + "6132957": "Tiracola aureata", + "6132966": "Hypersypnoides punctosa", + "6132967": "Hypersypnoides submarginata", + "6132971": "Adrapsa quadrilinealis", + "6132974": "Adrapsa simplex", + "6132979": "Speiredonia mutabilis", + "6132989": "Dictyestra dissectus", + "6133001": "Diarsia formosensis", + "6133002": "Diarsia nigrosigna", + "6133006": "Diarsia sinuosa", + "6133007": "Diarsia canescens", + "6133010": "Diarsia subtincta", + "6133011": "Thysanoplusia reticulata", + "6133013": "Oglasa costimacula", + "6133026": "Acronicta gigasa", + "6133029": "Sinarella nigrisigna", + "6133033": "Blasticorhinus bifasciata", + "6133046": "Hypena amica", + "6133051": "Hypena albopunctalis", + "6133058": "Simplicia bimarginata", + "6133069": "Hydrillodes gravatalis", + "6133075": "Microxyla confusa", + "6133081": "Paracolax sugii", + "6133083": "Paracolax pryeri", + "6133117": "Eoophyla gibbosalis", + "6133139": "Elophila nigralbalis", + "6133140": "Elophila difflualis", + "6133141": "Elophila turbata", + "6133154": "Chabula acamasalis", + "6133158": "Isocentris filalis", + "6133181": "Hyalobathra coenostolalis", + "6133182": "Hyalobathra brevialis", + "6133225": "Clupeosoma cinerea", + "6133232": "Haritalodes derogata", + "6133241": "Spilarctia clava", + "6133242": "Spilarctia wilemani", + "6133244": "Spilarctia fumida", + "6133248": "Spilarctia postrubida", + "6133252": "Thysanoptyx incurvata", + "6133262": "Notata parva", + "6133263": "Taicallimorpha", + "6133264": "Taicallimorpha albipuncta", + "6133266": "Lemyra fallaciosa", + "6133269": "Lemyra alikangensis", + "6133270": "Lemyra nigricosta", + "6133271": "Lemyra imparilis", + "6133292": "Syntomoides imaon", + "6133297": "Amerila astreus", + "6133311": "Cyana subalba", + "6133312": "Cyana quadripartita", + "6133313": "Cyana formosana", + "6133315": "Cyana propinqua", + "6133317": "Cyana sanguinea", + "6133325": "Hesudra divisa", + "6133340": "Paraspilarctia magna", + "6133343": "Coconympha cyanorma", + "6133397": "Exelastis pumilio", + "6133441": "Arippara indicator", + "6133481": "Phlossa conjuncta", + "6133497": "Orthocabera tinagmaria", + "6133498": "Orthocabera sericea", + "6133500": "Krananda latimarginaria", + "6133501": "Hemistola simplex", + "6133502": "Microcalicha melanosticta", + "6133509": "Tanaorhinus viridiluteata", + "6133513": "Psilalcis menoides", + "6133516": "Yashmakia suffusa", + "6133517": "Harutaea flavizona", + "6133518": "Opisthograptis moelleri", + "6133519": "Tanaoctenia haliaria", + "6133520": "Darisa lampasaria", + "6133523": "Perixera absconditaria", + "6133525": "Perixera illepidaria", + "6133528": "Perixera decretaria", + "6133534": "Xerodes contiguaria", + "6133540": "Mesastrape fulguraria", + "6133542": "Peratostega deletaria", + "6133546": "Calletaera postvittata", + "6133548": "Entomopteryx combusta", + "6133552": "Palaeaspilates ocularia", + "6133559": "Maxates thetydaria", + "6133560": "Hypomecis cineracea", + "6133562": "Pelagodes antiquadraria", + "6133575": "Hypochrosis baenzigeri", + "6133582": "Luxiaria obliquata", + "6133585": "Pareclipsis serrulata", + "6133586": "Uliura infausta", + "6133591": "Comostola pyrrhogona", + "6133593": "Neohipparchus vallata", + "6133595": "Comibaena pictipennis", + "6133596": "Comibaena cassidara", + "6133597": "Comibaena subdelicata", + "6133604": "Lophophleps purpurea", + "6133607": "Trotocraspeda divaricata", + "6133614": "Eustroma contorta", + "6133619": "Plesiomorpha flaviceps", + "6133620": "Axinoptera anticostalis", + "6133635": "Ruttellerona pseudocessaria", + "6133637": "Pachyodes subtrita", + "6133643": "Traminda aventiaria", + "6133644": "Rikiosatoa mavi", + "6133648": "Oxymacaria temeraria", + "6133659": "Argyrocosma inductaria", + "6133667": "Chiasmia intermediaria", + "6133670": "Chiasmia emersaria", + "6133673": "Chiasmia eleonora", + "6133674": "Chiasmia perfusaria", + "6133675": "Chiasmia inchoata", + "6133676": "Herochroma supraviridaria", + "6133680": "Syntypistis comatus", + "6133681": "Syntypistis viridipicta", + "6133684": "Syntypistis umbrosa", + "6133687": "Syntypistis cyanea", + "6133688": "Syntypistis subgeneris", + "6133691": "Euhampsonia formosana", + "6133692": "Mesophalera bruno", + "6133700": "Stauropus alternus", + "6133720": "Ramesa albistriga", + "6133742": "Higena trichosticha", + "6133750": "Semidonta basalis", + "6133753": "Hexafrenum", + "6133769": "Hypolamprus ypsilon", + "6133777": "Beara tortriciformis", + "6133780": "Paracrama angulata", + "6133803": "Meganola triangulalis", + "6133806": "Narangodes confluens", + "6133809": "Nola marginata", + "6133811": "Nola fasciata", + "6133813": "Nola lucidalis", + "6133814": "Nola formosalesa", + "6133858": "Vindula deione", + "6134023": "Calliteara taiwana", + "6134027": "Calliteara arizana", + "6134035": "Ilema kosemponica", + "6165": "Oenosandridae", + "6166": "Opostegidae", + "6196939": "Fraus pteromela", + "6197138": "Nygmia icilia", + "6197200": "Calliteara horsfieldii", + "6198302": "Amata huebneri", + "6201790": "Dicranura ulmi", + "6205994": "Quadrus ulucida", + "6207059": "Pyrausta augustalis", + "6214734": "Stamnodes tessellata", + "6214843": "Isturgia focularia", + "6219423": "Tortrix constrictana", + "6221746": "Speyeria aglaja", + "6228464": "Callizona acesta", + "6229058": "Melitaea deione", + "6231906": "Oeneis glacialis", + "6544581": "Bombyx mandarina", + "6544637": "Ourapteryx yerburii", + "6544687": "Anorthoa munda", + "6757561": "Kearfottia", + "6929": "Immidae", + "6946": "Eriocraniidae", + "6947": "Eriocottidae", + "6948": "Eupterotidae", + "6949": "Galacticidae", + "6950": "Geometridae", + "6951": "Hedylidae", + "6953": "Hesperiidae", + "6954": "Epermeniidae", + "6956": "Epicopeiidae", + "7014": "Nepticulidae", + "7015": "Noctuidae", + "7016": "Notodontidae", + "7017": "Nymphalidae", + "7207679": "Aporia leucodice", + "7236046": "Ancylis", + "7236053": "Charaxes", + "7236059": "Valeria", + "7236069": "Nica", + "7236091": "Nemophora", + "7236092": "Pieris", + "7236098": "Naenia", + "7294": "Drepanidae", + "7297": "Elachistidae", + "7345742": "Mythimna albomarginata", + "7345777": "Pheosiopsis cinerea", + "7345801": "Lophophelma iterans", + "7345811": "Obeidia lucifera", + "7345813": "Obeidia tigrata", + "7345819": "Descoreba simplex", + "7345829": "Celenna festivaria", + "7345843": "Demonarosa rufotessellata", + "7346227": "Spilarctia alba", + "7346231": "Aglaomorpha histrio", + "7346236": "Pogonopygia pavida", + "7346237": "Tristeirometa decussata", + "7346240": "Eucyclodes semialba", + "7346249": "Chiasmia monticolaria", + "7346252": "Psilalcis breta", + "7346256": "Pseudocollix hyperythra", + "7346263": "Micromelalopha baibarana", + "7346271": "Hexafrenum leucodera", + "7346273": "Hexafrenum maculifer", + "7346276": "Syntypistis perdix", + "7346284": "Netria multispinae", + "7346286": "Allodontoides tenebrosa", + "7346301": "Tirumala limniace", + "7346328": "Limenitis sulpitia", + "7346335": "Limenitis dudu", + "7346340": "Neope muirheadii", + "7346344": "Vanessa canace", + "7346346": "Polyura narcaeus", + "7346351": "Bibasis jaina", + "7346354": "Lobocla bifasciatus", + "7346356": "Pseudocoladenia dan", + "7346381": "Lymantria sinica", + "7346382": "Calliteara grotei", + "7346384": "Calliteara lunulata", + "7346401": "Neogurelca himachala", + "7346407": "Zizeeria maha", + "7346417": "Catapaecilma major", + "7346426": "Rapala nissa", + "7346430": "Spalgis epius", + "7346434": "Tongeia filicaudis", + "7346444": "Zizina otis", + "7346446": "Ophiusa disjungens", + "7350238": "Clepsis persicana", + "7354189": "Lysandra hispana", + "7354470": "Uncinus", + "7362601": "Varneria", + "7372375": "Streptopalpia minusculalis", + "7383338": "Condica imitata", + "7384515": "Colocasia", + "7387466": "Agrodiaetus damon", + "7388922": "Mythimna congrua", + "7389824": "Ochlodes sylvanus", + "7390086": "Udara akasa", + "7396517": "Cissusa indiscreta", + "7396883": "Acontia", + "7398419": "Psectrotarsia suavis", + "7400814": "Feltia subterranea", + "7408690": "Arhopala atrax", + "7410701": "Zygaena purpuralis", + "7428726": "Boloria thore", + "7429212": "Agriopis bajaria", + "7431428": "Pyrausta subsequalis", + "7438067": "Apamea remissa", + "7443518": "Cyclophora linearia", + "7444489": "Perigrapha rorida", + "7446048": "Anania stachydalis", + "7448174": "Korscheltellus fusconebulosus", + "7466487": "Clepsis consimilana", + "7472845": "Alucita montana", + "7480993": "Hemeroblemma dolosa", + "7494486": "Bankesia", + "7507369": "Nebula ibericata", + "7509928": "Erebia triarius", + "7510496": "Apatura", + "7514692": "Eusarca", + "7535296": "Idia", + "7535515": "Arctagyrta semivitrea", + "7541913": "Perizoma parallelolineata", + "7543006": "Cnaphalocrocis trapezalis", + "7543161": "Entephria", + "7551965": "Jordanita", + "7555991": "Colostygia aqueata", + "7558165": "Schinia cupes", + "7560807": "Hyperstrotia secta", + "7562564": "Noctuelia floralis", + "7566147": "Carmenta", + "7568341": "Polyphagozerra", + "7586742": "Zygaena rubicundus", + "7588222": "Aphelia unitana", + "7588628": "Calesia", + "7589577": "Tripudia rectangula", + "7593392": "Leucania phragmitidicola", + "7596232": "Wittia sororcula", + "7598729": "Achaea delunaris", + "7598945": "Maliattha synochitis", + "7603634": "Chiomara mithrax", + "7611914": "Eudocima procus", + "7622059": "Pyronia tithonus", + "7623903": "Pharmacis carna", + "7624468": "Drymonia velitaris", + "7624494": "Perizoma verberata", + "7628188": "Ategumia ebulealis", + "7633472": "Hesperia comma", + "7634721": "Polyommatus thersites", + "7641205": "Merrifieldia", + "7642240": "Merrifieldia baliodactylus", + "7642610": "Danaus chrysippus", + "7646066": "Micropterix aruncella", + "7654770": "Cleoceris scoriacea", + "7656811": "Coscinia striata", + "7657419": "Macaria loricaria", + "7657803": "Orgyia recens", + "7659598": "Gnophaela", + "7661023": "Eupoecilia angustana", + "7661785": "Phoebis marcellina", + "7664111": "Polyommatus ripartii", + "7664771": "Polymixis argillaceago", + "7672864": "Hemeroplanis habitalis", + "7673242": "Bostra obsoletalis", + "7674502": "Zygaena loti", + "7680748": "Satyrium abdominalis", + "7681733": "Acasis viretata", + "7683096": "Pyrgus cacaliae", + "7689966": "Condica albigera", + "7700512": "Erebia pluto", + "7700568": "Scopula inductata", + "7701550": "Drasteria cailino", + "7704040": "Eudryas", + "7704258": "Dipterina", + "7712384": "Bryophila ravula", + "7712938": "Ladoga camilla", + "7714017": "Pharmacophagus", + "7716829": "Mocis disseverans", + "7717385": "Enigmogramma basigera", + "7717983": "Ptilocephala plumifera", + "7721234": "Eilema", + "7725644": "Amphipoea fucosa", + "7726809": "Corticea corticea", + "7728366": "Coenonympha arcania", + "7729420": "Strotihypera", + "7733971": "Hypolimnas", + "7734292": "Schreckensteinia festaliella", + "7738295": "Erebia pandrose", + "7739898": "Anania", + "7741315": "Crocota tinctaria", + "7742506": "Heliothis", + "7744105": "Semnia", + "7752082": "Eupithecia tenuiata", + "7753668": "Scopula emutaria", + "7761138": "Zygaena trifolii", + "7762841": "Nymphalis polychloros", + "7764232": "Saturnia pavoniella", + "7767114": "Nemophora metallica", + "7768584": "Mythimna riparia", + "7768674": "Melitaea diamina", + "7769543": "Entephria flavicinctata", + "7769987": "Apaidia", + "7772509": "Dysodia", + "7776011": "Smyrna karwinskii", + "7777102": "Marmara", + "7778368": "Zygaena osterodensis", + "7779226": "Tripudia quadrifera", + "7780930": "Arenostola phragmitidis", + "7785540": "Isogona scindens", + "7786896": "Colias", + "7791190": "Erebia oeme", + "7791558": "Erebia meolans", + "7797515": "Acleris roscidana", + "7798382": "Erebia pronoe", + "7799370": "Boloria pales", + "7800469": "Thalatha melanophrica", + "7803585": "Isognathus rimosa", + "7809779": "Fabriciana adippe", + "7825945": "Abablemma brimleyana", + "7841677": "Cyclopis", + "7842819": "Cechetra", + "7851302": "Nemophora ochsenheimerella", + "7852351": "Pasiphila", + "7854318": "Melanargia galathea", + "7864212": "Diaphania costata", + "7867379": "Melitaea varia", + "7869346": "Pachetra sagittigera", + "7870336": "Zygaena rhadamanthus", + "7874258": "Thumatha senex", + "7875265": "Pygaera timon", + "7876391": "Paranthrene", + "7877231": "Thiodia citrana", + "7881632": "Mastor", + "7882824": "Condica mobilis", + "7895336": "Oligia strigilis", + "7903078": "Zygaena carniolica", + "7905361": "Emmiltis pygmaearia", + "7908344": "Epatolmis luctifera", + "7909858": "Zygaena erythrus", + "7911151": "Spragueia apicalis", + "7917033": "Hadena silenes", + "7918000": "Ulochlaena hirta", + "7919880": "Idaea circuitaria", + "7921916": "Xestia alpicola", + "7922810": "Omphalophana antirrhinii", + "7924383": "Eudocima serpentifera", + "7934873": "Melitaea phoebe", + "7937573": "Drymonia querna", + "7940299": "Erebia lefebvrei", + "7940536": "Agrotis clavis", + "7946946": "Oiketicus kirbyi", + "7955974": "Zygaena exulans", + "7958169": "Depressaria badiella", + "7960566": "Perizoma didymata", + "7961640": "Nemophora minimella", + "7963991": "Altha", + "7964262": "Eucosmomorpha albersana", + "7964910": "Capys alpheus", + "7969922": "Eutelia", + "7972792": "Lacanobia splendens", + "7973517": "Lycia pomonaria", + "7973780": "Psectrotarsia", + "7975250": "Eucosma aspidiscana", + "7976131": "Ypthima nareda", + "7976145": "Paraswammerdamia nebulella", + "7981372": "Euchloe crameri", + "7981386": "Bryophila domestica", + "7988195": "Idaea contiguaria", + "7988274": "Pyronia cecilia", + "7990739": "Cleta filacearia", + "7993353": "Eupithecia valerianata", + "7996464": "Itame vincularia", + "8000103": "Spilarctia lutea", + "8001799": "Limenitis reducta", + "8007222": "Apamea anceps", + "8008237": "Duomitus ceramicus", + "8014296": "Scopula imitaria", + "8015612": "Depressaria albipunctella", + "8015895": "Eupithecia nanata", + "8016522": "Maculinea alcon", + "8016905": "Catocala dilecta", + "8021109": "Basistriga flammatra", + "8023645": "Deudorix antalus", + "8025": "Cimeliidae", + "8026858": "Eupithecia pygmaeata", + "8028211": "Scolecocampa atrosignata", + "8035998": "Hipparchia statilinus", + "8038357": "Setina roscida", + "8043500": "Xestia ashworthii", + "8045644": "Mythimna anderreggii", + "8047165": "Erebia gorge", + "8047343": "Agrochola laevis", + "8048904": "Zygaena romeo", + "8049830": "Pararge aegeria", + "8050639": "Schinia chrysellus", + "8057237": "Phyllocnistis", + "8067894": "Idaea mediaria", + "8073674": "Thymelicus acteon", + "8078362": "Fabriciana niobe", + "8086347": "Rhopobota naevana", + "8094357": "Cacoecimorpha pronubana", + "8095945": "Eumorpha", + "8102790": "Zygaena occitanica", + "8103163": "Eublemma amoena", + "8105817": "Rhizedra lutosa", + "8107362": "Cyclophora", + "8108800": "Helicoverpa armigera", + "8109173": "Pyrgus malvae", + "8109351": "Helicoverpa", + "8111395": "Zygaena sarpedon", + "8130866": "Chalcidica minea", + "8133328": "Nephele hespera", + "8133678": "Thymelicus lineola", + "8137978": "Erebia cassioides", + "8138711": "Apatura ilia", + "8140883": "Brenthis daphne", + "8141741": "Autophila cataphanes", + "8146570": "Diaphania elegans", + "8148822": "Epicallia villica", + "8150089": "Wiseana umbraculatus", + "8150450": "Hypena minualis", + "8150836": "Acosmetia caliginosa", + "8158342": "Zygaena transalpina", + "8160782": "Anticlea badiata", + "8162538": "Epinotia pygmaeana", + "8165185": "Setina aurita", + "8167638": "Erebia epiphron", + "8167743": "Trigonophora jodea", + "8168644": "Melitaea cinxia", + "8172949": "Scotopteryx peribolata", + "8176911": "Hipparchia semele", + "8177591": "Baniana ostia", + "8177775": "Zizina otis", + "8178238": "Dasychira tephra", + "8178453": "Edosa varians", + "8178582": "Caicella", + "8178854": "Carcharodus lavatherae", + "8180900": "Gerinia honoraria", + "8186212": "Cydia amplana", + "8189761": "Brenthis hecate", + "8193562": "Clytie illunaris", + "8194136": "Hymenia", + "8200050": "Merrifieldia leucodactyla", + "8201251": "Zygaena ephialtes", + "8203799": "Hyperstrotia", + "8203812": "Colias alfacariensis", + "8208583": "Hyponephele lycaon", + "8213918": "Abaeis", + "8214814": "Erebia mnestra", + "8215326": "Acleris abietana", + "8218441": "Udea numeralis", + "8219149": "Oncocera faecella", + "8222049": "Euxoa temera", + "8223165": "Ostrinia nubilalis", + "8225376": "Papilio machaon", + "8233062": "Erebia tyndarus", + "8237343": "Macaria carbonaria", + "8237987": "Spilosoma lubricipeda", + "8244266": "Nycteola degenerana", + "8247566": "Myscelia ethusa", + "8249110": "Hydrelia", + "8253467": "Leucania obsoleta", + "8254441": "Leucoptera spartifoliella", + "8262258": "Erebia melas", + "8262357": "Eupithecia exiguata", + "8270406": "Erynnis tages", + "8271010": "Diurnea fagella", + "8273661": "Thymelicus sylvestris", + "8273859": "Coleophora striatipennella", + "8277078": "Carcharodus alceae", + "8292351": "Parahypopta caestrum", + "8292872": "Syngrapha interrogationis", + "8295666": "Erebia neoridas", + "8296807": "Charadra", + "8298764": "Erebia pharte", + "8299504": "Mocis diffluens", + "8304206": "Bryophila vandalusiae", + "8312017": "Satyrus ferula", + "8313553": "Eudemis porphyrana", + "8314088": "Erebia medusa", + "8314432": "Idiochlora", + "8317469": "Palpita", + "8319926": "Aporia", + "8322165": "Arhopala athada", + "8324720": "Samea castellalis", + "8325294": "Scoparia pyralella", + "8326103": "Laelia coenosa", + "8329661": "Archiearis notha", + "8331687": "Lesmone formularis", + "8331787": "Pterophorus", + "8331960": "Zophopetes", + "8338704": "Paralaea", + "8345567": "Melanis aegates", + "8345820": "Notocelia incarnatana", + "8345991": "Sigela brauneata", + "8348761": "Zygaena fausta", + "8352161": "Spodoptera exigua", + "8355390": "Catocala adultera", + "8356768": "Lycaena alciphron", + "8361848": "Epirrhoe alternata", + "8361973": "Orgyia antiquoides", + "8363507": "Metachrostis velox", + "8363558": "Syrichtus", + "8363709": "Naarda xanthonephra", + "8366158": "Idaea filicata", + "8367663": "Dione moneta", + "8369868": "Epinotia crenana", + "8379138": "Xanthia", + "8379616": "Lesmone hinna", + "8384839": "Dialithis gemmifera", + "8388883": "Colostygia aptata", + "8389051": "Gonodes", + "8389961": "Strymon bubastus", + "8393082": "Melitaea didyma", + "8393221": "Eucarta amethystina", + "8394261": "Eupithecia irriguata", + "8396242": "Coenonympha dorus", + "8396912": "Bellulia", + "8397564": "Drymonia dodonaea", + "8402212": "Polyphagozerra coffeae", + "8404037": "Pyronia bathseba", + "8405656": "Condica sutor", + "8406574": "Glyphodes", + "8407240": "Heterorachis", + "8407461": "Arctornis l-nigrum", + "8407958": "Agrotis", + "8411753": "Evergestis politalis", + "8414310": "Lycia alpina", + "8416348": "Lemonia taraxaci", + "8420632": "Aethes rutilana", + "8421569": "Ectropis crepuscularia", + "8424964": "Protodeltote muscosula", + "8424972": "Phtheochroa rugosana", + "8425580": "Diaphania hyalinata", + "8426357": "Zygaena lonicerae", + "8429622": "Cyclopis caecutiens", + "8439879": "Saturnia jonasii", + "8440999": "Schinia volupia", + "8445010": "Auca barrosi", + "8452092": "Cyana dudgeoni", + "8485254": "Cydia marita", + "8491927": "Strotihypera macroplaga", + "8494978": "Udea", + "8501203": "Visiana brujata", + "8503184": "Scythropiodes issikii", + "8526388": "Cyana alborosea", + "8532380": "Anania perlucidalis", + "8537359": "Anania coronata", + "8543494": "Cyana peregrina", + "8546322": "Promalactis suzukiella", + "8548427": "Marpesia eleuchea", + "8549720": "Apatura schrencki", + "8551997": "Schinia albafascia", + "8559137": "Sinoe chambersi", + "8562506": "Schinia miniana", + "8574752": "Promalactis albisquama", + "8581601": "Xanthia icteritia", + "8604089": "Amphitorna purpureofascia", + "8624848": "Cyana perornata", + "8632989": "Macaria fusca", + "8636720": "Stegosatyrus", + "8643155": "Ginzia frivaldszkyi", + "8643309": "Stegosatyrus periphas", + "8647523": "Schinia tertia", + "8659047": "Aricia", + "8669164": "Cirrochroa emalea", + "8679775": "Danielithosia", + "8691947": "Phiaris siderana", + "8697176": "Callima", + "8708745": "Lasionycta proxima", + "8710303": "Lintneria", + "8720118": "Orgyia pseudotsugata", + "8723161": "Argina amanda", + "8725248": "Herpetogramma sphingealis", + "8727750": "Tirumala erato", + "8728355": "Tathorhynchus", + "8729319": "Megalographa biloba", + "8734090": "Thisizima fasciaria", + "8734154": "Gymnandrosoma punctidiscanum", + "8741260": "Macrosaccus robiniella", + "8741750": "Cosmophila flava", + "8742426": "Bryophila raptricula", + "8744407": "Wheeleria", + "8751100": "Feralia major", + "8755207": "Acontia cuta", + "8756768": "Catocala electa", + "8757056": "Naarda", + "8761810": "Schinia regina", + "8763986": "Eresia mylitta", + "8766106": "Bastilla", + "8766638": "Hypsopygia nostralis", + "8774985": "Cisthene plumbea", + "8775810": "Ennomos magnaria", + "8779506": "Glyphipterix circumscriptella", + "8781370": "Schinia sordida", + "8782295": "Aedia", + "8782891": "Japonica lutea", + "8786726": "Blasticorhinus", + "8787356": "Argina", + "8790054": "Hellinsia chamelai", + "8792353": "Lychnuchoides ozias", + "8793278": "Tetracis cervinaria", + "8793324": "Erastria cruentaria", + "8793873": "Hypena laceratalis", + "8793973": "Zenophleps obscurata", + "8793999": "Pseudochelaria", + "8797017": "Aproaerema simplexella", + "8797666": "Alpheias pectinalis", + "8802610": "Elaphria alapallida", + "8803817": "Pseudopelosia", + "8805966": "Zanclognatha jacchusalis", + "8806645": "Cycnia", + "8810143": "Boloria napaea", + "8810582": "Tigrioides", + "8810912": "Ambulyx moorei", + "8814442": "Disticta", + "8818378": "Tripudia balteata", + "8820198": "Plataea blanchardaria", + "8823068": "Anania terrealis", + "8825450": "Lamprospilus collucia", + "8825467": "Caveana senuri", + "8828146": "Bibasis oedipodea", + "8828194": "Arthroschista", + "8831819": "Gonitis mesogona", + "8832": "Bombycidae", + "8832257": "Dahlica", + "8832485": "Mycalesis perseoides", + "8833": "Brachodidae", + "8833509": "Euchrysops osiris", + "8834": "Carposinidae", + "8834672": "Hieromantis arcuata", + "8834745": "Caveana", + "8836": "Castniidae", + "8837162": "Drasteria caucasica", + "8837974": "Arawacus ellida", + "8838": "Coleophoridae", + "8839": "Cosmopterigidae", + "8840": "Cossidae", + "8840017": "Arawacus leucogyna", + "8841": "Crambidae", + "8843351": "Cryptographis", + "8843927": "Conchylis oenotherana", + "8844327": "Hypodryas", + "8846776": "Ministrymon janevicroy", + "8847500": "Hermeuptychia intricata", + "8849480": "Lintneria istar", + "8851663": "Entephria infidaria", + "8855": "Momphidae", + "8856": "Neopseustidae", + "8856895": "Anania crocealis", + "8858121": "Anania hortulata", + "8860": "Plutellidae", + "8861": "Psychidae", + "8863": "Pterophoridae", + "8864": "Saturniidae", + "8865": "Schreckensteiniidae", + "8865876": "Digama culta", + "8866": "Scythrididae", + "8868": "Sphingidae", + "8869900": "Aethes cnicana", + "8870": "Thyrididae", + "8871": "Tischeriidae", + "8871600": "Triodia amasinus", + "8872": "Uraniidae", + "8872165": "Macrochilo hypocritalis", + "8873": "Urodidae", + "8874": "Yponomeutidae", + "8874140": "Catocala lacrymosa", + "8874633": "Bastilla joviana", + "8875": "Zygaenidae", + "8875114": "Chloantha", + "8875134": "Callopistria", + "8875890": "Catephia", + "8876855": "Niphograpta albiguttalis", + "8877458": "Syssphinx hubbardi", + "8881513": "Salvatgea xanthosoma", + "8883183": "Gadirtha fusca", + "8890502": "Globia sparganii", + "8895291": "Hypocala", + "8896182": "Teulisna", + "8897869": "Brunia antica", + "8903953": "Lygephila", + "8904480": "Strymon mulucha", + "8905759": "Zanclognatha dentata", + "8908724": "Cisthene striata", + "8912441": "Pharmacis aemilianus", + "8913017": "Atlides neora", + "8915575": "Cerocala", + "8916247": "Zobida similipuncta", + "8918036": "Chlosyne gorgone", + "8919882": "Pseudarenipses", + "8921795": "Spilarctia", + "8924506": "Afrida ydatodes", + "8928010": "Britha", + "8928353": "Tripudia luxuriosa", + "8929537": "Gnamptonychia ventralis", + "8930863": "Agnorisma", + "8931287": "Penicillaria", + "8933773": "Ctenucha rubriceps", + "8934672": "Entomogramma", + "8935025": "Paralacydes", + "8936210": "Callimorpha", + "8941801": "Doxocopa kallina", + "8941993": "Macaria adonis", + "8943174": "Acontia libedis", + "8944338": "Hemerophanes", + "8946062": "Cortyta", + "8951523": "Chrysoritis thysbe", + "8951618": "Euchlaena obtusaria", + "8952756": "Myelopsis", + "8952983": "Pangrapta", + "8955497": "Lycia florentina", + "8955545": "Trigonodes", + "8955839": "Ischnurges lancinalis", + "8956567": "Proserpinus lucidus", + "8956729": "Synanthedon acerrubri", + "8958353": "Izatha katadiktya", + "8961830": "Vanessa altissima", + "8963517": "Chloronycta", + "8963926": "Drasteria inepta", + "8964772": "Jordanita chloros", + "8964866": "Bicyclus dorothea", + "8968124": "Amerila", + "8968321": "Mocis marcida", + "8970409": "Asota", + "8974541": "Raparna", + "8978064": "Sypnoides", + "8978362": "Tirumala septentrionis", + "8978428": "Rhodogastria", + "8979264": "Audea watusi", + "8981028": "Zebronia discordens", + "8981907": "Pseudonaclia", + "8982056": "Phragmatiphila", + "8982591": "Mycalesis mucianus", + "8983556": "Dysallacta", + "8983629": "Numenes", + "8986624": "Chionodes sevir", + "8986756": "Terastia africana", + "8992509": "Anachrostis", + "8992718": "Arawacus sito", + "8997448": "Xanthetis", + "8997710": "Yigoga", + "8998296": "Schinia unimacula", + "9000709": "Tegulifera", + "9002107": "Plebejus samuelis", + "9002818": "Oruza", + "9004359": "Atteva wallengreni", + "9005880": "Zanclognatha", + "9007213": "Deltophora polliniferens", + "9008379": "Doryodes latistriga", + "9015218": "Acrolophus plumifrontella", + "9016382": "Eresia eunice", + "9017206": "Papilio tereas", + "9020610": "Orocrambus", + "9021546": "Prays", + "9022399": "Catocala neogama", + "9023222": "Ancylis diminuatana", + "9026388": "Bleptina", + "9026655": "Phymatopus", + "9028122": "Dasyophthalma creusa", + "9029051": "Luceria", + "9036372": "Secusio", + "9036849": "Pseudogyrtona", + "9038042": "Acontia candefacta", + "9040133": "Cenopis saracana", + "9040198": "Galtara", + "9042018": "Schinia ligeae", + "9042695": "Melitaea", + "9044302": "Ernolatia", + "9044770": "Estigmene", + "9046185": "Arrade", + "9046214": "Diplodoma", + "9046977": "Adscita", + "9050611": "Daimio phisara", + "9051758": "Zanclognatha laevigata", + "9051888": "Epiblema glenni", + "9053308": "Epiplema amorata", + "9053842": "Ceryx", + "9055772": "Egybolis", + "9059321": "Rhesalides", + "9059564": "Lineodes fontella", + "9059730": "Chalciope", + "9060128": "Hyposada", + "9060267": "Perigrapha sellingi", + "9061491": "Phytometra", + "9062262": "Maliattha concinnimacula", + "9065472": "Schrankia", + "9068729": "Baniana", + "9068968": "Bibasis harisa", + "9069808": "Bocana", + "9069966": "Bryophila tephrocharis", + "9072828": "Actinote pellenea", + "9073940": "Prolita", + "9077304": "Axiodes", + "9077410": "Geina", + "9078027": "Stenia", + "9078901": "Euproctis", + "9080469": "Artaxa", + "9086331": "Marpesia corinna", + "9087922": "Charaxes varanes", + "9090334": "Eressa", + "9092175": "Agrochola lunosa", + "9092234": "Ugia", + "9093819": "Rhanidophora", + "9095083": "Mniotype", + "9095230": "Cifuna", + "9099004": "Psichotoe", + "9100030": "Anania fuscalis", + "9101339": "Anania lancealis", + "9103399": "Macrosaccus", + "9105656": "Maliattha subblandula", + "9106541": "Enispa", + "9108102": "Rhodophaea", + "9110918": "Macaria transitaria", + "9111044": "Catastega", + "9111269": "Penthophera", + "9111961": "Loryma egregialis", + "9112567": "Aroa", + "9113409": "Pindis squamistriga", + "9114044": "Givira arbeloides", + "9118632": "Eublemma", + "9119424": "Marathyssa", + "9119710": "Gastrinodes argoplaca", + "9121178": "Naroma", + "9122734": "Attevidae", + "9123440": "Numata bipunctella", + "9123839": "Egnasia", + "9128871": "Acantholipes", + "9130093": "Tolpia", + "9131390": "Cerynea", + "9135821": "Globia algae", + "9135886": "Cisthene subjecta", + "9136607": "Bocula", + "9136904": "Mycalesis subdita", + "9137617": "Ascalapha", + "9137631": "Pseudoterpna coronillaria", + "9137965": "Anania luctualis", + "9141856": "Sozusa", + "9146182": "Spilosoma", + "9146244": "Paranthrene robiniae", + "9148810": "Enargia fausta", + "9151414": "Orthotelia", + "9154466": "Agylla", + "9155713": "Povolnya", + "9155721": "Xenolechia", + "9156165": "Leucoblepsis taiwanensis", + "9156458": "Denivia hemon", + "9157410": "Arawacus togarna", + "9159662": "Glyphidocera juniperella", + "9163604": "Cymaroa", + "9163659": "Schinia diffusa", + "9167802": "Zekelita", + "9168716": "Fulgoraecia", + "9174377": "Xylena solidaginis", + "9175037": "Leucania farcta", + "9175687": "Mocis", + "9176043": "Goditha bumeliana", + "9176590": "Olene", + "9177092": "Medama", + "9177300": "Sophta", + "9178932": "Batocnema coquerelii", + "9179511": "Pataeta", + "9180373": "Pandesma", + "9181278": "Leucoma", + "9181627": "Elophila obliteralis", + "9182266": "Chloraspilates", + "9182336": "Triodia adriaticus", + "9183339": "Ilemodes", + "9183600": "Spargania", + "9183738": "Polyacme dissimilis", + "9184825": "Micronola", + "9185656": "Consul excellens", + "9185801": "Pericyma", + "9186977": "Homodes", + "9188678": "Anomis", + "9189318": "Hydrillodes", + "9189502": "Autoba", + "9190731": "Heliconius hortense", + "9192882": "Catoblepia amphirhoe", + "9194811": "Scopula divisaria", + "9197007": "Euptychia", + "9197112": "Manduca", + "9198767": "Pseudopelosia plumosa", + "9199756": "Eudocima", + "9203611": "Fodina", + "9203720": "Halone", + "9205220": "Zethes", + "9206138": "Autosticha", + "9208233": "Hamadryas fornax", + "9208918": "Hermeuptychia hermybius", + "9209436": "Metachrostis", + "9210500": "Phibalapteryx", + "9211050": "Siccia", + "9211520": "Oglasa", + "9211630": "Loxioda", + "9212903": "Ptilocephala", + "9213204": "Microdes villosata", + "9216200": "Aegle kaekeritziana", + "9217680": "Teracotona", + "9218657": "Somena", + "9219266": "Amata fortunei", + "9219529": "Marpesia zerynthia", + "9220793": "Polypogon", + "9220953": "Chiasmia aestimaria", + "9228024": "Leucinodes laisalis", + "9230208": "Philotis", + "9230236": "Nygmia", + "9233420": "Dargida rubripennis", + "9234402": "Amblychia subrubida", + "9235027": "Phytometra rhodarialis", + "9235225": "Virbia ferruginosa", + "9236138": "Catocala agrippina", + "9237031": "Lophosis labeculata", + "9237599": "Phalaenostola metonalis", + "9237621": "Iridopsis pergracilis", + "9238900": "Hypena baltimoralis", + "9239301": "Meganola spodia", + "9240216": "Diastema cnossia", + "9240357": "Catocala umbrosa", + "9240588": "Syssphinx heiligbrodti", + "9241105": "Schinia luxa", + "9241669": "Photedes inops", + "9242559": "Aphelia paleana", + "9242609": "Sympistis perscripta", + "9243117": "Orthodes detracta", + "9243264": "Patalene aenetusaria", + "9243319": "Macaria sulphurea", + "9243764": "Callopistria japonibia", + "9243875": "Hypena abalienalis", + "9244066": "Heliothis phloxiphaga", + "9244973": "Sympistis chionanthi", + "9245604": "Zimmermannia bosquella", + "9247563": "Cisthene liberomacula", + "9247947": "Schinia thoreaui", + "9248329": "Dichagyris variabilis", + "9248830": "Heliocheilus lupata", + "9249036": "Hypenodes fractilinea", + "9249651": "Neognopharmia stevenaria", + "9250744": "Feltia geniculata", + "9251088": "Macaria multilineata", + "9251096": "Euploea lewinii", + "9252524": "Catocala retecta", + "9253819": "Peridea basitriens", + "9254017": "Zanclognatha lituralis", + "9254157": "Sympistis dentata", + "9255102": "Schinia nundina", + "9255328": "Hamadryas laodamia", + "9255512": "Macrurocampa marthesia", + "9256436": "Drasteria pallescens", + "9256638": "Condica morsa", + "9256786": "Rindgeria ornata", + "9257793": "Goniocraspedon variegata", + "9257908": "Calyptra canadensis", + "9259786": "Macaria marcescaria", + "9260167": "Sinpunctiptilia", + "9261296": "Macaria truncataria", + "9261458": "Schinia argentifascia", + "9262981": "Anarsia innoxiella", + "9262994": "Troyus", + "9264326": "Melanolophia signataria", + "9266866": "Danielithosia immaculata", + "9267364": "Garella vallata", + "9268082": "Athetis brunneolineosa", + "9272461": "Macaria bitactata", + "9273409": "Catocala judith", + "9273963": "Coryphista meadii", + "9274899": "Eumacaria madopata", + "9276279": "Barsine fuscozonata", + "9277294": "Cepphis armataria", + "9277330": "Memphis moruus", + "9278311": "Neeugoa kanshireiensis", + "9278398": "Virbia opella", + "9279670": "Drasteria ochracea", + "9281181": "Digrammia ocellinata", + "9281907": "Schinia regia", + "9282469": "Mesapamea fractilinea", + "9283228": "Drasteria adumbrata", + "9283948": "Properigea albimacula", + "9284849": "Elaphria cyanympha", + "9287097": "Paradelta quadralis", + "9288185": "Schinia suetus", + "9288386": "Macrochilo louisiana", + "9288596": "Cisthene packardii", + "9288979": "Enchoria lacteata", + "9289753": "Plagiomimicus tepperi", + "9289908": "Catocala habilis", + "9290866": "Cisthene subrufa", + "9291075": "Macrochilo absorptalis", + "9291092": "Ilexia intractata", + "9291297": "Schinia florida", + "9292394": "Hypena degesalis", + "9294363": "Lipararchis tranquillalis", + "9297059": "Polygrammate hebraeicum", + "9298735": "Zanclognatha atrilineella", + "9299326": "Arcobara multilineata", + "9301336": "Hyperstrotia flaviguttata", + "9305011": "Hemeroplanis incusalis", + "9305798": "Athetis tarda", + "9306367": "Azenia obtusa", + "9307098": "Leptostales ferruminaria", + "9307254": "Acontia tetragona", + "9307713": "Iridopsis vellivolata", + "9308082": "Ecliptopera atricolorata", + "9308930": "Loxomorpha flavidissimalis", + "9309575": "Trigrammia quadrinotaria", + "9310286": "Gerrodes minatea", + "9310369": "Dahira obliquifascia", + "9310510": "Catocala subnata", + "9310626": "Herminia tarsipennalis", + "9311081": "Macaria oweni", + "9312545": "Catocala palaeogama", + "9313634": "Nola triquetrana", + "9314022": "Hypena madefactalis", + "9315577": "Cisthene tenuifascia", + "9315833": "Churinga virago", + "9320776": "Ozarba propera", + "9320916": "Plagodis kuetzingi", + "9321500": "Stamnoctenis pearsalli", + "9322646": "Fishia illocata", + "9323382": "Drasteria edwardsii", + "9324570": "Zanclognatha pedipilalis", + "9325654": "Fascionycta fasciata", + "9327042": "Drasteria grandirena", + "9327259": "Condica vecors", + "9328683": "Bryolymnia viridata", + "9329292": "Feltia mollis", + "9329912": "Gufria", + "9330467": "Macaria lorquinaria", + "9331464": "Ocneria atlantica", + "9332369": "Drepanulatrix unicalcararia", + "9332506": "Catocala macula", + "9332550": "Megalopyge basalis", + "9334318": "Arzecla", + "9334639": "Acontia augustipennis", + "9334851": "Cisthene conjuncta", + "9336001": "Catephia linteola", + "9337858": "Cucullia eulepis", + "9338769": "Photedes defecta", + "9339487": "Macaria promiscuata", + "9340070": "Catocala vidua", + "9340110": "Kocakina", + "9340452": "Metria amella", + "9342344": "Striacosta albicosta", + "9343385": "Asuridia inouei", + "9344456": "Catocala innubens", + "9345545": "Isogona snowi", + "9345724": "Barsura", + "9347308": "Barsine sauteri", + "9348210": "Cobubatha orthozona", + "9350484": "Catocala antinympha", + "9350900": "Cosmosoma stilbosticta", + "9352348": "Digrammia pallorata", + "9352978": "Digrammia mellistrigata", + "9353360": "Hypena eductalis", + "9354496": "Lesmone detrahens", + "9354669": "Alypiodes geronimo", + "9355107": "Syssphinx bisecta", + "9355953": "Checupa stegeri", + "9356491": "Biston suppressaria", + "9356770": "Mythimna consanguis", + "9357385": "Junonia neildi", + "9357810": "Fascionycta", + "9358521": "Hypena humuli", + "9359597": "Fomoria septembrella", + "9359871": "Idia forbesii", + "9361954": "Asterope leprieuri", + "9362190": "Oligia obtusa", + "9362560": "Macrochilo litophora", + "9362785": "Schinia trifascia", + "9363692": "Heliocheilus toralis", + "9363893": "Eusarca packardaria", + "9366016": "Macaria bisignata", + "9366762": "Ponometia venustula", + "9367471": "Catocala residua", + "9367674": "Psaphida rolandi", + "9368026": "Pseudeustrotia carneola", + "9368382": "Synchlora faseolaria", + "9368398": "Macaria pustularia", + "9368974": "Zanclognatha marcidilinea", + "9369576": "Euxoa bochus", + "9370070": "Peratophyga crista", + "9370312": "Iridopsis ephyraria", + "9370933": "Idaea obfusaria", + "9372988": "Buzara onelia", + "9373309": "Schinia citrinellus", + "9373686": "Cosmia praeacuta", + "9374443": "Abablemma bilineata", + "9374637": "Callopistria mollissima", + "9377268": "Apamea niveivenosa", + "9379595": "Idia scobialis", + "9379855": "Stathmopoda fusciumeraris", + "9381852": "Mythimna oxygala", + "9382044": "Matigramma obscurior", + "9382415": "Protitame subalbaria", + "9384861": "Helia agna", + "9385576": "Nola cereella", + "9387353": "Idia rotundalis", + "9387782": "Acontia lanceolata", + "9388726": "Chrysoecia thoracica", + "9389851": "Phoenicoprocta hampsonii", + "9390065": "Hemeroplanis historialis", + "9390293": "Schinia arcigera", + "9391442": "Eusarca fundaria", + "9391467": "Orgyia vetusta", + "9392058": "Macaria graphidaria", + "9392076": "Macaria exauspicata", + "9392084": "Ectima thecla", + "9392614": "Abablemma duomaculata", + "9394138": "Virbia aurantiaca", + "9395000": "Mylon maimon", + "9395261": "Feralia deceptiva", + "9395422": "Drasteria scrupulosa", + "9396180": "Vanessa carye", + "9396755": "Sympistis apis", + "9399145": "Drasteria divergens", + "9399288": "Psaphida grandis", + "9400545": "Rusicada privata", + "9400895": "Etainia sericopeza", + "9400916": "Rhesalides curvata", + "9400977": "Macaria bicolorata", + "9402536": "Macaria varadaria", + "9403481": "Digrammia continuata", + "9404919": "Acontia expolita", + "9406020": "Catocala flebilis", + "9406822": "Resapamea passer", + "9406984": "Cisthene angelus", + "9407": "Mimallonidae", + "9407200": "Idia aemula", + "9408": "Micropterigidae", + "9409": "Megalopygidae", + "9409309": "Orthodes goodelli", + "9410": "Lyonetiidae", + "9410076": "Catocala maestosa", + "9410414": "Agrochola purpurea", + "9410573": "Biston bengaliaria", + "9412": "Tineidae", + "9413168": "Macaria pallipennata", + "9414744": "Dryadaulidae", + "9414984": "Nebula ablutaria", + "9415435": "Neoligia crytora", + "9415669": "Acratodes suavata", + "9416645": "Catocala angusi", + "9417": "Papilionidae", + "9417594": "Virbia immaculata", + "9418549": "Anicla illapsa", + "9419734": "Macaria colata", + "9420824": "Lymantria xylina", + "9423248": "Argyrostrotis flavistriaria", + "9423863": "Leptostales rubromarginaria", + "9424082": "Neoligia subjuncta", + "9424441": "Phalaenostola eumelusalis", + "9424464": "Iridopsis obliquaria", + "9424681": "Schinia mitis", + "9424853": "Epiplema dryopterata", + "9425857": "Hypena deceptalis", + "9426054": "Notodonta scitipennis", + "9426252": "Meganola minuscula", + "9426771": "Egira alternans", + "9428900": "Macaria fissinotata", + "9432438": "Idia julia", + "9432644": "Cisthene barnesii", + "9432810": "Resapamea stipata", + "9433772": "Plagiomimicus spumosum", + "9434954": "Eudesmia arida", + "9436173": "Digrammia curvata", + "9438677": "Macaria aemulataria", + "9438913": "Bryolymnia semifascia", + "9440183": "Dysgonia hamatilis", + "9440644": "Drasteria howlandii", + "9442902": "Agriopis dira", + "9443159": "Zanclognatha obscuripennis", + "9445489": "Ponometia elegantula", + "9446281": "Haematera pyrame", + "9446902": "Lygephila victoria", + "9447614": "Lacanobia grandis", + "9448761": "Digrammia colorata", + "9449132": "Dichagyris grotei", + "9451208": "Opostegoides gephyraea", + "9451320": "Mocis texana", + "9452274": "Cisthene unifascia", + "9452497": "Idia majoralis", + "9452702": "Schinia gaurae", + "9453490": "Digrammia gnophosaria", + "9454052": "Elasmia packardii", + "9454291": "Nola minna", + "9454444": "Macaria subcessaria", + "9455404": "Catocala obscura", + "9456004": "Macaria granitata", + "9456735": "Papaipema leucostigma", + "9457004": "Alypiodes", + "9457324": "Melanis electron", + "9457757": "Euscirrhopterus cosyra", + "9460510": "Idia denticulalis", + "9463067": "Syntomeida ipomoeae", + "9463442": "Sympistis augustus", + "9465978": "Cobubatha dividua", + "9468297": "Catocala badia", + "9468667": "Besma endropiaria", + "9469139": "Ziegleria hesperitis", + "9469300": "Idaea furciferata", + "9469928": "Zanclognatha cruralis", + "9471709": "Cerma cerintha", + "9473121": "Blastobasis glandulella", + "9473918": "Cosmophila lyona", + "9474256": "Schinia rivulosa", + "9474405": "Macaria ulsterata", + "9476708": "Sympistis occata", + "9477531": "Heterophleps refusaria", + "9478331": "Loscopia velata", + "9478424": "Spilarctia subcarnea", + "9478718": "Arawacus lincoides", + "9479525": "Eriplatymetra coloradaria", + "9480768": "Macrochilo orciferalis", + "9481002": "Schinia cumatilis", + "9483647": "Catocala luctuosa", + "9484411": "Schinia accessa", + "9485070": "Schinia walsinghami", + "9485481": "Earias huegeliana", + "9486293": "Kamalia tattakana", + "9486411": "Anterastria teratophora", + "9488551": "Schinia niveicosta", + "9488754": "Iridopsis fragilaria", + "9488783": "Zanclognatha protumnusalis", + "9489399": "Macaria coortaria", + "9490756": "Mniotype tenera", + "9491341": "Virbia ostenta", + "9492499": "Cepphis decoloraria", + "9492640": "Cobubatha lixiva", + "9493016": "Proteuxoa tetronycha", + "9493317": "Vamuna alboluteora", + "9494431": "Digrammia atrofasciata", + "9494526": "Ophiusa parcemacula", + "9495306": "Sympistis atricollaris", + "9496267": "Pubitelphusa", + "9496311": "Proxenus miranda", + "9496896": "Argentostiria koebelei", + "9497623": "Leptostales pannaria", + "9498206": "Idia americalis", + "9499599": "Hypena sordidula", + "9500553": "Orthosia segregata", + "9500945": "Euscirrhopterus gloveri", + "9502606": "Sewa taiwana", + "9502724": "Macaria pinistrobata", + "9503548": "Catabenoides terminellus", + "9504222": "Thyas coronata", + "9506719": "Acontia terminimaculata", + "9508913": "Bastilla fulvotaenia", + "9511345": "Bagisara tristicta", + "9511749": "Protodeltote albidula", + "9512631": "Auzatellodes arizana", + "9513830": "Lintneria eremitus", + "9514086": "Rindgeria", + "9516038": "Digrammia neptaria", + "9516680": "Digrammia muscariata", + "9517291": "Peridea ferruginea", + "9519191": "Nymphicula yoshiyasui", + "9519321": "Euphydryas aurinia", + "9520799": "Panopoda repanda", + "9522383": "Schrankia macula", + "9523379": "Digrammia subminiata", + "9524458": "Paracymoriza nigra", + "9525172": "Plagiomimicus navia", + "9526331": "Cisthene deserta", + "9527919": "Hypena manalis", + "9529506": "Ataboruza", + "9530135": "Macaria distribuaria", + "9530200": "Arctia parthenos", + "9530271": "Schinia jaguarina", + "9530319": "Photedes panatela", + "9530406": "Anania mysippusalis", + "9530928": "Schinia lynx", + "9530977": "Etainia decentella", + "9531432": "Syssphinx blanchardi", + "9532702": "Macaria occiduaria", + "9533271": "Hypena bijugalis", + "9533293": "Phigalia plumogeraria", + "9533506": "Schinia snowi", + "9534291": "Digrammia pallidata", + "9534429": "Schinia mortua", + "9534690": "Phalaenostola hanhami", + "9535420": "Cirrhochrista spinuella", + "9536457": "Trichosea diffusa", + "9538525": "Isturgia dislocaria", + "9538684": "Tripudia flavofasciata", + "9539128": "Plusia magnimacula", + "9539292": "Dargida diffusa", + "9541133": "Limenitis iphiclus", + "9541689": "Meessiidae", + "9541734": "Virbia laeta", + "9541908": "Apamea scoparia", + "9544337": "Iridopsis defectaria", + "9544558": "Schinia meadi", + "9544823": "Garella ruficirra", + "9545331": "Digrammia irrorata", + "9545480": "Schinia siren", + "9545713": "Hypena atomaria", + "9546514": "Palumbina guerinii", + "9546910": "Lesmone griseipennis", + "9547140": "Leuconycta lepidula", + "9547311": "Catocala ulalume", + "9547535": "Syssphinx bicolor", + "9547676": "Aseptis marina", + "9547681": "Therinia lactucina", + "9548726": "Photedes includens", + "9548993": "Biston panterinaria", + "9549172": "Xanthia ocellaris", + "9549475": "Catocala nebulosa", + "9550265": "Orthodes majuscula", + "9550689": "Neope", + "9551316": "Heliothis oregonica", + "9551544": "Quadrus cerialis", + "9552253": "Schinia errans", + "9552466": "Idia diminuendis", + "9552703": "Cisthene faustinula", + "9553692": "Caenurgia togataria", + "9554074": "Catocala epione", + "9555094": "Cisthene picta", + "9556427": "Heliocheilus julia", + "9558288": "Magna", + "9558845": "Operophtera danbyi", + "9558873": "Macaria aequiferaria", + "9559336": "Rusicada combinans", + "9559671": "Xylophanes crenulatus", + "9560018": "Properigea tapeta", + "9560404": "Catocala robinsoni", + "9560782": "Drasteria sabulosa", + "9561820": "Peridea angulosa", + "9562175": "Sympistis dinalda", + "9563355": "Nebula tophaceata", + "9563837": "Vanessa braziliensis", + "9564041": "Harmandicrania", + "9564612": "Drasteria petricola", + "9564779": "Feralia februalis", + "9565980": "Virbia costata", + "9568710": "Orgyia detrita", + "9571514": "Chrysoecia atrolinea", + "9573163": "Schinia gracilenta", + "9574801": "Nola cilicoides", + "9574939": "Macaria ribearia", + "9577234": "Comibaena mariae", + "9577379": "Schinia sanguinea", + "9577547": "Eupithecia ravocostaliata", + "9578319": "Acosmerycoides harterti", + "9579309": "Nola clethrae", + "9579730": "Hypena scabra", + "9581695": "Leptostales laevitaria", + "9581976": "Acronicta fallax", + "9585354": "Inouenola", + "9586329": "Callopistria granitosa", + "9586705": "Cryptaspasma sordida", + "9588105": "Virbia rubicundaria", + "9589234": "Condica videns", + "9590057": "Colobura annulata", + "9590066": "Idaea tacturata", + "9590272": "Amblyptilia falcatalis", + "9590907": "Schinia obscurata", + "9591877": "Schinia pulchripennis", + "9592714": "Synchlora bistriaria", + "9593098": "Pseudeustrotia indeterminata", + "9593393": "Epyaxa sodaliata", + "9593475": "Psaphida styracis", + "9594509": "Schinia hulstia", + "9595155": "Schinia acutilinea", + "9596498": "Leucania amygdalina", + "9597741": "Heliocheilus paradoxus", + "9599150": "Cisthene martini", + "9600123": "Sansarea", + "9601788": "Macrochilo bivittata", + "9601813": "Ilexia", + "9602019": "Schinia fulleri", + "9604825": "Catocala muliercula", + "9605252": "Loweia", + "9605631": "Xylomoia indirecta", + "9606779": "Syssphinx montana", + "9607036": "Catocala piatrix", + "9607447": "Drasteria hudsonica", + "9607541": "Kamalia", + "9608673": "Hypena edictalis", + "9610059": "Iridopsis dataria", + "9610080": "Simplicia cornicalis", + "9610447": "Neoligia exhausta", + "9611624": "Catocala dejecta", + "9612009": "Platypolia mactata", + "9616055": "Anicla digna", + "9616438": "Macaria metanemaria", + "9616658": "Sympistis badistriga", + "9617411": "Protuliocnemis biplagiata", + "9617496": "Hammaptera parinotata", + "9618068": "Catocala insolabilis", + "9619088": "Leptostales crossii", + "9620499": "Pirascca sagaris", + "9621086": "Anavitrinella atristrigaria", + "9621113": "Hypena californica", + "9621271": "Bastilla solomonensis", + "9622117": "Egira perlubens", + "9622322": "Metria bilineata", + "9622725": "Catocala serena", + "9622955": "Melanis smithiae", + "9623131": "Xanthia tatago", + "9623220": "Hampsonella arizana", + "9624918": "Macaria octolineata", + "9625112": "Sympistis sectiloides", + "9626037": "Nola pustulata", + "9626500": "Hypena palparia", + "9627567": "Scopula caricaria", + "9627917": "Idia lubricalis", + "9629365": "Lineostriastiria hachita", + "9629450": "Mnesiloba eupitheciata", + "9630748": "Glympis concors", + "9630930": "Sympistis toddi", + "9632824": "Macaria evagaria", + "9633562": "Sympistis greyi", + "9633615": "Deltote bellicula", + "9634178": "Oxytenis modestia", + "9634575": "Schinia bina", + "9635978": "Dysgonia propyrrha", + "9636267": "Emarginea percara", + "9636442": "Drasteria fumosa", + "9637664": "Zanclognatha theralis", + "9645309": "Singularia alternaria", + "9663271": "Eugoa cernyi", + "9673208": "Katha magnata", + "9674732": "Patania ruralis", + "9675443": "Nhambikuara", + "9675743": "Hellinsia balanotes", + "9686431": "Hellinsia inquinatus", + "9689": "Oecophoridae", + "9689122": "Adaina montanus", + "9700261": "Michaelophorus indentatus", + "9717": "Nolidae", + "9724183": "Semioscopis strigulana", + "9734171": "Agnoea josephinae", + "9740944": "Besaia", + "9745549": "Nhambikuara cerradensis", + "9746673": "Hellinsia elliottii", + "9748079": "Hellinsia homodactylus", + "9749806": "Nippoptilia cinctipedalis", + "9752950": "Oidaematophorus eupatorii", + "9754232": "Ammatho cuneonotatus", + "9755262": "Gisilia thoracista", + "9759340": "Sinpunctiptilia emissalis", + "9759554": "Lebadea", + "9760511": "Lioptilodes albistriolatus", + "9762611": "Chinasa", + "9768621": "Platyptilia celidotus", + "9776414": "Acharia stimulea", + "9777614": "Pselnophorus belfragei", + "9778438": "Oligocentria lignicolor", + "9782192": "Ancylosis cinnamomella", + "9790007": "Nemaxera betulinella", + "9792270": "Chinasa costalis", + "9801765": "Amblyptilia repletalis", + "9803522": "Condica capensis", + "9804158": "Oeneis bore", + "9805848": "Dryobotodes roboris", + "9807789": "Disphragis guttivitta", + "9812211": "Dysstroma latefasciata", + "9816676": "Agriades pyrenaica", + "9819403": "Antigastra catalaunalis", + "9826405": "Anisogona simana", + "9830270": "Lipogya eutheta", + "9833933": "Eucyclodes metaspila", + "9835867": "Epicrocis metallopa", + "9836014": "Daphnis moorei", + "9837762": "Parapoynx polydectalis", + "9840570": "Genduara punctigera", + "9849625": "Eucosma ochroterminana", + "9851221": "Termessa conographa", + "9851261": "Hypatopa punctiferella", + "9851867": "Dynamine artemisia", + "9852545": "Cyme reticulata", + "9856663": "Jamides elpis", + "9857679": "Salma pyrastis", + "9858922": "Arescoptera haplocala", + "9859868": "Acatapaustus leucospila", + "9860684": "Phalonidia memoranda", + "9860902": "Lysimelia lenis", + "9864281": "Samea baccatalis", + "9867272": "Aricoris erostratus", + "9867379": "Glyphidoptera insignana", + "9868978": "Aproaerema polychromella", + "9875111": "Chloridea subflexa", + "9875141": "Scioglyptis loxographa", + "9875420": "Maxates orthodesma", + "9878063": "Caldubotys", + "9880359": "Eloasa callidesma", + "9880932": "Sparganothoides lentiginosana", + "9882683": "Discophlebia celaena", + "9883140": "Euhampsonia splendida", + "9883274": "Acatapaustus metallopa", + "9883856": "Brahmaea japonica", + "9884308": "Lamprosema haedulalis", + "9885192": "Eucosma parmatana", + "9890366": "Mataeomera mesotaenia", + "9893740": "Eublemma inconspicua", + "9893936": "Kanshizeia hemicycla", + "9894093": "Nola infantula", + "9895629": "Eido trimaculella", + "9896144": "Cenopis reticulatana", + "9899724": "Coequosa australasiae", + "9900218": "Theila siennata", + "9902073": "Kallimoides rumia", + "9904499": "Kretania modica", + "9905626": "Eucopina", + "9906229": "Heterostegane insulata", + "9906979": "Antheraea rosieri", + "9909775": "Cryptoptila australana", + "9910243": "Mataeomera ligata", + "9911298": "Hulda impudens", + "9913863": "Tebenna onustana", + "9914882": "Actias maenas", + "9915028": "Erebia neriene", + "9916153": "Caleta elna", + "9918092": "Bocula sejuncta", + "9919915": "Timandra stueningi", + "9921001": "Syntypistis pallidifascia", + "9923283": "Dysgonia senex", + "9925669": "Hermeuptychia harmonia", + "9927378": "Cyana malayensis", + "9930604": "Synanthedon novaroensis", + "9932090": "Protuliocnemis castalaria", + "9935660": "Eudocima iridescens", + "9935837": "Elophila gyralis", + "9939530": "Rhuma argyraspis", + "9941073": "Acharia hyperoche", + "9942354": "Caloptilia triadicae", + "9943941": "Thallogama corticola", + "9944922": "Hypsopygia thymetusalis", + "9948031": "Ofatulena duodecemstriata", + "9950697": "Pedois lewinella", + "9952043": "Dichelia clarana", + "9952367": "Syneora euboliaria", + "9953708": "Phalonidia lepidana", + "9953996": "Aethes baloghi", + "9954885": "Polyommatus celina", + "9956017": "Brunia dorsalis", + "9957790": "Hyalobathra crenulata", + "9958147": "Epiblema carolinana", + "9958241": "Rhigognostis interrupta", + "9959898": "Anaxidia lactea", + "9960072": "Nola pygmaeodes", + "9960252": "Genduara subnotata", + "9960318": "Aricoris signata", + "9962269": "Hypochrosis binexata", + "9963153": "Polyura schreiber", + "9964857": "Euptychia pompilia", + "9967126": "Erebia parmenio", + "9967251": "Corgatha dipyra", + "9967529": "Conogethes haemactalis", + "9968404": "Euthalia nais", + "9969513": "Calguia deltophora", + "9971153": "Epiblema boxcana", + "9971850": "Sciota subcaesiella", + "9972403": "Actias sinensis", + "9973217": "Calliprora sexstrigella", + "9975134": "Idiodes pellophanes", + "9975698": "Laothus barajo", + "9976926": "Syneora acrotypa", + "9977181": "Ardozyga nyctias", + "9981187": "Eunica cuvierii", + "9983244": "Saturnia japonica", + "9983957": "Corgatha drosera", + "9985020": "Termessa zonophanes", + "9987116": "Oenochroma quardrigramma", + "9988287": "Consul electra", + "9989156": "Phytometra laevis", + "9991710": "Epinotia johnsonana", + "9994384": "Arhopala major", + "9998920": "Argyresthia oreasella", + "9999965": "Euthalia teuta" +} diff --git a/deployment/mambo_deploy/__init__.py b/deployment/mambo_deploy/__init__.py new file mode 100644 index 0000000..681857b --- /dev/null +++ b/deployment/mambo_deploy/__init__.py @@ -0,0 +1,7 @@ +"""Portable model-bundle inference; importing this package does not import PyTorch.""" + +from .augmentation import TTA, EdgePad, RotatePad, SaltAndPepper, View +from .predictor import Predictor +from .results import Prediction, PredictionItem + +__all__ = ["RotatePad", "EdgePad", "Predictor", "Prediction", "PredictionItem", "TTA", "View", "SaltAndPepper"] diff --git a/deployment/mambo_deploy/augmentation.py b/deployment/mambo_deploy/augmentation.py new file mode 100644 index 0000000..4aa2f60 --- /dev/null +++ b/deployment/mambo_deploy/augmentation.py @@ -0,0 +1,207 @@ +"""Outer, runtime-independent TTA over decoded CHW images.""" + +import hashlib +from dataclasses import dataclass + +import numpy as np +from PIL import Image + +from .preprocessing import RECIPE, _rgb, prepare_uint8, preprocess + + +@dataclass(frozen=True) +class View: + """Fractional crop (top, left, bottom, right), quarter turns, then reflection.""" + + crop: tuple = (0, 0, 1, 1) + quarter_turns: int = 0 + hflip: bool = False + + def __post_init__(self): + top, left, bottom, right = self.crop + if not (0 <= top < bottom <= 1 and 0 <= left < right <= 1): + raise ValueError("View crop must be a nonempty fractional box within [0,1]") + if not isinstance(self.quarter_turns, int): + raise ValueError("quarter_turns must be an integer") + + def __call__(self, image): + top, left, bottom, right = self.crop + height, width = image.shape[1:] + y, x = int(top * height), int(left * width) + result = image[:, y : max(y + 1, int(bottom * height)), x : max(x + 1, int(right * width))] + result = np.rot90(result, self.quarter_turns, axes=(1, 2)) + return result[..., ::-1] if self.hflip else result + + +@dataclass(frozen=True) +class EdgePad: + """Pad each source edge by a fraction of its axis, preserving original pixels.""" + + fraction: float + + def __post_init__(self): + if not np.isfinite(self.fraction) or self.fraction < 0: + raise ValueError("Padding fraction must be finite and nonnegative") + + def __call__(self, image): + height, width = image.shape[1:] + y, x = int(np.ceil(height * self.fraction)), int(np.ceil(width * self.fraction)) + return np.pad(image, ((0, 0), (y, y), (x, x)), mode="edge") + + +@dataclass(frozen=True) +class RotatePad: + """Rotate on an expanded canvas, then edge-pad before ordinary preprocessing.""" + + degrees: float + padding: float = 0.25 + + def __post_init__(self): + if not np.isfinite(self.degrees): + raise ValueError("Rotation must be finite") + EdgePad(self.padding) + + def rotate(self, image): + rotated = Image.fromarray(image.transpose(1, 2, 0)).rotate( + self.degrees, resample=Image.Resampling.BILINEAR, expand=True, fillcolor=(124, 116, 104) + ) + return np.asarray(rotated).transpose(2, 0, 1) + + def __call__(self, image): + return EdgePad(self.padding)(self.rotate(image)) + + +@dataclass(frozen=True) +class SaltAndPepper: + """Deterministic image-keyed noise; one black/white pixel mask shared by RGB.""" + + proportion: float = 0.01 + seed: int = 0 + + def __post_init__(self): + if not 0 <= self.proportion <= 1: + raise ValueError("Noise proportion must be in [0,1]") + if not isinstance(self.seed, int) or self.seed < 0: + raise ValueError("Noise seed must be a nonnegative integer") + + def __call__(self, image): + image = np.ascontiguousarray(image) + fingerprint = int.from_bytes(hashlib.blake2b(image.data, digest_size=8).digest(), "little") + rng = np.random.default_rng([self.seed, fingerprint]) + draws = rng.random(image.shape[1:]) + result = image.copy() + result[:, draws < self.proportion / 2] = 0 + result[:, (draws >= self.proportion / 2) & (draws < self.proportion)] = 255 + return result + + +@dataclass(frozen=True) +class TTA: + """Named finite transforms; custom callables receive isolated uint8 CHW copies.""" + + transforms: tuple + name: str = "custom" + + def __post_init__(self): + object.__setattr__(self, "transforms", tuple(self.transforms)) + if not self.transforms or not all(callable(view) for view in self.transforms): + raise ValueError("TTA requires one or more callable transforms") + if not isinstance(self.name, str) or not self.name: + raise ValueError("TTA name must be a nonempty string") + + +DEFAULT_TTA = "rotation30_pad25_3" +PROFILES = ( + "none", + "rotation30_pad25_3", + "wide_rotation_mixed_padding_5", + "padded_scale", + "hflip", + "five_crop", + "ten_crop", + "d4", + "light_noise", +) + + +def resolve_tta(value): + if value is True: + value = DEFAULT_TTA + elif value is False: + value = "none" + if isinstance(value, TTA): + return value + if value not in PROFILES: + raise ValueError(f"tta must be a TTA object or one of {PROFILES}") + if value == "none": + return None + if value == "rotation30_pad25_3": + views = (View(), RotatePad(-30), RotatePad(30)) + elif value == "wide_rotation_mixed_padding_5": + views = (View(), RotatePad(-10, 0.15), RotatePad(10, 0.15), RotatePad(-30), RotatePad(30)) + elif value == "padded_scale": + views = (View(), EdgePad(0.08), EdgePad(0.15)) + elif value == "hflip": + views = (View(), View(hflip=True)) + elif value == "light_noise": + views = (View(), SaltAndPepper(seed=0), SaltAndPepper(seed=1)) + elif value == "d4": + views = tuple(View(quarter_turns=k, hflip=flip) for flip in (False, True) for k in range(4)) + else: + # Original framing plus four corner crops covering 90% on each axis. + boxes = ((0, 0, 1, 1), (0, 0, 0.9, 0.9), (0, 0.1, 0.9, 1), (0.1, 0, 1, 0.9), (0.1, 0.1, 1, 1)) + views = tuple(View(crop=box, hflip=flip) for flip in ((False, True) if value == "ten_crop" else (False,)) for box in boxes) + return TTA(views, value) + + +def _prepare_view(image, transform, out=None, *, compact=False): + prepare = prepare_uint8 if compact else preprocess + # Exact built-in types are non-mutating; subclasses/custom callables retain isolation. + if type(transform) is RotatePad: + return prepare(transform.rotate(image), out=out, padding=transform.padding) + if type(transform) is EdgePad: + return prepare(image, out=out, padding=transform.fraction) + return prepare(transform(image if type(transform) in (View, SaltAndPepper) else image.copy()), out=out) + + +def prepared_views(items, tta, pool=None, *, compact=False, decode=_rgb): + """Decode once and lazily prepare views in recipe order.""" + + def mapped(fn, values): + return list(pool.map(fn, values)) if pool and len(values) > 1 else [fn(item) for item in values] + + decoded = mapped(decode, items) + + def batches(): + for transform in tta.transforms: + output = np.empty((len(decoded), 3, RECIPE["crop_size"], RECIPE["crop_size"]), dtype=np.uint8 if compact else np.float32) + + def fill(index): + _prepare_view(decoded[index], transform, out=output[index], compact=compact) + + mapped(fill, range(len(decoded))) + yield output + + return batches() + + +def infer_augmented(runtime, items, tta, embeddings=False, pool=None): + return infer_prepared(runtime, prepared_views(items, tta, pool), len(tta.transforms), embeddings) + + +def infer_prepared(runtime, views, view_count, embeddings=False): + """Aggregate prepared views in recipe order, identically for streaming and prefetched inputs.""" + leaves, vectors = None, None + for prepared in views: + scores, embedding = runtime(prepared, embeddings) + scores = scores.astype(np.float32) / np.float32(view_count) + leaves = scores if leaves is None else leaves + scores + if embeddings: + embedding = embedding.astype(np.float32) / np.float32(view_count) + vectors = embedding if vectors is None else vectors + embedding + if embeddings: + norms = np.linalg.norm(vectors, axis=1, keepdims=True) + if not np.isfinite(norms).all() or np.any(norms <= np.finfo(np.float32).eps): + raise RuntimeError("TTA produced an undefined mean embedding") + vectors /= norms + return leaves, vectors diff --git a/deployment/mambo_deploy/bundle.py b/deployment/mambo_deploy/bundle.py new file mode 100644 index 0000000..a111ba4 --- /dev/null +++ b/deployment/mambo_deploy/bundle.py @@ -0,0 +1,69 @@ +"""Validated, relocatable bundle paths. Explicit local bundles stay offline; the default cache can fetch missing files.""" + +import hashlib +import json +import os +from pathlib import Path + +from .download import cached_model_file + + +class Bundle: + def __init__(self, root, *, download=False): + self.download = download + self.root = Path(root).expanduser().resolve() + manifest_bytes = (self.root / "release.json").read_bytes() + self.manifest_sha256 = hashlib.sha256(manifest_bytes).hexdigest() + self.manifest = json.loads(manifest_bytes) + if self.manifest.get("schema") != "mambo-release-v1": + raise ValueError("Unsupported MAMBO bundle schema") + if self.manifest.get("score_semantics") != "hierarchical-leaf-logits-logsumexp-v1": + raise ValueError("Unsupported score semantics") + self._verified = set() + self.classes = self.read_json("classes.json") + self.preprocessing = self.read_json("preprocessing.json") + self.regions = self.read_json("presets.json") + for rank, labels in enumerate(self.classes["labels"]): + if not labels or len(set(labels)) != len(labels): + raise ValueError(f"Invalid class vocabulary at rank {rank}") + if len(self.classes["labels"]) != 3 or len(self.classes["parents"]) != 2: + raise ValueError("This release requires species, genus and family ranks") + for rank, parents in enumerate(self.classes["parents"]): + if len(parents) != len(self.classes["labels"][rank]): + raise ValueError("Parent mapping length mismatch") + if any(not isinstance(p, int) or not 0 <= p < len(self.classes["labels"][rank + 1]) for p in parents): + raise ValueError("Invalid parent index") + + def file(self, relative): + path = (self.root / relative).resolve() + if not path.is_relative_to(self.root): + raise ValueError(f"Bundle path escapes root: {relative}") + item = self.manifest["files"].get(relative) + if item is None: + raise ValueError(f"Unlisted bundle file: {relative}") + if relative not in self._verified: + if not path.exists() and self.download and relative in self.manifest.get("origins", {}): + cached_model_file( + self.manifest["origins"][relative], + path, + cache=self.root.parent, + **item, + offline=os.environ.get("MAMBO_OFFLINE") == "1", + ) + if path.stat().st_size != item["size"]: + raise ValueError(f"Bundle size mismatch: {relative}") + with path.open("rb") as stream: + digest = hashlib.file_digest(stream, "sha256").hexdigest() + if digest != item["sha256"]: + raise ValueError(f"Bundle hash mismatch: {relative}") + self._verified.add(relative) + return path + + def read_json(self, relative): + return json.loads(self.file(relative).read_text()) + + def profile(self, name): + profile = self.manifest["profiles"][name] + for relative in profile["files"]: + self.file(relative) + return self.file(profile["model"]) diff --git a/deployment/mambo_deploy/cli.py b/deployment/mambo_deploy/cli.py new file mode 100644 index 0000000..ef3972f --- /dev/null +++ b/deployment/mambo_deploy/cli.py @@ -0,0 +1,154 @@ +"""Small local prediction CLI; no dataset or training-framework dependency.""" + +import argparse +import csv +import json +import tempfile +from contextlib import closing +from pathlib import Path + +import numpy as np + +from .augmentation import DEFAULT_TTA, PROFILES +from .predictor import Predictor + + +def run(default_backend="onnx", default_device="cpu"): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("-i", "--input", nargs="+", required=True) + parser.add_argument("--bundle") + parser.add_argument("--backend", choices=["torch", "onnx"], default=default_backend) + parser.add_argument("--device", default=default_device) + parser.add_argument("-M", "--model") + parser.add_argument("-w", "--weights") + parser.add_argument("--class-list") + parser.add_argument("--batch-size", type=int, default=8) + parser.add_argument("--threads", type=int, default=2) + parser.add_argument("--precision", choices=["auto", "fp32", "fp16", "bf16", "tf32"], default="auto") + parser.add_argument( + "--tta", + nargs="?", + const=DEFAULT_TTA, + choices=PROFILES, + default="none", + help=f"Enable TTA (default recipe: {DEFAULT_TTA}), or choose a recipe", + ) + parser.add_argument("--preprocess-workers", type=int, help="Preparation threads; defaults to --threads") + parser.add_argument("--topk", type=int, default=1) + parser.add_argument("--threshold", type=float, default=0) + parser.add_argument("--embeddings", action="store_true") + parser.add_argument("-o", "--output", type=Path, default=Path(".")) + parser.add_argument("--name", default="results") + args = parser.parse_args() + if not 0 <= args.threshold <= 1: + parser.error("threshold must be in [0,1]") + paths = [] + for value in args.input: + path = Path(value) + paths.extend( + sorted( + p + for p in path.rglob("*") + if p.is_file() and p.suffix.lower() in {".jpg", ".jpeg", ".png", ".webp", ".bmp", ".tif", ".tiff"} + ) + if path.is_dir() + else [path] + ) + destination = args.output / args.name + if destination.exists(): + parser.error(f"Output already exists: {destination}; choose a new --name") + if not paths: + parser.error("No images found") + predictor = Predictor( + args.bundle, + backend=args.backend, + device=args.device, + model=args.model, + weights=args.weights, + class_list=args.class_list, + batch_size=args.batch_size, + threads=args.threads, + precision=args.precision, + tta=args.tta, + preprocess_workers=args.preprocess_workers, + ) + columns = [ + "instance_id", + "filename", + "level", + "label", + "prediction", + "confidence", + "threshold", + "known_label", + "prediction_made", + "correct", + ] + full_labels = predictor.bundle.classes["labels"] + species_index = {label: i for i, label in enumerate(full_labels[0])} + parents = predictor.bundle.classes["parents"] + destination.parent.mkdir(parents=True, exist_ok=True) + # Publish only a complete request. Failures leave no plausible final results. + with tempfile.TemporaryDirectory(prefix=".mambo-results-", dir=destination.parent) as temporary: + output = Path(temporary) / "results" + output.mkdir() + with ( + (output / "mini_metric.csv").open("w", newline="") as stream, + (output / "predictions.json").open("w") as predictions, + closing(predictor.predict_stream(paths, topk=args.topk, embeddings=args.embeddings)) as batches, + ): + writer = csv.writer(stream) + writer.writerow(columns) + offset, vectors = 0, None + try: + for batch in batches: + result, embedding = batch if args.embeddings else (batch, None) + if offset == 0: + predictions.write('{"metadata": ' + json.dumps(result.metadata)) + predictions.write(', "config": ' + json.dumps({"topk": result.topk, "cls2idx": result.cls2idx})) + predictions.write(', "results": [') + if embedding is not None: + vectors = np.lib.format.open_memmap( + output / "embeddings.npy", mode="w+", dtype=np.float32, shape=(len(paths), embedding.shape[1]) + ) + for i, record in enumerate(result.to_dict()): + if offset + i: + predictions.write(",") + predictions.write(json.dumps(record)) + path = paths[offset + i] + truth = [path.parent.name, "", ""] + if truth[0] in species_index: + genus = parents[0][species_index[truth[0]]] + truth[1:] = [full_labels[1][genus], full_labels[2][parents[1][genus]]] + for rank in range(3): + label = result.labels[i][0][rank] + confidence = float(result.confidence[i, 0, rank]) + known = truth[rank] in result.cls2idx[str(rank)] + made = confidence >= args.threshold + writer.writerow( + [ + offset + i, + str(path), + rank, + truth[rank], + label, + confidence, + args.threshold, + int(known), + int(made), + (1 if label == truth[rank] else -1) if made else 0, + ] + ) + if vectors is not None: + vectors[offset : offset + len(result)] = embedding + offset += len(result) + if offset != len(paths): + raise RuntimeError(f"Incomplete prediction: {offset}/{len(paths)} images") + predictions.write("]}") + finally: + if vectors is not None: + vectors.flush() + # Release the mapping before directory publication on Windows. + del vectors + output.rename(destination) + print(destination) diff --git a/deployment/mambo_deploy/default_bundle.json b/deployment/mambo_deploy/default_bundle.json new file mode 100644 index 0000000..d3a63a6 --- /dev/null +++ b/deployment/mambo_deploy/default_bundle.json @@ -0,0 +1,42 @@ +{ + "metadata": { + "CODE_LICENSE": "Copyright 2026 Asger Svenning\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n", + "MODEL_CARD.md": "# MAMBO V3\n\nUnpublished release candidate: EfficientNetV2-S trained on global-lepi in September\n2026. Predicts 12,632 species, 4,476 genera and 104 families, identified by GBIF taxon\nIDs. Native PyTorch and standard floating-point ONNX artifacts share this vocabulary.\nNo quantized model is included. Embeddings have 1,280 dimensions and unit length.\n\nUse the release README for installation, input/output formats and configuration.\nGlobal is the default. Region presets and custom class lists constrain eligible\nspecies; they are permissive occurrence filters, not native-range maps. Taxonomic\nranks are predicted independently. Optional TTA uses `rotation30_pad25_3`.\n\n## Intended use and evidence\n\nLocal moth/butterfly image classification and downstream integration. Both\nFlemming monitoring crops and the original global-lepi test split have completed\nV2/V3, backend and TTA comparisons. Their different domains produce different TTA\nresponses; neither establishes accuracy for every deployment. Regional vocabulary\nand confidence thresholds affect the results. Consult the README's figures and\nlinked evidence for macro metrics, acceptance coverage, support truncation and\ncalibration policy. Laptop and B200 timings have distinct environment/workload\nboundaries and do not establish universal hardware throughput.\n\nThe Python adapter supports CPU and NVIDIA CUDA via separately installed runtimes.\nONNX offers a path to browser and other native-runtime integrations; those require\nmatching preprocessing and are not automatically qualified by Python execution.\nNo complete Windows/macOS/edge-device compatibility claim is made.\n\n## Training and artifact identity\n\nThe checksum-verified training console reports the best model at epoch **30**.\n`MODEL_PROVENANCE.toml` identifies the checkpoint, configuration, epoch summary and\ntraining log with immutable hashes and public source URLs. The retained materials\ndo not identify the exact training Git revision or retain the starting checkpoint\nhash. The preparation source initializes a torchvision DEFAULT EfficientNetV2-S\nbackbone (ImageNet-1K) and a new hierarchical head with seed 42; this is a source-based\nreconstruction rather than a verified identity for the original starting file. The recorded September 11 checkout is packaging provenance,\nnot a claimed training revision. The trained checkpoint itself is identified and\ncan be loaded without retraining or downloading an initialization model.\n\n`release.json` covers the graph/external-weight files, presets, preprocessing,\nvocabulary and documentation. `PRESET_DEFINITIONS.toml` and `PRESET_UPDATES.toml`\nrecord list construction. Read `NOTICES.md` for code, model and source-data boundaries.\n\n## Publication status\n\nThe candidate weights are prepared under **CC BY-NC-SA 4.0**: attribution,\nnon-commercial use and share-alike terms for distributed adaptations. See\n`MODEL_LICENSE.txt` and `NOTICES.md` for the terms and upstream attribution.\nThe adapter code remains MIT-licensed. This candidate has not been published.\n", + "MODEL_LICENSE.txt": "Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International\n\n Creative Commons Corporation (“Creative Commons”) is not a law firm and does not provide legal services or legal advice. Distribution of Creative Commons public licenses does not create a lawyer-client or other relationship. Creative Commons makes its licenses and related information available on an “as-is” basis. Creative Commons gives no warranties regarding its licenses, any material licensed under their terms and conditions, or any related information. Creative Commons disclaims all liability for damages resulting from their use to the fullest extent possible.\n\nUsing Creative Commons Public Licenses\n\nCreative Commons public licenses provide a standard set of terms and conditions that creators and other rights holders may use to share original works of authorship and other material subject to copyright and certain other rights specified in the public license below. The following considerations are for informational purposes only, are not exhaustive, and do not form part of our licenses.\n\nConsiderations for licensors: Our public licenses are intended for use by those authorized to give the public permission to use material in ways otherwise restricted by copyright and certain other rights. Our licenses are irrevocable. Licensors should read and understand the terms and conditions of the license they choose before applying it. Licensors should also secure all rights necessary before applying our licenses so that the public can reuse the material as expected. Licensors should clearly mark any material not subject to the license. This includes other CC-licensed material, or material used under an exception or limitation to copyright. More considerations for licensors.\n\nConsiderations for the public: By using one of our public licenses, a licensor grants the public permission to use the licensed material under specified terms and conditions. If the licensor’s permission is not necessary for any reason–for example, because of any applicable exception or limitation to copyright–then that use is not regulated by the license. Our licenses grant only permissions under copyright and certain other rights that a licensor has authority to grant. Use of the licensed material may still be restricted for other reasons, including because others have copyright or other rights in the material. A licensor may make special requests, such as asking that all changes be marked or described. Although not required by our licenses, you are encouraged to respect those requests where reasonable. More considerations for the public.\n\nCreative Commons Attribution-NonCommercial-ShareAlike 4.0 International Public License\n\nBy exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International Public License (\"Public License\"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions.\n\nSection 1 – Definitions.\n\n a.\tAdapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image.\n\n b.\tAdapter's License means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License.\n\n c.\tBY-NC-SA Compatible License means a license listed at creativecommons.org/compatiblelicenses, approved by Creative Commons as essentially the equivalent of this Public License.\n\n d.\tCopyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights.\n\n e.\tEffective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements.\n\n f.\tExceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material.\n\n g.\tLicense Elements means the license attributes listed in the name of a Creative Commons Public License. The License Elements of this Public License are Attribution, NonCommercial, and ShareAlike.\n\n h.\tLicensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License.\n\n i.\tLicensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license.\n\n j.\tLicensor means the individual(s) or entity(ies) granting rights under this Public License.\n\n k.\tNonCommercial means not primarily intended for or directed towards commercial advantage or monetary compensation. For purposes of this Public License, the exchange of the Licensed Material for other material subject to Copyright and Similar Rights by digital file-sharing or similar means is NonCommercial provided there is no payment of monetary compensation in connection with the exchange.\n\n l.\tShare means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them.\n\n m.\tSui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world.\n\n n.\tYou means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning.\n\nSection 2 – Scope.\n\n a.\tLicense grant.\n\n 1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to:\n\n A. reproduce and Share the Licensed Material, in whole or in part, for NonCommercial purposes only; and\n\n B. produce, reproduce, and Share Adapted Material for NonCommercial purposes only.\n\n 2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions.\n\n 3. Term. The term of this Public License is specified in Section 6(a).\n\n 4. Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted Material.\n\n 5. Downstream recipients.\n\n A. Offer from the Licensor – Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License.\n\n B. Additional offer from the Licensor – Adapted Material. Every recipient of Adapted Material from You automatically receives an offer from the Licensor to exercise the Licensed Rights in the Adapted Material under the conditions of the Adapter’s License You apply.\n\n C. No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material.\n\n 6. No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i).\n\n b.\tOther rights.\n\n 1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise.\n\n 2. Patent and trademark rights are not licensed under this Public License.\n\n 3. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties, including when the Licensed Material is used other than for NonCommercial purposes.\n\nSection 3 – License Conditions.\n\nYour exercise of the Licensed Rights is expressly made subject to the following conditions.\n\n a.\tAttribution.\n\n 1. If You Share the Licensed Material (including in modified form), You must:\n\n A. retain the following if it is supplied by the Licensor with the Licensed Material:\n\n i.\tidentification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated);\n\n ii.\ta copyright notice;\n\n iii. a notice that refers to this Public License;\n\n iv.\ta notice that refers to the disclaimer of warranties;\n\n v.\ta URI or hyperlink to the Licensed Material to the extent reasonably practicable;\n\n B. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and\n\n C. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License.\n\n 2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information.\n\n 3. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable.\n\n b.\tShareAlike.In addition to the conditions in Section 3(a), if You Share Adapted Material You produce, the following conditions also apply.\n\n 1. The Adapter’s License You apply must be a Creative Commons license with the same License Elements, this version or later, or a BY-NC-SA Compatible License.\n\n 2. You must include the text of, or the URI or hyperlink to, the Adapter's License You apply. You may satisfy this condition in any reasonable manner based on the medium, means, and context in which You Share Adapted Material.\n\n 3. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, Adapted Material that restrict exercise of the rights granted under the Adapter's License You apply.\n\nSection 4 – Sui Generis Database Rights.\n\nWhere the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material:\n\n a.\tfor the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database for NonCommercial purposes only;\n\n b.\tif You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material, including for purposes of Section 3(b); and\n\n c.\tYou must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database.\nFor the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights.\n\nSection 5 – Disclaimer of Warranties and Limitation of Liability.\n\n a.\tUnless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You.\n\n b.\tTo the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You.\n\n c.\tThe disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability.\n\nSection 6 – Term and Termination.\n\n a.\tThis Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically.\n\n b.\tWhere Your right to use the Licensed Material has terminated under Section 6(a), it reinstates:\n\n 1.\tautomatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or\n\n 2.\tupon express reinstatement by the Licensor.\n\n For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License.\n\n c.\tFor the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License.\n\n d.\tSections 1, 5, 6, 7, and 8 survive termination of this Public License.\n\nSection 7 – Other Terms and Conditions.\n\n a.\tThe Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed.\n\n b.\tAny arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License.\n\nSection 8 – Interpretation.\n\n a.\tFor the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License.\n\n b.\tTo the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions.\n\n c.\tNo term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor.\n\n d.\tNothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority.\n\nCreative Commons is not a party to its public licenses. Notwithstanding, Creative Commons may elect to apply one of its public licenses to material it publishes and in those instances will be considered the “Licensor.” Except for the limited purpose of indicating that material is shared under a Creative Commons public license or as otherwise permitted by the Creative Commons policies published at creativecommons.org/policies, Creative Commons does not authorize the use of the trademark “Creative Commons” or any other trademark or logo of Creative Commons without its prior written consent including, without limitation, in connection with any unauthorized modifications to any of its public licenses or any other arrangements, understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses.\n\nCreative Commons may be contacted at creativecommons.org.\n", + "MODEL_PROVENANCE.toml": "schema = \"mambo-model-provenance-v1\"\nmodel_id = \"MAMBO_v3\"\narchitecture = \"EfficientNetV2-S with normalized hierarchical classifier\"\ntraining_run = \"global_lepi_production_w32_1\"\ntraining_started = \"2026-09-10\"\ntraining_finished = \"2026-09-11\"\nbest_epoch = 30\nbest_epoch_source = \"Checksum-verified training/console.log: Best model found at epoch 30\"\nseed = 42\ntraining_epochs = 30\ntraining_world_size = 4\ntraining_source_revision_status = \"Not recorded in retained checkpoint, config, or console log; packaging checkout is not asserted as training source.\"\ninitialization_status = \"Source-based reconstruction: torchvision DEFAULT EfficientNetV2-S backbone and a new normalized hierarchical head, seed 42; original initialization checkpoint/hash and run-specific preparation manifest not retained.\"\npackaging_checkout = \"52954edae5dae31a62ecb639533e6f8573d57055\"\npackaging_checkout_role = \"Original September 11 export/package environment only\"\nweights_license = \"CC-BY-NC-SA-4.0\"\nweights_license_status = \"Prepared for release following owner preference for non-commercial share-alike weights; code remains MIT\"\n\n[checkpoint]\nurl = \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/pytorch/best.pt\"\nsha256 = \"174b9214bfea2df69e4f5c5d16afd841fec961db4274f3e6bf474cef9cab5e8a\"\n\n[training_log]\nurl = \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/training/console.log\"\nsha256 = \"d710f226651413ced619ff5e63da1e731a650959eaee4b86632358ea847e5e54\"\n\n[epoch_summary]\nurl = \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/training/logs/summary.csv\"\nsha256 = \"be1bf9f00729e3c0afdd56c4b2209a2bfe79e92bb1b0a2aa6013c18798c095b2\"\n\n[configuration]\nurl = \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/training/run-metadata/config.yaml\"\nsha256 = \"a10caf8c1abca6b1660c0ca4c6e3cc42687512f1db02501bf1a3e236165c960f\"\n\n[initialization_recipe]\nevidence_kind = \"Source-based reconstruction, not a retained initial-checkpoint identity\"\nsource_revision = \"53599f5c3e70c8e6ae683a205168e55bca38ab59\"\npreparation_source = \"dev/ucloud/worker.py:prepare\"\nproduction_source = \"dev/ucloud/production.py:generate\"\nbackbone_factory = \"mini_trainer/modeling/architectures/torchvision.py:get_torchvision_model\"\nbackbone_weights = \"EfficientNet_V2_S_Weights.DEFAULT (IMAGENET1K_V1)\"\nupstream_weights_url = \"https://download.pytorch.org/models/efficientnet_v2_s-dd5fe13b.pth\"\nupstream_documentation = \"https://docs.pytorch.org/vision/stable/models/generated/torchvision.models.efficientnet_v2_s.html\"\ninitial_checkpoint_name = \"initial_seed42.pt\"\ninitial_checkpoint_sha256_status = \"Not retained\"\nseed = 42\n", + "NOTICES.md": "# MAMBO V3 notices\n\n## Model weights\n\nThe MAMBO V3 trained weights, in PyTorch and ONNX form, are prepared for release\nunder **Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International**\n(`CC-BY-NC-SA-4.0`). The full terms are in `MODEL_LICENSE.txt` and at\n.\n\nAttribute **MAMBO V3 / mini_trainer project**, link to\n and the\nlicense, and identify modifications when sharing. The license permits\nnon-commercial use and sharing; distributed adaptations must retain the same\nlicense elements under the license's ShareAlike conditions. It does not require\nprivate adaptations to be published. Commercial use requires separate permission\nfrom the relevant rights holders. The license grants only rights the licensor\nhas authority to grant; it does not replace third-party rights or notices.\n\n## Initialization and attribution\n\nThe retained UCloud preparation code creates `initial_seed42.pt` before training:\nit initializes the torchvision EfficientNetV2-S backbone with `DEFAULT` pretrained\nweights and a new normalized hierarchical classification head using seed 42.\nTorchvision documents this default as `EfficientNet_V2_S_Weights.IMAGENET1K_V1`,\ntrained on ImageNet-1K. Production then loads the saved starting checkpoint with\n`pretrained=false` to avoid loading the upstream weights again.\n\nThis lineage is reconstructed from preparation source, not verified against the\noriginal initialization file: its bytes/hash and the run-specific preparation\nmanifest were not retained in the release archive. `MODEL_PROVENANCE.toml` records\nthe source revision and this limitation. The deployed trained checkpoint is\nindependently identified by its SHA-256; inference does not require the initial file.\n\nAcknowledgements: the TorchVision maintainers and contributors, ImageNet, and\nMingxing Tan and Quoc V. Le for EfficientNetV2. Upstream references:\n\n- [TorchVision EfficientNetV2-S weights](https://docs.pytorch.org/vision/stable/models/generated/torchvision.models.efficientnet_v2_s.html)\n- [EfficientNetV2 paper](https://arxiv.org/abs/2104.00298)\n- [TorchVision model terms](https://github.com/pytorch/vision#pre-trained-model-license)\n\nTorchVision notes that pretrained models may have terms derived from their training\ndata. Its software license alone is not a blanket license for pretrained weights\nor photographs. The MAMBO license does not relicense those upstream materials.\n\n## Repository code and runtime dependencies\n\nThe deployment adapter and mini_trainer code remain **MIT-licensed** (`CODE_LICENSE`).\nThe model-weight license does not relicense independently written application code.\nPyTorch/torchvision, ONNX Runtime, NumPy and Pillow are installed separately by the\napplication's package manager, not vendored in the model bundle. Their distributions\ncarry their own licenses and notices. CUDA/cuDNN components have separate terms.\nKeep dependency notices when redistributing an environment or container.\n\n## Dataset, taxonomy and photographs\n\nGlobal-lepi metadata and GBIF taxon identifiers informed training and regional\npresets. Training/evaluation photographs and the Flemming dataset are not included\nin this deployment release. Their original source permissions remain separate;\nthis release grants no permission to redistribute those datasets or images.\nPreset files contain taxon IDs and filter definitions, not photographs. Retained\nprivate evaluation inputs must remain outside publication assets.\n", + "PRESETS.md": "# Presets\n\nV3 uses metadata row counts, including all splits, without further deduplication. New lists require at least 3 regional and 25 global rows; legacy lists preserve their historical membership.\n\n| Preset | Species | Regional/global minimum rows | Scope |\n|---|---:|---|---|\n| europe | 3014 | 26/none | Records assigned EUROPE by the metadata, including European-labelled portions of transcontinental countries. |\n| north_europe | 1977 | 26/none | Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden (Ireland, Iceland, Åland, Faroe Islands, Guernsey, Isle of Man, Jersey, Svalbard/Jan Mayen: ambiguous historical inclusion; adding any or all leaves the species list unchanged). |\n| europe_v3 | 3086 | 3/25 | Same EUROPE metadata filter as legacy europe, including European-labelled portions of transcontinental countries; updated occurrence thresholds only. |\n| north_europe_v3 | 2199 | 3/25 | Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden. Same explicit country filter as reconstructed legacy north_europe; updated occurrence thresholds only. The UK and historically ambiguous additions are not included in this definition. |\n| australia | 1874 | 3/25 | All Australian records, including Tasmania and other territories recorded under AU; not all Oceania. |\n| tasmania | 274 | 3/25 | Australian records explicitly assigned stateProvince Tasmania. Species recorded there, not only endemic species; blank/other state values are excluded. |\n| north_america | 4425 | 3/25 | Canada, United States, Mexico, Greenland, Bermuda, Saint Pierre and Miquelon. Whole countries, including US records outside the continental mainland. |\n| central_america | 1639 | 3/25 | Mexico, Belize, Guatemala, Honduras, El Salvador, Nicaragua, Costa Rica, Panama. Mexico deliberately overlaps North America. |\n| south_america | 1506 | 3/25 | All SOUTH_AMERICA records or records from Argentina, Bolivia, Brazil, Chile, Colombia, Ecuador, Falklands, French Guiana, Guyana, Paraguay, Peru, Suriname, Uruguay, Venezuela, Costa Rica or Panama. Costa Rica and Panama deliberately overlap Central America. |\n| caribbean | 876 | 3/25 | Caribbean islands and territories, Bahamas, Bermuda, Belize and the Guianas (Guyana, Suriname, French Guiana). Does not include every mainland country with a Caribbean coast. |\n| south_asia | 1552 | 3/25 | Afghanistan, Bangladesh, Bhutan, India, Maldives, Nepal, Pakistan, Sri Lanka, Myanmar and Iran; deliberately broad western/eastern overlap. |\n| asia | 4443 | 3/25 | All ASIA records plus all records from the listed Asian countries and territories, including Turkey, Georgia, Armenia and Azerbaijan in full. Russian records require continent ASIA; European or unassigned Russian records are excluded. Cyprus is excluded even when its continent is ASIA. |\n| japan | 697 | 3/25 | All records assigned countryCode JP, including islands. |\n| africa | 924 | 3/25 | All AFRICA records plus the listed African countries and island territories. AFRICA-labelled records from transcontinental/overseas countries remain included. |\n| north_africa | 236 | 3/25 | Algeria, Egypt, Libya, Morocco, Tunisia, Western Sahara, Sudan and Mauritania. Sudan and Mauritania deliberately overlap the broad sub-Saharan preset. |\n| subsaharan_africa | 796 | 3/25 | Broad African selection excluding Algeria, Egypt, Libya, Morocco, Tunisia and Western Sahara. Includes Sudan, Mauritania, Mali, Niger, Chad, the Horn, Madagascar and island territories; this is not a Sahara boundary polygon. |\n| madagascar | 107 | 3/25 | All records assigned countryCode MG. Species recorded in Madagascar, not only endemic species; neighbouring island countries/territories are excluded. |\n| mediterranean | 2680 | 3/25 | Whole Mediterranean coastal countries/territories plus Portugal, Andorra, San Marino, Vatican City, North Macedonia, Bulgaria, Serbia and Jordan. Includes inland and overseas records of selected countries, not only Mediterranean climate zones. |\n| arctic | 1548 | 3/25 | Records at latitude 60°N or farther north, across all countries, including exactly 60°. Missing, malformed and out-of-range latitudes are excluded. A broad northern/subarctic scope, not the Arctic Circle boundary; no country or state-name proxy is used. |\n| oceania | 2273 | 3/25 | All OCEANIA records plus Australia, New Zealand, Papua New Guinea and the listed Pacific countries/territories. Australia and Tasmania intentionally overlap. |\n| new_zealand | 425 | 3/25 | All records assigned countryCode NZ, including islands recorded under NZ. Separately coded Cook Islands, Niue and Tokelau remain in the other-Oceania preset. |\n| oceania_excluding_australia_nz | 352 | 3/25 | The Oceania metadata selection with all AU and NZ records excluded, even when continent is OCEANIA. Species shared with Australia or New Zealand remain eligible if they qualify from records elsewhere in Oceania; this is not subtraction of their species lists. |\n| southeast_asia | 1672 | 3/25 | Brunei, Cambodia, Indonesia, Laos, Malaysia, Myanmar, Philippines, Singapore, Thailand, Timor-Leste, Vietnam and Papua New Guinea; whole-island-region overlap with Oceania is intentional. |\n| east_asia | 3430 | 3/25 | China, Hong Kong, Macao, Taiwan, Japan, North Korea, South Korea, Mongolia and Russian records assigned continent ASIA. This includes all Asian Russia, not only the Russian Far East; European or unassigned Russian records are excluded. |\n| middle_east | 846 | 3/25 | Turkey, Cyprus, Syria, Lebanon, Israel, Palestine, Jordan, Iraq, Iran, Kuwait, Saudi Arabia, Bahrain, Qatar, UAE, Oman, Yemen, Egypt, Armenia, Azerbaijan, Georgia, Afghanistan and Pakistan. Deliberate overlap with Mediterranean, Africa and South Asia. |\n\nExact filters: PRESET_DEFINITIONS.toml. `full` includes all 12,632 model species.\n", + "PRESET_DEFINITIONS.toml": "schema_version = 2\nqualification_status = \"selected for MAMBO_v3; metadata row-count policy\"\nminimum_regional_rows = 3\nminimum_global_rows = 25\n# Geographic predicates are OR-ed; state_province/excluded_countries then constrain that union.\n# Counts include all metadata splits, without additional deduplication.\n\n[presets.europe]\nminimum_regional_rows = 26\nminimum_global_rows = 0\nlabel = \"Europe (legacy)\"\ncontinents = [\"EUROPE\"]\nscope = \"Records assigned EUROPE by the metadata, including European-labelled portions of transcontinental countries.\"\n\n[presets.north_europe]\nminimum_regional_rows = 26\nminimum_global_rows = 0\nlabel = \"Northern Europe (legacy)\"\ncountries = [\"DE\", \"DK\", \"EE\", \"FI\", \"LT\", \"LV\", \"NL\", \"NO\", \"PL\", \"SE\"]\nscope = \"Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden (Ireland, Iceland, Åland, Faroe Islands, Guernsey, Isle of Man, Jersey, Svalbard/Jan Mayen: ambiguous historical inclusion; adding any or all leaves the species list unchanged).\"\n\n[presets.europe_v3]\nlabel = \"Europe (updated)\"\ncontinents = [\"EUROPE\"]\nscope = \"Same EUROPE metadata filter as legacy europe, including European-labelled portions of transcontinental countries; updated occurrence thresholds only.\"\n\n[presets.north_europe_v3]\nlabel = \"Northern Europe (updated)\"\ncountries = [\"DE\", \"DK\", \"EE\", \"FI\", \"LT\", \"LV\", \"NL\", \"NO\", \"PL\", \"SE\"]\nscope = \"Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden. Same explicit country filter as reconstructed legacy north_europe; updated occurrence thresholds only. The UK and historically ambiguous additions are not included in this definition.\"\n\n[presets.australia]\nlabel = \"Australia including Tasmania\"\ncountries = [\"AU\"]\nscope = \"All Australian records, including Tasmania and other territories recorded under AU; not all Oceania.\"\n\n[presets.tasmania]\nlabel = \"Tasmania only\"\ncountries = [\"AU\"]\nstate_province = [\"Tasmania\"]\nscope = \"Australian records explicitly assigned stateProvince Tasmania. Species recorded there, not only endemic species; blank/other state values are excluded.\"\n\n[presets.north_america]\nlabel = \"North America\"\ncountries = [\"CA\", \"US\", \"MX\", \"GL\", \"BM\", \"PM\"]\nscope = \"Canada, United States, Mexico, Greenland, Bermuda, Saint Pierre and Miquelon. Whole countries, including US records outside the continental mainland.\"\n\n[presets.central_america]\nlabel = \"Central America\"\ncountries = [\"MX\", \"BZ\", \"GT\", \"HN\", \"SV\", \"NI\", \"CR\", \"PA\"]\nscope = \"Mexico, Belize, Guatemala, Honduras, El Salvador, Nicaragua, Costa Rica, Panama. Mexico deliberately overlaps North America.\"\n\n[presets.south_america]\nlabel = \"South America\"\ncontinents = [\"SOUTH_AMERICA\"]\ncountries = [\"AR\", \"BO\", \"BR\", \"CL\", \"CO\", \"EC\", \"FK\", \"GF\", \"GY\", \"PY\", \"PE\", \"SR\", \"UY\", \"VE\", \"CR\", \"PA\"]\nscope = \"All SOUTH_AMERICA records or records from Argentina, Bolivia, Brazil, Chile, Colombia, Ecuador, Falklands, French Guiana, Guyana, Paraguay, Peru, Suriname, Uruguay, Venezuela, Costa Rica or Panama. Costa Rica and Panama deliberately overlap Central America.\"\n\n[presets.caribbean]\nlabel = \"Caribbean\"\ncountries = [\"AG\", \"AI\", \"AW\", \"BB\", \"BL\", \"BQ\", \"BS\", \"CU\", \"CW\", \"DM\", \"DO\", \"GD\", \"GP\", \"HT\", \"JM\", \"KN\", \"KY\", \"LC\", \"MF\", \"MQ\", \"MS\", \"PR\", \"SX\", \"TC\", \"TT\", \"VC\", \"VG\", \"VI\", \"BM\", \"BZ\", \"GY\", \"SR\", \"GF\"]\nscope = \"Caribbean islands and territories, Bahamas, Bermuda, Belize and the Guianas (Guyana, Suriname, French Guiana). Does not include every mainland country with a Caribbean coast.\"\n\n[presets.south_asia]\nlabel = \"South Asia\"\ncountries = [\"AF\", \"BD\", \"BT\", \"IN\", \"MV\", \"NP\", \"PK\", \"LK\", \"MM\", \"IR\"]\nscope = \"Afghanistan, Bangladesh, Bhutan, India, Maldives, Nepal, Pakistan, Sri Lanka, Myanmar and Iran; deliberately broad western/eastern overlap.\"\n\n[presets.asia]\nlabel = \"Asia\"\ncontinents = [\"ASIA\"]\ncountries = [\"AF\", \"AM\", \"AZ\", \"BH\", \"BD\", \"BT\", \"BN\", \"KH\", \"CN\", \"GE\", \"HK\", \"IN\", \"ID\", \"IR\", \"IQ\", \"IL\", \"JP\", \"JO\", \"KZ\", \"KP\", \"KR\", \"KW\", \"KG\", \"LA\", \"LB\", \"MO\", \"MY\", \"MV\", \"MN\", \"MM\", \"NP\", \"OM\", \"PK\", \"PS\", \"PH\", \"QA\", \"RU\", \"SA\", \"SG\", \"LK\", \"SY\", \"TW\", \"TJ\", \"TH\", \"TL\", \"TR\", \"TM\", \"AE\", \"UZ\", \"VN\", \"YE\"]\nexcluded_countries = [\"CY\"]\ncountry_continent_restrictions = { RU = [\"ASIA\"] }\nscope = \"All ASIA records plus all records from the listed Asian countries and territories, including Turkey, Georgia, Armenia and Azerbaijan in full. Russian records require continent ASIA; European or unassigned Russian records are excluded. Cyprus is excluded even when its continent is ASIA.\"\n\n[presets.japan]\nlabel = \"Japan\"\ncountries = [\"JP\"]\nscope = \"All records assigned countryCode JP, including islands.\"\n\n[presets.africa]\nlabel = \"Africa\"\ncontinents = [\"AFRICA\"]\ncountries = [\"DZ\", \"AO\", \"BJ\", \"BW\", \"BF\", \"BI\", \"CV\", \"CM\", \"CF\", \"TD\", \"KM\", \"CG\", \"CD\", \"CI\", \"DJ\", \"EG\", \"GQ\", \"ER\", \"SZ\", \"ET\", \"GA\", \"GM\", \"GH\", \"GN\", \"GW\", \"KE\", \"LS\", \"LR\", \"LY\", \"MG\", \"MW\", \"ML\", \"MR\", \"MU\", \"YT\", \"MA\", \"MZ\", \"NA\", \"NE\", \"NG\", \"RE\", \"RW\", \"SH\", \"ST\", \"SN\", \"SC\", \"SL\", \"SO\", \"ZA\", \"SS\", \"SD\", \"TZ\", \"TG\", \"TN\", \"UG\", \"EH\", \"ZM\", \"ZW\"]\nscope = \"All AFRICA records plus the listed African countries and island territories. AFRICA-labelled records from transcontinental/overseas countries remain included.\"\n\n[presets.north_africa]\nlabel = \"Northern Africa (broad)\"\ncountries = [\"DZ\", \"EG\", \"LY\", \"MA\", \"TN\", \"EH\", \"SD\", \"MR\"]\nscope = \"Algeria, Egypt, Libya, Morocco, Tunisia, Western Sahara, Sudan and Mauritania. Sudan and Mauritania deliberately overlap the broad sub-Saharan preset.\"\n\n[presets.subsaharan_africa]\nlabel = \"Sub-Saharan Africa (broad)\"\ncontinents = [\"AFRICA\"]\ncountries = [\"AO\", \"BJ\", \"BW\", \"BF\", \"BI\", \"CV\", \"CM\", \"CF\", \"TD\", \"KM\", \"CG\", \"CD\", \"CI\", \"DJ\", \"GQ\", \"ER\", \"SZ\", \"ET\", \"GA\", \"GM\", \"GH\", \"GN\", \"GW\", \"KE\", \"LS\", \"LR\", \"MG\", \"MW\", \"ML\", \"MR\", \"MU\", \"YT\", \"MZ\", \"NA\", \"NE\", \"NG\", \"RE\", \"RW\", \"SH\", \"ST\", \"SN\", \"SC\", \"SL\", \"SO\", \"ZA\", \"SS\", \"SD\", \"TZ\", \"TG\", \"UG\", \"ZM\", \"ZW\"]\nexcluded_countries = [\"DZ\", \"EG\", \"LY\", \"MA\", \"TN\", \"EH\"]\nscope = \"Broad African selection excluding Algeria, Egypt, Libya, Morocco, Tunisia and Western Sahara. Includes Sudan, Mauritania, Mali, Niger, Chad, the Horn, Madagascar and island territories; this is not a Sahara boundary polygon.\"\n\n[presets.madagascar]\nlabel = \"Madagascar only\"\ncountries = [\"MG\"]\nscope = \"All records assigned countryCode MG. Species recorded in Madagascar, not only endemic species; neighbouring island countries/territories are excluded.\"\n\n[presets.mediterranean]\nlabel = \"Mediterranean (broad)\"\ncountries = [\"AL\", \"DZ\", \"BA\", \"HR\", \"CY\", \"EG\", \"FR\", \"GR\", \"IL\", \"IT\", \"LB\", \"LY\", \"MT\", \"MC\", \"ME\", \"MA\", \"PS\", \"SI\", \"ES\", \"SY\", \"TN\", \"TR\", \"PT\", \"GI\", \"AD\", \"SM\", \"VA\", \"MK\", \"BG\", \"RS\", \"JO\"]\nscope = \"Whole Mediterranean coastal countries/territories plus Portugal, Andorra, San Marino, Vatican City, North Macedonia, Bulgaria, Serbia and Jordan. Includes inland and overseas records of selected countries, not only Mediterranean climate zones.\"\n\n[presets.arctic]\nlabel = \"Arctic / north of 60°N\"\nminimum_latitude = 60\nscope = \"Records at latitude 60°N or farther north, across all countries, including exactly 60°. Missing, malformed and out-of-range latitudes are excluded. A broad northern/subarctic scope, not the Arctic Circle boundary; no country or state-name proxy is used.\"\n\n[presets.oceania]\nlabel = \"Oceania\"\ncontinents = [\"OCEANIA\"]\ncountries = [\"AU\", \"NZ\", \"PG\", \"FJ\", \"SB\", \"VU\", \"NC\", \"PF\", \"WS\", \"AS\", \"TO\", \"TV\", \"KI\", \"NR\", \"FM\", \"MH\", \"PW\", \"GU\", \"MP\", \"CK\", \"NU\", \"TK\", \"WF\", \"PN\", \"NF\"]\nscope = \"All OCEANIA records plus Australia, New Zealand, Papua New Guinea and the listed Pacific countries/territories. Australia and Tasmania intentionally overlap.\"\n\n[presets.new_zealand]\nlabel = \"New Zealand\"\ncountries = [\"NZ\"]\nscope = \"All records assigned countryCode NZ, including islands recorded under NZ. Separately coded Cook Islands, Niue and Tokelau remain in the other-Oceania preset.\"\n\n[presets.oceania_excluding_australia_nz]\nlabel = \"Oceania excluding Australia and New Zealand\"\ncontinents = [\"OCEANIA\"]\ncountries = [\"AU\", \"NZ\", \"PG\", \"FJ\", \"SB\", \"VU\", \"NC\", \"PF\", \"WS\", \"AS\", \"TO\", \"TV\", \"KI\", \"NR\", \"FM\", \"MH\", \"PW\", \"GU\", \"MP\", \"CK\", \"NU\", \"TK\", \"WF\", \"PN\", \"NF\"]\nexcluded_countries = [\"AU\", \"NZ\"]\nscope = \"The Oceania metadata selection with all AU and NZ records excluded, even when continent is OCEANIA. Species shared with Australia or New Zealand remain eligible if they qualify from records elsewhere in Oceania; this is not subtraction of their species lists.\"\n\n[presets.southeast_asia]\nlabel = \"Southeast Asia\"\ncountries = [\"BN\", \"KH\", \"ID\", \"LA\", \"MY\", \"MM\", \"PH\", \"SG\", \"TH\", \"TL\", \"VN\", \"PG\"]\nscope = \"Brunei, Cambodia, Indonesia, Laos, Malaysia, Myanmar, Philippines, Singapore, Thailand, Timor-Leste, Vietnam and Papua New Guinea; whole-island-region overlap with Oceania is intentional.\"\n\n[presets.east_asia]\nlabel = \"East Asia\"\ncountries = [\"CN\", \"HK\", \"MO\", \"TW\", \"JP\", \"KP\", \"KR\", \"MN\", \"RU\"]\ncountry_continent_restrictions = { RU = [\"ASIA\"] }\nscope = \"China, Hong Kong, Macao, Taiwan, Japan, North Korea, South Korea, Mongolia and Russian records assigned continent ASIA. This includes all Asian Russia, not only the Russian Far East; European or unassigned Russian records are excluded.\"\n\n[presets.middle_east]\nlabel = \"Middle East\"\ncountries = [\"TR\", \"CY\", \"SY\", \"LB\", \"IL\", \"PS\", \"JO\", \"IQ\", \"IR\", \"KW\", \"SA\", \"BH\", \"QA\", \"AE\", \"OM\", \"YE\", \"EG\", \"AM\", \"AZ\", \"GE\", \"AF\", \"PK\"]\nscope = \"Turkey, Cyprus, Syria, Lebanon, Israel, Palestine, Jordan, Iraq, Iran, Kuwait, Saudi Arabia, Bahrain, Qatar, UAE, Oman, Yemen, Egypt, Armenia, Azerbaijan, Georgia, Afghanistan and Pakistan. Deliberate overlap with Mediterranean, Africa and South Asia.\"\n", + "PRESET_UPDATES.toml": "schema_version = 1\nsource_sha256 = \"094afa30bab25daad6583d33055bf7c61bcbade2f7f3c5e212d6b16fbf4429fe\"\n\n[updates.europe_v3]\nlegacy = \"europe\"\nadded = [\"1830284\", \"1831458\", \"1797344\", \"8355390\", \"1808348\", \"4532549\", \"1872873\", \"1873890\", \"1878370\", \"1736499\", \"1741747\", \"10442031\", \"1926550\", \"1926722\", \"1929402\", \"1931561\", \"1933647\", \"4535280\", \"1920247\", \"5805036\", \"5137908\", \"1960484\", \"1967324\", \"5146894\", \"1982533\", \"1986623\", \"4524223\", \"6133619\", \"7657419\", \"4524998\", \"5149664\", \"1945589\", \"5977247\", \"5142042\", \"1771997\", \"1772977\", \"1779633\", \"1784349\", \"1787438\", \"9803522\", \"1894164\", \"4535630\", \"5128353\", \"9804158\", \"4299370\", \"1905396\", \"1911633\", \"4535596\", \"4299565\", \"5134693\", \"1918627\", \"1918688\", \"4535539\", \"5133088\", \"5120577\", \"1843602\", \"5127521\", \"1890346\", \"1890487\", \"6133232\", \"9137965\", \"5127656\", \"4526094\", \"1858930\", \"1860026\", \"1866556\", \"5124716\", \"1862692\", \"8254441\", \"1833500\", \"4534796\", \"1803108\"]\nremoved = []\n\n[updates.north_europe_v3]\nlegacy = \"north_europe\"\nadded = [\"1732521\", \"1845607\", \"1847061\", \"4528547\", \"1848378\", \"1850497\", \"1850570\", \"4528529\", \"1852159\", \"7908344\", \"1777631\", \"1797374\", \"8355390\", \"4532351\", \"1803163\", \"1803824\", \"1816881\", \"8326103\", \"7657803\", \"4532565\", \"8148822\", \"8165185\", \"6097254\", \"5113030\", \"4522890\", \"4522896\", \"1860765\", \"1852787\", \"5125104\", \"1872848\", \"1872904\", \"1873215\", \"1873890\", \"1874295\", \"1875376\", \"1875429\", \"1875682\", \"1876357\", \"1876512\", \"1877038\", \"1878471\", \"1890065\", \"4525803\", \"5102642\", \"1738373\", \"1739471\", \"1740155\", \"1740762\", \"10838422\", \"1741747\", \"5103613\", \"1744526\", \"5103227\", \"7387466\", \"1926054\", \"5140214\", \"5140244\", \"7664111\", \"1933583\", \"1920237\", \"5137708\", \"1748922\", \"1750131\", \"1750166\", \"1955694\", \"1957706\", \"1957746\", \"1961037\", \"1962972\", \"1964437\", \"1965197\", \"1965640\", \"1967006\", \"1967265\", \"1967452\", \"1968990\", \"1969339\", \"5144782\", \"5145729\", \"8014296\", \"9627567\", \"1971847\", \"5146599\", \"5146842\", \"5147441\", \"7973517\", \"8414310\", \"1977967\", \"10712554\", \"4524902\", \"1982770\", \"1982867\", \"1986623\", \"1987737\", \"1988064\", \"1988642\", \"7555991\", \"1990582\", \"7657419\", \"9563355\", \"4524914\", \"4524955\", \"9220953\", \"5149569\", \"8851663\", \"5149717\", \"5149784\", \"1949929\", \"5142394\", \"7683096\", \"1869467\", \"1759097\", \"5109670\", \"1764673\", \"8352161\", \"1766718\", \"1766721\", \"1767511\", \"1767608\", \"8045644\", \"1768308\", \"1769543\", \"1770353\", \"1770416\", \"1770530\", \"1770573\", \"8393221\", \"1771997\", \"1772977\", \"1773062\", \"1773484\", \"1774347\", \"1775172\", \"5110593\", \"1776067\", \"5772222\", \"1780954\", \"1782319\", \"1782579\", \"1782872\", \"5112160\", \"1785887\", \"1786360\", \"1786515\", \"1786619\", \"1787213\", \"1787631\", \"4534086\", \"4533882\", \"4534162\", \"1790671\", \"1792431\", \"1794599\", \"1795068\", \"1774283\", \"4534681\", \"4534685\", \"8108800\", \"1770773\", \"1771169\", \"1773901\", \"1773904\", \"4532203\", \"4532206\", \"1894164\", \"5882039\", \"6231906\", \"9804158\", \"1897852\", \"1911093\", \"4299565\", \"5134569\", \"5134693\", \"5134837\", \"7700512\", \"8047165\", \"8167638\", \"8233062\", \"1918669\", \"8035998\", \"8001799\", \"1902143\", \"1941864\", \"5120577\", \"1731263\", \"4525641\", \"1878798\", \"1879408\", \"1881126\", \"9819403\", \"1881208\", \"1883067\", \"1883634\", \"1885937\", \"1886951\", \"1888484\", \"1890540\", \"1890679\", \"1890701\", \"1890823\", \"1890898\", \"1891013\", \"1891167\", \"1891453\", \"1884240\", \"1884365\", \"1854824\", \"4526094\", \"1841460\", \"1841989\", \"1861510\", \"1862765\", \"1860108\", \"5119506\", \"1754183\", \"8254441\", \"1857068\", \"1857143\", \"1858100\", \"1833500\", \"1834589\", \"5114311\"]\nremoved = []\n", + "README.md": "# MAMBO deployment — release candidate\n\nIdentify moths and butterflies from images, with species, genus and family\npredictions. V3 adds a standalone ONNX option alongside PyTorch: **no training\npackage or GPU is needed for ONNX/CPU**. Both backends use the same API, regional\nlists and output format. The comparisons below show quality and speed against V2,\nincluding CPU, laptop GPU and server GPU measurements.\n\n**Weights: [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/)\n(non-commercial, share-alike). Adapter code: MIT.**\n[Model notices](https://github.com/asgersvenning/mini_trainer/blob/MAMBO_v3/dev/releases/mambo_v3/NOTICES.md) explain attribution and scope.\n\nThis candidate is not yet published; the examples use the supplied release wheels.\nModel files download automatically from public ERDA storage on first use and are\nverified and cached. Reuse one predictor across calls.\n\n## Quick start\n\nCreate an environment, or use your application's existing environment. Python 3.12+\nis required. Install ONNX/CPU to start without a CUDA setup:\n\n```sh\nuv venv --python 3.13 .venv\nsource .venv/bin/activate # Windows PowerShell: .venv\\Scripts\\Activate.ps1\nuv pip install './mambo_v3-0.3.0-py3-none-any.whl[onnx]'\n```\n\n**Python** — supply images directly:\n\n```python\nfrom mambo_deploy import Predictor\n\npredictor = Predictor() # Global species list, ONNX, CPU\nresult = predictor.predict([\"moth.jpg\", \"butterfly.jpg\"])\nprint(result[0].label) # (species_id, genus_id, family_id)\nprint(result[0].confidence) # confidence for each of those ranks\nrecords = result.to_dict() # list of JSON-serializable records for your application\n```\n\n**CLI** — the same defaults, for files or a directory:\n\n```sh\nmambo_predict -i ./images -o ./output --name predictions\n```\n\nThis creates `output/predictions/predictions.json` and `mini_metric.csv`;\n`--embeddings` also writes `embeddings.npy`. Choose a new output name for each run.\nFor a one-off command without installing into your application environment, replace\n`mambo_predict` with\n`uvx --from './mambo_v3-0.3.0-py3-none-any.whl[onnx]' mambo_predict`.\n\n| Interface | Inputs | Outputs |\n|---|---|---|\n| Python `predict(images)` | A path, PIL image, CHW array/tensor, or collection of these; BCHW batches also work. Original pixels: uint8 or floats in [0,1]. | One result per image, in input order. `label`, `confidence`, `index` have species/genus/family order; labels are GBIF taxon IDs as strings. `to_dict()` produces ordinary Python records; `save(path)` writes JSON. |\n| Python `predict_with_embeddings(images)` | Same inputs. | `(result, vectors)`; vectors are a float32 NumPy array `[N,1280]` with unit-length rows. |\n| CLI `-i` | One or more image files or directories, searched recursively. | JSON contains `results`, `metadata` and `config`; each result has `label`, `confidence`, `index`. CSV has one row per image/rank for evaluation. |\n\nFor an RGB HWC NumPy image, pass `image.transpose(2, 0, 1)`; convert OpenCV BGR to\nRGB first. Do not resize or normalize images yourself. Alpha is discarded and EXIF\norientation is not applied. Predictions at each rank are independent, so the three\nIDs need not form one ancestral path. CSV truth labels are inferred from parent\nfolder names; arbitrary image folders do not supply evaluation ground truth.\n\n## Choose the configuration that matters\n\n**Start with the defaults; select a regional preset when your location is known.** ONNX/CPU is the\nsimplest dependency footprint and a useful starting point for CPU-only and edge\napplications. For NVIDIA GPU throughput, use PyTorch if it fits your environment,\nor ONNX/CUDA to keep the training package out of your application.\n[Runtime installation and offline use](https://github.com/asgersvenning/mini_trainer/blob/MAMBO_v3/docs/mambo-integration.md) covers these\nalternatives. Changing runtime does not change the input/output contract.\n\n**Enable `tta=True` / `--tta` for monitoring images when the quality gain below is\nworth roughly 3× lower throughput.** Keep the default recipe. Its benefit is\nimage-domain dependent; the general-photograph comparison below provides context.\n\nKeep `precision=\"auto\"`. Increase `batch_size` only when processing enough images\nto benefit; reduce it if memory is tight. Adjust CPU workers only if needed to meet\nyour application's throughput or CPU budget. Request embeddings or extra candidates\nonly when your workflow uses them. No server, dataset metadata or training setup is\nrequired.\n\nPass API settings to `Predictor(...)`, except the prediction methods shown below.\nCLI flags apply to `mambo_predict`.\n\n| Python API | CLI | Default | Role / main trade-off |\n|---|---|---|---|\n| `model=`, `class_list=` | `--model`, `--class-list` | `full` / no override | Eligible species; affects predictions and confidence. |\n| `backend=`, `device=` | `--backend`, `--device` | `onnx`, `cpu` | Runtime and hardware: `onnx` or `torch`; `cpu` or `cuda:0`. |\n| `tta=True` | `--tta` | Off | Quality versus throughput; enabling uses the recommended three-view recipe. |\n| `batch_size=` | `--batch-size` | `8` | Images per model call: throughput versus memory. |\n| `threads=` | `--threads` | `2` | ONNX CPU threads and default image-preparation workers; does not set PyTorch's model threads. |\n| `preprocess_workers=` | `--preprocess-workers` | Follows `threads` | Image-preparation CPU allocation. |\n| `precision=` | `--precision` | `auto` | Runtime-selected compute precision; normally leave unchanged. |\n| `predict_with_embeddings(images)` | `--embeddings` | Off | Vectors for similarity/search or downstream features. |\n| `predict(images, topk=k)` | `--topk k` | `1` | Candidates per rank; Python returns a list of candidates per image when `k > 1`. |\n| CLI only | `--threshold` | `0` | Acceptance flag in the evaluation CSV; JSON predictions stay unfiltered. |\n\n### Geographic scope\n\nUse `predictor.available_presets()` to list choices, or read the\n[preset catalogue](https://github.com/asgersvenning/mini_trainer/blob/MAMBO_v3/docs/model-presets.md) for their exact scope and construction.\nPresets include species that **can occur** in a region, including introduced\nspecies; they are neither native-distribution maps nor exhaustive checklists.\nUse `model=\"full\"` if a regional restriction is inappropriate.\n\n`europe` and `north_europe` preserve the V2 lists. Updated `_v3` lists are also\navailable; legacy `north_europe` performed better on Flemming and is recommended\nfor comparable northern-European use. A custom `class_list=[\"GBIF_SPECIES_ID\", ...]`\nor UTF-8 file with one ID per line overrides the preset (`--class-list species.txt`\nin the CLI). Unknown IDs and empty lists fail; duplicates are removed.\n\n### Integrating with V2 applications\n\nThe `mini_trainer.deploy.Predictor` compatibility entry point retains native/CUDA\ndefaults, callable prediction, `class_mask` and native result containers. It needs\nboth release wheels. New integrations can use the smaller `mambo_deploy` interface\nabove, with CPU results independent of backend. Both download model assets automatically.\n\nRetain the legacy regional preset for comparison, and match species by taxon ID,\nnot numeric index. The V3 vocabulary, scores and embedding width can differ from V2;\nexisting thresholds and stored embeddings are not interchangeable.\n[Migration details](https://github.com/asgersvenning/mini_trainer/blob/MAMBO_v3/docs/mambo-integration.md#moving-from-v2) describe the remaining\ncompatibility boundaries.\n\n### Large image collections\n\nUse streaming for a large collection of paths, consuming results as they arrive:\n\n```python\nfrom contextlib import closing\n\nwith closing(predictor.predict_stream(image_paths)) as batches:\n for result in batches:\n records = result.to_dict()\n # Write records to your database, file or downstream service here.\n```\n\nInput order is preserved. Add `embeddings=True` to receive `(result, vectors)` pairs.\nFor in-memory inputs, split large collections into smaller `predict()` requests;\nthat method retains results for the whole request. The CLI writes results batch by batch. `batch_size` limits\nmodel calls, not total request memory. [Streaming controls](https://github.com/asgersvenning/mini_trainer/blob/MAMBO_v3/docs/mambo-integration.md#streaming-controls)\nare available if the defaults do not fit your workload.\n\n## Changes from MAMBO V2\n\n- Global (`full`) is now the default scope. Select `europe` or `north_europe` to\n retain those geographic restrictions; the legacy lists remain available.\n- Install the model-generation package **`mambo-v3`**; its Python import remains\n `mambo_deploy`. Maintenance releases of this package retain the V3 trained model.\n Pin the package version for reproducible application builds. Use a separate\n environment for V2 or an older deployment candidate.\n- `mambo_predict` is owned by the deployment package alone and defaults to ONNX/CPU.\n Existing native CLI workflows must specify `--backend torch --device cuda:0`.\n The Python `mini_trainer.deploy.Predictor` facade retains native/CUDA defaults.\n- V3 uses EfficientNetV2-S, adds ONNX, expanded regional presets, optional TTA and\n streaming output. Raw inputs and result formats are documented above; old\n preprocessed tensors, numeric class positions and embeddings need migration.\n\n### Beyond Python\n\nThe ONNX assets also provide a path to local browser inference with\n[ONNX Runtime Web](https://onnxruntime.ai/docs/tutorials/web/deploy.html), where\nimages can be processed on the user's device. Existing browser work is recorded\nin the [release roadmap](https://github.com/asgersvenning/mini_trainer/blob/MAMBO_v3/docs/ucloud-model-release-roadmap.md#located-production-artifacts-and-existing-browser-work).\nThis Python release does not ship a browser SDK: preprocessing, external weights\nand browser/runtime support still need integration. The same local API or CLI can\nbe embedded in desktop applications, batch jobs and services without a hosted\nprediction service.\n\n## Release comparison\n\nThese results help choose TTA and runtime; they do not establish accuracy in every\nregion. All models use legacy northern Europe on the same 52,788 Flemming reporting\nimages, including out-of-vocabulary truth. `mini_metrics` selects calibrated\nthresholds per pipeline/rank on 5,852 separate images. Recipe exploration used\nFlemming too, so this is descriptive evidence, not independent validation.\n\nThe quality figure compares **unthresholded and calibrated predictions**, with\nfull-support and support >5 macro metrics alongside acceptance coverage. TTA uses\n`rotation30_pad25_3`; its quality gain comes at the throughput cost shown below.\n\n![Species, genus and family quality: full and truncated support, both confidence settings, and coverage](https://raw.githubusercontent.com/asgersvenning/mini_trainer/MAMBO_v3/docs/assets/mambo-promoted-quality.svg)\n\nSupport >5 requires more than five truth instances and accepted predictions in\nevery compared pipeline. Truth classes outside that average account for\n15.30% / 0.42% / 0.01% of images at species/genus/family without thresholds,\nand 18.95% / 11.21% / 0.03% after calibration. No evaluation rows are discarded;\nthe averaging class sets differ between confidence settings. Full-support metrics\nretain rare and predicted-only classes, which can change model rankings.\n\nMeasured **images/second**, end to end, on an i7-12800H / RTX 3080 Ti Laptop with\nfour preparation/runtime threads. V3 uses automatic precision; compare on your own\nhardware before choosing a batch size. These laptop measurements predate the latest\npipeline improvements and remain a consumer-hardware baseline.\n\n![CPU and GPU throughput by batch size, including the new TTA default](https://raw.githubusercontent.com/asgersvenning/mini_trainer/MAMBO_v3/docs/assets/mambo-promoted-speed.svg)\n\nOn this laptop, ONNX is faster on CPU; native PyTorch benefits more from larger\nGPU batches. TTA improves quality but reduces throughput, so enable it according\nto your accuracy and processing-budget requirements.\n\nThe [complete evidence reference](https://github.com/asgersvenning/mini_trainer/blob/MAMBO_v3/docs/mambo-deployment-evidence.md) retains\nexact metric tables, calibrated thresholds, timing ranges and limitations.\n### Complementary in-domain and HPC results\n\nThe original global-lepi test split adds a comparison on general photographs using\nthe global vocabulary. It complements Flemming's deployment-relevant monitoring\ncrops; the image domains and class lists differ, so their absolute scores should\nnot be compared as a controlled domain-effect estimate. The same `mini_metrics`\ncalibration/support policy uses 568,939 reporting images and 63,974 separate\ncalibration images, with both confidence settings evaluated on the reporting split.\n\n![In-domain quality at all ranks, with calibration, support truncation and coverage](https://raw.githubusercontent.com/asgersvenning/mini_trainer/MAMBO_v3/docs/assets/mambo-indomain-quality.svg)\n\nV3 improves in-domain performance over V2. The Flemming-selected TTA recipe reduces\nin-domain performance, illustrating that its benefit depends on the input domain;\nthis does not override its benefit on the more deployment-relevant Flemming crops.\nSupport >5 changes the class average, not the evaluation rows. Truth classes outside\nthat average represent 1.70% / 0.34% / <0.01% of species/genus/family images without\nthresholds, and 1.88% / 0.38% / <0.01% after calibration. Thresholds and complete\nmetrics are in the [in-domain evidence](https://github.com/asgersvenning/mini_trainer/blob/MAMBO_v3/docs/mambo-indomain-evidence.md).\n\n![EPYC CPU and B200 request throughput, with updated B200 streaming measurements](https://raw.githubusercontent.com/asgersvenning/mini_trainer/MAMBO_v3/docs/assets/mambo-hpc-current-speed.svg)\n\nThe server comparison retains CPU, GPU request and GPU streaming throughput in\n**images/second**. B200 batch-256 values are updated: PyTorch reaches **1,976 images/s**\nand ONNX **997 images/s** when streaming, or **624 and 396** with TTA. CPU, V2 and\nsmaller-batch results retain their earlier measurements; new request points are\nshown separately rather than joined to older scaling curves. These are measured\napplication rates, not a promise of GPU saturation.\n\n[Timing details and provenance](https://github.com/asgersvenning/mini_trainer/blob/MAMBO_v3/docs/mambo-hpc-evidence.md) record measurement\nsettings, memory and repeat ranges. Keep the laptop comparison above when choosing\nfor consumer devices. ONNX's CPU advantage and independence from the training\npackage make it especially relevant when a GPU or the full PyTorch stack is not\nan option; PyTorch remains the faster GPU choice in these measurements.\n", + "classes.json": "{\n \"ranks\": [\n \"species\",\n \"genus\",\n \"family\"\n ],\n \"labels\": [\n [\n \"1837646\",\n \"12170988\",\n \"11871190\",\n \"1921992\",\n \"1921993\",\n \"1922015\",\n \"1922024\",\n \"5140603\",\n \"5140627\",\n \"1934331\",\n \"1934447\",\n \"1934570\",\n \"1934693\",\n \"1934715\",\n \"1934991\",\n \"1935078\",\n \"1935295\",\n \"1935301\",\n \"1935343\",\n \"1935346\",\n \"1935350\",\n \"1935614\",\n \"1935838\",\n \"1935849\",\n \"5140969\",\n \"5140980\",\n \"1936161\",\n \"1936233\",\n \"1936312\",\n \"1936378\",\n \"1936388\",\n \"1936391\",\n \"1936565\",\n \"1936566\",\n \"5141085\",\n \"1936649\",\n \"10132775\",\n \"10331171\",\n \"9620499\",\n \"10075196\",\n \"1868535\",\n \"10100176\",\n \"10517417\",\n \"1868575\",\n \"1992268\",\n \"1992277\",\n \"1992283\",\n \"1992301\",\n \"1992315\",\n \"1860621\",\n \"1860628\",\n \"4522795\",\n \"1860659\",\n \"1860664\",\n \"1860668\",\n \"1860671\",\n \"1860688\",\n \"1860709\",\n \"1860711\",\n \"4522933\",\n \"5123582\",\n \"1860736\",\n \"10648791\",\n \"1758114\",\n \"1758146\",\n \"6113873\",\n \"1732063\",\n \"1732072\",\n \"1732087\",\n \"1732114\",\n \"1732115\",\n \"5101556\",\n \"5101559\",\n \"1732416\",\n \"1732419\",\n \"1732452\",\n \"1732457\",\n \"1732508\",\n \"1732521\",\n \"1732525\",\n \"1732565\",\n \"10083877\",\n \"9840570\",\n \"9960252\",\n \"5101590\",\n \"1732660\",\n \"1732662\",\n \"1732680\",\n \"1732685\",\n \"1732697\",\n \"1732717\",\n \"1732763\",\n \"1732830\",\n \"1732842\",\n \"5101640\",\n \"1732901\",\n \"1732955\",\n \"10190647\",\n \"10341307\",\n \"10435406\",\n \"1732978\",\n \"1733154\",\n \"1733155\",\n \"1733243\",\n \"1733258\",\n \"1733394\",\n \"1733412\",\n \"1733484\",\n \"1733504\",\n \"1733507\",\n \"1733511\",\n \"1733525\",\n \"1733535\",\n \"4525266\",\n \"4525268\",\n \"4525270\",\n \"4525273\",\n \"1733620\",\n \"1733755\",\n \"5734897\",\n \"5101678\",\n \"5101717\",\n \"5101745\",\n \"5101763\",\n \"5101811\",\n \"5715280\",\n \"5715281\",\n \"5769191\",\n \"1734384\",\n \"1734453\",\n \"5102207\",\n \"5102242\",\n \"1734496\",\n \"1734519\",\n \"5102304\",\n \"5102324\",\n \"5102335\",\n \"5102365\",\n \"5102396\",\n \"1734690\",\n \"1734704\",\n \"1734794\",\n \"1734826\",\n \"10155026\",\n \"1734851\",\n \"5734891\",\n \"6113959\",\n \"10730270\",\n \"5102287\",\n \"5102300\",\n \"11529292\",\n \"1831861\",\n \"1831863\",\n \"1831890\",\n \"1831974\",\n \"1831999\",\n \"1832023\",\n \"1832143\",\n \"5734640\",\n \"11453841\",\n \"1832235\",\n \"1832248\",\n \"1832254\",\n \"5734645\",\n \"1832518\",\n \"1832533\",\n \"1832553\",\n \"1832569\",\n \"1832612\",\n \"1832649\",\n \"11505614\",\n \"1833475\",\n \"8825467\",\n \"4302388\",\n \"1845270\",\n \"1845271\",\n \"1845279\",\n \"1845314\",\n \"1845329\",\n \"1845335\",\n \"1845368\",\n \"1845385\",\n \"1845442\",\n \"1845448\",\n \"1845455\",\n \"1845502\",\n \"1845503\",\n \"1845513\",\n \"1845547\",\n \"1845548\",\n \"1845565\",\n \"1845574\",\n \"1845586\",\n \"1845604\",\n \"1845605\",\n \"1845607\",\n \"1845616\",\n \"4529566\",\n \"4528100\",\n \"1846313\",\n \"1846351\",\n \"1846374\",\n \"1846439\",\n \"5121847\",\n \"5121850\",\n \"1846604\",\n \"1846657\",\n \"1846715\",\n \"1846729\",\n \"1846849\",\n \"1846858\",\n \"1846860\",\n \"10785815\",\n \"11730078\",\n \"1846914\",\n \"1846916\",\n \"1846941\",\n \"1846945\",\n \"1846971\",\n \"1846992\",\n \"1847013\",\n \"1847059\",\n \"1847061\",\n \"1847062\",\n \"1847064\",\n \"1847066\",\n \"1847068\",\n \"1847097\",\n \"1847111\",\n \"1847149\",\n \"1847157\",\n \"1847225\",\n \"1847249\",\n \"1847260\",\n \"1847274\",\n \"1847308\",\n \"1847343\",\n \"1847392\",\n \"1847407\",\n \"1847426\",\n \"1847457\",\n \"1847484\",\n \"1847498\",\n \"4528547\",\n \"1847568\",\n \"1847572\",\n \"1847622\",\n \"1847639\",\n \"1847641\",\n \"9262981\",\n \"8559137\",\n \"1847919\",\n \"1847930\",\n \"1847944\",\n \"1847956\",\n \"10427568\",\n \"9546514\",\n \"1848114\",\n \"1848150\",\n \"1848202\",\n \"10450501\",\n \"1848219\",\n \"8797017\",\n \"9868978\",\n \"1848259\",\n \"1848272\",\n \"1848273\",\n \"1848274\",\n \"1848295\",\n \"1848312\",\n \"1848322\",\n \"1848325\",\n \"1848356\",\n \"1848378\",\n \"1848426\",\n \"4528539\",\n \"1848490\",\n \"1848505\",\n \"1848596\",\n \"1848610\",\n \"1848636\",\n \"1848639\",\n \"1848657\",\n \"1848669\",\n \"1848690\",\n \"1848713\",\n \"1848714\",\n \"1848717\",\n \"1848730\",\n \"1848741\",\n \"1848753\",\n \"1848864\",\n \"1848868\",\n \"1849007\",\n \"1849010\",\n \"1849104\",\n \"9973217\",\n \"5122013\",\n \"1849267\",\n \"1849273\",\n \"1849284\",\n \"1849294\",\n \"1849457\",\n \"1849470\",\n \"9007213\",\n \"1849477\",\n \"11052757\",\n \"11080751\",\n \"1849531\",\n \"1849539\",\n \"1849552\",\n \"1849630\",\n \"1849656\",\n \"1849856\",\n \"1849897\",\n \"1849924\",\n \"1850008\",\n \"1850042\",\n \"1850045\",\n \"1850076\",\n \"1850077\",\n \"1850106\",\n \"1850156\",\n \"1850184\",\n \"1850225\",\n \"1850238\",\n \"1850246\",\n \"11576787\",\n \"1850279\",\n \"1850302\",\n \"1850321\",\n \"1850335\",\n \"1850386\",\n \"1850394\",\n \"1850450\",\n \"1850497\",\n \"1850506\",\n \"4527903\",\n \"1850522\",\n \"1850533\",\n \"1850538\",\n \"1850570\",\n \"1850575\",\n \"1850585\",\n \"1850589\",\n \"1850597\",\n \"1850633\",\n \"1850640\",\n \"4528529\",\n \"1850673\",\n \"1850690\",\n \"1850722\",\n \"1850729\",\n \"1850764\",\n \"1850771\",\n \"1850773\",\n \"1850774\",\n \"1850781\",\n \"1850798\",\n \"1850868\",\n \"1850884\",\n \"1850908\",\n \"1850922\",\n \"1850923\",\n \"1850962\",\n \"1850971\",\n \"1851000\",\n \"1851002\",\n \"1851010\",\n \"1851011\",\n \"8986624\",\n \"1851039\",\n \"5122037\",\n \"5122062\",\n \"5122086\",\n \"5122113\",\n \"5122121\",\n \"5122131\",\n \"5806361\",\n \"1851203\",\n \"1851213\",\n \"1851220\",\n \"1851237\",\n \"1851243\",\n \"1851300\",\n \"11528968\",\n \"1851337\",\n \"1851347\",\n \"1851453\",\n \"1851462\",\n \"1851543\",\n \"1851555\",\n \"1851670\",\n \"1851714\",\n \"1851750\",\n \"5122206\",\n \"1851828\",\n \"1851845\",\n \"4527972\",\n \"1852150\",\n \"1852159\",\n \"1852165\",\n \"1852177\",\n \"1852292\",\n \"1852311\",\n \"1852320\",\n \"6133343\",\n \"1852382\",\n \"1852430\",\n \"9123440\",\n \"11287091\",\n \"4527957\",\n \"10023115\",\n \"10498365\",\n \"11706893\",\n \"1850463\",\n \"9977181\",\n \"1848212\",\n \"1848213\",\n \"1848920\",\n \"1849498\",\n \"11430021\",\n \"1829533\",\n \"1829588\",\n \"1829659\",\n \"1829612\",\n \"1829703\",\n \"1829776\",\n \"1829785\",\n \"1829799\",\n \"1829814\",\n \"1829823\",\n \"1829866\",\n \"1829974\",\n \"4705103\",\n \"8779506\",\n \"4525354\",\n \"10508467\",\n \"12031071\",\n \"4695719\",\n \"1828395\",\n \"1828400\",\n \"1828402\",\n \"8150089\",\n \"1828424\",\n \"1828426\",\n \"1828455\",\n \"1828456\",\n \"6196939\",\n \"1828471\",\n \"1828491\",\n \"1828540\",\n \"1828543\",\n \"1828544\",\n \"5119338\",\n \"1828637\",\n \"10707366\",\n \"10833593\",\n \"10882997\",\n \"5119346\",\n \"5119349\",\n \"5119350\",\n \"5119353\",\n \"5119354\",\n \"5119361\",\n \"10288636\",\n \"10639943\",\n \"1828826\",\n \"4695709\",\n \"1828976\",\n \"11642411\",\n \"1829021\",\n \"1829029\",\n \"6097236\",\n \"8871600\",\n \"9182336\",\n \"5769272\",\n \"7623903\",\n \"8912441\",\n \"10053809\",\n \"10176413\",\n \"10067382\",\n \"5879654\",\n \"7448174\",\n \"4525610\",\n \"1751852\",\n \"10835385\",\n \"10855556\",\n \"5125130\",\n \"1861395\",\n \"1868428\",\n \"1868527\",\n \"5734146\",\n \"1837706\",\n \"1834428\",\n \"4684910\",\n \"4686897\",\n \"4686905\",\n \"4686907\",\n \"4686913\",\n \"1835848\",\n \"1835862\",\n \"1835874\",\n \"1835886\",\n \"1835897\",\n \"1835908\",\n \"1835928\",\n \"1838084\",\n \"1838978\",\n \"4685802\",\n \"1839600\",\n \"1839604\",\n \"4685468\",\n \"4684220\",\n \"4685557\",\n \"4685946\",\n \"1835460\",\n \"1845793\",\n \"1845866\",\n \"1845952\",\n \"1845962\",\n \"1845965\",\n \"1845982\",\n \"1846035\",\n \"1846052\",\n \"9159662\",\n \"1846505\",\n \"10594478\",\n \"1834980\",\n \"8503184\",\n \"1834710\",\n \"1839094\",\n \"1839146\",\n \"1841261\",\n \"5119890\",\n \"1830812\",\n \"1830814\",\n \"1830838\",\n \"1830843\",\n \"1830122\",\n \"1830125\",\n \"1830131\",\n \"1830137\",\n \"1830144\",\n \"1830147\",\n \"1830152\",\n \"1830186\",\n \"1830191\",\n \"1830194\",\n \"1830202\",\n \"1830203\",\n \"1830207\",\n \"1830221\",\n \"1830229\",\n \"1830241\",\n \"1830243\",\n \"1830262\",\n \"1830266\",\n \"1830271\",\n \"1830284\",\n \"1830293\",\n \"4525476\",\n \"4525487\",\n \"9998920\",\n \"1831458\",\n \"1831473\",\n \"1831499\",\n \"1831508\",\n \"1831565\",\n \"1831631\",\n \"1831643\",\n \"1831655\",\n \"1831667\",\n \"4708342\",\n \"9379855\",\n \"5119868\",\n \"1839396\",\n \"8834672\",\n \"1839625\",\n \"1841296\",\n \"4528593\",\n \"8271010\",\n \"1853723\",\n \"5880147\",\n \"9734171\",\n \"10679326\",\n \"10746289\",\n \"11382064\",\n \"10698858\",\n \"11570545\",\n \"10701190\",\n \"11807833\",\n \"12199936\",\n \"11095591\",\n \"11418741\",\n \"11513018\",\n \"11571523\",\n \"12151997\",\n \"12160125\",\n \"10042504\",\n \"10094594\",\n \"10379915\",\n \"10531480\",\n \"10548275\",\n \"11919216\",\n \"9851221\",\n \"9985020\",\n \"12022449\",\n \"7908344\",\n \"12259113\",\n \"12208733\",\n \"12235234\",\n \"12217030\",\n \"5110390\",\n \"1758625\",\n \"1758860\",\n \"1758861\",\n \"1758866\",\n \"1759150\",\n \"1759775\",\n \"1760140\",\n \"6132868\",\n \"6132869\",\n \"1760201\",\n \"1760384\",\n \"1760385\",\n \"1760396\",\n \"1760397\",\n \"1760398\",\n \"1760400\",\n \"5108951\",\n \"1760927\",\n \"10889719\",\n \"1760970\",\n \"1761101\",\n \"1761102\",\n \"1761110\",\n \"1761111\",\n \"1761213\",\n \"1761353\",\n \"1761387\",\n \"9257793\",\n \"1761572\",\n \"1761573\",\n \"1761751\",\n \"1761752\",\n \"1761820\",\n \"1761838\",\n \"1762151\",\n \"5109196\",\n \"11562374\",\n \"1762219\",\n \"1762226\",\n \"1762286\",\n \"9553692\",\n \"1762298\",\n \"1762474\",\n \"8331687\",\n \"8379616\",\n \"9354496\",\n \"9546910\",\n \"1762849\",\n \"1762852\",\n \"10256550\",\n \"1762887\",\n \"1763156\",\n \"1763163\",\n \"1763184\",\n \"1763199\",\n \"1763223\",\n \"1763256\",\n \"1763589\",\n \"5109766\",\n \"1763650\",\n \"1763782\",\n \"1763812\",\n \"1763957\",\n \"1763976\",\n \"1763994\",\n \"1764021\",\n \"1764032\",\n \"1764043\",\n \"1764060\",\n \"5109782\",\n \"5109784\",\n \"5109786\",\n \"5109787\",\n \"5109788\",\n \"9278311\",\n \"1764525\",\n \"1764531\",\n \"1764640\",\n \"1764880\",\n \"1764886\",\n \"1765097\",\n \"1765182\",\n \"8028211\",\n \"1765653\",\n \"1765863\",\n \"1766260\",\n \"10099906\",\n \"10647358\",\n \"1766558\",\n \"1766560\",\n \"1766570\",\n \"1766584\",\n \"1766601\",\n \"1766612\",\n \"1766618\",\n \"3257809\",\n \"6116699\",\n \"5110044\",\n \"1766839\",\n \"1766845\",\n \"1766880\",\n \"1766888\",\n \"1767031\",\n \"1767044\",\n \"1767215\",\n \"1767307\",\n \"1767320\",\n \"1767499\",\n \"1767508\",\n \"9384861\",\n \"1767755\",\n \"1767758\",\n \"1767779\",\n \"1767780\",\n \"5110190\",\n \"11097510\",\n \"1767883\",\n \"1768283\",\n \"1768440\",\n \"5110232\",\n \"1768898\",\n \"1769000\",\n \"10340332\",\n \"10820762\",\n \"1769103\",\n \"1769168\",\n \"11467034\",\n \"1769336\",\n \"10848620\",\n \"1769410\",\n \"1769425\",\n \"1769465\",\n \"1769737\",\n \"1769739\",\n \"1769772\",\n \"10881384\",\n \"12148290\",\n \"1769823\",\n \"1769827\",\n \"1769840\",\n \"1769841\",\n \"1769852\",\n \"1769897\",\n \"1769901\",\n \"1770038\",\n \"1770044\",\n \"1770263\",\n \"1770380\",\n \"1770383\",\n \"1770384\",\n \"1770385\",\n \"11728240\",\n \"7396517\",\n \"1771455\",\n \"6132966\",\n \"6132967\",\n \"5110297\",\n \"5110299\",\n \"5110305\",\n \"7701550\",\n \"8837162\",\n \"8963926\",\n \"9256436\",\n \"9279670\",\n \"9283228\",\n \"9323382\",\n \"9327042\",\n \"9395422\",\n \"9399145\",\n \"9440644\",\n \"9560782\",\n \"9564612\",\n \"9607447\",\n \"9636442\",\n \"1771839\",\n \"1771846\",\n \"1771848\",\n \"1771859\",\n \"1771975\",\n \"1771977\",\n \"5110326\",\n \"5110327\",\n \"1772260\",\n \"1772352\",\n \"1772427\",\n \"1772428\",\n \"1772447\",\n \"1772543\",\n \"1772689\",\n \"1772716\",\n \"9237599\",\n \"9424441\",\n \"9534690\",\n \"1772793\",\n \"4532500\",\n \"5110397\",\n \"5110417\",\n \"5110447\",\n \"5110490\",\n \"5110492\",\n \"1774069\",\n \"1774575\",\n \"1774576\",\n \"5110533\",\n \"1774907\",\n \"9287097\",\n \"1775148\",\n \"5110546\",\n \"8979264\",\n \"1775980\",\n \"1776163\",\n \"1776265\",\n \"1776268\",\n \"5110765\",\n \"5110769\",\n \"1777024\",\n \"1777034\",\n \"1777052\",\n \"1777075\",\n \"8345991\",\n \"1777165\",\n \"1777166\",\n \"1777179\",\n \"1777289\",\n \"8141741\",\n \"1777631\",\n \"5110837\",\n \"9257908\",\n \"1777695\",\n \"1777737\",\n \"11457930\",\n \"11609422\",\n \"9372988\",\n \"6132953\",\n \"1777942\",\n \"4687991\",\n \"5110891\",\n \"6133029\",\n \"1778430\",\n \"1778548\",\n \"1778549\",\n \"1778551\",\n \"1778555\",\n \"9423248\",\n \"5110981\",\n \"5110986\",\n \"5110993\",\n \"10403441\",\n \"5111007\",\n \"5111044\",\n \"5111054\",\n \"6133058\",\n \"9610080\",\n \"1779399\",\n \"1779456\",\n \"6132938\",\n \"1779671\",\n \"1779740\",\n \"1780149\",\n \"1780150\",\n \"5111830\",\n \"10203499\",\n \"1780705\",\n \"1780716\",\n \"1780856\",\n \"1780857\",\n \"1780860\",\n \"1780862\",\n \"1781029\",\n \"1781038\",\n \"7672864\",\n \"9305011\",\n \"9390065\",\n \"9630748\",\n \"8193562\",\n \"1781944\",\n \"1781946\",\n \"5112051\",\n \"5112053\",\n \"5112060\",\n \"5112068\",\n \"5112078\",\n \"5112080\",\n \"9008379\",\n \"1782115\",\n \"10154280\",\n \"1782185\",\n \"1782208\",\n \"1782211\",\n \"1782214\",\n \"1782326\",\n \"1782328\",\n \"1783173\",\n \"1783302\",\n \"8384839\",\n \"1783365\",\n \"1783652\",\n \"1783882\",\n \"1783991\",\n \"10157400\",\n \"5112407\",\n \"5112410\",\n \"1784646\",\n \"1784804\",\n \"10208792\",\n \"1785744\",\n \"1785832\",\n \"1785913\",\n \"1785916\",\n \"9520799\",\n \"1786190\",\n \"1786217\",\n \"1786219\",\n \"1786247\",\n \"7480993\",\n \"1786317\",\n \"1786711\",\n \"11368766\",\n \"5112500\",\n \"6132971\",\n \"6132974\",\n \"1786912\",\n \"1786913\",\n \"1786958\",\n \"1786980\",\n \"1786984\",\n \"1786985\",\n \"1786990\",\n \"1787003\",\n \"1787009\",\n \"1787010\",\n \"10860091\",\n \"6132805\",\n \"1787106\",\n \"1787464\",\n \"11495556\",\n \"1788045\",\n \"5112531\",\n \"5112542\",\n \"1788278\",\n \"11890681\",\n \"10295290\",\n \"1788372\",\n \"1788553\",\n \"6116754\",\n \"6132936\",\n \"7346446\",\n \"9494526\",\n \"1788881\",\n \"1788891\",\n \"6132826\",\n \"1788953\",\n \"1788986\",\n \"1789057\",\n \"1789190\",\n \"1789191\",\n \"1789193\",\n \"1789225\",\n \"5112626\",\n \"1789498\",\n \"1789604\",\n \"10090168\",\n \"1789794\",\n \"1789805\",\n \"1790230\",\n \"1790240\",\n \"1790246\",\n \"1790248\",\n \"1790257\",\n \"1790258\",\n \"1790268\",\n \"1790274\",\n \"1790281\",\n \"1790287\",\n \"1790308\",\n \"5112798\",\n \"1790331\",\n \"1790450\",\n \"1790692\",\n \"1790787\",\n \"10598407\",\n \"1790816\",\n \"1790832\",\n \"10749137\",\n \"10766319\",\n \"1790876\",\n \"1790888\",\n \"1790900\",\n \"1790910\",\n \"9967251\",\n \"9983957\",\n \"1790937\",\n \"1790945\",\n \"7785540\",\n \"9345545\",\n \"1791010\",\n \"5112843\",\n \"1791094\",\n \"1791097\",\n \"1791151\",\n \"10743044\",\n \"6132950\",\n \"5112892\",\n \"5112900\",\n \"5112908\",\n \"5112911\",\n \"5112915\",\n \"5112917\",\n \"5112923\",\n \"5112927\",\n \"5112940\",\n \"5112944\",\n \"5112947\",\n \"5112959\",\n \"5112960\",\n \"5112961\",\n \"5112963\",\n \"5112968\",\n \"5112990\",\n \"1791372\",\n \"1791379\",\n \"1791514\",\n \"1791698\",\n \"1791715\",\n \"11016336\",\n \"11725043\",\n \"11971514\",\n \"5113078\",\n \"5113082\",\n \"5113084\",\n \"5113148\",\n \"5113234\",\n \"9310626\",\n \"1792210\",\n \"5113330\",\n \"5113352\",\n \"1792276\",\n \"9382044\",\n \"1792541\",\n \"1792695\",\n \"1792827\",\n \"1792831\",\n \"5113385\",\n \"5884243\",\n \"9504222\",\n \"1793429\",\n \"1793566\",\n \"1793610\",\n \"1793613\",\n \"1793631\",\n \"1793635\",\n \"1793646\",\n \"1793656\",\n \"1793892\",\n \"9860902\",\n \"1794518\",\n \"10850929\",\n \"1794637\",\n \"1795042\",\n \"1795045\",\n \"1795049\",\n \"1795074\",\n \"10267570\",\n \"1795657\",\n \"9340452\",\n \"9622322\",\n \"1796257\",\n \"1796288\",\n \"1796338\",\n \"10573746\",\n \"5113925\",\n \"1796984\",\n \"10108671\",\n \"1797039\",\n \"6132979\",\n \"10600368\",\n \"1797111\",\n \"1797121\",\n \"1797122\",\n \"1797135\",\n \"1797137\",\n \"1797146\",\n \"1797178\",\n \"1797194\",\n \"1797198\",\n \"1797206\",\n \"1797210\",\n \"1797218\",\n \"1797252\",\n \"1797257\",\n \"1797258\",\n \"1797259\",\n \"1797275\",\n \"1797276\",\n \"1797285\",\n \"1797290\",\n \"1797296\",\n \"1797299\",\n \"1797300\",\n \"1797333\",\n \"1797339\",\n \"1797344\",\n \"1797349\",\n \"1797365\",\n \"1797367\",\n \"1797373\",\n \"1797374\",\n \"1797375\",\n \"1797379\",\n \"1797394\",\n \"1797409\",\n \"1797429\",\n \"1797432\",\n \"1797433\",\n \"1797436\",\n \"1797440\",\n \"1797445\",\n \"1797454\",\n \"1797464\",\n \"1797474\",\n \"1797475\",\n \"1797478\",\n \"1797479\",\n \"1797488\",\n \"1797507\",\n \"1797521\",\n \"1797527\",\n \"1797542\",\n \"1797556\",\n \"4532461\",\n \"4532471\",\n \"4532473\",\n \"8016905\",\n \"8355390\",\n \"8756768\",\n \"8874140\",\n \"9022399\",\n \"9236138\",\n \"9240357\",\n \"9252524\",\n \"9273409\",\n \"9289908\",\n \"9310510\",\n \"9312545\",\n \"9332506\",\n \"9340070\",\n \"9344456\",\n \"9350484\",\n \"9367471\",\n \"9406020\",\n \"9410076\",\n \"9416645\",\n \"9455404\",\n \"9468297\",\n \"9483647\",\n \"9547311\",\n \"9549475\",\n \"9554074\",\n \"9560404\",\n \"9604825\",\n \"9607036\",\n \"9611624\",\n \"9618068\",\n \"9622725\",\n \"1797727\",\n \"1798014\",\n \"1798018\",\n \"1798023\",\n \"1798025\",\n \"1798101\",\n \"5113950\",\n \"5884245\",\n \"5884247\",\n \"6117055\",\n \"6117124\",\n \"7598729\",\n \"1798346\",\n \"1798393\",\n \"1798402\",\n \"1798408\",\n \"4532493\",\n \"1798427\",\n \"1798449\",\n \"11636323\",\n \"1798481\",\n \"1798488\",\n \"1798504\",\n \"6115283\",\n \"6132841\",\n \"6132850\",\n \"9440183\",\n \"9635978\",\n \"9923283\",\n \"10657151\",\n \"1798511\",\n \"10096855\",\n \"11732472\",\n \"11976273\",\n \"1787072\",\n \"1787079\",\n \"1787090\",\n \"1798523\",\n \"1798529\",\n \"1798580\",\n \"1798594\",\n \"1798687\",\n \"1798700\",\n \"1798768\",\n \"1798794\",\n \"1798802\",\n \"1798807\",\n \"1798823\",\n \"1798863\",\n \"1798868\",\n \"4301310\",\n \"4532351\",\n \"4532352\",\n \"4532357\",\n \"6115426\",\n \"6115437\",\n \"6133046\",\n \"6133051\",\n \"8150450\",\n \"8793873\",\n \"9238900\",\n \"9243875\",\n \"9292394\",\n \"9314022\",\n \"9353360\",\n \"9358521\",\n \"9425857\",\n \"9499599\",\n \"9527919\",\n \"9533271\",\n \"9545713\",\n \"9579730\",\n \"9608673\",\n \"9621113\",\n \"9626500\",\n \"1799165\",\n \"1799167\",\n \"1799183\",\n \"1799417\",\n \"1799703\",\n \"1799708\",\n \"9249036\",\n \"1799743\",\n \"1799751\",\n \"1799757\",\n \"6132824\",\n \"6132825\",\n \"1803127\",\n \"10722110\",\n \"1803148\",\n \"1803163\",\n \"1803197\",\n \"1803218\",\n \"1803266\",\n \"1803302\",\n \"10033898\",\n \"5114892\",\n \"5114903\",\n \"1803628\",\n \"11713970\",\n \"5114923\",\n \"5114930\",\n \"5114934\",\n \"5114946\",\n \"11909090\",\n \"1803781\",\n \"1803788\",\n \"1803824\",\n \"1804071\",\n \"1804074\",\n \"1804246\",\n \"1804331\",\n \"1804337\",\n \"1804394\",\n \"1804398\",\n \"1804401\",\n \"1804404\",\n \"1804407\",\n \"1804409\",\n \"1804429\",\n \"1804430\",\n \"1804477\",\n \"1804512\",\n \"1804513\",\n \"1804522\",\n \"5115046\",\n \"1804610\",\n \"9343385\",\n \"10053130\",\n \"1804721\",\n \"1804727\",\n \"1804742\",\n \"1804759\",\n \"1804760\",\n \"10156470\",\n \"8865876\",\n \"1804906\",\n \"11508076\",\n \"11907485\",\n \"1804963\",\n \"1804969\",\n \"1804971\",\n \"1804974\",\n \"1805043\",\n \"1805044\",\n \"1805110\",\n \"1805111\",\n \"1805155\",\n \"4532608\",\n \"1805184\",\n \"1805197\",\n \"1805271\",\n \"11494627\",\n \"12229237\",\n \"1805505\",\n \"1805524\",\n \"1805537\",\n \"1805540\",\n \"1805542\",\n \"1805549\",\n \"1805580\",\n \"1805682\",\n \"1805691\",\n \"1805717\",\n \"5115166\",\n \"5115167\",\n \"5115198\",\n \"9663271\",\n \"1805806\",\n \"1805938\",\n \"1805955\",\n \"1805976\",\n \"1805982\",\n \"1806064\",\n \"1806075\",\n \"1806145\",\n \"1806170\",\n \"1806176\",\n \"5115406\",\n \"1806687\",\n \"1806690\",\n \"1806702\",\n \"1806704\",\n \"1806737\",\n \"1806740\",\n \"1806814\",\n \"9235225\",\n \"9278398\",\n \"9394138\",\n \"9417594\",\n \"9491341\",\n \"9541734\",\n \"9565980\",\n \"9588105\",\n \"1806871\",\n \"1806872\",\n \"1806878\",\n \"1806887\",\n \"1806913\",\n \"1806936\",\n \"7874258\",\n \"1807271\",\n \"1807273\",\n \"5115500\",\n \"1807353\",\n \"1807355\",\n \"1807473\",\n \"1807477\",\n \"1807478\",\n \"1807479\",\n \"1807480\",\n \"1807483\",\n \"1807485\",\n \"1807488\",\n \"1807490\",\n \"1807491\",\n \"1807503\",\n \"1807514\",\n \"1807553\",\n \"1807569\",\n \"1807787\",\n \"1807881\",\n \"1807969\",\n \"1808088\",\n \"11453492\",\n \"11900897\",\n \"1808140\",\n \"1808145\",\n \"1808161\",\n \"1808166\",\n \"1808172\",\n \"1808180\",\n \"1808195\",\n \"1808221\",\n \"1808232\",\n \"1808236\",\n \"1808286\",\n \"1808340\",\n \"1808348\",\n \"1808359\",\n \"1808381\",\n \"1808440\",\n \"1808450\",\n \"1808559\",\n \"6198302\",\n \"9219266\",\n \"1808590\",\n \"1808592\",\n \"1808648\",\n \"1808752\",\n \"5115701\",\n \"5115771\",\n \"1809019\",\n \"8929537\",\n \"1809066\",\n \"5115777\",\n \"1809115\",\n \"1809127\",\n \"1809135\",\n \"9463067\",\n \"1809158\",\n \"1809159\",\n \"1809210\",\n \"12214821\",\n \"1809244\",\n \"1809248\",\n \"1809294\",\n \"1809299\",\n \"1809305\",\n \"1809308\",\n \"1809348\",\n \"10189965\",\n \"1809381\",\n \"1809387\",\n \"1809491\",\n \"1809499\",\n \"5116095\",\n \"10010700\",\n \"10183056\",\n \"12006709\",\n \"1810025\",\n \"1810099\",\n \"1810121\",\n \"1810145\",\n \"1810172\",\n \"1810318\",\n \"1810464\",\n \"1810469\",\n \"5116128\",\n \"5116134\",\n \"5116145\",\n \"5116198\",\n \"5116238\",\n \"5116252\",\n \"5116293\",\n \"9350900\",\n \"1810743\",\n \"1810752\",\n \"1810824\",\n \"1810846\",\n \"1810851\",\n \"1810866\",\n \"1810867\",\n \"9389851\",\n \"7535515\",\n \"1811019\",\n \"1811026\",\n \"1811079\",\n \"1811081\",\n \"1811122\",\n \"1811439\",\n \"5116332\",\n \"5116338\",\n \"5116353\",\n \"5116358\",\n \"10882244\",\n \"5116395\",\n \"5116397\",\n \"5116412\",\n \"5116416\",\n \"12176559\",\n \"12182061\",\n \"1811686\",\n \"5116423\",\n \"1812437\",\n \"1812453\",\n \"1812465\",\n \"1812500\",\n \"1812573\",\n \"1812658\",\n \"1812881\",\n \"10671425\",\n \"10821201\",\n \"11736162\",\n \"12209759\",\n \"1813010\",\n \"1813036\",\n \"1813114\",\n \"1813248\",\n \"1813263\",\n \"5117189\",\n \"5117200\",\n \"7656811\",\n \"1814182\",\n \"1814323\",\n \"1814336\",\n \"1814338\",\n \"1814357\",\n \"1814359\",\n \"1814365\",\n \"5117245\",\n \"5117347\",\n \"5117348\",\n \"1814538\",\n \"1814552\",\n \"5117361\",\n \"1814630\",\n \"1814653\",\n \"1814658\",\n \"1814665\",\n \"1814692\",\n \"1814800\",\n \"1814823\",\n \"1814827\",\n \"1814838\",\n \"1814843\",\n \"1814863\",\n \"8933773\",\n \"1814913\",\n \"1814928\",\n \"1814971\",\n \"5117399\",\n \"5117400\",\n \"1815260\",\n \"10074808\",\n \"1815338\",\n \"1815373\",\n \"5117413\",\n \"5117414\",\n \"9434954\",\n \"8916247\",\n \"5117430\",\n \"5117462\",\n \"5117463\",\n \"5117553\",\n \"1815680\",\n \"1815856\",\n \"10826443\",\n \"12249986\",\n \"1816029\",\n \"1816065\",\n \"1816110\",\n \"1816138\",\n \"1816246\",\n \"1816264\",\n \"1816276\",\n \"1816292\",\n \"1816299\",\n \"1816362\",\n \"1816434\",\n \"1816570\",\n \"5117685\",\n \"5117687\",\n \"1816881\",\n \"5117776\",\n \"5117779\",\n \"5117791\",\n \"5117805\",\n \"1817065\",\n \"1817086\",\n \"11703980\",\n \"1817160\",\n \"1817171\",\n \"1817217\",\n \"1817690\",\n \"1817693\",\n \"1817696\",\n \"1817727\",\n \"1817729\",\n \"1817732\",\n \"1817734\",\n \"1817749\",\n \"1817797\",\n \"11725616\",\n \"1817808\",\n \"1817810\",\n \"1817852\",\n \"1817854\",\n \"1817864\",\n \"5734900\",\n \"1817940\",\n \"1818252\",\n \"11461056\",\n \"11860565\",\n \"1818413\",\n \"5118046\",\n \"11758730\",\n \"1818454\",\n \"1818463\",\n \"5118171\",\n \"6122301\",\n \"8326103\",\n \"1818659\",\n \"1818991\",\n \"1819050\",\n \"10556853\",\n \"10822185\",\n \"1819128\",\n \"1819145\",\n \"4532293\",\n \"4532297\",\n \"6134023\",\n \"6134027\",\n \"6197200\",\n \"7346382\",\n \"7346384\",\n \"1819268\",\n \"1819270\",\n \"1819280\",\n \"1819310\",\n \"11656384\",\n \"1819421\",\n \"8407461\",\n \"1819668\",\n \"1819699\",\n \"9331464\",\n \"6134035\",\n \"1819873\",\n \"1819928\",\n \"5118291\",\n \"5118327\",\n \"5118348\",\n \"5925317\",\n \"6122092\",\n \"7657803\",\n \"8361973\",\n \"8720118\",\n \"9391467\",\n \"9568710\",\n \"1819970\",\n \"5118422\",\n \"10546538\",\n \"1820275\",\n \"1820282\",\n \"1820291\",\n \"1820318\",\n \"1820352\",\n \"1820372\",\n \"1820383\",\n \"1820393\",\n \"1820401\",\n \"1820406\",\n \"1820414\",\n \"1820429\",\n \"1820435\",\n \"1820440\",\n \"1820450\",\n \"1820451\",\n \"1820458\",\n \"1820477\",\n \"1820478\",\n \"5734655\",\n \"5734657\",\n \"6121912\",\n \"7346381\",\n \"9420824\",\n \"1820565\",\n \"1820711\",\n \"1820714\",\n \"1820722\",\n \"1820753\",\n \"1820764\",\n \"1820791\",\n \"1820802\",\n \"1820888\",\n \"1820940\",\n \"1820948\",\n \"1821012\",\n \"1821051\",\n \"1821105\",\n \"1821113\",\n \"1821260\",\n \"8178238\",\n \"1821436\",\n \"10274769\",\n \"1821448\",\n \"6122103\",\n \"1822141\",\n \"1822142\",\n \"10551407\",\n \"11731502\",\n \"12253343\",\n \"12037602\",\n \"9276279\",\n \"9347308\",\n \"5884571\",\n \"10503495\",\n \"10106475\",\n \"8897869\",\n \"9956017\",\n \"7596232\",\n \"11873825\",\n \"5771982\",\n \"8872165\",\n \"9288386\",\n \"9291075\",\n \"9362560\",\n \"9480768\",\n \"9601788\",\n \"8881513\",\n \"12176367\",\n \"7346231\",\n \"12183285\",\n \"6097214\",\n \"4532544\",\n \"4532614\",\n \"4532549\",\n \"4532516\",\n \"6133081\",\n \"6133083\",\n \"4532532\",\n \"4532565\",\n \"10864524\",\n \"12021153\",\n \"12021649\",\n \"12089608\",\n \"9673208\",\n \"10270464\",\n \"8741750\",\n \"9473918\",\n \"11904675\",\n \"9400545\",\n \"9559336\",\n \"6133292\",\n \"11332355\",\n \"6133340\",\n \"10062933\",\n \"10717837\",\n \"8148822\",\n \"12180031\",\n \"12203022\",\n \"12216332\",\n \"12242422\",\n \"9852545\",\n \"10496181\",\n \"10806460\",\n \"6133252\",\n \"10072380\",\n \"6133325\",\n \"9754232\",\n \"10972780\",\n \"11142432\",\n \"10629533\",\n \"10309234\",\n \"12171522\",\n \"9493317\",\n \"9315833\",\n \"11962292\",\n \"12017078\",\n \"10004820\",\n \"10248689\",\n \"10399906\",\n \"6112547\",\n \"6133266\",\n \"6133269\",\n \"6133270\",\n \"6133271\",\n \"10454874\",\n \"10754772\",\n \"10812069\",\n \"11232431\",\n \"6112449\",\n \"6112472\",\n \"6133311\",\n \"6133312\",\n \"6133313\",\n \"6133315\",\n \"6133317\",\n \"8452092\",\n \"8526388\",\n \"8543494\",\n \"8624848\",\n \"9927378\",\n \"10443878\",\n \"10395440\",\n \"8774985\",\n \"8908724\",\n \"9135886\",\n \"9247563\",\n \"9288596\",\n \"9290866\",\n \"9315577\",\n \"9334851\",\n \"9406984\",\n \"9432644\",\n \"9452274\",\n \"9526331\",\n \"9552703\",\n \"9555094\",\n \"9599150\",\n \"5734901\",\n \"10637588\",\n \"6133262\",\n \"10643533\",\n \"12257250\",\n \"10214972\",\n \"10830546\",\n \"10851228\",\n \"12194283\",\n \"10166724\",\n \"8831819\",\n \"12135372\",\n \"5115381\",\n \"11033463\",\n \"11812181\",\n \"5115854\",\n \"5115872\",\n \"5115874\",\n \"9530200\",\n \"5116475\",\n \"8038357\",\n \"8165185\",\n \"6133264\",\n \"6097254\",\n \"9359871\",\n \"9379595\",\n \"9387353\",\n \"9407200\",\n \"9432438\",\n \"9452497\",\n \"9460510\",\n \"9498206\",\n \"9552466\",\n \"9627917\",\n \"1774826\",\n \"1774829\",\n \"5114949\",\n \"5114950\",\n \"5114956\",\n \"10480609\",\n \"5116698\",\n \"5116843\",\n \"1805535\",\n \"8429622\",\n \"1788711\",\n \"1788717\",\n \"7560807\",\n \"9301336\",\n \"12171068\",\n \"9266866\",\n \"8363709\",\n \"10178326\",\n \"10282389\",\n \"10400868\",\n \"10469564\",\n \"10813849\",\n \"10907635\",\n \"10982648\",\n \"8874633\",\n \"9508913\",\n \"9621271\",\n \"1783898\",\n \"1783906\",\n \"6133033\",\n \"5116504\",\n \"8723161\",\n \"9198767\",\n \"5114912\",\n \"5114915\",\n \"5114921\",\n \"1818216\",\n \"5108808\",\n \"1788635\",\n \"9336001\",\n \"1781413\",\n \"1781420\",\n \"1781421\",\n \"1781428\",\n \"1803461\",\n \"4532395\",\n \"4532405\",\n \"4532408\",\n \"4532412\",\n \"9446902\",\n \"1780869\",\n \"1780897\",\n \"10866411\",\n \"6133241\",\n \"6133242\",\n \"6133244\",\n \"6133248\",\n \"7346227\",\n \"8000103\",\n \"9478424\",\n \"1781598\",\n \"1794268\",\n \"1794273\",\n \"1803590\",\n \"1803593\",\n \"4532534\",\n \"1819320\",\n \"1772374\",\n \"1796523\",\n \"1763761\",\n \"6115388\",\n \"1816634\",\n \"1816648\",\n \"1816673\",\n \"1816685\",\n \"6133297\",\n \"1774583\",\n \"1774598\",\n \"1774600\",\n \"1774604\",\n \"1774618\",\n \"1774626\",\n \"1774635\",\n \"1774640\",\n \"1774654\",\n \"1774661\",\n \"1774682\",\n \"1774691\",\n \"1774702\",\n \"1774712\",\n \"1768626\",\n \"1768630\",\n \"6132809\",\n \"1803544\",\n \"1803545\",\n \"1817973\",\n \"1819852\",\n \"1780287\",\n \"1813174\",\n \"4532508\",\n \"4532510\",\n \"8805966\",\n \"8905759\",\n \"9051758\",\n \"9254017\",\n \"9298735\",\n \"9324570\",\n \"9368974\",\n \"9443159\",\n \"9469928\",\n \"9488783\",\n \"9637664\",\n \"1793515\",\n \"1793533\",\n \"1793538\",\n \"1793542\",\n \"5111643\",\n \"1804532\",\n \"1766892\",\n \"1813460\",\n \"1813468\",\n \"1813413\",\n \"1813415\",\n \"10164453\",\n \"1768190\",\n \"1807634\",\n \"1782645\",\n \"9400916\",\n \"1768459\",\n \"1768461\",\n \"1768462\",\n \"1760233\",\n \"1760244\",\n \"1760246\",\n \"1760257\",\n \"9235027\",\n \"9989156\",\n \"5113001\",\n \"5113030\",\n \"5113036\",\n \"9522383\",\n \"8177591\",\n \"5109796\",\n \"1821455\",\n \"1821464\",\n \"1821468\",\n \"1821478\",\n \"1821479\",\n \"1821505\",\n \"1821542\",\n \"1821547\",\n \"1821581\",\n \"1821651\",\n \"1821684\",\n \"1821856\",\n \"1821863\",\n \"1821911\",\n \"1821920\",\n \"1821934\",\n \"1821940\",\n \"1822003\",\n \"1822017\",\n \"1819337\",\n \"1819362\",\n \"1804120\",\n \"1804148\",\n \"1804182\",\n \"1774997\",\n \"1768212\",\n \"6122364\",\n \"1815315\",\n \"1819170\",\n \"5118223\",\n \"1820573\",\n \"1781446\",\n \"1781473\",\n \"6116073\",\n \"6116076\",\n \"1782507\",\n \"1783713\",\n \"1783715\",\n \"1783725\",\n \"9918092\",\n \"1775796\",\n \"1816775\",\n \"1811814\",\n \"1811948\",\n \"1812026\",\n \"1812105\",\n \"1812207\",\n \"1812262\",\n \"1812339\",\n \"1812394\",\n \"8237987\",\n \"5117941\",\n \"1803306\",\n \"4532366\",\n \"4687933\",\n \"4687934\",\n \"4687935\",\n \"5884258\",\n \"6116646\",\n \"6116659\",\n \"6116661\",\n \"6116669\",\n \"6116674\",\n \"7716829\",\n \"8299504\",\n \"8968321\",\n \"9451320\",\n \"10926224\",\n \"11088003\",\n \"1820118\",\n \"1820137\",\n \"1819057\",\n \"1799821\",\n \"4532453\",\n \"6116413\",\n \"1820039\",\n \"5118396\",\n \"1814877\",\n \"11754729\",\n \"1781503\",\n \"1781531\",\n \"6115504\",\n \"1798329\",\n \"1798331\",\n \"1798335\",\n \"1784936\",\n \"1784947\",\n \"1784959\",\n \"1785024\",\n \"1785072\",\n \"1785105\",\n \"1765996\",\n \"1765997\",\n \"1765999\",\n \"1766007\",\n \"1766022\",\n \"6133069\",\n \"10272611\",\n \"10330198\",\n \"10598038\",\n \"11513188\",\n \"11612469\",\n \"1786597\",\n \"4687389\",\n \"5884188\",\n \"6117485\",\n \"6132915\",\n \"6132916\",\n \"6132917\",\n \"7611914\",\n \"7924383\",\n \"9935660\",\n \"5110012\",\n \"5110013\",\n \"10196956\",\n \"10392889\",\n \"1811455\",\n \"1811462\",\n \"1811465\",\n \"1772822\",\n \"12185656\",\n \"1809585\",\n \"1809594\",\n \"1781350\",\n \"1781353\",\n \"6133013\",\n \"1796941\",\n \"1796943\",\n \"1807924\",\n \"1819685\",\n \"10098436\",\n \"11717028\",\n \"1771772\",\n \"1771779\",\n \"1782310\",\n \"10094256\",\n \"6197138\",\n \"10765884\",\n \"12266659\",\n \"9792270\",\n \"5108421\",\n \"5108435\",\n \"5108440\",\n \"1771903\",\n \"1780617\",\n \"1780646\",\n \"1780668\",\n \"1780676\",\n \"1788813\",\n \"10097776\",\n \"4301309\",\n \"10506164\",\n \"1777463\",\n \"1777471\",\n \"1777500\",\n \"1777517\",\n \"6115973\",\n \"5112440\",\n \"1791735\",\n \"1791736\",\n \"1795542\",\n \"1860974\",\n \"1860979\",\n \"1860983\",\n \"1860987\",\n \"1860989\",\n \"1860993\",\n \"1860994\",\n \"1860996\",\n \"1861011\",\n \"1861030\",\n \"1861031\",\n \"4522911\",\n \"4522916\",\n \"4522919\",\n \"4522922\",\n \"12318291\",\n \"4522886\",\n \"4522890\",\n \"4522891\",\n \"4522896\",\n \"1860765\",\n \"1860768\",\n \"1860849\",\n \"1860852\",\n \"1860857\",\n \"7767114\",\n \"7851302\",\n \"7961640\",\n \"1992378\",\n \"1992434\",\n \"1992489\",\n \"1992504\",\n \"7472845\",\n \"1731886\",\n \"1731890\",\n \"1731906\",\n \"1731923\",\n \"1731926\",\n \"1731927\",\n \"1731980\",\n \"1732001\",\n \"1732005\",\n \"1732031\",\n \"1732033\",\n \"1732044\",\n \"1732052\",\n \"1852956\",\n \"1852978\",\n \"10640865\",\n \"9950697\",\n \"1833779\",\n \"1833782\",\n \"1833794\",\n \"1834524\",\n \"1834547\",\n \"4685588\",\n \"4685595\",\n \"1834793\",\n \"1835086\",\n \"1835348\",\n \"1835430\",\n \"1835432\",\n \"1835433\",\n \"1835436\",\n \"1835438\",\n \"1835449\",\n \"1835451\",\n \"1835456\",\n \"1835457\",\n \"9724183\",\n \"1835467\",\n \"1835814\",\n \"1835819\",\n \"10610041\",\n \"1837343\",\n \"1837360\",\n \"1837420\",\n \"1837429\",\n \"1837464\",\n \"1837515\",\n \"4529064\",\n \"7958169\",\n \"8015612\",\n \"1837724\",\n \"1837726\",\n \"1837727\",\n \"1837968\",\n \"1838058\",\n \"1838065\",\n \"1838071\",\n \"10017792\",\n \"1838360\",\n \"1838465\",\n \"1838512\",\n \"1838584\",\n \"1839293\",\n \"1839296\",\n \"1839658\",\n \"1839714\",\n \"1839721\",\n \"4684986\",\n \"1840297\",\n \"1840301\",\n \"1840311\",\n \"1840345\",\n \"1840346\",\n \"1840360\",\n \"1840371\",\n \"1840379\",\n \"1840380\",\n \"1840408\",\n \"1840441\",\n \"1840448\",\n \"1840478\",\n \"1840483\",\n \"1840485\",\n \"1840520\",\n \"1840543\",\n \"1840553\",\n \"1840555\",\n \"1840566\",\n \"1840570\",\n \"1840581\",\n \"1840592\",\n \"1840596\",\n \"1840621\",\n \"1840656\",\n \"4529186\",\n \"1841081\",\n \"1841084\",\n \"1841091\",\n \"1841095\",\n \"10187154\",\n \"5119808\",\n \"1831752\",\n \"1852751\",\n \"1852787\",\n \"1852831\",\n \"1852832\",\n \"1852859\",\n \"9473121\",\n \"1852901\",\n \"4529630\",\n \"9851261\",\n \"5125075\",\n \"5125104\",\n \"8416348\",\n \"10371735\",\n \"1869359\",\n \"1869363\",\n \"9883856\",\n \"1751236\",\n \"1751290\",\n \"1751298\",\n \"1751299\",\n \"1751336\",\n \"1751368\",\n \"1751400\",\n \"1751457\",\n \"4535884\",\n \"4535904\",\n \"1939510\",\n \"1939520\",\n \"5141344\",\n \"1860184\",\n \"1860259\",\n \"1860260\",\n \"1860261\",\n \"1860274\",\n \"10165831\",\n \"1860408\",\n \"4525177\",\n \"1860443\",\n \"10308365\",\n \"5123339\",\n \"9913863\",\n \"10361029\",\n \"10625116\",\n \"5123394\",\n \"5123419\",\n \"5769164\",\n \"5880040\",\n \"5880041\",\n \"6132546\",\n \"5123449\",\n \"5123461\",\n \"5123474\",\n \"5123485\",\n \"5123489\",\n \"5123542\",\n \"1735408\",\n \"10208422\",\n \"4302389\",\n \"1751207\",\n \"1751216\",\n \"1853222\",\n \"1869595\",\n \"8797666\",\n \"1869656\",\n \"1869666\",\n \"10005632\",\n \"10433914\",\n \"11756119\",\n \"1869706\",\n \"1869707\",\n \"1869714\",\n \"1869803\",\n \"1869825\",\n \"1869852\",\n \"1869858\",\n \"1869976\",\n \"1870017\",\n \"1870037\",\n \"1870202\",\n \"1870237\",\n \"1870249\",\n \"1870250\",\n \"1870267\",\n \"1870308\",\n \"1870415\",\n \"1870426\",\n \"1870450\",\n \"1870452\",\n \"1870459\",\n \"1870506\",\n \"1870509\",\n \"1870607\",\n \"1870650\",\n \"1870703\",\n \"1870721\",\n \"1870727\",\n \"1870733\",\n \"1870751\",\n \"1870777\",\n \"1870988\",\n \"5125306\",\n \"1871160\",\n \"1871171\",\n \"1871175\",\n \"1871212\",\n \"1871217\",\n \"1871252\",\n \"1871264\",\n \"1871333\",\n \"1871379\",\n \"10246305\",\n \"10588642\",\n \"10817208\",\n \"1871407\",\n \"4531402\",\n \"4531409\",\n \"8766638\",\n \"9944922\",\n \"1871414\",\n \"1871419\",\n \"1871451\",\n \"4531365\",\n \"4531376\",\n \"1871457\",\n \"1871509\",\n \"1871560\",\n \"1871597\",\n \"1871630\",\n \"1871683\",\n \"1871698\",\n \"1871754\",\n \"1871763\",\n \"1871783\",\n \"1871826\",\n \"1871890\",\n \"1871923\",\n \"1871940\",\n \"1871988\",\n \"1872094\",\n \"1872169\",\n \"9969513\",\n \"1872200\",\n \"1872210\",\n \"1872255\",\n \"10336328\",\n \"1872452\",\n \"1872456\",\n \"1872466\",\n \"1872470\",\n \"1872514\",\n \"1872515\",\n \"4531427\",\n \"7673242\",\n \"1872735\",\n \"1872812\",\n \"1872827\",\n \"10787705\",\n \"1872848\",\n \"1872850\",\n \"1872873\",\n \"1872901\",\n \"1872904\",\n \"1873048\",\n \"1873049\",\n \"1873051\",\n \"1873079\",\n \"1873215\",\n \"1873222\",\n \"1873267\",\n \"1873285\",\n \"1873290\",\n \"1873291\",\n \"1873319\",\n \"5125545\",\n \"1873373\",\n \"10807383\",\n \"1873376\",\n \"1873381\",\n \"1873383\",\n \"1873384\",\n \"1873398\",\n \"1873411\",\n \"1873417\",\n \"1873585\",\n \"1873620\",\n \"9858922\",\n \"7372375\",\n \"1873753\",\n \"4530947\",\n \"4530951\",\n \"10143814\",\n \"1873773\",\n \"10165457\",\n \"10366580\",\n \"10410048\",\n \"10518163\",\n \"10561589\",\n \"1873776\",\n \"1873780\",\n \"1873783\",\n \"4531237\",\n \"4531264\",\n \"9971850\",\n \"1873843\",\n \"1873890\",\n \"5125569\",\n \"5125591\",\n \"5125596\",\n \"5125600\",\n \"5125602\",\n \"5125629\",\n \"5125633\",\n \"5125635\",\n \"5125689\",\n \"1874146\",\n \"1874158\",\n \"1874160\",\n \"1874168\",\n \"1874179\",\n \"1874192\",\n \"1874204\",\n \"1874211\",\n \"1874229\",\n \"1874248\",\n \"1874257\",\n \"1874269\",\n \"1874274\",\n \"1874279\",\n \"1874280\",\n \"1874295\",\n \"4531145\",\n \"4531147\",\n \"4531158\",\n \"1874317\",\n \"1874375\",\n \"1874513\",\n \"1874552\",\n \"10244305\",\n \"1874743\",\n \"9782192\",\n \"1874901\",\n \"1874937\",\n \"1875008\",\n \"1875120\",\n \"8219149\",\n \"1875196\",\n \"1875319\",\n \"1875327\",\n \"1875376\",\n \"1875407\",\n \"1875409\",\n \"1875429\",\n \"1875451\",\n \"4531242\",\n \"1875478\",\n \"1875483\",\n \"1875485\",\n \"1875534\",\n \"1875554\",\n \"1875584\",\n \"1875606\",\n \"1875607\",\n \"1875631\",\n \"1875633\",\n \"1875680\",\n \"1875682\",\n \"1875687\",\n \"4531284\",\n \"1875827\",\n \"1875830\",\n \"1875844\",\n \"1875865\",\n \"1875869\",\n \"1875914\",\n \"1875918\",\n \"1875940\",\n \"1875952\",\n \"1875958\",\n \"1876063\",\n \"1876168\",\n \"1876329\",\n \"1876357\",\n \"1876409\",\n \"1876479\",\n \"1876512\",\n \"1876542\",\n \"1876548\",\n \"1876549\",\n \"1876592\",\n \"1876623\",\n \"1876665\",\n \"10356445\",\n \"1876854\",\n \"1876876\",\n \"10442332\",\n \"1876922\",\n \"1876955\",\n \"1876987\",\n \"10142569\",\n \"1877002\",\n \"1877038\",\n \"5125916\",\n \"5125917\",\n \"1877282\",\n \"1877310\",\n \"1877321\",\n \"1877338\",\n \"1877341\",\n \"1877345\",\n \"1877353\",\n \"1877364\",\n \"1877365\",\n \"1877368\",\n \"1877372\",\n \"4531246\",\n \"1877406\",\n \"1877443\",\n \"1877453\",\n \"9111961\",\n \"1877492\",\n \"1877498\",\n \"1877537\",\n \"5125939\",\n \"1877643\",\n \"5125943\",\n \"5126000\",\n \"5126013\",\n \"5126052\",\n \"1877788\",\n \"1877940\",\n \"1877941\",\n \"1877975\",\n \"1877986\",\n \"1877988\",\n \"1877995\",\n \"1878067\",\n \"4531417\",\n \"4531425\",\n \"4531429\",\n \"1878158\",\n \"1878173\",\n \"1878197\",\n \"1878350\",\n \"1878370\",\n \"1878392\",\n \"1878406\",\n \"1878470\",\n \"1878471\",\n \"1878490\",\n \"1878500\",\n \"9835867\",\n \"1878586\",\n \"1883045\",\n \"1888454\",\n \"1890024\",\n \"1890056\",\n \"1890065\",\n \"5976937\",\n \"10211808\",\n \"5884888\",\n \"10526954\",\n \"10065676\",\n \"10129011\",\n \"10279983\",\n \"11591775\",\n \"9857679\",\n \"10423263\",\n \"6133441\",\n \"11728049\",\n \"1875885\",\n \"5125525\",\n \"1877035\",\n \"1873697\",\n \"5125780\",\n \"1872315\",\n \"1871504\",\n \"1748780\",\n \"1748805\",\n \"1836906\",\n \"1836907\",\n \"5143284\",\n \"5143285\",\n \"11950325\",\n \"12018158\",\n \"12060941\",\n \"12087490\",\n \"1939962\",\n \"1939964\",\n \"1940110\",\n \"1940158\",\n \"4525859\",\n \"4525884\",\n \"11667300\",\n \"5131957\",\n \"5141493\",\n \"5141501\",\n \"5714558\",\n \"5714572\",\n \"5714575\",\n \"5714600\",\n \"10267561\",\n \"10286565\",\n \"10451589\",\n \"10509408\",\n \"1940504\",\n \"1940510\",\n \"1940517\",\n \"1940546\",\n \"1940575\",\n \"1940580\",\n \"1940601\",\n \"1940604\",\n \"1940609\",\n \"1940612\",\n \"1940639\",\n \"1940644\",\n \"1940694\",\n \"1940717\",\n \"1940744\",\n \"1940757\",\n \"1940768\",\n \"4525777\",\n \"4525803\",\n \"8956729\",\n \"9930604\",\n \"10402067\",\n \"1940807\",\n \"1940838\",\n \"4525846\",\n \"1941310\",\n \"1941330\",\n \"1941348\",\n \"1941377\",\n \"1941437\",\n \"10309794\",\n \"12211069\",\n \"10495733\",\n \"10584071\",\n \"12252570\",\n \"1941266\",\n \"1941294\",\n \"1941299\",\n \"1939833\",\n \"1939879\",\n \"9146244\",\n \"12231385\",\n \"1736315\",\n \"1736358\",\n \"1736377\",\n \"1736390\",\n \"1736412\",\n \"1736425\",\n \"1736447\",\n \"10132596\",\n \"11645405\",\n \"1736484\",\n \"1736499\",\n \"1736511\",\n \"1736528\",\n \"1736560\",\n \"1736565\",\n \"1736601\",\n \"1736623\",\n \"10274976\",\n \"5102628\",\n \"5102635\",\n \"5102637\",\n \"5102642\",\n \"5102651\",\n \"5102666\",\n \"5102668\",\n \"5102671\",\n \"5102678\",\n \"1736727\",\n \"1736760\",\n \"1736800\",\n \"10355428\",\n \"1736803\",\n \"1736807\",\n \"1736809\",\n \"1736811\",\n \"1736821\",\n \"1736826\",\n \"5102683\",\n \"1736836\",\n \"1736860\",\n \"10638589\",\n \"1736898\",\n \"1736904\",\n \"1736905\",\n \"1736906\",\n \"1736915\",\n \"1736918\",\n \"1736937\",\n \"1736939\",\n \"1736945\",\n \"4530406\",\n \"1736993\",\n \"1736995\",\n \"1737015\",\n \"4529931\",\n \"1737072\",\n \"10146436\",\n \"10469532\",\n \"1737115\",\n \"1737131\",\n \"1737182\",\n \"1737187\",\n \"1737231\",\n \"10842267\",\n \"1737313\",\n \"1737342\",\n \"1737368\",\n \"1737374\",\n \"1737403\",\n \"1737413\",\n \"1737417\",\n \"1737437\",\n \"1737491\",\n \"1737497\",\n \"1737509\",\n \"4530608\",\n \"7350238\",\n \"7466487\",\n \"1737524\",\n \"1737526\",\n \"1737533\",\n \"1737542\",\n \"1737544\",\n \"1737551\",\n \"1737552\",\n \"1737650\",\n \"1737753\",\n \"1737768\",\n \"1737775\",\n \"1737776\",\n \"1737783\",\n \"1737847\",\n \"1737893\",\n \"1737904\",\n \"1737924\",\n \"1737929\",\n \"1737964\",\n \"1737968\",\n \"1737973\",\n \"1737978\",\n \"4530002\",\n \"8186212\",\n \"8485254\",\n \"1738045\",\n \"1738050\",\n \"1738081\",\n \"1738163\",\n \"1738192\",\n \"1738218\",\n \"1738222\",\n \"1738245\",\n \"10090105\",\n \"10370026\",\n \"1738317\",\n \"1738322\",\n \"1738337\",\n \"1738373\",\n \"1738422\",\n \"1738429\",\n \"1738514\",\n \"5102693\",\n \"5102735\",\n \"5102773\",\n \"5102782\",\n \"5102807\",\n \"5102809\",\n \"5102830\",\n \"8420632\",\n \"8869900\",\n \"9953996\",\n \"5102931\",\n \"5102951\",\n \"1738687\",\n \"1738700\",\n \"1738722\",\n \"1738777\",\n \"1738791\",\n \"1738794\",\n \"1738809\",\n \"1738839\",\n \"1738883\",\n \"1738888\",\n \"1739034\",\n \"1739042\",\n \"1739043\",\n \"8086347\",\n \"1739051\",\n \"1739128\",\n \"1739151\",\n \"1739220\",\n \"1739272\",\n \"1739284\",\n \"1739290\",\n \"1739316\",\n \"1739337\",\n \"1739362\",\n \"1739364\",\n \"1739377\",\n \"1739381\",\n \"1739400\",\n \"5102982\",\n \"1739449\",\n \"1739451\",\n \"1739461\",\n \"1739471\",\n \"1739553\",\n \"1739567\",\n \"10596756\",\n \"1739605\",\n \"1739612\",\n \"1739617\",\n \"1739629\",\n \"1739646\",\n \"1739656\",\n \"1739668\",\n \"1739677\",\n \"10229731\",\n \"1739727\",\n \"1739748\",\n \"1739767\",\n \"1739770\",\n \"1739797\",\n \"1739816\",\n \"1739819\",\n \"1739833\",\n \"1739867\",\n \"1739884\",\n \"1739919\",\n \"1739922\",\n \"1739924\",\n \"1739927\",\n \"1739931\",\n \"1739954\",\n \"1739956\",\n \"1739964\",\n \"1739973\",\n \"1739980\",\n \"1739983\",\n \"1739999\",\n \"1740003\",\n \"1740005\",\n \"1740037\",\n \"1740053\",\n \"1740060\",\n \"1740069\",\n \"1740116\",\n \"1740120\",\n \"1740133\",\n \"1740148\",\n \"1740155\",\n \"1740163\",\n \"1740174\",\n \"1740183\",\n \"1740185\",\n \"1740225\",\n \"1740246\",\n \"1740305\",\n \"1740370\",\n \"1740374\",\n \"1740389\",\n \"1740392\",\n \"1740400\",\n \"7797515\",\n \"8215326\",\n \"1740449\",\n \"1740469\",\n \"1740482\",\n \"1740518\",\n \"1740524\",\n \"1740533\",\n \"1740567\",\n \"1740570\",\n \"1740586\",\n \"1740623\",\n \"8094357\",\n \"1740762\",\n \"1740797\",\n \"1740828\",\n \"1741056\",\n \"12259151\",\n \"1741074\",\n \"9826405\",\n \"1741084\",\n \"1741130\",\n \"1741131\",\n \"1741147\",\n \"1741253\",\n \"1741258\",\n \"1741324\",\n \"1741340\",\n \"1741341\",\n \"1741361\",\n \"1741368\",\n \"4530151\",\n \"8345820\",\n \"1741398\",\n \"1741400\",\n \"11906255\",\n \"5103061\",\n \"5103066\",\n \"5771357\",\n \"1741545\",\n \"1741551\",\n \"10250474\",\n \"10709446\",\n \"10776625\",\n \"10838422\",\n \"10869347\",\n \"1741590\",\n \"1741593\",\n \"1741615\",\n \"1741633\",\n \"1741634\",\n \"1741667\",\n \"1741719\",\n \"1741747\",\n \"1741752\",\n \"1741756\",\n \"1741765\",\n \"4530424\",\n \"1741812\",\n \"1741818\",\n \"1741820\",\n \"1741823\",\n \"1741824\",\n \"1741826\",\n \"9880932\",\n \"10807169\",\n \"11093909\",\n \"1742081\",\n \"1742089\",\n \"1742091\",\n \"1742106\",\n \"1742121\",\n \"1742142\",\n \"1742150\",\n \"1742168\",\n \"1742178\",\n \"1742180\",\n \"1742185\",\n \"1742198\",\n \"1742203\",\n \"1742214\",\n \"1742239\",\n \"1742241\",\n \"1742260\",\n \"1742263\",\n \"1742268\",\n \"1742272\",\n \"1742273\",\n \"1742287\",\n \"1742293\",\n \"1742304\",\n \"1742310\",\n \"1742335\",\n \"1742346\",\n \"1742402\",\n \"10000103\",\n \"10044107\",\n \"10137001\",\n \"10194727\",\n \"10395101\",\n \"10695966\",\n \"11508404\",\n \"11899754\",\n \"5103394\",\n \"5103451\",\n \"5103502\",\n \"5103613\",\n \"5103736\",\n \"5103948\",\n \"5771350\",\n \"7975250\",\n \"9849625\",\n \"9885192\",\n \"1743182\",\n \"1743184\",\n \"1743196\",\n \"8313553\",\n \"10534945\",\n \"1743319\",\n \"1743323\",\n \"4707896\",\n \"4707900\",\n \"10095278\",\n \"10134865\",\n \"11923027\",\n \"5103998\",\n \"7661023\",\n \"11846897\",\n \"1743453\",\n \"1743461\",\n \"1743475\",\n \"7877231\",\n \"10073044\",\n \"10295171\",\n \"10365884\",\n \"10388627\",\n \"10446580\",\n \"10539598\",\n \"12197284\",\n \"1743532\",\n \"1743588\",\n \"1743604\",\n \"1743613\",\n \"5104056\",\n \"5104063\",\n \"5104088\",\n \"5104093\",\n \"5104116\",\n \"6097235\",\n \"9051888\",\n \"9958147\",\n \"9971153\",\n \"1743641\",\n \"1743643\",\n \"1743653\",\n \"1743657\",\n \"1743658\",\n \"1743663\",\n \"1743680\",\n \"1743694\",\n \"1743710\",\n \"1743714\",\n \"4530214\",\n \"1743730\",\n \"1743768\",\n \"1743775\",\n \"1743782\",\n \"4529900\",\n \"4529908\",\n \"4529915\",\n \"1743825\",\n \"1743828\",\n \"1743838\",\n \"1743855\",\n \"1743856\",\n \"1743862\",\n \"1743867\",\n \"1743898\",\n \"10205587\",\n \"10450442\",\n \"1743998\",\n \"1744071\",\n \"10271464\",\n \"1744130\",\n \"1744136\",\n \"1744180\",\n \"5104157\",\n \"1744212\",\n \"1744224\",\n \"4530632\",\n \"1744416\",\n \"12276630\",\n \"1744498\",\n \"1744526\",\n \"1744542\",\n \"9860684\",\n \"9953708\",\n \"1744588\",\n \"1744593\",\n \"9867379\",\n \"1744693\",\n \"1744699\",\n \"1744700\",\n \"1744709\",\n \"1744714\",\n \"1744724\",\n \"1744728\",\n \"1744731\",\n \"1744739\",\n \"1744742\",\n \"1744748\",\n \"1744763\",\n \"1744777\",\n \"1744782\",\n \"1744789\",\n \"1744808\",\n \"1744810\",\n \"1744860\",\n \"1744896\",\n \"1744901\",\n \"7964262\",\n \"1744949\",\n \"1744953\",\n \"1744998\",\n \"1745013\",\n \"1745019\",\n \"1745022\",\n \"1745079\",\n \"10844862\",\n \"1745131\",\n \"1745307\",\n \"9586705\",\n \"10483734\",\n \"1745558\",\n \"1745561\",\n \"1745579\",\n \"1745600\",\n \"1745606\",\n \"1745630\",\n \"1745634\",\n \"1745636\",\n \"1745643\",\n \"1745659\",\n \"1745666\",\n \"1745669\",\n \"1745675\",\n \"1745676\",\n \"1745678\",\n \"1745705\",\n \"1745724\",\n \"1745725\",\n \"1745729\",\n \"1745737\",\n \"1745746\",\n \"1745756\",\n \"1745761\",\n \"1745762\",\n \"1745771\",\n \"1745781\",\n \"1745787\",\n \"1745788\",\n \"1745814\",\n \"1745816\",\n \"1745827\",\n \"1745830\",\n \"8162538\",\n \"8369868\",\n \"9991710\",\n \"1745895\",\n \"1745925\",\n \"1745947\",\n \"1745952\",\n \"1745957\",\n \"1746000\",\n \"10593489\",\n \"1746027\",\n \"1746068\",\n \"8424972\",\n \"1746174\",\n \"1746327\",\n \"1746413\",\n \"1746440\",\n \"1746462\",\n \"1746512\",\n \"1746586\",\n \"1746613\",\n \"1746644\",\n \"1746666\",\n \"1746689\",\n \"1746695\",\n \"1746714\",\n \"1746751\",\n \"1746754\",\n \"1746763\",\n \"1746774\",\n \"1746775\",\n \"1746831\",\n \"1746832\",\n \"1746856\",\n \"1746859\",\n \"1746876\",\n \"1746881\",\n \"1746898\",\n \"1746910\",\n \"1746927\",\n \"1746949\",\n \"4302199\",\n \"4302202\",\n \"4707848\",\n \"1747024\",\n \"1747050\",\n \"1747068\",\n \"1747140\",\n \"1747141\",\n \"1747147\",\n \"1747150\",\n \"1747155\",\n \"1747160\",\n \"1747161\",\n \"1747163\",\n \"1747166\",\n \"1747171\",\n \"1747188\",\n \"1747189\",\n \"10046698\",\n \"10442122\",\n \"12066849\",\n \"12107129\",\n \"12126779\",\n \"1747196\",\n \"9040133\",\n \"9896144\",\n \"1747215\",\n \"1747222\",\n \"5104442\",\n \"6219423\",\n \"10380465\",\n \"10445629\",\n \"10446898\",\n \"10481441\",\n \"10503464\",\n \"10547716\",\n \"10776919\",\n \"12223349\",\n \"1747523\",\n \"10021059\",\n \"10023049\",\n \"10080502\",\n \"10358334\",\n \"10476233\",\n \"1747639\",\n \"1747672\",\n \"1747738\",\n \"1747740\",\n \"1747814\",\n \"4530138\",\n \"1747914\",\n \"1747924\",\n \"5104558\",\n \"10355898\",\n \"1748103\",\n \"1748109\",\n \"1748148\",\n \"1748149\",\n \"1748151\",\n \"1748152\",\n \"1748203\",\n \"1748321\",\n \"5104597\",\n \"6097234\",\n \"7588222\",\n \"9242559\",\n \"1748425\",\n \"1748442\",\n \"1748456\",\n \"1748473\",\n \"1748486\",\n \"1748518\",\n \"9176043\",\n \"1748605\",\n \"1748648\",\n \"1748661\",\n \"1748720\",\n \"1748751\",\n \"10185271\",\n \"5104641\",\n \"9952043\",\n \"8691947\",\n \"10302660\",\n \"10530383\",\n \"9909775\",\n \"10580256\",\n \"9911298\",\n \"9948031\",\n \"10606887\",\n \"10624577\",\n \"10002059\",\n \"8734154\",\n \"10153630\",\n \"10549715\",\n \"12057008\",\n \"8843927\",\n \"10236521\",\n \"10462612\",\n \"11688440\",\n \"5103083\",\n \"5103100\",\n \"5103118\",\n \"5103121\",\n \"5103154\",\n \"5103166\",\n \"5103176\",\n \"5103181\",\n \"5103183\",\n \"5103185\",\n \"5103201\",\n \"5103227\",\n \"5771227\",\n \"5771229\",\n \"5771230\",\n \"5771232\",\n \"5771236\",\n \"5771239\",\n \"5771241\",\n \"5771243\",\n \"5771249\",\n \"5771255\",\n \"5771256\",\n \"5771258\",\n \"5771259\",\n \"9023222\",\n \"1738196\",\n \"1743651\",\n \"10545267\",\n \"1831775\",\n \"1831780\",\n \"10310599\",\n \"10346267\",\n \"4525500\",\n \"4525503\",\n \"4525505\",\n \"4525510\",\n \"4525530\",\n \"4525540\",\n \"4525547\",\n \"4525557\",\n \"4525562\",\n \"10407953\",\n \"1935498\",\n \"4299071\",\n \"8345567\",\n \"9457324\",\n \"9622955\",\n \"1936026\",\n \"1936810\",\n \"1936859\",\n \"1934172\",\n \"5138967\",\n \"5138984\",\n \"1920844\",\n \"1920851\",\n \"1920864\",\n \"1920889\",\n \"1920892\",\n \"1920900\",\n \"1920923\",\n \"10159697\",\n \"10707501\",\n \"9916153\",\n \"1920957\",\n \"1920991\",\n \"1920996\",\n \"1921009\",\n \"1921010\",\n \"1921021\",\n \"1921040\",\n \"1921044\",\n \"7346426\",\n \"1921053\",\n \"1921055\",\n \"1921064\",\n \"10581870\",\n \"10825466\",\n \"1921092\",\n \"1921093\",\n \"10657453\",\n \"1921123\",\n \"1921150\",\n \"1921163\",\n \"1921239\",\n \"1921240\",\n \"1921247\",\n \"1921248\",\n \"1921255\",\n \"1921262\",\n \"1921263\",\n \"1921300\",\n \"10556522\",\n \"1921466\",\n \"1921521\",\n \"1921590\",\n \"7387466\",\n \"1921633\",\n \"1921650\",\n \"7346430\",\n \"5138069\",\n \"1921897\",\n \"1921910\",\n \"8825450\",\n \"1922038\",\n \"1922039\",\n \"1922041\",\n \"1922044\",\n \"1922049\",\n \"1922057\",\n \"10858809\",\n \"11374171\",\n \"11378618\",\n \"1922063\",\n \"1922064\",\n \"1922085\",\n \"1922111\",\n \"1922143\",\n \"1922163\",\n \"1922197\",\n \"1922219\",\n \"1922223\",\n \"1922244\",\n \"1922285\",\n \"1922288\",\n \"1922291\",\n \"10384044\",\n \"10442031\",\n \"10854079\",\n \"9904499\",\n \"1922311\",\n \"1922343\",\n \"8016522\",\n \"1922455\",\n \"1922468\",\n \"5138200\",\n \"1922572\",\n \"1922584\",\n \"4535092\",\n \"10278292\",\n \"1922637\",\n \"1922676\",\n \"1922679\",\n \"1922689\",\n \"1922694\",\n \"1922701\",\n \"8782891\",\n \"1922739\",\n \"1922745\",\n \"1922771\",\n \"1922849\",\n \"1922851\",\n \"1922865\",\n \"1922867\",\n \"1922868\",\n \"1922889\",\n \"1922890\",\n \"1922937\",\n \"5138257\",\n \"1922994\",\n \"1923019\",\n \"1923037\",\n \"12165672\",\n \"5138298\",\n \"5138387\",\n \"5138492\",\n \"5138543\",\n \"5138561\",\n \"5138602\",\n \"5714679\",\n \"5714680\",\n \"5714689\",\n \"9002107\",\n \"1923458\",\n \"1923465\",\n \"1923473\",\n \"1923491\",\n \"1923498\",\n \"1923505\",\n \"8913017\",\n \"1923525\",\n \"1923649\",\n \"1923650\",\n \"1923651\",\n \"1923668\",\n \"1923678\",\n \"1923679\",\n \"1923744\",\n \"1923782\",\n \"4708972\",\n \"4708973\",\n \"4708977\",\n \"1923796\",\n \"1923809\",\n \"1923883\",\n \"1923917\",\n \"1923997\",\n \"1924044\",\n \"1924050\",\n \"1924057\",\n \"1924077\",\n \"1924082\",\n \"1924097\",\n \"1924106\",\n \"1924176\",\n \"1924193\",\n \"12174634\",\n \"12185456\",\n \"12188086\",\n \"12205404\",\n \"12212066\",\n \"12222885\",\n \"12229400\",\n \"12233602\",\n \"12250854\",\n \"12257418\",\n \"12258984\",\n \"12265590\",\n \"1924223\",\n \"1924232\",\n \"5138681\",\n \"1924298\",\n \"1924323\",\n \"10656713\",\n \"1924362\",\n \"1924390\",\n \"1924392\",\n \"1924417\",\n \"1924429\",\n \"8023645\",\n \"1924458\",\n \"1924513\",\n \"1924518\",\n \"1924521\",\n \"8951523\",\n \"1924558\",\n \"1924713\",\n \"10436850\",\n \"1924754\",\n \"8837974\",\n \"8840017\",\n \"8992718\",\n \"9157410\",\n \"9478718\",\n \"1924759\",\n \"1924770\",\n \"5138701\",\n \"11470119\",\n \"1924867\",\n \"1925221\",\n \"1925233\",\n \"7354189\",\n \"4535172\",\n \"1925381\",\n \"1925410\",\n \"10120854\",\n \"10307383\",\n \"10411472\",\n \"1925429\",\n \"1925454\",\n \"1925458\",\n \"1925498\",\n \"1925500\",\n \"1925501\",\n \"1925509\",\n \"1925515\",\n \"4300384\",\n \"4300393\",\n \"4300399\",\n \"8389961\",\n \"8904480\",\n \"1925543\",\n \"1925555\",\n \"4708984\",\n \"1925609\",\n \"1925615\",\n \"1925628\",\n \"1925676\",\n \"1925679\",\n \"1925693\",\n \"1925694\",\n \"1925711\",\n \"1925731\",\n \"1925743\",\n \"5138732\",\n \"5138743\",\n \"5806391\",\n \"1925801\",\n \"12195040\",\n \"1925877\",\n \"1925918\",\n \"1925922\",\n \"4300000\",\n \"4300011\",\n \"4300012\",\n \"1925962\",\n \"12219036\",\n \"1926001\",\n \"1926009\",\n \"11797637\",\n \"1926054\",\n \"9816676\",\n \"1926324\",\n \"1926385\",\n \"1926436\",\n \"1926437\",\n \"1926446\",\n \"1926448\",\n \"1926456\",\n \"1926460\",\n \"1926530\",\n \"1926531\",\n \"1926539\",\n \"1926546\",\n \"1926550\",\n \"1926574\",\n \"4300259\",\n \"5883255\",\n \"7390086\",\n \"1926593\",\n \"1926611\",\n \"10116946\",\n \"10361239\",\n \"10606547\",\n \"1926722\",\n \"1926800\",\n \"1926817\",\n \"1926823\",\n \"1926834\",\n \"1926861\",\n \"10087308\",\n \"11008182\",\n \"11508257\",\n \"11543078\",\n \"1926972\",\n \"1927025\",\n \"1927034\",\n \"1927217\",\n \"1927219\",\n \"1927242\",\n \"1927272\",\n \"1927274\",\n \"1927284\",\n \"4709107\",\n \"4709111\",\n \"5883052\",\n \"7408690\",\n \"8322165\",\n \"9994384\",\n \"1927301\",\n \"1927302\",\n \"1927313\",\n \"10517500\",\n \"1927348\",\n \"1927393\",\n \"1927439\",\n \"1927445\",\n \"1927633\",\n \"1927707\",\n \"1927717\",\n \"5139026\",\n \"5139029\",\n \"5714747\",\n \"5714755\",\n \"5714788\",\n \"5882965\",\n \"7680748\",\n \"1927894\",\n \"1927895\",\n \"1927897\",\n \"1927900\",\n \"5139034\",\n \"1927909\",\n \"11667997\",\n \"1927943\",\n \"1927955\",\n \"1927979\",\n \"1927988\",\n \"1927992\",\n \"1927996\",\n \"1928009\",\n \"4300406\",\n \"1928018\",\n \"4708927\",\n \"1928070\",\n \"1928076\",\n \"1928214\",\n \"1928215\",\n \"8846776\",\n \"1928248\",\n \"5139040\",\n \"5139050\",\n \"1928349\",\n \"1928361\",\n \"1928376\",\n \"1928382\",\n \"1928389\",\n \"1928419\",\n \"5139064\",\n \"5139156\",\n \"1928584\",\n \"1928589\",\n \"1928628\",\n \"5139188\",\n \"5139201\",\n \"1928746\",\n \"1928754\",\n \"1928829\",\n \"1928849\",\n \"1928908\",\n \"1928915\",\n \"4709030\",\n \"9856663\",\n \"1928923\",\n \"1928945\",\n \"1928960\",\n \"1929046\",\n \"1929049\",\n \"1929059\",\n \"1929129\",\n \"11720834\",\n \"1929270\",\n \"1929402\",\n \"1929659\",\n \"1929697\",\n \"5139309\",\n \"5139339\",\n \"5139346\",\n \"5139357\",\n \"5139524\",\n \"5139540\",\n \"5139578\",\n \"5139673\",\n \"5139700\",\n \"5714618\",\n \"5792092\",\n \"8356768\",\n \"1929772\",\n \"1929962\",\n \"1929966\",\n \"1930079\",\n \"1930110\",\n \"1930146\",\n \"1930167\",\n \"1930178\",\n \"1930179\",\n \"1930181\",\n \"1930183\",\n \"1930263\",\n \"1930270\",\n \"1930288\",\n \"1930289\",\n \"1930331\",\n \"1930361\",\n \"1930391\",\n \"1930410\",\n \"1930422\",\n \"1930451\",\n \"1930466\",\n \"1930481\",\n \"1930539\",\n \"1930563\",\n \"1930581\",\n \"1930621\",\n \"1930653\",\n \"1930654\",\n \"1930660\",\n \"1930678\",\n \"1930728\",\n \"1930772\",\n \"1930779\",\n \"1930830\",\n \"1930832\",\n \"1930904\",\n \"1930916\",\n \"1930923\",\n \"1930931\",\n \"1930935\",\n \"4535106\",\n \"1930954\",\n \"1930968\",\n \"1931046\",\n \"1931109\",\n \"1931116\",\n \"1931119\",\n \"1931122\",\n \"1931126\",\n \"1931132\",\n \"8643155\",\n \"1931148\",\n \"1931179\",\n \"1931189\",\n \"5139864\",\n \"1931310\",\n \"1931403\",\n \"1931437\",\n \"1931509\",\n \"1931553\",\n \"1931561\",\n \"5734268\",\n \"7346434\",\n \"1931655\",\n \"1931656\",\n \"1931706\",\n \"1931729\",\n \"1931735\",\n \"1931779\",\n \"1931784\",\n \"1931787\",\n \"1931788\",\n \"5139897\",\n \"5139898\",\n \"5139908\",\n \"5139909\",\n \"5139914\",\n \"5139915\",\n \"1931889\",\n \"1931906\",\n \"1931908\",\n \"1931943\",\n \"1931956\",\n \"1931958\",\n \"1931979\",\n \"1931997\",\n \"1932020\",\n \"4709051\",\n \"1932043\",\n \"10113190\",\n \"10357476\",\n \"10570752\",\n \"11417741\",\n \"11802190\",\n \"1932056\",\n \"1932159\",\n \"1932166\",\n \"1932172\",\n \"1932175\",\n \"1932177\",\n \"1932189\",\n \"1932206\",\n \"1932246\",\n \"1932273\",\n \"1932287\",\n \"1932302\",\n \"4709095\",\n \"1932332\",\n \"1932354\",\n \"4708995\",\n \"8833509\",\n \"1932386\",\n \"1932393\",\n \"1932406\",\n \"1932409\",\n \"1932411\",\n \"1932414\",\n \"1932417\",\n \"1932428\",\n \"4300277\",\n \"4300363\",\n \"1932473\",\n \"1932517\",\n \"1932551\",\n \"11636481\",\n \"1932563\",\n \"7346444\",\n \"8177775\",\n \"1932576\",\n \"1932580\",\n \"1932607\",\n \"1932629\",\n \"5139954\",\n \"5139990\",\n \"5140006\",\n \"6132685\",\n \"1932751\",\n \"1932752\",\n \"1932753\",\n \"1932812\",\n \"1932814\",\n \"1932863\",\n \"1932879\",\n \"1932882\",\n \"1932908\",\n \"4709133\",\n \"1932960\",\n \"1932976\",\n \"5140033\",\n \"5140054\",\n \"5140056\",\n \"5140063\",\n \"5806412\",\n \"1933028\",\n \"1933044\",\n \"1933084\",\n \"4535162\",\n \"1933260\",\n \"5140214\",\n \"5140244\",\n \"5140436\",\n \"5140443\",\n \"5772702\",\n \"5772749\",\n \"7634721\",\n \"7664111\",\n \"9954885\",\n \"1933583\",\n \"1933647\",\n \"1933649\",\n \"7346407\",\n \"1933679\",\n \"1933793\",\n \"1933844\",\n \"1933845\",\n \"5140534\",\n \"5140561\",\n \"1933998\",\n \"1934187\",\n \"1934188\",\n \"1934192\",\n \"1934211\",\n \"1934213\",\n \"1934221\",\n \"1935363\",\n \"1935372\",\n \"1935377\",\n \"1935405\",\n \"1935408\",\n \"1935410\",\n \"1935454\",\n \"1935459\",\n \"1935853\",\n \"1935869\",\n \"1935872\",\n \"1935878\",\n \"1935884\",\n \"1935888\",\n \"1935899\",\n \"1935901\",\n \"1935904\",\n \"1935912\",\n \"1935916\",\n \"1935925\",\n \"1935931\",\n \"1935935\",\n \"10176954\",\n \"10573187\",\n \"9867272\",\n \"9960318\",\n \"5139928\",\n \"1926166\",\n \"1926260\",\n \"5138841\",\n \"5138921\",\n \"5138929\",\n \"7964910\",\n \"4300268\",\n \"9469139\",\n \"7346417\",\n \"10068544\",\n \"9975698\",\n \"10879371\",\n \"11874998\",\n \"4709102\",\n \"9156458\",\n \"4709147\",\n \"1933095\",\n \"1933126\",\n \"1933138\",\n \"1933163\",\n \"1933204\",\n \"11554226\",\n \"1924494\",\n \"11055981\",\n \"1751980\",\n \"1751986\",\n \"1752034\",\n \"9623220\",\n \"1752109\",\n \"1752111\",\n \"1752161\",\n \"9776414\",\n \"9941073\",\n \"5734556\",\n \"1752281\",\n \"1752285\",\n \"1752286\",\n \"1752327\",\n \"1752373\",\n \"1752383\",\n \"1752477\",\n \"1752483\",\n \"1752492\",\n \"1752494\",\n \"1752534\",\n \"1752536\",\n \"1752537\",\n \"1752539\",\n \"1752545\",\n \"1752547\",\n \"1752603\",\n \"1752651\",\n \"1752749\",\n \"1752758\",\n \"1752775\",\n \"1752805\",\n \"1752825\",\n \"1752832\",\n \"1752849\",\n \"1752894\",\n \"1752903\",\n \"1752923\",\n \"1752946\",\n \"1752947\",\n \"10376685\",\n \"1753081\",\n \"1753105\",\n \"1753106\",\n \"1753111\",\n \"11507608\",\n \"5105365\",\n \"5105367\",\n \"5105369\",\n \"5105376\",\n \"5105379\",\n \"5105380\",\n \"1753215\",\n \"1753395\",\n \"5105447\",\n \"5105458\",\n \"5105467\",\n \"5105469\",\n \"5105491\",\n \"5105508\",\n \"5105547\",\n \"5105553\",\n \"5105560\",\n \"5105570\",\n \"5105584\",\n \"1753432\",\n \"1753435\",\n \"1753461\",\n \"11014495\",\n \"1753603\",\n \"1753604\",\n \"1753636\",\n \"5734560\",\n \"1753661\",\n \"1753668\",\n \"1753759\",\n \"5105588\",\n \"10955682\",\n \"1753833\",\n \"1753864\",\n \"1753871\",\n \"1753902\",\n \"1753906\",\n \"1753922\",\n \"1753929\",\n \"5105603\",\n \"10932946\",\n \"10515719\",\n \"4522322\",\n \"7345843\",\n \"10413588\",\n \"10514620\",\n \"6133481\",\n \"10368234\",\n \"9880359\",\n \"10017342\",\n \"10203493\",\n \"9959898\",\n \"10560849\",\n \"5105336\",\n \"5105339\",\n \"5105344\",\n \"5105352\",\n \"5806127\",\n \"5105259\",\n \"10795141\",\n \"5137511\",\n \"5137512\",\n \"12181811\",\n \"12226416\",\n \"12251247\",\n \"1919125\",\n \"1919128\",\n \"1919129\",\n \"1919130\",\n \"1919145\",\n \"1919146\",\n \"1919149\",\n \"11673056\",\n \"1919151\",\n \"1919160\",\n \"1919161\",\n \"1919173\",\n \"10988070\",\n \"1919176\",\n \"1919181\",\n \"1919194\",\n \"1919210\",\n \"1919213\",\n \"1919214\",\n \"1919221\",\n \"1919223\",\n \"1919233\",\n \"1919235\",\n \"1919239\",\n \"1919245\",\n \"1919267\",\n \"1919277\",\n \"1919282\",\n \"1919287\",\n \"1919289\",\n \"5137540\",\n \"1919316\",\n \"1919317\",\n \"1919320\",\n \"1919326\",\n \"1919327\",\n \"1919328\",\n \"1919330\",\n \"1919333\",\n \"1919338\",\n \"4535280\",\n \"4535285\",\n \"7981372\",\n \"1919340\",\n \"1919342\",\n \"1919344\",\n \"1919346\",\n \"1919348\",\n \"1919381\",\n \"1919407\",\n \"1919412\",\n \"1919419\",\n \"1919421\",\n \"1919432\",\n \"1919438\",\n \"1919444\",\n \"1919534\",\n \"1919540\",\n \"1919551\",\n \"1919564\",\n \"1919581\",\n \"1919589\",\n \"1919626\",\n \"1919635\",\n \"1919646\",\n \"1919649\",\n \"1919652\",\n \"1919653\",\n \"1919656\",\n \"4701298\",\n \"4701336\",\n \"7661785\",\n \"1919660\",\n \"1919663\",\n \"1919665\",\n \"5137553\",\n \"1919697\",\n \"1919698\",\n \"1919700\",\n \"1919701\",\n \"1919702\",\n \"1919703\",\n \"1919705\",\n \"1919706\",\n \"1919711\",\n \"1919712\",\n \"1919716\",\n \"1919719\",\n \"1919720\",\n \"1919728\",\n \"1919731\",\n \"1919741\",\n \"1919744\",\n \"1919756\",\n \"1919758\",\n \"1919762\",\n \"1919924\",\n \"1919929\",\n \"1919930\",\n \"10703948\",\n \"1919937\",\n \"1919939\",\n \"1919943\",\n \"1919945\",\n \"1919947\",\n \"1919949\",\n \"1919951\",\n \"1919966\",\n \"5137747\",\n \"5137748\",\n \"1920181\",\n \"1920192\",\n \"1920237\",\n \"1920247\",\n \"1920258\",\n \"1920259\",\n \"5137790\",\n \"5137791\",\n \"5137799\",\n \"5137800\",\n \"5137802\",\n \"5137803\",\n \"1920266\",\n \"4701136\",\n \"1920275\",\n \"5137808\",\n \"5137817\",\n \"5137819\",\n \"5137823\",\n \"5137827\",\n \"5137828\",\n \"5137832\",\n \"5137833\",\n \"5137842\",\n \"5137847\",\n \"5137849\",\n \"5137850\",\n \"5137851\",\n \"5137854\",\n \"5137858\",\n \"5714819\",\n \"5805954\",\n \"1920348\",\n \"1920349\",\n \"1920353\",\n \"1920356\",\n \"1920357\",\n \"1920359\",\n \"1920362\",\n \"1920363\",\n \"1920369\",\n \"1920370\",\n \"1920374\",\n \"1920377\",\n \"1920378\",\n \"1920379\",\n \"1920381\",\n \"1920390\",\n \"1920395\",\n \"1920401\",\n \"1920404\",\n \"1920405\",\n \"4699245\",\n \"5137861\",\n \"5137863\",\n \"1920426\",\n \"1920431\",\n \"1920437\",\n \"1920454\",\n \"1920461\",\n \"1920463\",\n \"1920467\",\n \"1920469\",\n \"1920472\",\n \"1920491\",\n \"1920494\",\n \"1920496\",\n \"1920498\",\n \"1920502\",\n \"1920506\",\n \"1920509\",\n \"1920512\",\n \"4535307\",\n \"5137882\",\n \"5137889\",\n \"5137890\",\n \"5137891\",\n \"5137894\",\n \"5804932\",\n \"5805036\",\n \"5805407\",\n \"1920515\",\n \"1920534\",\n \"1920535\",\n \"1920538\",\n \"1920541\",\n \"1920552\",\n \"5137902\",\n \"5137903\",\n \"5137908\",\n \"5137912\",\n \"5804895\",\n \"1920571\",\n \"1920574\",\n \"1920581\",\n \"1920586\",\n \"5137920\",\n \"5137926\",\n \"5137929\",\n \"5137932\",\n \"5137935\",\n \"5137938\",\n \"5137945\",\n \"5137946\",\n \"5137949\",\n \"5137955\",\n \"1920691\",\n \"5137969\",\n \"1920707\",\n \"1920709\",\n \"1920711\",\n \"1920712\",\n \"1920718\",\n \"4535271\",\n \"5137988\",\n \"5137996\",\n \"5137998\",\n \"1920786\",\n \"1920795\",\n \"1920803\",\n \"1920809\",\n \"1920810\",\n \"1920815\",\n \"1920816\",\n \"5804166\",\n \"5714914\",\n \"5137573\",\n \"5137578\",\n \"5137582\",\n \"5137588\",\n \"5137593\",\n \"5137595\",\n \"5137601\",\n \"5137605\",\n \"5137608\",\n \"5137612\",\n \"5137615\",\n \"5137626\",\n \"5137636\",\n \"5137659\",\n \"5137663\",\n \"5137664\",\n \"5137672\",\n \"5137674\",\n \"5137677\",\n \"5137679\",\n \"5137682\",\n \"5137689\",\n \"5137693\",\n \"5137694\",\n \"5137695\",\n \"5137700\",\n \"5137706\",\n \"5137708\",\n \"5137711\",\n \"5137714\",\n \"5803588\",\n \"8203812\",\n \"12191141\",\n \"12206386\",\n \"12234544\",\n \"12236627\",\n \"1920621\",\n \"1920218\",\n \"5137763\",\n \"7207679\",\n \"1748890\",\n \"1748922\",\n \"1748942\",\n \"1749050\",\n \"1749070\",\n \"1749124\",\n \"1749164\",\n \"1749287\",\n \"1749449\",\n \"1749529\",\n \"1749531\",\n \"1749661\",\n \"1749664\",\n \"1749713\",\n \"1749744\",\n \"1749760\",\n \"1749846\",\n \"1749869\",\n \"1749908\",\n \"1749921\",\n \"1749929\",\n \"1749936\",\n \"1749948\",\n \"1749954\",\n \"1749959\",\n \"1749975\",\n \"1750051\",\n \"1750076\",\n \"1750097\",\n \"1750131\",\n \"1750143\",\n \"1750159\",\n \"1750166\",\n \"1750288\",\n \"1750326\",\n \"5104772\",\n \"5104781\",\n \"5104797\",\n \"5104815\",\n \"5104822\",\n \"5104829\",\n \"5104882\",\n \"5104891\",\n \"5104903\",\n \"5104927\",\n \"5104940\",\n \"5104948\",\n \"5104986\",\n \"5105031\",\n \"5105054\",\n \"5105057\",\n \"5105068\",\n \"5105081\",\n \"5105088\",\n \"5105106\",\n \"5105120\",\n \"5105124\",\n \"5105158\",\n \"5976947\",\n \"9942354\",\n \"1750924\",\n \"1750934\",\n \"1751024\",\n \"1751051\",\n \"1751146\",\n \"5104759\",\n \"1751163\",\n \"1749591\",\n \"1749596\",\n \"1749608\",\n \"1749635\",\n \"1749656\",\n \"8741260\",\n \"11840028\",\n \"1758003\",\n \"1828310\",\n \"1828317\",\n \"9882683\",\n \"1735532\",\n \"9451208\",\n \"4527339\",\n \"4527342\",\n \"1758440\",\n \"1758441\",\n \"1758461\",\n \"1758596\",\n \"1758602\",\n \"1731826\",\n \"1731837\",\n \"1731860\",\n \"1731862\",\n \"1855235\",\n \"1855241\",\n \"1868837\",\n \"1868884\",\n \"1868952\",\n \"1869043\",\n \"1869057\",\n \"1869178\",\n \"1869187\",\n \"1869238\",\n \"1869278\",\n \"1869286\",\n \"11794362\",\n \"1992547\",\n \"9943941\",\n \"10118678\",\n \"1962159\",\n \"1962162\",\n \"9875141\",\n \"1970460\",\n \"1970463\",\n \"1970473\",\n \"1970485\",\n \"1963095\",\n \"1963096\",\n \"1964995\",\n \"1964996\",\n \"10295646\",\n \"1973530\",\n \"1954236\",\n \"11826016\",\n \"5143303\",\n \"5143311\",\n \"5143315\",\n \"1954490\",\n \"1954496\",\n \"1954514\",\n \"1954522\",\n \"1954563\",\n \"5143338\",\n \"5143354\",\n \"5143368\",\n \"5143380\",\n \"5143384\",\n \"5143437\",\n \"5143453\",\n \"5143477\",\n \"5143506\",\n \"5143511\",\n \"5143525\",\n \"5143575\",\n \"5734335\",\n \"1954891\",\n \"1954911\",\n \"10634980\",\n \"5143586\",\n \"9213204\",\n \"1954930\",\n \"1954933\",\n \"1954992\",\n \"1954993\",\n \"10217455\",\n \"1955039\",\n \"1955093\",\n \"1955153\",\n \"1955199\",\n \"1955202\",\n \"1955271\",\n \"1955272\",\n \"1955318\",\n \"6133648\",\n \"1955389\",\n \"1955413\",\n \"1955416\",\n \"1955422\",\n \"1955479\",\n \"1955484\",\n \"1955497\",\n \"1955498\",\n \"5143651\",\n \"1955552\",\n \"1955581\",\n \"6133676\",\n \"1955694\",\n \"1955725\",\n \"1955736\",\n \"1955737\",\n \"1955743\",\n \"1955745\",\n \"10560674\",\n \"11720357\",\n \"1955753\",\n \"1955755\",\n \"9593393\",\n \"1955763\",\n \"1955806\",\n \"1955856\",\n \"4524588\",\n \"10003902\",\n \"10048667\",\n \"10062202\",\n \"10075732\",\n \"10132475\",\n \"10177276\",\n \"10341059\",\n \"10363151\",\n \"10398979\",\n \"10434798\",\n \"10456933\",\n \"10457796\",\n \"10471477\",\n \"10528420\",\n \"10623003\",\n \"11451126\",\n \"11468089\",\n \"11638437\",\n \"1955899\",\n \"5143657\",\n \"5143675\",\n \"5143697\",\n \"5143703\",\n \"10078526\",\n \"10360329\",\n \"1956098\",\n \"1956099\",\n \"1956215\",\n \"1956309\",\n \"11690145\",\n \"1956384\",\n \"5734542\",\n \"5734543\",\n \"9234402\",\n \"10257899\",\n \"1956416\",\n \"1956440\",\n \"1956462\",\n \"1956496\",\n \"1956505\",\n \"1956510\",\n \"1956524\",\n \"1956536\",\n \"1956597\",\n \"1956599\",\n \"1956626\",\n \"1956629\",\n \"1956639\",\n \"1956710\",\n \"1956716\",\n \"8793973\",\n \"6133593\",\n \"1956897\",\n \"1956904\",\n \"4525068\",\n \"1956955\",\n \"1956958\",\n \"1956963\",\n \"1956978\",\n \"1956983\",\n \"10167252\",\n \"1957058\",\n \"1957062\",\n \"1957161\",\n \"1957174\",\n \"1957266\",\n \"1957286\",\n \"1957300\",\n \"1957333\",\n \"1957368\",\n \"1957413\",\n \"1957441\",\n \"1957460\",\n \"1957523\",\n \"1957556\",\n \"1957565\",\n \"1957570\",\n \"1957572\",\n \"1957579\",\n \"1957583\",\n \"1957611\",\n \"1957632\",\n \"1957673\",\n \"1957706\",\n \"1957718\",\n \"1957746\",\n \"1957791\",\n \"1957816\",\n \"1957822\",\n \"4524320\",\n \"8172949\",\n \"1957845\",\n \"1957852\",\n \"1957854\",\n \"1957870\",\n \"4524421\",\n \"4524424\",\n \"4524426\",\n \"8775810\",\n \"5143944\",\n \"5143947\",\n \"5143952\",\n \"1958024\",\n \"1958045\",\n \"1958049\",\n \"11554842\",\n \"1958065\",\n \"5143960\",\n \"5143964\",\n \"1958121\",\n \"1958152\",\n \"1958158\",\n \"1958163\",\n \"1958241\",\n \"1958252\",\n \"1958255\",\n \"1958259\",\n \"1958260\",\n \"1958275\",\n \"1958282\",\n \"1958290\",\n \"1958305\",\n \"1958307\",\n \"1958323\",\n \"1958324\",\n \"6544637\",\n \"1958422\",\n \"1958454\",\n \"1958463\",\n \"1958483\",\n \"5144027\",\n \"1958515\",\n \"1958528\",\n \"1959341\",\n \"1959379\",\n \"1959383\",\n \"1959395\",\n \"1959423\",\n \"1959436\",\n \"1959461\",\n \"1959467\",\n \"1959473\",\n \"1959494\",\n \"1959500\",\n \"1959543\",\n \"1959595\",\n \"1959637\",\n \"1959645\",\n \"1959652\",\n \"1959666\",\n \"1959667\",\n \"1959682\",\n \"1959735\",\n \"1959782\",\n \"1959799\",\n \"1959839\",\n \"6133552\",\n \"1959858\",\n \"1959876\",\n \"1959890\",\n \"1959898\",\n \"1959914\",\n \"1959917\",\n \"1959919\",\n \"1959934\",\n \"1959948\",\n \"9320916\",\n \"1960002\",\n \"1960004\",\n \"4702961\",\n \"10694777\",\n \"1960023\",\n \"1960090\",\n \"1960105\",\n \"1960106\",\n \"1960128\",\n \"1960166\",\n \"1960181\",\n \"1960182\",\n \"6133509\",\n \"1960201\",\n \"1960255\",\n \"1960268\",\n \"1960315\",\n \"1960411\",\n \"1960484\",\n \"5144092\",\n \"5144093\",\n \"5144115\",\n \"5144129\",\n \"1960503\",\n \"1960521\",\n \"1960524\",\n \"1960571\",\n \"1960595\",\n \"1960617\",\n \"6133518\",\n \"1960632\",\n \"1960686\",\n \"1960854\",\n \"1960940\",\n \"1960941\",\n \"1960951\",\n \"1960963\",\n \"1961013\",\n \"1961025\",\n \"1961037\",\n \"1961040\",\n \"5734344\",\n \"1961052\",\n \"1961068\",\n \"1961126\",\n \"1961155\",\n \"1961162\",\n \"7346236\",\n \"1961180\",\n \"1961190\",\n \"1961252\",\n \"4302240\",\n \"9468667\",\n \"1961361\",\n \"7741315\",\n \"1961388\",\n \"1961647\",\n \"1961718\",\n \"5144204\",\n \"10650351\",\n \"1962051\",\n \"1962076\",\n \"1962086\",\n \"1962118\",\n \"1962120\",\n \"9368382\",\n \"9592714\",\n \"1962204\",\n \"1962265\",\n \"1962268\",\n \"5144227\",\n \"5144318\",\n \"1962432\",\n \"1962434\",\n \"1962447\",\n \"1962479\",\n \"1962490\",\n \"1962516\",\n \"9812211\",\n \"10004969\",\n \"1962584\",\n \"4524568\",\n \"1962636\",\n \"1962656\",\n \"1962657\",\n \"1962659\",\n \"1962678\",\n \"1962689\",\n \"1962722\",\n \"1962727\",\n \"9264326\",\n \"1962829\",\n \"1962839\",\n \"1962841\",\n \"1962842\",\n \"1962860\",\n \"1962895\",\n \"1962900\",\n \"1962925\",\n \"1962934\",\n \"1962961\",\n \"1962972\",\n \"1962990\",\n \"1963011\",\n \"4302252\",\n \"1963052\",\n \"10084195\",\n \"5734349\",\n \"1963168\",\n \"1963201\",\n \"1963207\",\n \"1963212\",\n \"1963297\",\n \"12214993\",\n \"1963306\",\n \"5144345\",\n \"1963425\",\n \"1963433\",\n \"1963446\",\n \"1963463\",\n \"1963587\",\n \"1963619\",\n \"1963629\",\n \"1963633\",\n \"1963709\",\n \"1963710\",\n \"1963733\",\n \"1963755\",\n \"5144353\",\n \"1963782\",\n \"1963827\",\n \"1963848\",\n \"1963854\",\n \"1963874\",\n \"1963879\",\n \"1963892\",\n \"5144363\",\n \"11644349\",\n \"1964024\",\n \"1964025\",\n \"1964029\",\n \"6133500\",\n \"1964041\",\n \"1964066\",\n \"1964076\",\n \"1964113\",\n \"1964116\",\n \"1964137\",\n \"1964141\",\n \"1964143\",\n \"1964144\",\n \"1964151\",\n \"1964153\",\n \"1964155\",\n \"1964158\",\n \"1964174\",\n \"1964189\",\n \"1964191\",\n \"1964195\",\n \"1964247\",\n \"1964305\",\n \"1964316\",\n \"1964331\",\n \"1964401\",\n \"1964437\",\n \"1964471\",\n \"6133502\",\n \"1964565\",\n \"1964585\",\n \"1964637\",\n \"1964653\",\n \"1964657\",\n \"8361848\",\n \"1964698\",\n \"1964702\",\n \"1964715\",\n \"1964738\",\n \"1964836\",\n \"5144424\",\n \"5144426\",\n \"1965024\",\n \"1965038\",\n \"1965058\",\n \"1965069\",\n \"1965078\",\n \"1965100\",\n \"5880367\",\n \"6214734\",\n \"1965166\",\n \"1965197\",\n \"1965208\",\n \"1965345\",\n \"1965586\",\n \"1965640\",\n \"10184940\",\n \"10523304\",\n \"1965643\",\n \"1965649\",\n \"1965650\",\n \"9952367\",\n \"9976926\",\n \"1965671\",\n \"1965697\",\n \"1965699\",\n \"1965763\",\n \"1965777\",\n \"1965794\",\n \"1965795\",\n \"1965797\",\n \"1965805\",\n \"1965807\",\n \"1965810\",\n \"1965823\",\n \"1965825\",\n \"1965831\",\n \"1965838\",\n \"1965841\",\n \"1965861\",\n \"1965865\",\n \"1965887\",\n \"1965913\",\n \"1965996\",\n \"1966017\",\n \"5144431\",\n \"5144438\",\n \"5144457\",\n \"5144472\",\n \"9919915\",\n \"1966088\",\n \"9370070\",\n \"1966185\",\n \"1966195\",\n \"1966198\",\n \"5144499\",\n \"1966255\",\n \"1966286\",\n \"1966302\",\n \"1966310\",\n \"5734448\",\n \"10670854\",\n \"1966351\",\n \"1966358\",\n \"1966362\",\n \"1966367\",\n \"1966854\",\n \"1966886\",\n \"5144505\",\n \"5144534\",\n \"1966977\",\n \"1966978\",\n \"1967003\",\n \"1967006\",\n \"1967011\",\n \"1967025\",\n \"1967039\",\n \"1967127\",\n \"1967128\",\n \"5144543\",\n \"1967209\",\n \"1967212\",\n \"1967226\",\n \"1967240\",\n \"1967245\",\n \"9277294\",\n \"9492499\",\n \"1967265\",\n \"1967273\",\n \"1967324\",\n \"1967346\",\n \"1967433\",\n \"1967438\",\n \"1967445\",\n \"1967452\",\n \"1967590\",\n \"1967595\",\n \"1967597\",\n \"1967606\",\n \"1967672\",\n \"1967688\",\n \"5144553\",\n \"1967703\",\n \"10174909\",\n \"10268303\",\n \"10379201\",\n \"1967716\",\n \"7346240\",\n \"9833933\",\n \"1967803\",\n \"1967815\",\n \"1967873\",\n \"1968115\",\n \"1968131\",\n \"1968147\",\n \"1968182\",\n \"1968193\",\n \"1968205\",\n \"7681733\",\n \"5144554\",\n \"5144558\",\n \"5144564\",\n \"5144575\",\n \"8793278\",\n \"1968304\",\n \"1968313\",\n \"1968315\",\n \"1968321\",\n \"1968324\",\n \"1968363\",\n \"1968538\",\n \"5144583\",\n \"5144588\",\n \"5144593\",\n \"5144596\",\n \"5144597\",\n \"5144633\",\n \"1968678\",\n \"1968686\",\n \"1968730\",\n \"1968746\",\n \"1968837\",\n \"1968867\",\n \"1968942\",\n \"1968951\",\n \"11598540\",\n \"1968990\",\n \"1969104\",\n \"1969291\",\n \"1969339\",\n \"1969357\",\n \"1969463\",\n \"1969491\",\n \"1969568\",\n \"11858774\",\n \"1969581\",\n \"6133643\",\n \"1969621\",\n \"1969954\",\n \"1969958\",\n \"1969961\",\n \"1969978\",\n \"4523707\",\n \"1970034\",\n \"1970093\",\n \"1970094\",\n \"1970108\",\n \"1970119\",\n \"1970136\",\n \"1970145\",\n \"1970148\",\n \"1970150\",\n \"1970159\",\n \"10088253\",\n \"1970213\",\n \"1970227\",\n \"1970243\",\n \"1970259\",\n \"1970265\",\n \"9939530\",\n \"1970284\",\n \"1970322\",\n \"10085335\",\n \"10109201\",\n \"10505033\",\n \"10054019\",\n \"1970436\",\n \"5734405\",\n \"6133513\",\n \"7346252\",\n \"5144677\",\n \"5144691\",\n \"5144721\",\n \"5144729\",\n \"5144782\",\n \"5144787\",\n \"5144805\",\n \"5144806\",\n \"5144864\",\n \"5144870\",\n \"5144880\",\n \"5144900\",\n \"5144935\",\n \"5144936\",\n \"5144937\",\n \"5144942\",\n \"5144953\",\n \"5144976\",\n \"5145009\",\n \"5145075\",\n \"5145078\",\n \"5145079\",\n \"5145136\",\n \"5145139\",\n \"5145186\",\n \"5145238\",\n \"5145255\",\n \"5145260\",\n \"5145269\",\n \"5145396\",\n \"5145409\",\n \"5145422\",\n \"5145466\",\n \"5145468\",\n \"5145495\",\n \"5145502\",\n \"5145503\",\n \"5145521\",\n \"5145522\",\n \"5145547\",\n \"5145560\",\n \"5145624\",\n \"5145713\",\n \"5145729\",\n \"5145735\",\n \"5145842\",\n \"7700568\",\n \"7753668\",\n \"8014296\",\n \"9194811\",\n \"9627567\",\n \"1971835\",\n \"1971847\",\n \"1971852\",\n \"1971858\",\n \"1971888\",\n \"1971986\",\n \"1971995\",\n \"1971998\",\n \"1971999\",\n \"1972010\",\n \"6133516\",\n \"1972094\",\n \"1972101\",\n \"1972120\",\n \"1972185\",\n \"1972187\",\n \"1972234\",\n \"1972250\",\n \"1972278\",\n \"1972342\",\n \"1972374\",\n \"1972377\",\n \"5145870\",\n \"5145965\",\n \"5145998\",\n \"5146030\",\n \"5146038\",\n \"5146062\",\n \"5146082\",\n \"5146091\",\n \"7541913\",\n \"7624494\",\n \"7960566\",\n \"1972407\",\n \"1972434\",\n \"1972443\",\n \"1972447\",\n \"1972449\",\n \"1972454\",\n \"9558845\",\n \"4702783\",\n \"4702784\",\n \"5146179\",\n \"5146253\",\n \"1972606\",\n \"9119710\",\n \"1972613\",\n \"1972614\",\n \"1972616\",\n \"1972620\",\n \"1972631\",\n \"1972691\",\n \"5146262\",\n \"10732353\",\n \"11533770\",\n \"1972754\",\n \"1972797\",\n \"1972800\",\n \"1972806\",\n \"5146282\",\n \"1972903\",\n \"5146294\",\n \"1973146\",\n \"1973147\",\n \"1973164\",\n \"1973165\",\n \"1973171\",\n \"1973242\",\n \"1973245\",\n \"1973300\",\n \"1973323\",\n \"1973327\",\n \"1973338\",\n \"1973358\",\n \"1973393\",\n \"1973397\",\n \"1973414\",\n \"1973487\",\n \"1973493\",\n \"1973665\",\n \"1973719\",\n \"7996464\",\n \"10404426\",\n \"5146420\",\n \"5146426\",\n \"5146434\",\n \"5146440\",\n \"5146456\",\n \"5146472\",\n \"5146476\",\n \"5146483\",\n \"5146496\",\n \"5146497\",\n \"5146508\",\n \"5146510\",\n \"5146525\",\n \"5146528\",\n \"5146559\",\n \"5146566\",\n \"5146567\",\n \"5146578\",\n \"5146598\",\n \"5146599\",\n \"5146601\",\n \"5146608\",\n \"5146611\",\n \"5146651\",\n \"5146659\",\n \"5146677\",\n \"5146693\",\n \"5146719\",\n \"5146720\",\n \"5146746\",\n \"5146752\",\n \"5146762\",\n \"5146763\",\n \"5146774\",\n \"5146786\",\n \"5146805\",\n \"5146815\",\n \"5146820\",\n \"5146832\",\n \"5146833\",\n \"5146837\",\n \"5146842\",\n \"5146852\",\n \"5146856\",\n \"5146862\",\n \"5146880\",\n \"5146883\",\n \"5146894\",\n \"5146899\",\n \"5146908\",\n \"5146920\",\n \"5146927\",\n \"5146937\",\n \"5146946\",\n \"5146961\",\n \"5147002\",\n \"5147018\",\n \"5147030\",\n \"5147038\",\n \"5147039\",\n \"5147041\",\n \"5147043\",\n \"5147046\",\n \"5147058\",\n \"5147062\",\n \"5147071\",\n \"5147099\",\n \"5147109\",\n \"5147114\",\n \"5147121\",\n \"5147139\",\n \"5147145\",\n \"5147150\",\n \"5147155\",\n \"5147160\",\n \"5147165\",\n \"5147171\",\n \"5147179\",\n \"5147193\",\n \"5147208\",\n \"5147211\",\n \"5147212\",\n \"5147214\",\n \"5147225\",\n \"5147232\",\n \"5147245\",\n \"5147259\",\n \"5147287\",\n \"5147306\",\n \"5147319\",\n \"5147354\",\n \"5147395\",\n \"5147415\",\n \"5147437\",\n \"5147441\",\n \"5147478\",\n \"5147492\",\n \"5147498\",\n \"5147513\",\n \"5147516\",\n \"5147522\",\n \"5147534\",\n \"5147560\",\n \"7919880\",\n \"7988195\",\n \"8067894\",\n \"8366158\",\n \"9370933\",\n \"9469300\",\n \"9590066\",\n \"1975164\",\n \"1975198\",\n \"1975212\",\n \"1975248\",\n \"1975249\",\n \"9975134\",\n \"10018221\",\n \"10572729\",\n \"6133559\",\n \"9875420\",\n \"1975287\",\n \"5147608\",\n \"5147638\",\n \"1975341\",\n \"1975365\",\n \"11856219\",\n \"1975546\",\n \"1975553\",\n \"1975571\",\n \"1975583\",\n \"1975597\",\n \"1975607\",\n \"9477531\",\n \"1975704\",\n \"1975711\",\n \"1975722\",\n \"1975733\",\n \"1975741\",\n \"8329661\",\n \"1975793\",\n \"5715277\",\n \"5715278\",\n \"8160782\",\n \"1975805\",\n \"1975806\",\n \"10835542\",\n \"1975892\",\n \"1975897\",\n \"1975903\",\n \"1975914\",\n \"1975964\",\n \"1975979\",\n \"5734539\",\n \"9356491\",\n \"9410573\",\n \"9548993\",\n \"1976073\",\n \"8793324\",\n \"1976123\",\n \"1976142\",\n \"1976163\",\n \"1976212\",\n \"1976213\",\n \"1976224\",\n \"1976228\",\n \"1976243\",\n \"1976248\",\n \"1976255\",\n \"1976303\",\n \"1976311\",\n \"1976333\",\n \"8820198\",\n \"1976341\",\n \"1976342\",\n \"1976345\",\n \"1976462\",\n \"1976463\",\n \"1976469\",\n \"1976470\",\n \"1976483\",\n \"10118849\",\n \"9183738\",\n \"5147681\",\n \"5147703\",\n \"5147713\",\n \"6097233\",\n \"7973517\",\n \"8414310\",\n \"8955497\",\n \"1976651\",\n \"1976746\",\n \"5147794\",\n \"10089194\",\n \"1976890\",\n \"1976891\",\n \"1976928\",\n \"1976933\",\n \"1976934\",\n \"1976939\",\n \"1976941\",\n \"1976993\",\n \"1977003\",\n \"1977007\",\n \"1977054\",\n \"1977068\",\n \"4523725\",\n \"5147819\",\n \"5147827\",\n \"5147834\",\n \"5147838\",\n \"5147858\",\n \"1977182\",\n \"1977184\",\n \"1977297\",\n \"1977300\",\n \"1977350\",\n \"5147868\",\n \"5147871\",\n \"5147879\",\n \"5147883\",\n \"5147894\",\n \"5147898\",\n \"5147899\",\n \"5147909\",\n \"8951618\",\n \"5734420\",\n \"6133548\",\n \"5147917\",\n \"5147923\",\n \"5147930\",\n \"5147968\",\n \"5148043\",\n \"5148055\",\n \"5148066\",\n \"5148096\",\n \"5148097\",\n \"5148115\",\n \"5148184\",\n \"5148214\",\n \"5148223\",\n \"5769028\",\n \"1977759\",\n \"1977764\",\n \"1977767\",\n \"1977773\",\n \"5148247\",\n \"5148248\",\n \"10188228\",\n \"1977813\",\n \"1977833\",\n \"1977863\",\n \"6133582\",\n \"9617496\",\n \"1977962\",\n \"1977967\",\n \"1977971\",\n \"1978010\",\n \"1978017\",\n \"1978034\",\n \"1978045\",\n \"1978056\",\n \"1978065\",\n \"1978082\",\n \"1978114\",\n \"1978268\",\n \"1978274\",\n \"1978281\",\n \"1978282\",\n \"1978283\",\n \"1978375\",\n \"1978385\",\n \"1978398\",\n \"1978405\",\n \"1978407\",\n \"1978422\",\n \"1978424\",\n \"1978445\",\n \"9308082\",\n \"5734388\",\n \"1978464\",\n \"1978493\",\n \"1978494\",\n \"1978499\",\n \"10058263\",\n \"10626099\",\n \"1978524\",\n \"1978526\",\n \"1978529\",\n \"4524636\",\n \"4524638\",\n \"5734519\",\n \"6133560\",\n \"10712554\",\n \"4524890\",\n \"4524902\",\n \"1978671\",\n \"9243264\",\n \"5148252\",\n \"10738407\",\n \"5148264\",\n \"1978751\",\n \"1978770\",\n \"1978776\",\n \"1978789\",\n \"1978821\",\n \"5734396\",\n \"5148277\",\n \"5148280\",\n \"5806132\",\n \"10530515\",\n \"1978904\",\n \"1978915\",\n \"1978919\",\n \"1978937\",\n \"1978958\",\n \"1978959\",\n \"1978977\",\n \"1978996\",\n \"1978999\",\n \"6133546\",\n \"1979021\",\n \"1979041\",\n \"5148286\",\n \"1979222\",\n \"1979229\",\n \"1979255\",\n \"1979289\",\n \"1979308\",\n \"1979344\",\n \"1979358\",\n \"1979380\",\n \"1979427\",\n \"1979430\",\n \"1979473\",\n \"1979475\",\n \"1979501\",\n \"4702599\",\n \"4702603\",\n \"4702609\",\n \"1979521\",\n \"1979561\",\n \"1979562\",\n \"1979721\",\n \"1979726\",\n \"1979758\",\n \"1979781\",\n \"1979787\",\n \"1979801\",\n \"1979806\",\n \"1979822\",\n \"1980025\",\n \"1980035\",\n \"1980041\",\n \"1980044\",\n \"1980055\",\n \"1980063\",\n \"1980068\",\n \"1980245\",\n \"1980247\",\n \"1980250\",\n \"1980269\",\n \"1980290\",\n \"5148379\",\n \"5148394\",\n \"5148424\",\n \"5148436\",\n \"5148462\",\n \"5148475\",\n \"5148486\",\n \"5148487\",\n \"1980491\",\n \"1980505\",\n \"1980509\",\n \"1980521\",\n \"1980525\",\n \"1980532\",\n \"1980533\",\n \"1980559\",\n \"11449815\",\n \"1980659\",\n \"1980694\",\n \"10378314\",\n \"10571987\",\n \"1980811\",\n \"1980821\",\n \"1980827\",\n \"1980917\",\n \"8421569\",\n \"1981063\",\n \"6133585\",\n \"1981144\",\n \"1981160\",\n \"1981161\",\n \"1981162\",\n \"1981191\",\n \"1981202\",\n \"1981209\",\n \"1981210\",\n \"1981222\",\n \"1981252\",\n \"1981258\",\n \"1981277\",\n \"1981280\",\n \"1981281\",\n \"1981284\",\n \"1981312\",\n \"1981357\",\n \"1981457\",\n \"10860751\",\n \"11660632\",\n \"1981696\",\n \"1981718\",\n \"11173690\",\n \"10247981\",\n \"10592969\",\n \"7345811\",\n \"7345813\",\n \"1981937\",\n \"1981938\",\n \"1981951\",\n \"1981959\",\n \"1981973\",\n \"5148520\",\n \"1981998\",\n \"1982007\",\n \"1982024\",\n \"1982033\",\n \"1982043\",\n \"1982047\",\n \"1982055\",\n \"1982071\",\n \"1982072\",\n \"1982085\",\n \"1982100\",\n \"1982102\",\n \"1982103\",\n \"1982120\",\n \"1982148\",\n \"1982203\",\n \"1982221\",\n \"1982267\",\n \"1982291\",\n \"12116722\",\n \"1982406\",\n \"1982447\",\n \"1982458\",\n \"1982500\",\n \"1982525\",\n \"1982529\",\n \"1982533\",\n \"1982541\",\n \"1982542\",\n \"1982592\",\n \"1982613\",\n \"1982636\",\n \"1982671\",\n \"1982746\",\n \"1982770\",\n \"1982779\",\n \"1982780\",\n \"1982790\",\n \"1982791\",\n \"1982824\",\n \"1982838\",\n \"1982865\",\n \"1982867\",\n \"1982885\",\n \"1982898\",\n \"1982918\",\n \"1982924\",\n \"1982951\",\n \"1983000\",\n \"1983034\",\n \"1983039\",\n \"1983052\",\n \"1983062\",\n \"1983101\",\n \"1983111\",\n \"1983170\",\n \"1983260\",\n \"1983263\",\n \"1983288\",\n \"1983387\",\n \"1983393\",\n \"1983434\",\n \"1983441\",\n \"1983442\",\n \"1983491\",\n \"1983525\",\n \"1983528\",\n \"1983548\",\n \"1983558\",\n \"1983648\",\n \"1983705\",\n \"1983709\",\n \"1983755\",\n \"1983756\",\n \"1983799\",\n \"1983888\",\n \"1983896\",\n \"1983922\",\n \"1983967\",\n \"1983997\",\n \"1983999\",\n \"1984033\",\n \"1984073\",\n \"1984110\",\n \"1984117\",\n \"7752082\",\n \"7993353\",\n \"8015895\",\n \"8026858\",\n \"8262357\",\n \"8394261\",\n \"9577547\",\n \"5148531\",\n \"5148544\",\n \"5148576\",\n \"5148593\",\n \"9237621\",\n \"9307713\",\n \"9370312\",\n \"9424464\",\n \"9488754\",\n \"9544337\",\n \"9610059\",\n \"5148719\",\n \"5148743\",\n \"5148753\",\n \"5148766\",\n \"5148850\",\n \"5148934\",\n \"5148952\",\n \"5148954\",\n \"1984654\",\n \"9382415\",\n \"11121180\",\n \"5149012\",\n \"1984734\",\n \"5149081\",\n \"5149136\",\n \"5149174\",\n \"5149182\",\n \"5149203\",\n \"10199372\",\n \"1984913\",\n \"1984942\",\n \"1984949\",\n \"1984954\",\n \"1985061\",\n \"1985152\",\n \"1985158\",\n \"1985167\",\n \"1985181\",\n \"1985191\",\n \"1985192\",\n \"1985228\",\n \"1985230\",\n \"1985267\",\n \"1985405\",\n \"1985406\",\n \"1985409\",\n \"1985421\",\n \"1985423\",\n \"9332369\",\n \"1985485\",\n \"1985487\",\n \"1985490\",\n \"7905361\",\n \"1985522\",\n \"1985573\",\n \"5149222\",\n \"5149237\",\n \"1985647\",\n \"1985707\",\n \"6133659\",\n \"1985734\",\n \"1985742\",\n \"1985760\",\n \"1985809\",\n \"1985816\",\n \"1985826\",\n \"1985926\",\n \"1985931\",\n \"1985945\",\n \"1985952\",\n \"1985956\",\n \"1985993\",\n \"1986004\",\n \"1986009\",\n \"1986020\",\n \"1986032\",\n \"1986040\",\n \"1986052\",\n \"1986054\",\n \"1986056\",\n \"1986061\",\n \"5734345\",\n \"1986091\",\n \"1986101\",\n \"1986113\",\n \"1986157\",\n \"1986166\",\n \"1986171\",\n \"1986191\",\n \"1986192\",\n \"1986220\",\n \"1986223\",\n \"1986367\",\n \"1986452\",\n \"1986497\",\n \"1986508\",\n \"1986522\",\n \"1986575\",\n \"1986604\",\n \"1986623\",\n \"4702731\",\n \"1986650\",\n \"1986693\",\n \"1986720\",\n \"1986774\",\n \"1986779\",\n \"1986787\",\n \"1986807\",\n \"1986846\",\n \"1986877\",\n \"1986906\",\n \"1986936\",\n \"1986942\",\n \"5149307\",\n \"5149308\",\n \"5149315\",\n \"6133614\",\n \"1986998\",\n \"4302274\",\n \"5149317\",\n \"1987145\",\n \"1987146\",\n \"1987203\",\n \"1987204\",\n \"5768880\",\n \"1987301\",\n \"1987330\",\n \"1987362\",\n \"1987377\",\n \"1987527\",\n \"9137631\",\n \"1987578\",\n \"4525091\",\n \"4525093\",\n \"4525097\",\n \"4525103\",\n \"6118530\",\n \"6214843\",\n \"9538525\",\n \"1987629\",\n \"1987633\",\n \"1987650\",\n \"1987665\",\n \"1987737\",\n \"1987740\",\n \"1987744\",\n \"1987747\",\n \"1987766\",\n \"1987767\",\n \"1987775\",\n \"1987776\",\n \"1987785\",\n \"1987786\",\n \"1987787\",\n \"6133591\",\n \"4524221\",\n \"4524223\",\n \"10533589\",\n \"5149369\",\n \"5149370\",\n \"5149371\",\n \"5149387\",\n \"9987116\",\n \"1987855\",\n \"4702892\",\n \"4702893\",\n \"4702911\",\n \"4702912\",\n \"11650277\",\n \"6133534\",\n \"11190148\",\n \"1988002\",\n \"1988007\",\n \"1988019\",\n \"1988064\",\n \"4524513\",\n \"5734451\",\n \"1988225\",\n \"1988257\",\n \"1988302\",\n \"1988306\",\n \"1988354\",\n \"1988360\",\n \"1988361\",\n \"1988362\",\n \"1988370\",\n \"1988376\",\n \"1988382\",\n \"1988384\",\n \"1988390\",\n \"1988420\",\n \"1988487\",\n \"1988495\",\n \"1988506\",\n \"1988593\",\n \"1988602\",\n \"1988642\",\n \"1988684\",\n \"7555991\",\n \"8388883\",\n \"1988762\",\n \"5149414\",\n \"5149438\",\n \"1988820\",\n \"1988881\",\n \"5734528\",\n \"6133644\",\n \"1988894\",\n \"1989083\",\n \"1989084\",\n \"1989170\",\n \"1989181\",\n \"1989282\",\n \"1989283\",\n \"1989355\",\n \"1989377\",\n \"1989393\",\n \"1989428\",\n \"1989522\",\n \"1989538\",\n \"1989582\",\n \"1989903\",\n \"1989942\",\n \"9906229\",\n \"1990043\",\n \"1990050\",\n \"1990066\",\n \"1990088\",\n \"1990105\",\n \"1990150\",\n \"1990155\",\n \"5734390\",\n \"1990164\",\n \"1990165\",\n \"1990167\",\n \"1990178\",\n \"1990198\",\n \"1990200\",\n \"11465014\",\n \"1990255\",\n \"1990256\",\n \"1990270\",\n \"1990331\",\n \"1990335\",\n \"1990357\",\n \"1990371\",\n \"1990533\",\n \"1990551\",\n \"1990582\",\n \"1990594\",\n \"5149474\",\n \"1990998\",\n \"1991012\",\n \"1991123\",\n \"1991179\",\n \"6133501\",\n \"5149609\",\n \"1991277\",\n \"1991280\",\n \"1991281\",\n \"1991289\",\n \"1991294\",\n \"1991295\",\n \"1991298\",\n \"1991299\",\n \"1991303\",\n \"1991310\",\n \"5149630\",\n \"5149631\",\n \"1991371\",\n \"1991378\",\n \"1991394\",\n \"1991405\",\n \"1991410\",\n \"1991429\",\n \"1991468\",\n \"1991532\",\n \"1991779\",\n \"1991783\",\n \"5149836\",\n \"5149839\",\n \"5149843\",\n \"1991846\",\n \"10155932\",\n \"11098546\",\n \"11869776\",\n \"1991945\",\n \"5734515\",\n \"11635419\",\n \"1992066\",\n \"5149873\",\n \"5149880\",\n \"5149929\",\n \"5149940\",\n \"5149941\",\n \"5149986\",\n \"1992167\",\n \"1992172\",\n \"8180900\",\n \"6133619\",\n \"5734398\",\n \"12010643\",\n \"12225687\",\n \"5880512\",\n \"5880533\",\n \"5880539\",\n \"5880545\",\n \"5880550\",\n \"5880552\",\n \"5880559\",\n \"5880563\",\n \"7657419\",\n \"8237343\",\n \"8632989\",\n \"8941993\",\n \"9110918\",\n \"9243319\",\n \"9251088\",\n \"9259786\",\n \"9261296\",\n \"9272461\",\n \"9311081\",\n \"9330467\",\n \"9339487\",\n \"9366016\",\n \"9368398\",\n \"9392058\",\n \"9392076\",\n \"9400977\",\n \"9402536\",\n \"9413168\",\n \"9419734\",\n \"9428900\",\n \"9438677\",\n \"9454444\",\n \"9456004\",\n \"9474405\",\n \"9489399\",\n \"9502724\",\n \"9530135\",\n \"9532702\",\n \"9558873\",\n \"9574939\",\n \"9616438\",\n \"9624918\",\n \"9632824\",\n \"5769062\",\n \"5769068\",\n \"5769072\",\n \"7429212\",\n \"9442902\",\n \"11654024\",\n \"7507369\",\n \"9414984\",\n \"9563355\",\n \"1989594\",\n \"4524740\",\n \"5144381\",\n \"5144386\",\n \"5144407\",\n \"9533293\",\n \"7990739\",\n \"4302221\",\n \"9621086\",\n \"4302230\",\n \"4523556\",\n \"4523560\",\n \"4523564\",\n \"4524052\",\n \"4524054\",\n \"4523486\",\n \"4523461\",\n \"4524998\",\n \"4525034\",\n \"4524376\",\n \"4524822\",\n \"11828714\",\n \"4524712\",\n \"10422582\",\n \"10574156\",\n \"10632124\",\n \"4523522\",\n \"5880392\",\n \"6133595\",\n \"6133596\",\n \"6133597\",\n \"9577234\",\n \"9281181\",\n \"9352348\",\n \"9352978\",\n \"9403481\",\n \"9436173\",\n \"9448761\",\n \"9453490\",\n \"9494431\",\n \"9516038\",\n \"9516680\",\n \"9523379\",\n \"9534291\",\n \"9545331\",\n \"4522974\",\n \"4524541\",\n \"4523519\",\n \"4524070\",\n \"4524072\",\n \"4524403\",\n \"4524793\",\n \"4524914\",\n \"4524922\",\n \"4524929\",\n \"4524951\",\n \"4524955\",\n \"4524961\",\n \"4524962\",\n \"10530208\",\n \"11555221\",\n \"4525078\",\n \"6119299\",\n \"6119323\",\n \"6119359\",\n \"6119488\",\n \"6133667\",\n \"6133670\",\n \"6133673\",\n \"6133674\",\n \"6133675\",\n \"7346249\",\n \"9220953\",\n \"9249651\",\n \"9288979\",\n \"6133637\",\n \"6133620\",\n \"6133519\",\n \"11780161\",\n \"6133604\",\n \"10224300\",\n \"9830270\",\n \"6133607\",\n \"10629052\",\n \"7346237\",\n \"11799357\",\n \"9307098\",\n \"9423863\",\n \"9497623\",\n \"9581695\",\n \"9619088\",\n \"6133520\",\n \"6133562\",\n \"10864093\",\n \"9273963\",\n \"5734379\",\n \"11548960\",\n \"9479525\",\n \"7345819\",\n \"6133523\",\n \"6133525\",\n \"6133528\",\n \"6133542\",\n \"6133497\",\n \"6133498\",\n \"4702878\",\n \"9237031\",\n \"9274899\",\n \"10477629\",\n \"6133575\",\n \"9962269\",\n \"9321500\",\n \"6133517\",\n \"10078800\",\n \"8501203\",\n \"10464824\",\n \"9299326\",\n \"9309575\",\n \"6133586\",\n \"9629450\",\n \"6133635\",\n \"10175639\",\n \"9617411\",\n \"9932090\",\n \"7346256\",\n \"10438474\",\n \"7345829\",\n \"11652557\",\n \"5734535\",\n \"7345801\",\n \"10411202\",\n \"5734362\",\n \"11477039\",\n \"10146771\",\n \"5880478\",\n \"6133540\",\n \"10755716\",\n \"9415669\",\n \"5144190\",\n \"5144196\",\n \"5715276\",\n \"5146412\",\n \"5715275\",\n \"5768597\",\n \"5734482\",\n \"10221195\",\n \"10288719\",\n \"1978197\",\n \"9363893\",\n \"9391442\",\n \"5149499\",\n \"5149569\",\n \"7769543\",\n \"8851663\",\n \"1954338\",\n \"1954344\",\n \"1954346\",\n \"1954351\",\n \"1954353\",\n \"1954356\",\n \"1954359\",\n \"4523880\",\n \"4523883\",\n \"4523885\",\n \"10210935\",\n \"10263383\",\n \"5149659\",\n \"5149664\",\n \"5149665\",\n \"5149667\",\n \"5149704\",\n \"5149713\",\n \"5149717\",\n \"5149746\",\n \"5149753\",\n \"5149768\",\n \"5149777\",\n \"5149780\",\n \"5149782\",\n \"5149784\",\n \"5149787\",\n \"5149811\",\n \"5149819\",\n \"5149820\",\n \"5734422\",\n \"7443518\",\n \"5146303\",\n \"5146305\",\n \"5146326\",\n \"5146335\",\n \"5146342\",\n \"5146379\",\n \"5146389\",\n \"1991462\",\n \"1991466\",\n \"1963532\",\n \"1987602\",\n \"1954382\",\n \"1980462\",\n \"1972942\",\n \"4302268\",\n \"4524393\",\n \"9256786\",\n \"9291092\",\n \"5150002\",\n \"5150027\",\n \"5142358\",\n \"12200261\",\n \"11470872\",\n \"11654707\",\n \"11776315\",\n \"11834445\",\n \"11892494\",\n \"11794114\",\n \"10713577\",\n \"12252926\",\n \"11423843\",\n \"11670842\",\n \"11729494\",\n \"12173621\",\n \"12247340\",\n \"12252340\",\n \"12239491\",\n \"12258146\",\n \"1942522\",\n \"1942060\",\n \"1942067\",\n \"1942098\",\n \"1942141\",\n \"1942170\",\n \"1942171\",\n \"1942206\",\n \"1942244\",\n \"1942251\",\n \"5141643\",\n \"12286003\",\n \"1942327\",\n \"1942341\",\n \"1942370\",\n \"1942372\",\n \"10773498\",\n \"1942378\",\n \"1942383\",\n \"1942416\",\n \"1942455\",\n \"1942509\",\n \"4301744\",\n \"4301749\",\n \"1942558\",\n \"1942618\",\n \"1942621\",\n \"1942623\",\n \"1942636\",\n \"1942641\",\n \"5141650\",\n \"1942670\",\n \"1942674\",\n \"5141662\",\n \"1942697\",\n \"1942715\",\n \"1942762\",\n \"1942769\",\n \"1942790\",\n \"1942793\",\n \"1942808\",\n \"1942836\",\n \"4689929\",\n \"1942854\",\n \"5141677\",\n \"1942878\",\n \"1942945\",\n \"1942947\",\n \"1942964\",\n \"1942967\",\n \"1942971\",\n \"1942980\",\n \"1942982\",\n \"1942994\",\n \"5141697\",\n \"1943054\",\n \"1943066\",\n \"4302008\",\n \"1943089\",\n \"1943090\",\n \"1943096\",\n \"1943101\",\n \"5141743\",\n \"5141763\",\n \"4689912\",\n \"1943212\",\n \"1943223\",\n \"1943236\",\n \"1943250\",\n \"1943308\",\n \"1943397\",\n \"4535386\",\n \"8178854\",\n \"8277078\",\n \"5141795\",\n \"1943475\",\n \"1943505\",\n \"1943519\",\n \"1943563\",\n \"1943571\",\n \"1943573\",\n \"1943588\",\n \"4301355\",\n \"1943619\",\n \"1943625\",\n \"1943631\",\n \"1943655\",\n \"1943673\",\n \"1943757\",\n \"1943823\",\n \"1943824\",\n \"1943830\",\n \"1943832\",\n \"1943901\",\n \"1943936\",\n \"12198522\",\n \"12233808\",\n \"12243973\",\n \"1943942\",\n \"1943953\",\n \"1943954\",\n \"1943960\",\n \"1943962\",\n \"1943964\",\n \"1943990\",\n \"1944004\",\n \"8073674\",\n \"8133678\",\n \"8273661\",\n \"1944106\",\n \"1944113\",\n \"4689963\",\n \"1944234\",\n \"1944273\",\n \"1944275\",\n \"1944283\",\n \"1944286\",\n \"1944314\",\n \"1944324\",\n \"1944329\",\n \"1944335\",\n \"1944343\",\n \"1944361\",\n \"1944374\",\n \"1944421\",\n \"1944456\",\n \"1944462\",\n \"1944483\",\n \"1944503\",\n \"1944504\",\n \"1944520\",\n \"1944521\",\n \"1944523\",\n \"1944574\",\n \"1944580\",\n \"1944591\",\n \"1944618\",\n \"1944619\",\n \"1944627\",\n \"1944629\",\n \"1944631\",\n \"1944635\",\n \"1944638\",\n \"4689905\",\n \"1944744\",\n \"1944769\",\n \"4301934\",\n \"1944778\",\n \"1944798\",\n \"1944815\",\n \"1944832\",\n \"1944910\",\n \"5141913\",\n \"6205994\",\n \"9551544\",\n \"1944977\",\n \"5141924\",\n \"1945066\",\n \"9050611\",\n \"1945081\",\n \"1945088\",\n \"1945122\",\n \"1945137\",\n \"1945143\",\n \"1945173\",\n \"1945225\",\n \"1945227\",\n \"1945270\",\n \"1945274\",\n \"1945286\",\n \"1945302\",\n \"1945312\",\n \"1945396\",\n \"1945462\",\n \"1945476\",\n \"1945477\",\n \"1945535\",\n \"1945569\",\n \"1945571\",\n \"1945587\",\n \"1945589\",\n \"1945605\",\n \"1945694\",\n \"1945710\",\n \"1945715\",\n \"1945738\",\n \"1945742\",\n \"1945748\",\n \"1945786\",\n \"1945814\",\n \"1945837\",\n \"1945856\",\n \"1945863\",\n \"1945874\",\n \"1945877\",\n \"1945878\",\n \"1945893\",\n \"4301942\",\n \"5142001\",\n \"1945957\",\n \"1945980\",\n \"1946019\",\n \"1946037\",\n \"1946051\",\n \"1946058\",\n \"1946067\",\n \"1946074\",\n \"1946078\",\n \"1946079\",\n \"1946097\",\n \"4301426\",\n \"1946145\",\n \"1946163\",\n \"1946167\",\n \"1946174\",\n \"1946177\",\n \"5142061\",\n \"5142062\",\n \"1946290\",\n \"1946310\",\n \"1946327\",\n \"1946333\",\n \"5142067\",\n \"1946432\",\n \"1946469\",\n \"1946486\",\n \"12223105\",\n \"12233838\",\n \"1946495\",\n \"1946500\",\n \"1946509\",\n \"4302101\",\n \"1946520\",\n \"1946544\",\n \"1946550\",\n \"1946577\",\n \"1946582\",\n \"1946610\",\n \"1946612\",\n \"1946618\",\n \"1946628\",\n \"7346354\",\n \"1946660\",\n \"1946661\",\n \"1946695\",\n \"1946720\",\n \"1946731\",\n \"1946737\",\n \"1946738\",\n \"1946756\",\n \"1946763\",\n \"5142086\",\n \"1946810\",\n \"1946853\",\n \"1946865\",\n \"7389824\",\n \"1946901\",\n \"1946916\",\n \"1946917\",\n \"11753578\",\n \"1946980\",\n \"1946981\",\n \"1946983\",\n \"1946989\",\n \"1946991\",\n \"1946992\",\n \"1946995\",\n \"1946999\",\n \"1947021\",\n \"1947037\",\n \"1947048\",\n \"1947049\",\n \"1947055\",\n \"1947112\",\n \"1947113\",\n \"1947117\",\n \"1947147\",\n \"5142130\",\n \"5142160\",\n \"1947282\",\n \"1947306\",\n \"1947333\",\n \"1947335\",\n \"5142166\",\n \"5142175\",\n \"5142176\",\n \"1947385\",\n \"1947402\",\n \"1947409\",\n \"1947446\",\n \"1947449\",\n \"1947456\",\n \"1947459\",\n \"1947491\",\n \"1947492\",\n \"1947496\",\n \"1947506\",\n \"1947507\",\n \"1947568\",\n \"1947577\",\n \"1947587\",\n \"1947588\",\n \"1947597\",\n \"1947626\",\n \"1947661\",\n \"1947673\",\n \"1947703\",\n \"1947727\",\n \"1947740\",\n \"1947745\",\n \"1947753\",\n \"1947765\",\n \"1947775\",\n \"5734665\",\n \"1947805\",\n \"1947842\",\n \"1947846\",\n \"1947890\",\n \"1947894\",\n \"1947915\",\n \"12208168\",\n \"1947973\",\n \"1947976\",\n \"1947979\",\n \"1947980\",\n \"1948042\",\n \"1948046\",\n \"1948054\",\n \"1948061\",\n \"1948062\",\n \"1948073\",\n \"1948088\",\n \"1948158\",\n \"7603634\",\n \"1948371\",\n \"5142213\",\n \"1948439\",\n \"1948446\",\n \"1948464\",\n \"1948465\",\n \"1948521\",\n \"1948630\",\n \"4301945\",\n \"1948823\",\n \"1948826\",\n \"1948858\",\n \"1948861\",\n \"1948865\",\n \"1948883\",\n \"1948890\",\n \"8792353\",\n \"1948941\",\n \"1948947\",\n \"1948994\",\n \"1949008\",\n \"1949015\",\n \"1949049\",\n \"1949068\",\n \"1949105\",\n \"12353663\",\n \"1949219\",\n \"1949285\",\n \"1949322\",\n \"1949331\",\n \"1949336\",\n \"1949366\",\n \"1949404\",\n \"1949419\",\n \"7346351\",\n \"8828146\",\n \"9068968\",\n \"5142338\",\n \"5142352\",\n \"1949449\",\n \"1949451\",\n \"1949466\",\n \"1949492\",\n \"10574663\",\n \"1949512\",\n \"1949515\",\n \"1949520\",\n \"1949544\",\n \"1949545\",\n \"1949549\",\n \"1949592\",\n \"1949621\",\n \"7726809\",\n \"9395000\",\n \"10202439\",\n \"1949687\",\n \"1949697\",\n \"1949715\",\n \"1949784\",\n \"1949794\",\n \"1949850\",\n \"1949852\",\n \"1949877\",\n \"1949929\",\n \"1949938\",\n \"1949954\",\n \"1950006\",\n \"5142372\",\n \"5142394\",\n \"5142424\",\n \"5142436\",\n \"5142499\",\n \"5142583\",\n \"5142599\",\n \"7683096\",\n \"8109173\",\n \"1950013\",\n \"7346356\",\n \"1950017\",\n \"1950019\",\n \"1950024\",\n \"4301876\",\n \"1950044\",\n \"1950047\",\n \"1950052\",\n \"1950133\",\n \"1950153\",\n \"1950156\",\n \"1950169\",\n \"1950171\",\n \"1950197\",\n \"1950243\",\n \"1950272\",\n \"1950302\",\n \"11967675\",\n \"1950362\",\n \"1950384\",\n \"1950396\",\n \"1950408\",\n \"1950409\",\n \"1950521\",\n \"1950533\",\n \"1950567\",\n \"1950578\",\n \"1950591\",\n \"1950654\",\n \"1950767\",\n \"1950856\",\n \"1950877\",\n \"1950879\",\n \"1950936\",\n \"1951062\",\n \"1951072\",\n \"12231344\",\n \"1951097\",\n \"1951103\",\n \"1951116\",\n \"1951121\",\n \"1951125\",\n \"1951133\",\n \"1951157\",\n \"1951170\",\n \"1951217\",\n \"1951218\",\n \"4301897\",\n \"5142822\",\n \"5142825\",\n \"5715127\",\n \"12180041\",\n \"12206694\",\n \"1951340\",\n \"5142829\",\n \"5977179\",\n \"5977185\",\n \"5977197\",\n \"5977203\",\n \"5977207\",\n \"5977208\",\n \"5977214\",\n \"5977216\",\n \"5977220\",\n \"5977235\",\n \"5977247\",\n \"5977250\",\n \"5977251\",\n \"5977257\",\n \"5977259\",\n \"5977260\",\n \"5977261\",\n \"5977262\",\n \"8270406\",\n \"5142249\",\n \"5142254\",\n \"5142267\",\n \"5142269\",\n \"5142273\",\n \"5142278\",\n \"5142283\",\n \"5142298\",\n \"5142300\",\n \"5142314\",\n \"5142317\",\n \"5142319\",\n \"5142322\",\n \"5142328\",\n \"7633472\",\n \"5142725\",\n \"5142729\",\n \"5142730\",\n \"5142749\",\n \"1948771\",\n \"1948774\",\n \"1948779\",\n \"1948789\",\n \"1948799\",\n \"1948800\",\n \"1948802\",\n \"1948803\",\n \"1948804\",\n \"1948808\",\n \"1948809\",\n \"1948810\",\n \"1945374\",\n \"1945378\",\n \"1948916\",\n \"10715410\",\n \"4535396\",\n \"5142006\",\n \"5142032\",\n \"5142042\",\n \"12175154\",\n \"12263736\",\n \"1869467\",\n \"1869478\",\n \"1869489\",\n \"1869512\",\n \"1952878\",\n \"1952883\",\n \"1952909\",\n \"9359597\",\n \"5769709\",\n \"1735844\",\n \"1735855\",\n \"9400895\",\n \"9530977\",\n \"9245604\",\n \"10744228\",\n \"10963226\",\n \"10982815\",\n \"1800191\",\n \"5109821\",\n \"1758613\",\n \"9355953\",\n \"1758727\",\n \"1758767\",\n \"1758771\",\n \"1758781\",\n \"1758783\",\n \"7911151\",\n \"9366762\",\n \"9445489\",\n \"5108416\",\n \"5108417\",\n \"5108419\",\n \"1758839\",\n \"1758850\",\n \"1758874\",\n \"1758878\",\n \"1758879\",\n \"1758898\",\n \"1758906\",\n \"1758916\",\n \"1759037\",\n \"1759040\",\n \"1759041\",\n \"1759055\",\n \"1759069\",\n \"1759079\",\n \"1759083\",\n \"1759092\",\n \"1759097\",\n \"4533952\",\n \"7972792\",\n \"9447614\",\n \"1759153\",\n \"1759159\",\n \"4533211\",\n \"1759177\",\n \"1759338\",\n \"1759407\",\n \"1759553\",\n \"1759563\",\n \"1759573\",\n \"1759585\",\n \"1759597\",\n \"1759605\",\n \"1759610\",\n \"1759611\",\n \"1759620\",\n \"1759621\",\n \"1759624\",\n \"1759631\",\n \"1759632\",\n \"1759633\",\n \"1759634\",\n \"1759661\",\n \"1759667\",\n \"1759668\",\n \"1759671\",\n \"1759673\",\n \"1759677\",\n \"1759678\",\n \"1759686\",\n \"1759688\",\n \"1759691\",\n \"1759694\",\n \"1759719\",\n \"1759799\",\n \"5108619\",\n \"5108636\",\n \"1759881\",\n \"9306367\",\n \"10329023\",\n \"1760104\",\n \"1760172\",\n \"1760173\",\n \"1760175\",\n \"1760261\",\n \"1760309\",\n \"1760361\",\n \"7444489\",\n \"9060267\",\n \"1760454\",\n \"1760455\",\n \"1760593\",\n \"1760620\",\n \"1760682\",\n \"1794361\",\n \"4533957\",\n \"4534225\",\n \"8708745\",\n \"1760857\",\n \"1760867\",\n \"1760887\",\n \"1760891\",\n \"1760893\",\n \"4533255\",\n \"1760939\",\n \"1760943\",\n \"5108957\",\n \"5108958\",\n \"1761041\",\n \"1761143\",\n \"1761392\",\n \"1761438\",\n \"1761439\",\n \"1761498\",\n \"1761553\",\n \"1761563\",\n \"1761735\",\n \"1761778\",\n \"1761788\",\n \"1761789\",\n \"1761798\",\n \"1761865\",\n \"1761892\",\n \"9418549\",\n \"9616055\",\n \"1762244\",\n \"1762271\",\n \"1762383\",\n \"6132749\",\n \"1762608\",\n \"1762609\",\n \"1762615\",\n \"1762657\",\n \"6132957\",\n \"1762680\",\n \"1762900\",\n \"1762902\",\n \"5109498\",\n \"5109506\",\n \"5109523\",\n \"5109535\",\n \"5109554\",\n \"5109566\",\n \"5109596\",\n \"5109599\",\n \"5109614\",\n \"5109646\",\n \"5109651\",\n \"5109661\",\n \"5109670\",\n \"5109722\",\n \"9337858\",\n \"1763610\",\n \"1763697\",\n \"8167743\",\n \"1763727\",\n \"1763741\",\n \"9328683\",\n \"9438913\",\n \"1764174\",\n \"1764178\",\n \"1764238\",\n \"1764553\",\n \"1764673\",\n \"1764686\",\n \"1764690\",\n \"1764691\",\n \"1764693\",\n \"1764716\",\n \"1764791\",\n \"1764917\",\n \"1764929\",\n \"1764986\",\n \"1764987\",\n \"1765010\",\n \"1765011\",\n \"1765017\",\n \"1765038\",\n \"1765044\",\n \"1765069\",\n \"1765073\",\n \"4534245\",\n \"4534250\",\n \"4534252\",\n \"4534257\",\n \"4534275\",\n \"1765155\",\n \"1765172\",\n \"11797244\",\n \"5109829\",\n \"5109830\",\n \"5109843\",\n \"5109845\",\n \"5109848\",\n \"5109850\",\n \"5109852\",\n \"5109855\",\n \"5109870\",\n \"5109872\",\n \"5109881\",\n \"5109882\",\n \"5109898\",\n \"5109931\",\n \"5109943\",\n \"5109954\",\n \"5109958\",\n \"8352161\",\n \"1765508\",\n \"1765604\",\n \"1765658\",\n \"1765733\",\n \"11487320\",\n \"1765767\",\n \"1765769\",\n \"1765779\",\n \"1765798\",\n \"4687817\",\n \"4687827\",\n \"7800469\",\n \"1765898\",\n \"1765954\",\n \"1765962\",\n \"1766072\",\n \"1766086\",\n \"1766128\",\n \"1766130\",\n \"1766131\",\n \"1766137\",\n \"1766193\",\n \"1766205\",\n \"1766210\",\n \"4534691\",\n \"1766237\",\n \"1766274\",\n \"1766285\",\n \"1766287\",\n \"1766392\",\n \"1766410\",\n \"1766418\",\n \"1766489\",\n \"1766509\",\n \"1766510\",\n \"4301071\",\n \"4301081\",\n \"7895336\",\n \"9362190\",\n \"1766646\",\n \"1766650\",\n \"1766718\",\n \"1766721\",\n \"1766741\",\n \"1766773\",\n \"1766784\",\n \"1766814\",\n \"1766910\",\n \"1766917\",\n \"1766919\",\n \"1766921\",\n \"11034779\",\n \"1767052\",\n \"1767134\",\n \"1767140\",\n \"1767142\",\n \"1767335\",\n \"1767336\",\n \"1767337\",\n \"1767338\",\n \"1767347\",\n \"1767368\",\n \"1767381\",\n \"1767393\",\n \"1767430\",\n \"7598945\",\n \"9062262\",\n \"9105656\",\n \"1767484\",\n \"9471709\",\n \"1767511\",\n \"1767571\",\n \"1767579\",\n \"1767584\",\n \"9511345\",\n \"1767597\",\n \"1767602\",\n \"1767608\",\n \"1767612\",\n \"1767625\",\n \"1767628\",\n \"10575632\",\n \"10597823\",\n \"1767655\",\n \"1767674\",\n \"5110120\",\n \"5734744\",\n \"5772169\",\n \"5772171\",\n \"5772172\",\n \"5772176\",\n \"5772178\",\n \"5772180\",\n \"5772186\",\n \"5772196\",\n \"5772199\",\n \"5772202\",\n \"5772205\",\n \"5772206\",\n \"5772210\",\n \"5802396\",\n \"5883914\",\n \"5883925\",\n \"6132943\",\n \"7345742\",\n \"7388922\",\n \"7768584\",\n \"8045644\",\n \"9356770\",\n \"9381852\",\n \"1767719\",\n \"1768042\",\n \"1768048\",\n \"1768117\",\n \"1768132\",\n \"1768150\",\n \"1768172\",\n \"1768174\",\n \"5110200\",\n \"1768308\",\n \"1768341\",\n \"5110211\",\n \"5110213\",\n \"1768546\",\n \"1768554\",\n \"1768557\",\n \"1768560\",\n \"1768568\",\n \"1768698\",\n \"1768702\",\n \"1768727\",\n \"1768729\",\n \"1768735\",\n \"1768741\",\n \"1768749\",\n \"1768771\",\n \"1768815\",\n \"1768819\",\n \"5110256\",\n \"5110258\",\n \"1768972\",\n \"8150836\",\n \"1769029\",\n \"1769057\",\n \"1769095\",\n \"1769114\",\n \"1769194\",\n \"1769209\",\n \"1769225\",\n \"1769245\",\n \"1769250\",\n \"1769260\",\n \"1769271\",\n \"1769272\",\n \"1769283\",\n \"1769293\",\n \"1769294\",\n \"1769298\",\n \"1769302\",\n \"1769308\",\n \"1769310\",\n \"4688049\",\n \"4688075\",\n \"4688092\",\n \"4688098\",\n \"9493016\",\n \"1769505\",\n \"1769519\",\n \"1769543\",\n \"1769566\",\n \"1769592\",\n \"9373686\",\n \"1769814\",\n \"1769934\",\n \"1769944\",\n \"1769947\",\n \"1769958\",\n \"1769978\",\n \"1770132\",\n \"1770144\",\n \"1770150\",\n \"9148810\",\n \"1770172\",\n \"1770307\",\n \"1770353\",\n \"1770416\",\n \"1770461\",\n \"1770477\",\n \"1770530\",\n \"1770573\",\n \"4532696\",\n \"8393221\",\n \"1770659\",\n \"1771357\",\n \"1771385\",\n \"1771391\",\n \"1771441\",\n \"7725644\",\n \"1771509\",\n \"1771531\",\n \"1771555\",\n \"4532986\",\n \"1771872\",\n \"1771997\",\n \"1772013\",\n \"9242609\",\n \"9244973\",\n \"9254157\",\n \"9396755\",\n \"9463442\",\n \"9476708\",\n \"9495306\",\n \"9562175\",\n \"9616658\",\n \"9625112\",\n \"9630930\",\n \"9633562\",\n \"1772043\",\n \"1772094\",\n \"6133806\",\n \"1772169\",\n \"1772179\",\n \"5110333\",\n \"5110341\",\n \"5110356\",\n \"9539128\",\n \"1772255\",\n \"5772129\",\n \"1772422\",\n \"1772462\",\n \"9605631\",\n \"1772668\",\n \"4687565\",\n \"1772940\",\n \"1772954\",\n \"1772956\",\n \"1772977\",\n \"1773002\",\n \"1773062\",\n \"1773069\",\n \"1773081\",\n \"1773163\",\n \"1773231\",\n \"1773248\",\n \"1773309\",\n \"1773313\",\n \"1773315\",\n \"1773328\",\n \"1773377\",\n \"1773484\",\n \"1773510\",\n \"1773572\",\n \"1773577\",\n \"1773662\",\n \"1773677\",\n \"1773728\",\n \"4301148\",\n \"8222049\",\n \"9369576\",\n \"1773742\",\n \"1773743\",\n \"1773744\",\n \"1773746\",\n \"9367674\",\n \"9399288\",\n \"9593475\",\n \"1773783\",\n \"1773784\",\n \"9283948\",\n \"9560018\",\n \"1774092\",\n \"1774095\",\n \"9322646\",\n \"1774243\",\n \"1774253\",\n \"1774254\",\n \"1774262\",\n \"1774268\",\n \"9243117\",\n \"9409309\",\n \"9550265\",\n \"1774272\",\n \"1774314\",\n \"1774347\",\n \"1774358\",\n \"1774470\",\n \"1774792\",\n \"1774797\",\n \"4301304\",\n \"6115946\",\n \"6115953\",\n \"1774859\",\n \"1774873\",\n \"1774878\",\n \"1774918\",\n \"1774959\",\n \"1775046\",\n \"1775055\",\n \"9547676\",\n \"10032003\",\n \"1775089\",\n \"1775112\",\n \"1775118\",\n \"4534046\",\n \"4534052\",\n \"4534057\",\n \"1775172\",\n \"1775279\",\n \"1775290\",\n \"1775291\",\n \"1775299\",\n \"1775301\",\n \"1775329\",\n \"1775508\",\n \"1775509\",\n \"1775631\",\n \"5110593\",\n \"5772269\",\n \"1775672\",\n \"1775680\",\n \"1775791\",\n \"5883881\",\n \"1775866\",\n \"1775891\",\n \"1775913\",\n \"4534719\",\n \"1775962\",\n \"1775963\",\n \"1775970\",\n \"1776067\",\n \"1776167\",\n \"5110670\",\n \"1776182\",\n \"1776207\",\n \"1776330\",\n \"1776371\",\n \"5110723\",\n \"5110728\",\n \"5110752\",\n \"5110754\",\n \"5110756\",\n \"5772446\",\n \"1776397\",\n \"1776406\",\n \"1776415\",\n \"1776459\",\n \"1776462\",\n \"1776467\",\n \"1776470\",\n \"1776472\",\n \"1776473\",\n \"1776476\",\n \"1776618\",\n \"1776619\",\n \"1776861\",\n \"1776862\",\n \"1776871\",\n \"6132861\",\n \"1776880\",\n \"4534463\",\n \"1777120\",\n \"1777139\",\n \"1777253\",\n \"1777261\",\n \"5110818\",\n \"1777727\",\n \"1777728\",\n \"1777730\",\n \"9310286\",\n \"5110858\",\n \"5110863\",\n \"5110871\",\n \"5110885\",\n \"5715009\",\n \"5715010\",\n \"5715013\",\n \"1777974\",\n \"1777976\",\n \"1777980\",\n \"1777982\",\n \"1777994\",\n \"1777996\",\n \"1778000\",\n \"1778006\",\n \"1778007\",\n \"1778013\",\n \"1778015\",\n \"1778024\",\n \"1778031\",\n \"1778033\",\n \"1778034\",\n \"1778037\",\n \"1778045\",\n \"1778049\",\n \"9456735\",\n \"1778074\",\n \"4534299\",\n \"1778109\",\n \"1778127\",\n \"1778143\",\n \"1778337\",\n \"1778517\",\n \"1778524\",\n \"1778534\",\n \"1778596\",\n \"1778688\",\n \"5111064\",\n \"5111076\",\n \"5111139\",\n \"5111141\",\n \"5111147\",\n \"5111195\",\n \"5111214\",\n \"5111249\",\n \"5111343\",\n \"5111360\",\n \"5111372\",\n \"5111397\",\n \"5111481\",\n \"5111501\",\n \"5111513\",\n \"5111521\",\n \"5111528\",\n \"5111535\",\n \"5111546\",\n \"5111568\",\n \"5111574\",\n \"5111600\",\n \"5772222\",\n \"7593392\",\n \"8253467\",\n \"9175037\",\n \"9596498\",\n \"1779258\",\n \"1779269\",\n \"1779276\",\n \"1779382\",\n \"1779430\",\n \"1779435\",\n \"1779633\",\n \"1779641\",\n \"1779643\",\n \"1779690\",\n \"1779709\",\n \"1779713\",\n \"1779959\",\n \"1780049\",\n \"1780072\",\n \"1780209\",\n \"1780213\",\n \"1780214\",\n \"1780215\",\n \"1780272\",\n \"1780309\",\n \"1780313\",\n \"1780326\",\n \"1780330\",\n \"1780344\",\n \"1780378\",\n \"1780390\",\n \"1780407\",\n \"1780414\",\n \"1780437\",\n \"1780440\",\n \"1780450\",\n \"8802610\",\n \"9284849\",\n \"1780852\",\n \"4533937\",\n \"1780926\",\n \"1780928\",\n \"1780954\",\n \"1781008\",\n \"1781016\",\n \"4533285\",\n \"4533325\",\n \"7664771\",\n \"7825945\",\n \"9374443\",\n \"9392614\",\n \"5111956\",\n \"1781233\",\n \"1781234\",\n \"5111967\",\n \"5111974\",\n \"5111980\",\n \"1781692\",\n \"1781694\",\n \"1781803\",\n \"1781819\",\n \"1781841\",\n \"1782031\",\n \"1782168\",\n \"1782177\",\n \"1782319\",\n \"1782341\",\n \"1782354\",\n \"1782422\",\n \"1782424\",\n \"1782457\",\n \"1782466\",\n \"1782523\",\n \"11763567\",\n \"1782542\",\n \"1782543\",\n \"1782560\",\n \"1782579\",\n \"1782585\",\n \"1782595\",\n \"9289753\",\n \"9433772\",\n \"9525172\",\n \"1782615\",\n \"1782622\",\n \"1782627\",\n \"10441062\",\n \"1782672\",\n \"1782682\",\n \"1782689\",\n \"1782700\",\n \"1782705\",\n \"1782706\",\n \"1782707\",\n \"1782708\",\n \"1782709\",\n \"1782726\",\n \"1782727\",\n \"1782743\",\n \"1782744\",\n \"1782745\",\n \"1782747\",\n \"1782757\",\n \"1782762\",\n \"1782763\",\n \"1782776\",\n \"1782777\",\n \"1782803\",\n \"1782808\",\n \"1782809\",\n \"1782819\",\n \"1782822\",\n \"1782826\",\n \"1782833\",\n \"1782837\",\n \"1782840\",\n \"1782841\",\n \"1782853\",\n \"1782870\",\n \"1782871\",\n \"1782872\",\n \"1782878\",\n \"1782921\",\n \"1782927\",\n \"1782928\",\n \"1782934\",\n \"1782948\",\n \"1782961\",\n \"1782972\",\n \"1782978\",\n \"1782993\",\n \"1783002\",\n \"1783008\",\n \"1783013\",\n \"1783016\",\n \"1783035\",\n \"1783037\",\n \"1783043\",\n \"1783045\",\n \"1783055\",\n \"1783059\",\n \"4301044\",\n \"4687661\",\n \"6133026\",\n \"9581976\",\n \"1783090\",\n \"1783313\",\n \"9457757\",\n \"9500945\",\n \"1783371\",\n \"1783372\",\n \"1783373\",\n \"1783376\",\n \"1783378\",\n \"5112153\",\n \"5112155\",\n \"5112160\",\n \"5112191\",\n \"5112199\",\n \"5112229\",\n \"5112233\",\n \"5112254\",\n \"5112283\",\n \"5112291\",\n \"5112302\",\n \"5112336\",\n \"5112345\",\n \"5112377\",\n \"5112388\",\n \"5714951\",\n \"5714973\",\n \"5714984\",\n \"5714994\",\n \"5715004\",\n \"5734845\",\n \"5772349\",\n \"5772351\",\n \"7921916\",\n \"8043500\",\n \"1783777\",\n \"1783811\",\n \"9348210\",\n \"9465978\",\n \"9492640\",\n \"1783841\",\n \"1783842\",\n \"1783855\",\n \"1783861\",\n \"1783940\",\n \"1783971\",\n \"1784276\",\n \"1784278\",\n \"1784281\",\n \"1784282\",\n \"1784283\",\n \"1784349\",\n \"1784359\",\n \"1784422\",\n \"1784461\",\n \"1784513\",\n \"1784582\",\n \"1784591\",\n \"1784610\",\n \"9320776\",\n \"1784688\",\n \"5112414\",\n \"1784761\",\n \"1784812\",\n \"1784824\",\n \"1784826\",\n \"1784853\",\n \"4534290\",\n \"1784893\",\n \"1785145\",\n \"1785149\",\n \"1785162\",\n \"1785166\",\n \"1785168\",\n \"1785181\",\n \"1785185\",\n \"1785217\",\n \"1785220\",\n \"1785280\",\n \"1785286\",\n \"4532886\",\n \"4532888\",\n \"4532890\",\n \"9633615\",\n \"1785314\",\n \"1785322\",\n \"1785329\",\n \"1785331\",\n \"1785361\",\n \"1785367\",\n \"1785399\",\n \"1785403\",\n \"9636267\",\n \"1785462\",\n \"1785725\",\n \"1785728\",\n \"1785730\",\n \"1785732\",\n \"1785733\",\n \"7400814\",\n \"9250744\",\n \"9329292\",\n \"5112457\",\n \"5112460\",\n \"5112461\",\n \"5112464\",\n \"5112465\",\n \"5112467\",\n \"5112469\",\n \"5112474\",\n \"5112475\",\n \"5112480\",\n \"5112481\",\n \"1785875\",\n \"1785883\",\n \"1785886\",\n \"1785887\",\n \"1785888\",\n \"1785895\",\n \"1785951\",\n \"1785955\",\n \"1785964\",\n \"1785982\",\n \"1785992\",\n \"1785997\",\n \"1786007\",\n \"1786017\",\n \"8292872\",\n \"1786035\",\n \"1786036\",\n \"1786308\",\n \"1786360\",\n \"1786448\",\n \"1786452\",\n \"1786455\",\n \"1786514\",\n \"1786515\",\n \"1786565\",\n \"1786566\",\n \"1786567\",\n \"1786573\",\n \"1786619\",\n \"1786651\",\n \"1786658\",\n \"1786664\",\n \"1786691\",\n \"1786733\",\n \"1786808\",\n \"1786902\",\n \"1786918\",\n \"1786936\",\n \"1787064\",\n \"1787112\",\n \"1787165\",\n \"1787185\",\n \"1787213\",\n \"1787226\",\n \"1787264\",\n \"1787267\",\n \"1787279\",\n \"1787367\",\n \"1787373\",\n \"1787381\",\n \"4687681\",\n \"9268082\",\n \"9305798\",\n \"1787400\",\n \"1787417\",\n \"1787438\",\n \"1787504\",\n \"1787506\",\n \"1787590\",\n \"1787610\",\n \"1787631\",\n \"1787697\",\n \"1787751\",\n \"1787770\",\n \"1787825\",\n \"1787841\",\n \"1787859\",\n \"1787905\",\n \"4534086\",\n \"7917033\",\n \"1788034\",\n \"1788037\",\n \"1788063\",\n \"1788070\",\n \"1788139\",\n \"9547140\",\n \"10161728\",\n \"1788425\",\n \"9282469\",\n \"1788485\",\n \"1788522\",\n \"1788673\",\n \"1788677\",\n \"1788679\",\n \"1788680\",\n \"1788681\",\n \"1788720\",\n \"4301312\",\n \"1788734\",\n \"9216200\",\n \"4534011\",\n \"4534017\",\n \"1788846\",\n \"1788856\",\n \"1788917\",\n \"1788929\",\n \"1789071\",\n \"1789073\",\n \"1789076\",\n \"1789086\",\n \"1789155\",\n \"9612009\",\n \"1789212\",\n \"1789250\",\n \"1789255\",\n \"1789267\",\n \"9805848\",\n \"1789403\",\n \"4533882\",\n \"4533924\",\n \"9248329\",\n \"9449132\",\n \"1789481\",\n \"1789491\",\n \"1789505\",\n \"1789553\",\n \"1789580\",\n \"4534162\",\n \"4534166\",\n \"4534170\",\n \"4534194\",\n \"4534198\",\n \"1789637\",\n \"1789694\",\n \"1789695\",\n \"1789730\",\n \"1789745\",\n \"1789753\",\n \"1789755\",\n \"1789783\",\n \"1789785\",\n \"1789840\",\n \"1789849\",\n \"1789957\",\n \"10068024\",\n \"10113008\",\n \"10290084\",\n \"10312073\",\n \"10904813\",\n \"1789982\",\n \"1789984\",\n \"1790002\",\n \"1790013\",\n \"1790023\",\n \"1790059\",\n \"1790062\",\n \"1790072\",\n \"1790084\",\n \"1790151\",\n \"1790153\",\n \"1790160\",\n \"4533115\",\n \"8047343\",\n \"9092175\",\n \"9410414\",\n \"1790339\",\n \"1790343\",\n \"11693171\",\n \"1790359\",\n \"1790361\",\n \"1790362\",\n \"1790364\",\n \"1790369\",\n \"1790371\",\n \"1790376\",\n \"9174377\",\n \"1790625\",\n \"1790671\",\n \"1790737\",\n \"9297059\",\n \"1791331\",\n \"1791384\",\n \"1791422\",\n \"4687906\",\n \"1791590\",\n \"1791593\",\n \"1791660\",\n \"1791680\",\n \"1791758\",\n \"1791784\",\n \"1791793\",\n \"1791837\",\n \"4687930\",\n \"1791846\",\n \"1791862\",\n \"1791870\",\n \"1792061\",\n \"1792072\",\n \"1792073\",\n \"1792087\",\n \"1792091\",\n \"1792095\",\n \"1792096\",\n \"1792097\",\n \"1792099\",\n \"9426771\",\n \"9622117\",\n \"1792292\",\n \"1792300\",\n \"1792318\",\n \"1792335\",\n \"1792377\",\n \"1792379\",\n \"1792383\",\n \"9241669\",\n \"9338769\",\n \"9530319\",\n \"9548726\",\n \"1792411\",\n \"1792414\",\n \"1792418\",\n \"1792426\",\n \"1792430\",\n \"1792431\",\n \"1792442\",\n \"1792449\",\n \"1792456\",\n \"1792465\",\n \"1792475\",\n \"1792478\",\n \"1792485\",\n \"1792497\",\n \"1792517\",\n \"1792645\",\n \"10684776\",\n \"5113365\",\n \"9240216\",\n \"1792768\",\n \"1792817\",\n \"9233420\",\n \"9539292\",\n \"5113370\",\n \"1792996\",\n \"1793189\",\n \"1793192\",\n \"1793212\",\n \"1793238\",\n \"1793243\",\n \"1793246\",\n \"5113394\",\n \"1793368\",\n \"1793369\",\n \"1793419\",\n \"1793453\",\n \"1793455\",\n \"4301052\",\n \"4301055\",\n \"7918000\",\n \"1793589\",\n \"1793661\",\n \"1793689\",\n \"1793699\",\n \"1793877\",\n \"1793983\",\n \"1793986\",\n \"1794102\",\n \"1794351\",\n \"1794425\",\n \"1794507\",\n \"1794510\",\n \"1794532\",\n \"1794534\",\n \"1794590\",\n \"1794599\",\n \"1794609\",\n \"4301238\",\n \"11781335\",\n \"1795065\",\n \"1795068\",\n \"4532908\",\n \"6133011\",\n \"1795110\",\n \"1795180\",\n \"1795215\",\n \"1795282\",\n \"7869346\",\n \"1795483\",\n \"7922810\",\n \"1795597\",\n \"1795788\",\n \"1795802\",\n \"1795812\",\n \"1795854\",\n \"1795862\",\n \"1795871\",\n \"1795896\",\n \"1795900\",\n \"1795930\",\n \"1795946\",\n \"1795957\",\n \"1795983\",\n \"1796007\",\n \"1796032\",\n \"1796035\",\n \"1796040\",\n \"1796051\",\n \"1796100\",\n \"1796117\",\n \"1796139\",\n \"1796145\",\n \"1796154\",\n \"1796169\",\n \"1796180\",\n \"1796181\",\n \"1796188\",\n \"4534485\",\n \"4534486\",\n \"7438067\",\n \"8007222\",\n \"9377268\",\n \"9541908\",\n \"1796217\",\n \"7780930\",\n \"1796274\",\n \"1796276\",\n \"4532700\",\n \"4688166\",\n \"4688169\",\n \"4688172\",\n \"7383338\",\n \"7689966\",\n \"7882824\",\n \"8405656\",\n \"9256638\",\n \"9327259\",\n \"9589234\",\n \"9803522\",\n \"1796310\",\n \"1796312\",\n \"1796423\",\n \"1796451\",\n \"1796463\",\n \"8105817\",\n \"1796678\",\n \"1796686\",\n \"10690739\",\n \"10700540\",\n \"10706419\",\n \"10716234\",\n \"10732033\",\n \"10741837\",\n \"10747908\",\n \"10799294\",\n \"10814936\",\n \"10824750\",\n \"10840540\",\n \"10840565\",\n \"10850393\",\n \"10850415\",\n \"10866199\",\n \"10891794\",\n \"11539735\",\n \"11858666\",\n \"1796791\",\n \"1796842\",\n \"1796958\",\n \"1797030\",\n \"1797587\",\n \"1797592\",\n \"1797593\",\n \"1797595\",\n \"1797601\",\n \"1797735\",\n \"1798060\",\n \"1798084\",\n \"4301242\",\n \"4301249\",\n \"4301255\",\n \"4533431\",\n \"4533433\",\n \"4533442\",\n \"4533444\",\n \"4533446\",\n \"6133001\",\n \"6133002\",\n \"6133006\",\n \"6133007\",\n \"6133010\",\n \"1798090\",\n \"1798288\",\n \"1798371\",\n \"1798372\",\n \"1798375\",\n \"1798419\",\n \"11992983\",\n \"1798916\",\n \"1798922\",\n \"1798931\",\n \"1798971\",\n \"1798974\",\n \"1798984\",\n \"1799132\",\n \"1799135\",\n \"5113951\",\n \"5113985\",\n \"5114011\",\n \"5114021\",\n \"5114039\",\n \"5114043\",\n \"5114081\",\n \"5114083\",\n \"5114096\",\n \"5114107\",\n \"5114128\",\n \"5114151\",\n \"5114159\",\n \"9500553\",\n \"1799433\",\n \"1799675\",\n \"1799680\",\n \"1799695\",\n \"1799701\",\n \"9368026\",\n \"9593098\",\n \"1799774\",\n \"9388726\",\n \"9571514\",\n \"1799799\",\n \"1799870\",\n \"1799877\",\n \"1799880\",\n \"1799884\",\n \"1799894\",\n \"1799900\",\n \"1799901\",\n \"1799911\",\n \"1799917\",\n \"1799925\",\n \"1799938\",\n \"1799944\",\n \"1799956\",\n \"1799957\",\n \"1799958\",\n \"1799967\",\n \"1799977\",\n \"1800004\",\n \"1800017\",\n \"1800024\",\n \"1800028\",\n \"1800032\",\n \"10446574\",\n \"1800149\",\n \"9536457\",\n \"1802776\",\n \"9496311\",\n \"6097260\",\n \"8729319\",\n \"7712384\",\n \"7981386\",\n \"8304206\",\n \"8742426\",\n \"9069966\",\n \"4301068\",\n \"4534389\",\n \"4534207\",\n \"10638451\",\n \"4301282\",\n \"4301283\",\n \"4301306\",\n \"4301307\",\n \"8751100\",\n \"9395261\",\n \"9564779\",\n \"4532273\",\n \"4532283\",\n \"4532811\",\n \"12103087\",\n \"4534663\",\n \"4534669\",\n \"7558165\",\n \"8050639\",\n \"8440999\",\n \"8551997\",\n \"8562506\",\n \"8647523\",\n \"8761810\",\n \"8781370\",\n \"8998296\",\n \"9042018\",\n \"9163659\",\n \"9241105\",\n \"9247947\",\n \"9255102\",\n \"9261458\",\n \"9281907\",\n \"9288185\",\n \"9291297\",\n \"9362785\",\n \"9373309\",\n \"9390293\",\n \"9424681\",\n \"9452702\",\n \"9474256\",\n \"9481002\",\n \"9484411\",\n \"9485070\",\n \"9488551\",\n \"9530271\",\n \"9530928\",\n \"9533506\",\n \"9534429\",\n \"9544558\",\n \"9545480\",\n \"9552253\",\n \"9573163\",\n \"9577379\",\n \"9590907\",\n \"9591877\",\n \"9594509\",\n \"9595155\",\n \"9602019\",\n \"9634575\",\n \"4533273\",\n \"4534540\",\n \"11922580\",\n \"8890502\",\n \"9135821\",\n \"4534038\",\n \"4533202\",\n \"4534398\",\n \"9406822\",\n \"9432810\",\n \"6544687\",\n \"4534538\",\n \"4534360\",\n \"4532269\",\n \"4533123\",\n \"4533125\",\n \"4533128\",\n \"4533136\",\n \"4533661\",\n \"4533663\",\n \"4533671\",\n \"4534408\",\n \"4534458\",\n \"4534533\",\n \"9248830\",\n \"9363692\",\n \"9556427\",\n \"9597741\",\n \"9503548\",\n \"6116341\",\n \"6116368\",\n \"9415435\",\n \"9424082\",\n \"9610447\",\n \"10659737\",\n \"6132989\",\n \"6132762\",\n \"7589577\",\n \"7779226\",\n \"8818378\",\n \"8928353\",\n \"9538684\",\n \"9486411\",\n \"6133075\",\n \"7717385\",\n \"8424964\",\n \"9511749\",\n \"10378302\",\n \"9890366\",\n \"9910243\",\n \"5883985\",\n \"6132781\",\n \"10967713\",\n \"11054256\",\n \"10118643\",\n \"9875111\",\n \"9342344\",\n \"8021109\",\n \"9496896\",\n \"9629365\",\n \"11478679\",\n \"9478331\",\n \"10121804\",\n \"11311045\",\n \"5108640\",\n \"5110377\",\n \"5110644\",\n \"7654770\",\n \"6116899\",\n \"6132797\",\n \"1774283\",\n \"1774285\",\n \"1779334\",\n \"5114189\",\n \"5114192\",\n \"5114198\",\n \"11452421\",\n \"11466090\",\n \"11470672\",\n \"11590674\",\n \"11615055\",\n \"11619030\",\n \"11626773\",\n \"11627464\",\n \"11660145\",\n \"11713256\",\n \"11749278\",\n \"11753804\",\n \"11781300\",\n \"11859640\",\n \"11887065\",\n \"1763072\",\n \"5109259\",\n \"5109270\",\n \"5109299\",\n \"5109345\",\n \"5109349\",\n \"5109369\",\n \"5109385\",\n \"5109407\",\n \"5109413\",\n \"5109418\",\n \"5109437\",\n \"5772063\",\n \"8755207\",\n \"8943174\",\n \"9038042\",\n \"9307254\",\n \"9334639\",\n \"9387782\",\n \"9404919\",\n \"9506719\",\n \"5112130\",\n \"5112131\",\n \"8491927\",\n \"4534675\",\n \"4534681\",\n \"4534683\",\n \"4534685\",\n \"4534686\",\n \"4688142\",\n \"6116440\",\n \"9244066\",\n \"9551316\",\n \"7398419\",\n \"1792555\",\n \"1792560\",\n \"1792564\",\n \"8108800\",\n \"1800130\",\n \"1800140\",\n \"1771634\",\n \"1771650\",\n \"1771675\",\n \"1771678\",\n \"1771698\",\n \"8581601\",\n \"9549172\",\n \"9623131\",\n \"1774929\",\n \"1770772\",\n \"1770773\",\n \"1770821\",\n \"1770828\",\n \"1770849\",\n \"1770869\",\n \"1770880\",\n \"1770918\",\n \"1770955\",\n \"1771019\",\n \"1771040\",\n \"1771055\",\n \"1771067\",\n \"1771143\",\n \"1771169\",\n \"1771203\",\n \"1771204\",\n \"1771214\",\n \"1771245\",\n \"1771296\",\n \"1771308\",\n \"4533695\",\n \"4533714\",\n \"4533720\",\n \"6132931\",\n \"7940536\",\n \"1765751\",\n \"1765752\",\n \"10841562\",\n \"5113847\",\n \"5113853\",\n \"5772309\",\n \"5108660\",\n \"5108665\",\n \"5108670\",\n \"5108671\",\n \"5108705\",\n \"5108724\",\n \"5108737\",\n \"5108752\",\n \"5108761\",\n \"5108787\",\n \"5108794\",\n \"5108796\",\n \"5734817\",\n \"6132880\",\n \"9243764\",\n \"9374637\",\n \"9586329\",\n \"1768196\",\n \"1768199\",\n \"1768201\",\n \"11783188\",\n \"4534525\",\n \"1773901\",\n \"1773904\",\n \"1759351\",\n \"1759394\",\n \"1789512\",\n \"1789530\",\n \"4533344\",\n \"4533345\",\n \"4533347\",\n \"4533360\",\n \"4533362\",\n \"9490756\",\n \"10370112\",\n \"10933525\",\n \"5110282\",\n \"11437060\",\n \"11566649\",\n \"11615549\",\n \"11714235\",\n \"11731155\",\n \"11819666\",\n \"1797793\",\n \"1797864\",\n \"1797903\",\n \"1797942\",\n \"1797965\",\n \"4532203\",\n \"4532206\",\n \"4532208\",\n \"4532216\",\n \"4532236\",\n \"4532239\",\n \"4532253\",\n \"4532260\",\n \"4532264\",\n \"4532266\",\n \"6115772\",\n \"6115793\",\n \"6115820\",\n \"6115822\",\n \"6115830\",\n \"8103163\",\n \"9893740\",\n \"1782249\",\n \"1782267\",\n \"1782273\",\n \"1782277\",\n \"1782279\",\n \"1782289\",\n \"1781248\",\n \"10063383\",\n \"1767259\",\n \"1767293\",\n \"1767302\",\n \"1792814\",\n \"8363507\",\n \"11501104\",\n \"9325654\",\n \"1776094\",\n \"9354669\",\n \"10458175\",\n \"10683012\",\n \"10702885\",\n \"10658576\",\n \"10714961\",\n \"10867462\",\n \"1822257\",\n \"1822346\",\n \"9253819\",\n \"9517291\",\n \"9561820\",\n \"1822487\",\n \"1822490\",\n \"1822493\",\n \"11562243\",\n \"1822587\",\n \"1822610\",\n \"1822613\",\n \"5118459\",\n \"5118474\",\n \"5118509\",\n \"5118524\",\n \"1822667\",\n \"9778438\",\n \"1822784\",\n \"1822787\",\n \"1822788\",\n \"1822796\",\n \"1822805\",\n \"1822819\",\n \"1822830\",\n \"1822848\",\n \"1822852\",\n \"1822916\",\n \"1822917\",\n \"1823294\",\n \"1823444\",\n \"6133742\",\n \"1823493\",\n \"1823573\",\n \"5118565\",\n \"1823604\",\n \"7346263\",\n \"1823637\",\n \"6133720\",\n \"1823706\",\n \"10996761\",\n \"1823726\",\n \"5118582\",\n \"1824080\",\n \"1824113\",\n \"1824117\",\n \"1824121\",\n \"1824131\",\n \"1824189\",\n \"1824242\",\n \"5734235\",\n \"6133692\",\n \"7875265\",\n \"5118798\",\n \"1824259\",\n \"1824280\",\n \"1824330\",\n \"1824338\",\n \"1824354\",\n \"1824390\",\n \"1824442\",\n \"1824449\",\n \"1824571\",\n \"1824666\",\n \"1824751\",\n \"1824766\",\n \"1826020\",\n \"1824845\",\n \"5118828\",\n \"1824997\",\n \"1825064\",\n \"5118859\",\n \"1825077\",\n \"1825082\",\n \"1825083\",\n \"4534909\",\n \"4534914\",\n \"9426054\",\n \"1825156\",\n \"1825176\",\n \"4534826\",\n \"1825218\",\n \"1825238\",\n \"1825336\",\n \"7346284\",\n \"1825373\",\n \"1825391\",\n \"1825428\",\n \"1825430\",\n \"5118892\",\n \"5118904\",\n \"7624468\",\n \"7937573\",\n \"8397564\",\n \"1825539\",\n \"5118934\",\n \"5118944\",\n \"5118949\",\n \"5118974\",\n \"5118978\",\n \"1825786\",\n \"7345777\",\n \"1825920\",\n \"1825950\",\n \"1825956\",\n \"1825967\",\n \"1825971\",\n \"1825983\",\n \"1826017\",\n \"1826022\",\n \"1826033\",\n \"1826048\",\n \"1826058\",\n \"1826084\",\n \"1826108\",\n \"1826129\",\n \"1826156\",\n \"1826163\",\n \"1826164\",\n \"1826167\",\n \"1826169\",\n \"1826172\",\n \"1826173\",\n \"1826175\",\n \"1826181\",\n \"11322712\",\n \"5118996\",\n \"5119000\",\n \"6133700\",\n \"1826222\",\n \"10510959\",\n \"11059353\",\n \"6133750\",\n \"5119009\",\n \"5119011\",\n \"5119013\",\n \"5119016\",\n \"5119026\",\n \"5119039\",\n \"5119046\",\n \"5119050\",\n \"10115073\",\n \"1826772\",\n \"9807789\",\n \"1826823\",\n \"1827103\",\n \"1827112\",\n \"1827113\",\n \"1827125\",\n \"1827132\",\n \"1827133\",\n \"1827145\",\n \"1827161\",\n \"5119143\",\n \"1827349\",\n \"1827408\",\n \"1827414\",\n \"1827429\",\n \"1827484\",\n \"1827507\",\n \"4534869\",\n \"6133691\",\n \"9883140\",\n \"5119181\",\n \"5119183\",\n \"5119193\",\n \"5119211\",\n \"5119223\",\n \"5119239\",\n \"5119245\",\n \"1827645\",\n \"1827649\",\n \"1827650\",\n \"1827687\",\n \"1827711\",\n \"1827716\",\n \"1827775\",\n \"11905965\",\n \"1827802\",\n \"1827810\",\n \"1827826\",\n \"1827829\",\n \"1828105\",\n \"11435704\",\n \"1828162\",\n \"1828180\",\n \"4534872\",\n \"1828268\",\n \"6201790\",\n \"10194663\",\n \"10551923\",\n \"9454052\",\n \"7346286\",\n \"9255512\",\n \"6133680\",\n \"6133681\",\n \"6133684\",\n \"6133687\",\n \"6133688\",\n \"7346276\",\n \"9921001\",\n \"5118837\",\n \"5118841\",\n \"7346271\",\n \"7346273\",\n \"9486293\",\n \"1822502\",\n \"10043566\",\n \"10266782\",\n \"1896863\",\n \"1903598\",\n \"1892915\",\n \"1908317\",\n \"1908337\",\n \"1908339\",\n \"10023821\",\n \"1892509\",\n \"1892544\",\n \"1892554\",\n \"1892555\",\n \"1892621\",\n \"1892634\",\n \"11688586\",\n \"5127748\",\n \"5806166\",\n \"10587253\",\n \"1892729\",\n \"1892736\",\n \"1892742\",\n \"1892746\",\n \"1892759\",\n \"1892761\",\n \"1892770\",\n \"4299095\",\n \"8941801\",\n \"1892811\",\n \"1892814\",\n \"11464595\",\n \"1892821\",\n \"1892837\",\n \"1892851\",\n \"1892855\",\n \"1892856\",\n \"1892858\",\n \"1892863\",\n \"5127805\",\n \"5127814\",\n \"5127822\",\n \"1892944\",\n \"5127835\",\n \"5127867\",\n \"5127893\",\n \"5127916\",\n \"5127932\",\n \"5127955\",\n \"5127971\",\n \"5127992\",\n \"5127998\",\n \"7346346\",\n \"9963153\",\n \"1893137\",\n \"1893177\",\n \"1893204\",\n \"1893241\",\n \"1893266\",\n \"5792081\",\n \"5128005\",\n \"5128007\",\n \"5128011\",\n \"5128034\",\n \"1893329\",\n \"1893337\",\n \"1893341\",\n \"1893377\",\n \"1893381\",\n \"1893480\",\n \"9113409\",\n \"10055104\",\n \"10477747\",\n \"12106975\",\n \"1893526\",\n \"1893538\",\n \"1893546\",\n \"1893551\",\n \"1893558\",\n \"1893562\",\n \"1893612\",\n \"1893645\",\n \"1893660\",\n \"1893663\",\n \"1893699\",\n \"1893787\",\n \"1893793\",\n \"1893901\",\n \"1893921\",\n \"1893923\",\n \"1893951\",\n \"4704279\",\n \"8832485\",\n \"8982591\",\n \"9136904\",\n \"10333787\",\n \"1893989\",\n \"1893993\",\n \"1893998\",\n \"1894002\",\n \"1894012\",\n \"1894054\",\n \"1894057\",\n \"1894060\",\n \"10653980\",\n \"1894074\",\n \"1894076\",\n \"1894082\",\n \"1894085\",\n \"1894087\",\n \"1894088\",\n \"1894102\",\n \"1894164\",\n \"1894268\",\n \"1894293\",\n \"1894298\",\n \"5882039\",\n \"1894329\",\n \"1894342\",\n \"1894349\",\n \"5128161\",\n \"5128169\",\n \"5128182\",\n \"7712938\",\n \"10398658\",\n \"1894714\",\n \"4535614\",\n \"4535627\",\n \"4535630\",\n \"4535632\",\n \"4535636\",\n \"8049830\",\n \"10639484\",\n \"1894840\",\n \"1894896\",\n \"4535827\",\n \"10412261\",\n \"1895037\",\n \"1895138\",\n \"4535809\",\n \"4535817\",\n \"4535819\",\n \"9519321\",\n \"5128224\",\n \"5128225\",\n \"1895159\",\n \"1895176\",\n \"1895185\",\n \"1895203\",\n \"1895250\",\n \"5128232\",\n \"5128250\",\n \"5128266\",\n \"5128323\",\n \"5128326\",\n \"5128353\",\n \"5128357\",\n \"5128363\",\n \"5128380\",\n \"6231906\",\n \"9804158\",\n \"1895448\",\n \"1895499\",\n \"1895527\",\n \"1895609\",\n \"1895667\",\n \"1895670\",\n \"1895709\",\n \"9192882\",\n \"1895733\",\n \"1895745\",\n \"1895768\",\n \"1895773\",\n \"1895789\",\n \"1895809\",\n \"1895818\",\n \"1895820\",\n \"1895829\",\n \"8763986\",\n \"9016382\",\n \"1895838\",\n \"1895867\",\n \"1895875\",\n \"1895886\",\n \"1895904\",\n \"1895956\",\n \"1895984\",\n \"1895992\",\n \"1896061\",\n \"1896063\",\n \"1896073\",\n \"1896087\",\n \"1896105\",\n \"1896126\",\n \"1896141\",\n \"1896142\",\n \"1896152\",\n \"5128398\",\n \"5128423\",\n \"5128432\",\n \"5128433\",\n \"5128438\",\n \"5128446\",\n \"5128475\",\n \"5128488\",\n \"5128491\",\n \"9981187\",\n \"1896304\",\n \"1896316\",\n \"1896547\",\n \"1896600\",\n \"1896603\",\n \"1896614\",\n \"1896628\",\n \"10465059\",\n \"1896658\",\n \"1896749\",\n \"1896754\",\n \"10353400\",\n \"1896756\",\n \"1896763\",\n \"1896774\",\n \"5128519\",\n \"1896841\",\n \"1896876\",\n \"5128545\",\n \"9361954\",\n \"1896915\",\n \"1896922\",\n \"1896932\",\n \"5129251\",\n \"9590057\",\n \"11701883\",\n \"5129257\",\n \"5925238\",\n \"8367663\",\n \"1897664\",\n \"1897677\",\n \"1897685\",\n \"1897692\",\n \"1897722\",\n \"1897747\",\n \"1897770\",\n \"5129266\",\n \"1897808\",\n \"1897814\",\n \"1897817\",\n \"1897834\",\n \"1897852\",\n \"1897873\",\n \"1897904\",\n \"1897946\",\n \"1897965\",\n \"1897970\",\n \"1897972\",\n \"1897977\",\n \"1897980\",\n \"1897985\",\n \"1897990\",\n \"1898002\",\n \"1898017\",\n \"10073321\",\n \"10365587\",\n \"10375186\",\n \"10401396\",\n \"1898077\",\n \"1898133\",\n \"1898143\",\n \"1898174\",\n \"1898200\",\n \"1898203\",\n \"10383968\",\n \"1898234\",\n \"10321900\",\n \"1898250\",\n \"10114575\",\n \"10208801\",\n \"10265559\",\n \"1898286\",\n \"1898290\",\n \"4299368\",\n \"4299370\",\n \"5129293\",\n \"5714367\",\n \"5714369\",\n \"5806175\",\n \"5806176\",\n \"5806177\",\n \"7346344\",\n \"8961830\",\n \"9396180\",\n \"9563837\",\n \"1898348\",\n \"1898350\",\n \"1898352\",\n \"1898358\",\n \"1898367\",\n \"1898368\",\n \"1898370\",\n \"1898374\",\n \"1898391\",\n \"1898402\",\n \"1898414\",\n \"1898416\",\n \"1898424\",\n \"1898431\",\n \"1898434\",\n \"1898441\",\n \"1898521\",\n \"1898544\",\n \"5129374\",\n \"5129378\",\n \"5129387\",\n \"5129405\",\n \"5129417\",\n \"5129430\",\n \"5129432\",\n \"5129451\",\n \"5714356\",\n \"5714361\",\n \"6228464\",\n \"5129473\",\n \"5129479\",\n \"5129480\",\n \"5129481\",\n \"5129489\",\n \"5129496\",\n \"5129502\",\n \"5129515\",\n \"5129517\",\n \"5129520\",\n \"5129524\",\n \"5129531\",\n \"5129535\",\n \"9208233\",\n \"9255328\",\n \"5129544\",\n \"1898686\",\n \"1898789\",\n \"1898841\",\n \"1898848\",\n \"1898858\",\n \"1898865\",\n \"1898946\",\n \"1898958\",\n \"1898970\",\n \"1898988\",\n \"1899048\",\n \"5129636\",\n \"1899071\",\n \"1899144\",\n \"1899164\",\n \"1899187\",\n \"1899198\",\n \"4299211\",\n \"4299213\",\n \"10474236\",\n \"1899835\",\n \"1899873\",\n \"1899893\",\n \"4704400\",\n \"4704401\",\n \"4704404\",\n \"4704407\",\n \"1899922\",\n \"9028122\",\n \"9446281\",\n \"1899931\",\n \"1899932\",\n \"1899940\",\n \"1899943\",\n \"1899947\",\n \"1899950\",\n \"1899956\",\n \"1899989\",\n \"8445010\",\n \"1899994\",\n \"1900014\",\n \"1900024\",\n \"1900026\",\n \"8847500\",\n \"9208918\",\n \"9925669\",\n \"1900053\",\n \"1900055\",\n \"1900093\",\n \"1900112\",\n \"1900121\",\n \"1900131\",\n \"1900134\",\n \"1900172\",\n \"1900175\",\n \"1900195\",\n \"1900197\",\n \"1900199\",\n \"1900233\",\n \"1900249\",\n \"1900295\",\n \"1900303\",\n \"1900345\",\n \"1900408\",\n \"1900485\",\n \"1900523\",\n \"1900565\",\n \"1900578\",\n \"1900618\",\n \"1900626\",\n \"1900632\",\n \"1900768\",\n \"1900787\",\n \"1900825\",\n \"1900830\",\n \"1900872\",\n \"9190731\",\n \"1900890\",\n \"1900897\",\n \"1900918\",\n \"1900939\",\n \"9392084\",\n \"11701991\",\n \"1901001\",\n \"1901153\",\n \"1901189\",\n \"9072828\",\n \"1901213\",\n \"1901257\",\n \"1901261\",\n \"1901268\",\n \"8247566\",\n \"5130277\",\n \"5130296\",\n \"1901372\",\n \"1901399\",\n \"1901404\",\n \"1901411\",\n \"1901427\",\n \"1901428\",\n \"1901429\",\n \"1901435\",\n \"1901463\",\n \"5130314\",\n \"5130322\",\n \"5130326\",\n \"5130330\",\n \"1901533\",\n \"1901580\",\n \"1901669\",\n \"1901735\",\n \"1901744\",\n \"1901781\",\n \"1901782\",\n \"1901794\",\n \"1901801\",\n \"1901804\",\n \"1901810\",\n \"1901832\",\n \"1901850\",\n \"11135155\",\n \"11219489\",\n \"11546465\",\n \"11623814\",\n \"11726907\",\n \"11832697\",\n \"11841763\",\n \"12258652\",\n \"5130335\",\n \"5130347\",\n \"5130369\",\n \"5130392\",\n \"5130393\",\n \"5130396\",\n \"5130400\",\n \"5130439\",\n \"5130444\",\n \"5130448\",\n \"5130456\",\n \"5130464\",\n \"5130467\",\n \"5130471\",\n \"5130476\",\n \"5130487\",\n \"5130502\",\n \"5130514\",\n \"5130521\",\n \"5130528\",\n \"5130542\",\n \"5130548\",\n \"9357385\",\n \"1902106\",\n \"1902108\",\n \"1902110\",\n \"1902111\",\n \"1902114\",\n \"1902117\",\n \"1902118\",\n \"1902211\",\n \"1902233\",\n \"1902244\",\n \"1902248\",\n \"1902300\",\n \"1902346\",\n \"1902378\",\n \"1902384\",\n \"1902388\",\n \"1902406\",\n \"1902410\",\n \"1902430\",\n \"1902451\",\n \"1902458\",\n \"1902479\",\n \"1902502\",\n \"1902533\",\n \"1902543\",\n \"1902560\",\n \"1902568\",\n \"1902572\",\n \"1902586\",\n \"5130559\",\n \"1902615\",\n \"1902620\",\n \"1902623\",\n \"1902642\",\n \"1902660\",\n \"1902670\",\n \"1902676\",\n \"1902680\",\n \"1902692\",\n \"1902699\",\n \"1902702\",\n \"1902703\",\n \"1902704\",\n \"4299218\",\n \"1902749\",\n \"8140883\",\n \"8189761\",\n \"10512675\",\n \"4535689\",\n \"1902814\",\n \"1902880\",\n \"1902882\",\n \"1902885\",\n \"5130562\",\n \"5130574\",\n \"1903009\",\n \"1903028\",\n \"10394962\",\n \"10577473\",\n \"5130748\",\n \"5130775\",\n \"5130813\",\n \"5130814\",\n \"5130851\",\n \"5130904\",\n \"5130908\",\n \"5130944\",\n \"5130971\",\n \"5131058\",\n \"9968404\",\n \"9999965\",\n \"1903607\",\n \"1903634\",\n \"1903636\",\n \"1903646\",\n \"10114865\",\n \"1903658\",\n \"1903661\",\n \"1903683\",\n \"1904206\",\n \"1904272\",\n \"1904281\",\n \"1904282\",\n \"1904283\",\n \"5131597\",\n \"5131608\",\n \"5131637\",\n \"1904382\",\n \"7776011\",\n \"1904701\",\n \"1904719\",\n \"1904728\",\n \"1904760\",\n \"1904764\",\n \"1904798\",\n \"5131951\",\n \"1904884\",\n \"1904887\",\n \"1904888\",\n \"1904916\",\n \"1904921\",\n \"1904922\",\n \"1904932\",\n \"1904938\",\n \"1904943\",\n \"1904948\",\n \"1904996\",\n \"1905079\",\n \"1905142\",\n \"1905161\",\n \"1905162\",\n \"1905172\",\n \"1905187\",\n \"1905189\",\n \"1905242\",\n \"1905257\",\n \"1905267\",\n \"1905281\",\n \"1905297\",\n \"1905299\",\n \"1905301\",\n \"1905310\",\n \"1905317\",\n \"6221746\",\n \"1905321\",\n \"10312760\",\n \"10615631\",\n \"1905383\",\n \"1905396\",\n \"1905451\",\n \"1906006\",\n \"1906014\",\n \"1906030\",\n \"1906063\",\n \"1906117\",\n \"5132523\",\n \"5132529\",\n \"5132540\",\n \"5132545\",\n \"5132550\",\n \"5132591\",\n \"5132713\",\n \"1906552\",\n \"8208583\",\n \"1906604\",\n \"1906621\",\n \"1906679\",\n \"1906715\",\n \"1907153\",\n \"1907190\",\n \"1907235\",\n \"1907250\",\n \"1907272\",\n \"10569879\",\n \"11378273\",\n \"5132839\",\n \"1907395\",\n \"1907399\",\n \"1907430\",\n \"1907432\",\n \"1907436\",\n \"1907475\",\n \"1907498\",\n \"1907511\",\n \"1907534\",\n \"1907541\",\n \"1907547\",\n \"1907569\",\n \"1907576\",\n \"1907580\",\n \"1907620\",\n \"1907625\",\n \"1907637\",\n \"1907666\",\n \"1907672\",\n \"1907683\",\n \"1907687\",\n \"4535754\",\n \"5881946\",\n \"7976131\",\n \"1907727\",\n \"1908011\",\n \"1908044\",\n \"1908052\",\n \"1908055\",\n \"1908123\",\n \"1908138\",\n \"1908144\",\n \"1908146\",\n \"1908148\",\n \"1908150\",\n \"1908168\",\n \"1908174\",\n \"1908199\",\n \"1908203\",\n \"1908204\",\n \"1908207\",\n \"1908217\",\n \"1908256\",\n \"1908258\",\n \"1908262\",\n \"1908299\",\n \"1908302\",\n \"1908309\",\n \"1908352\",\n \"1908356\",\n \"1908367\",\n \"1908577\",\n \"1908660\",\n \"1908700\",\n \"1908702\",\n \"1908707\",\n \"1908713\",\n \"5133035\",\n \"1908775\",\n \"5133051\",\n \"11608942\",\n \"1908818\",\n \"1908840\",\n \"1908863\",\n \"1908871\",\n \"1908897\",\n \"1908929\",\n \"1908953\",\n \"1908962\",\n \"10542548\",\n \"1908995\",\n \"1909004\",\n \"1909019\",\n \"1909025\",\n \"1909039\",\n \"1909064\",\n \"10046510\",\n \"1909070\",\n \"1909108\",\n \"1909123\",\n \"1909128\",\n \"1909135\",\n \"1909155\",\n \"1909170\",\n \"1909185\",\n \"1909191\",\n \"1909209\",\n \"1909211\",\n \"1909213\",\n \"9851867\",\n \"1909216\",\n \"7346301\",\n \"8727750\",\n \"8978362\",\n \"1909241\",\n \"1909281\",\n \"1909319\",\n \"10656625\",\n \"12234977\",\n \"1909398\",\n \"1909436\",\n \"1909453\",\n \"1909457\",\n \"4704352\",\n \"4704356\",\n \"1909489\",\n \"1909532\",\n \"1909573\",\n \"1909607\",\n \"1909649\",\n \"1909659\",\n \"1909800\",\n \"1909810\",\n \"1909818\",\n \"1909838\",\n \"1909854\",\n \"1909865\",\n \"1909879\",\n \"1909884\",\n \"5133142\",\n \"5133251\",\n \"5133255\",\n \"5133265\",\n \"5133366\",\n \"5133451\",\n \"5133503\",\n \"5133523\",\n \"1910371\",\n \"1910378\",\n \"10558140\",\n \"5133565\",\n \"5133568\",\n \"1910706\",\n \"1910753\",\n \"6133858\",\n \"1910773\",\n \"5133581\",\n \"5133589\",\n \"1910809\",\n \"1910812\",\n \"1911076\",\n \"1911077\",\n \"1911093\",\n \"1911112\",\n \"1911122\",\n \"1911168\",\n \"1911178\",\n \"1911182\",\n \"1911198\",\n \"1911246\",\n \"1911278\",\n \"1911298\",\n \"1911300\",\n \"1911461\",\n \"1911503\",\n \"7728366\",\n \"8396242\",\n \"5133591\",\n \"5133595\",\n \"5133609\",\n \"5133610\",\n \"5133615\",\n \"5133621\",\n \"5133622\",\n \"5133623\",\n \"5133634\",\n \"5133635\",\n \"5133637\",\n \"8548427\",\n \"9086331\",\n \"9219529\",\n \"1911577\",\n \"5133687\",\n \"5133689\",\n \"1911633\",\n \"4535592\",\n \"4535596\",\n \"1911736\",\n \"1911755\",\n \"7809779\",\n \"8078362\",\n \"1911939\",\n \"12322536\",\n \"12335869\",\n \"1911966\",\n \"1912003\",\n \"1912036\",\n \"1912119\",\n \"5133693\",\n \"5133695\",\n \"10203260\",\n \"5133736\",\n \"5133786\",\n \"1912325\",\n \"1912372\",\n \"1912395\",\n \"1912428\",\n \"1912470\",\n \"4299535\",\n \"4299565\",\n \"4299576\",\n \"4299597\",\n \"4299599\",\n \"5133864\",\n \"5133920\",\n \"5133990\",\n \"5714410\",\n \"5772890\",\n \"7428726\",\n \"7799370\",\n \"8810143\",\n \"10638244\",\n \"9277330\",\n \"1912506\",\n \"8964866\",\n \"10097687\",\n \"10137350\",\n \"4535581\",\n \"5134098\",\n \"5134301\",\n \"8312017\",\n \"1913091\",\n \"1913105\",\n \"1913175\",\n \"1913178\",\n \"1913328\",\n \"1913351\",\n \"1913371\",\n \"11046092\",\n \"1908108\",\n \"5134469\",\n \"5134517\",\n \"5134543\",\n \"5134559\",\n \"5134569\",\n \"5134583\",\n \"5134607\",\n \"5134621\",\n \"5134659\",\n \"5134661\",\n \"5134667\",\n \"5134682\",\n \"5134686\",\n \"5134687\",\n \"5134693\",\n \"5134759\",\n \"5134810\",\n \"5134815\",\n \"5134837\",\n \"5134884\",\n \"5135026\",\n \"5135191\",\n \"5135355\",\n \"5714507\",\n \"5772948\",\n \"7509928\",\n \"7700512\",\n \"7738295\",\n \"7791190\",\n \"7791558\",\n \"7798382\",\n \"7940299\",\n \"8047165\",\n \"8137978\",\n \"8167638\",\n \"8214814\",\n \"8233062\",\n \"8262258\",\n \"8295666\",\n \"8298764\",\n \"8314088\",\n \"9915028\",\n \"9967126\",\n \"1914410\",\n \"1914416\",\n \"1914420\",\n \"1914421\",\n \"1914424\",\n \"1914433\",\n \"1914435\",\n \"1914439\",\n \"1914440\",\n \"1914442\",\n \"1914458\",\n \"1914464\",\n \"1914465\",\n \"1914477\",\n \"1914484\",\n \"1914496\",\n \"1914498\",\n \"1914500\",\n \"1914501\",\n \"1914511\",\n \"4299191\",\n \"4299201\",\n \"8918036\",\n \"1914693\",\n \"1914697\",\n \"1915031\",\n \"1915079\",\n \"1915080\",\n \"1915110\",\n \"1915140\",\n \"1915144\",\n \"1915154\",\n \"1915160\",\n \"1915193\",\n \"9185656\",\n \"9988287\",\n \"1915262\",\n \"1915270\",\n \"1915275\",\n \"1915325\",\n \"1915332\",\n \"8669164\",\n \"1915339\",\n \"1915368\",\n \"1915369\",\n \"1915396\",\n \"1915401\",\n \"1915415\",\n \"1915417\",\n \"1915427\",\n \"1915430\",\n \"1915456\",\n \"1915469\",\n \"1915470\",\n \"1915487\",\n \"1915492\",\n \"1915499\",\n \"1915506\",\n \"10078453\",\n \"10196441\",\n \"10487080\",\n \"11372793\",\n \"11375508\",\n \"11516142\",\n \"11535847\",\n \"11572120\",\n \"12301192\",\n \"12357826\",\n \"12358748\",\n \"1909736\",\n \"5135573\",\n \"5135643\",\n \"5135839\",\n \"5135944\",\n \"5136059\",\n \"5136113\",\n \"5136200\",\n \"5136306\",\n \"1916347\",\n \"1916352\",\n \"1916376\",\n \"1916410\",\n \"1916412\",\n \"1916458\",\n \"1916509\",\n \"1916554\",\n \"7854318\",\n \"5136372\",\n \"1916700\",\n \"1916701\",\n \"1916758\",\n \"1916772\",\n \"1916790\",\n \"5136514\",\n \"5136594\",\n \"5136681\",\n \"5136713\",\n \"5136752\",\n \"5136790\",\n \"5136866\",\n \"5136868\",\n \"5136939\",\n \"5137022\",\n \"5137085\",\n \"5137086\",\n \"5137128\",\n \"5137156\",\n \"5137166\",\n \"5137257\",\n \"5137291\",\n \"5137330\",\n \"9251096\",\n \"5137388\",\n \"1917827\",\n \"1917830\",\n \"1917834\",\n \"1917840\",\n \"1917911\",\n \"1918026\",\n \"1918076\",\n \"1918077\",\n \"1918078\",\n \"1918082\",\n \"1918086\",\n \"1918094\",\n \"1918097\",\n \"1918133\",\n \"1918149\",\n \"1918207\",\n \"1918212\",\n \"10250149\",\n \"1918220\",\n \"1918263\",\n \"1918268\",\n \"1918269\",\n \"1918280\",\n \"1918293\",\n \"1918321\",\n \"1918394\",\n \"1918395\",\n \"1918406\",\n \"1918408\",\n \"1918411\",\n \"1918416\",\n \"1918467\",\n \"1918495\",\n \"1918497\",\n \"1918509\",\n \"1918517\",\n \"1918532\",\n \"1918533\",\n \"1918547\",\n \"1918553\",\n \"1918554\",\n \"4299802\",\n \"4299804\",\n \"1918596\",\n \"1918601\",\n \"1918627\",\n \"1918632\",\n \"1918667\",\n \"1918669\",\n \"1918688\",\n \"1918694\",\n \"1918733\",\n \"1918736\",\n \"1918776\",\n \"1918789\",\n \"1918795\",\n \"1918843\",\n \"1918854\",\n \"1918859\",\n \"1918868\",\n \"4535539\",\n \"8035998\",\n \"8176911\",\n \"5137397\",\n \"5137408\",\n \"1918964\",\n \"1918968\",\n \"1918972\",\n \"1918984\",\n \"1918986\",\n \"1918988\",\n \"1919007\",\n \"1919010\",\n \"7622059\",\n \"7988274\",\n \"8404037\",\n \"5128045\",\n \"5128067\",\n \"5128118\",\n \"10059034\",\n \"10415847\",\n \"10454590\",\n \"11645316\",\n \"4535618\",\n \"4535620\",\n \"4535510\",\n \"10455658\",\n \"11573394\",\n \"10595994\",\n \"9902073\",\n \"10000384\",\n \"10043827\",\n \"11419137\",\n \"11760688\",\n \"11840957\",\n \"4704316\",\n \"5881748\",\n \"4704500\",\n \"4704501\",\n \"5130587\",\n \"5130682\",\n \"5130696\",\n \"7762841\",\n \"10376507\",\n \"10717680\",\n \"5131096\",\n \"5131142\",\n \"5131192\",\n \"5131256\",\n \"5131293\",\n \"5131339\",\n \"5131347\",\n \"5131372\",\n \"5131407\",\n \"5131442\",\n \"5131443\",\n \"5131467\",\n \"5131493\",\n \"5131495\",\n \"5131520\",\n \"5131540\",\n \"5131555\",\n \"5131565\",\n \"5131585\",\n \"5131593\",\n \"10228568\",\n \"10259880\",\n \"10277877\",\n \"10508423\",\n \"11425145\",\n \"5131982\",\n \"5132003\",\n \"5132008\",\n \"5132078\",\n \"5132079\",\n \"5132084\",\n \"5132137\",\n \"5132154\",\n \"5132183\",\n \"5132191\",\n \"5132221\",\n \"5132225\",\n \"5132238\",\n \"5132239\",\n \"5132246\",\n \"5132252\",\n \"5132254\",\n \"5132283\",\n \"5132289\",\n \"5132317\",\n \"5132346\",\n \"5132347\",\n \"5132360\",\n \"5132374\",\n \"5132398\",\n \"5132429\",\n \"5132440\",\n \"5132446\",\n \"5132461\",\n \"5132479\",\n \"5132483\",\n \"5132505\",\n \"5714312\",\n \"5714333\",\n \"7346328\",\n \"7346335\",\n \"8001799\",\n \"9541133\",\n \"5133088\",\n \"5714299\",\n \"5714302\",\n \"5806167\",\n \"5881397\",\n \"5881400\",\n \"6100725\",\n \"6100726\",\n \"7642610\",\n \"5135513\",\n \"5135546\",\n \"10873137\",\n \"11525418\",\n \"1896957\",\n \"5128569\",\n \"5128587\",\n \"5128597\",\n \"5128644\",\n \"5128663\",\n \"5128825\",\n \"5128984\",\n \"5129000\",\n \"5129025\",\n \"5129091\",\n \"5129190\",\n \"9087922\",\n \"5130557\",\n \"10201273\",\n \"5131910\",\n \"5881551\",\n \"8138711\",\n \"8549720\",\n \"1910496\",\n \"1910501\",\n \"1910576\",\n \"1910628\",\n \"1910629\",\n \"1910648\",\n \"1910662\",\n \"1910663\",\n \"8643309\",\n \"1902143\",\n \"1902169\",\n \"1902175\",\n \"1902182\",\n \"1899349\",\n \"1899433\",\n \"1899737\",\n \"1899818\",\n \"5129913\",\n \"6229058\",\n \"7768674\",\n \"7867379\",\n \"7934873\",\n \"8168644\",\n \"8393082\",\n \"10265841\",\n \"10511167\",\n \"10662329\",\n \"12045866\",\n \"4299778\",\n \"5132917\",\n \"5132940\",\n \"5132956\",\n \"5132973\",\n \"5133008\",\n \"5133009\",\n \"9964857\",\n \"1914701\",\n \"1914708\",\n \"1914734\",\n \"1914749\",\n \"7346340\",\n \"9745549\",\n \"1918584\",\n \"1951370\",\n \"1951412\",\n \"1951448\",\n \"1951462\",\n \"1951492\",\n \"1951505\",\n \"1951507\",\n \"1951522\",\n \"1951529\",\n \"1951542\",\n \"1951557\",\n \"4527355\",\n \"5142842\",\n \"5142870\",\n \"1951631\",\n \"9512631\",\n \"1951649\",\n \"1951657\",\n \"1951660\",\n \"1951671\",\n \"1951675\",\n \"1951747\",\n \"9156165\",\n \"1951784\",\n \"1951791\",\n \"5734305\",\n \"1951818\",\n \"1951840\",\n \"1951844\",\n \"1951859\",\n \"1951874\",\n \"1951881\",\n \"5734326\",\n \"1951919\",\n \"1952014\",\n \"5142903\",\n \"1952032\",\n \"1952034\",\n \"1952043\",\n \"1952052\",\n \"1952062\",\n \"1952093\",\n \"1952130\",\n \"1952147\",\n \"1952175\",\n \"1952177\",\n \"1952229\",\n \"5142948\",\n \"1952281\",\n \"5143007\",\n \"5143048\",\n \"5143049\",\n \"5143076\",\n \"5143080\",\n \"1952449\",\n \"1952481\",\n \"1952532\",\n \"10782264\",\n \"1952551\",\n \"1952611\",\n \"1952685\",\n \"1952704\",\n \"1952730\",\n \"5143107\",\n \"5143116\",\n \"5143129\",\n \"5143147\",\n \"1952806\",\n \"1952812\",\n \"1952816\",\n \"1952857\",\n \"1951713\",\n \"1951725\",\n \"9502606\",\n \"5885428\",\n \"8604089\",\n \"1832819\",\n \"1832853\",\n \"1832862\",\n \"1832915\",\n \"1832927\",\n \"1832936\",\n \"1833096\",\n \"1833159\",\n \"5880257\",\n \"5880258\",\n \"6097224\",\n \"6097225\",\n \"6097228\",\n \"10045595\",\n \"1853064\",\n \"1853079\",\n \"4529248\",\n \"1853190\",\n \"5976910\",\n \"1868211\",\n \"1868334\",\n \"1868360\",\n \"1868409\",\n \"4702564\",\n \"1868499\",\n \"6544581\",\n \"10548683\",\n \"5125118\",\n \"1868470\",\n \"5141581\",\n \"5141590\",\n \"1735121\",\n \"1735168\",\n \"1735193\",\n \"1735391\",\n \"1735398\",\n \"10597291\",\n \"5102423\",\n \"5102424\",\n \"1735273\",\n \"5102432\",\n \"1941570\",\n \"1941683\",\n \"1941702\",\n \"1941713\",\n \"1941717\",\n \"1941719\",\n \"1941864\",\n \"5120465\",\n \"1843888\",\n \"1843889\",\n \"5120577\",\n \"5120668\",\n \"5120675\",\n \"5120767\",\n \"5121040\",\n \"5121046\",\n \"5121177\",\n \"5121244\",\n \"5121517\",\n \"5121613\",\n \"5121737\",\n \"8273859\",\n \"1843313\",\n \"1843326\",\n \"1843331\",\n \"1843362\",\n \"1843370\",\n \"1843379\",\n \"1842043\",\n \"1842097\",\n \"1842119\",\n \"1842124\",\n \"1842196\",\n \"5120341\",\n \"5120343\",\n \"5120357\",\n \"5120368\",\n \"5120379\",\n \"5120396\",\n \"1842446\",\n \"1842485\",\n \"1842508\",\n \"1842542\",\n \"4301036\",\n \"1842690\",\n \"1842695\",\n \"11854390\",\n \"4529738\",\n \"9755262\",\n \"5120453\",\n \"1843429\",\n \"1843444\",\n \"1843485\",\n \"1843564\",\n \"1843590\",\n \"1843602\",\n \"10327658\",\n \"10619048\",\n \"1730519\",\n \"1730543\",\n \"5101371\",\n \"5101374\",\n \"8292351\",\n \"6122527\",\n \"10304313\",\n \"10607329\",\n \"11484123\",\n \"9114044\",\n \"5101394\",\n \"1730948\",\n \"1730978\",\n \"1731097\",\n \"1731221\",\n \"1731263\",\n \"10458960\",\n \"10469497\",\n \"4525641\",\n \"11431507\",\n \"1731598\",\n \"5101527\",\n \"1731750\",\n \"1731811\",\n \"1731812\",\n \"10535684\",\n \"11563728\",\n \"11904618\",\n \"5101502\",\n \"10049887\",\n \"10134558\",\n \"10307487\",\n \"5806352\",\n \"5806353\",\n \"10450446\",\n \"10629470\",\n \"8008237\",\n \"8130866\",\n \"8402212\",\n \"1872359\",\n \"1872361\",\n \"1872368\",\n \"1878626\",\n \"6133117\",\n \"1878656\",\n \"7628188\",\n \"1878688\",\n \"1878705\",\n \"1878744\",\n \"1878751\",\n \"1878753\",\n \"1878782\",\n \"1878789\",\n \"1878798\",\n \"1878804\",\n \"1878810\",\n \"1878826\",\n \"1878837\",\n \"1878845\",\n \"1878862\",\n \"1878879\",\n \"1878895\",\n \"1878904\",\n \"1878907\",\n \"1878937\",\n \"1878939\",\n \"1878951\",\n \"1878958\",\n \"4531506\",\n \"4531517\",\n \"1879001\",\n \"1879052\",\n \"1879125\",\n \"1879141\",\n \"1879160\",\n \"1879227\",\n \"1879252\",\n \"1879253\",\n \"1879272\",\n \"1879274\",\n \"1879337\",\n \"1879339\",\n \"1879340\",\n \"1879348\",\n \"1879379\",\n \"5734212\",\n \"1879398\",\n \"1879405\",\n \"1879408\",\n \"1879413\",\n \"1879427\",\n \"10366679\",\n \"10874932\",\n \"1879443\",\n \"1879452\",\n \"5126204\",\n \"1879465\",\n \"1879471\",\n \"1879490\",\n \"5126212\",\n \"5126217\",\n \"10177508\",\n \"10851840\",\n \"10857326\",\n \"12231152\",\n \"1879534\",\n \"1879630\",\n \"1879655\",\n \"1879691\",\n \"1879703\",\n \"1879731\",\n \"1879735\",\n \"1879765\",\n \"5126229\",\n \"5126231\",\n \"5126240\",\n \"5126241\",\n \"5126259\",\n \"5126284\",\n \"5126287\",\n \"5126292\",\n \"5126315\",\n \"5126332\",\n \"5126344\",\n \"5126352\",\n \"5126357\",\n \"5126365\",\n \"5126376\",\n \"5126381\",\n \"5126396\",\n \"5126397\",\n \"5126398\",\n \"5126404\",\n \"5126434\",\n \"5126445\",\n \"5126449\",\n \"5126454\",\n \"5126458\",\n \"5802331\",\n \"5802333\",\n \"5126494\",\n \"5126517\",\n \"5126533\",\n \"10915497\",\n \"10922201\",\n \"1879939\",\n \"1879970\",\n \"1879975\",\n \"1880011\",\n \"1880013\",\n \"1880019\",\n \"1880025\",\n \"1880040\",\n \"1880044\",\n \"1880049\",\n \"1880062\",\n \"1880064\",\n \"1880078\",\n \"1880083\",\n \"1880088\",\n \"1880094\",\n \"1880104\",\n \"1880123\",\n \"1880132\",\n \"1880133\",\n \"1880138\",\n \"1880139\",\n \"1880140\",\n \"1880143\",\n \"1880156\",\n \"10489219\",\n \"5126585\",\n \"5126635\",\n \"5126637\",\n \"1880352\",\n \"1880353\",\n \"1880379\",\n \"1880381\",\n \"1880408\",\n \"1880411\",\n \"4302319\",\n \"1880439\",\n \"1880451\",\n \"1880464\",\n \"1880465\",\n \"9524458\",\n \"1880505\",\n \"10056494\",\n \"1880537\",\n \"1880623\",\n \"5126663\",\n \"6133225\",\n \"10861282\",\n \"11968849\",\n \"1880818\",\n \"1880852\",\n \"1880858\",\n \"1880865\",\n \"1880907\",\n \"1880931\",\n \"1880968\",\n \"4531643\",\n \"1880982\",\n \"1880986\",\n \"1881018\",\n \"1881019\",\n \"1881031\",\n \"1881041\",\n \"1881079\",\n \"1881089\",\n \"1881094\",\n \"1881111\",\n \"1881121\",\n \"1881122\",\n \"1881126\",\n \"1881132\",\n \"1881139\",\n \"1881147\",\n \"1881151\",\n \"1881157\",\n \"1881166\",\n \"1881170\",\n \"5126668\",\n \"9819403\",\n \"4531687\",\n \"1881208\",\n \"1881228\",\n \"1881293\",\n \"1881303\",\n \"1881320\",\n \"1881329\",\n \"1881336\",\n \"1881340\",\n \"10046436\",\n \"10348110\",\n \"10441857\",\n \"1881362\",\n \"1881393\",\n \"1881404\",\n \"1881418\",\n \"1881424\",\n \"1881485\",\n \"1881504\",\n \"1881515\",\n \"5126697\",\n \"5126718\",\n \"5126721\",\n \"5126726\",\n \"5126729\",\n \"1881603\",\n \"4531713\",\n \"10751438\",\n \"1881767\",\n \"1881822\",\n \"1881834\",\n \"4531975\",\n \"5126751\",\n \"1881917\",\n \"1881955\",\n \"1881964\",\n \"1882021\",\n \"1882089\",\n \"1882110\",\n \"1882158\",\n \"1882165\",\n \"1882190\",\n \"1882195\",\n \"1882210\",\n \"1882297\",\n \"1882215\",\n \"1882218\",\n \"5126756\",\n \"1882253\",\n \"1882266\",\n \"1882272\",\n \"1882310\",\n \"1882316\",\n \"1882355\",\n \"1882437\",\n \"1882459\",\n \"1882557\",\n \"1882729\",\n \"5126785\",\n \"5126798\",\n \"5126834\",\n \"5126843\",\n \"5126866\",\n \"5126870\",\n \"5126889\",\n \"5126892\",\n \"5126905\",\n \"5126916\",\n \"5126922\",\n \"5126946\",\n \"5126958\",\n \"5126963\",\n \"5127020\",\n \"5127024\",\n \"5127039\",\n \"5127044\",\n \"5127045\",\n \"5127054\",\n \"8325294\",\n \"1882753\",\n \"1882767\",\n \"1882771\",\n \"1882773\",\n \"1882785\",\n \"1882786\",\n \"10107015\",\n \"1882812\",\n \"1882816\",\n \"1882818\",\n \"1882819\",\n \"1882884\",\n \"1882901\",\n \"1882905\",\n \"10156181\",\n \"10191785\",\n \"10643403\",\n \"11891668\",\n \"1882927\",\n \"1882930\",\n \"1882941\",\n \"1882958\",\n \"1882959\",\n \"1882960\",\n \"1882965\",\n \"1882977\",\n \"1882979\",\n \"8725248\",\n \"1883020\",\n \"10464411\",\n \"1883024\",\n \"1883028\",\n \"1883038\",\n \"1883067\",\n \"10807787\",\n \"1883124\",\n \"8981028\",\n \"1883161\",\n \"1883168\",\n \"4687288\",\n \"1883386\",\n \"1883394\",\n \"1883458\",\n \"5127089\",\n \"5127090\",\n \"5127094\",\n \"5127097\",\n \"5127107\",\n \"5127116\",\n \"5127118\",\n \"5127130\",\n \"5127132\",\n \"1883634\",\n \"10069243\",\n \"1883775\",\n \"1883829\",\n \"1883873\",\n \"1883881\",\n \"1883897\",\n \"1883943\",\n \"1883951\",\n \"1883968\",\n \"1883975\",\n \"8324720\",\n \"9864281\",\n \"1883993\",\n \"1884001\",\n \"1884051\",\n \"1884061\",\n \"4531690\",\n \"1884212\",\n \"1884213\",\n \"4531708\",\n \"1884228\",\n \"1884229\",\n \"9294363\",\n \"10171108\",\n \"10209845\",\n \"1884428\",\n \"1884434\",\n \"1884435\",\n \"1884437\",\n \"1884439\",\n \"1884449\",\n \"1884453\",\n \"1884461\",\n \"1884464\",\n \"1884465\",\n \"1884479\",\n \"9837762\",\n \"1884503\",\n \"1884531\",\n \"1884539\",\n \"1884595\",\n \"1884607\",\n \"1884610\",\n \"4687228\",\n \"1884671\",\n \"6120980\",\n \"1884685\",\n \"9308930\",\n \"1884703\",\n \"1884774\",\n \"1884790\",\n \"1884816\",\n \"1884835\",\n \"1884844\",\n \"1884858\",\n \"1884877\",\n \"1884890\",\n \"4532122\",\n \"1884908\",\n \"1884909\",\n \"4532146\",\n \"1884923\",\n \"1884936\",\n \"1884970\",\n \"1884997\",\n \"1885001\",\n \"1885012\",\n \"1885024\",\n \"1885099\",\n \"1885158\",\n \"1885202\",\n \"1885229\",\n \"1885262\",\n \"1885263\",\n \"1885569\",\n \"1885572\",\n \"1885605\",\n \"1885623\",\n \"1885630\",\n \"6133181\",\n \"6133182\",\n \"9957790\",\n \"1885642\",\n \"1885702\",\n \"5127170\",\n \"1885745\",\n \"1885763\",\n \"1885764\",\n \"6120861\",\n \"1885826\",\n \"1885836\",\n \"1885919\",\n \"1885931\",\n \"1885937\",\n \"1885945\",\n \"1885950\",\n \"1885994\",\n \"1886015\",\n \"1886084\",\n \"1886088\",\n \"1886104\",\n \"1886241\",\n \"1886251\",\n \"1886262\",\n \"5127203\",\n \"1886292\",\n \"1886320\",\n \"1886362\",\n \"8223165\",\n \"1886378\",\n \"1886398\",\n \"1886400\",\n \"1886419\",\n \"4302333\",\n \"5127209\",\n \"1886490\",\n \"1886501\",\n \"1886526\",\n \"1886579\",\n \"1886583\",\n \"1886587\",\n \"1886648\",\n \"1886650\",\n \"1886700\",\n \"10610809\",\n \"1886720\",\n \"1886726\",\n \"1886729\",\n \"10510138\",\n \"7562564\",\n \"1886868\",\n \"1886906\",\n \"1886929\",\n \"1886935\",\n \"5127222\",\n \"1886951\",\n \"10613467\",\n \"1887004\",\n \"1887024\",\n \"1887031\",\n \"1887036\",\n \"1887052\",\n \"1887054\",\n \"1887285\",\n \"1887290\",\n \"1887309\",\n \"1887341\",\n \"1887459\",\n \"1887462\",\n \"10437872\",\n \"5127325\",\n \"5127335\",\n \"5127336\",\n \"5127337\",\n \"5127339\",\n \"5127350\",\n \"5127353\",\n \"5127354\",\n \"5127355\",\n \"5127357\",\n \"1887509\",\n \"1887565\",\n \"1887580\",\n \"1887585\",\n \"1887586\",\n \"8955839\",\n \"1887634\",\n \"4531670\",\n \"1887686\",\n \"1887691\",\n \"1887694\",\n \"1887701\",\n \"1887894\",\n \"1888009\",\n \"1888027\",\n \"1888040\",\n \"1888047\",\n \"1888092\",\n \"1888123\",\n \"4531968\",\n \"1888292\",\n \"1888306\",\n \"1888307\",\n \"1888324\",\n \"1888336\",\n \"1888338\",\n \"1888346\",\n \"1888410\",\n \"1888435\",\n \"10922411\",\n \"1888463\",\n \"1888484\",\n \"1888491\",\n \"1888537\",\n \"5127378\",\n \"5127380\",\n \"1888579\",\n \"5127394\",\n \"1888619\",\n \"1888623\",\n \"1888646\",\n \"1888695\",\n \"1888733\",\n \"1888736\",\n \"1888743\",\n \"1888759\",\n \"1888823\",\n \"1888826\",\n \"1888891\",\n \"1888893\",\n \"1888906\",\n \"1888911\",\n \"1888913\",\n \"1888915\",\n \"1888926\",\n \"9535420\",\n \"12106417\",\n \"1888946\",\n \"1888955\",\n \"1888958\",\n \"1889028\",\n \"1889039\",\n \"1889043\",\n \"1889050\",\n \"1889053\",\n \"1889071\",\n \"1889074\",\n \"1889239\",\n \"1889242\",\n \"1889249\",\n \"1889267\",\n \"1889270\",\n \"1889272\",\n \"1889277\",\n \"1889287\",\n \"1889327\",\n \"1889356\",\n \"1889358\",\n \"1889370\",\n \"1889381\",\n \"1889531\",\n \"1889536\",\n \"1889543\",\n \"1889552\",\n \"1889563\",\n \"9228024\",\n \"1889905\",\n \"1889939\",\n \"1889942\",\n \"1890012\",\n \"1890031\",\n \"5127521\",\n \"1890089\",\n \"1890097\",\n \"1890187\",\n \"1890247\",\n \"10058481\",\n \"9519191\",\n \"11044778\",\n \"1890287\",\n \"1890320\",\n \"1890335\",\n \"1890343\",\n \"7543006\",\n \"1890346\",\n \"5127530\",\n \"1890368\",\n \"10180624\",\n \"1890374\",\n \"1890404\",\n \"1890410\",\n \"1890417\",\n \"1890487\",\n \"1890491\",\n \"1890508\",\n \"1890512\",\n \"1890520\",\n \"1890522\",\n \"1890534\",\n \"1890540\",\n \"1890560\",\n \"1890576\",\n \"1890599\",\n \"1890622\",\n \"1890629\",\n \"1890654\",\n \"1890656\",\n \"1890670\",\n \"1890679\",\n \"1890699\",\n \"1890701\",\n \"1890703\",\n \"1890724\",\n \"1890730\",\n \"1890737\",\n \"1890772\",\n \"1890776\",\n \"1890783\",\n \"1890794\",\n \"1890800\",\n \"1890802\",\n \"1890823\",\n \"1890854\",\n \"1890876\",\n \"1890885\",\n \"1890898\",\n \"1890917\",\n \"1890934\",\n \"1890936\",\n \"1890957\",\n \"1890975\",\n \"1891013\",\n \"6207059\",\n \"7431428\",\n \"1891035\",\n \"10034831\",\n \"1891048\",\n \"1891059\",\n \"1891074\",\n \"1891129\",\n \"1891167\",\n \"1891171\",\n \"1891177\",\n \"1891186\",\n \"1891190\",\n \"1891217\",\n \"1891236\",\n \"1891299\",\n \"10071588\",\n \"1891308\",\n \"1891326\",\n \"1891339\",\n \"1891366\",\n \"1891386\",\n \"1891426\",\n \"1891438\",\n \"1891453\",\n \"1891473\",\n \"1891484\",\n \"1891488\",\n \"1891493\",\n \"1891494\",\n \"4532022\",\n \"4532024\",\n \"8411753\",\n \"1891533\",\n \"1891583\",\n \"10310835\",\n \"1891636\",\n \"1891755\",\n \"1891758\",\n \"1891889\",\n \"9884308\",\n \"1891932\",\n \"1891936\",\n \"8986756\",\n \"1892131\",\n \"1892153\",\n \"1892193\",\n \"1892230\",\n \"1892242\",\n \"1892245\",\n \"1892301\",\n \"1892302\",\n \"1892311\",\n \"1892320\",\n \"1892355\",\n \"1892420\",\n \"1892427\",\n \"1892433\",\n \"9059564\",\n \"10072800\",\n \"1892456\",\n \"1892458\",\n \"1892462\",\n \"1892476\",\n \"1892477\",\n \"1892488\",\n \"10141437\",\n \"11056379\",\n \"9674732\",\n \"1884240\",\n \"1884254\",\n \"1884255\",\n \"1884273\",\n \"1884274\",\n \"1884280\",\n \"1884312\",\n \"1884326\",\n \"1884332\",\n \"1884337\",\n \"1884365\",\n \"1884370\",\n \"1884403\",\n \"10179389\",\n \"10259280\",\n \"10330376\",\n \"10446295\",\n \"10482025\",\n \"10655790\",\n \"5884851\",\n \"6133139\",\n \"6133140\",\n \"6133141\",\n \"9181627\",\n \"9935837\",\n \"5771877\",\n \"7864212\",\n \"8146570\",\n \"8425580\",\n \"10117959\",\n \"10227418\",\n \"4532125\",\n \"9967529\",\n \"9900218\",\n \"10145421\",\n \"10348945\",\n \"10521368\",\n \"10579230\",\n \"10594210\",\n \"6120803\",\n \"6133232\",\n \"6121010\",\n \"10257673\",\n \"10556366\",\n \"10513366\",\n \"6121218\",\n \"10502505\",\n \"10397209\",\n \"6133154\",\n \"10462708\",\n \"10959264\",\n \"6133158\",\n \"8876855\",\n \"10063575\",\n \"10375403\",\n \"10106345\",\n \"10432184\",\n \"10444331\",\n \"11761541\",\n \"5126675\",\n \"5126680\",\n \"7446048\",\n \"8532380\",\n \"8537359\",\n \"8823068\",\n \"8856895\",\n \"8858121\",\n \"9100030\",\n \"9101339\",\n \"9137965\",\n \"9530406\",\n \"1886374\",\n \"1889716\",\n \"1889717\",\n \"1889721\",\n \"1889745\",\n \"1889760\",\n \"1889765\",\n \"1889769\",\n \"1889828\",\n \"1889833\",\n \"1889838\",\n \"1889850\",\n \"1889870\",\n \"1889875\",\n \"5127562\",\n \"5127592\",\n \"5127595\",\n \"5127609\",\n \"5127629\",\n \"5127631\",\n \"5127638\",\n \"5127644\",\n \"5127656\",\n \"5127669\",\n \"5127675\",\n \"5127680\",\n \"5127683\",\n \"5127688\",\n \"5127698\",\n \"5802339\",\n \"10245924\",\n \"10769553\",\n \"1887108\",\n \"1887119\",\n \"1887122\",\n \"1887125\",\n \"1887126\",\n \"1887173\",\n \"1887177\",\n \"1887178\",\n \"4532050\",\n \"4532057\",\n \"4532088\",\n \"4532095\",\n \"4532097\",\n \"6121184\",\n \"8218441\",\n \"1888638\",\n \"1888639\",\n \"1886123\",\n \"1886207\",\n \"1883885\",\n \"1880275\",\n \"1880286\",\n \"1880293\",\n \"1880305\",\n \"1880310\",\n \"1880316\",\n \"1880318\",\n \"1880321\",\n \"1880350\",\n \"4532150\",\n \"4532155\",\n \"4532160\",\n \"5771880\",\n \"10410699\",\n \"1846099\",\n \"1846103\",\n \"1846107\",\n \"1846111\",\n \"1846112\",\n \"1846133\",\n \"1846141\",\n \"1846149\",\n \"1846159\",\n \"1846190\",\n \"1846210\",\n \"1846219\",\n \"1846229\",\n \"1846236\",\n \"4528813\",\n \"4528818\",\n \"1846240\",\n \"1846259\",\n \"1846261\",\n \"1939597\",\n \"1830879\",\n \"1830937\",\n \"1830962\",\n \"1831002\",\n \"1831009\",\n \"1831097\",\n \"1831128\",\n \"1831136\",\n \"1831168\",\n \"4708183\",\n \"4525443\",\n \"4525448\",\n \"9958241\",\n \"1731292\",\n \"1853242\",\n \"1853312\",\n \"5122293\",\n \"5122307\",\n \"1853578\",\n \"1853587\",\n \"10222583\",\n \"1853855\",\n \"4526048\",\n \"1854019\",\n \"1854021\",\n \"10452421\",\n \"10546013\",\n \"11428453\",\n \"1854028\",\n \"1854143\",\n \"1854202\",\n \"1854249\",\n \"1854259\",\n \"1854287\",\n \"1854347\",\n \"5122430\",\n \"5122439\",\n \"5122455\",\n \"5806333\",\n \"1854615\",\n \"1854792\",\n \"1854824\",\n \"1854849\",\n \"1854906\",\n \"11773446\",\n \"7946946\",\n \"5880063\",\n \"1854237\",\n \"12239445\",\n \"4526094\",\n \"4526050\",\n \"7717983\",\n \"1858615\",\n \"1858637\",\n \"9777614\",\n \"1858659\",\n \"1858660\",\n \"1858674\",\n \"1858698\",\n \"1858706\",\n \"9689122\",\n \"1858718\",\n \"1858762\",\n \"1858775\",\n \"1858778\",\n \"1858873\",\n \"1858930\",\n \"1858973\",\n \"1859046\",\n \"1859061\",\n \"9645309\",\n \"1859100\",\n \"1859161\",\n \"1859177\",\n \"4536292\",\n \"9768621\",\n \"1859285\",\n \"1859287\",\n \"1859305\",\n \"9590272\",\n \"9801765\",\n \"9760511\",\n \"1859453\",\n \"1859471\",\n \"1859480\",\n \"1859488\",\n \"8790054\",\n \"9675743\",\n \"9686431\",\n \"9746673\",\n \"9748079\",\n \"1859534\",\n \"9749806\",\n \"6133397\",\n \"1859929\",\n \"1859932\",\n \"1859952\",\n \"9752950\",\n \"1860026\",\n \"1860063\",\n \"1860076\",\n \"4536472\",\n \"4536483\",\n \"9700261\",\n \"7642240\",\n \"8200050\",\n \"12046692\",\n \"1973458\",\n \"1973466\",\n \"1973467\",\n \"4525132\",\n \"5123118\",\n \"5123137\",\n \"5123180\",\n \"5123221\",\n \"5123276\",\n \"6097269\",\n \"5123042\",\n \"5123046\",\n \"9759340\",\n \"10103570\",\n \"9547681\",\n \"10129812\",\n \"5124468\",\n \"1864897\",\n \"1864905\",\n \"8877458\",\n \"9240588\",\n \"9355107\",\n \"9531432\",\n \"9547535\",\n \"9606779\",\n \"1865102\",\n \"1865107\",\n \"1865108\",\n \"1865120\",\n \"1865132\",\n \"11754954\",\n \"1865295\",\n \"1865299\",\n \"1865313\",\n \"1865319\",\n \"1865328\",\n \"1865333\",\n \"1865341\",\n \"1865345\",\n \"1865347\",\n \"1865348\",\n \"1865353\",\n \"5124512\",\n \"5124542\",\n \"5124557\",\n \"5124589\",\n \"5124595\",\n \"5124597\",\n \"5124598\",\n \"5124607\",\n \"5806244\",\n \"10534664\",\n \"1865547\",\n \"1865555\",\n \"1865557\",\n \"1865571\",\n \"1865572\",\n \"1865578\",\n \"1865590\",\n \"1865593\",\n \"10014340\",\n \"1865650\",\n \"1865659\",\n \"1865660\",\n \"1865666\",\n \"1865668\",\n \"1865671\",\n \"9914882\",\n \"9972403\",\n \"1865709\",\n \"1865711\",\n \"1865764\",\n \"1865827\",\n \"1865837\",\n \"1865839\",\n \"1865842\",\n \"1865853\",\n \"1865856\",\n \"1865862\",\n \"1865869\",\n \"1865930\",\n \"1865963\",\n \"1866003\",\n \"1866006\",\n \"1866085\",\n \"1866100\",\n \"1866105\",\n \"1866123\",\n \"1866162\",\n \"1866164\",\n \"1866201\",\n \"1866214\",\n \"1866220\",\n \"1866237\",\n \"5734291\",\n \"1866249\",\n \"1866252\",\n \"1866262\",\n \"1866311\",\n \"1866330\",\n \"1866336\",\n \"1866338\",\n \"1866341\",\n \"1866356\",\n \"6106943\",\n \"1866421\",\n \"1866491\",\n \"1866496\",\n \"1866530\",\n \"1866549\",\n \"1866550\",\n \"1866556\",\n \"1866568\",\n \"1866570\",\n \"1866573\",\n \"9906979\",\n \"1866601\",\n \"1866838\",\n \"1866902\",\n \"5124813\",\n \"1866980\",\n \"1867009\",\n \"1867014\",\n \"1867021\",\n \"1867022\",\n \"1867029\",\n \"1867032\",\n \"1867037\",\n \"1867108\",\n \"1867171\",\n \"1867218\",\n \"1867224\",\n \"1867231\",\n \"5124873\",\n \"1867295\",\n \"1867312\",\n \"5124880\",\n \"5124911\",\n \"1867426\",\n \"1867515\",\n \"1867525\",\n \"1867535\",\n \"1867547\",\n \"1867552\",\n \"1867673\",\n \"1867709\",\n \"1867722\",\n \"1867744\",\n \"1867749\",\n \"1867750\",\n \"1867751\",\n \"1867773\",\n \"10108753\",\n \"1867788\",\n \"10047346\",\n \"10247309\",\n \"1867820\",\n \"1867928\",\n \"7764232\",\n \"8439879\",\n \"9983244\",\n \"1867991\",\n \"1867993\",\n \"1868014\",\n \"10883659\",\n \"1868025\",\n \"1868049\",\n \"1868060\",\n \"10591617\",\n \"9634178\",\n \"11643393\",\n \"11670751\",\n \"11729388\",\n \"10248521\",\n \"10302305\",\n \"10547404\",\n \"11414590\",\n \"11464362\",\n \"5124673\",\n \"5124716\",\n \"1736271\",\n \"7734292\",\n \"1841460\",\n \"1841476\",\n \"5120278\",\n \"1841616\",\n \"1841675\",\n \"1841706\",\n \"1841764\",\n \"1841782\",\n \"1841813\",\n \"1841821\",\n \"1841946\",\n \"1841989\",\n \"10309331\",\n \"10019169\",\n \"10005133\",\n \"5123615\",\n \"1861433\",\n \"1861451\",\n \"1861456\",\n \"1861457\",\n \"1861458\",\n \"1861479\",\n \"1861488\",\n \"1861494\",\n \"1861510\",\n \"1861522\",\n \"1861544\",\n \"1861559\",\n \"1861584\",\n \"1861592\",\n \"1861604\",\n \"1861644\",\n \"5123636\",\n \"5123663\",\n \"1861663\",\n \"1861665\",\n \"1861673\",\n \"1861697\",\n \"1861705\",\n \"1861714\",\n \"1861721\",\n \"1861759\",\n \"1861773\",\n \"1861783\",\n \"1861784\",\n \"1861797\",\n \"1861823\",\n \"1861834\",\n \"1861836\",\n \"1861842\",\n \"1861851\",\n \"1861862\",\n \"11529603\",\n \"1861887\",\n \"1861892\",\n \"1861893\",\n \"5123674\",\n \"1861933\",\n \"1861936\",\n \"1861937\",\n \"1861938\",\n \"1861949\",\n \"1861951\",\n \"1861953\",\n \"1861958\",\n \"6106744\",\n \"1861967\",\n \"1861975\",\n \"1862008\",\n \"1862026\",\n \"1862033\",\n \"1862044\",\n \"1862046\",\n \"1862047\",\n \"1862049\",\n \"1862061\",\n \"1862066\",\n \"1862072\",\n \"1862078\",\n \"1862083\",\n \"1862087\",\n \"1862088\",\n \"1862091\",\n \"1862094\",\n \"1862096\",\n \"1862123\",\n \"1862129\",\n \"1862139\",\n \"1862163\",\n \"1862181\",\n \"1862198\",\n \"1862207\",\n \"1862225\",\n \"9559671\",\n \"5123676\",\n \"5123685\",\n \"5123701\",\n \"5123704\",\n \"1862293\",\n \"1862311\",\n \"1862331\",\n \"1862363\",\n \"1862370\",\n \"1862394\",\n \"1862401\",\n \"1862403\",\n \"1862414\",\n \"9836014\",\n \"10374414\",\n \"11907754\",\n \"1862430\",\n \"1862433\",\n \"1862434\",\n \"1862441\",\n \"1862449\",\n \"1862454\",\n \"1862455\",\n \"1862468\",\n \"1862475\",\n \"1862481\",\n \"1862516\",\n \"1862517\",\n \"1862521\",\n \"1862526\",\n \"6106708\",\n \"1862547\",\n \"1862551\",\n \"5123707\",\n \"5123709\",\n \"1862569\",\n \"1862572\",\n \"1862578\",\n \"1862580\",\n \"1862595\",\n \"1862624\",\n \"1862658\",\n \"1862692\",\n \"1862701\",\n \"1862719\",\n \"1862757\",\n \"1862765\",\n \"1862774\",\n \"1862805\",\n \"1862837\",\n \"1862841\",\n \"1862874\",\n \"1862894\",\n \"1862916\",\n \"1862917\",\n \"1862923\",\n \"1862928\",\n \"1862989\",\n \"1863021\",\n \"1863025\",\n \"1863034\",\n \"1863051\",\n \"1863075\",\n \"1863080\",\n \"1863088\",\n \"5123775\",\n \"1863109\",\n \"1863143\",\n \"1863151\",\n \"5123784\",\n \"5123801\",\n \"7803585\",\n \"1863282\",\n \"5123922\",\n \"5734719\",\n \"1863354\",\n \"1863366\",\n \"1863384\",\n \"9899724\",\n \"1863388\",\n \"1863394\",\n \"1863405\",\n \"1863407\",\n \"4301348\",\n \"1863412\",\n \"1863416\",\n \"1863426\",\n \"1863467\",\n \"1863544\",\n \"1863584\",\n \"1863640\",\n \"1863646\",\n \"5124007\",\n \"5124029\",\n \"5124049\",\n \"1863699\",\n \"1863701\",\n \"1863706\",\n \"1863714\",\n \"1863724\",\n \"1863732\",\n \"1863734\",\n \"1863735\",\n \"1863742\",\n \"1863750\",\n \"9310369\",\n \"1863757\",\n \"5124050\",\n \"1863829\",\n \"1863848\",\n \"1863856\",\n \"1863858\",\n \"1863864\",\n \"1863880\",\n \"1863907\",\n \"1863909\",\n \"1863910\",\n \"1863924\",\n \"9178932\",\n \"1863944\",\n \"1863955\",\n \"9578319\",\n \"1864126\",\n \"1864135\",\n \"4703479\",\n \"1864156\",\n \"1864161\",\n \"1864164\",\n \"1864165\",\n \"8956567\",\n \"1864204\",\n \"5124071\",\n \"5124080\",\n \"5124088\",\n \"5124093\",\n \"5124109\",\n \"8133328\",\n \"11468731\",\n \"1864316\",\n \"1864320\",\n \"1864321\",\n \"1864328\",\n \"1864329\",\n \"1864352\",\n \"1864358\",\n \"1864377\",\n \"11141784\",\n \"5124118\",\n \"5124119\",\n \"5124121\",\n \"5124136\",\n \"5124143\",\n \"5124147\",\n \"5124151\",\n \"5124172\",\n \"5124199\",\n \"5124200\",\n \"5124208\",\n \"5124219\",\n \"5124232\",\n \"5124233\",\n \"5124249\",\n \"5124250\",\n \"5124268\",\n \"1864576\",\n \"11738734\",\n \"11954157\",\n \"1864652\",\n \"5124300\",\n \"5124304\",\n \"5124305\",\n \"5124332\",\n \"5124348\",\n \"5124352\",\n \"5124374\",\n \"5124415\",\n \"5124423\",\n \"5124433\",\n \"5124442\",\n \"5124443\",\n \"5124448\",\n \"5124450\",\n \"5124452\",\n \"1864793\",\n \"1864796\",\n \"5734713\",\n \"5885399\",\n \"6099041\",\n \"6106759\",\n \"7346401\",\n \"10193618\",\n \"6106647\",\n \"5123815\",\n \"5123824\",\n \"5123837\",\n \"5123852\",\n \"5123870\",\n \"5123876\",\n \"5123884\",\n \"5123889\",\n \"5123890\",\n \"8810912\",\n \"10189661\",\n \"10191275\",\n \"10436020\",\n \"5123954\",\n \"5123956\",\n \"5123961\",\n \"5123968\",\n \"5123971\",\n \"5123979\",\n \"5123980\",\n \"5123983\",\n \"5123991\",\n \"5123996\",\n \"5123999\",\n \"5124000\",\n \"8849480\",\n \"9513830\",\n \"1863978\",\n \"1863982\",\n \"1864004\",\n \"1864008\",\n \"1864021\",\n \"1864046\",\n \"1864058\",\n \"1864068\",\n \"1864070\",\n \"1864084\",\n \"1864090\",\n \"1864098\",\n \"1864103\",\n \"1864106\",\n \"1992573\",\n \"1992634\",\n \"5150053\",\n \"9893936\",\n \"1992883\",\n \"1992889\",\n \"1992907\",\n \"1992936\",\n \"1992938\",\n \"1992956\",\n \"1992969\",\n \"10842838\",\n \"10994020\",\n \"1992976\",\n \"1993021\",\n \"1993036\",\n \"1993043\",\n \"1993045\",\n \"1993419\",\n \"5150092\",\n \"1993496\",\n \"6133769\",\n \"1993637\",\n \"1993643\",\n \"10022517\",\n \"1992817\",\n \"1939432\",\n \"1939460\",\n \"4525189\",\n \"1953192\",\n \"1953196\",\n \"1953217\",\n \"1953326\",\n \"1953356\",\n \"6132711\",\n \"6132712\",\n \"6132715\",\n \"1953407\",\n \"1953423\",\n \"1953499\",\n \"5143232\",\n \"5143234\",\n \"1953729\",\n \"9053308\",\n \"9424853\",\n \"10132811\",\n \"10644798\",\n \"11467944\",\n \"11503857\",\n \"6132725\",\n \"6132726\",\n \"1953970\",\n \"6132723\",\n \"6132729\",\n \"1953998\",\n \"1954025\",\n \"1954037\",\n \"5143241\",\n \"5143249\",\n \"5143266\",\n \"5143279\",\n \"1954084\",\n \"1954120\",\n \"6132728\",\n \"1860108\",\n \"1860118\",\n \"1830031\",\n \"10650211\",\n \"5119482\",\n \"5119506\",\n \"5119513\",\n \"1830099\",\n \"1830361\",\n \"1830372\",\n \"1830374\",\n \"1830380\",\n \"1830407\",\n \"1830408\",\n \"1830410\",\n \"1830419\",\n \"1830435\",\n \"1830437\",\n \"1830442\",\n \"1830457\",\n \"1830459\",\n \"4525369\",\n \"1830498\",\n \"4525420\",\n \"4525425\",\n \"7976145\",\n \"1830534\",\n \"1830537\",\n \"1830584\",\n \"1830632\",\n \"1830802\",\n \"4525364\",\n \"1754135\",\n \"1754183\",\n \"1754263\",\n \"1754270\",\n \"5105642\",\n \"1754332\",\n \"1754368\",\n \"1754380\",\n \"1754400\",\n \"5105649\",\n \"5105656\",\n \"5105671\",\n \"1754465\",\n \"1754511\",\n \"1754516\",\n \"1754535\",\n \"11737872\",\n \"12075408\",\n \"1754619\",\n \"1754803\",\n \"1754806\",\n \"1754814\",\n \"11175615\",\n \"1754902\",\n \"1754919\",\n \"1754933\",\n \"1755131\",\n \"5734138\",\n \"1755237\",\n \"1755248\",\n \"1755253\",\n \"1755276\",\n \"5105929\",\n \"5106115\",\n \"5106160\",\n \"5106249\",\n \"5106539\",\n \"5106894\",\n \"5107076\",\n \"5107128\",\n \"5107219\",\n \"5107640\",\n \"5107644\",\n \"5107829\",\n \"7410701\",\n \"7586742\",\n \"7674502\",\n \"7761138\",\n \"7778368\",\n \"7870336\",\n \"7903078\",\n \"7909858\",\n \"7955974\",\n \"8048904\",\n \"8102790\",\n \"8111395\",\n \"8158342\",\n \"8201251\",\n \"8348761\",\n \"8426357\",\n \"1757652\",\n \"5108318\",\n \"5108334\",\n \"5108335\",\n \"1757839\",\n \"11140464\",\n \"11860016\",\n \"1757853\",\n \"5108346\",\n \"5108349\",\n \"4689394\",\n \"10174151\",\n \"10322104\",\n \"8964772\",\n \"4522753\",\n \"1830669\",\n \"1830681\",\n \"9004359\",\n \"10604375\",\n \"1953124\",\n \"1953166\",\n \"1939647\",\n \"1939658\",\n \"1939677\",\n \"1939680\",\n \"1939688\",\n \"1939717\",\n \"7646066\",\n \"1751497\",\n \"1751507\",\n \"1751509\",\n \"1751524\",\n \"1751557\",\n \"1751572\",\n \"1751575\",\n \"1751588\",\n \"1751590\",\n \"1751606\",\n \"1751609\",\n \"1751625\",\n \"1751626\",\n \"9332550\",\n \"1751670\",\n \"1751684\",\n \"1751690\",\n \"1751785\",\n \"5105193\",\n \"5105194\",\n \"5105212\",\n \"5105217\",\n \"5105218\",\n \"5105227\",\n \"1829287\",\n \"1829322\",\n \"1829363\",\n \"8254441\",\n \"1854920\",\n \"5122526\",\n \"5122538\",\n \"5122556\",\n \"5122571\",\n \"5122574\",\n \"5122581\",\n \"5122620\",\n \"5122646\",\n \"5122647\",\n \"5122668\",\n \"5122683\",\n \"5122691\",\n \"5122696\",\n \"5122702\",\n \"9015218\",\n \"1855358\",\n \"10055273\",\n \"1855452\",\n \"1855630\",\n \"1855747\",\n \"1855799\",\n \"1855804\",\n \"1855807\",\n \"1855813\",\n \"8734090\",\n \"1856005\",\n \"1856105\",\n \"5122779\",\n \"1856289\",\n \"5122798\",\n \"1856348\",\n \"1856374\",\n \"1856384\",\n \"1856516\",\n \"1856581\",\n \"1856595\",\n \"1856620\",\n \"1856658\",\n \"1856663\",\n \"1856668\",\n \"1856686\",\n \"1856691\",\n \"1856701\",\n \"1856720\",\n \"1856730\",\n \"1856768\",\n \"1856772\",\n \"1856867\",\n \"1856971\",\n \"1857020\",\n \"1857033\",\n \"1857068\",\n \"1857097\",\n \"1857143\",\n \"1857180\",\n \"1857213\",\n \"1857233\",\n \"1857241\",\n \"1857258\",\n \"1857267\",\n \"1857295\",\n \"1857315\",\n \"1857380\",\n \"1857385\",\n \"1857410\",\n \"1857577\",\n \"1857581\",\n \"1857626\",\n \"9790007\",\n \"1857785\",\n \"1857809\",\n \"1857828\",\n \"1857829\",\n \"1857840\",\n \"1857856\",\n \"1857863\",\n \"1857878\",\n \"1857882\",\n \"1857900\",\n \"1857918\",\n \"1857924\",\n \"1857935\",\n \"1857938\",\n \"1857945\",\n \"1857948\",\n \"1857973\",\n \"1857978\",\n \"1858074\",\n \"1858100\",\n \"1858113\",\n \"1858163\",\n \"5122876\",\n \"5122969\",\n \"1858283\",\n \"1858321\",\n \"1858404\",\n \"1858411\",\n \"1858488\",\n \"8178453\",\n \"1858523\",\n \"1858526\",\n \"1858557\",\n \"1856891\",\n \"1856893\",\n \"10038125\",\n \"1937642\",\n \"1937643\",\n \"1937655\",\n \"1937665\",\n \"1937667\",\n \"1937688\",\n \"1937691\",\n \"1937698\",\n \"1937699\",\n \"1937702\",\n \"1937707\",\n \"1937711\",\n \"1937712\",\n \"1937722\",\n \"1937723\",\n \"1937739\",\n \"1937745\",\n \"1937751\",\n \"1937754\",\n \"1937758\",\n \"1937769\",\n \"1937792\",\n \"1937793\",\n \"1937803\",\n \"1937816\",\n \"1937819\",\n \"1937826\",\n \"1937846\",\n \"1937847\",\n \"1937849\",\n \"1937856\",\n \"1937885\",\n \"1937892\",\n \"1937911\",\n \"1937931\",\n \"1937937\",\n \"1937959\",\n \"1937966\",\n \"1937974\",\n \"1937975\",\n \"1937988\",\n \"1938007\",\n \"1938016\",\n \"1938022\",\n \"1938029\",\n \"1938050\",\n \"1938052\",\n \"1938058\",\n \"1938059\",\n \"1938069\",\n \"1938074\",\n \"1938081\",\n \"1938088\",\n \"1938104\",\n \"1938112\",\n \"1938114\",\n \"1938122\",\n \"1938125\",\n \"1938129\",\n \"1938131\",\n \"1938147\",\n \"1938148\",\n \"1938156\",\n \"1938159\",\n \"1938162\",\n \"1938166\",\n \"1938168\",\n \"1938174\",\n \"4299870\",\n \"4299871\",\n \"4692485\",\n \"4692504\",\n \"4693382\",\n \"5734569\",\n \"8225376\",\n \"9017206\",\n \"10600208\",\n \"11716362\",\n \"12200213\",\n \"12211009\",\n \"1936969\",\n \"1936988\",\n \"1936993\",\n \"1937011\",\n \"1937037\",\n \"1937055\",\n \"1937064\",\n \"1937090\",\n \"1937109\",\n \"1937110\",\n \"1937124\",\n \"1937129\",\n \"1937136\",\n \"1937144\",\n \"1937155\",\n \"1937162\",\n \"1937165\",\n \"1937167\",\n \"5141144\",\n \"5141154\",\n \"5141163\",\n \"5141170\",\n \"5141172\",\n \"5141177\",\n \"5141179\",\n \"5141185\",\n \"5141187\",\n \"5141188\",\n \"5141195\",\n \"5141197\",\n \"5141198\",\n \"5141199\",\n \"5141202\",\n \"5141207\",\n \"5141212\",\n \"5141215\",\n \"5141216\",\n \"5141226\",\n \"5141229\",\n \"5141230\",\n \"5141233\",\n \"5141234\",\n \"5141236\",\n \"5141242\",\n \"5141248\",\n \"5141250\",\n \"5141252\",\n \"5141254\",\n \"5803065\",\n \"1937444\",\n \"1937474\",\n \"4693675\",\n \"1937490\",\n \"1937514\",\n \"1937527\",\n \"1937530\",\n \"1937540\",\n \"10761559\",\n \"1937556\",\n \"1937566\",\n \"1937570\",\n \"1937580\",\n \"1937582\",\n \"1937594\",\n \"1937613\",\n \"1937618\",\n \"1938214\",\n \"4690079\",\n \"1938226\",\n \"1938230\",\n \"1938233\",\n \"1938300\",\n \"1938446\",\n \"1938520\",\n \"1938612\",\n \"1938796\",\n \"1938810\",\n \"1938955\",\n \"1938975\",\n \"1939056\",\n \"1939086\",\n \"1939130\",\n \"1939131\",\n \"1939134\",\n \"1939136\",\n \"1939143\",\n \"1939156\",\n \"1939168\",\n \"1939180\",\n \"1939215\",\n \"1939225\",\n \"5141321\",\n \"5141324\",\n \"5141331\",\n \"5141333\",\n \"5141340\",\n \"5141342\",\n \"5141311\",\n \"5141317\",\n \"1939336\",\n \"4694313\",\n \"11561676\",\n \"12219250\",\n \"12229940\",\n \"12247359\",\n \"12253844\",\n \"12262562\",\n \"5141262\",\n \"5141288\",\n \"5141291\",\n \"5141297\",\n \"5141305\",\n \"5802625\",\n \"1939314\",\n \"1856368\",\n \"1856394\",\n \"1856503\",\n \"1856555\",\n \"1857690\",\n \"5123018\",\n \"1858531\",\n \"1838691\",\n \"1838811\",\n \"1838838\",\n \"1838905\",\n \"1838911\",\n \"4528692\",\n \"4528694\",\n \"1838251\",\n \"1838255\",\n \"1838276\",\n \"1838289\",\n \"1838297\",\n \"1838304\",\n \"1838308\",\n \"1838331\",\n \"4685893\",\n \"1833518\",\n \"1833523\",\n \"1833525\",\n \"1833531\",\n \"1833532\",\n \"1833535\",\n \"1833539\",\n \"4685097\",\n \"1833477\",\n \"1833497\",\n \"1833499\",\n \"1833500\",\n \"4685485\",\n \"1833562\",\n \"4686368\",\n \"1833600\",\n \"1833626\",\n \"1833627\",\n \"4528658\",\n \"1833653\",\n \"1833664\",\n \"1833834\",\n \"1834019\",\n \"1834078\",\n \"4685138\",\n \"4685219\",\n \"4685271\",\n \"1834497\",\n \"1834589\",\n \"1834775\",\n \"8546322\",\n \"8574752\",\n \"1834850\",\n \"1835031\",\n \"5770913\",\n \"1835082\",\n \"1835098\",\n \"1835121\",\n \"1835123\",\n \"1835128\",\n \"1835156\",\n \"1835345\",\n \"1835393\",\n \"1835396\",\n \"1835407\",\n \"1835422\",\n \"1835500\",\n \"1835555\",\n \"1835609\",\n \"1835612\",\n \"1835635\",\n \"1835644\",\n \"4685116\",\n \"5119905\",\n \"5119961\",\n \"5119969\",\n \"1835790\",\n \"1835821\",\n \"1835828\",\n \"10304283\",\n \"4686483\",\n \"1836871\",\n \"1836873\",\n \"1836899\",\n \"4685431\",\n \"4685448\",\n \"1837053\",\n \"1837057\",\n \"1837150\",\n \"1837159\",\n \"1837172\",\n \"1837569\",\n \"1837572\",\n \"4686743\",\n \"1837857\",\n \"1837870\",\n \"1837894\",\n \"1837900\",\n \"1838034\",\n \"4685065\",\n \"1838218\",\n \"1838224\",\n \"4685299\",\n \"4685306\",\n \"1838333\",\n \"4686617\",\n \"4686620\",\n \"4686621\",\n \"4686628\",\n \"1838626\",\n \"1838629\",\n \"1838633\",\n \"1838635\",\n \"1838641\",\n \"1838649\",\n \"8958353\",\n \"1838666\",\n \"1838958\",\n \"1838960\",\n \"4528702\",\n \"4685566\",\n \"4685576\",\n \"1838969\",\n \"1839317\",\n \"1839323\",\n \"1839325\",\n \"1839333\",\n \"1839370\",\n \"9895629\",\n \"1839494\",\n \"1839560\",\n \"1839770\",\n \"1839851\",\n \"1839878\",\n \"1839893\",\n \"5120053\",\n \"5120058\",\n \"5120063\",\n \"4685645\",\n \"4685650\",\n \"4685653\",\n \"4685655\",\n \"4685662\",\n \"4685669\",\n \"4685678\",\n \"4685683\",\n \"1840258\",\n \"1840260\",\n \"1840726\",\n \"1840774\",\n \"1840776\",\n \"1840796\",\n \"1840812\",\n \"1840844\",\n \"1840974\",\n \"4686042\",\n \"4686055\",\n \"4686111\",\n \"4686133\",\n \"4686164\",\n \"4686190\",\n \"4686214\",\n \"4686264\",\n \"4686266\",\n \"1841101\",\n \"1841158\",\n \"1841159\",\n \"1841180\",\n \"1841183\",\n \"1841188\",\n \"1841215\",\n \"1841219\",\n \"1841221\",\n \"1841302\",\n \"4685972\",\n \"5770922\",\n \"5770942\",\n \"5802248\",\n \"5802256\",\n \"5802257\",\n \"5802259\",\n \"4529032\",\n \"4686039\",\n \"4686015\",\n \"4686016\",\n \"4686018\",\n \"4686022\",\n \"4686027\",\n \"4686029\",\n \"4684521\",\n \"4684591\",\n \"4684789\",\n \"4684888\",\n \"4684893\",\n \"4684925\",\n \"4684958\",\n \"4685629\",\n \"4685631\",\n \"4685778\",\n \"4685810\",\n \"4685980\",\n \"4685981\",\n \"4686355\",\n \"4686385\",\n \"4686386\",\n \"4686531\",\n \"4686532\",\n \"4686656\",\n \"4686697\",\n \"4686702\",\n \"4686844\",\n \"4686956\",\n \"10511237\",\n \"5119893\",\n \"5119895\",\n \"12188993\",\n \"1800238\",\n \"10213314\",\n \"10225227\",\n \"1800441\",\n \"1800473\",\n \"6133777\",\n \"1800522\",\n \"1800528\",\n \"1800539\",\n \"10737993\",\n \"1800562\",\n \"1800572\",\n \"1800642\",\n \"10010361\",\n \"9859868\",\n \"9883274\",\n \"1800686\",\n \"1800691\",\n \"1800696\",\n \"1800821\",\n \"1800843\",\n \"1800844\",\n \"5114394\",\n \"5114400\",\n \"5114409\",\n \"11873966\",\n \"4534796\",\n \"4534798\",\n \"9267364\",\n \"9544823\",\n \"1800881\",\n \"5114425\",\n \"4534757\",\n \"1800934\",\n \"1800963\",\n \"5114431\",\n \"5114435\",\n \"5114436\",\n \"5114439\",\n \"6133780\",\n \"1801000\",\n \"1801001\",\n \"1801051\",\n \"1801073\",\n \"1801080\",\n \"1801084\",\n \"10240592\",\n \"1801170\",\n \"1801196\",\n \"5114465\",\n \"5114515\",\n \"1801303\",\n \"1801305\",\n \"1801316\",\n \"1801432\",\n \"1801461\",\n \"1801490\",\n \"1801503\",\n \"1801519\",\n \"10026605\",\n \"10066605\",\n \"10088502\",\n \"10372377\",\n \"10448500\",\n \"10510325\",\n \"10573425\",\n \"11496990\",\n \"11508472\",\n \"11594541\",\n \"11596898\",\n \"11698552\",\n \"11836409\",\n \"11871044\",\n \"1801787\",\n \"1801896\",\n \"1801903\",\n \"1801922\",\n \"1802978\",\n \"4534773\",\n \"4534776\",\n \"4534778\",\n \"4534779\",\n \"4534782\",\n \"4534787\",\n \"4534788\",\n \"4534792\",\n \"6112606\",\n \"6112610\",\n \"6112613\",\n \"6112634\",\n \"6112661\",\n \"6133809\",\n \"6133811\",\n \"6133813\",\n \"6133814\",\n \"9313634\",\n \"9385576\",\n \"9454291\",\n \"9574801\",\n \"9579309\",\n \"9626037\",\n \"9894093\",\n \"9960072\",\n \"1801993\",\n \"1802090\",\n \"8883183\",\n \"1802113\",\n \"1802120\",\n \"8924506\",\n \"1802229\",\n \"1802244\",\n \"1802280\",\n \"1802337\",\n \"1802662\",\n \"1802702\",\n \"1802783\",\n \"1802827\",\n \"1802830\",\n \"1802833\",\n \"1802850\",\n \"1802868\",\n \"1802888\",\n \"1802919\",\n \"1802939\",\n \"1802998\",\n \"1803012\",\n \"1803014\",\n \"1803021\",\n \"1803022\",\n \"1803025\",\n \"1803035\",\n \"1803039\",\n \"1803060\",\n \"1803065\",\n \"1803073\",\n \"1803078\",\n \"1803091\",\n \"1803108\",\n \"9485481\",\n \"10942408\",\n \"4534762\",\n \"4534766\",\n \"4534767\",\n \"4534769\",\n \"6133803\",\n \"9239301\",\n \"9426252\",\n \"10264193\",\n \"5114295\",\n \"5114303\",\n \"5114311\",\n \"5114316\",\n \"5114317\",\n \"5114327\",\n \"5114340\",\n \"5114353\",\n \"8244266\",\n \"10987178\"\n ],\n [\n \"1837645\",\n \"11070822\",\n \"11442724\",\n \"1921987\",\n \"1934046\",\n \"1934326\",\n \"1934442\",\n \"1934515\",\n \"1934690\",\n \"1934713\",\n \"1934983\",\n \"1935072\",\n \"1935294\",\n \"1935340\",\n \"1935610\",\n \"1935826\",\n \"1935968\",\n \"1936158\",\n \"1936231\",\n \"1936309\",\n \"1936370\",\n \"1936531\",\n \"1936609\",\n \"1936648\",\n \"4689751\",\n \"4695593\",\n \"4705066\",\n \"4709187\",\n \"1868532\",\n \"1868563\",\n \"1992267\",\n \"1860613\",\n \"1860657\",\n \"1860720\",\n \"1860732\",\n \"1758098\",\n \"11760262\",\n \"1732062\",\n \"1732085\",\n \"1732089\",\n \"1732160\",\n \"1732397\",\n \"1732442\",\n \"1732496\",\n \"1732599\",\n \"1732627\",\n \"1732658\",\n \"1732661\",\n \"1732761\",\n \"1732814\",\n \"1732834\",\n \"1732862\",\n \"1732883\",\n \"1732944\",\n \"1732969\",\n \"1733135\",\n \"1733242\",\n \"1733338\",\n \"1733502\",\n \"1733524\",\n \"1733529\",\n \"1733574\",\n \"1733617\",\n \"1733670\",\n \"1733831\",\n \"1733840\",\n \"1734381\",\n \"1734388\",\n \"1734489\",\n \"1734505\",\n \"1734548\",\n \"1734683\",\n \"1734849\",\n \"1734934\",\n \"4689527\",\n \"4707431\",\n \"5102272\",\n \"9329912\",\n \"1831858\",\n \"1831868\",\n \"1832142\",\n \"1832151\",\n \"1832233\",\n \"1832247\",\n \"1832249\",\n \"1832349\",\n \"1832512\",\n \"1832608\",\n \"1832647\",\n \"1832673\",\n \"1833468\",\n \"8834745\",\n \"9168716\",\n \"1845266\",\n \"12047421\",\n \"1846311\",\n \"1846350\",\n \"1846370\",\n \"1846392\",\n \"1846510\",\n \"1846586\",\n \"1846636\",\n \"1846848\",\n \"1846907\",\n \"1847533\",\n \"1847591\",\n \"1847866\",\n \"1847914\",\n \"1847952\",\n \"1847974\",\n \"1848019\",\n \"1848113\",\n \"1848149\",\n \"1848192\",\n \"1848217\",\n \"1848253\",\n \"1848374\",\n \"1848475\",\n \"1848582\",\n \"1848634\",\n \"1848655\",\n \"1848660\",\n \"1848677\",\n \"1848843\",\n \"1849005\",\n \"1849103\",\n \"1849117\",\n \"1849249\",\n \"1849256\",\n \"1849449\",\n \"1849474\",\n \"1849514\",\n \"1849528\",\n \"1849628\",\n \"1849652\",\n \"1849663\",\n \"1849983\",\n \"1850022\",\n \"1850144\",\n \"1850224\",\n \"1850231\",\n \"1850276\",\n \"1850474\",\n \"1850521\",\n \"1850525\",\n \"1850669\",\n \"1850689\",\n \"1850721\",\n \"1850762\",\n \"1850769\",\n \"1850777\",\n \"1850790\",\n \"1850865\",\n \"1851038\",\n \"1851049\",\n \"1851201\",\n \"1851212\",\n \"1851293\",\n \"1851305\",\n \"1851334\",\n \"1851406\",\n \"1851496\",\n \"1851662\",\n \"1851754\",\n \"1851826\",\n \"1852064\",\n \"1852133\",\n \"1852176\",\n \"1852212\",\n \"1852315\",\n \"1852327\",\n \"1852379\",\n \"1852416\",\n \"3256113\",\n \"3257500\",\n \"4407138\",\n \"4688717\",\n \"8793999\",\n \"9073940\",\n \"9155721\",\n \"9496267\",\n \"1829472\",\n \"1829658\",\n \"1829702\",\n \"9151414\",\n \"1831720\",\n \"1828383\",\n \"1828394\",\n \"1828406\",\n \"1828425\",\n \"1828435\",\n \"1828463\",\n \"1828574\",\n \"1828636\",\n \"1828802\",\n \"1828825\",\n \"1828975\",\n \"1829019\",\n \"2278098\",\n \"3256950\",\n \"4406516\",\n \"4525607\",\n \"9026655\",\n \"1751846\",\n \"10330071\",\n \"10903022\",\n \"10965723\",\n \"1861387\",\n \"1868427\",\n \"1868520\",\n \"10017524\",\n \"1834426\",\n \"1834551\",\n \"1835064\",\n \"1835832\",\n \"1838074\",\n \"1838970\",\n \"1839565\",\n \"1839598\",\n \"4575600\",\n \"4684219\",\n \"4685556\",\n \"4685945\",\n \"1835459\",\n \"1845791\",\n \"1845807\",\n \"1845950\",\n \"1845958\",\n \"1845981\",\n \"1846006\",\n \"1846480\",\n \"9206138\",\n \"1832635\",\n \"1834598\",\n \"1839010\",\n \"1841259\",\n \"5119880\",\n \"9021546\",\n \"1830118\",\n \"1831446\",\n \"1834557\",\n \"1839385\",\n \"1839623\",\n \"1841294\",\n \"1853721\",\n \"3257405\",\n \"4706578\",\n \"10836135\",\n \"10836231\",\n \"10874367\",\n \"10874844\",\n \"10876650\",\n \"10956237\",\n \"11495707\",\n \"11556078\",\n \"11954625\",\n \"12125931\",\n \"12183844\",\n \"12206130\",\n \"12225180\",\n \"12260643\",\n \"1369661\",\n \"1758620\",\n \"1758859\",\n \"1759149\",\n \"1759767\",\n \"1760135\",\n \"1760198\",\n \"1760382\",\n \"1760583\",\n \"1760914\",\n \"1760969\",\n \"1761094\",\n \"1761207\",\n \"1761351\",\n \"1761385\",\n \"1761539\",\n \"1761571\",\n \"1761750\",\n \"1761815\",\n \"1761829\",\n \"1762149\",\n \"1762194\",\n \"1762212\",\n \"1762225\",\n \"1762280\",\n \"1762293\",\n \"1762414\",\n \"1762711\",\n \"1762841\",\n \"1762885\",\n \"1763151\",\n \"1763588\",\n \"1763591\",\n \"1763649\",\n \"1763777\",\n \"1763804\",\n \"1763951\",\n \"1764015\",\n \"1764187\",\n \"1764504\",\n \"1764524\",\n \"1764638\",\n \"1764851\",\n \"1765092\",\n \"1765176\",\n \"1765652\",\n \"1765861\",\n \"1766259\",\n \"1766538\",\n \"1766547\",\n \"1766671\",\n \"1766838\",\n \"1766874\",\n \"1766883\",\n \"1767029\",\n \"1767032\",\n \"1767210\",\n \"1767304\",\n \"1767496\",\n \"1767504\",\n \"1767514\",\n \"1767752\",\n \"1767796\",\n \"1767878\",\n \"1768281\",\n \"1768432\",\n \"1768579\",\n \"1768896\",\n \"1768999\",\n \"1769098\",\n \"1769165\",\n \"1769311\",\n \"1769330\",\n \"1769393\",\n \"1769735\",\n \"1769819\",\n \"1770011\",\n \"1770260\",\n \"1770379\",\n \"1771448\",\n \"1771454\",\n \"1771541\",\n \"1771562\",\n \"1771838\",\n \"1771845\",\n \"1771850\",\n \"1771972\",\n \"1772053\",\n \"1772259\",\n \"1772349\",\n \"1772425\",\n \"1772445\",\n \"1772540\",\n \"1772688\",\n \"1772714\",\n \"1772783\",\n \"1772826\",\n \"1773983\",\n \"1774068\",\n \"1774573\",\n \"1774846\",\n \"1774906\",\n \"1774940\",\n \"1775144\",\n \"1775234\",\n \"1775759\",\n \"1775975\",\n \"1776158\",\n \"1776246\",\n \"1776498\",\n \"1777014\",\n \"1777140\",\n \"1777156\",\n \"1777174\",\n \"1777277\",\n \"1777629\",\n \"1777692\",\n \"1777734\",\n \"1777863\",\n \"1777907\",\n \"1777925\",\n \"1778103\",\n \"1778156\",\n \"1778406\",\n \"1778544\",\n \"1778600\",\n \"1778626\",\n \"1779398\",\n \"1779445\",\n \"1779611\",\n \"1779666\",\n \"1779739\",\n \"1780139\",\n \"1780194\",\n \"1780700\",\n \"1780855\",\n \"1780861\",\n \"1781027\",\n \"1781044\",\n \"1781630\",\n \"1781924\",\n \"1781971\",\n \"1782041\",\n \"1782106\",\n \"1782184\",\n \"1782205\",\n \"1782325\",\n \"1783166\",\n \"1783299\",\n \"1783337\",\n \"1783363\",\n \"1783651\",\n \"1783880\",\n \"1783988\",\n \"1784240\",\n \"1784645\",\n \"1784776\",\n \"1785742\",\n \"1785830\",\n \"1785909\",\n \"1786134\",\n \"1786211\",\n \"1786313\",\n \"1786710\",\n \"1786859\",\n \"1786909\",\n \"1786955\",\n \"1787011\",\n \"1787105\",\n \"1787452\",\n \"1787996\",\n \"1788044\",\n \"1788100\",\n \"1788243\",\n \"1788312\",\n \"1788326\",\n \"1788535\",\n \"1788860\",\n \"1788941\",\n \"1789056\",\n \"1789189\",\n \"1789222\",\n \"1789407\",\n \"1789493\",\n \"1789602\",\n \"1789643\",\n \"1789793\",\n \"1790228\",\n \"1790322\",\n \"1790328\",\n \"1790449\",\n \"1790683\",\n \"1790784\",\n \"1790791\",\n \"1790794\",\n \"1790829\",\n \"1790850\",\n \"1790931\",\n \"1790999\",\n \"1791037\",\n \"1791093\",\n \"1791147\",\n \"1791152\",\n \"1791180\",\n \"1791371\",\n \"1791378\",\n \"1791497\",\n \"1791696\",\n \"1791874\",\n \"1792199\",\n \"1792250\",\n \"1792270\",\n \"1792528\",\n \"1792687\",\n \"1792825\",\n \"1793290\",\n \"1793428\",\n \"1793565\",\n \"1793603\",\n \"1793887\",\n \"1794512\",\n \"1794630\",\n \"1795041\",\n \"1795072\",\n \"1795656\",\n \"1796204\",\n \"1796256\",\n \"1796287\",\n \"1796328\",\n \"1796358\",\n \"1796971\",\n \"1797038\",\n \"1797073\",\n \"1797726\",\n \"1798007\",\n \"1798097\",\n \"1798308\",\n \"1798340\",\n \"1798377\",\n \"1798421\",\n \"1798440\",\n \"1798478\",\n \"1798509\",\n \"1798514\",\n \"1799163\",\n \"1799180\",\n \"1799416\",\n \"1799702\",\n \"1799723\",\n \"1803121\",\n \"1803137\",\n \"1803250\",\n \"1803300\",\n \"1803474\",\n \"1803615\",\n \"1803699\",\n \"1803780\",\n \"1803812\",\n \"1803951\",\n \"1804244\",\n \"1804321\",\n \"1804336\",\n \"1804391\",\n \"1804414\",\n \"1804474\",\n \"1804500\",\n \"1804521\",\n \"1804552\",\n \"1804609\",\n \"1804645\",\n \"1804714\",\n \"1804755\",\n \"1804829\",\n \"1804905\",\n \"1804961\",\n \"1805025\",\n \"1805088\",\n \"1805171\",\n \"1805233\",\n \"1805340\",\n \"1805496\",\n \"1805498\",\n \"1805536\",\n \"1805559\",\n \"1805680\",\n \"1805688\",\n \"1805749\",\n \"1805805\",\n \"1805917\",\n \"1806046\",\n \"1806123\",\n \"1806539\",\n \"1806678\",\n \"1806703\",\n \"1806731\",\n \"1806813\",\n \"1806818\",\n \"1806869\",\n \"1806884\",\n \"1806903\",\n \"1806935\",\n \"1807195\",\n \"1807270\",\n \"1807288\",\n \"1807352\",\n \"1807453\",\n \"1807502\",\n \"1807512\",\n \"1807552\",\n \"1807557\",\n \"1807785\",\n \"1807878\",\n \"1807965\",\n \"1808083\",\n \"1808097\",\n \"1808588\",\n \"1808646\",\n \"1808720\",\n \"1808910\",\n \"1808961\",\n \"1809017\",\n \"1809035\",\n \"1809063\",\n \"1809069\",\n \"1809113\",\n \"1809124\",\n \"1809150\",\n \"1809201\",\n \"1809226\",\n \"1809292\",\n \"1809304\",\n \"1809307\",\n \"1809346\",\n \"1809379\",\n \"1809452\",\n \"1809913\",\n \"1809946\",\n \"1809948\",\n \"1809950\",\n \"1810097\",\n \"1810107\",\n \"1810140\",\n \"1810463\",\n \"1810465\",\n \"1810505\",\n \"1810530\",\n \"1810734\",\n \"1810746\",\n \"1810819\",\n \"1810845\",\n \"1810849\",\n \"1810852\",\n \"1810969\",\n \"1810973\",\n \"1811436\",\n \"1811507\",\n \"1811612\",\n \"1811679\",\n \"1811694\",\n \"1812433\",\n \"1812492\",\n \"1812534\",\n \"1812649\",\n \"1812874\",\n \"1812976\",\n \"1813237\",\n \"1813262\",\n \"1814095\",\n \"1814174\",\n \"1814314\",\n \"1814401\",\n \"1814534\",\n \"1814563\",\n \"1814595\",\n \"1814654\",\n \"1814799\",\n \"1814885\",\n \"1814969\",\n \"1815226\",\n \"1815259\",\n \"1815337\",\n \"1815371\",\n \"1815380\",\n \"1815421\",\n \"1815439\",\n \"1815670\",\n \"1815844\",\n \"1815859\",\n \"1815923\",\n \"1816024\",\n \"1816417\",\n \"1816564\",\n \"1816799\",\n \"1816867\",\n \"1816956\",\n \"1817060\",\n \"1817084\",\n \"1817136\",\n \"1817669\",\n \"1817786\",\n \"1817807\",\n \"1817809\",\n \"1817848\",\n \"1817918\",\n \"1817933\",\n \"1818251\",\n \"1818401\",\n \"1818428\",\n \"1818431\",\n \"1818477\",\n \"1818650\",\n \"1818989\",\n \"1819044\",\n \"1819125\",\n \"1819252\",\n \"1819276\",\n \"1819302\",\n \"1819372\",\n \"1819648\",\n \"1819696\",\n \"1819785\",\n \"1819865\",\n \"1819968\",\n \"1820080\",\n \"1820270\",\n \"1820536\",\n \"1820708\",\n \"1821433\",\n \"1821441\",\n \"1822129\",\n \"1822137\",\n \"3255940\",\n \"3255943\",\n \"3255956\",\n \"3256657\",\n \"3257524\",\n \"3257694\",\n \"3257798\",\n \"3258057\",\n \"3258063\",\n \"3258133\",\n \"3261008\",\n \"4301340\",\n \"4405533\",\n \"4405981\",\n \"4406298\",\n \"4408204\",\n \"4532562\",\n \"4684330\",\n \"4687068\",\n \"4687701\",\n \"4688136\",\n \"4688528\",\n \"4688690\",\n \"4688727\",\n \"4688971\",\n \"4689117\",\n \"4689138\",\n \"4689548\",\n \"4689585\",\n \"4689708\",\n \"4696040\",\n \"4696103\",\n \"4696201\",\n \"4702229\",\n \"4702515\",\n \"4704072\",\n \"4705151\",\n \"4705945\",\n \"4706535\",\n \"4706694\",\n \"4706723\",\n \"4708174\",\n \"4708493\",\n \"4708566\",\n \"4708587\",\n \"4708592\",\n \"4708606\",\n \"4708611\",\n \"4708626\",\n \"4708638\",\n \"4708646\",\n \"4708648\",\n \"4708684\",\n \"4708745\",\n \"4709385\",\n \"5115213\",\n \"5115807\",\n \"5116471\",\n \"6133263\",\n \"7535296\",\n \"7588628\",\n \"7659598\",\n \"7721234\",\n \"7769987\",\n \"7841677\",\n \"8203799\",\n \"8396912\",\n \"8679775\",\n \"8757056\",\n \"8766106\",\n \"8786726\",\n \"8787356\",\n \"8803817\",\n \"8806645\",\n \"8810582\",\n \"8814442\",\n \"8875890\",\n \"8895291\",\n \"8896182\",\n \"8903953\",\n \"8915575\",\n \"8921795\",\n \"8928010\",\n \"8934672\",\n \"8935025\",\n \"8936210\",\n \"8944338\",\n \"8946062\",\n \"8952983\",\n \"8955545\",\n \"8968124\",\n \"8970409\",\n \"8974541\",\n \"8978064\",\n \"8978428\",\n \"8981907\",\n \"8983629\",\n \"8992509\",\n \"8997448\",\n \"9005880\",\n \"9026388\",\n \"9029051\",\n \"9036372\",\n \"9036849\",\n \"9040198\",\n \"9044770\",\n \"9046185\",\n \"9053842\",\n \"9055772\",\n \"9059321\",\n \"9059730\",\n \"9061491\",\n \"9065472\",\n \"9068729\",\n \"9069808\",\n \"9078901\",\n \"9080469\",\n \"9090334\",\n \"9092234\",\n \"9093819\",\n \"9095230\",\n \"9099004\",\n \"9111269\",\n \"9112567\",\n \"9121178\",\n \"9123839\",\n \"9128871\",\n \"9130093\",\n \"9136607\",\n \"9137617\",\n \"9141856\",\n \"9146182\",\n \"9154466\",\n \"9163604\",\n \"9167802\",\n \"9175687\",\n \"9176590\",\n \"9177092\",\n \"9180373\",\n \"9181278\",\n \"9183339\",\n \"9184825\",\n \"9185801\",\n \"9186977\",\n \"9188678\",\n \"9189318\",\n \"9199756\",\n \"9203611\",\n \"9203720\",\n \"9205220\",\n \"9211050\",\n \"9211520\",\n \"9211630\",\n \"9217680\",\n \"9218657\",\n \"9220793\",\n \"9230236\",\n \"9345724\",\n \"9558288\",\n \"9762611\",\n \"1758939\",\n \"1771881\",\n \"1780615\",\n \"1788807\",\n \"4301308\",\n \"4687398\",\n \"7969922\",\n \"8931287\",\n \"9119424\",\n \"9179511\",\n \"1856563\",\n \"1861151\",\n \"4404934\",\n \"7236091\",\n \"1856631\",\n \"1731885\",\n \"1731891\",\n \"1732043\",\n \"1732047\",\n \"1852917\",\n \"11527985\",\n \"1833778\",\n \"1834515\",\n \"1834792\",\n \"1835084\",\n \"1835346\",\n \"1835429\",\n \"1835465\",\n \"1835812\",\n \"1835818\",\n \"1837106\",\n \"1837338\",\n \"1837723\",\n \"1837967\",\n \"1838053\",\n \"1838338\",\n \"1839258\",\n \"1839652\",\n \"1839706\",\n \"1840063\",\n \"1840273\",\n \"1841075\",\n \"1841093\",\n \"4686308\",\n \"5119806\",\n \"1831747\",\n \"1852745\",\n \"1852897\",\n \"4406931\",\n \"1868162\",\n \"1869358\",\n \"1751227\",\n \"1939497\",\n \"1939519\",\n \"3262002\",\n \"1860181\",\n \"1860256\",\n \"1860403\",\n \"1860411\",\n \"3256188\",\n \"5123346\",\n \"5123443\",\n \"1735406\",\n \"1735409\",\n \"1758313\",\n \"1751200\",\n \"1853220\",\n \"1869593\",\n \"1869643\",\n \"1869653\",\n \"1869664\",\n \"1869690\",\n \"1869760\",\n \"1869823\",\n \"1869851\",\n \"1869974\",\n \"1870004\",\n \"1870028\",\n \"1870168\",\n \"1870229\",\n \"1870242\",\n \"1870302\",\n \"1870413\",\n \"1870421\",\n \"1870449\",\n \"1870504\",\n \"1870605\",\n \"1870648\",\n \"1870697\",\n \"1870714\",\n \"1870982\",\n \"1871131\",\n \"1871157\",\n \"1871167\",\n \"1871172\",\n \"1871206\",\n \"1871327\",\n \"1871366\",\n \"1871384\",\n \"1871413\",\n \"1871446\",\n \"1871456\",\n \"1871505\",\n \"1871553\",\n \"1871596\",\n \"1871604\",\n \"1871695\",\n \"1871753\",\n \"1871761\",\n \"1871764\",\n \"1871825\",\n \"1871885\",\n \"1871922\",\n \"1871939\",\n \"1871986\",\n \"1872079\",\n \"1872162\",\n \"1872196\",\n \"1872209\",\n \"1872254\",\n \"1872446\",\n \"1872465\",\n \"1872468\",\n \"1872509\",\n \"1872602\",\n \"1872732\",\n \"1872811\",\n \"1872824\",\n \"1872845\",\n \"1873021\",\n \"1873074\",\n \"1873212\",\n \"1873259\",\n \"1873280\",\n \"1873310\",\n \"1873335\",\n \"1873372\",\n \"1873374\",\n \"1873396\",\n \"1873408\",\n \"1873583\",\n \"1873619\",\n \"1873642\",\n \"1873750\",\n \"1873755\",\n \"1873763\",\n \"1873768\",\n \"1873775\",\n \"1873830\",\n \"1873878\",\n \"1873980\",\n \"1874141\",\n \"1874152\",\n \"1874309\",\n \"1874374\",\n \"1874450\",\n \"1874624\",\n \"1874900\",\n \"1874935\",\n \"1874958\",\n \"1875103\",\n \"1875195\",\n \"1875317\",\n \"1875450\",\n \"1875477\",\n \"1875532\",\n \"1875600\",\n \"1875650\",\n \"1875821\",\n \"1875840\",\n \"1875849\",\n \"1875890\",\n \"1876062\",\n \"1876167\",\n \"1876280\",\n \"1876391\",\n \"1876474\",\n \"1876511\",\n \"1876536\",\n \"1876547\",\n \"1876588\",\n \"1876613\",\n \"1876663\",\n \"1876846\",\n \"1876889\",\n \"1876920\",\n \"1876954\",\n \"1876978\",\n \"1876990\",\n \"1877001\",\n \"1877036\",\n \"1877266\",\n \"1877274\",\n \"1877292\",\n \"1877401\",\n \"1877430\",\n \"1877452\",\n \"1877472\",\n \"1877491\",\n \"1877495\",\n \"1877536\",\n \"1877619\",\n \"1877632\",\n \"1877650\",\n \"1877771\",\n \"1877937\",\n \"1878008\",\n \"1878156\",\n \"1878171\",\n \"1878192\",\n \"1878317\",\n \"1878365\",\n \"1878404\",\n \"1878460\",\n \"1878522\",\n \"1878578\",\n \"1883044\",\n \"1888451\",\n \"1890021\",\n \"1890053\",\n \"3257649\",\n \"4407363\",\n \"4531185\",\n \"4689300\",\n \"4703184\",\n \"4704752\",\n \"7354470\",\n \"7362601\",\n \"7744105\",\n \"8919882\",\n \"8952756\",\n \"9000709\",\n \"9108102\",\n \"9230208\",\n \"1748777\",\n \"1748799\",\n \"1836903\",\n \"1954159\",\n \"11907720\",\n \"1939952\",\n \"1940108\",\n \"1940133\",\n \"1940447\",\n \"1940500\",\n \"1940797\",\n \"1940810\",\n \"1941309\",\n \"1941316\",\n \"4525713\",\n \"4706892\",\n \"7566147\",\n \"7876391\",\n \"10494601\",\n \"1736314\",\n \"1736354\",\n \"1736359\",\n \"1736388\",\n \"1736409\",\n \"1736418\",\n \"1736444\",\n \"1736460\",\n \"1736612\",\n \"1736656\",\n \"1736725\",\n \"1736758\",\n \"1736793\",\n \"1736802\",\n \"1736830\",\n \"1736834\",\n \"1736895\",\n \"1736951\",\n \"1737021\",\n \"1737063\",\n \"1737084\",\n \"1737110\",\n \"1737177\",\n \"1737228\",\n \"1737303\",\n \"1737335\",\n \"1737519\",\n \"1737647\",\n \"1737701\",\n \"1738021\",\n \"1738049\",\n \"1738065\",\n \"1738143\",\n \"1738189\",\n \"1738215\",\n \"1738242\",\n \"1738265\",\n \"1738583\",\n \"1738667\",\n \"1738881\",\n \"1739000\",\n \"1739048\",\n \"1739060\",\n \"1739315\",\n \"1739336\",\n \"1739398\",\n \"1739418\",\n \"1739446\",\n \"1739550\",\n \"1739599\",\n \"1739724\",\n \"1740434\",\n \"1740515\",\n \"1740664\",\n \"1740674\",\n \"1740796\",\n \"1740814\",\n \"1741043\",\n \"1741073\",\n \"1741082\",\n \"1741128\",\n \"1741141\",\n \"1741314\",\n \"1741338\",\n \"1741383\",\n \"1741404\",\n \"1741540\",\n \"1741547\",\n \"1741557\",\n \"1741585\",\n \"1741717\",\n \"1741805\",\n \"1742045\",\n \"1742061\",\n \"1742345\",\n \"1742398\",\n \"1742419\",\n \"1743173\",\n \"1743188\",\n \"1743269\",\n \"1743318\",\n \"1743343\",\n \"1743404\",\n \"1743452\",\n \"1743459\",\n \"1743467\",\n \"1743485\",\n \"1743516\",\n \"1743637\",\n \"1743652\",\n \"1743656\",\n \"1743673\",\n \"1743690\",\n \"1743723\",\n \"1743762\",\n \"1743811\",\n \"1743926\",\n \"1743994\",\n \"1744049\",\n \"1744129\",\n \"1744133\",\n \"1744165\",\n \"1744208\",\n \"1744219\",\n \"1744237\",\n \"1744240\",\n \"1744481\",\n \"1744587\",\n \"1744687\",\n \"1744691\",\n \"1744761\",\n \"1744928\",\n \"1744946\",\n \"1744993\",\n \"1745011\",\n \"1745017\",\n \"1745021\",\n \"1745076\",\n \"1745086\",\n \"1745285\",\n \"1745549\",\n \"1745894\",\n \"1745922\",\n \"1745927\",\n \"1745997\",\n \"1746012\",\n \"1746172\",\n \"1746324\",\n \"1746399\",\n \"1746437\",\n \"1746461\",\n \"1746508\",\n \"1746562\",\n \"1746600\",\n \"1746694\",\n \"1746712\",\n \"1746749\",\n \"1746994\",\n \"1747019\",\n \"1747044\",\n \"1747067\",\n \"1747122\",\n \"1747195\",\n \"1747209\",\n \"1747242\",\n \"1747506\",\n \"1747611\",\n \"1747625\",\n \"1747644\",\n \"1747723\",\n \"1747904\",\n \"1747949\",\n \"1748099\",\n \"1748108\",\n \"1748143\",\n \"1748201\",\n \"1748277\",\n \"1748368\",\n \"1748560\",\n \"1748601\",\n \"1748645\",\n \"1748717\",\n \"1748748\",\n \"1748757\",\n \"4529834\",\n \"4575996\",\n \"4576037\",\n \"4684145\",\n \"4703014\",\n \"4705537\",\n \"4707710\",\n \"4707748\",\n \"4707821\",\n \"4707834\",\n \"4708154\",\n \"4708407\",\n \"7236046\",\n \"7704258\",\n \"9111044\",\n \"9905626\",\n \"1831773\",\n \"1831776\",\n \"3257328\",\n \"10381192\",\n \"10484957\",\n \"10527924\",\n \"10552471\",\n \"11760445\",\n \"1920834\",\n \"1920921\",\n \"1920925\",\n \"1920934\",\n \"1921052\",\n \"1921054\",\n \"1921060\",\n \"1921065\",\n \"1921088\",\n \"1921118\",\n \"1921120\",\n \"1921138\",\n \"1921156\",\n \"1921235\",\n \"1921257\",\n \"1921287\",\n \"1921439\",\n \"1921632\",\n \"1921642\",\n \"1921657\",\n \"1921895\",\n \"1921908\",\n \"1921918\",\n \"1922028\",\n \"1922054\",\n \"1922059\",\n \"1922068\",\n \"1922152\",\n \"1922191\",\n \"1922218\",\n \"1922236\",\n \"1922270\",\n \"1922297\",\n \"1922308\",\n \"1922454\",\n \"1922465\",\n \"1922516\",\n \"1922569\",\n \"1922635\",\n \"1922672\",\n \"1922677\",\n \"1922682\",\n \"1922712\",\n \"1922735\",\n \"1922740\",\n \"1922760\",\n \"1922827\",\n \"1922888\",\n \"1922918\",\n \"1922953\",\n \"1922993\",\n \"1923013\",\n \"1923058\",\n \"1923457\",\n \"1923462\",\n \"1923487\",\n \"1923497\",\n \"1923499\",\n \"1923510\",\n \"1923621\",\n \"1923675\",\n \"1923699\",\n \"1923795\",\n \"1923808\",\n \"1923835\",\n \"1923996\",\n \"1924035\",\n \"1924047\",\n \"1924171\",\n \"1924181\",\n \"1924221\",\n \"1924241\",\n \"1924272\",\n \"1924315\",\n \"1924333\",\n \"1924447\",\n \"1924511\",\n \"1924522\",\n \"1924548\",\n \"1924564\",\n \"1924749\",\n \"1924755\",\n \"1924767\",\n \"1924772\",\n \"1924798\",\n \"1925355\",\n \"1925375\",\n \"1925409\",\n \"1925423\",\n \"1925542\",\n \"1925550\",\n \"1925584\",\n \"1925782\",\n \"1925800\",\n \"1925804\",\n \"1925960\",\n \"1925996\",\n \"1926044\",\n \"1926317\",\n \"1926384\",\n \"1926426\",\n \"1926526\",\n \"1926552\",\n \"1926588\",\n \"1926709\",\n \"1926780\",\n \"1926814\",\n \"1926818\",\n \"1926956\",\n \"1927299\",\n \"1927305\",\n \"1927317\",\n \"1927390\",\n \"1927405\",\n \"1927521\",\n \"1927696\",\n \"1927711\",\n \"1927718\",\n \"1927884\",\n \"1927901\",\n \"1927903\",\n \"1927916\",\n \"1927984\",\n \"1928008\",\n \"1928015\",\n \"1928054\",\n \"1928073\",\n \"1928213\",\n \"1928217\",\n \"1928254\",\n \"1928328\",\n \"1928373\",\n \"1928385\",\n \"1928404\",\n \"1928447\",\n \"1928581\",\n \"1928626\",\n \"1928632\",\n \"1928733\",\n \"1928753\",\n \"1928780\",\n \"1928917\",\n \"1928931\",\n \"1929039\",\n \"1929057\",\n \"1929128\",\n \"1929153\",\n \"1929768\",\n \"1930893\",\n \"1930950\",\n \"1931032\",\n \"1931092\",\n \"1931110\",\n \"1931125\",\n \"1931131\",\n \"1931144\",\n \"1931173\",\n \"1931187\",\n \"1931306\",\n \"1931309\",\n \"1931390\",\n \"1931495\",\n \"1931542\",\n \"1931560\",\n \"1931647\",\n \"1931775\",\n \"1931802\",\n \"1931823\",\n \"1931848\",\n \"1932039\",\n \"1932052\",\n \"1932134\",\n \"1932169\",\n \"1932182\",\n \"1932194\",\n \"1932323\",\n \"1932378\",\n \"1932450\",\n \"1932562\",\n \"1932574\",\n \"1932578\",\n \"1932636\",\n \"1932749\",\n \"1932810\",\n \"1932850\",\n \"1932878\",\n \"1932880\",\n \"1932904\",\n \"1932941\",\n \"1932963\",\n \"1933012\",\n \"1933083\",\n \"1933089\",\n \"1933256\",\n \"1933268\",\n \"1933579\",\n \"1933641\",\n \"1933677\",\n \"1933756\",\n \"1933795\",\n \"1933942\",\n \"1933996\",\n \"1934186\",\n \"1935356\",\n \"1935852\",\n \"1936473\",\n \"3255365\",\n \"3257152\",\n \"3258105\",\n \"4300267\",\n \"4300486\",\n \"4572640\",\n \"4705981\",\n \"4708919\",\n \"4709100\",\n \"4709103\",\n \"4709146\",\n \"8659047\",\n \"9334318\",\n \"9605252\",\n \"10777718\",\n \"1751979\",\n \"1752035\",\n \"1752100\",\n \"1752158\",\n \"1752234\",\n \"1752236\",\n \"1752277\",\n \"1752321\",\n \"1752361\",\n \"1752382\",\n \"1752474\",\n \"1752482\",\n \"1752533\",\n \"1752552\",\n \"1752650\",\n \"1752744\",\n \"1752804\",\n \"1752820\",\n \"1752848\",\n \"1752891\",\n \"1752899\",\n \"1752915\",\n \"1752944\",\n \"1752965\",\n \"1753080\",\n \"1753104\",\n \"1753147\",\n \"1753211\",\n \"1753224\",\n \"1753410\",\n \"1753458\",\n \"1753548\",\n \"1753594\",\n \"1753630\",\n \"1753657\",\n \"1753747\",\n \"1753802\",\n \"1753826\",\n \"1753830\",\n \"1753896\",\n \"1753921\",\n \"1753981\",\n \"3258147\",\n \"4408190\",\n \"4688624\",\n \"4702368\",\n \"4702379\",\n \"4703000\",\n \"4707000\",\n \"4707529\",\n \"4708698\",\n \"5105328\",\n \"7963991\",\n \"9600123\",\n \"1919119\",\n \"1919124\",\n \"1919127\",\n \"1919144\",\n \"1919150\",\n \"1919168\",\n \"1919175\",\n \"1919219\",\n \"1919227\",\n \"1919238\",\n \"1919243\",\n \"1919305\",\n \"1919315\",\n \"1919339\",\n \"1919351\",\n \"1919645\",\n \"1919659\",\n \"1919675\",\n \"1919696\",\n \"1919721\",\n \"1919919\",\n \"1919936\",\n \"1919950\",\n \"1919962\",\n \"1920160\",\n \"1920180\",\n \"1920190\",\n \"1920236\",\n \"1920261\",\n \"1920274\",\n \"1920283\",\n \"1920346\",\n \"1920412\",\n \"1920425\",\n \"1920451\",\n \"1920460\",\n \"1920465\",\n \"1920481\",\n \"1920513\",\n \"1920523\",\n \"1920551\",\n \"1920554\",\n \"1920570\",\n \"1920580\",\n \"1920583\",\n \"1920622\",\n \"1920682\",\n \"1920702\",\n \"1920704\",\n \"1920723\",\n \"1920785\",\n \"1920793\",\n \"1920808\",\n \"1920814\",\n \"3257351\",\n \"7236092\",\n \"7786896\",\n \"8213918\",\n \"8319926\",\n \"1748889\",\n \"1748902\",\n \"1749042\",\n \"1749068\",\n \"1749116\",\n \"1749137\",\n \"1749286\",\n \"1749401\",\n \"1749505\",\n \"1749660\",\n \"1749662\",\n \"1749712\",\n \"1749732\",\n \"1750313\",\n \"1750339\",\n \"1750759\",\n \"1751134\",\n \"5104758\",\n \"7777102\",\n \"8057237\",\n \"9103399\",\n \"9155713\",\n \"1757993\",\n \"1828308\",\n \"1828314\",\n \"1735487\",\n \"1735586\",\n \"4527338\",\n \"1758439\",\n \"1758446\",\n \"1731817\",\n \"1731859\",\n \"1855231\",\n \"1868834\",\n \"1868875\",\n \"1868887\",\n \"1869041\",\n \"1869056\",\n \"1869176\",\n \"1869237\",\n \"1869255\",\n \"4688465\",\n \"1992537\",\n \"10583848\",\n \"11462628\",\n \"11486436\",\n \"11491719\",\n \"11596224\",\n \"11783346\",\n \"11903902\",\n \"1954235\",\n \"1954313\",\n \"1954391\",\n \"1954478\",\n \"1954494\",\n \"1954512\",\n \"1954521\",\n \"1954555\",\n \"1954587\",\n \"1954875\",\n \"1954921\",\n \"1954924\",\n \"1955016\",\n \"1955038\",\n \"1955270\",\n \"1955304\",\n \"1955356\",\n \"1955408\",\n \"1955475\",\n \"1955495\",\n \"1955508\",\n \"1955551\",\n \"1955678\",\n \"1955716\",\n \"1955730\",\n \"1955752\",\n \"1955761\",\n \"1955804\",\n \"1955843\",\n \"1955898\",\n \"1955900\",\n \"1955981\",\n \"1955998\",\n \"1956214\",\n \"1956303\",\n \"1956364\",\n \"1956376\",\n \"1956415\",\n \"1956434\",\n \"1956495\",\n \"1956504\",\n \"1956522\",\n \"1956545\",\n \"1956709\",\n \"1956715\",\n \"1956824\",\n \"1956895\",\n \"1956900\",\n \"1956949\",\n \"1957057\",\n \"1957136\",\n \"1957172\",\n \"1957193\",\n \"1957281\",\n \"1957327\",\n \"1957367\",\n \"1957436\",\n \"1957459\",\n \"1957508\",\n \"1957545\",\n \"1957620\",\n \"1957829\",\n \"1957999\",\n \"1958023\",\n \"1958047\",\n \"1958056\",\n \"1958067\",\n \"1958104\",\n \"1958143\",\n \"1958238\",\n \"1958411\",\n \"1958489\",\n \"1958507\",\n \"1959339\",\n \"1959374\",\n \"1959381\",\n \"1959409\",\n \"1959486\",\n \"1959498\",\n \"1959541\",\n \"1959593\",\n \"1959635\",\n \"1959643\",\n \"1959662\",\n \"1959668\",\n \"1959781\",\n \"1959797\",\n \"1959834\",\n \"1959852\",\n \"1959873\",\n \"1959888\",\n \"1959997\",\n \"1960003\",\n \"1960016\",\n \"1960087\",\n \"1960098\",\n \"1960125\",\n \"1960162\",\n \"1960170\",\n \"1960193\",\n \"1960225\",\n \"1960410\",\n \"1960422\",\n \"1960500\",\n \"1960519\",\n \"1960570\",\n \"1960592\",\n \"1960628\",\n \"1960671\",\n \"1960844\",\n \"1960939\",\n \"1960943\",\n \"1960958\",\n \"1960966\",\n \"1961048\",\n \"1961066\",\n \"1961117\",\n \"1961145\",\n \"1961158\",\n \"1961179\",\n \"1961188\",\n \"1961229\",\n \"1961264\",\n \"1961334\",\n \"1961371\",\n \"1961383\",\n \"1961643\",\n \"1961716\",\n \"1961719\",\n \"1962047\",\n \"1962165\",\n \"1962369\",\n \"1962577\",\n \"1962632\",\n \"1962655\",\n \"1962676\",\n \"1962688\",\n \"1962704\",\n \"1962828\",\n \"1962830\",\n \"1962840\",\n \"1962857\",\n \"1962893\",\n \"1962932\",\n \"1962956\",\n \"1962995\",\n \"1963049\",\n \"1963055\",\n \"1963058\",\n \"1963165\",\n \"1963199\",\n \"1963296\",\n \"1963299\",\n \"1963418\",\n \"1963424\",\n \"1963445\",\n \"1963584\",\n \"1963618\",\n \"1963627\",\n \"1963630\",\n \"1963706\",\n \"1963753\",\n \"1963775\",\n \"1963777\",\n \"1963826\",\n \"1963835\",\n \"1963873\",\n \"1963933\",\n \"1964020\",\n \"1964040\",\n \"1964064\",\n \"1964067\",\n \"1964095\",\n \"1964131\",\n \"1964175\",\n \"1964246\",\n \"1964299\",\n \"1964392\",\n \"1964549\",\n \"1964562\",\n \"1964577\",\n \"1964696\",\n \"1964699\",\n \"1964714\",\n \"1964733\",\n \"1964835\",\n \"1964936\",\n \"1965018\",\n \"1965123\",\n \"1965633\",\n \"1965641\",\n \"1965663\",\n \"1965758\",\n \"1965881\",\n \"1965888\",\n \"1965967\",\n \"1966069\",\n \"1966159\",\n \"1966180\",\n \"1966193\",\n \"1966215\",\n \"1966235\",\n \"1966280\",\n \"1966340\",\n \"1966346\",\n \"1966360\",\n \"1966853\",\n \"1966883\",\n \"1966927\",\n \"1966929\",\n \"1966975\",\n \"1966982\",\n \"1967123\",\n \"1967196\",\n \"1967207\",\n \"1967210\",\n \"1967220\",\n \"1967234\",\n \"1967242\",\n \"1967263\",\n \"1967337\",\n \"1967427\",\n \"1967435\",\n \"1967444\",\n \"1967447\",\n \"1967583\",\n \"1967604\",\n \"1967660\",\n \"1967696\",\n \"1967699\",\n \"1967715\",\n \"1967722\",\n \"1968101\",\n \"1968135\",\n \"1968166\",\n \"1968199\",\n \"1968257\",\n \"1968271\",\n \"1968301\",\n \"1968306\",\n \"1968362\",\n \"1968537\",\n \"1968582\",\n \"1968643\",\n \"1968665\",\n \"1968683\",\n \"1968722\",\n \"1968827\",\n \"1968854\",\n \"1968925\",\n \"1968950\",\n \"1968975\",\n \"1969102\",\n \"1969122\",\n \"1969566\",\n \"1969571\",\n \"1969613\",\n \"1969918\",\n \"1970019\",\n \"1970091\",\n \"1970117\",\n \"1970120\",\n \"1970142\",\n \"1970157\",\n \"1970163\",\n \"1970179\",\n \"1970226\",\n \"1970264\",\n \"1970279\",\n \"1970314\",\n \"1970403\",\n \"1970435\",\n \"1970574\",\n \"1971819\",\n \"1971994\",\n \"1972072\",\n \"1972076\",\n \"1972097\",\n \"1972114\",\n \"1972404\",\n \"1972425\",\n \"1972461\",\n \"1972472\",\n \"1972604\",\n \"1972607\",\n \"1972689\",\n \"1972702\",\n \"1972707\",\n \"1972791\",\n \"1972822\",\n \"1972901\",\n \"1972997\",\n \"1973136\",\n \"1973159\",\n \"1973166\",\n \"1973239\",\n \"1973243\",\n \"1973295\",\n \"1973321\",\n \"1973331\",\n \"1973392\",\n \"1973405\",\n \"1973483\",\n \"1973488\",\n \"1973578\",\n \"1973718\",\n \"1973722\",\n \"1973909\",\n \"1975155\",\n \"1975197\",\n \"1975208\",\n \"1975278\",\n \"1975285\",\n \"1975292\",\n \"1975336\",\n \"1975361\",\n \"1975464\",\n \"1975542\",\n \"1975570\",\n \"1975577\",\n \"1975703\",\n \"1975714\",\n \"1975729\",\n \"1975783\",\n \"1975804\",\n \"1975885\",\n \"1976058\",\n \"1976118\",\n \"1976141\",\n \"1976155\",\n \"1976211\",\n \"1976240\",\n \"1976245\",\n \"1976250\",\n \"1976296\",\n \"1976321\",\n \"1976338\",\n \"1976344\",\n \"1976460\",\n \"1976496\",\n \"1976515\",\n \"1976638\",\n \"1976854\",\n \"1976884\",\n \"1976925\",\n \"1976930\",\n \"1976949\",\n \"1977104\",\n \"1977179\",\n \"1977295\",\n \"1977298\",\n \"1977323\",\n \"1977351\",\n \"1977402\",\n \"1977419\",\n \"1977757\",\n \"1977775\",\n \"1977811\",\n \"1977864\",\n \"1977960\",\n \"1977963\",\n \"1977986\",\n \"1978014\",\n \"1978019\",\n \"1978075\",\n \"1978112\",\n \"1978245\",\n \"1978273\",\n \"1978364\",\n \"1978451\",\n \"1978455\",\n \"1978481\",\n \"1978495\",\n \"1978506\",\n \"1978607\",\n \"1978643\",\n \"1978697\",\n \"1978732\",\n \"1978736\",\n \"1978749\",\n \"1978784\",\n \"1978814\",\n \"1978835\",\n \"1978893\",\n \"1978948\",\n \"1978974\",\n \"1978994\",\n \"1979019\",\n \"1979040\",\n \"1979106\",\n \"1979213\",\n \"1979243\",\n \"1979517\",\n \"1979554\",\n \"1979719\",\n \"1979727\",\n \"1980021\",\n \"1980033\",\n \"1980239\",\n \"1980263\",\n \"1980288\",\n \"1980342\",\n \"1980490\",\n \"1980504\",\n \"1980511\",\n \"1980556\",\n \"1980650\",\n \"1980718\",\n \"1981051\",\n \"1981142\",\n \"1981325\",\n \"1981449\",\n \"1981690\",\n \"1981717\",\n \"1981744\",\n \"1981778\",\n \"1981855\",\n \"1981933\",\n \"1981941\",\n \"1981987\",\n \"1981996\",\n \"1982006\",\n \"1982017\",\n \"1982147\",\n \"1982199\",\n \"1982289\",\n \"1982367\",\n \"1984142\",\n \"1984231\",\n \"1984651\",\n \"1984667\",\n \"1984731\",\n \"1984741\",\n \"1984909\",\n \"1984922\",\n \"1985058\",\n \"1985146\",\n \"1985258\",\n \"1985404\",\n \"1985484\",\n \"1985486\",\n \"1985489\",\n \"1985492\",\n \"1985507\",\n \"1985570\",\n \"1985578\",\n \"1985628\",\n \"1985702\",\n \"1985716\",\n \"1985728\",\n \"1985787\",\n \"1985925\",\n \"1985928\",\n \"1985934\",\n \"1985969\",\n \"1986081\",\n \"1986645\",\n \"1986772\",\n \"1986805\",\n \"1986845\",\n \"1986868\",\n \"1986905\",\n \"1986930\",\n \"1986939\",\n \"1986953\",\n \"1986997\",\n \"1987067\",\n \"1987141\",\n \"1987202\",\n \"1987269\",\n \"1987300\",\n \"1987326\",\n \"1987346\",\n \"1987509\",\n \"1987555\",\n \"1987626\",\n \"1987632\",\n \"1987645\",\n \"1987660\",\n \"1987711\",\n \"1987746\",\n \"1987792\",\n \"1987820\",\n \"1987849\",\n \"1987861\",\n \"1987995\",\n \"1988224\",\n \"1988251\",\n \"1988282\",\n \"1988304\",\n \"1988350\",\n \"1988388\",\n \"1988399\",\n \"1988485\",\n \"1988488\",\n \"1988503\",\n \"1988533\",\n \"1988760\",\n \"1988779\",\n \"1988815\",\n \"1988876\",\n \"1988887\",\n \"1988893\",\n \"1989045\",\n \"1989161\",\n \"1989580\",\n \"1989902\",\n \"1989927\",\n \"1989996\",\n \"1990136\",\n \"1990163\",\n \"1990193\",\n \"1990247\",\n \"1990257\",\n \"1990356\",\n \"1990367\",\n \"1990531\",\n \"1990591\",\n \"1990677\",\n \"1990989\",\n \"1991004\",\n \"1991120\",\n \"1991135\",\n \"1991234\",\n \"1991276\",\n \"1991279\",\n \"1991309\",\n \"1991325\",\n \"1991357\",\n \"1991401\",\n \"1991426\",\n \"1991467\",\n \"1991531\",\n \"1991777\",\n \"1991817\",\n \"1991843\",\n \"1991934\",\n \"1991946\",\n \"1992166\",\n \"1992168\",\n \"2080450\",\n \"3255832\",\n \"3256119\",\n \"3256294\",\n \"3256322\",\n \"3256356\",\n \"3256453\",\n \"3257150\",\n \"3258045\",\n \"4302220\",\n \"4302229\",\n \"4302289\",\n \"4404424\",\n \"4404732\",\n \"4405258\",\n \"4405439\",\n \"4406051\",\n \"4406069\",\n \"4406074\",\n \"4406551\",\n \"4406622\",\n \"4407697\",\n \"4407786\",\n \"4408085\",\n \"4523515\",\n \"4524069\",\n \"4524400\",\n \"4524792\",\n \"4524913\",\n \"4525072\",\n \"4525111\",\n \"4571921\",\n \"4573369\",\n \"4684017\",\n \"4684087\",\n \"4684253\",\n \"4684258\",\n \"4687117\",\n \"4688641\",\n \"4689025\",\n \"4689059\",\n \"4689628\",\n \"4695897\",\n \"4695929\",\n \"4702252\",\n \"4702588\",\n \"4702630\",\n \"4702642\",\n \"4702651\",\n \"4702781\",\n \"4702805\",\n \"4702831\",\n \"4702862\",\n \"4702877\",\n \"4702889\",\n \"4702891\",\n \"4702939\",\n \"4702953\",\n \"4703248\",\n \"4703670\",\n \"4703719\",\n \"4704098\",\n \"4704582\",\n \"4705145\",\n \"4705623\",\n \"4705796\",\n \"4705876\",\n \"4705882\",\n \"4705978\",\n \"4706585\",\n \"4706983\",\n \"4707100\",\n \"4707641\",\n \"4707685\",\n \"4708197\",\n \"4708288\",\n \"4708365\",\n \"4708709\",\n \"4709333\",\n \"5144176\",\n \"5146397\",\n \"5430609\",\n \"5734481\",\n \"7514692\",\n \"7543161\",\n \"7852351\",\n \"8107362\",\n \"8249110\",\n \"8314432\",\n \"8338704\",\n \"8407240\",\n \"9077304\",\n \"9182266\",\n \"9183600\",\n \"9210500\",\n \"9514086\",\n \"9601813\",\n \"1992205\",\n \"10661133\",\n \"10906002\",\n \"10962816\",\n \"10976134\",\n \"10988777\",\n \"10990846\",\n \"11024850\",\n \"11027113\",\n \"11057282\",\n \"11425419\",\n \"1942052\",\n \"1942086\",\n \"1942128\",\n \"1942234\",\n \"1942250\",\n \"1942255\",\n \"1942264\",\n \"1942324\",\n \"1942339\",\n \"1942369\",\n \"1942373\",\n \"1942404\",\n \"1942442\",\n \"1942503\",\n \"1942523\",\n \"1942552\",\n \"1942608\",\n \"1942628\",\n \"1942655\",\n \"1942669\",\n \"1942671\",\n \"1942686\",\n \"1942692\",\n \"1942755\",\n \"1942827\",\n \"1942846\",\n \"1942857\",\n \"1942876\",\n \"1942944\",\n \"1942996\",\n \"1943046\",\n \"1943068\",\n \"1943127\",\n \"1943165\",\n \"1943205\",\n \"1943211\",\n \"1943307\",\n \"1943357\",\n \"1943433\",\n \"1943469\",\n \"1943497\",\n \"1943555\",\n \"1943613\",\n \"1943627\",\n \"1943654\",\n \"1943753\",\n \"1943820\",\n \"1943934\",\n \"1943941\",\n \"1944003\",\n \"1944007\",\n \"1944103\",\n \"1944230\",\n \"1944270\",\n \"1944355\",\n \"1944409\",\n \"1944441\",\n \"1944474\",\n \"1944558\",\n \"1944586\",\n \"1944617\",\n \"1944742\",\n \"1944767\",\n \"1944774\",\n \"1944792\",\n \"1944831\",\n \"1944895\",\n \"1944946\",\n \"1944973\",\n \"1944985\",\n \"1945035\",\n \"1945078\",\n \"1945083\",\n \"1945113\",\n \"1945266\",\n \"1945298\",\n \"1945307\",\n \"1945390\",\n \"1945451\",\n \"1945528\",\n \"1945660\",\n \"1945809\",\n \"1945854\",\n \"1945902\",\n \"1945949\",\n \"1945956\",\n \"1945979\",\n \"1946009\",\n \"1946033\",\n \"1946052\",\n \"1946065\",\n \"1946071\",\n \"1946077\",\n \"1946084\",\n \"1946099\",\n \"1946141\",\n \"1946158\",\n \"1946263\",\n \"1946282\",\n \"1946331\",\n \"1946375\",\n \"1946413\",\n \"1946463\",\n \"1946473\",\n \"1946490\",\n \"1946517\",\n \"1946541\",\n \"1946554\",\n \"1946599\",\n \"1946630\",\n \"1946647\",\n \"1946718\",\n \"1946721\",\n \"1946753\",\n \"1946762\",\n \"1946766\",\n \"1946802\",\n \"1946900\",\n \"1946907\",\n \"1946979\",\n \"1947018\",\n \"1947024\",\n \"1947108\",\n \"1947144\",\n \"1947191\",\n \"1947272\",\n \"1947353\",\n \"1947384\",\n \"1947400\",\n \"1947405\",\n \"1947493\",\n \"1947504\",\n \"1947532\",\n \"1947624\",\n \"1947649\",\n \"1947701\",\n \"1947798\",\n \"1947815\",\n \"1947844\",\n \"1947872\",\n \"1947971\",\n \"1948041\",\n \"1948052\",\n \"1948058\",\n \"1948143\",\n \"1948367\",\n \"1948418\",\n \"1948434\",\n \"1948459\",\n \"1948519\",\n \"1948624\",\n \"1948816\",\n \"1948855\",\n \"1948868\",\n \"1948909\",\n \"1948936\",\n \"1948942\",\n \"1948964\",\n \"1949003\",\n \"1949041\",\n \"1949053\",\n \"1949089\",\n \"1949143\",\n \"1949308\",\n \"1949330\",\n \"1949334\",\n \"1949354\",\n \"1949424\",\n \"1949446\",\n \"1949486\",\n \"1949496\",\n \"1949517\",\n \"1949579\",\n \"1949610\",\n \"1949632\",\n \"1949647\",\n \"1949686\",\n \"1949704\",\n \"1950012\",\n \"1950015\",\n \"1950034\",\n \"1950046\",\n \"1950114\",\n \"1950148\",\n \"1950154\",\n \"1950166\",\n \"1950193\",\n \"1950200\",\n \"1950257\",\n \"1950299\",\n \"1950334\",\n \"1950360\",\n \"1950380\",\n \"1950406\",\n \"1950496\",\n \"1950566\",\n \"1950585\",\n \"1950649\",\n \"1950763\",\n \"1951061\",\n \"1951066\",\n \"1951093\",\n \"1951144\",\n \"1951213\",\n \"1951289\",\n \"1951332\",\n \"1951348\",\n \"3231212\",\n \"5142228\",\n \"5142691\",\n \"7881632\",\n \"8178582\",\n \"8331960\",\n \"8363558\",\n \"9262994\",\n \"1869438\",\n \"1869504\",\n \"1952875\",\n \"1952907\",\n \"1735631\",\n \"1735652\",\n \"1735814\",\n \"1735869\",\n \"3257930\",\n \"10677299\",\n \"11064851\",\n \"11902924\",\n \"12105049\",\n \"1758610\",\n \"1758718\",\n \"1758724\",\n \"1758765\",\n \"1758790\",\n \"1758812\",\n \"1758827\",\n \"1758873\",\n \"1759029\",\n \"1759152\",\n \"1759176\",\n \"1759329\",\n \"1759405\",\n \"1759552\",\n \"1759711\",\n \"1759797\",\n \"1759812\",\n \"1759878\",\n \"1759882\",\n \"1760088\",\n \"1760168\",\n \"1760260\",\n \"1760285\",\n \"1760355\",\n \"1760401\",\n \"1760447\",\n \"1760588\",\n \"1760678\",\n \"1760738\",\n \"1760849\",\n \"1760928\",\n \"1760946\",\n \"1761017\",\n \"1761132\",\n \"1761388\",\n \"1761401\",\n \"1761495\",\n \"1761550\",\n \"1761561\",\n \"1761728\",\n \"1761775\",\n \"1761787\",\n \"1761797\",\n \"1761857\",\n \"1761889\",\n \"1762232\",\n \"1762346\",\n \"1762605\",\n \"1762640\",\n \"1762666\",\n \"1762898\",\n \"1763285\",\n \"1763597\",\n \"1763693\",\n \"1763713\",\n \"1764140\",\n \"1764158\",\n \"1764234\",\n \"1764537\",\n \"1764670\",\n \"1764684\",\n \"1764709\",\n \"1764737\",\n \"1764916\",\n \"1764920\",\n \"1765154\",\n \"1765161\",\n \"1765207\",\n \"1765494\",\n \"1765601\",\n \"1765657\",\n \"1765726\",\n \"1765763\",\n \"1765877\",\n \"1765895\",\n \"1765949\",\n \"1765960\",\n \"1766066\",\n \"1766077\",\n \"1766123\",\n \"1766234\",\n \"1766265\",\n \"1766280\",\n \"1766366\",\n \"1766624\",\n \"1766708\",\n \"1766908\",\n \"1766914\",\n \"1767046\",\n \"1767093\",\n \"1767334\",\n \"1767360\",\n \"1767483\",\n \"1767509\",\n \"1767566\",\n \"1767590\",\n \"1767644\",\n \"1767714\",\n \"1767949\",\n \"1768106\",\n \"1768130\",\n \"1768136\",\n \"1768165\",\n \"1768222\",\n \"1768302\",\n \"1768411\",\n \"1768542\",\n \"1768561\",\n \"1768691\",\n \"1768949\",\n \"1768971\",\n \"1769008\",\n \"1769024\",\n \"1769051\",\n \"1769093\",\n \"1769110\",\n \"1769189\",\n \"1769208\",\n \"1769212\",\n \"1769504\",\n \"1769812\",\n \"1769933\",\n \"1769943\",\n \"1769945\",\n \"1769972\",\n \"1770123\",\n \"1770169\",\n \"1770274\",\n \"1770396\",\n \"1770488\",\n \"1770569\",\n \"1770592\",\n \"1770658\",\n \"1771356\",\n \"1771363\",\n \"1771501\",\n \"1771549\",\n \"1771866\",\n \"1771871\",\n \"1771980\",\n \"1772042\",\n \"1772092\",\n \"1772151\",\n \"1772155\",\n \"1772253\",\n \"1772359\",\n \"1772421\",\n \"1772455\",\n \"1772660\",\n \"1772926\",\n \"1773740\",\n \"1773781\",\n \"1773846\",\n \"1774090\",\n \"1774237\",\n \"1774251\",\n \"1774256\",\n \"1774269\",\n \"1774309\",\n \"1774357\",\n \"1774366\",\n \"1774778\",\n \"1774853\",\n \"1774917\",\n \"1774947\",\n \"1775029\",\n \"1775058\",\n \"1775081\",\n \"1775149\",\n \"1775275\",\n \"1775285\",\n \"1775298\",\n \"1775310\",\n \"1775505\",\n \"1775624\",\n \"1775633\",\n \"1775663\",\n \"1775784\",\n \"1775833\",\n \"1775864\",\n \"1775887\",\n \"1775910\",\n \"1775959\",\n \"1775969\",\n \"1775986\",\n \"1776166\",\n \"1776168\",\n \"1776181\",\n \"1776205\",\n \"1776299\",\n \"1776391\",\n \"1776413\",\n \"1776454\",\n \"1776576\",\n \"1776846\",\n \"1776879\",\n \"1776978\",\n \"1777101\",\n \"1777137\",\n \"1777243\",\n \"1777260\",\n \"1777560\",\n \"1777724\",\n \"1777760\",\n \"1777868\",\n \"1777971\",\n \"1778073\",\n \"1778108\",\n \"1778114\",\n \"1778136\",\n \"1778332\",\n \"1778497\",\n \"1778527\",\n \"1778574\",\n \"1778686\",\n \"1778695\",\n \"1779253\",\n \"1779380\",\n \"1779429\",\n \"1779630\",\n \"1779682\",\n \"1779957\",\n \"1780042\",\n \"1780068\",\n \"1780207\",\n \"1780269\",\n \"1780300\",\n \"1780844\",\n \"1780913\",\n \"1781086\",\n \"1781160\",\n \"1781226\",\n \"1781546\",\n \"1781683\",\n \"1781695\",\n \"1782029\",\n \"1782167\",\n \"1782317\",\n \"1782330\",\n \"1782414\",\n \"1782456\",\n \"1782460\",\n \"1782522\",\n \"1782524\",\n \"1782594\",\n \"1782607\",\n \"1782659\",\n \"1783087\",\n \"1783311\",\n \"1783344\",\n \"1783367\",\n \"1783394\",\n \"1783739\",\n \"1783783\",\n \"1783838\",\n \"1783845\",\n \"1783931\",\n \"1783955\",\n \"1784275\",\n \"1784342\",\n \"1784356\",\n \"1784395\",\n \"1784686\",\n \"1784696\",\n \"1784759\",\n \"1784809\",\n \"1784892\",\n \"1785140\",\n \"1785216\",\n \"1785279\",\n \"1785281\",\n \"1785305\",\n \"1785398\",\n \"1785439\",\n \"1785448\",\n \"1785723\",\n \"1785726\",\n \"1785833\",\n \"1785873\",\n \"1785931\",\n \"1786031\",\n \"1786307\",\n \"1786329\",\n \"1786447\",\n \"1786454\",\n \"1786513\",\n \"1786563\",\n \"1786570\",\n \"1786601\",\n \"1786690\",\n \"1786730\",\n \"1786807\",\n \"1786886\",\n \"1786916\",\n \"1786930\",\n \"1787061\",\n \"1787107\",\n \"1787399\",\n \"1787427\",\n \"1787496\",\n \"1787522\",\n \"1788033\",\n \"1788051\",\n \"1788069\",\n \"1788138\",\n \"1788322\",\n \"1788411\",\n \"1788466\",\n \"1788663\",\n \"1788678\",\n \"1788719\",\n \"1788724\",\n \"1788764\",\n \"1788844\",\n \"1788916\",\n \"1789061\",\n \"1789150\",\n \"1789210\",\n \"1789246\",\n \"1789286\",\n \"1789474\",\n \"1789503\",\n \"1789545\",\n \"1789628\",\n \"1789671\",\n \"1789826\",\n \"1789953\",\n \"1789978\",\n \"1790337\",\n \"1790356\",\n \"1790601\",\n \"1790726\",\n \"1790837\",\n \"1791315\",\n \"1791382\",\n \"1791585\",\n \"1791592\",\n \"1791654\",\n \"1791678\",\n \"1791756\",\n \"1791769\",\n \"1791792\",\n \"1791827\",\n \"1791843\",\n \"1791861\",\n \"1791868\",\n \"1792055\",\n \"1792280\",\n \"1792316\",\n \"1792324\",\n \"1792405\",\n \"1792635\",\n \"1792712\",\n \"1792752\",\n \"1792764\",\n \"1792816\",\n \"1792979\",\n \"1792984\",\n \"1793188\",\n \"1793190\",\n \"1793201\",\n \"1793222\",\n \"1793320\",\n \"1793366\",\n \"1793417\",\n \"1793452\",\n \"1793571\",\n \"1793585\",\n \"1793660\",\n \"1793684\",\n \"1793697\",\n \"1793856\",\n \"1793981\",\n \"1794099\",\n \"1794349\",\n \"1794423\",\n \"1794496\",\n \"1794509\",\n \"1794529\",\n \"1794570\",\n \"1794807\",\n \"1795061\",\n \"1795103\",\n \"1795126\",\n \"1795443\",\n \"1795478\",\n \"1795578\",\n \"1795782\",\n \"1796209\",\n \"1796225\",\n \"1796272\",\n \"1796302\",\n \"1796408\",\n \"1796469\",\n \"1796639\",\n \"1796782\",\n \"1796837\",\n \"1796957\",\n \"1797004\",\n \"1797586\",\n \"1797730\",\n \"1798027\",\n \"1798083\",\n \"1798089\",\n \"1798277\",\n \"1798362\",\n \"1798417\",\n \"1798902\",\n \"1799429\",\n \"1799669\",\n \"1799687\",\n \"1799771\",\n \"1799789\",\n \"1799868\",\n \"1799993\",\n \"1800016\",\n \"1800085\",\n \"1800142\",\n \"1802775\",\n \"3256116\",\n \"3257794\",\n \"3257836\",\n \"3257894\",\n \"4301067\",\n \"4301098\",\n \"4301121\",\n \"4301281\",\n \"4301305\",\n \"4404325\",\n \"4404729\",\n \"4405135\",\n \"4405245\",\n \"4405430\",\n \"4405983\",\n \"4406268\",\n \"4406360\",\n \"4407165\",\n \"4407218\",\n \"4407310\",\n \"4407354\",\n \"4407476\",\n \"4407554\",\n \"4533122\",\n \"4533124\",\n \"4533660\",\n \"4534405\",\n \"4534456\",\n \"4534532\",\n \"4534661\",\n \"4574082\",\n \"4687385\",\n \"4687388\",\n \"4687438\",\n \"4687494\",\n \"4687531\",\n \"4687545\",\n \"4687726\",\n \"4687791\",\n \"4687851\",\n \"4687877\",\n \"4687937\",\n \"4687943\",\n \"4687984\",\n \"4688073\",\n \"4688148\",\n \"4688298\",\n \"4688408\",\n \"4688714\",\n \"4688768\",\n \"4689528\",\n \"4703509\",\n \"4704034\",\n \"5108637\",\n \"5110374\",\n \"5110641\",\n \"5430630\",\n \"6116898\",\n \"6132796\",\n \"7236059\",\n \"7236098\",\n \"7384515\",\n \"7396883\",\n \"7704040\",\n \"7729420\",\n \"7742506\",\n \"7973780\",\n \"8109351\",\n \"8296807\",\n \"8379138\",\n \"8389051\",\n \"8407958\",\n \"8728355\",\n \"8782295\",\n \"8875114\",\n \"8875134\",\n \"8930863\",\n \"8963517\",\n \"8982056\",\n \"8997710\",\n \"9002818\",\n \"9060128\",\n \"9095083\",\n \"9106541\",\n \"9118632\",\n \"9131390\",\n \"9177300\",\n \"9189502\",\n \"9209436\",\n \"9340110\",\n \"9357810\",\n \"9457004\",\n \"9529506\",\n \"9564041\",\n \"10025997\",\n \"10800539\",\n \"10864898\",\n \"1822252\",\n \"1822307\",\n \"1822481\",\n \"1822545\",\n \"1822666\",\n \"1822778\",\n \"1822912\",\n \"1823292\",\n \"1823440\",\n \"1823479\",\n \"1823488\",\n \"1823572\",\n \"1823574\",\n \"1823601\",\n \"1823616\",\n \"1823636\",\n \"1823667\",\n \"1823698\",\n \"1823714\",\n \"1824079\",\n \"1824090\",\n \"1824174\",\n \"1824237\",\n \"1824246\",\n \"1824253\",\n \"1824255\",\n \"1824279\",\n \"1824326\",\n \"1824336\",\n \"1824350\",\n \"1824384\",\n \"1824440\",\n \"1824562\",\n \"1824661\",\n \"1824749\",\n \"1824762\",\n \"1824842\",\n \"1824870\",\n \"1824990\",\n \"1825057\",\n \"1825076\",\n \"1825121\",\n \"1825216\",\n \"1825235\",\n \"1825334\",\n \"1825340\",\n \"1825424\",\n \"1825444\",\n \"1825535\",\n \"1825551\",\n \"1825734\",\n \"1825783\",\n \"1825887\",\n \"1825919\",\n \"1825946\",\n \"1825951\",\n \"1825963\",\n \"1826016\",\n \"1826021\",\n \"1826045\",\n \"1826053\",\n \"1826107\",\n \"1826124\",\n \"1826153\",\n \"1826180\",\n \"1826192\",\n \"1826217\",\n \"1826417\",\n \"1826511\",\n \"1826572\",\n \"1826650\",\n \"1826821\",\n \"1827099\",\n \"1827111\",\n \"1827142\",\n \"1827158\",\n \"1827279\",\n \"1827342\",\n \"1827405\",\n \"1827428\",\n \"1827482\",\n \"1827506\",\n \"1827539\",\n \"1827547\",\n \"1827641\",\n \"1827686\",\n \"1827708\",\n \"1827714\",\n \"1827772\",\n \"1827798\",\n \"1827827\",\n \"1828102\",\n \"1828161\",\n \"1828267\",\n \"2048233\",\n \"3257662\",\n \"4689316\",\n \"4689790\",\n \"4695668\",\n \"4696100\",\n \"4702183\",\n \"5118829\",\n \"6133753\",\n \"9607541\",\n \"9740944\",\n \"10272567\",\n \"10416544\",\n \"11601386\",\n \"11748480\",\n \"11783984\",\n \"11879268\",\n \"1214429\",\n \"1892505\",\n \"1892536\",\n \"1892615\",\n \"1892625\",\n \"1892653\",\n \"1892700\",\n \"1892707\",\n \"1892804\",\n \"1892818\",\n \"1892833\",\n \"1892844\",\n \"1892890\",\n \"1892917\",\n \"1892942\",\n \"1892952\",\n \"1893128\",\n \"1893171\",\n \"1893282\",\n \"1893309\",\n \"1893327\",\n \"1893334\",\n \"1893338\",\n \"1893376\",\n \"1893378\",\n \"1893479\",\n \"1893521\",\n \"1893525\",\n \"1893971\",\n \"1894053\",\n \"1894055\",\n \"1894073\",\n \"1894097\",\n \"1894323\",\n \"1894354\",\n \"1894417\",\n \"1894469\",\n \"1894779\",\n \"1894922\",\n \"1895036\",\n \"1895130\",\n \"1895141\",\n \"1895152\",\n \"1895168\",\n \"1895235\",\n \"1895260\",\n \"1895438\",\n \"1895691\",\n \"1895732\",\n \"1895837\",\n \"1895859\",\n \"1895882\",\n \"1895908\",\n \"1896057\",\n \"1896080\",\n \"1896104\",\n \"1896124\",\n \"1896129\",\n \"1896175\",\n \"1896289\",\n \"1896310\",\n \"1896317\",\n \"1896605\",\n \"1896644\",\n \"1896746\",\n \"1896752\",\n \"1896755\",\n \"1896785\",\n \"1896799\",\n \"1896874\",\n \"1896877\",\n \"1896911\",\n \"1896917\",\n \"1896928\",\n \"1897636\",\n \"1897643\",\n \"1897659\",\n \"1897792\",\n \"1897807\",\n \"1897825\",\n \"1897886\",\n \"1897974\",\n \"1898000\",\n \"1898018\",\n \"1898215\",\n \"1898246\",\n \"1898248\",\n \"1898261\",\n \"1898343\",\n \"1898397\",\n \"1898410\",\n \"1898433\",\n \"1898474\",\n \"1898578\",\n \"1898587\",\n \"1898669\",\n \"1898683\",\n \"1898687\",\n \"1898853\",\n \"1898929\",\n \"1899046\",\n \"1899063\",\n \"1899069\",\n \"1899077\",\n \"1899181\",\n \"1899194\",\n \"1899830\",\n \"1899832\",\n \"1899856\",\n \"1899908\",\n \"1899913\",\n \"1899924\",\n \"1899929\",\n \"1899985\",\n \"1899991\",\n \"1900021\",\n \"1900039\",\n \"1900063\",\n \"1900111\",\n \"1900140\",\n \"1900889\",\n \"1900916\",\n \"1900919\",\n \"1900968\",\n \"1900982\",\n \"1901205\",\n \"1901256\",\n \"1901287\",\n \"1901337\",\n \"1901363\",\n \"1901470\",\n \"1901530\",\n \"1901577\",\n \"1901581\",\n \"1901729\",\n \"1901739\",\n \"1901776\",\n \"1901786\",\n \"1901823\",\n \"1901885\",\n \"1902105\",\n \"1902109\",\n \"1902206\",\n \"1902221\",\n \"1902275\",\n \"1902399\",\n \"1902425\",\n \"1902433\",\n \"1902519\",\n \"1902562\",\n \"1902610\",\n \"1902614\",\n \"1902619\",\n \"1902626\",\n \"1902644\",\n \"1902707\",\n \"1902795\",\n \"1902801\",\n \"1902813\",\n \"1902873\",\n \"1902993\",\n \"1903008\",\n \"1903019\",\n \"1903193\",\n \"1903601\",\n \"1903625\",\n \"1903637\",\n \"1903653\",\n \"1903656\",\n \"1903659\",\n \"1903673\",\n \"1904193\",\n \"1904271\",\n \"1904294\",\n \"1904380\",\n \"1904688\",\n \"1904817\",\n \"1904851\",\n \"1904981\",\n \"1905071\",\n \"1905123\",\n \"1905150\",\n \"1905319\",\n \"1905339\",\n \"1905450\",\n \"1906002\",\n \"1906139\",\n \"1906171\",\n \"1906451\",\n \"1906565\",\n \"1906714\",\n \"1907130\",\n \"1907355\",\n \"1907390\",\n \"1907398\",\n \"1907407\",\n \"1907726\",\n \"1907997\",\n \"1908109\",\n \"1908197\",\n \"1908298\",\n \"1908348\",\n \"1908354\",\n \"1908361\",\n \"1908573\",\n \"1908624\",\n \"1908757\",\n \"1908769\",\n \"1908788\",\n \"1908800\",\n \"1908980\",\n \"1909067\",\n \"1909106\",\n \"1909115\",\n \"1909124\",\n \"1909215\",\n \"1909217\",\n \"1909276\",\n \"1909297\",\n \"1909334\",\n \"1909428\",\n \"1909462\",\n \"1909588\",\n \"1909799\",\n \"1909804\",\n \"1909876\",\n \"1909881\",\n \"1909888\",\n \"1910363\",\n \"1910377\",\n \"1910384\",\n \"1910682\",\n \"1910771\",\n \"1910782\",\n \"1910796\",\n \"1911072\",\n \"1911078\",\n \"1911518\",\n \"1911573\",\n \"1911580\",\n \"1911627\",\n \"1911690\",\n \"1911763\",\n \"1911932\",\n \"1911943\",\n \"1912138\",\n \"1912157\",\n \"1912162\",\n \"1912319\",\n \"1912473\",\n \"1912488\",\n \"1912583\",\n \"1913046\",\n \"1913113\",\n \"1913456\",\n \"1914398\",\n \"1914692\",\n \"1914695\",\n \"1915017\",\n \"1915189\",\n \"1915248\",\n \"1915337\",\n \"1915371\",\n \"1915464\",\n \"1915497\",\n \"1915504\",\n \"1915513\",\n \"1915529\",\n \"1916334\",\n \"1916665\",\n \"1916677\",\n \"1916752\",\n \"1916765\",\n \"1916794\",\n \"1917796\",\n \"1917818\",\n \"1917887\",\n \"1918025\",\n \"1918071\",\n \"1918203\",\n \"1918214\",\n \"1918262\",\n \"1918291\",\n \"1918309\",\n \"1918594\",\n \"1918599\",\n \"1918607\",\n \"1918912\",\n \"1918933\",\n \"1918940\",\n \"1918999\",\n \"1919016\",\n \"3256512\",\n \"3257628\",\n \"4405001\",\n \"4408275\",\n \"4689644\",\n \"4702047\",\n \"4704221\",\n \"4704315\",\n \"4704380\",\n \"4704499\",\n \"5130576\",\n \"5131088\",\n \"5131972\",\n \"5133087\",\n \"5135400\",\n \"7236053\",\n \"7236069\",\n \"7510496\",\n \"7733971\",\n \"8636720\",\n \"8844327\",\n \"9042695\",\n \"9197007\",\n \"9550689\",\n \"9675443\",\n \"9759554\",\n \"1951358\",\n \"1951407\",\n \"1951430\",\n \"1951549\",\n \"1951569\",\n \"1951627\",\n \"1951642\",\n \"1951645\",\n \"1951655\",\n \"1951664\",\n \"1951744\",\n \"1951782\",\n \"1951788\",\n \"1951817\",\n \"1951819\",\n \"1951910\",\n \"1951912\",\n \"1952001\",\n \"1952029\",\n \"1952092\",\n \"1952118\",\n \"1952144\",\n \"1952174\",\n \"1952222\",\n \"1952259\",\n \"1952279\",\n \"1952300\",\n \"1952419\",\n \"1952446\",\n \"1952453\",\n \"1952526\",\n \"1952547\",\n \"1952607\",\n \"1952673\",\n \"1952702\",\n \"1952727\",\n \"1952736\",\n \"1952801\",\n \"1952827\",\n \"3256934\",\n \"4695875\",\n \"4708040\",\n \"4709268\",\n \"1832810\",\n \"1842986\",\n \"1853060\",\n \"1853074\",\n \"1853161\",\n \"5976899\",\n \"1868207\",\n \"1868327\",\n \"1868353\",\n \"1868393\",\n \"1868491\",\n \"1868497\",\n \"1868660\",\n \"4696228\",\n \"6007566\",\n \"9044302\",\n \"1941927\",\n \"1735093\",\n \"1735256\",\n \"1735272\",\n \"1735289\",\n \"1941561\",\n \"1941674\",\n \"1941716\",\n \"1941863\",\n \"1843855\",\n \"1843887\",\n \"1843897\",\n \"11955428\",\n \"1842040\",\n \"1842085\",\n \"1842184\",\n \"1842261\",\n \"1842436\",\n \"1842479\",\n \"1842684\",\n \"1842699\",\n \"1842803\",\n \"1842889\",\n \"1843000\",\n \"1843428\",\n \"1843441\",\n \"1843479\",\n \"1852499\",\n \"12246183\",\n \"1730471\",\n \"1730685\",\n \"1730705\",\n \"1730737\",\n \"1730763\",\n \"1730815\",\n \"1730935\",\n \"1731096\",\n \"1731220\",\n \"1731226\",\n \"1731363\",\n \"1731505\",\n \"1731584\",\n \"1731712\",\n \"1731748\",\n \"1731800\",\n \"1829593\",\n \"1994549\",\n \"3256584\",\n \"4688500\",\n \"4705852\",\n \"4708713\",\n \"4709303\",\n \"7568341\",\n \"1872346\",\n \"1878610\",\n \"1878653\",\n \"1878661\",\n \"1878678\",\n \"1878743\",\n \"1878750\",\n \"1878757\",\n \"1878808\",\n \"1878812\",\n \"1878835\",\n \"1878838\",\n \"1878989\",\n \"1879048\",\n \"1879124\",\n \"1879138\",\n \"1879158\",\n \"1879226\",\n \"1879271\",\n \"1879334\",\n \"1879347\",\n \"1879355\",\n \"1879396\",\n \"1879422\",\n \"1879428\",\n \"1879435\",\n \"1879451\",\n \"1879463\",\n \"1879487\",\n \"1879494\",\n \"1879512\",\n \"1879809\",\n \"1879915\",\n \"1880172\",\n \"1880351\",\n \"1880354\",\n \"1880423\",\n \"1880436\",\n \"1880444\",\n \"1880501\",\n \"1880506\",\n \"1880703\",\n \"1880711\",\n \"1880744\",\n \"1880792\",\n \"1880848\",\n \"1880855\",\n \"1880878\",\n \"1880977\",\n \"1881078\",\n \"1881085\",\n \"1881092\",\n \"1881102\",\n \"1881135\",\n \"1881145\",\n \"1881167\",\n \"1881178\",\n \"1881186\",\n \"1881206\",\n \"1881226\",\n \"1881296\",\n \"1881319\",\n \"1881357\",\n \"1881484\",\n \"1881495\",\n \"1881521\",\n \"1881601\",\n \"1881628\",\n \"1881764\",\n \"1881804\",\n \"1881825\",\n \"1881858\",\n \"1881870\",\n \"1882019\",\n \"1882028\",\n \"1882213\",\n \"1882217\",\n \"1882239\",\n \"1882249\",\n \"1882263\",\n \"1882309\",\n \"1882314\",\n \"1882354\",\n \"1882413\",\n \"1882752\",\n \"1882757\",\n \"1882784\",\n \"1882809\",\n \"1882877\",\n \"1882900\",\n \"1882902\",\n \"1882925\",\n \"1883019\",\n \"1883022\",\n \"1883035\",\n \"1883064\",\n \"1883116\",\n \"1883132\",\n \"1883364\",\n \"1883373\",\n \"1883389\",\n \"1883417\",\n \"1883459\",\n \"1883586\",\n \"1883632\",\n \"1883698\",\n \"1883828\",\n \"1883872\",\n \"1883890\",\n \"1883941\",\n \"1883950\",\n \"1883962\",\n \"1883990\",\n \"1884002\",\n \"1884090\",\n \"1884194\",\n \"1884225\",\n \"1884236\",\n \"1884425\",\n \"1884486\",\n \"1884668\",\n \"1884679\",\n \"1884683\",\n \"1884687\",\n \"1884699\",\n \"1884771\",\n \"1884789\",\n \"1884810\",\n \"1884832\",\n \"1884842\",\n \"1884886\",\n \"1884895\",\n \"1884921\",\n \"1884933\",\n \"1884939\",\n \"1884996\",\n \"1885008\",\n \"1885027\",\n \"1885190\",\n \"1885256\",\n \"1885564\",\n \"1885588\",\n \"1885639\",\n \"1885697\",\n \"1885731\",\n \"1885739\",\n \"1885792\",\n \"1885916\",\n \"1885924\",\n \"1885944\",\n \"1885946\",\n \"1886069\",\n \"1886102\",\n \"1886238\",\n \"1886248\",\n \"1886261\",\n \"1886268\",\n \"1886289\",\n \"1886376\",\n \"1886435\",\n \"1886474\",\n \"1886505\",\n \"1886576\",\n \"1886591\",\n \"1886649\",\n \"1886699\",\n \"1886711\",\n \"1886725\",\n \"1886760\",\n \"1886832\",\n \"1886921\",\n \"1886948\",\n \"1886950\",\n \"1886993\",\n \"1887021\",\n \"1887028\",\n \"1887032\",\n \"1887048\",\n \"1887269\",\n \"1887308\",\n \"1887335\",\n \"1887457\",\n \"1887460\",\n \"1887463\",\n \"1887501\",\n \"1887564\",\n \"1887573\",\n \"1887584\",\n \"1887632\",\n \"1887640\",\n \"1887682\",\n \"1887721\",\n \"1888041\",\n \"1888256\",\n \"1888291\",\n \"1888299\",\n \"1888308\",\n \"1888334\",\n \"1888342\",\n \"1888406\",\n \"1888428\",\n \"1888455\",\n \"1888536\",\n \"1888562\",\n \"1888578\",\n \"1888594\",\n \"1888618\",\n \"1888641\",\n \"1888688\",\n \"1888698\",\n \"1888885\",\n \"1888933\",\n \"1888956\",\n \"1889027\",\n \"1889037\",\n \"1889065\",\n \"1889233\",\n \"1889266\",\n \"1889286\",\n \"1889295\",\n \"1889343\",\n \"1889366\",\n \"1889380\",\n \"1889530\",\n \"1889533\",\n \"1889540\",\n \"1889551\",\n \"1889900\",\n \"1889936\",\n \"1890011\",\n \"1890026\",\n \"1890044\",\n \"1890086\",\n \"1890094\",\n \"1890111\",\n \"1890245\",\n \"1890256\",\n \"1890281\",\n \"1890345\",\n \"1890365\",\n \"1890369\",\n \"1891030\",\n \"1891043\",\n \"1891047\",\n \"1891054\",\n \"1891073\",\n \"1891127\",\n \"1891152\",\n \"1891231\",\n \"1891297\",\n \"1891305\",\n \"1891353\",\n \"1891506\",\n \"1891594\",\n \"1891928\",\n \"1892130\",\n \"1892238\",\n \"1892295\",\n \"1892303\",\n \"1892318\",\n \"1892354\",\n \"1892404\",\n \"1892453\",\n \"3256169\",\n \"3257220\",\n \"3257225\",\n \"3258127\",\n \"4406481\",\n \"4577617\",\n \"4684088\",\n \"4687205\",\n \"4687250\",\n \"4687253\",\n \"4687264\",\n \"4688533\",\n \"4689667\",\n \"4695734\",\n \"4703048\",\n \"4703308\",\n \"4704716\",\n \"4704719\",\n \"4704946\",\n \"4704959\",\n \"4707698\",\n \"7739898\",\n \"8194136\",\n \"8317469\",\n \"8406574\",\n \"8494978\",\n \"8828194\",\n \"8843351\",\n \"8983556\",\n \"9020610\",\n \"9078027\",\n \"9878063\",\n \"1846094\",\n \"1846239\",\n \"1939594\",\n \"1830873\",\n \"1830909\",\n \"1831096\",\n \"1831127\",\n \"1831270\",\n \"1831272\",\n \"1731291\",\n \"1853239\",\n \"1853306\",\n \"1853431\",\n \"1853516\",\n \"1853563\",\n \"1853583\",\n \"1853643\",\n \"1853850\",\n \"1853873\",\n \"1854016\",\n \"1854023\",\n \"1854108\",\n \"1854160\",\n \"1854245\",\n \"1854255\",\n \"1854280\",\n \"1854326\",\n \"1854387\",\n \"1854459\",\n \"1854565\",\n \"1854610\",\n \"1854789\",\n \"1854815\",\n \"1854845\",\n \"1854905\",\n \"4707419\",\n \"6757561\",\n \"7494486\",\n \"8832257\",\n \"9046214\",\n \"9212903\",\n \"1858614\",\n \"1858636\",\n \"1858640\",\n \"1858658\",\n \"1858672\",\n \"1858684\",\n \"1858716\",\n \"1858722\",\n \"1858866\",\n \"1858921\",\n \"1858971\",\n \"1859036\",\n \"1859059\",\n \"1859070\",\n \"1859082\",\n \"1859284\",\n \"1859311\",\n \"1859451\",\n \"1859454\",\n \"1859503\",\n \"1859540\",\n \"1859547\",\n \"1859925\",\n \"1859936\",\n \"1860010\",\n \"1860060\",\n \"4406145\",\n \"4708885\",\n \"7641205\",\n \"8331787\",\n \"8744407\",\n \"9077410\",\n \"9260167\",\n \"11654220\",\n \"11715392\",\n \"1864813\",\n \"1864888\",\n \"1864901\",\n \"1865097\",\n \"1865294\",\n \"1865361\",\n \"1865411\",\n \"1865543\",\n \"1865591\",\n \"1865647\",\n \"1865704\",\n \"1865750\",\n \"1865826\",\n \"1865838\",\n \"1865859\",\n \"1865866\",\n \"1865923\",\n \"1865957\",\n \"1866221\",\n \"1866248\",\n \"1866293\",\n \"1866333\",\n \"1866345\",\n \"1866416\",\n \"1866475\",\n \"1866597\",\n \"1866812\",\n \"1866898\",\n \"1866912\",\n \"1866975\",\n \"1866984\",\n \"1867018\",\n \"1867046\",\n \"1867229\",\n \"1867268\",\n \"1867280\",\n \"1867305\",\n \"1867343\",\n \"1867412\",\n \"1867481\",\n \"1867545\",\n \"1867669\",\n \"1867674\",\n \"1867739\",\n \"1867761\",\n \"1867780\",\n \"1867783\",\n \"1867810\",\n \"1867983\",\n \"1867998\",\n \"1868017\",\n \"1868048\",\n \"4688975\",\n \"4705534\",\n \"4705630\",\n \"4705637\",\n \"4705641\",\n \"4705666\",\n \"5124670\",\n \"1736266\",\n \"1841459\",\n \"1841475\",\n \"1841486\",\n \"1841529\",\n \"4695998\",\n \"10268975\",\n \"10283055\",\n \"1861408\",\n \"1861428\",\n \"1861448\",\n \"1861476\",\n \"1861483\",\n \"1861521\",\n \"1861543\",\n \"1861552\",\n \"1861578\",\n \"1861601\",\n \"1861607\",\n \"1861659\",\n \"1861757\",\n \"1861768\",\n \"1861796\",\n \"1861878\",\n \"1861897\",\n \"1861930\",\n \"1861962\",\n \"1861971\",\n \"1861997\",\n \"1862020\",\n \"1862031\",\n \"1862058\",\n \"1862076\",\n \"1862247\",\n \"1862280\",\n \"1862288\",\n \"1862391\",\n \"1862420\",\n \"1862542\",\n \"1862560\",\n \"1862568\",\n \"1862655\",\n \"1862681\",\n \"1862914\",\n \"1862922\",\n \"1862988\",\n \"1863017\",\n \"1863031\",\n \"1863074\",\n \"1863091\",\n \"1863101\",\n \"1863132\",\n \"1863163\",\n \"1863281\",\n \"1863292\",\n \"1863349\",\n \"1863351\",\n \"1863363\",\n \"1863382\",\n \"1863385\",\n \"1863395\",\n \"1863411\",\n \"1863413\",\n \"1863457\",\n \"1863486\",\n \"1863583\",\n \"1863638\",\n \"1863644\",\n \"1863647\",\n \"1863693\",\n \"1863697\",\n \"1863702\",\n \"1863713\",\n \"1863752\",\n \"1863755\",\n \"1863825\",\n \"1863827\",\n \"1863846\",\n \"1863852\",\n \"1863877\",\n \"1863936\",\n \"1863942\",\n \"1863953\",\n \"1863956\",\n \"1864124\",\n \"1864132\",\n \"1864141\",\n \"1864153\",\n \"1864203\",\n \"1864258\",\n \"1864315\",\n \"1864355\",\n \"1864404\",\n \"1864537\",\n \"1864562\",\n \"1864584\",\n \"1864760\",\n \"1864782\",\n \"4703444\",\n \"4703460\",\n \"4705037\",\n \"4706738\",\n \"5123811\",\n \"7842819\",\n \"8095945\",\n \"8710303\",\n \"9197112\",\n \"1992572\",\n \"1992586\",\n \"1992729\",\n \"1992732\",\n \"1992877\",\n \"1992906\",\n \"1992944\",\n \"1992973\",\n \"1992975\",\n \"1993011\",\n \"1993034\",\n \"1993042\",\n \"1993044\",\n \"1993403\",\n \"1993451\",\n \"1993564\",\n \"1993634\",\n \"1993640\",\n \"4618976\",\n \"7772509\",\n \"1939401\",\n \"4406291\",\n \"1953190\",\n \"1953325\",\n \"1953347\",\n \"1953396\",\n \"1953411\",\n \"1953490\",\n \"1953522\",\n \"1953540\",\n \"1953948\",\n \"1953969\",\n \"1953971\",\n \"1953975\",\n \"1953996\",\n \"1954024\",\n \"1954033\",\n \"1954038\",\n \"1954074\",\n \"1954083\",\n \"1954119\",\n \"4707050\",\n \"1860106\",\n \"1860109\",\n \"1830030\",\n \"1830036\",\n \"1830098\",\n \"1830355\",\n \"1830379\",\n \"1830497\",\n \"1830507\",\n \"1830533\",\n \"1830535\",\n \"1830581\",\n \"1830630\",\n \"1830799\",\n \"1754133\",\n \"1754176\",\n \"1754253\",\n \"1754269\",\n \"1754315\",\n \"1754329\",\n \"1754344\",\n \"1754391\",\n \"1754412\",\n \"1754463\",\n \"1754508\",\n \"1754609\",\n \"1754618\",\n \"1754799\",\n \"1754857\",\n \"1754901\",\n \"1754916\",\n \"1754927\",\n \"1755125\",\n \"1755149\",\n \"1755233\",\n \"1755294\",\n \"1757647\",\n \"1757668\",\n \"1757834\",\n \"1757850\",\n \"1757883\",\n \"4572392\",\n \"4689458\",\n \"4709287\",\n \"7551965\",\n \"9046977\",\n \"1830657\",\n \"1953000\",\n \"1953102\",\n \"1953159\",\n \"1939616\",\n \"1751482\",\n \"1751519\",\n \"1751552\",\n \"1751655\",\n \"1751774\",\n \"1751789\",\n \"1829282\",\n \"1829298\",\n \"1829391\",\n \"1854910\",\n \"1854934\",\n \"1855355\",\n \"1855383\",\n \"1855394\",\n \"1855624\",\n \"1855745\",\n \"1855776\",\n \"1855800\",\n \"1855955\",\n \"1856000\",\n \"1856086\",\n \"1856274\",\n \"1856286\",\n \"1856344\",\n \"1856373\",\n \"1856382\",\n \"1856514\",\n \"1856580\",\n \"1856586\",\n \"1856615\",\n \"1856650\",\n \"1856766\",\n \"1856845\",\n \"1856949\",\n \"1857014\",\n \"1857207\",\n \"1857231\",\n \"1857569\",\n \"1857624\",\n \"1857773\",\n \"1857782\",\n \"1857808\",\n \"1857825\",\n \"1857968\",\n \"1858055\",\n \"1858281\",\n \"1858313\",\n \"1858396\",\n \"1858522\",\n \"1858556\",\n \"1856880\",\n \"10175914\",\n \"1936964\",\n \"1936968\",\n \"1936987\",\n \"1937063\",\n \"1937188\",\n \"1937440\",\n \"1937489\",\n \"1937511\",\n \"1937519\",\n \"1937555\",\n \"1937592\",\n \"1937617\",\n \"1938213\",\n \"1938225\",\n \"1938238\",\n \"1939085\",\n \"1939129\",\n \"1939152\",\n \"1939221\",\n \"1939297\",\n \"1939301\",\n \"1939330\",\n \"1939342\",\n \"5141261\",\n \"7714017\",\n \"1856367\",\n \"1856393\",\n \"1856417\",\n \"1856554\",\n \"1857689\",\n \"1858294\",\n \"1858529\",\n \"12031311\",\n \"12076089\",\n \"12152411\",\n \"1555575\",\n \"1833476\",\n \"1833495\",\n \"1833543\",\n \"1833560\",\n \"1833568\",\n \"1833578\",\n \"1833623\",\n \"1833651\",\n \"1833663\",\n \"1833818\",\n \"1834431\",\n \"1834588\",\n \"1834737\",\n \"1834827\",\n \"1835027\",\n \"1835077\",\n \"1835097\",\n \"1835118\",\n \"1835151\",\n \"1835344\",\n \"1835366\",\n \"1835499\",\n \"1835546\",\n \"1835599\",\n \"1835641\",\n \"1835688\",\n \"1835789\",\n \"1835820\",\n \"1836103\",\n \"1836865\",\n \"1836870\",\n \"1836872\",\n \"1836898\",\n \"1837045\",\n \"1837050\",\n \"1837148\",\n \"1837168\",\n \"1837568\",\n \"1837571\",\n \"1837649\",\n \"1837816\",\n \"1837898\",\n \"1838028\",\n \"1838044\",\n \"1838215\",\n \"1838242\",\n \"1838332\",\n \"1838624\",\n \"1838665\",\n \"1838956\",\n \"1838964\",\n \"1839316\",\n \"1839361\",\n \"1839399\",\n \"1839480\",\n \"1839559\",\n \"1839730\",\n \"1839906\",\n \"1840223\",\n \"1840257\",\n \"1840664\",\n \"1841100\",\n \"1841152\",\n \"1841169\",\n \"1841220\",\n \"1841301\",\n \"1841303\",\n \"3256568\",\n \"3257514\",\n \"4406889\",\n \"4573720\",\n \"4576177\",\n \"4684520\",\n \"4684590\",\n \"4684781\",\n \"4684879\",\n \"4684892\",\n \"4684924\",\n \"4684951\",\n \"4685628\",\n \"4685777\",\n \"4685809\",\n \"4685979\",\n \"4686350\",\n \"4686384\",\n \"4686517\",\n \"4686655\",\n \"4686696\",\n \"4686699\",\n \"4686843\",\n \"4686955\",\n \"8697176\",\n \"12180481\",\n \"1800236\",\n \"1800430\",\n \"1800437\",\n \"1800464\",\n \"1800482\",\n \"1800518\",\n \"1800523\",\n \"1800542\",\n \"1800639\",\n \"1800662\",\n \"1800668\",\n \"1800838\",\n \"1800845\",\n \"1800870\",\n \"1800879\",\n \"1800891\",\n \"1800918\",\n \"1800930\",\n \"1800952\",\n \"1800985\",\n \"1800996\",\n \"1801046\",\n \"1801072\",\n \"1801082\",\n \"1801085\",\n \"1801146\",\n \"1801195\",\n \"1801203\",\n \"1801278\",\n \"1801431\",\n \"1801449\",\n \"1801487\",\n \"1801501\",\n \"1801516\",\n \"1801758\",\n \"1801990\",\n \"1802070\",\n \"1802109\",\n \"1802118\",\n \"1802159\",\n \"1802213\",\n \"1802234\",\n \"1802269\",\n \"1802330\",\n \"1802660\",\n \"1802779\",\n \"1802864\",\n \"1802886\",\n \"1802894\",\n \"1802935\",\n \"1802997\",\n \"4405493\",\n \"4709474\",\n \"5114254\",\n \"9585354\"\n ],\n [\n \"10820875\",\n \"1933999\",\n \"3256826\",\n \"3527\",\n \"3528\",\n \"3529\",\n \"3530\",\n \"3531\",\n \"3551\",\n \"3552\",\n \"3553\",\n \"3554\",\n \"3555\",\n \"3556\",\n \"3558\",\n \"3563\",\n \"4300662\",\n \"4300664\",\n \"4300668\",\n \"4525436\",\n \"4525465\",\n \"4527533\",\n \"4528997\",\n \"4532185\",\n \"4534947\",\n \"4538\",\n \"4542\",\n \"4547\",\n \"4554\",\n \"4705755\",\n \"4864\",\n \"4865\",\n \"4866\",\n \"4867\",\n \"4868\",\n \"4870\",\n \"4871\",\n \"5318\",\n \"5320\",\n \"5333\",\n \"5336\",\n \"5338\",\n \"5339\",\n \"5340\",\n \"5343\",\n \"5345\",\n \"5473\",\n \"5474\",\n \"5481\",\n \"5487\",\n \"5734720\",\n \"6165\",\n \"6166\",\n \"6929\",\n \"6946\",\n \"6947\",\n \"6948\",\n \"6949\",\n \"6950\",\n \"6951\",\n \"6953\",\n \"6954\",\n \"6956\",\n \"7014\",\n \"7015\",\n \"7016\",\n \"7017\",\n \"7294\",\n \"7297\",\n \"8025\",\n \"8832\",\n \"8833\",\n \"8834\",\n \"8836\",\n \"8838\",\n \"8839\",\n \"8840\",\n \"8841\",\n \"8855\",\n \"8856\",\n \"8860\",\n \"8861\",\n \"8863\",\n \"8864\",\n \"8865\",\n \"8866\",\n \"8868\",\n \"8870\",\n \"8871\",\n \"8872\",\n \"8873\",\n \"8874\",\n \"8875\",\n \"9122734\",\n \"9407\",\n \"9408\",\n \"9409\",\n \"9410\",\n \"9412\",\n \"9414744\",\n \"9417\",\n \"9541689\",\n \"9689\",\n \"9717\"\n ]\n ],\n \"parents\": [\n [\n 0,\n 1,\n 2,\n 3,\n 3,\n 3,\n 3,\n 4,\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 12,\n 12,\n 13,\n 13,\n 13,\n 14,\n 15,\n 15,\n 16,\n 16,\n 17,\n 18,\n 19,\n 20,\n 20,\n 20,\n 21,\n 21,\n 22,\n 23,\n 24,\n 25,\n 26,\n 27,\n 28,\n 29,\n 29,\n 29,\n 30,\n 30,\n 30,\n 30,\n 30,\n 31,\n 31,\n 31,\n 32,\n 32,\n 32,\n 32,\n 32,\n 32,\n 32,\n 32,\n 33,\n 34,\n 35,\n 35,\n 35,\n 36,\n 37,\n 37,\n 38,\n 39,\n 39,\n 40,\n 40,\n 41,\n 41,\n 42,\n 42,\n 43,\n 43,\n 43,\n 43,\n 44,\n 44,\n 44,\n 45,\n 46,\n 47,\n 47,\n 47,\n 47,\n 47,\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 54,\n 54,\n 54,\n 55,\n 55,\n 56,\n 56,\n 57,\n 57,\n 57,\n 58,\n 58,\n 58,\n 59,\n 60,\n 61,\n 61,\n 61,\n 61,\n 62,\n 63,\n 64,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 66,\n 67,\n 67,\n 67,\n 68,\n 69,\n 70,\n 70,\n 70,\n 70,\n 70,\n 71,\n 71,\n 71,\n 71,\n 72,\n 72,\n 73,\n 74,\n 75,\n 76,\n 76,\n 77,\n 78,\n 78,\n 79,\n 79,\n 79,\n 79,\n 80,\n 80,\n 81,\n 82,\n 83,\n 84,\n 85,\n 86,\n 86,\n 86,\n 86,\n 87,\n 88,\n 89,\n 90,\n 91,\n 92,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 94,\n 95,\n 96,\n 97,\n 98,\n 99,\n 99,\n 100,\n 101,\n 101,\n 101,\n 102,\n 102,\n 102,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 104,\n 104,\n 105,\n 105,\n 105,\n 105,\n 106,\n 107,\n 107,\n 107,\n 108,\n 109,\n 110,\n 111,\n 112,\n 113,\n 114,\n 114,\n 114,\n 114,\n 115,\n 115,\n 115,\n 115,\n 115,\n 115,\n 115,\n 115,\n 115,\n 116,\n 116,\n 116,\n 117,\n 117,\n 118,\n 118,\n 119,\n 119,\n 120,\n 121,\n 122,\n 122,\n 122,\n 122,\n 122,\n 122,\n 122,\n 123,\n 123,\n 124,\n 124,\n 125,\n 126,\n 127,\n 128,\n 128,\n 128,\n 128,\n 129,\n 129,\n 129,\n 130,\n 131,\n 131,\n 132,\n 132,\n 132,\n 133,\n 134,\n 135,\n 135,\n 135,\n 136,\n 137,\n 137,\n 137,\n 137,\n 137,\n 138,\n 138,\n 139,\n 140,\n 140,\n 141,\n 141,\n 141,\n 141,\n 141,\n 141,\n 141,\n 141,\n 142,\n 142,\n 142,\n 143,\n 144,\n 144,\n 144,\n 144,\n 144,\n 144,\n 144,\n 144,\n 144,\n 144,\n 145,\n 146,\n 147,\n 147,\n 148,\n 149,\n 149,\n 149,\n 150,\n 151,\n 152,\n 152,\n 152,\n 152,\n 152,\n 152,\n 152,\n 152,\n 152,\n 152,\n 152,\n 152,\n 153,\n 154,\n 154,\n 154,\n 154,\n 154,\n 154,\n 154,\n 155,\n 156,\n 156,\n 156,\n 156,\n 157,\n 158,\n 159,\n 159,\n 160,\n 160,\n 161,\n 161,\n 162,\n 162,\n 162,\n 163,\n 164,\n 164,\n 165,\n 166,\n 166,\n 166,\n 167,\n 168,\n 168,\n 169,\n 170,\n 171,\n 172,\n 173,\n 174,\n 175,\n 176,\n 176,\n 176,\n 176,\n 176,\n 177,\n 177,\n 178,\n 179,\n 180,\n 181,\n 181,\n 182,\n 183,\n 183,\n 183,\n 183,\n 183,\n 183,\n 183,\n 183,\n 183,\n 183,\n 183,\n 184,\n 185,\n 185,\n 186,\n 187,\n 187,\n 187,\n 187,\n 188,\n 189,\n 190,\n 190,\n 190,\n 191,\n 191,\n 191,\n 191,\n 191,\n 192,\n 193,\n 194,\n 194,\n 194,\n 194,\n 194,\n 194,\n 194,\n 194,\n 194,\n 195,\n 195,\n 195,\n 195,\n 196,\n 197,\n 197,\n 197,\n 198,\n 198,\n 198,\n 199,\n 199,\n 199,\n 200,\n 200,\n 201,\n 201,\n 201,\n 202,\n 203,\n 204,\n 205,\n 206,\n 207,\n 208,\n 209,\n 209,\n 210,\n 211,\n 212,\n 213,\n 213,\n 213,\n 213,\n 214,\n 214,\n 214,\n 214,\n 214,\n 214,\n 214,\n 215,\n 216,\n 217,\n 218,\n 218,\n 219,\n 220,\n 221,\n 222,\n 223,\n 224,\n 225,\n 226,\n 227,\n 227,\n 228,\n 229,\n 229,\n 229,\n 230,\n 231,\n 231,\n 232,\n 233,\n 234,\n 234,\n 235,\n 236,\n 237,\n 237,\n 237,\n 237,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 239,\n 239,\n 239,\n 239,\n 239,\n 239,\n 239,\n 239,\n 239,\n 239,\n 239,\n 240,\n 241,\n 241,\n 242,\n 243,\n 243,\n 243,\n 244,\n 245,\n 246,\n 247,\n 247,\n 248,\n 249,\n 250,\n 251,\n 251,\n 251,\n 252,\n 253,\n 253,\n 253,\n 253,\n 253,\n 254,\n 254,\n 254,\n 254,\n 254,\n 254,\n 254,\n 254,\n 255,\n 256,\n 257,\n 258,\n 259,\n 260,\n 261,\n 262,\n 263,\n 263,\n 263,\n 264,\n 265,\n 266,\n 266,\n 266,\n 267,\n 268,\n 268,\n 268,\n 268,\n 268,\n 268,\n 269,\n 270,\n 271,\n 271,\n 272,\n 272,\n 272,\n 272,\n 273,\n 274,\n 275,\n 276,\n 277,\n 277,\n 278,\n 278,\n 279,\n 280,\n 281,\n 282,\n 283,\n 283,\n 284,\n 285,\n 285,\n 286,\n 287,\n 288,\n 288,\n 288,\n 288,\n 289,\n 289,\n 290,\n 290,\n 291,\n 291,\n 291,\n 291,\n 291,\n 291,\n 292,\n 293,\n 294,\n 295,\n 296,\n 297,\n 297,\n 297,\n 298,\n 298,\n 298,\n 298,\n 299,\n 299,\n 299,\n 299,\n 299,\n 300,\n 301,\n 301,\n 302,\n 303,\n 303,\n 304,\n 305,\n 305,\n 306,\n 307,\n 308,\n 309,\n 309,\n 310,\n 310,\n 310,\n 310,\n 310,\n 310,\n 310,\n 310,\n 310,\n 311,\n 312,\n 312,\n 313,\n 314,\n 315,\n 316,\n 317,\n 318,\n 318,\n 319,\n 320,\n 321,\n 322,\n 322,\n 322,\n 322,\n 323,\n 324,\n 324,\n 325,\n 326,\n 327,\n 328,\n 329,\n 330,\n 330,\n 330,\n 331,\n 332,\n 333,\n 334,\n 334,\n 334,\n 334,\n 335,\n 335,\n 335,\n 336,\n 336,\n 336,\n 336,\n 336,\n 336,\n 336,\n 336,\n 336,\n 337,\n 337,\n 338,\n 339,\n 339,\n 339,\n 339,\n 340,\n 340,\n 341,\n 342,\n 342,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 344,\n 345,\n 345,\n 346,\n 347,\n 347,\n 348,\n 348,\n 349,\n 350,\n 351,\n 351,\n 352,\n 353,\n 354,\n 355,\n 355,\n 355,\n 355,\n 356,\n 356,\n 357,\n 357,\n 357,\n 357,\n 358,\n 359,\n 360,\n 360,\n 361,\n 362,\n 363,\n 364,\n 365,\n 366,\n 367,\n 368,\n 369,\n 369,\n 370,\n 370,\n 371,\n 371,\n 371,\n 371,\n 372,\n 373,\n 373,\n 374,\n 375,\n 375,\n 376,\n 376,\n 376,\n 377,\n 378,\n 379,\n 379,\n 379,\n 380,\n 381,\n 381,\n 382,\n 383,\n 384,\n 385,\n 385,\n 385,\n 385,\n 385,\n 386,\n 386,\n 386,\n 387,\n 387,\n 387,\n 387,\n 387,\n 387,\n 388,\n 389,\n 390,\n 391,\n 392,\n 393,\n 393,\n 394,\n 395,\n 395,\n 395,\n 396,\n 396,\n 396,\n 397,\n 398,\n 398,\n 398,\n 398,\n 398,\n 399,\n 400,\n 401,\n 401,\n 402,\n 402,\n 402,\n 402,\n 402,\n 402,\n 403,\n 404,\n 405,\n 405,\n 406,\n 406,\n 406,\n 407,\n 407,\n 408,\n 409,\n 410,\n 411,\n 412,\n 413,\n 414,\n 415,\n 415,\n 415,\n 416,\n 417,\n 418,\n 418,\n 419,\n 420,\n 420,\n 420,\n 421,\n 422,\n 422,\n 422,\n 422,\n 423,\n 424,\n 425,\n 425,\n 425,\n 425,\n 426,\n 426,\n 427,\n 427,\n 427,\n 427,\n 427,\n 427,\n 427,\n 427,\n 428,\n 428,\n 429,\n 430,\n 431,\n 432,\n 433,\n 433,\n 434,\n 435,\n 436,\n 436,\n 437,\n 437,\n 437,\n 437,\n 437,\n 438,\n 438,\n 438,\n 439,\n 439,\n 440,\n 441,\n 441,\n 441,\n 442,\n 443,\n 444,\n 445,\n 446,\n 447,\n 447,\n 448,\n 448,\n 448,\n 448,\n 448,\n 448,\n 448,\n 448,\n 448,\n 448,\n 448,\n 449,\n 450,\n 451,\n 452,\n 453,\n 454,\n 455,\n 456,\n 457,\n 457,\n 457,\n 457,\n 457,\n 457,\n 457,\n 457,\n 458,\n 458,\n 458,\n 458,\n 459,\n 460,\n 461,\n 461,\n 462,\n 463,\n 463,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 465,\n 466,\n 467,\n 468,\n 468,\n 469,\n 469,\n 469,\n 469,\n 469,\n 469,\n 469,\n 469,\n 469,\n 470,\n 470,\n 471,\n 472,\n 472,\n 473,\n 474,\n 475,\n 475,\n 476,\n 476,\n 476,\n 477,\n 478,\n 479,\n 479,\n 479,\n 479,\n 479,\n 479,\n 480,\n 480,\n 481,\n 482,\n 482,\n 483,\n 483,\n 483,\n 484,\n 485,\n 485,\n 486,\n 486,\n 487,\n 488,\n 489,\n 490,\n 490,\n 491,\n 492,\n 492,\n 492,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 494,\n 495,\n 495,\n 495,\n 495,\n 496,\n 497,\n 497,\n 497,\n 497,\n 497,\n 497,\n 498,\n 499,\n 499,\n 499,\n 499,\n 500,\n 501,\n 502,\n 502,\n 502,\n 502,\n 502,\n 502,\n 502,\n 502,\n 502,\n 502,\n 503,\n 503,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 505,\n 505,\n 506,\n 507,\n 508,\n 508,\n 508,\n 509,\n 509,\n 509,\n 509,\n 509,\n 510,\n 511,\n 511,\n 511,\n 511,\n 511,\n 512,\n 513,\n 514,\n 514,\n 514,\n 515,\n 516,\n 516,\n 516,\n 516,\n 516,\n 517,\n 517,\n 517,\n 518,\n 519,\n 519,\n 520,\n 521,\n 522,\n 523,\n 523,\n 523,\n 523,\n 523,\n 523,\n 524,\n 524,\n 525,\n 526,\n 526,\n 527,\n 528,\n 529,\n 530,\n 531,\n 531,\n 531,\n 531,\n 532,\n 532,\n 533,\n 533,\n 534,\n 535,\n 535,\n 535,\n 535,\n 535,\n 535,\n 536,\n 536,\n 537,\n 537,\n 537,\n 537,\n 538,\n 538,\n 539,\n 540,\n 541,\n 542,\n 542,\n 543,\n 543,\n 543,\n 543,\n 544,\n 545,\n 546,\n 546,\n 547,\n 547,\n 547,\n 547,\n 548,\n 549,\n 549,\n 549,\n 549,\n 550,\n 550,\n 551,\n 551,\n 551,\n 552,\n 553,\n 553,\n 553,\n 554,\n 555,\n 555,\n 556,\n 557,\n 557,\n 557,\n 557,\n 557,\n 557,\n 557,\n 557,\n 558,\n 558,\n 558,\n 559,\n 560,\n 561,\n 562,\n 563,\n 563,\n 564,\n 565,\n 565,\n 566,\n 566,\n 566,\n 566,\n 566,\n 566,\n 566,\n 566,\n 566,\n 566,\n 567,\n 568,\n 569,\n 570,\n 571,\n 572,\n 573,\n 574,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 576,\n 576,\n 577,\n 578,\n 579,\n 580,\n 581,\n 582,\n 583,\n 584,\n 585,\n 586,\n 586,\n 586,\n 587,\n 587,\n 588,\n 589,\n 589,\n 589,\n 590,\n 590,\n 591,\n 592,\n 593,\n 594,\n 594,\n 594,\n 595,\n 595,\n 596,\n 597,\n 598,\n 598,\n 599,\n 600,\n 601,\n 602,\n 602,\n 602,\n 603,\n 604,\n 605,\n 605,\n 606,\n 606,\n 606,\n 606,\n 606,\n 606,\n 607,\n 608,\n 609,\n 610,\n 611,\n 612,\n 612,\n 612,\n 613,\n 614,\n 614,\n 614,\n 614,\n 614,\n 615,\n 616,\n 616,\n 616,\n 616,\n 617,\n 617,\n 617,\n 617,\n 617,\n 618,\n 618,\n 618,\n 619,\n 620,\n 620,\n 620,\n 621,\n 622,\n 623,\n 624,\n 625,\n 625,\n 625,\n 625,\n 625,\n 625,\n 625,\n 626,\n 627,\n 628,\n 628,\n 628,\n 629,\n 630,\n 630,\n 630,\n 630,\n 630,\n 630,\n 631,\n 631,\n 631,\n 632,\n 632,\n 633,\n 634,\n 634,\n 635,\n 635,\n 635,\n 636,\n 636,\n 636,\n 636,\n 636,\n 636,\n 636,\n 637,\n 637,\n 638,\n 639,\n 639,\n 640,\n 641,\n 641,\n 642,\n 643,\n 643,\n 643,\n 644,\n 645,\n 645,\n 645,\n 645,\n 646,\n 647,\n 648,\n 649,\n 650,\n 650,\n 650,\n 650,\n 650,\n 650,\n 650,\n 650,\n 650,\n 650,\n 651,\n 652,\n 653,\n 653,\n 654,\n 655,\n 655,\n 655,\n 655,\n 656,\n 657,\n 658,\n 658,\n 658,\n 658,\n 659,\n 659,\n 659,\n 659,\n 659,\n 659,\n 659,\n 659,\n 660,\n 661,\n 661,\n 662,\n 663,\n 663,\n 663,\n 664,\n 665,\n 666,\n 667,\n 667,\n 667,\n 668,\n 669,\n 669,\n 669,\n 670,\n 670,\n 670,\n 671,\n 672,\n 673,\n 674,\n 674,\n 674,\n 674,\n 674,\n 674,\n 674,\n 674,\n 674,\n 674,\n 674,\n 675,\n 675,\n 676,\n 677,\n 678,\n 678,\n 678,\n 679,\n 680,\n 680,\n 681,\n 682,\n 682,\n 682,\n 682,\n 682,\n 682,\n 682,\n 682,\n 682,\n 682,\n 682,\n 682,\n 683,\n 684,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 686,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 688,\n 689,\n 689,\n 690,\n 691,\n 691,\n 692,\n 692,\n 692,\n 693,\n 693,\n 693,\n 694,\n 695,\n 696,\n 696,\n 696,\n 697,\n 698,\n 698,\n 698,\n 698,\n 698,\n 698,\n 698,\n 698,\n 699,\n 700,\n 700,\n 701,\n 702,\n 703,\n 704,\n 705,\n 706,\n 706,\n 706,\n 707,\n 708,\n 709,\n 710,\n 710,\n 710,\n 710,\n 711,\n 712,\n 712,\n 713,\n 714,\n 714,\n 715,\n 716,\n 717,\n 718,\n 719,\n 720,\n 721,\n 721,\n 721,\n 721,\n 721,\n 722,\n 723,\n 724,\n 725,\n 726,\n 727,\n 728,\n 728,\n 729,\n 730,\n 730,\n 730,\n 731,\n 732,\n 733,\n 734,\n 734,\n 734,\n 735,\n 736,\n 736,\n 736,\n 736,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 738,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 740,\n 741,\n 741,\n 742,\n 743,\n 744,\n 744,\n 744,\n 744,\n 745,\n 745,\n 746,\n 747,\n 748,\n 748,\n 748,\n 748,\n 748,\n 748,\n 749,\n 749,\n 749,\n 750,\n 751,\n 751,\n 751,\n 751,\n 751,\n 751,\n 751,\n 751,\n 751,\n 751,\n 751,\n 752,\n 752,\n 753,\n 753,\n 753,\n 754,\n 754,\n 754,\n 755,\n 756,\n 757,\n 757,\n 757,\n 757,\n 758,\n 759,\n 760,\n 761,\n 761,\n 761,\n 761,\n 761,\n 761,\n 761,\n 761,\n 761,\n 761,\n 762,\n 762,\n 762,\n 763,\n 763,\n 764,\n 765,\n 765,\n 765,\n 766,\n 767,\n 768,\n 768,\n 769,\n 769,\n 769,\n 769,\n 770,\n 771,\n 771,\n 771,\n 771,\n 771,\n 772,\n 772,\n 773,\n 773,\n 773,\n 773,\n 773,\n 773,\n 773,\n 773,\n 774,\n 775,\n 775,\n 776,\n 776,\n 777,\n 778,\n 779,\n 780,\n 781,\n 781,\n 782,\n 782,\n 782,\n 782,\n 782,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 784,\n 784,\n 785,\n 786,\n 786,\n 787,\n 788,\n 789,\n 790,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 792,\n 792,\n 792,\n 792,\n 793,\n 794,\n 795,\n 796,\n 796,\n 797,\n 797,\n 798,\n 798,\n 799,\n 800,\n 801,\n 802,\n 802,\n 802,\n 803,\n 803,\n 803,\n 803,\n 803,\n 803,\n 804,\n 804,\n 804,\n 804,\n 805,\n 806,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 808,\n 808,\n 809,\n 809,\n 809,\n 810,\n 811,\n 812,\n 813,\n 814,\n 815,\n 816,\n 817,\n 817,\n 818,\n 818,\n 819,\n 820,\n 820,\n 820,\n 820,\n 821,\n 822,\n 823,\n 823,\n 823,\n 823,\n 823,\n 823,\n 823,\n 823,\n 823,\n 824,\n 825,\n 826,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 828,\n 828,\n 828,\n 828,\n 829,\n 830,\n 830,\n 830,\n 831,\n 831,\n 832,\n 833,\n 834,\n 834,\n 834,\n 835,\n 835,\n 835,\n 836,\n 836,\n 836,\n 836,\n 836,\n 836,\n 837,\n 837,\n 837,\n 837,\n 837,\n 837,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 839,\n 839,\n 840,\n 840,\n 840,\n 840,\n 840,\n 841,\n 842,\n 842,\n 842,\n 843,\n 843,\n 843,\n 844,\n 844,\n 845,\n 846,\n 847,\n 847,\n 847,\n 847,\n 847,\n 848,\n 848,\n 849,\n 850,\n 851,\n 852,\n 852,\n 852,\n 853,\n 854,\n 854,\n 854,\n 854,\n 855,\n 856,\n 856,\n 857,\n 858,\n 858,\n 858,\n 858,\n 858,\n 859,\n 860,\n 860,\n 861,\n 862,\n 862,\n 862,\n 862,\n 862,\n 862,\n 862,\n 862,\n 862,\n 862,\n 862,\n 863,\n 863,\n 863,\n 863,\n 864,\n 864,\n 864,\n 864,\n 864,\n 865,\n 865,\n 865,\n 865,\n 865,\n 865,\n 865,\n 865,\n 866,\n 866,\n 866,\n 866,\n 866,\n 867,\n 867,\n 868,\n 868,\n 868,\n 868,\n 868,\n 868,\n 868,\n 868,\n 868,\n 869,\n 870,\n 871,\n 871,\n 872,\n 872,\n 873,\n 873,\n 873,\n 874,\n 874,\n 874,\n 874,\n 875,\n 876,\n 877,\n 878,\n 878,\n 878,\n 878,\n 878,\n 878,\n 878,\n 878,\n 878,\n 878,\n 879,\n 880,\n 881,\n 882,\n 883,\n 883,\n 883,\n 883,\n 883,\n 883,\n 883,\n 883,\n 883,\n 884,\n 884,\n 884,\n 885,\n 886,\n 886,\n 886,\n 887,\n 887,\n 887,\n 887,\n 887,\n 888,\n 888,\n 889,\n 890,\n 890,\n 891,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 893,\n 893,\n 893,\n 894,\n 895,\n 896,\n 897,\n 898,\n 898,\n 898,\n 898,\n 898,\n 898,\n 899,\n 900,\n 900,\n 901,\n 901,\n 901,\n 902,\n 902,\n 902,\n 902,\n 903,\n 903,\n 903,\n 903,\n 903,\n 903,\n 903,\n 903,\n 903,\n 903,\n 904,\n 905,\n 906,\n 907,\n 908,\n 908,\n 908,\n 908,\n 909,\n 909,\n 909,\n 910,\n 911,\n 911,\n 911,\n 912,\n 912,\n 912,\n 912,\n 912,\n 912,\n 912,\n 912,\n 913,\n 913,\n 913,\n 913,\n 913,\n 913,\n 914,\n 915,\n 916,\n 917,\n 917,\n 918,\n 919,\n 920,\n 921,\n 922,\n 923,\n 923,\n 923,\n 923,\n 923,\n 923,\n 924,\n 925,\n 926,\n 926,\n 927,\n 928,\n 929,\n 930,\n 931,\n 932,\n 932,\n 932,\n 933,\n 934,\n 935,\n 936,\n 936,\n 936,\n 937,\n 937,\n 938,\n 939,\n 940,\n 941,\n 941,\n 941,\n 941,\n 941,\n 942,\n 943,\n 944,\n 945,\n 946,\n 947,\n 947,\n 947,\n 947,\n 948,\n 949,\n 950,\n 950,\n 950,\n 950,\n 950,\n 950,\n 950,\n 950,\n 951,\n 951,\n 952,\n 952,\n 952,\n 953,\n 954,\n 955,\n 956,\n 957,\n 957,\n 958,\n 959,\n 960,\n 961,\n 962,\n 963,\n 964,\n 965,\n 966,\n 967,\n 968,\n 968,\n 969,\n 970,\n 971,\n 972,\n 972,\n 972,\n 973,\n 974,\n 975,\n 975,\n 976,\n 976,\n 977,\n 978,\n 979,\n 980,\n 980,\n 980,\n 980,\n 980,\n 980,\n 981,\n 981,\n 981,\n 982,\n 983,\n 983,\n 984,\n 985,\n 985,\n 985,\n 986,\n 987,\n 988,\n 989,\n 989,\n 989,\n 989,\n 989,\n 990,\n 991,\n 991,\n 992,\n 993,\n 993,\n 994,\n 995,\n 996,\n 996,\n 997,\n 998,\n 999,\n 999,\n 999,\n 999,\n 999,\n 999,\n 999,\n 999,\n 999,\n 999,\n 999,\n 1000,\n 1001,\n 1002,\n 1002,\n 1002,\n 1002,\n 1002,\n 1002,\n 1002,\n 1002,\n 1002,\n 1003,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1005,\n 1006,\n 1007,\n 1007,\n 1008,\n 1008,\n 1008,\n 1009,\n 1010,\n 1011,\n 1012,\n 1012,\n 1013,\n 1014,\n 1014,\n 1014,\n 1014,\n 1014,\n 1014,\n 1015,\n 1015,\n 1016,\n 1016,\n 1016,\n 1017,\n 1017,\n 1017,\n 1018,\n 1018,\n 1018,\n 1018,\n 1019,\n 1019,\n 1019,\n 1019,\n 1020,\n 1020,\n 1021,\n 1022,\n 1022,\n 1023,\n 1023,\n 1023,\n 1023,\n 1023,\n 1024,\n 1025,\n 1026,\n 1026,\n 1027,\n 1028,\n 1029,\n 1030,\n 1031,\n 1031,\n 1032,\n 1033,\n 1034,\n 1035,\n 1035,\n 1035,\n 1036,\n 1037,\n 1038,\n 1039,\n 1040,\n 1041,\n 1042,\n 1043,\n 1043,\n 1044,\n 1045,\n 1045,\n 1045,\n 1045,\n 1045,\n 1045,\n 1045,\n 1045,\n 1045,\n 1045,\n 1045,\n 1046,\n 1047,\n 1048,\n 1049,\n 1050,\n 1051,\n 1052,\n 1053,\n 1054,\n 1055,\n 1055,\n 1055,\n 1055,\n 1056,\n 1057,\n 1057,\n 1057,\n 1057,\n 1057,\n 1057,\n 1058,\n 1058,\n 1058,\n 1058,\n 1059,\n 1060,\n 1061,\n 1062,\n 1063,\n 1063,\n 1064,\n 1065,\n 1065,\n 1065,\n 1065,\n 1066,\n 1067,\n 1068,\n 1069,\n 1070,\n 1071,\n 1071,\n 1072,\n 1073,\n 1074,\n 1075,\n 1076,\n 1076,\n 1076,\n 1076,\n 1076,\n 1077,\n 1077,\n 1078,\n 1079,\n 1080,\n 1081,\n 1082,\n 1083,\n 1084,\n 1085,\n 1086,\n 1087,\n 1088,\n 1088,\n 1089,\n 1089,\n 1090,\n 1090,\n 1090,\n 1090,\n 1091,\n 1091,\n 1092,\n 1093,\n 1093,\n 1093,\n 1094,\n 1094,\n 1094,\n 1094,\n 1094,\n 1094,\n 1094,\n 1094,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1096,\n 1096,\n 1097,\n 1097,\n 1098,\n 1099,\n 1099,\n 1099,\n 1099,\n 1100,\n 1100,\n 1101,\n 1101,\n 1102,\n 1102,\n 1102,\n 1102,\n 1103,\n 1103,\n 1103,\n 1104,\n 1105,\n 1106,\n 1107,\n 1108,\n 1109,\n 1110,\n 1111,\n 1112,\n 1112,\n 1112,\n 1112,\n 1112,\n 1112,\n 1112,\n 1112,\n 1112,\n 1113,\n 1114,\n 1114,\n 1114,\n 1114,\n 1114,\n 1114,\n 1114,\n 1114,\n 1114,\n 1114,\n 1115,\n 1116,\n 1117,\n 1118,\n 1118,\n 1118,\n 1118,\n 1118,\n 1118,\n 1118,\n 1119,\n 1120,\n 1120,\n 1121,\n 1121,\n 1121,\n 1121,\n 1121,\n 1121,\n 1121,\n 1121,\n 1121,\n 1121,\n 1121,\n 1122,\n 1122,\n 1122,\n 1123,\n 1124,\n 1125,\n 1126,\n 1126,\n 1126,\n 1127,\n 1127,\n 1128,\n 1129,\n 1129,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1131,\n 1131,\n 1131,\n 1131,\n 1131,\n 1131,\n 1131,\n 1132,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1134,\n 1135,\n 1136,\n 1137,\n 1138,\n 1139,\n 1139,\n 1140,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1142,\n 1142,\n 1143,\n 1143,\n 1143,\n 1143,\n 1143,\n 1143,\n 1143,\n 1143,\n 1144,\n 1144,\n 1145,\n 1145,\n 1145,\n 1145,\n 1146,\n 1147,\n 1147,\n 1147,\n 1147,\n 1147,\n 1147,\n 1148,\n 1149,\n 1149,\n 1149,\n 1149,\n 1149,\n 1150,\n 1151,\n 1152,\n 1152,\n 1152,\n 1152,\n 1153,\n 1153,\n 1154,\n 1154,\n 1154,\n 1154,\n 1154,\n 1154,\n 1154,\n 1154,\n 1154,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1156,\n 1156,\n 1156,\n 1157,\n 1157,\n 1157,\n 1157,\n 1157,\n 1157,\n 1157,\n 1158,\n 1159,\n 1160,\n 1161,\n 1162,\n 1163,\n 1163,\n 1163,\n 1164,\n 1165,\n 1165,\n 1166,\n 1166,\n 1166,\n 1167,\n 1168,\n 1168,\n 1168,\n 1168,\n 1168,\n 1168,\n 1169,\n 1169,\n 1170,\n 1170,\n 1170,\n 1170,\n 1171,\n 1172,\n 1173,\n 1174,\n 1174,\n 1174,\n 1174,\n 1174,\n 1174,\n 1174,\n 1174,\n 1174,\n 1174,\n 1175,\n 1175,\n 1175,\n 1175,\n 1175,\n 1175,\n 1176,\n 1176,\n 1176,\n 1176,\n 1176,\n 1176,\n 1177,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1179,\n 1180,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1182,\n 1182,\n 1183,\n 1183,\n 1184,\n 1185,\n 1185,\n 1185,\n 1185,\n 1186,\n 1186,\n 1186,\n 1187,\n 1187,\n 1188,\n 1188,\n 1189,\n 1190,\n 1191,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1193,\n 1193,\n 1194,\n 1195,\n 1195,\n 1195,\n 1196,\n 1197,\n 1197,\n 1197,\n 1197,\n 1198,\n 1199,\n 1199,\n 1199,\n 1199,\n 1199,\n 1199,\n 1200,\n 1200,\n 1200,\n 1200,\n 1200,\n 1200,\n 1200,\n 1200,\n 1201,\n 1201,\n 1202,\n 1203,\n 1204,\n 1204,\n 1205,\n 1206,\n 1206,\n 1207,\n 1208,\n 1209,\n 1210,\n 1211,\n 1211,\n 1211,\n 1211,\n 1211,\n 1211,\n 1212,\n 1212,\n 1213,\n 1214,\n 1214,\n 1214,\n 1214,\n 1214,\n 1214,\n 1214,\n 1214,\n 1214,\n 1214,\n 1214,\n 1215,\n 1215,\n 1215,\n 1215,\n 1215,\n 1215,\n 1215,\n 1215,\n 1215,\n 1216,\n 1217,\n 1217,\n 1218,\n 1219,\n 1220,\n 1221,\n 1222,\n 1223,\n 1223,\n 1224,\n 1224,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1226,\n 1227,\n 1228,\n 1228,\n 1228,\n 1229,\n 1230,\n 1230,\n 1230,\n 1230,\n 1231,\n 1232,\n 1233,\n 1234,\n 1235,\n 1236,\n 1237,\n 1238,\n 1238,\n 1238,\n 1238,\n 1239,\n 1240,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1242,\n 1243,\n 1244,\n 1245,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1247,\n 1247,\n 1247,\n 1247,\n 1247,\n 1247,\n 1247,\n 1247,\n 1248,\n 1248,\n 1249,\n 1249,\n 1250,\n 1250,\n 1250,\n 1250,\n 1250,\n 1250,\n 1250,\n 1250,\n 1250,\n 1251,\n 1251,\n 1251,\n 1251,\n 1251,\n 1252,\n 1253,\n 1254,\n 1254,\n 1254,\n 1254,\n 1255,\n 1255,\n 1256,\n 1257,\n 1257,\n 1258,\n 1259,\n 1259,\n 1259,\n 1259,\n 1260,\n 1261,\n 1261,\n 1261,\n 1261,\n 1261,\n 1262,\n 1262,\n 1262,\n 1262,\n 1262,\n 1262,\n 1263,\n 1264,\n 1265,\n 1265,\n 1266,\n 1267,\n 1268,\n 1268,\n 1268,\n 1269,\n 1270,\n 1271,\n 1271,\n 1272,\n 1273,\n 1274,\n 1275,\n 1275,\n 1276,\n 1277,\n 1278,\n 1278,\n 1278,\n 1278,\n 1279,\n 1280,\n 1280,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1282,\n 1283,\n 1284,\n 1285,\n 1286,\n 1287,\n 1287,\n 1287,\n 1287,\n 1287,\n 1287,\n 1287,\n 1287,\n 1287,\n 1287,\n 1287,\n 1288,\n 1288,\n 1288,\n 1288,\n 1288,\n 1288,\n 1289,\n 1290,\n 1290,\n 1291,\n 1292,\n 1292,\n 1293,\n 1293,\n 1293,\n 1293,\n 1293,\n 1293,\n 1294,\n 1295,\n 1295,\n 1295,\n 1296,\n 1296,\n 1296,\n 1296,\n 1296,\n 1296,\n 1296,\n 1296,\n 1296,\n 1297,\n 1298,\n 1299,\n 1300,\n 1300,\n 1301,\n 1301,\n 1302,\n 1303,\n 1304,\n 1305,\n 1306,\n 1306,\n 1306,\n 1306,\n 1306,\n 1307,\n 1307,\n 1308,\n 1309,\n 1309,\n 1309,\n 1309,\n 1309,\n 1310,\n 1311,\n 1311,\n 1312,\n 1313,\n 1314,\n 1315,\n 1316,\n 1316,\n 1316,\n 1316,\n 1316,\n 1317,\n 1318,\n 1318,\n 1318,\n 1318,\n 1318,\n 1319,\n 1319,\n 1319,\n 1320,\n 1321,\n 1322,\n 1322,\n 1323,\n 1324,\n 1324,\n 1324,\n 1325,\n 1325,\n 1325,\n 1325,\n 1326,\n 1326,\n 1326,\n 1327,\n 1328,\n 1329,\n 1330,\n 1330,\n 1330,\n 1331,\n 1331,\n 1332,\n 1333,\n 1334,\n 1334,\n 1334,\n 1335,\n 1336,\n 1337,\n 1338,\n 1339,\n 1339,\n 1339,\n 1339,\n 1339,\n 1340,\n 1340,\n 1341,\n 1342,\n 1343,\n 1344,\n 1344,\n 1345,\n 1345,\n 1345,\n 1345,\n 1345,\n 1345,\n 1345,\n 1345,\n 1345,\n 1345,\n 1345,\n 1346,\n 1347,\n 1347,\n 1348,\n 1349,\n 1350,\n 1350,\n 1351,\n 1352,\n 1352,\n 1352,\n 1352,\n 1353,\n 1353,\n 1354,\n 1354,\n 1354,\n 1354,\n 1354,\n 1355,\n 1356,\n 1357,\n 1357,\n 1358,\n 1359,\n 1360,\n 1360,\n 1360,\n 1360,\n 1360,\n 1360,\n 1361,\n 1362,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1364,\n 1365,\n 1366,\n 1367,\n 1367,\n 1367,\n 1367,\n 1367,\n 1367,\n 1367,\n 1368,\n 1369,\n 1369,\n 1369,\n 1370,\n 1371,\n 1372,\n 1373,\n 1373,\n 1373,\n 1373,\n 1373,\n 1373,\n 1373,\n 1374,\n 1375,\n 1376,\n 1377,\n 1377,\n 1377,\n 1377,\n 1377,\n 1378,\n 1379,\n 1380,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1382,\n 1383,\n 1383,\n 1384,\n 1384,\n 1384,\n 1384,\n 1384,\n 1384,\n 1384,\n 1384,\n 1384,\n 1384,\n 1385,\n 1385,\n 1385,\n 1386,\n 1387,\n 1387,\n 1387,\n 1387,\n 1387,\n 1387,\n 1387,\n 1388,\n 1389,\n 1389,\n 1389,\n 1390,\n 1390,\n 1390,\n 1391,\n 1392,\n 1393,\n 1393,\n 1393,\n 1393,\n 1393,\n 1393,\n 1394,\n 1394,\n 1394,\n 1394,\n 1394,\n 1395,\n 1395,\n 1395,\n 1395,\n 1396,\n 1396,\n 1397,\n 1397,\n 1397,\n 1397,\n 1398,\n 1399,\n 1400,\n 1400,\n 1400,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1402,\n 1402,\n 1403,\n 1404,\n 1404,\n 1405,\n 1406,\n 1406,\n 1407,\n 1408,\n 1409,\n 1410,\n 1410,\n 1410,\n 1410,\n 1410,\n 1410,\n 1410,\n 1411,\n 1411,\n 1411,\n 1411,\n 1412,\n 1413,\n 1414,\n 1414,\n 1414,\n 1414,\n 1415,\n 1415,\n 1415,\n 1416,\n 1416,\n 1417,\n 1417,\n 1418,\n 1419,\n 1420,\n 1420,\n 1420,\n 1421,\n 1422,\n 1422,\n 1423,\n 1423,\n 1424,\n 1424,\n 1425,\n 1426,\n 1427,\n 1427,\n 1428,\n 1428,\n 1429,\n 1430,\n 1430,\n 1431,\n 1432,\n 1433,\n 1433,\n 1433,\n 1433,\n 1433,\n 1433,\n 1434,\n 1435,\n 1435,\n 1436,\n 1436,\n 1437,\n 1438,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1441,\n 1441,\n 1441,\n 1441,\n 1441,\n 1441,\n 1442,\n 1442,\n 1443,\n 1444,\n 1445,\n 1445,\n 1445,\n 1446,\n 1447,\n 1447,\n 1448,\n 1449,\n 1450,\n 1451,\n 1452,\n 1453,\n 1453,\n 1454,\n 1455,\n 1456,\n 1456,\n 1456,\n 1457,\n 1457,\n 1457,\n 1457,\n 1457,\n 1458,\n 1458,\n 1458,\n 1458,\n 1459,\n 1459,\n 1459,\n 1459,\n 1460,\n 1460,\n 1461,\n 1461,\n 1461,\n 1461,\n 1461,\n 1461,\n 1461,\n 1461,\n 1461,\n 1461,\n 1462,\n 1463,\n 1463,\n 1463,\n 1463,\n 1463,\n 1463,\n 1464,\n 1464,\n 1465,\n 1465,\n 1465,\n 1466,\n 1467,\n 1467,\n 1467,\n 1467,\n 1467,\n 1467,\n 1468,\n 1468,\n 1468,\n 1468,\n 1469,\n 1469,\n 1469,\n 1469,\n 1469,\n 1469,\n 1469,\n 1469,\n 1469,\n 1469,\n 1470,\n 1470,\n 1470,\n 1471,\n 1471,\n 1471,\n 1471,\n 1472,\n 1473,\n 1473,\n 1473,\n 1474,\n 1474,\n 1474,\n 1474,\n 1475,\n 1475,\n 1475,\n 1476,\n 1476,\n 1477,\n 1478,\n 1479,\n 1480,\n 1480,\n 1481,\n 1482,\n 1482,\n 1482,\n 1482,\n 1482,\n 1482,\n 1483,\n 1483,\n 1484,\n 1485,\n 1486,\n 1487,\n 1487,\n 1487,\n 1487,\n 1487,\n 1487,\n 1487,\n 1487,\n 1487,\n 1488,\n 1489,\n 1489,\n 1489,\n 1490,\n 1491,\n 1492,\n 1492,\n 1493,\n 1493,\n 1494,\n 1495,\n 1495,\n 1495,\n 1495,\n 1495,\n 1495,\n 1496,\n 1496,\n 1496,\n 1496,\n 1496,\n 1496,\n 1496,\n 1496,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1498,\n 1498,\n 1498,\n 1498,\n 1499,\n 1500,\n 1500,\n 1500,\n 1500,\n 1500,\n 1501,\n 1502,\n 1503,\n 1504,\n 1505,\n 1505,\n 1506,\n 1507,\n 1507,\n 1508,\n 1509,\n 1510,\n 1510,\n 1510,\n 1510,\n 1510,\n 1511,\n 1512,\n 1513,\n 1514,\n 1514,\n 1514,\n 1515,\n 1516,\n 1516,\n 1517,\n 1518,\n 1518,\n 1519,\n 1520,\n 1520,\n 1520,\n 1521,\n 1522,\n 1523,\n 1524,\n 1525,\n 1525,\n 1525,\n 1526,\n 1526,\n 1526,\n 1526,\n 1526,\n 1526,\n 1527,\n 1528,\n 1529,\n 1529,\n 1529,\n 1530,\n 1531,\n 1531,\n 1532,\n 1533,\n 1534,\n 1535,\n 1536,\n 1536,\n 1537,\n 1538,\n 1539,\n 1539,\n 1539,\n 1540,\n 1540,\n 1540,\n 1540,\n 1540,\n 1540,\n 1540,\n 1541,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1543,\n 1543,\n 1544,\n 1545,\n 1546,\n 1546,\n 1547,\n 1547,\n 1548,\n 1548,\n 1549,\n 1550,\n 1551,\n 1552,\n 1552,\n 1552,\n 1553,\n 1553,\n 1554,\n 1554,\n 1555,\n 1556,\n 1557,\n 1557,\n 1558,\n 1559,\n 1559,\n 1560,\n 1561,\n 1561,\n 1562,\n 1563,\n 1563,\n 1564,\n 1565,\n 1565,\n 1565,\n 1565,\n 1565,\n 1566,\n 1567,\n 1568,\n 1568,\n 1569,\n 1569,\n 1569,\n 1569,\n 1570,\n 1570,\n 1570,\n 1571,\n 1571,\n 1571,\n 1572,\n 1572,\n 1572,\n 1572,\n 1573,\n 1574,\n 1574,\n 1574,\n 1574,\n 1574,\n 1574,\n 1574,\n 1575,\n 1575,\n 1576,\n 1576,\n 1577,\n 1578,\n 1578,\n 1578,\n 1578,\n 1578,\n 1578,\n 1579,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1581,\n 1581,\n 1581,\n 1581,\n 1581,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1583,\n 1583,\n 1583,\n 1583,\n 1583,\n 1583,\n 1583,\n 1583,\n 1584,\n 1584,\n 1584,\n 1585,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1587,\n 1587,\n 1587,\n 1587,\n 1587,\n 1587,\n 1587,\n 1588,\n 1588,\n 1588,\n 1589,\n 1589,\n 1589,\n 1589,\n 1589,\n 1589,\n 1589,\n 1590,\n 1591,\n 1592,\n 1592,\n 1593,\n 1594,\n 1595,\n 1595,\n 1595,\n 1595,\n 1595,\n 1595,\n 1595,\n 1595,\n 1595,\n 1595,\n 1596,\n 1596,\n 1597,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1600,\n 1600,\n 1601,\n 1601,\n 1601,\n 1602,\n 1603,\n 1603,\n 1604,\n 1604,\n 1604,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1606,\n 1607,\n 1607,\n 1607,\n 1607,\n 1608,\n 1609,\n 1609,\n 1609,\n 1609,\n 1609,\n 1610,\n 1610,\n 1611,\n 1612,\n 1613,\n 1613,\n 1613,\n 1613,\n 1613,\n 1613,\n 1613,\n 1613,\n 1613,\n 1613,\n 1614,\n 1615,\n 1616,\n 1616,\n 1616,\n 1616,\n 1616,\n 1616,\n 1617,\n 1617,\n 1617,\n 1618,\n 1619,\n 1619,\n 1620,\n 1620,\n 1621,\n 1621,\n 1622,\n 1623,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1625,\n 1625,\n 1625,\n 1625,\n 1625,\n 1626,\n 1626,\n 1626,\n 1627,\n 1628,\n 1628,\n 1629,\n 1630,\n 1631,\n 1632,\n 1633,\n 1634,\n 1635,\n 1635,\n 1636,\n 1637,\n 1638,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1640,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1642,\n 1642,\n 1642,\n 1642,\n 1643,\n 1644,\n 1645,\n 1646,\n 1646,\n 1646,\n 1646,\n 1646,\n 1647,\n 1648,\n 1649,\n 1650,\n 1651,\n 1651,\n 1652,\n 1653,\n 1654,\n 1654,\n 1655,\n 1655,\n 1656,\n 1656,\n 1656,\n 1657,\n 1657,\n 1658,\n 1658,\n 1659,\n 1659,\n 1660,\n 1661,\n 1662,\n 1663,\n 1664,\n 1665,\n 1665,\n 1666,\n 1667,\n 1667,\n 1668,\n 1669,\n 1670,\n 1671,\n 1671,\n 1671,\n 1671,\n 1672,\n 1672,\n 1672,\n 1672,\n 1673,\n 1673,\n 1674,\n 1674,\n 1675,\n 1676,\n 1677,\n 1678,\n 1679,\n 1679,\n 1679,\n 1680,\n 1681,\n 1682,\n 1683,\n 1684,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1686,\n 1686,\n 1687,\n 1687,\n 1687,\n 1688,\n 1688,\n 1688,\n 1688,\n 1689,\n 1690,\n 1690,\n 1690,\n 1690,\n 1690,\n 1691,\n 1691,\n 1692,\n 1692,\n 1693,\n 1694,\n 1694,\n 1694,\n 1695,\n 1695,\n 1696,\n 1696,\n 1697,\n 1698,\n 1698,\n 1698,\n 1699,\n 1700,\n 1701,\n 1701,\n 1701,\n 1701,\n 1702,\n 1702,\n 1702,\n 1702,\n 1702,\n 1703,\n 1704,\n 1705,\n 1705,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1707,\n 1707,\n 1707,\n 1707,\n 1708,\n 1708,\n 1709,\n 1709,\n 1710,\n 1711,\n 1712,\n 1713,\n 1713,\n 1713,\n 1713,\n 1714,\n 1714,\n 1715,\n 1715,\n 1716,\n 1717,\n 1717,\n 1718,\n 1718,\n 1719,\n 1719,\n 1719,\n 1719,\n 1719,\n 1720,\n 1721,\n 1721,\n 1722,\n 1723,\n 1724,\n 1724,\n 1725,\n 1725,\n 1725,\n 1725,\n 1725,\n 1726,\n 1726,\n 1726,\n 1727,\n 1728,\n 1729,\n 1730,\n 1730,\n 1731,\n 1732,\n 1732,\n 1733,\n 1734,\n 1735,\n 1736,\n 1736,\n 1736,\n 1736,\n 1736,\n 1736,\n 1736,\n 1737,\n 1737,\n 1737,\n 1737,\n 1737,\n 1737,\n 1737,\n 1737,\n 1737,\n 1737,\n 1738,\n 1738,\n 1738,\n 1738,\n 1738,\n 1738,\n 1738,\n 1738,\n 1739,\n 1739,\n 1739,\n 1740,\n 1740,\n 1741,\n 1742,\n 1742,\n 1743,\n 1743,\n 1744,\n 1745,\n 1745,\n 1745,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1747,\n 1747,\n 1747,\n 1747,\n 1748,\n 1749,\n 1749,\n 1750,\n 1751,\n 1752,\n 1752,\n 1753,\n 1753,\n 1753,\n 1753,\n 1753,\n 1754,\n 1755,\n 1756,\n 1757,\n 1758,\n 1759,\n 1759,\n 1760,\n 1760,\n 1761,\n 1761,\n 1762,\n 1763,\n 1764,\n 1764,\n 1765,\n 1766,\n 1767,\n 1767,\n 1767,\n 1767,\n 1767,\n 1767,\n 1767,\n 1767,\n 1768,\n 1769,\n 1769,\n 1770,\n 1770,\n 1771,\n 1772,\n 1772,\n 1773,\n 1774,\n 1775,\n 1775,\n 1775,\n 1776,\n 1777,\n 1777,\n 1777,\n 1778,\n 1779,\n 1779,\n 1779,\n 1779,\n 1779,\n 1780,\n 1781,\n 1781,\n 1782,\n 1783,\n 1783,\n 1783,\n 1784,\n 1785,\n 1786,\n 1787,\n 1787,\n 1788,\n 1789,\n 1790,\n 1790,\n 1790,\n 1790,\n 1790,\n 1791,\n 1792,\n 1793,\n 1794,\n 1795,\n 1795,\n 1796,\n 1797,\n 1798,\n 1799,\n 1799,\n 1800,\n 1801,\n 1802,\n 1803,\n 1804,\n 1805,\n 1806,\n 1806,\n 1806,\n 1806,\n 1806,\n 1806,\n 1806,\n 1806,\n 1807,\n 1807,\n 1807,\n 1807,\n 1807,\n 1808,\n 1808,\n 1808,\n 1808,\n 1808,\n 1808,\n 1808,\n 1809,\n 1809,\n 1809,\n 1810,\n 1811,\n 1811,\n 1811,\n 1812,\n 1813,\n 1814,\n 1814,\n 1814,\n 1815,\n 1816,\n 1817,\n 1817,\n 1818,\n 1819,\n 1819,\n 1819,\n 1820,\n 1821,\n 1821,\n 1821,\n 1822,\n 1822,\n 1823,\n 1824,\n 1825,\n 1826,\n 1827,\n 1827,\n 1827,\n 1828,\n 1829,\n 1829,\n 1830,\n 1831,\n 1831,\n 1832,\n 1832,\n 1833,\n 1834,\n 1835,\n 1836,\n 1837,\n 1837,\n 1837,\n 1838,\n 1839,\n 1840,\n 1841,\n 1842,\n 1842,\n 1843,\n 1843,\n 1843,\n 1844,\n 1845,\n 1845,\n 1845,\n 1845,\n 1845,\n 1846,\n 1847,\n 1848,\n 1849,\n 1849,\n 1850,\n 1850,\n 1850,\n 1850,\n 1850,\n 1850,\n 1850,\n 1850,\n 1850,\n 1851,\n 1851,\n 1851,\n 1852,\n 1853,\n 1853,\n 1853,\n 1854,\n 1854,\n 1854,\n 1855,\n 1856,\n 1857,\n 1857,\n 1857,\n 1857,\n 1857,\n 1858,\n 1859,\n 1860,\n 1861,\n 1862,\n 1863,\n 1863,\n 1864,\n 1864,\n 1864,\n 1864,\n 1864,\n 1864,\n 1864,\n 1864,\n 1865,\n 1865,\n 1865,\n 1865,\n 1865,\n 1866,\n 1867,\n 1867,\n 1867,\n 1867,\n 1867,\n 1867,\n 1867,\n 1868,\n 1868,\n 1868,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1870,\n 1871,\n 1872,\n 1872,\n 1872,\n 1872,\n 1872,\n 1872,\n 1872,\n 1873,\n 1874,\n 1875,\n 1876,\n 1876,\n 1877,\n 1878,\n 1879,\n 1879,\n 1879,\n 1879,\n 1880,\n 1881,\n 1881,\n 1882,\n 1882,\n 1883,\n 1884,\n 1885,\n 1886,\n 1887,\n 1887,\n 1888,\n 1888,\n 1888,\n 1888,\n 1888,\n 1889,\n 1889,\n 1890,\n 1891,\n 1892,\n 1893,\n 1894,\n 1895,\n 1895,\n 1895,\n 1896,\n 1896,\n 1896,\n 1897,\n 1898,\n 1899,\n 1900,\n 1901,\n 1902,\n 1902,\n 1902,\n 1903,\n 1904,\n 1904,\n 1905,\n 1906,\n 1907,\n 1907,\n 1907,\n 1907,\n 1907,\n 1907,\n 1908,\n 1908,\n 1908,\n 1909,\n 1909,\n 1910,\n 1911,\n 1911,\n 1912,\n 1912,\n 1913,\n 1913,\n 1914,\n 1914,\n 1914,\n 1915,\n 1916,\n 1916,\n 1916,\n 1916,\n 1917,\n 1918,\n 1919,\n 1919,\n 1919,\n 1919,\n 1919,\n 1920,\n 1921,\n 1922,\n 1923,\n 1923,\n 1924,\n 1925,\n 1926,\n 1927,\n 1928,\n 1928,\n 1929,\n 1930,\n 1930,\n 1930,\n 1930,\n 1930,\n 1931,\n 1932,\n 1932,\n 1932,\n 1933,\n 1934,\n 1934,\n 1934,\n 1934,\n 1934,\n 1935,\n 1936,\n 1936,\n 1936,\n 1937,\n 1938,\n 1939,\n 1939,\n 1939,\n 1940,\n 1941,\n 1942,\n 1943,\n 1943,\n 1943,\n 1944,\n 1944,\n 1945,\n 1946,\n 1947,\n 1947,\n 1947,\n 1948,\n 1948,\n 1948,\n 1948,\n 1948,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1950,\n 1950,\n 1950,\n 1950,\n 1950,\n 1950,\n 1951,\n 1951,\n 1951,\n 1951,\n 1952,\n 1953,\n 1954,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1956,\n 1957,\n 1957,\n 1957,\n 1957,\n 1957,\n 1957,\n 1958,\n 1958,\n 1959,\n 1959,\n 1960,\n 1960,\n 1961,\n 1961,\n 1961,\n 1961,\n 1961,\n 1962,\n 1963,\n 1964,\n 1964,\n 1964,\n 1965,\n 1965,\n 1965,\n 1966,\n 1967,\n 1968,\n 1969,\n 1969,\n 1970,\n 1970,\n 1971,\n 1972,\n 1973,\n 1974,\n 1975,\n 1975,\n 1976,\n 1976,\n 1977,\n 1977,\n 1978,\n 1979,\n 1980,\n 1981,\n 1982,\n 1983,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1985,\n 1986,\n 1987,\n 1987,\n 1987,\n 1987,\n 1988,\n 1988,\n 1988,\n 1988,\n 1989,\n 1990,\n 1990,\n 1991,\n 1992,\n 1993,\n 1994,\n 1994,\n 1995,\n 1996,\n 1996,\n 1996,\n 1996,\n 1997,\n 1997,\n 1998,\n 1999,\n 1999,\n 1999,\n 2000,\n 2000,\n 2000,\n 2000,\n 2001,\n 2001,\n 2002,\n 2002,\n 2002,\n 2002,\n 2002,\n 2002,\n 2002,\n 2002,\n 2002,\n 2002,\n 2002,\n 2003,\n 2003,\n 2004,\n 2005,\n 2006,\n 2007,\n 2007,\n 2007,\n 2007,\n 2008,\n 2009,\n 2010,\n 2011,\n 2011,\n 2012,\n 2012,\n 2013,\n 2013,\n 2014,\n 2015,\n 2015,\n 2015,\n 2015,\n 2015,\n 2016,\n 2016,\n 2017,\n 2017,\n 2017,\n 2017,\n 2017,\n 2017,\n 2017,\n 2018,\n 2018,\n 2019,\n 2020,\n 2020,\n 2020,\n 2021,\n 2022,\n 2022,\n 2022,\n 2022,\n 2023,\n 2023,\n 2023,\n 2023,\n 2023,\n 2023,\n 2024,\n 2024,\n 2024,\n 2024,\n 2024,\n 2025,\n 2025,\n 2026,\n 2027,\n 2028,\n 2029,\n 2029,\n 2029,\n 2029,\n 2029,\n 2029,\n 2029,\n 2029,\n 2029,\n 2030,\n 2030,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2032,\n 2032,\n 2032,\n 2032,\n 2033,\n 2033,\n 2034,\n 2034,\n 2034,\n 2034,\n 2034,\n 2035,\n 2036,\n 2037,\n 2037,\n 2038,\n 2039,\n 2040,\n 2040,\n 2040,\n 2040,\n 2041,\n 2042,\n 2043,\n 2044,\n 2044,\n 2044,\n 2044,\n 2045,\n 2045,\n 2045,\n 2045,\n 2045,\n 2045,\n 2045,\n 2045,\n 2045,\n 2046,\n 2047,\n 2048,\n 2048,\n 2049,\n 2050,\n 2050,\n 2050,\n 2050,\n 2050,\n 2050,\n 2050,\n 2050,\n 2050,\n 2051,\n 2051,\n 2051,\n 2052,\n 2052,\n 2053,\n 2054,\n 2055,\n 2056,\n 2056,\n 2056,\n 2057,\n 2058,\n 2058,\n 2059,\n 2059,\n 2059,\n 2060,\n 2060,\n 2060,\n 2060,\n 2060,\n 2061,\n 2061,\n 2062,\n 2063,\n 2063,\n 2063,\n 2064,\n 2065,\n 2066,\n 2067,\n 2067,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2069,\n 2070,\n 2070,\n 2071,\n 2071,\n 2072,\n 2072,\n 2072,\n 2072,\n 2072,\n 2072,\n 2073,\n 2074,\n 2074,\n 2074,\n 2074,\n 2074,\n 2074,\n 2075,\n 2075,\n 2075,\n 2076,\n 2077,\n 2078,\n 2078,\n 2078,\n 2078,\n 2078,\n 2078,\n 2078,\n 2078,\n 2079,\n 2080,\n 2080,\n 2081,\n 2081,\n 2081,\n 2081,\n 2082,\n 2083,\n 2083,\n 2083,\n 2084,\n 2084,\n 2084,\n 2084,\n 2084,\n 2084,\n 2084,\n 2085,\n 2085,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2087,\n 2088,\n 2089,\n 2089,\n 2089,\n 2090,\n 2091,\n 2092,\n 2093,\n 2093,\n 2093,\n 2094,\n 2094,\n 2095,\n 2095,\n 2095,\n 2096,\n 2097,\n 2098,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2100,\n 2101,\n 2101,\n 2101,\n 2102,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2104,\n 2104,\n 2104,\n 2104,\n 2104,\n 2104,\n 2104,\n 2104,\n 2104,\n 2104,\n 2104,\n 2105,\n 2105,\n 2105,\n 2105,\n 2105,\n 2105,\n 2105,\n 2105,\n 2106,\n 2106,\n 2107,\n 2107,\n 2108,\n 2109,\n 2109,\n 2109,\n 2109,\n 2109,\n 2110,\n 2110,\n 2111,\n 2111,\n 2111,\n 2112,\n 2113,\n 2113,\n 2113,\n 2113,\n 2113,\n 2113,\n 2113,\n 2113,\n 2114,\n 2115,\n 2115,\n 2115,\n 2115,\n 2115,\n 2115,\n 2116,\n 2117,\n 2118,\n 2119,\n 2120,\n 2121,\n 2122,\n 2122,\n 2123,\n 2124,\n 2125,\n 2126,\n 2126,\n 2126,\n 2127,\n 2127,\n 2127,\n 2128,\n 2129,\n 2130,\n 2130,\n 2130,\n 2131,\n 2131,\n 2131,\n 2131,\n 2131,\n 2131,\n 2131,\n 2131,\n 2131,\n 2131,\n 2131,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2133,\n 2133,\n 2133,\n 2134,\n 2134,\n 2134,\n 2135,\n 2136,\n 2137,\n 2138,\n 2139,\n 2140,\n 2141,\n 2141,\n 2141,\n 2141,\n 2142,\n 2142,\n 2143,\n 2144,\n 2144,\n 2145,\n 2145,\n 2146,\n 2147,\n 2148,\n 2149,\n 2149,\n 2150,\n 2150,\n 2151,\n 2151,\n 2151,\n 2151,\n 2151,\n 2151,\n 2151,\n 2151,\n 2152,\n 2153,\n 2154,\n 2155,\n 2156,\n 2156,\n 2156,\n 2157,\n 2157,\n 2157,\n 2157,\n 2157,\n 2157,\n 2157,\n 2157,\n 2157,\n 2158,\n 2158,\n 2159,\n 2159,\n 2159,\n 2159,\n 2159,\n 2159,\n 2160,\n 2160,\n 2160,\n 2160,\n 2160,\n 2161,\n 2161,\n 2162,\n 2162,\n 2162,\n 2162,\n 2162,\n 2162,\n 2162,\n 2163,\n 2164,\n 2165,\n 2166,\n 2167,\n 2167,\n 2167,\n 2167,\n 2167,\n 2167,\n 2167,\n 2167,\n 2168,\n 2169,\n 2170,\n 2171,\n 2172,\n 2173,\n 2173,\n 2173,\n 2173,\n 2173,\n 2173,\n 2174,\n 2175,\n 2175,\n 2176,\n 2177,\n 2178,\n 2178,\n 2179,\n 2180,\n 2180,\n 2181,\n 2181,\n 2181,\n 2181,\n 2181,\n 2181,\n 2181,\n 2181,\n 2181,\n 2181,\n 2182,\n 2183,\n 2184,\n 2184,\n 2185,\n 2185,\n 2185,\n 2185,\n 2185,\n 2186,\n 2186,\n 2186,\n 2187,\n 2187,\n 2187,\n 2187,\n 2188,\n 2188,\n 2189,\n 2189,\n 2189,\n 2190,\n 2190,\n 2190,\n 2191,\n 2192,\n 2193,\n 2193,\n 2193,\n 2194,\n 2195,\n 2196,\n 2197,\n 2198,\n 2199,\n 2199,\n 2200,\n 2201,\n 2202,\n 2202,\n 2202,\n 2202,\n 2202,\n 2202,\n 2202,\n 2202,\n 2203,\n 2204,\n 2204,\n 2205,\n 2205,\n 2205,\n 2206,\n 2206,\n 2207,\n 2208,\n 2209,\n 2210,\n 2210,\n 2211,\n 2211,\n 2211,\n 2212,\n 2213,\n 2213,\n 2213,\n 2213,\n 2213,\n 2214,\n 2214,\n 2214,\n 2214,\n 2214,\n 2214,\n 2214,\n 2214,\n 2215,\n 2216,\n 2217,\n 2218,\n 2219,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2221,\n 2221,\n 2221,\n 2221,\n 2221,\n 2222,\n 2222,\n 2222,\n 2222,\n 2223,\n 2224,\n 2224,\n 2224,\n 2224,\n 2224,\n 2225,\n 2226,\n 2226,\n 2227,\n 2228,\n 2228,\n 2228,\n 2229,\n 2229,\n 2230,\n 2231,\n 2232,\n 2233,\n 2234,\n 2235,\n 2236,\n 2236,\n 2237,\n 2237,\n 2237,\n 2237,\n 2237,\n 2237,\n 2237,\n 2237,\n 2237,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2239,\n 2240,\n 2241,\n 2242,\n 2242,\n 2243,\n 2244,\n 2245,\n 2245,\n 2245,\n 2245,\n 2245,\n 2245,\n 2245,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2247,\n 2248,\n 2249,\n 2250,\n 2251,\n 2252,\n 2252,\n 2253,\n 2253,\n 2254,\n 2255,\n 2256,\n 2257,\n 2258,\n 2258,\n 2258,\n 2258,\n 2258,\n 2259,\n 2260,\n 2261,\n 2262,\n 2263,\n 2264,\n 2265,\n 2266,\n 2267,\n 2267,\n 2267,\n 2268,\n 2269,\n 2269,\n 2270,\n 2271,\n 2272,\n 2273,\n 2273,\n 2273,\n 2274,\n 2275,\n 2276,\n 2277,\n 2278,\n 2278,\n 2279,\n 2280,\n 2281,\n 2282,\n 2283,\n 2283,\n 2283,\n 2284,\n 2285,\n 2286,\n 2287,\n 2287,\n 2287,\n 2288,\n 2289,\n 2290,\n 2291,\n 2292,\n 2293,\n 2294,\n 2295,\n 2296,\n 2296,\n 2296,\n 2297,\n 2297,\n 2298,\n 2299,\n 2300,\n 2300,\n 2300,\n 2300,\n 2300,\n 2301,\n 2301,\n 2301,\n 2301,\n 2302,\n 2302,\n 2302,\n 2302,\n 2302,\n 2302,\n 2302,\n 2302,\n 2302,\n 2302,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2304,\n 2304,\n 2304,\n 2304,\n 2304,\n 2304,\n 2304,\n 2305,\n 2305,\n 2306,\n 2307,\n 2308,\n 2309,\n 2310,\n 2310,\n 2311,\n 2312,\n 2313,\n 2314,\n 2314,\n 2315,\n 2316,\n 2317,\n 2317,\n 2317,\n 2317,\n 2317,\n 2318,\n 2319,\n 2320,\n 2321,\n 2321,\n 2321,\n 2321,\n 2321,\n 2321,\n 2322,\n 2323,\n 2324,\n 2325,\n 2325,\n 2326,\n 2327,\n 2327,\n 2327,\n 2327,\n 2328,\n 2329,\n 2330,\n 2331,\n 2332,\n 2333,\n 2334,\n 2334,\n 2335,\n 2335,\n 2335,\n 2336,\n 2337,\n 2338,\n 2339,\n 2339,\n 2340,\n 2341,\n 2341,\n 2341,\n 2342,\n 2342,\n 2343,\n 2344,\n 2345,\n 2346,\n 2347,\n 2347,\n 2348,\n 2348,\n 2348,\n 2348,\n 2348,\n 2349,\n 2349,\n 2350,\n 2351,\n 2352,\n 2353,\n 2353,\n 2353,\n 2353,\n 2353,\n 2353,\n 2353,\n 2353,\n 2354,\n 2355,\n 2355,\n 2355,\n 2356,\n 2356,\n 2356,\n 2356,\n 2357,\n 2358,\n 2359,\n 2360,\n 2360,\n 2360,\n 2360,\n 2361,\n 2362,\n 2362,\n 2362,\n 2362,\n 2363,\n 2364,\n 2365,\n 2365,\n 2366,\n 2366,\n 2366,\n 2366,\n 2366,\n 2367,\n 2367,\n 2368,\n 2369,\n 2369,\n 2370,\n 2371,\n 2371,\n 2371,\n 2371,\n 2371,\n 2372,\n 2373,\n 2373,\n 2373,\n 2373,\n 2373,\n 2373,\n 2373,\n 2373,\n 2373,\n 2373,\n 2374,\n 2375,\n 2375,\n 2375,\n 2376,\n 2376,\n 2376,\n 2377,\n 2378,\n 2378,\n 2378,\n 2378,\n 2378,\n 2378,\n 2378,\n 2378,\n 2378,\n 2379,\n 2379,\n 2380,\n 2381,\n 2381,\n 2382,\n 2382,\n 2382,\n 2382,\n 2382,\n 2382,\n 2383,\n 2383,\n 2384,\n 2385,\n 2385,\n 2385,\n 2385,\n 2385,\n 2385,\n 2385,\n 2385,\n 2386,\n 2387,\n 2387,\n 2388,\n 2389,\n 2389,\n 2390,\n 2391,\n 2392,\n 2392,\n 2392,\n 2393,\n 2394,\n 2395,\n 2395,\n 2396,\n 2397,\n 2398,\n 2398,\n 2398,\n 2398,\n 2398,\n 2398,\n 2399,\n 2399,\n 2399,\n 2400,\n 2401,\n 2402,\n 2403,\n 2403,\n 2403,\n 2404,\n 2404,\n 2404,\n 2404,\n 2404,\n 2404,\n 2405,\n 2405,\n 2405,\n 2405,\n 2405,\n 2405,\n 2405,\n 2406,\n 2406,\n 2407,\n 2407,\n 2407,\n 2407,\n 2407,\n 2407,\n 2408,\n 2409,\n 2410,\n 2411,\n 2412,\n 2413,\n 2413,\n 2414,\n 2415,\n 2416,\n 2417,\n 2417,\n 2418,\n 2419,\n 2420,\n 2421,\n 2421,\n 2421,\n 2421,\n 2422,\n 2422,\n 2423,\n 2423,\n 2423,\n 2424,\n 2425,\n 2426,\n 2427,\n 2428,\n 2429,\n 2429,\n 2429,\n 2429,\n 2429,\n 2429,\n 2430,\n 2431,\n 2431,\n 2432,\n 2432,\n 2433,\n 2433,\n 2433,\n 2433,\n 2434,\n 2435,\n 2435,\n 2435,\n 2436,\n 2437,\n 2437,\n 2437,\n 2438,\n 2439,\n 2440,\n 2441,\n 2441,\n 2441,\n 2441,\n 2442,\n 2443,\n 2443,\n 2444,\n 2444,\n 2444,\n 2444,\n 2444,\n 2444,\n 2444,\n 2444,\n 2444,\n 2445,\n 2446,\n 2446,\n 2446,\n 2446,\n 2447,\n 2447,\n 2447,\n 2448,\n 2449,\n 2449,\n 2450,\n 2450,\n 2450,\n 2450,\n 2451,\n 2451,\n 2451,\n 2452,\n 2453,\n 2454,\n 2454,\n 2454,\n 2454,\n 2454,\n 2454,\n 2454,\n 2455,\n 2456,\n 2456,\n 2457,\n 2457,\n 2457,\n 2457,\n 2457,\n 2458,\n 2459,\n 2459,\n 2460,\n 2460,\n 2460,\n 2460,\n 2460,\n 2460,\n 2460,\n 2460,\n 2461,\n 2462,\n 2463,\n 2464,\n 2464,\n 2464,\n 2465,\n 2465,\n 2465,\n 2465,\n 2465,\n 2466,\n 2466,\n 2467,\n 2468,\n 2468,\n 2468,\n 2468,\n 2469,\n 2469,\n 2470,\n 2471,\n 2472,\n 2472,\n 2473,\n 2473,\n 2474,\n 2475,\n 2475,\n 2476,\n 2476,\n 2477,\n 2477,\n 2477,\n 2478,\n 2478,\n 2479,\n 2480,\n 2481,\n 2482,\n 2483,\n 2483,\n 2484,\n 2485,\n 2486,\n 2487,\n 2487,\n 2487,\n 2488,\n 2489,\n 2490,\n 2491,\n 2491,\n 2491,\n 2491,\n 2491,\n 2491,\n 2492,\n 2492,\n 2493,\n 2493,\n 2493,\n 2494,\n 2495,\n 2495,\n 2495,\n 2496,\n 2496,\n 2496,\n 2496,\n 2497,\n 2498,\n 2499,\n 2500,\n 2501,\n 2501,\n 2501,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2503,\n 2503,\n 2504,\n 2504,\n 2504,\n 2504,\n 2505,\n 2506,\n 2506,\n 2507,\n 2508,\n 2509,\n 2510,\n 2510,\n 2511,\n 2512,\n 2513,\n 2514,\n 2515,\n 2516,\n 2517,\n 2517,\n 2518,\n 2518,\n 2519,\n 2519,\n 2520,\n 2520,\n 2521,\n 2522,\n 2523,\n 2523,\n 2523,\n 2523,\n 2523,\n 2524,\n 2525,\n 2526,\n 2526,\n 2526,\n 2526,\n 2526,\n 2526,\n 2526,\n 2527,\n 2527,\n 2528,\n 2528,\n 2528,\n 2529,\n 2529,\n 2529,\n 2530,\n 2530,\n 2530,\n 2531,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2534,\n 2534,\n 2534,\n 2534,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2536,\n 2536,\n 2537,\n 2538,\n 2538,\n 2538,\n 2538,\n 2538,\n 2539,\n 2539,\n 2540,\n 2540,\n 2540,\n 2541,\n 2542,\n 2542,\n 2543,\n 2544,\n 2545,\n 2546,\n 2546,\n 2547,\n 2547,\n 2548,\n 2549,\n 2550,\n 2550,\n 2551,\n 2552,\n 2553,\n 2554,\n 2555,\n 2556,\n 2556,\n 2556,\n 2556,\n 2556,\n 2557,\n 2557,\n 2558,\n 2558,\n 2558,\n 2559,\n 2559,\n 2560,\n 2560,\n 2560,\n 2560,\n 2560,\n 2560,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2562,\n 2562,\n 2562,\n 2563,\n 2564,\n 2565,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2567,\n 2568,\n 2569,\n 2569,\n 2570,\n 2570,\n 2571,\n 2572,\n 2573,\n 2573,\n 2573,\n 2574,\n 2575,\n 2576,\n 2577,\n 2577,\n 2578,\n 2578,\n 2579,\n 2579,\n 2580,\n 2581,\n 2581,\n 2581,\n 2581,\n 2582,\n 2582,\n 2582,\n 2582,\n 2582,\n 2582,\n 2583,\n 2583,\n 2584,\n 2584,\n 2585,\n 2586,\n 2587,\n 2588,\n 2588,\n 2589,\n 2590,\n 2591,\n 2592,\n 2593,\n 2594,\n 2594,\n 2595,\n 2596,\n 2597,\n 2597,\n 2597,\n 2598,\n 2598,\n 2599,\n 2599,\n 2600,\n 2600,\n 2600,\n 2601,\n 2601,\n 2602,\n 2603,\n 2603,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2605,\n 2606,\n 2606,\n 2607,\n 2607,\n 2608,\n 2608,\n 2609,\n 2609,\n 2610,\n 2611,\n 2612,\n 2613,\n 2613,\n 2613,\n 2613,\n 2614,\n 2615,\n 2616,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2618,\n 2619,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2621,\n 2622,\n 2623,\n 2624,\n 2625,\n 2625,\n 2625,\n 2625,\n 2625,\n 2626,\n 2626,\n 2626,\n 2627,\n 2628,\n 2629,\n 2630,\n 2631,\n 2632,\n 2632,\n 2632,\n 2632,\n 2632,\n 2632,\n 2632,\n 2632,\n 2633,\n 2634,\n 2635,\n 2635,\n 2636,\n 2636,\n 2636,\n 2636,\n 2636,\n 2636,\n 2636,\n 2636,\n 2636,\n 2636,\n 2637,\n 2637,\n 2638,\n 2638,\n 2638,\n 2638,\n 2638,\n 2638,\n 2639,\n 2640,\n 2640,\n 2640,\n 2641,\n 2641,\n 2642,\n 2642,\n 2642,\n 2643,\n 2643,\n 2643,\n 2643,\n 2643,\n 2644,\n 2644,\n 2644,\n 2644,\n 2644,\n 2644,\n 2644,\n 2645,\n 2645,\n 2646,\n 2647,\n 2647,\n 2647,\n 2647,\n 2648,\n 2648,\n 2648,\n 2648,\n 2648,\n 2648,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2650,\n 2651,\n 2651,\n 2652,\n 2653,\n 2654,\n 2655,\n 2655,\n 2656,\n 2657,\n 2657,\n 2658,\n 2658,\n 2659,\n 2659,\n 2659,\n 2659,\n 2660,\n 2661,\n 2661,\n 2661,\n 2661,\n 2661,\n 2661,\n 2661,\n 2661,\n 2661,\n 2661,\n 2662,\n 2662,\n 2663,\n 2664,\n 2665,\n 2666,\n 2667,\n 2668,\n 2669,\n 2670,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2672,\n 2672,\n 2672,\n 2672,\n 2672,\n 2672,\n 2673,\n 2674,\n 2675,\n 2676,\n 2676,\n 2677,\n 2678,\n 2678,\n 2678,\n 2678,\n 2679,\n 2680,\n 2680,\n 2681,\n 2681,\n 2681,\n 2682,\n 2683,\n 2684,\n 2684,\n 2685,\n 2686,\n 2687,\n 2687,\n 2687,\n 2687,\n 2688,\n 2688,\n 2689,\n 2690,\n 2691,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2693,\n 2694,\n 2695,\n 2696,\n 2696,\n 2696,\n 2696,\n 2696,\n 2696,\n 2697,\n 2698,\n 2699,\n 2700,\n 2700,\n 2701,\n 2701,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2703,\n 2703,\n 2703,\n 2703,\n 2703,\n 2703,\n 2703,\n 2704,\n 2704,\n 2705,\n 2705,\n 2706,\n 2706,\n 2706,\n 2707,\n 2708,\n 2708,\n 2709,\n 2709,\n 2709,\n 2709,\n 2709,\n 2710,\n 2711,\n 2711,\n 2712,\n 2713,\n 2714,\n 2714,\n 2714,\n 2714,\n 2714,\n 2715,\n 2715,\n 2715,\n 2716,\n 2717,\n 2718,\n 2718,\n 2718,\n 2719,\n 2720,\n 2720,\n 2720,\n 2720,\n 2720,\n 2720,\n 2721,\n 2722,\n 2723,\n 2723,\n 2724,\n 2724,\n 2725,\n 2726,\n 2726,\n 2727,\n 2728,\n 2728,\n 2729,\n 2729,\n 2730,\n 2731,\n 2732,\n 2733,\n 2734,\n 2734,\n 2735,\n 2735,\n 2736,\n 2737,\n 2738,\n 2739,\n 2740,\n 2741,\n 2742,\n 2742,\n 2742,\n 2742,\n 2742,\n 2742,\n 2742,\n 2742,\n 2743,\n 2743,\n 2744,\n 2745,\n 2745,\n 2745,\n 2745,\n 2745,\n 2745,\n 2745,\n 2746,\n 2746,\n 2747,\n 2747,\n 2747,\n 2747,\n 2748,\n 2749,\n 2750,\n 2751,\n 2752,\n 2753,\n 2754,\n 2755,\n 2755,\n 2755,\n 2756,\n 2757,\n 2757,\n 2757,\n 2757,\n 2757,\n 2757,\n 2757,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2759,\n 2759,\n 2760,\n 2761,\n 2762,\n 2763,\n 2764,\n 2764,\n 2765,\n 2766,\n 2767,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2769,\n 2769,\n 2769,\n 2770,\n 2771,\n 2771,\n 2772,\n 2772,\n 2772,\n 2773,\n 2773,\n 2773,\n 2774,\n 2775,\n 2776,\n 2777,\n 2777,\n 2777,\n 2777,\n 2778,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2780,\n 2780,\n 2781,\n 2781,\n 2781,\n 2781,\n 2781,\n 2781,\n 2781,\n 2781,\n 2782,\n 2782,\n 2782,\n 2783,\n 2784,\n 2784,\n 2785,\n 2785,\n 2785,\n 2786,\n 2786,\n 2787,\n 2787,\n 2787,\n 2788,\n 2789,\n 2789,\n 2790,\n 2791,\n 2791,\n 2792,\n 2792,\n 2793,\n 2794,\n 2795,\n 2796,\n 2796,\n 2796,\n 2796,\n 2796,\n 2796,\n 2797,\n 2797,\n 2797,\n 2797,\n 2798,\n 2798,\n 2798,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2800,\n 2801,\n 2802,\n 2802,\n 2803,\n 2803,\n 2803,\n 2803,\n 2803,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2805,\n 2806,\n 2806,\n 2806,\n 2806,\n 2807,\n 2807,\n 2808,\n 2808,\n 2809,\n 2810,\n 2811,\n 2811,\n 2811,\n 2811,\n 2811,\n 2812,\n 2813,\n 2814,\n 2814,\n 2814,\n 2814,\n 2814,\n 2814,\n 2814,\n 2815,\n 2816,\n 2817,\n 2818,\n 2818,\n 2818,\n 2818,\n 2818,\n 2819,\n 2820,\n 2820,\n 2820,\n 2820,\n 2820,\n 2820,\n 2820,\n 2821,\n 2821,\n 2822,\n 2823,\n 2823,\n 2823,\n 2823,\n 2823,\n 2824,\n 2824,\n 2824,\n 2824,\n 2824,\n 2824,\n 2825,\n 2825,\n 2826,\n 2827,\n 2828,\n 2829,\n 2829,\n 2829,\n 2829,\n 2829,\n 2829,\n 2829,\n 2830,\n 2830,\n 2830,\n 2830,\n 2830,\n 2830,\n 2830,\n 2830,\n 2830,\n 2830,\n 2830,\n 2831,\n 2831,\n 2831,\n 2831,\n 2831,\n 2831,\n 2832,\n 2832,\n 2832,\n 2832,\n 2832,\n 2832,\n 2832,\n 2832,\n 2832,\n 2833,\n 2833,\n 2834,\n 2835,\n 2836,\n 2836,\n 2837,\n 2838,\n 2838,\n 2839,\n 2839,\n 2839,\n 2840,\n 2841,\n 2841,\n 2841,\n 2841,\n 2842,\n 2843,\n 2844,\n 2845,\n 2846,\n 2847,\n 2848,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2850,\n 2850,\n 2851,\n 2852,\n 2852,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2854,\n 2854,\n 2855,\n 2856,\n 2857,\n 2857,\n 2858,\n 2859,\n 2859,\n 2860,\n 2860,\n 2861,\n 2861,\n 2862,\n 2862,\n 2862,\n 2863,\n 2863,\n 2864,\n 2864,\n 2865,\n 2865,\n 2866,\n 2866,\n 2867,\n 2867,\n 2868,\n 2868,\n 2868,\n 2868,\n 2869,\n 2869,\n 2870,\n 2871,\n 2871,\n 2871,\n 2871,\n 2872,\n 2872,\n 2872,\n 2872,\n 2872,\n 2873,\n 2873,\n 2874,\n 2875,\n 2875,\n 2875,\n 2875,\n 2875,\n 2875,\n 2875,\n 2876,\n 2877,\n 2877,\n 2877,\n 2877,\n 2877,\n 2877,\n 2877,\n 2877,\n 2878,\n 2878,\n 2879,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2881,\n 2881,\n 2882,\n 2882,\n 2882,\n 2882,\n 2882,\n 2882,\n 2882,\n 2882,\n 2882,\n 2883,\n 2883,\n 2884,\n 2885,\n 2886,\n 2887,\n 2887,\n 2887,\n 2888,\n 2889,\n 2890,\n 2891,\n 2892,\n 2893,\n 2894,\n 2895,\n 2895,\n 2896,\n 2897,\n 2898,\n 2899,\n 2899,\n 2899,\n 2899,\n 2899,\n 2899,\n 2899,\n 2899,\n 2899,\n 2899,\n 2899,\n 2900,\n 2900,\n 2901,\n 2902,\n 2902,\n 2902,\n 2902,\n 2902,\n 2902,\n 2902,\n 2902,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2904,\n 2905,\n 2906,\n 2906,\n 2907,\n 2908,\n 2908,\n 2908,\n 2909,\n 2910,\n 2911,\n 2912,\n 2913,\n 2914,\n 2914,\n 2914,\n 2915,\n 2916,\n 2916,\n 2917,\n 2918,\n 2918,\n 2918,\n 2918,\n 2919,\n 2920,\n 2921,\n 2922,\n 2923,\n 2924,\n 2925,\n 2925,\n 2926,\n 2927,\n 2928,\n 2929,\n 2930,\n 2931,\n 2931,\n 2932,\n 2932,\n 2932,\n 2932,\n 2933,\n 2934,\n 2934,\n 2934,\n 2934,\n 2935,\n 2936,\n 2936,\n 2936,\n 2937,\n 2938,\n 2938,\n 2939,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2941,\n 2942,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2944,\n 2944,\n 2945,\n 2945,\n 2945,\n 2946,\n 2947,\n 2947,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2949,\n 2950,\n 2951,\n 2952,\n 2952,\n 2952,\n 2952,\n 2952,\n 2953,\n 2954,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2956,\n 2957,\n 2958,\n 2958,\n 2958,\n 2959,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2961,\n 2962,\n 2962,\n 2963,\n 2963,\n 2963,\n 2963,\n 2964,\n 2964,\n 2964,\n 2965,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2967,\n 2968,\n 2968,\n 2968,\n 2968,\n 2969,\n 2970,\n 2970,\n 2971,\n 2972,\n 2973,\n 2974,\n 2975,\n 2975,\n 2975,\n 2975,\n 2975,\n 2976,\n 2976,\n 2977,\n 2978,\n 2979,\n 2979,\n 2980,\n 2980,\n 2980,\n 2980,\n 2980,\n 2981,\n 2981,\n 2982,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2984,\n 2985,\n 2986,\n 2986,\n 2986,\n 2987,\n 2988,\n 2989,\n 2990,\n 2990,\n 2991,\n 2992,\n 2993,\n 2994,\n 2995,\n 2996,\n 2996,\n 2996,\n 2997,\n 2997,\n 2997,\n 2998,\n 2999,\n 3000,\n 3001,\n 3001,\n 3001,\n 3001,\n 3002,\n 3003,\n 3003,\n 3004,\n 3004,\n 3004,\n 3005,\n 3006,\n 3007,\n 3008,\n 3008,\n 3008,\n 3008,\n 3008,\n 3009,\n 3010,\n 3011,\n 3012,\n 3012,\n 3013,\n 3013,\n 3013,\n 3014,\n 3015,\n 3016,\n 3016,\n 3017,\n 3017,\n 3018,\n 3019,\n 3020,\n 3021,\n 3022,\n 3022,\n 3023,\n 3024,\n 3025,\n 3026,\n 3027,\n 3028,\n 3029,\n 3030,\n 3031,\n 3031,\n 3032,\n 3033,\n 3033,\n 3033,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3035,\n 3035,\n 3036,\n 3037,\n 3037,\n 3037,\n 3037,\n 3037,\n 3037,\n 3037,\n 3037,\n 3037,\n 3038,\n 3039,\n 3039,\n 3039,\n 3039,\n 3040,\n 3040,\n 3041,\n 3041,\n 3041,\n 3041,\n 3041,\n 3041,\n 3041,\n 3041,\n 3042,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3044,\n 3044,\n 3045,\n 3045,\n 3045,\n 3046,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3048,\n 3048,\n 3048,\n 3049,\n 3050,\n 3051,\n 3051,\n 3052,\n 3052,\n 3053,\n 3053,\n 3054,\n 3054,\n 3054,\n 3054,\n 3054,\n 3054,\n 3055,\n 3055,\n 3055,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3057,\n 3057,\n 3057,\n 3057,\n 3057,\n 3057,\n 3058,\n 3059,\n 3059,\n 3059,\n 3059,\n 3060,\n 3060,\n 3061,\n 3062,\n 3063,\n 3063,\n 3064,\n 3064,\n 3065,\n 3066,\n 3067,\n 3068,\n 3069,\n 3070,\n 3070,\n 3070,\n 3070,\n 3071,\n 3071,\n 3071,\n 3072,\n 3072,\n 3072,\n 3072,\n 3072,\n 3072,\n 3072,\n 3072,\n 3073,\n 3073,\n 3074,\n 3074,\n 3074,\n 3074,\n 3074,\n 3074,\n 3074,\n 3074,\n 3074,\n 3075,\n 3075,\n 3076,\n 3077,\n 3078,\n 3079,\n 3080,\n 3081,\n 3082,\n 3083,\n 3084,\n 3085,\n 3086,\n 3087,\n 3087,\n 3087,\n 3088,\n 3089,\n 3089,\n 3089,\n 3089,\n 3090,\n 3091,\n 3091,\n 3091,\n 3092,\n 3093,\n 3094,\n 3095,\n 3096,\n 3097,\n 3098,\n 3099,\n 3100,\n 3100,\n 3101,\n 3102,\n 3103,\n 3104,\n 3104,\n 3105,\n 3106,\n 3107,\n 3108,\n 3108,\n 3109,\n 3109,\n 3109,\n 3109,\n 3109,\n 3109,\n 3110,\n 3110,\n 3110,\n 3111,\n 3112,\n 3113,\n 3113,\n 3114,\n 3114,\n 3115,\n 3115,\n 3116,\n 3116,\n 3116,\n 3116,\n 3116,\n 3117,\n 3118,\n 3118,\n 3118,\n 3119,\n 3119,\n 3120,\n 3121,\n 3122,\n 3123,\n 3124,\n 3125,\n 3125,\n 3125,\n 3126,\n 3127,\n 3127,\n 3128,\n 3129,\n 3129,\n 3130,\n 3131,\n 3132,\n 3132,\n 3132,\n 3132,\n 3132,\n 3132,\n 3132,\n 3132,\n 3133,\n 3134,\n 3134,\n 3134,\n 3134,\n 3135,\n 3136,\n 3137,\n 3137,\n 3138,\n 3138,\n 3138,\n 3138,\n 3138,\n 3138,\n 3138,\n 3138,\n 3139,\n 3139,\n 3139,\n 3140,\n 3141,\n 3142,\n 3142,\n 3142,\n 3142,\n 3142,\n 3143,\n 3144,\n 3145,\n 3146,\n 3147,\n 3147,\n 3148,\n 3149,\n 3150,\n 3151,\n 3151,\n 3151,\n 3152,\n 3152,\n 3152,\n 3152,\n 3152,\n 3152,\n 3152,\n 3153,\n 3153,\n 3153,\n 3154,\n 3155,\n 3156,\n 3157,\n 3158,\n 3158,\n 3158,\n 3158,\n 3159,\n 3160,\n 3161,\n 3161,\n 3161,\n 3161,\n 3162,\n 3163,\n 3164,\n 3165,\n 3166,\n 3167,\n 3168,\n 3169,\n 3169,\n 3169,\n 3169,\n 3169,\n 3169,\n 3169,\n 3170,\n 3170,\n 3171,\n 3171,\n 3172,\n 3173,\n 3174,\n 3175,\n 3176,\n 3177,\n 3178,\n 3179,\n 3179,\n 3179,\n 3180,\n 3181,\n 3182,\n 3182,\n 3182,\n 3183,\n 3184,\n 3185,\n 3185,\n 3185,\n 3186,\n 3187,\n 3187,\n 3187,\n 3187,\n 3187,\n 3187,\n 3187,\n 3187,\n 3187,\n 3188,\n 3188,\n 3189,\n 3189,\n 3190,\n 3191,\n 3191,\n 3191,\n 3191,\n 3191,\n 3192,\n 3192,\n 3193,\n 3194,\n 3195,\n 3195,\n 3195,\n 3195,\n 3195,\n 3195,\n 3195,\n 3195,\n 3195,\n 3195,\n 3195,\n 3196,\n 3197,\n 3197,\n 3197,\n 3197,\n 3197,\n 3198,\n 3198,\n 3198,\n 3199,\n 3200,\n 3201,\n 3202,\n 3203,\n 3204,\n 3205,\n 3206,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3208,\n 3208,\n 3208,\n 3208,\n 3208,\n 3208,\n 3209,\n 3210,\n 3210,\n 3211,\n 3211,\n 3211,\n 3211,\n 3211,\n 3211,\n 3211,\n 3212,\n 3212,\n 3212,\n 3212,\n 3212,\n 3212,\n 3213,\n 3213,\n 3213,\n 3214,\n 3214,\n 3214,\n 3215,\n 3216,\n 3216,\n 3216,\n 3216,\n 3216,\n 3216,\n 3216,\n 3216,\n 3217,\n 3217,\n 3217,\n 3217,\n 3218,\n 3219,\n 3220,\n 3220,\n 3220,\n 3220,\n 3220,\n 3221,\n 3221,\n 3222,\n 3223,\n 3223,\n 3223,\n 3224,\n 3225,\n 3225,\n 3225,\n 3225,\n 3225,\n 3225,\n 3225,\n 3225,\n 3225,\n 3225,\n 3225,\n 3226,\n 3226,\n 3226,\n 3226,\n 3226,\n 3226,\n 3227,\n 3227,\n 3228,\n 3228,\n 3228,\n 3228,\n 3228,\n 3228,\n 3228,\n 3228,\n 3228,\n 3228,\n 3228,\n 3229,\n 3230,\n 3230,\n 3231,\n 3231,\n 3232,\n 3232,\n 3232,\n 3233,\n 3233,\n 3233,\n 3234,\n 3235,\n 3236,\n 3237,\n 3237,\n 3237,\n 3238,\n 3238,\n 3238,\n 3238,\n 3238,\n 3238,\n 3238,\n 3238,\n 3238,\n 3238,\n 3239,\n 3240,\n 3241,\n 3241,\n 3241,\n 3242,\n 3242,\n 3243,\n 3243,\n 3244,\n 3245,\n 3246,\n 3246,\n 3246,\n 3246,\n 3247,\n 3248,\n 3249,\n 3250,\n 3250,\n 3251,\n 3252,\n 3253,\n 3254,\n 3254,\n 3255,\n 3255,\n 3255,\n 3255,\n 3256,\n 3256,\n 3256,\n 3256,\n 3256,\n 3256,\n 3256,\n 3257,\n 3258,\n 3258,\n 3258,\n 3259,\n 3259,\n 3259,\n 3260,\n 3260,\n 3260,\n 3260,\n 3260,\n 3261,\n 3261,\n 3261,\n 3261,\n 3262,\n 3262,\n 3263,\n 3263,\n 3263,\n 3263,\n 3263,\n 3263,\n 3263,\n 3263,\n 3263,\n 3263,\n 3264,\n 3264,\n 3265,\n 3266,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3268,\n 3268,\n 3268,\n 3268,\n 3268,\n 3268,\n 3268,\n 3268,\n 3268,\n 3269,\n 3270,\n 3270,\n 3270,\n 3270,\n 3271,\n 3271,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3273,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3275,\n 3276,\n 3277,\n 3277,\n 3277,\n 3278,\n 3278,\n 3279,\n 3279,\n 3279,\n 3279,\n 3280,\n 3281,\n 3282,\n 3283,\n 3283,\n 3284,\n 3285,\n 3286,\n 3286,\n 3287,\n 3287,\n 3288,\n 3288,\n 3289,\n 3289,\n 3289,\n 3289,\n 3290,\n 3290,\n 3291,\n 3292,\n 3292,\n 3292,\n 3292,\n 3292,\n 3292,\n 3292,\n 3293,\n 3293,\n 3294,\n 3294,\n 3295,\n 3295,\n 3295,\n 3295,\n 3295,\n 3296,\n 3296,\n 3297,\n 3298,\n 3298,\n 3298,\n 3298,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3300,\n 3300,\n 3301,\n 3302,\n 3303,\n 3304,\n 3304,\n 3304,\n 3304,\n 3304,\n 3305,\n 3306,\n 3306,\n 3306,\n 3306,\n 3307,\n 3308,\n 3309,\n 3309,\n 3309,\n 3309,\n 3309,\n 3309,\n 3309,\n 3309,\n 3309,\n 3310,\n 3310,\n 3310,\n 3310,\n 3311,\n 3312,\n 3313,\n 3314,\n 3315,\n 3316,\n 3316,\n 3317,\n 3317,\n 3317,\n 3317,\n 3318,\n 3318,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3320,\n 3320,\n 3321,\n 3321,\n 3321,\n 3321,\n 3321,\n 3322,\n 3323,\n 3323,\n 3323,\n 3324,\n 3324,\n 3324,\n 3324,\n 3324,\n 3325,\n 3325,\n 3326,\n 3327,\n 3327,\n 3327,\n 3327,\n 3328,\n 3328,\n 3328,\n 3329,\n 3329,\n 3329,\n 3330,\n 3331,\n 3332,\n 3332,\n 3333,\n 3334,\n 3334,\n 3334,\n 3334,\n 3334,\n 3334,\n 3334,\n 3334,\n 3334,\n 3334,\n 3335,\n 3335,\n 3335,\n 3336,\n 3337,\n 3338,\n 3339,\n 3339,\n 3339,\n 3340,\n 3340,\n 3341,\n 3342,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3344,\n 3345,\n 3345,\n 3346,\n 3347,\n 3348,\n 3349,\n 3350,\n 3351,\n 3352,\n 3352,\n 3352,\n 3352,\n 3353,\n 3353,\n 3353,\n 3354,\n 3354,\n 3355,\n 3355,\n 3355,\n 3355,\n 3355,\n 3355,\n 3356,\n 3357,\n 3357,\n 3357,\n 3357,\n 3357,\n 3357,\n 3357,\n 3357,\n 3357,\n 3357,\n 3358,\n 3359,\n 3360,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3362,\n 3363,\n 3363,\n 3363,\n 3363,\n 3364,\n 3365,\n 3365,\n 3365,\n 3365,\n 3365,\n 3366,\n 3366,\n 3366,\n 3367,\n 3367,\n 3367,\n 3367,\n 3368,\n 3368,\n 3369,\n 3369,\n 3369,\n 3370,\n 3371,\n 3371,\n 3371,\n 3371,\n 3371,\n 3372,\n 3372,\n 3372,\n 3373,\n 3374,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3376,\n 3377,\n 3377,\n 3377,\n 3377,\n 3378,\n 3378,\n 3378,\n 3378,\n 3378,\n 3378,\n 3378,\n 3378,\n 3379,\n 3379,\n 3379,\n 3379,\n 3379,\n 3379,\n 3379,\n 3379,\n 3380,\n 3380,\n 3380,\n 3381,\n 3382,\n 3383,\n 3384,\n 3385,\n 3385,\n 3385,\n 3385,\n 3385,\n 3386,\n 3387,\n 3388,\n 3389,\n 3389,\n 3389,\n 3389,\n 3389,\n 3389,\n 3389,\n 3389,\n 3389,\n 3390,\n 3390,\n 3390,\n 3390,\n 3390,\n 3390,\n 3390,\n 3391,\n 3391,\n 3392,\n 3393,\n 3394,\n 3394,\n 3394,\n 3394,\n 3394,\n 3394,\n 3394,\n 3394,\n 3394,\n 3394,\n 3395,\n 3395,\n 3395,\n 3395,\n 3396,\n 3397,\n 3398,\n 3399,\n 3399,\n 3399,\n 3400,\n 3400,\n 3400,\n 3400,\n 3400,\n 3401,\n 3401,\n 3401,\n 3402,\n 3402,\n 3402,\n 3403,\n 3404,\n 3404,\n 3404,\n 3404,\n 3404,\n 3405,\n 3406,\n 3407,\n 3407,\n 3407,\n 3407,\n 3407,\n 3407,\n 3407,\n 3407,\n 3408,\n 3409,\n 3410,\n 3410,\n 3410,\n 3411,\n 3411,\n 3411,\n 3412,\n 3413,\n 3413,\n 3414,\n 3414,\n 3415,\n 3415,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3418,\n 3419,\n 3419,\n 3420,\n 3420,\n 3420,\n 3421,\n 3421,\n 3422,\n 3422,\n 3423,\n 3424,\n 3424,\n 3424,\n 3424,\n 3424,\n 3424,\n 3425,\n 3425,\n 3426,\n 3427,\n 3427,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3429,\n 3429,\n 3430,\n 3430,\n 3431,\n 3431,\n 3431,\n 3431,\n 3431,\n 3431,\n 3432,\n 3432,\n 3433,\n 3433,\n 3433,\n 3433,\n 3433,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3436,\n 3437,\n 3438,\n 3438,\n 3438,\n 3438,\n 3438,\n 3438,\n 3438,\n 3438,\n 3439,\n 3439,\n 3439,\n 3440,\n 3440,\n 3440,\n 3440,\n 3440,\n 3440,\n 3441,\n 3441,\n 3441,\n 3442,\n 3442,\n 3442,\n 3442,\n 3442,\n 3442,\n 3442,\n 3443,\n 3443,\n 3443,\n 3443,\n 3444,\n 3445,\n 3446,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3448,\n 3448,\n 3448,\n 3448,\n 3448,\n 3448,\n 3448,\n 3448,\n 3448,\n 3449,\n 3450,\n 3450,\n 3451,\n 3452,\n 3452,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3454,\n 3455,\n 3455,\n 3455,\n 3455,\n 3456,\n 3457,\n 3458,\n 3458,\n 3458,\n 3458,\n 3458,\n 3458,\n 3458,\n 3458,\n 3458,\n 3459,\n 3459,\n 3460,\n 3460,\n 3461,\n 3461,\n 3461,\n 3461,\n 3462,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3464,\n 3465,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3467,\n 3468,\n 3469,\n 3469,\n 3469,\n 3469,\n 3469,\n 3469,\n 3470,\n 3470,\n 3471,\n 3471,\n 3471,\n 3472,\n 3472,\n 3472,\n 3473,\n 3473,\n 3473,\n 3474,\n 3474,\n 3474,\n 3475,\n 3476,\n 3476,\n 3477,\n 3478,\n 3479,\n 3479,\n 3479,\n 3479,\n 3479,\n 3479,\n 3480,\n 3481,\n 3481,\n 3482,\n 3482,\n 3482,\n 3482,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3485,\n 3485,\n 3485,\n 3485,\n 3485,\n 3485,\n 3485,\n 3485,\n 3485,\n 3486,\n 3486,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3488,\n 3489,\n 3489,\n 3489,\n 3489,\n 3489,\n 3490,\n 3490,\n 3490,\n 3490,\n 3490,\n 3490,\n 3490,\n 3490,\n 3491,\n 3492,\n 3492,\n 3492,\n 3492,\n 3493,\n 3493,\n 3493,\n 3493,\n 3493,\n 3493,\n 3493,\n 3493,\n 3493,\n 3493,\n 3493,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3495,\n 3495,\n 3495,\n 3495,\n 3495,\n 3496,\n 3497,\n 3498,\n 3499,\n 3500,\n 3500,\n 3500,\n 3500,\n 3500,\n 3500,\n 3500,\n 3500,\n 3501,\n 3501,\n 3502,\n 3502,\n 3503,\n 3504,\n 3505,\n 3506,\n 3506,\n 3507,\n 3507,\n 3508,\n 3508,\n 3509,\n 3510,\n 3510,\n 3511,\n 3512,\n 3512,\n 3512,\n 3512,\n 3512,\n 3513,\n 3514,\n 3515,\n 3515,\n 3516,\n 3516,\n 3516,\n 3516,\n 3516,\n 3517,\n 3518,\n 3519,\n 3520,\n 3520,\n 3521,\n 3522,\n 3523,\n 3524,\n 3524,\n 3524,\n 3525,\n 3525,\n 3526,\n 3527,\n 3528,\n 3529,\n 3529,\n 3530,\n 3531,\n 3532,\n 3533,\n 3534,\n 3534,\n 3534,\n 3534,\n 3535,\n 3535,\n 3535,\n 3536,\n 3537,\n 3537,\n 3538,\n 3539,\n 3540,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3542,\n 3543,\n 3544,\n 3544,\n 3545,\n 3546,\n 3547,\n 3548,\n 3549,\n 3550,\n 3551,\n 3552,\n 3553,\n 3554,\n 3555,\n 3556,\n 3557,\n 3557,\n 3558,\n 3558,\n 3558,\n 3558,\n 3558,\n 3559,\n 3559,\n 3559,\n 3560,\n 3561,\n 3562,\n 3563,\n 3563,\n 3563,\n 3564,\n 3564,\n 3565,\n 3566,\n 3567,\n 3567,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3569,\n 3569,\n 3569,\n 3569,\n 3569,\n 3569,\n 3570,\n 3571,\n 3571,\n 3571,\n 3572,\n 3573,\n 3573,\n 3573,\n 3573,\n 3573,\n 3573,\n 3574,\n 3575,\n 3575,\n 3575,\n 3575,\n 3576,\n 3576,\n 3577,\n 3578,\n 3579,\n 3580,\n 3581,\n 3582,\n 3583,\n 3583,\n 3583,\n 3583,\n 3584,\n 3585,\n 3586,\n 3586,\n 3587,\n 3587,\n 3588,\n 3589,\n 3590,\n 3590,\n 3590,\n 3590,\n 3591,\n 3592,\n 3592,\n 3593,\n 3594,\n 3595,\n 3596,\n 3596,\n 3596,\n 3597,\n 3598,\n 3599,\n 3600,\n 3601,\n 3601,\n 3602,\n 3603,\n 3603,\n 3603,\n 3604,\n 3604,\n 3604,\n 3604,\n 3604,\n 3605,\n 3606,\n 3607,\n 3608,\n 3609,\n 3610,\n 3610,\n 3610,\n 3611,\n 3611,\n 3612,\n 3613,\n 3614,\n 3614,\n 3615,\n 3616,\n 3616,\n 3617,\n 3617,\n 3617,\n 3617,\n 3618,\n 3619,\n 3620,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3622,\n 3623,\n 3624,\n 3625,\n 3626,\n 3627,\n 3627,\n 3627,\n 3628,\n 3628,\n 3629,\n 3629,\n 3629,\n 3630,\n 3631,\n 3631,\n 3632,\n 3632,\n 3632,\n 3632,\n 3633,\n 3634,\n 3634,\n 3635,\n 3636,\n 3636,\n 3637,\n 3637,\n 3638,\n 3639,\n 3639,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3641,\n 3641,\n 3641,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3643,\n 3643,\n 3643,\n 3643,\n 3644,\n 3644,\n 3645,\n 3645,\n 3645,\n 3645,\n 3646,\n 3647,\n 3648,\n 3648,\n 3648,\n 3648,\n 3649,\n 3650,\n 3650,\n 3650,\n 3651,\n 3652,\n 3653,\n 3653,\n 3654,\n 3655,\n 3656,\n 3656,\n 3657,\n 3657,\n 3657,\n 3657,\n 3658,\n 3658,\n 3658,\n 3658,\n 3658,\n 3658,\n 3659,\n 3660,\n 3661,\n 3662,\n 3662,\n 3662,\n 3662,\n 3662,\n 3663,\n 3664,\n 3664,\n 3664,\n 3664,\n 3665,\n 3666,\n 3666,\n 3667,\n 3668,\n 3669,\n 3669,\n 3670,\n 3671,\n 3671,\n 3671,\n 3671,\n 3672,\n 3672,\n 3672,\n 3672,\n 3672,\n 3672,\n 3672,\n 3672,\n 3673,\n 3674,\n 3674,\n 3675,\n 3675,\n 3675,\n 3675,\n 3675,\n 3676,\n 3676,\n 3677,\n 3678,\n 3679,\n 3680,\n 3680,\n 3681,\n 3682,\n 3682,\n 3682,\n 3683,\n 3684,\n 3684,\n 3684,\n 3684,\n 3684,\n 3684,\n 3684,\n 3684,\n 3685,\n 3686,\n 3687,\n 3688,\n 3689,\n 3689,\n 3690,\n 3691,\n 3692,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3694,\n 3695,\n 3695,\n 3695,\n 3696,\n 3696,\n 3697,\n 3697,\n 3697,\n 3697,\n 3697,\n 3698,\n 3699,\n 3700,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3702,\n 3703,\n 3703,\n 3703,\n 3704,\n 3705,\n 3706,\n 3706,\n 3706,\n 3707,\n 3707,\n 3708,\n 3709,\n 3710,\n 3711,\n 3712,\n 3712,\n 3712,\n 3712,\n 3713,\n 3713,\n 3713,\n 3713,\n 3713,\n 3714,\n 3715,\n 3715,\n 3716,\n 3717,\n 3717,\n 3718,\n 3719,\n 3720,\n 3721,\n 3721,\n 3721,\n 3721,\n 3722,\n 3722,\n 3723,\n 3723,\n 3724,\n 3725,\n 3725,\n 3725,\n 3726,\n 3726,\n 3727,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3729,\n 3729,\n 3729,\n 3729,\n 3729,\n 3729,\n 3729,\n 3730,\n 3731,\n 3732,\n 3733,\n 3734,\n 3735,\n 3736,\n 3737,\n 3738,\n 3739,\n 3739,\n 3739,\n 3740,\n 3740,\n 3741,\n 3741,\n 3741,\n 3742,\n 3743,\n 3744,\n 3745,\n 3745,\n 3746,\n 3746,\n 3747,\n 3747,\n 3748,\n 3748,\n 3749,\n 3749,\n 3750,\n 3750,\n 3751,\n 3751,\n 3751,\n 3751,\n 3751,\n 3751,\n 3752,\n 3753,\n 3754,\n 3755,\n 3755,\n 3755,\n 3755,\n 3756,\n 3756,\n 3757,\n 3758,\n 3758,\n 3759,\n 3760,\n 3760,\n 3760,\n 3761,\n 3761,\n 3762,\n 3763,\n 3764,\n 3765,\n 3766,\n 3767,\n 3767,\n 3767,\n 3767,\n 3768,\n 3768,\n 3768,\n 3768,\n 3768,\n 3769,\n 3770,\n 3770,\n 3771,\n 3772,\n 3772,\n 3772,\n 3773,\n 3774,\n 3775,\n 3776,\n 3776,\n 3777,\n 3777,\n 3778,\n 3778,\n 3779,\n 3779,\n 3780,\n 3780,\n 3781,\n 3782,\n 3783,\n 3783,\n 3784,\n 3785,\n 3786,\n 3787,\n 3787,\n 3788,\n 3788,\n 3789,\n 3790,\n 3791,\n 3792,\n 3793,\n 3793,\n 3793,\n 3793,\n 3793,\n 3793,\n 3793,\n 3793,\n 3793,\n 3793,\n 3793,\n 3794,\n 3795,\n 3796,\n 3797,\n 3797,\n 3797,\n 3798,\n 3799,\n 3800,\n 3800,\n 3800,\n 3800,\n 3801,\n 3801,\n 3801,\n 3801,\n 3802,\n 3802,\n 3802,\n 3803,\n 3804,\n 3805,\n 3805,\n 3806,\n 3807,\n 3807,\n 3808,\n 3809,\n 3810,\n 3811,\n 3811,\n 3811,\n 3811,\n 3812,\n 3813,\n 3813,\n 3814,\n 3815,\n 3816,\n 3816,\n 3817,\n 3818,\n 3819,\n 3819,\n 3819,\n 3819,\n 3819,\n 3819,\n 3820,\n 3820,\n 3820,\n 3820,\n 3820,\n 3820,\n 3820,\n 3820,\n 3821,\n 3821,\n 3821,\n 3822,\n 3823,\n 3824,\n 3824,\n 3824,\n 3824,\n 3825,\n 3825,\n 3826,\n 3826,\n 3826,\n 3827,\n 3827,\n 3827,\n 3827,\n 3828,\n 3829,\n 3830,\n 3830,\n 3831,\n 3832,\n 3833,\n 3834,\n 3835,\n 3836,\n 3836,\n 3836,\n 3837,\n 3838,\n 3838,\n 3839,\n 3840,\n 3841,\n 3842,\n 3843,\n 3844,\n 3845,\n 3846,\n 3846,\n 3847,\n 3847,\n 3847,\n 3847,\n 3847,\n 3847,\n 3848,\n 3848,\n 3849,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3851,\n 3852,\n 3853,\n 3854,\n 3855,\n 3856,\n 3857,\n 3857,\n 3857,\n 3857,\n 3857,\n 3857,\n 3858,\n 3859,\n 3860,\n 3860,\n 3860,\n 3860,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3862,\n 3862,\n 3863,\n 3863,\n 3863,\n 3863,\n 3863,\n 3863,\n 3864,\n 3864,\n 3864,\n 3865,\n 3865,\n 3865,\n 3865,\n 3866,\n 3866,\n 3867,\n 3867,\n 3868,\n 3869,\n 3870,\n 3871,\n 3871,\n 3871,\n 3871,\n 3872,\n 3872,\n 3872,\n 3872,\n 3872,\n 3872,\n 3872,\n 3873,\n 3873,\n 3873,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3876,\n 3876,\n 3876,\n 3876,\n 3877,\n 3877,\n 3877,\n 3877,\n 3878,\n 3879,\n 3880,\n 3880,\n 3880,\n 3880,\n 3880,\n 3881,\n 3882,\n 3883,\n 3884,\n 3885,\n 3886,\n 3887,\n 3888,\n 3889,\n 3890,\n 3890,\n 3891,\n 3892,\n 3893,\n 3893,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3895,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3899,\n 3899,\n 3900,\n 3900,\n 3901,\n 3902,\n 3902,\n 3902,\n 3902,\n 3902,\n 3902,\n 3902,\n 3902,\n 3902,\n 3903,\n 3903,\n 3903,\n 3903,\n 3904,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3906,\n 3906,\n 3906,\n 3907,\n 3908,\n 3909,\n 3909,\n 3909,\n 3909,\n 3910,\n 3911,\n 3911,\n 3911,\n 3912,\n 3913,\n 3913,\n 3913,\n 3914,\n 3915,\n 3916,\n 3917,\n 3918,\n 3919,\n 3920,\n 3921,\n 3922,\n 3923,\n 3924,\n 3924,\n 3925,\n 3925,\n 3925,\n 3925,\n 3926,\n 3927,\n 3928,\n 3929,\n 3930,\n 3931,\n 3932,\n 3933,\n 3934,\n 3934,\n 3935,\n 3936,\n 3937,\n 3938,\n 3939,\n 3940,\n 3940,\n 3941,\n 3942,\n 3943,\n 3943,\n 3944,\n 3945,\n 3946,\n 3947,\n 3948,\n 3949,\n 3949,\n 3950,\n 3951,\n 3951,\n 3951,\n 3952,\n 3953,\n 3953,\n 3953,\n 3954,\n 3955,\n 3956,\n 3957,\n 3958,\n 3959,\n 3960,\n 3960,\n 3960,\n 3960,\n 3960,\n 3961,\n 3961,\n 3961,\n 3961,\n 3961,\n 3962,\n 3963,\n 3964,\n 3964,\n 3964,\n 3964,\n 3964,\n 3964,\n 3964,\n 3964,\n 3965,\n 3966,\n 3967,\n 3968,\n 3968,\n 3969,\n 3969,\n 3970,\n 3971,\n 3971,\n 3972,\n 3972,\n 3973,\n 3974,\n 3974,\n 3975,\n 3975,\n 3975,\n 3975,\n 3975,\n 3975,\n 3975,\n 3975,\n 3975,\n 3975,\n 3976,\n 3977,\n 3977,\n 3978,\n 3979,\n 3979,\n 3980,\n 3981,\n 3982,\n 3983,\n 3983,\n 3983,\n 3983,\n 3983,\n 3983,\n 3983,\n 3984,\n 3984,\n 3984,\n 3984,\n 3984,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3986,\n 3987,\n 3987,\n 3987,\n 3987,\n 3987,\n 3987,\n 3987,\n 3987,\n 3988,\n 3988,\n 3988,\n 3988,\n 3988,\n 3988,\n 3988,\n 3988,\n 3989,\n 3990,\n 3990,\n 3990,\n 3990,\n 3990,\n 3990,\n 3990,\n 3990,\n 3990,\n 3991,\n 3991,\n 3992,\n 3993,\n 3993,\n 3994,\n 3994,\n 3994,\n 3994,\n 3995,\n 3996,\n 3997,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3999,\n 3999,\n 4000,\n 4000,\n 4000,\n 4001,\n 4001,\n 4002,\n 4002,\n 4002,\n 4003,\n 4003,\n 4004,\n 4005,\n 4005,\n 4005,\n 4005,\n 4005,\n 4005,\n 4005,\n 4005,\n 4005,\n 4005,\n 4006,\n 4007,\n 4008,\n 4009,\n 4010,\n 4011,\n 4011,\n 4012,\n 4012,\n 4012,\n 4012,\n 4012,\n 4013,\n 4013,\n 4013,\n 4013,\n 4014,\n 4015,\n 4016,\n 4017,\n 4018,\n 4018,\n 4019,\n 4020,\n 4020,\n 4020,\n 4021,\n 4021,\n 4022,\n 4023,\n 4023,\n 4024,\n 4024,\n 4024,\n 4024,\n 4025,\n 4026,\n 4027,\n 4028,\n 4028,\n 4028,\n 4028,\n 4028,\n 4028,\n 4028,\n 4029,\n 4029,\n 4030,\n 4031,\n 4031,\n 4032,\n 4032,\n 4033,\n 4034,\n 4035,\n 4035,\n 4035,\n 4036,\n 4037,\n 4037,\n 4038,\n 4038,\n 4039,\n 4039,\n 4040,\n 4040,\n 4041,\n 4042,\n 4043,\n 4044,\n 4044,\n 4044,\n 4044,\n 4044,\n 4044,\n 4044,\n 4044,\n 4044,\n 4045,\n 4046,\n 4047,\n 4048,\n 4049,\n 4050,\n 4050,\n 4050,\n 4050,\n 4051,\n 4052,\n 4052,\n 4052,\n 4053,\n 4054,\n 4055,\n 4056,\n 4056,\n 4057,\n 4058,\n 4058,\n 4058,\n 4059,\n 4059,\n 4059,\n 4059,\n 4059,\n 4059,\n 4059,\n 4060,\n 4061,\n 4061,\n 4061,\n 4062,\n 4062,\n 4062,\n 4062,\n 4062,\n 4062,\n 4062,\n 4063,\n 4063,\n 4063,\n 4063,\n 4064,\n 4065,\n 4065,\n 4065,\n 4065,\n 4065,\n 4065,\n 4065,\n 4065,\n 4065,\n 4066,\n 4067,\n 4068,\n 4069,\n 4070,\n 4070,\n 4070,\n 4070,\n 4070,\n 4071,\n 4071,\n 4071,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4073,\n 4073,\n 4074,\n 4074,\n 4075,\n 4075,\n 4075,\n 4075,\n 4075,\n 4076,\n 4076,\n 4076,\n 4076,\n 4076,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4078,\n 4078,\n 4079,\n 4079,\n 4080,\n 4080,\n 4080,\n 4080,\n 4080,\n 4080,\n 4081,\n 4082,\n 4082,\n 4082,\n 4082,\n 4082,\n 4082,\n 4082,\n 4082,\n 4082,\n 4082,\n 4082,\n 4083,\n 4083,\n 4084,\n 4084,\n 4085,\n 4086,\n 4086,\n 4087,\n 4087,\n 4088,\n 4088,\n 4088,\n 4089,\n 4090,\n 4091,\n 4091,\n 4092,\n 4092,\n 4092,\n 4093,\n 4094,\n 4095,\n 4096,\n 4097,\n 4098,\n 4098,\n 4099,\n 4099,\n 4100,\n 4100,\n 4100,\n 4101,\n 4102,\n 4102,\n 4103,\n 4104,\n 4105,\n 4106,\n 4107,\n 4108,\n 4108,\n 4109,\n 4110,\n 4110,\n 4111,\n 4112,\n 4112,\n 4112,\n 4112,\n 4112,\n 4112,\n 4112,\n 4113,\n 4114,\n 4115,\n 4116,\n 4117,\n 4118,\n 4118,\n 4118,\n 4119,\n 4119,\n 4119,\n 4119,\n 4119,\n 4120,\n 4121,\n 4122,\n 4123,\n 4124,\n 4125,\n 4126,\n 4127,\n 4127,\n 4127,\n 4127,\n 4127,\n 4128,\n 4129,\n 4129,\n 4129,\n 4129,\n 4129,\n 4129,\n 4130,\n 4130,\n 4130,\n 4130,\n 4130,\n 4130,\n 4130,\n 4131,\n 4131,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4133,\n 4133,\n 4133,\n 4134,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4136,\n 4136,\n 4136,\n 4136,\n 4136,\n 4137,\n 4137,\n 4138,\n 4138,\n 4138,\n 4139,\n 4139,\n 4140,\n 4141,\n 4142,\n 4142,\n 4142,\n 4142,\n 4142,\n 4142,\n 4142,\n 4142,\n 4142,\n 4142,\n 4143,\n 4143,\n 4143,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4145,\n 4145,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4147,\n 4148,\n 4149,\n 4150,\n 4151,\n 4151,\n 4152,\n 4152,\n 4152,\n 4153,\n 4153,\n 4154,\n 4154,\n 4155,\n 4156,\n 4157,\n 4158,\n 4159,\n 4160,\n 4160,\n 4161,\n 4162,\n 4163,\n 4164,\n 4165,\n 4166,\n 4167,\n 4167,\n 4168,\n 4169,\n 4169,\n 4169,\n 4170,\n 4171,\n 4171,\n 4171,\n 4171,\n 4172,\n 4173,\n 4174,\n 4175,\n 4175,\n 4176,\n 4176,\n 4176,\n 4177,\n 4177,\n 4177,\n 4177,\n 4177,\n 4177,\n 4178,\n 4179,\n 4180,\n 4181,\n 4182,\n 4183,\n 4184,\n 4184,\n 4184,\n 4185,\n 4186,\n 4187,\n 4188,\n 4189,\n 4190,\n 4191,\n 4192,\n 4192,\n 4192,\n 4192,\n 4193,\n 4194,\n 4194,\n 4194,\n 4195,\n 4195,\n 4195,\n 4195,\n 4195,\n 4195,\n 4195,\n 4195,\n 4195,\n 4195,\n 4195,\n 4196,\n 4197,\n 4197,\n 4197,\n 4198,\n 4199,\n 4200,\n 4201,\n 4202,\n 4202,\n 4203,\n 4204,\n 4205,\n 4206,\n 4207,\n 4208,\n 4209,\n 4209,\n 4210,\n 4211,\n 4211,\n 4211,\n 4212,\n 4213,\n 4213,\n 4213,\n 4214,\n 4214,\n 4215,\n 4216,\n 4216,\n 4216,\n 4217,\n 4218,\n 4219,\n 4220,\n 4221,\n 4222,\n 4223,\n 4223,\n 4223,\n 4223,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4225,\n 4226,\n 4226,\n 4226,\n 4227,\n 4228,\n 4228,\n 4228,\n 4229,\n 4229,\n 4230,\n 4231,\n 4232,\n 4233,\n 4234,\n 4235,\n 4235,\n 4235,\n 4236,\n 4237,\n 4238,\n 4239,\n 4239,\n 4239,\n 4239,\n 4239,\n 4239,\n 4239,\n 4240,\n 4240,\n 4240,\n 4241,\n 4242,\n 4242,\n 4242,\n 4242,\n 4242,\n 4242,\n 4242,\n 4242,\n 4242,\n 4242,\n 4243,\n 4243,\n 4243,\n 4244,\n 4245,\n 4245,\n 4245,\n 4245,\n 4245,\n 4245,\n 4246,\n 4247,\n 4247,\n 4248,\n 4249,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4251,\n 4252,\n 4253,\n 4254,\n 4255,\n 4256,\n 4257,\n 4257,\n 4257,\n 4258,\n 4259,\n 4260,\n 4261,\n 4262,\n 4262,\n 4263,\n 4264,\n 4265,\n 4266,\n 4267,\n 4268,\n 4269,\n 4270,\n 4270,\n 4270,\n 4270,\n 4270,\n 4270,\n 4270,\n 4270,\n 4271,\n 4271,\n 4272,\n 4273,\n 4274,\n 4274,\n 4274,\n 4274,\n 4274,\n 4274,\n 4275,\n 4276,\n 4276,\n 4276,\n 4276,\n 4276,\n 4276,\n 4276,\n 4276,\n 4276,\n 4277,\n 4277,\n 4278,\n 4279,\n 4280,\n 4281,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4283,\n 4283,\n 4284,\n 4284,\n 4284,\n 4284,\n 4284,\n 4284,\n 4285,\n 4286,\n 4287,\n 4287,\n 4287,\n 4287,\n 4288,\n 4288,\n 4289,\n 4290,\n 4290,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4292,\n 4292,\n 4292,\n 4292,\n 4293,\n 4294,\n 4294,\n 4294,\n 4294,\n 4294,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4297,\n 4297,\n 4297,\n 4298,\n 4299,\n 4300,\n 4300,\n 4300,\n 4301,\n 4301,\n 4301,\n 4301,\n 4301,\n 4301,\n 4302,\n 4302,\n 4303,\n 4304,\n 4304,\n 4305,\n 4305,\n 4305,\n 4306,\n 4306,\n 4306,\n 4306,\n 4306,\n 4306,\n 4306,\n 4306,\n 4306,\n 4307,\n 4308,\n 4308,\n 4308,\n 4308,\n 4308,\n 4309,\n 4309,\n 4309,\n 4309,\n 4310,\n 4311,\n 4311,\n 4311,\n 4311,\n 4311,\n 4311,\n 4312,\n 4312,\n 4313,\n 4313,\n 4314,\n 4314,\n 4314,\n 4314,\n 4314,\n 4314,\n 4315,\n 4315,\n 4315,\n 4315,\n 4315,\n 4315,\n 4316,\n 4317,\n 4318,\n 4319,\n 4320,\n 4321,\n 4322,\n 4323,\n 4324,\n 4324,\n 4324,\n 4324,\n 4324,\n 4324,\n 4324,\n 4325,\n 4325,\n 4325,\n 4325,\n 4325,\n 4325,\n 4325,\n 4325,\n 4325,\n 4326,\n 4326,\n 4326,\n 4326,\n 4326,\n 4326,\n 4326,\n 4327,\n 4328,\n 4329,\n 4329,\n 4329,\n 4330,\n 4331,\n 4332,\n 4333,\n 4334,\n 4334,\n 4334,\n 4335,\n 4336,\n 4337,\n 4337,\n 4337,\n 4337,\n 4337,\n 4337,\n 4338,\n 4339,\n 4340,\n 4340,\n 4340,\n 4341,\n 4342,\n 4342,\n 4343,\n 4344,\n 4345,\n 4345,\n 4345,\n 4346,\n 4347,\n 4348,\n 4348,\n 4348,\n 4348,\n 4349,\n 4350,\n 4351,\n 4351,\n 4351,\n 4352,\n 4352,\n 4353,\n 4353,\n 4353,\n 4354,\n 4355,\n 4355,\n 4356,\n 4357,\n 4358,\n 4359,\n 4360,\n 4361,\n 4361,\n 4362,\n 4362,\n 4363,\n 4363,\n 4364,\n 4365,\n 4366,\n 4367,\n 4368,\n 4368,\n 4368,\n 4369,\n 4370,\n 4371,\n 4372,\n 4372,\n 4373,\n 4373,\n 4374,\n 4374,\n 4374,\n 4374,\n 4374,\n 4375,\n 4375,\n 4375,\n 4375,\n 4375,\n 4375,\n 4375,\n 4376,\n 4377,\n 4377,\n 4377,\n 4377,\n 4377,\n 4378,\n 4379,\n 4379,\n 4379,\n 4379,\n 4380,\n 4381,\n 4382,\n 4383,\n 4384,\n 4384,\n 4384,\n 4384,\n 4385,\n 4385,\n 4385,\n 4386,\n 4386,\n 4386,\n 4386,\n 4386,\n 4386,\n 4386,\n 4386,\n 4387,\n 4387,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4389,\n 4390,\n 4390,\n 4391,\n 4391,\n 4391,\n 4391,\n 4391,\n 4392,\n 4393,\n 4394,\n 4395,\n 4395,\n 4396,\n 4396,\n 4396,\n 4396,\n 4397,\n 4398,\n 4399,\n 4399,\n 4399,\n 4399,\n 4399,\n 4399,\n 4400,\n 4401,\n 4402,\n 4403,\n 4404,\n 4405,\n 4406,\n 4407,\n 4407,\n 4408,\n 4409,\n 4410,\n 4410,\n 4411,\n 4412,\n 4412,\n 4413,\n 4413,\n 4414,\n 4415,\n 4416,\n 4417,\n 4418,\n 4419,\n 4419,\n 4419,\n 4420,\n 4421,\n 4422,\n 4422,\n 4423,\n 4424,\n 4425,\n 4426,\n 4427,\n 4427,\n 4428,\n 4428,\n 4428,\n 4429,\n 4430,\n 4430,\n 4430,\n 4431,\n 4431,\n 4431,\n 4431,\n 4432,\n 4432,\n 4433,\n 4433,\n 4433,\n 4434,\n 4434,\n 4434,\n 4434,\n 4434,\n 4435,\n 4436,\n 4437,\n 4438,\n 4439,\n 4439,\n 4439,\n 4439,\n 4439,\n 4440,\n 4441,\n 4441,\n 4442,\n 4443,\n 4443,\n 4444,\n 4445,\n 4446,\n 4447,\n 4448,\n 4448,\n 4449,\n 4449,\n 4449,\n 4450,\n 4451,\n 4452,\n 4453,\n 4454,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4456,\n 4457,\n 4457,\n 4458,\n 4459,\n 4460,\n 4461,\n 4462,\n 4463,\n 4464,\n 4465,\n 4465,\n 4466,\n 4466,\n 4466,\n 4466,\n 4466,\n 4467,\n 4468,\n 4469,\n 4470,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4472,\n 4472,\n 4472,\n 4472,\n 4472,\n 4472,\n 4472,\n 4472,\n 4473,\n 4474,\n 4474,\n 4474,\n 4474,\n 4474,\n 4474,\n 4474,\n 4474,\n 4474,\n 4475\n ],\n [\n 0,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 2,\n 2,\n 3,\n 4,\n 4,\n 4,\n 4,\n 5,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 8,\n 9,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 11,\n 11,\n 11,\n 11,\n 12,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 14,\n 15,\n 15,\n 15,\n 15,\n 15,\n 15,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 17,\n 17,\n 17,\n 17,\n 17,\n 17,\n 17,\n 17,\n 17,\n 18,\n 18,\n 18,\n 18,\n 18,\n 19,\n 20,\n 21,\n 21,\n 21,\n 21,\n 22,\n 22,\n 22,\n 22,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 25,\n 25,\n 25,\n 25,\n 26,\n 27,\n 27,\n 27,\n 27,\n 28,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 30,\n 31,\n 31,\n 31,\n 32,\n 32,\n 33,\n 34,\n 34,\n 34,\n 35,\n 35,\n 35,\n 35,\n 35,\n 35,\n 35,\n 36,\n 36,\n 37,\n 38,\n 39,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 41,\n 41,\n 41,\n 42,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 45,\n 45,\n 45,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 50,\n 51,\n 51,\n 52,\n 52,\n 52,\n 53,\n 53,\n 54,\n 54,\n 55,\n 56,\n 56,\n 56,\n 56,\n 56,\n 56,\n 56,\n 56,\n 56,\n 57,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 59,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 61,\n 61,\n 62,\n 62,\n 63,\n 63,\n 63,\n 63,\n 63,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 68,\n 68,\n 68,\n 68,\n 68,\n 69,\n 70,\n 70,\n 70,\n 70,\n 70,\n 70,\n 70,\n 70,\n 70,\n 70,\n 71,\n 72,\n 72,\n 72,\n 72,\n 73,\n 73,\n 73,\n 73,\n 74,\n 74,\n 74,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 78,\n 78,\n 79,\n 80,\n 80,\n 80,\n 80,\n 80,\n 80,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 84,\n 85,\n 85,\n 85,\n 85,\n 85,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 88,\n 88,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 90,\n 90,\n 91,\n 91,\n 91,\n 91,\n 91,\n 91,\n 91,\n 91,\n 91,\n 91,\n 91,\n 91,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 93,\n 94,\n 94,\n 94,\n 95,\n 96,\n 96,\n 96,\n 96,\n 96,\n 96,\n 97,\n 97,\n 97,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 99,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 101,\n 101,\n 101,\n 101,\n 101,\n 101,\n 101,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103\n ]\n ]\n}\n", + "preprocessing.json": "{\n \"id\": \"nearest-square-uint8-bilinear-center-imagenet-v1\",\n \"decode\": \"RGB; discard alpha; ignore EXIF orientation\",\n \"input\": \"uint8 CHW/BCHW or image paths; float images must be in [0,1]\",\n \"square_size\": 384,\n \"resize_size\": 438,\n \"crop_size\": 384,\n \"nearest_coordinates\": \"floor(float32(output_index) * float32(source_size/384))\",\n \"bilinear\": \"half-pixel coordinates; edge clamp; round to uint8 before normalization\",\n \"mean\": [\n 0.485,\n 0.456,\n 0.406\n ],\n \"std\": [\n 0.229,\n 0.224,\n 0.225\n ],\n \"output\": \"float32 NCHW; RGB/255 then channel normalization\"\n}\n", + "presets.json": "{\n \"europe\": {\n \"path\": \"regions/europe.classes\",\n \"count\": 3014,\n \"minimum_regional_rows\": 26,\n \"minimum_global_rows\": 0,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 2079617,\n \"species_before_threshold\": 3132,\n \"sha256\": \"df66152ba29ba979b32741db4a0dc7c85db18fa65eac5602ca4aab702343de90\",\n \"scope\": \"Records assigned EUROPE by the metadata, including European-labelled portions of transcontinental countries.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"north_europe\": {\n \"path\": \"regions/north_europe.classes\",\n \"count\": 1977,\n \"minimum_regional_rows\": 26,\n \"minimum_global_rows\": 0,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 768497,\n \"species_before_threshold\": 2291,\n \"sha256\": \"065bb3ade45c970ca129c7507b56ed62fe16b84251961bf53352f5098b8b2be6\",\n \"scope\": \"Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden (Ireland, Iceland, \\u00c5land, Faroe Islands, Guernsey, Isle of Man, Jersey, Svalbard/Jan Mayen: ambiguous historical inclusion; adding any or all leaves the species list unchanged).\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"europe_v3\": {\n \"path\": \"regions/europe_v3.classes\",\n \"count\": 3086,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 2079617,\n \"species_before_threshold\": 3132,\n \"sha256\": \"465e644095abe381b7b6a44f7ce05d5da0ba77bf75b76e1c53d0eba6c89f487a\",\n \"scope\": \"Same EUROPE metadata filter as legacy europe, including European-labelled portions of transcontinental countries; updated occurrence thresholds only.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"north_europe_v3\": {\n \"path\": \"regions/north_europe_v3.classes\",\n \"count\": 2199,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 768497,\n \"species_before_threshold\": 2291,\n \"sha256\": \"78ee7693c7352244cd8a99b7276196aa32de27e620ed66648c4087f826d47092\",\n \"scope\": \"Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden. Same explicit country filter as reconstructed legacy north_europe; updated occurrence thresholds only. The UK and historically ambiguous additions are not included in this definition.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"australia\": {\n \"path\": \"regions/australia.classes\",\n \"count\": 1874,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 465726,\n \"species_before_threshold\": 1907,\n \"sha256\": \"04892d628263fa751c268693fccd9afd480a819b4896791ac5e0219b8467cb53\",\n \"scope\": \"All Australian records, including Tasmania and other territories recorded under AU; not all Oceania.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"tasmania\": {\n \"path\": \"regions/tasmania.classes\",\n \"count\": 274,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 4457,\n \"species_before_threshold\": 401,\n \"sha256\": \"21248a60d54592bc4db4e638e6565b07ee37ad1911c7e7f4e4a8fd0fc49d913f\",\n \"scope\": \"Australian records explicitly assigned stateProvince Tasmania. Species recorded there, not only endemic species; blank/other state values are excluded.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"north_america\": {\n \"path\": \"regions/north_america.classes\",\n \"count\": 4425,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 2300391,\n \"species_before_threshold\": 4551,\n \"sha256\": \"2707b4956327c31e719331cc2c40cd457f3d1fa67896a831d26a3e7e9accb44f\",\n \"scope\": \"Canada, United States, Mexico, Greenland, Bermuda, Saint Pierre and Miquelon. Whole countries, including US records outside the continental mainland.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"central_america\": {\n \"path\": \"regions/central_america.classes\",\n \"count\": 1639,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 210173,\n \"species_before_threshold\": 2022,\n \"sha256\": \"835b3447932cc142dd7c470617e0ce5f948ec2d6f6119be7d06b78e365f79885\",\n \"scope\": \"Mexico, Belize, Guatemala, Honduras, El Salvador, Nicaragua, Costa Rica, Panama. Mexico deliberately overlaps North America.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"south_america\": {\n \"path\": \"regions/south_america.classes\",\n \"count\": 1506,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 257026,\n \"species_before_threshold\": 1683,\n \"sha256\": \"47ee75929656a4f66874861e54a05b8503aa7974ebb5eb3d1eef1a68dbf7b130\",\n \"scope\": \"All SOUTH_AMERICA records or records from Argentina, Bolivia, Brazil, Chile, Colombia, Ecuador, Falklands, French Guiana, Guyana, Paraguay, Peru, Suriname, Uruguay, Venezuela, Costa Rica or Panama. Costa Rica and Panama deliberately overlap Central America.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"caribbean\": {\n \"path\": \"regions/caribbean.classes\",\n \"count\": 876,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 28652,\n \"species_before_threshold\": 1092,\n \"sha256\": \"ebb9cfbb63a4ad434ae8fa49b2709e09de0df30f3d31a2f939846e41c9731dc3\",\n \"scope\": \"Caribbean islands and territories, Bahamas, Bermuda, Belize and the Guianas (Guyana, Suriname, French Guiana). Does not include every mainland country with a Caribbean coast.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"south_asia\": {\n \"path\": \"regions/south_asia.classes\",\n \"count\": 1552,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 177926,\n \"species_before_threshold\": 1929,\n \"sha256\": \"5d838de414acb5a4ca14a5098972bbd36c3078c44525584860f6e2e7a94f3849\",\n \"scope\": \"Afghanistan, Bangladesh, Bhutan, India, Maldives, Nepal, Pakistan, Sri Lanka, Myanmar and Iran; deliberately broad western/eastern overlap.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"asia\": {\n \"path\": \"regions/asia.classes\",\n \"count\": 4443,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 920962,\n \"species_before_threshold\": 4937,\n \"sha256\": \"c54053282b739c7bfcfad6a69c9f9b2e613f4ff4986cf30e1cd0848fe5eb2daf\",\n \"scope\": \"All ASIA records plus all records from the listed Asian countries and territories, including Turkey, Georgia, Armenia and Azerbaijan in full. Russian records require continent ASIA; European or unassigned Russian records are excluded. Cyprus is excluded even when its continent is ASIA.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"japan\": {\n \"path\": \"regions/japan.classes\",\n \"count\": 697,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 30076,\n \"species_before_threshold\": 974,\n \"sha256\": \"8b3a9cd5874c26ecb5217e61f6402fb7e60082f3ebeea13273abe177c233a64b\",\n \"scope\": \"All records assigned countryCode JP, including islands.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"africa\": {\n \"path\": \"regions/africa.classes\",\n \"count\": 924,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 149267,\n \"species_before_threshold\": 1129,\n \"sha256\": \"471c14708f50d98e51b8513ec49e978fae360e1099b6f40491c008e9bd1d59c1\",\n \"scope\": \"All AFRICA records plus the listed African countries and island territories. AFRICA-labelled records from transcontinental/overseas countries remain included.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"north_africa\": {\n \"path\": \"regions/north_africa.classes\",\n \"count\": 236,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 4393,\n \"species_before_threshold\": 422,\n \"sha256\": \"015e6c49e7c220421fdd646743216d34464708e6bfeebfac408f912a87e4a62b\",\n \"scope\": \"Algeria, Egypt, Libya, Morocco, Tunisia, Western Sahara, Sudan and Mauritania. Sudan and Mauritania deliberately overlap the broad sub-Saharan preset.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"subsaharan_africa\": {\n \"path\": \"regions/subsaharan_africa.classes\",\n \"count\": 796,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 144918,\n \"species_before_threshold\": 904,\n \"sha256\": \"1cc936061b0037c71d60d5cdb74fc8af1817dd567e54dcd6904a6901009d9184\",\n \"scope\": \"Broad African selection excluding Algeria, Egypt, Libya, Morocco, Tunisia and Western Sahara. Includes Sudan, Mauritania, Mali, Niger, Chad, the Horn, Madagascar and island territories; this is not a Sahara boundary polygon.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"madagascar\": {\n \"path\": \"regions/madagascar.classes\",\n \"count\": 107,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 2584,\n \"species_before_threshold\": 169,\n \"sha256\": \"cda395b4bab28ffec49a698487cbb2aa6578a79107ce7a9885c8260e421b9c54\",\n \"scope\": \"All records assigned countryCode MG. Species recorded in Madagascar, not only endemic species; neighbouring island countries/territories are excluded.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"mediterranean\": {\n \"path\": \"regions/mediterranean.classes\",\n \"count\": 2680,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 660065,\n \"species_before_threshold\": 2874,\n \"sha256\": \"f203302f8bfdcb92aec580fa3f11e6ebda8c3886f5fd691379860408e84fd4e3\",\n \"scope\": \"Whole Mediterranean coastal countries/territories plus Portugal, Andorra, San Marino, Vatican City, North Macedonia, Bulgaria, Serbia and Jordan. Includes inland and overseas records of selected countries, not only Mediterranean climate zones.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"arctic\": {\n \"path\": \"regions/arctic.classes\",\n \"count\": 1548,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 115881,\n \"species_before_threshold\": 1832,\n \"sha256\": \"a9138c543b90e319296d2c0cd5dc3400c9045616633988755f8057450a19ae5f\",\n \"scope\": \"Records at latitude 60\\u00b0N or farther north, across all countries, including exactly 60\\u00b0. Missing, malformed and out-of-range latitudes are excluded. A broad northern/subarctic scope, not the Arctic Circle boundary; no country or state-name proxy is used.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"oceania\": {\n \"path\": \"regions/oceania.classes\",\n \"count\": 2273,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 584477,\n \"species_before_threshold\": 2337,\n \"sha256\": \"bf6f77aeb7700a0e1d46f7d51e5a45b842485a16d2f9777b3c5e61a899b84b47\",\n \"scope\": \"All OCEANIA records plus Australia, New Zealand, Papua New Guinea and the listed Pacific countries/territories. Australia and Tasmania intentionally overlap.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"new_zealand\": {\n \"path\": \"regions/new_zealand.classes\",\n \"count\": 425,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 110030,\n \"species_before_threshold\": 441,\n \"sha256\": \"81b4facb4283f0e0e867fa7219f8bc5f33418e68cde61fc18df212b2a085887b\",\n \"scope\": \"All records assigned countryCode NZ, including islands recorded under NZ. Separately coded Cook Islands, Niue and Tokelau remain in the other-Oceania preset.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"oceania_excluding_australia_nz\": {\n \"path\": \"regions/oceania_excluding_australia_nz.classes\",\n \"count\": 352,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 8721,\n \"species_before_threshold\": 533,\n \"sha256\": \"5a38ae5ba587577b7dcad4a8850089f1b8036abc6f1e676436968f97e34f322d\",\n \"scope\": \"The Oceania metadata selection with all AU and NZ records excluded, even when continent is OCEANIA. Species shared with Australia or New Zealand remain eligible if they qualify from records elsewhere in Oceania; this is not subtraction of their species lists.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"southeast_asia\": {\n \"path\": \"regions/southeast_asia.classes\",\n \"count\": 1672,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 172424,\n \"species_before_threshold\": 2031,\n \"sha256\": \"ad2f4d1ed1f78abd66594f59d9550383f37f96b9bdcda81138c11f64c3907ccd\",\n \"scope\": \"Brunei, Cambodia, Indonesia, Laos, Malaysia, Myanmar, Philippines, Singapore, Thailand, Timor-Leste, Vietnam and Papua New Guinea; whole-island-region overlap with Oceania is intentional.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"east_asia\": {\n \"path\": \"regions/east_asia.classes\",\n \"count\": 3430,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 549482,\n \"species_before_threshold\": 3912,\n \"sha256\": \"4a3e8635e06c7c86c0b08cfbc6acfa13ceb484d708f771312afc874e47ac0085\",\n \"scope\": \"China, Hong Kong, Macao, Taiwan, Japan, North Korea, South Korea, Mongolia and Russian records assigned continent ASIA. This includes all Asian Russia, not only the Russian Far East; European or unassigned Russian records are excluded.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"middle_east\": {\n \"path\": \"regions/middle_east.classes\",\n \"count\": 846,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 24805,\n \"species_before_threshold\": 1330,\n \"sha256\": \"2f74a654f035774373e25b9518b1d3d0724a456389647be6584dab4ab85261a9\",\n \"scope\": \"Turkey, Cyprus, Syria, Lebanon, Israel, Palestine, Jordan, Iraq, Iran, Kuwait, Saudi Arabia, Bahrain, Qatar, UAE, Oman, Yemen, Egypt, Armenia, Azerbaijan, Georgia, Afghanistan and Pakistan. Deliberate overlap with Mediterranean, Africa and South Asia.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n }\n}\n", + "regions/africa.classes": "1992315\n6113873\n1732087\n5101590\n1732660\n1732955\n1733755\n1734704\n6113959\n11529292\n1845270\n1845574\n1845616\n4528100\n1847111\n9546514\n9868978\n1850640\n1850781\n5119338\n1845952\n1839146\n1831458\n11513018\n1763976\n1766612\n1767883\n1769739\n1771455\n1772352\n1772447\n1772689\n4532500\n5110546\n8979264\n1776265\n1776268\n4687991\n1778430\n5111054\n1783882\n1786190\n1786980\n1786984\n1786985\n1787009\n1788553\n6116754\n1789057\n1789498\n1789805\n1790287\n1790692\n1791715\n1792210\n1795074\n1796984\n1797542\n4532473\n5884245\n6117055\n6117124\n1798481\n1798504\n6115283\n1798802\n4301310\n4532352\n6115437\n8793873\n1803148\n1803163\n1803197\n1804337\n8865876\n1805110\n1806871\n1806913\n1808172\n1808359\n1809158\n1809159\n5117189\n1814552\n8916247\n5117776\n5117791\n5117805\n6122301\n9331464\n1819928\n6121912\n1820802\n1820948\n1821012\n1821436\n6122103\n10503495\n8881513\n4532549\n8148822\n12017078\n6112547\n6112472\n5115381\n1774826\n5116504\n8723161\n5108808\n1781413\n1780869\n1780897\n1794268\n1803590\n1803593\n1819320\n1772374\n6115388\n1816685\n1774600\n1803544\n1803545\n1817973\n1804532\n1813460\n1807634\n1782645\n1768459\n5113036\n1821547\n1821581\n1821684\n1768212\n5118223\n1820573\n6116073\n1816775\n1803306\n4687933\n6116659\n6116661\n6116669\n6116674\n4532453\n1814877\n11754729\n1781503\n6115504\n1785072\n1785105\n1765997\n4687389\n5884188\n1809585\n1807924\n1782310\n1777517\n6115973\n1860857\n5123339\n5123474\n1869595\n1870450\n1870988\n1871252\n1871407\n8766638\n4531365\n1871754\n1871783\n7673242\n1872850\n1872873\n1872901\n1873051\n1873079\n1873215\n4531237\n1873890\n1875409\n1875687\n1876542\n1876922\n9111961\n5126052\n1877788\n4531417\n1890024\n5884888\n1877035\n5125780\n1871504\n1941330\n10309794\n12231385\n1736623\n1737131\n1737509\n4530608\n1739833\n1740762\n1740797\n11846897\n1745781\n1921064\n10581870\n1921650\n10858809\n11374171\n11378618\n1922063\n1922064\n1922244\n1922291\n1922468\n1922572\n1922679\n1922689\n1922694\n1922701\n1923465\n1923473\n1924082\n10656713\n1924392\n1924429\n8023645\n8951523\n1924713\n5138701\n1925410\n1925609\n1925615\n1925676\n1925693\n1925694\n1925801\n1925918\n1926324\n1926385\n1926530\n1926531\n1926539\n1926546\n1926550\n1926817\n1927313\n1927633\n11667997\n1927943\n1927955\n1927979\n1928070\n1928076\n5139040\n1928389\n5139188\n5139201\n1928746\n1929059\n1929697\n1930904\n1930916\n1930923\n1930931\n4535106\n1931046\n1931403\n1931437\n1931788\n1932177\n1932302\n1932332\n1932354\n8833509\n1932393\n1932411\n7346444\n8177775\n1932580\n1932629\n5139954\n5140006\n1932751\n1932752\n1932753\n1932882\n1932976\n9954885\n1933583\n1933647\n1933649\n1926166\n5138841\n5138921\n7964910\n1933204\n1752327\n1752805\n5105584\n1919181\n1919194\n1919210\n1919213\n1919214\n1919223\n1919333\n4535280\n4535285\n7981372\n1919346\n1919660\n1919663\n1919665\n1919703\n1919924\n1919929\n1919930\n1919966\n1920181\n1920258\n5137790\n5137799\n5137827\n5137828\n5137849\n1920348\n1920353\n1920359\n1920362\n1920363\n1920369\n1920370\n1920374\n1920377\n1920378\n1920379\n1920381\n1920390\n1920395\n1920401\n1920404\n1920405\n4699245\n5137863\n1920496\n1920506\n1920509\n1920709\n4535271\n5137988\n5137996\n5137998\n1920795\n1920815\n1920816\n5137612\n5137663\n1920218\n1750326\n1868884\n1869043\n1869238\n1869278\n1869286\n1955694\n1956897\n1957266\n1957286\n8172949\n1959839\n1960105\n1961013\n1961025\n4302252\n1963168\n1964076\n1964195\n1964836\n1966255\n1967025\n1967209\n1967265\n1967324\n1967438\n1967606\n1969958\n5144691\n5144805\n5144900\n5145075\n5145396\n5145468\n5145502\n5145842\n8014296\n1973171\n7996464\n5146510\n5146611\n5146774\n5146837\n5147039\n5147043\n5147058\n5147354\n5147395\n5147415\n5147437\n5147441\n5147478\n5147560\n1978017\n5148264\n1980521\n1980525\n1980533\n1982267\n1983039\n1983062\n1983525\n1983528\n1985742\n4525093\n4525097\n6118530\n6214843\n4524223\n1988019\n1988064\n1992066\n11654024\n7507369\n1989594\n4525034\n4524541\n4523519\n6119299\n6119323\n6119359\n6119488\n9220953\n5149664\n5149787\n1987602\n1954382\n11794114\n1942762\n1942790\n1942793\n1943236\n8277078\n8073674\n1944234\n1944910\n1945535\n1945571\n1945587\n1945786\n1945877\n1945878\n1945980\n1946037\n1946660\n1946661\n1947112\n1947113\n1947117\n5142130\n5142160\n1948371\n1948994\n5142338\n5142352\n1949954\n1950156\n1950877\n1948916\n1758839\n5108619\n1761439\n1762383\n5109646\n1764174\n4534245\n4534250\n4534275\n11797244\n5109843\n5109848\n5109855\n5109931\n8352161\n1766072\n9105656\n5772171\n5772172\n5772206\n1768042\n1768048\n1770416\n1774470\n1774797\n6115946\n1775329\n5110858\n5772222\n1780049\n1783777\n1784349\n1784591\n1785181\n1785185\n1785329\n1785361\n1786360\n1787264\n1787438\n1787770\n4534166\n4534194\n1789957\n1790364\n1791758\n1792418\n1792996\n1794507\n1795068\n4532908\n1795483\n9803522\n1796451\n4532811\n4532269\n6116341\n6116368\n6116899\n1763072\n5109259\n5109345\n5109407\n4534675\n4534681\n4534686\n6116440\n8108800\n1770821\n1771040\n1771245\n4533714\n1765751\n5108660\n5108671\n11714235\n11819666\n1797793\n1797864\n1797942\n1797965\n4532203\n4532206\n4532216\n4532266\n6115772\n6115793\n6115822\n1782267\n1767302\n8363507\n10458175\n1824131\n5118892\n5119183\n1827775\n10023821\n1892544\n1892554\n1892555\n1892621\n11688586\n5806166\n10587253\n1892811\n1892814\n5127822\n1893558\n1893562\n1893901\n4535632\n8049830\n4535809\n4535819\n1895956\n1896547\n1896600\n1896603\n5128545\n1897904\n1897946\n1897965\n1897970\n1897972\n1898002\n1898017\n10114575\n1898286\n1898290\n4299368\n4299370\n1899071\n1899144\n1899164\n1899198\n1900053\n1900055\n1901781\n1901782\n1901850\n11546465\n11623814\n11726907\n11841763\n5130335\n5130347\n5130392\n5130393\n5130396\n5130448\n5130464\n5130467\n5130487\n5130502\n5130542\n1903009\n1903661\n1904206\n1906006\n1906014\n1906030\n1906063\n1906117\n5132523\n5132529\n5132540\n5132545\n5132550\n5132591\n5132713\n1906604\n1906621\n1906679\n10569879\n11378273\n5132839\n1907399\n4535754\n1908356\n8727750\n1909818\n1911461\n5133610\n10203260\n1912506\n8964866\n5134098\n5134301\n1915499\n11372793\n11375508\n12301192\n12357826\n12358748\n1909736\n5135573\n5135944\n5136059\n5136113\n5136200\n5136306\n1916352\n1916554\n1918207\n1918212\n1918632\n1918688\n1918776\n4535539\n5137397\n7988274\n8404037\n9902073\n7762841\n10717680\n5131347\n5131442\n5131540\n5133088\n7642610\n5135513\n10873137\n1896957\n5128597\n5128825\n5128984\n5129091\n5129190\n9087922\n1910496\n1910501\n1910628\n1910629\n1910663\n1899737\n7934873\n8393082\n1842097\n4301036\n4529738\n6122527\n1878656\n1878804\n1878951\n1879001\n1879227\n1879340\n1879408\n1879427\n1879452\n5126204\n1879471\n1879490\n1879655\n1879691\n1880011\n5126637\n1880408\n1880865\n1881126\n1881147\n1881151\n5126668\n9819403\n1881303\n1881362\n1882110\n1882884\n1882905\n1882941\n1882960\n1882965\n1883067\n1883124\n1883386\n1883458\n5127094\n1884051\n1884437\n1884449\n1884479\n6120980\n1884774\n1884844\n1884909\n4532146\n1885024\n1885262\n1885745\n1885764\n6120861\n1885836\n1885931\n1886015\n1886088\n1886104\n1886251\n1886648\n1886729\n7562564\n1887054\n8955839\n4531670\n1887694\n1888346\n1888484\n1888915\n1889071\n1889272\n1889277\n1889543\n9228024\n1890287\n1890335\n7543006\n1890346\n1890410\n1890534\n1890670\n1890898\n1891167\n1891171\n1891217\n4532022\n4532024\n1891583\n8986756\n1892456\n1892476\n5771877\n6133232\n6121010\n6121218\n6133158\n8876855\n1886374\n1889833\n5127644\n5127669\n5127675\n5802339\n6121184\n8218441\n1886207\n1883885\n4532150\n4532160\n1831136\n1858674\n1858930\n1859285\n1859932\n1866249\n1866252\n1866262\n1866421\n5124813\n1866980\n1867009\n1867014\n1867295\n1867312\n1867673\n1867744\n1867749\n1867750\n1867751\n1868014\n1868049\n1868060\n11414590\n11464362\n5120278\n1861433\n1861494\n1861510\n1861522\n1861544\n1861584\n1861592\n1861644\n1862293\n1862311\n1862401\n1862433\n1862692\n1862719\n1862765\n1862989\n1863034\n1863282\n1863544\n1863640\n9178932\n5124071\n5124088\n5124093\n5124109\n1864576\n1864652\n5124352\n1992634\n1992956\n1992969\n6132725\n1830437\n1830459\n7761138\n10055273\n1857068\n1857143\n1857577\n1857581\n1857626\n1858283\n1937643\n1937667\n1937702\n1937711\n1937849\n1937959\n1938069\n1938125\n1938166\n8225376\n5141170\n5141195\n5141216\n5141234\n5141248\n5141250\n4690079\n5141297\n1939314\n5770913\n1800642\n5114409\n4534796\n4534757\n6112634\n1802662\n1802850\n1802868\n1803022\n1803025\n1803060\n", + "regions/arctic.classes": "1860621\n1860628\n1860659\n1860664\n1860668\n1860688\n1860709\n1860711\n1732063\n1732416\n1732452\n1732521\n1732565\n1732662\n1732717\n1733258\n1733484\n4525266\n4525273\n1734453\n1734826\n1845270\n1845368\n1845607\n1846604\n1846657\n1846729\n1846916\n1847572\n1848150\n10450501\n1848219\n1848273\n1848312\n1848356\n1848378\n1848596\n1848636\n1848669\n1848690\n1848713\n1848714\n1848730\n1848753\n1848864\n1848868\n1849267\n1849273\n1849284\n1849294\n1849477\n11052757\n11080751\n1849630\n1849856\n1850008\n1850042\n1850045\n1850076\n1850106\n1850238\n11576787\n1850302\n1850335\n1850386\n1850394\n1850450\n4527903\n1850522\n1850538\n1850971\n1851000\n1851010\n1851011\n5122037\n5122131\n1851203\n1851220\n1851337\n1851347\n1851555\n5122206\n1852177\n1852311\n11287091\n1848920\n1829533\n1829776\n1829785\n1829799\n1829823\n1829974\n1828637\n1829021\n6097236\n5769272\n10176413\n5879654\n7448174\n4525610\n1861395\n1845962\n1830843\n1830122\n1830125\n1830144\n1830147\n1830152\n1830186\n1830191\n1830207\n1830241\n1830243\n1830262\n1830266\n1830271\n4525476\n1831643\n8271010\n1853723\n5880147\n9734171\n11418741\n1761111\n1764531\n1769103\n1769897\n9564612\n9607447\n1772793\n1777631\n1780150\n5113078\n5113084\n5113234\n1797178\n1797258\n1797367\n1797373\n1797374\n1797436\n1797479\n4532471\n8355390\n1798346\n1798408\n1798449\n1798594\n1798807\n4532351\n4532357\n9621113\n1799708\n1804071\n1804906\n7874258\n1808752\n5115771\n1810099\n5116416\n1813114\n5117189\n5117400\n1817729\n1819145\n4532293\n4532297\n1819268\n1819873\n7657803\n1820372\n10551407\n12253343\n5884571\n7596232\n5771982\n6097214\n4532544\n4532516\n12089608\n11962292\n12135372\n5115872\n5115874\n9530200\n5116475\n4532405\n4532408\n4532412\n8000103\n4532534\n1760246\n5113036\n1812394\n8237987\n1820039\n1771772\n1860979\n1860983\n4522916\n4522919\n4522922\n12318291\n4522886\n4522891\n1860768\n7767114\n7961640\n1992504\n1852956\n1852978\n1835432\n1835433\n1835456\n1835457\n9724183\n1837343\n1837420\n1837429\n1837464\n1837515\n4529064\n7958169\n1839293\n1839296\n1840297\n1840301\n1840345\n1840346\n1840360\n1840380\n1840408\n1840485\n1840555\n1840566\n1840581\n1840596\n5119808\n4529630\n1751236\n1751290\n1751298\n1751368\n1751457\n4535884\n1860408\n4525177\n5123394\n5769164\n5123461\n1751216\n1869803\n1869852\n1869976\n1870202\n1870250\n1870988\n1871407\n4531402\n1871698\n10787705\n1872901\n1872904\n1873079\n1873776\n1873780\n4531264\n1874204\n4531147\n1875120\n8219149\n1875376\n4531242\n1875631\n4531284\n1875827\n1875869\n1875918\n1875940\n1875952\n1876329\n1876409\n1876854\n1877310\n1877341\n1877368\n4531246\n1877941\n1878470\n1878490\n1872315\n1748805\n1939964\n11667300\n5141493\n5141501\n1940510\n1940575\n1940639\n1940744\n1940768\n1940807\n1940838\n1939879\n1736377\n1736511\n1736528\n1736560\n1736601\n5102666\n1736800\n1736898\n4530406\n4529931\n1737342\n1737403\n1737491\n1737497\n7350238\n1737526\n1737533\n1737542\n1737552\n1737650\n1737753\n1737775\n1737847\n1737893\n1737924\n4530002\n1738218\n1738222\n1738245\n1738317\n1738322\n1738337\n1738422\n1738514\n8420632\n8869900\n5102931\n5102951\n1738687\n1738700\n1738722\n1738777\n1738794\n1738839\n1738883\n1739042\n1739043\n8086347\n1739128\n1739272\n1739284\n1739337\n1739377\n1739381\n5102982\n1739451\n1739461\n1739471\n1739748\n1739797\n1739816\n1739819\n1739833\n1739919\n1739922\n1739980\n1739999\n1740005\n1740053\n1740069\n1740116\n1740120\n1740174\n1740183\n1740185\n1740305\n1740392\n7797515\n8215326\n1740482\n1740518\n1740533\n1740567\n1740570\n1741253\n1741341\n1741368\n4530151\n8345820\n5103066\n5771357\n1741551\n1741615\n1741633\n1741634\n1741747\n1741752\n10807169\n11093909\n1742106\n1742142\n1742185\n1742263\n1742346\n1742402\n5103451\n5103502\n5103736\n5103948\n5771350\n7975250\n8313553\n5103998\n7661023\n1743475\n7877231\n1743532\n1743588\n1743604\n5104056\n6097235\n1743643\n1743714\n4530214\n1743768\n1743775\n4529908\n4529915\n1743828\n1743855\n1743856\n1743862\n1743867\n1743898\n1744071\n1744136\n1744180\n1744224\n1744416\n1744498\n1744588\n1744593\n1744699\n1744709\n1744714\n1744728\n1744731\n1744739\n1744742\n1744748\n1744763\n1744777\n1744789\n1744810\n7964262\n1745079\n10844862\n1745131\n1745558\n1745561\n1745579\n1745600\n1745606\n1745630\n1745634\n1745636\n1745643\n1745659\n1745676\n1745678\n1745705\n1745724\n1745737\n1745756\n1745762\n1745771\n1745787\n1745816\n1745830\n8162538\n8369868\n1745925\n1746027\n1746413\n1746440\n1746613\n1746644\n1746666\n1746689\n1746775\n1746831\n1746832\n1746856\n1747141\n4530138\n5104558\n6097234\n7588222\n9242559\n1748456\n5104641\n8691947\n10580256\n5103121\n5103176\n5103185\n5103227\n5771230\n5771232\n5771236\n5771239\n5771241\n5771249\n5771256\n5771259\n4525500\n4525503\n4525510\n4525530\n4525540\n4525547\n4525562\n1920851\n1920889\n1921239\n1921247\n1922937\n5138387\n5138543\n5138561\n1923796\n1924097\n1924106\n12185456\n1925918\n4300000\n1925962\n1926054\n1926324\n1926861\n5882965\n1928248\n5139156\n1928945\n11720834\n1929270\n1929659\n1929697\n1930110\n8643155\n1931553\n1931779\n10570752\n1932411\n1932417\n1932960\n5140244\n1933793\n1926260\n1933138\n1919327\n1919328\n1919712\n1919719\n1920237\n1920259\n5137791\n5137803\n1920494\n1920496\n1920506\n5137882\n5137894\n5137903\n5137908\n5804895\n1920712\n5714914\n5137582\n5137595\n5137636\n5137672\n5137689\n5137693\n5137700\n5137706\n5137711\n5137714\n1920218\n1748890\n1749050\n1749070\n1749164\n1749713\n1749744\n1749846\n1749959\n1750097\n1750166\n1750288\n5104772\n5104781\n5104797\n5104891\n5104940\n5105054\n5105088\n5105158\n5976947\n1751051\n5104759\n1749591\n1749608\n1735532\n4527339\n1731826\n1731837\n1731860\n1954563\n5143380\n5143453\n5143477\n1955497\n5143651\n5143675\n5143697\n1956440\n1956524\n1956599\n1956710\n1957266\n1957300\n1957570\n1957816\n1957845\n1957854\n4524421\n4524426\n5143964\n1959735\n1959914\n1959919\n1960617\n1961040\n1961190\n1962204\n1962265\n1962434\n1962516\n9812211\n1962860\n1963011\n1963306\n1963446\n1963463\n1964191\n1964195\n1964653\n1964657\n8361848\n5144424\n5144426\n1965078\n1965166\n1965763\n1965777\n1965795\n1965807\n1965810\n1965823\n1965825\n1965841\n1965865\n1965913\n1965996\n1966017\n5144534\n5144543\n1967245\n1967273\n1967597\n1967815\n1967873\n7681733\n1968867\n1969291\n1969954\n1970213\n5144721\n5145009\n5145136\n5145260\n5145409\n1971888\n1972120\n1972185\n1972187\n1972234\n1972250\n1972278\n1972342\n1972377\n5145965\n7541913\n7960566\n1972434\n1972447\n1972449\n1972454\n1973414\n1973487\n5146496\n5146559\n5146659\n5146677\n5146883\n5146946\n5146961\n5147039\n5147062\n5147208\n5147245\n5147608\n5147638\n1975546\n1975553\n1975571\n1975733\n1975741\n8329661\n1975793\n5715277\n5715278\n8160782\n1975897\n1975903\n1976163\n5147681\n5147713\n7973517\n1976993\n1977003\n1977007\n1977068\n5147827\n5147834\n5769028\n1978056\n1978065\n1978114\n1978375\n1978445\n1978493\n4524636\n4524638\n4524890\n1978751\n1978776\n1978821\n1978977\n5148286\n1979308\n1979430\n1979473\n1979781\n5148436\n5148462\n5148486\n5148487\n8421569\n1982406\n1982500\n1982529\n1982541\n1982542\n1982592\n1982636\n1982671\n1982746\n1982770\n1982791\n1982867\n1982885\n1983000\n1983052\n1983170\n1983260\n1983288\n1983441\n1983442\n1983525\n1983558\n1983648\n1983705\n1983755\n1983896\n1983922\n1983997\n1983999\n7752082\n7993353\n8015895\n8026858\n8262357\n1984734\n1984942\n1984949\n1985522\n1986052\n1986056\n1986157\n1986166\n1986171\n1986191\n1986220\n1986367\n1986452\n1986522\n1986575\n1986623\n5149307\n5149315\n5768880\n1987744\n1988593\n1988684\n8388883\n5149414\n5149438\n1988881\n1989428\n1990066\n1990150\n1990551\n1991371\n5149836\n1992066\n5880533\n5880545\n5880550\n5880552\n5880559\n5880563\n7657419\n8237343\n8632989\n9261296\n9272461\n5769068\n5769072\n4524740\n4523556\n4523560\n4523564\n4524054\n4524376\n4524822\n4524070\n4524072\n4524951\n4525078\n5144190\n5146412\n5715275\n5149499\n7769543\n4523880\n4523883\n4523885\n5149665\n5149704\n5149746\n5149819\n5146342\n5146379\n1972942\n4302268\n5141677\n1943954\n8133678\n7389824\n1947282\n1947306\n1947335\n1949794\n1949852\n1950006\n8109173\n5977179\n5977250\n7633472\n1869478\n1869489\n1869512\n9359597\n9400895\n10963226\n10982815\n5109821\n1758878\n1759055\n1759069\n1759083\n4533952\n1759407\n1759620\n1759661\n1759667\n1759668\n1759686\n1760104\n1760593\n1794361\n4534225\n8708745\n1760887\n1761041\n1761438\n1762608\n1762615\n5109506\n5109523\n5109599\n5109722\n1763610\n1765011\n1765044\n4534245\n4534257\n1765767\n1766128\n1766131\n1766137\n1766210\n1766410\n7895336\n1766646\n1766650\n1766741\n1767597\n1767625\n5772176\n5772196\n5772199\n5772205\n5772210\n1768117\n5110200\n1768341\n1768702\n1768749\n1768771\n1768815\n1769057\n1769505\n1769566\n1769947\n1769958\n1770132\n1770150\n1770477\n4532696\n1771385\n1771391\n7725644\n1771509\n1771531\n1771997\n1772013\n1772169\n1772179\n1772940\n1772956\n1772977\n1773163\n1773328\n1774314\n4534052\n4534057\n5772269\n4534719\n1776067\n1776330\n1776371\n5110756\n5772446\n1776459\n1776462\n1776619\n1776862\n4534463\n5110871\n5110885\n4534299\n1778517\n1778596\n5111574\n8253467\n1779435\n1779641\n1779690\n1779959\n1780378\n1781694\n1782560\n1782615\n1782622\n1782627\n1782672\n1782726\n1782727\n1782763\n1782777\n1782841\n1782927\n1782948\n1782978\n1783037\n1783043\n1783045\n5112155\n5112191\n5112283\n5112291\n5112336\n5112345\n5112377\n5714951\n5714973\n5715004\n5772349\n5772351\n7921916\n8043500\n1783855\n1783861\n1784826\n4534290\n1785286\n4532886\n4532890\n1785888\n1785895\n1785951\n1785955\n1785964\n1785992\n1786007\n8292872\n1786308\n1786902\n1786936\n1787112\n1787213\n1787504\n1787506\n1787590\n1787610\n1787697\n1787770\n1787841\n1787859\n1788425\n1788522\n4534011\n1788917\n1788929\n1789086\n1789267\n1789481\n1789505\n1789553\n1789580\n4534166\n1789695\n1789745\n1789753\n10068024\n10113008\n10312073\n1789982\n1790002\n1790072\n1790084\n1790160\n11693171\n1790359\n1790361\n9174377\n1790625\n1791422\n1791784\n1792292\n1792377\n1792379\n1792383\n1792411\n1792414\n1792418\n1792426\n1792442\n1792449\n1792475\n1793369\n1793877\n1793983\n1793986\n1794102\n1794590\n1795215\n1795854\n1795871\n1795930\n1795946\n1795983\n1796007\n1796032\n1796117\n1796145\n1796169\n1796181\n1796188\n4534485\n7438067\n1796217\n7780930\n1796463\n8105817\n1796678\n4533431\n4533433\n4533442\n4533444\n4533446\n1798372\n1798916\n1798931\n1798971\n1798974\n1798984\n1799135\n1799701\n1799799\n1799957\n1800032\n8742426\n4534389\n4534207\n10638451\n4533273\n4534540\n8890502\n9135821\n4534038\n4533202\n4534538\n4533128\n4533136\n4533661\n4533671\n4534408\n4534533\n11478679\n5110644\n1779334\n5114198\n1771678\n1771698\n8581601\n9623131\n1770880\n1771169\n1771214\n7940536\n4533347\n4533360\n1822587\n1822610\n1822613\n5118524\n1822787\n1822796\n1822819\n1822830\n7875265\n1825064\n1825077\n1825083\n4534909\n4534914\n1825156\n1825176\n1825539\n1825967\n1825971\n1825983\n1826022\n1826033\n5118996\n1827125\n5119245\n1828162\n1894102\n1894164\n1894268\n1894298\n5882039\n7712938\n1894714\n4535614\n4535630\n4535636\n8049830\n1894840\n1894896\n4535827\n4535817\n5128250\n5128266\n5128323\n5128326\n5128357\n9804158\n1895875\n1896841\n1898286\n4299368\n1898544\n5129374\n5129378\n5129405\n5129432\n1902533\n1902749\n1905187\n1905299\n6221746\n1905383\n1905396\n1908044\n1909398\n1911112\n1911168\n1911278\n1911461\n7809779\n8078362\n1912325\n1912372\n1912428\n1912470\n4299535\n4299565\n4299576\n4299597\n4299599\n7428726\n8810143\n1913328\n5134469\n5134517\n5134559\n5134661\n5134667\n5134682\n5134693\n5134759\n5135355\n5714507\n7738295\n8314088\n9967126\n8176911\n1918988\n5130587\n5130682\n5131096\n5132084\n5132183\n5131910\n8138711\n1902143\n1902182\n1899433\n7768674\n5142870\n1951649\n1952014\n5142903\n1952229\n5143048\n1952532\n5143129\n5143147\n1952806\n1832819\n1832853\n1832915\n1832927\n1832936\n1833159\n5880257\n5880258\n6097224\n6097225\n6097228\n1853064\n5120668\n5120675\n5121046\n5121177\n5121517\n5121613\n5121737\n8273859\n5120396\n5101394\n4525641\n1731598\n1872368\n1878782\n1878862\n1878879\n1878895\n1878939\n1879452\n5126212\n1879534\n1879630\n1879703\n1879731\n10915497\n1879939\n1879970\n1880040\n1880062\n1880064\n1880088\n1880094\n1880104\n1880138\n1880139\n1880140\n1880143\n4531687\n1881603\n4531713\n1881834\n4531975\n1882195\n1882210\n1882437\n1882459\n1882729\n5126834\n8325294\n1883161\n4531690\n1884212\n4531708\n1884465\n1884970\n8223165\n1886587\n1887290\n1887701\n1888743\n1888759\n1888823\n1889942\n5127521\n1890187\n1890534\n1890576\n1890679\n1890699\n1890772\n1890802\n7431428\n1891059\n1891167\n1891426\n1891473\n1891493\n1891494\n4532022\n9674732\n1884255\n1884273\n1884332\n1884337\n1884370\n1884403\n5884851\n5126675\n7446048\n8532380\n8537359\n8823068\n8858121\n9100030\n1887108\n1887177\n1887178\n4532050\n4532088\n4532095\n4532097\n1846107\n1846111\n1846133\n1846141\n1846210\n1846219\n1846236\n4528818\n1830879\n1830937\n1830962\n1831002\n1831009\n1831128\n1831136\n1831168\n4525443\n4525448\n5122439\n1854849\n4526050\n1858637\n1858775\n1858778\n1858873\n1859046\n1859100\n1859177\n1859285\n1859287\n1859305\n1859471\n1859480\n1859488\n4536472\n4536483\n7642240\n8200050\n1973467\n5123221\n5123042\n5124911\n1867820\n7734292\n1841813\n1861644\n1861797\n1861851\n1861862\n1862572\n1862580\n1862624\n1862837\n5123922\n5124007\n5124029\n1864165\n1864358\n1864377\n5124121\n5124143\n5124233\n1864652\n1993419\n4525189\n5119513\n1830361\n1830374\n1830380\n1830407\n1830457\n4525420\n7976145\n1830537\n1830802\n4525364\n1754332\n5107219\n5107644\n7778368\n7955974\n8426357\n4522753\n1939658\n1939677\n1939680\n1939688\n7646066\n1829322\n1829363\n1856005\n1856384\n1856620\n1856658\n1856668\n1856686\n1856691\n1856768\n1856867\n1857626\n9790007\n1857856\n1857863\n1857924\n1857978\n1858074\n1858100\n1858113\n1858163\n1937739\n8225376\n1938520\n1938810\n1938955\n1938975\n1939056\n12253844\n1858531\n1838691\n1838905\n1838911\n4528692\n1835396\n1837172\n1839893\n5770922\n5770942\n1801051\n1801896\n4534779\n4534782\n1802280\n1803073\n4534762\n5114311\n8244266\n", + "regions/asia.classes": "1837646\n1934693\n1935614\n1935838\n1935849\n1992277\n1992283\n1992315\n1860668\n1732063\n1732114\n1732115\n1732416\n1732452\n1732508\n1732521\n1732525\n1732565\n1732662\n1732685\n1732763\n1732830\n1732842\n5101640\n1733154\n1733155\n1733243\n1733258\n1733394\n1733412\n1733484\n4525266\n5734897\n5101745\n5769191\n1734453\n5102207\n5102242\n1734496\n1734519\n1734690\n1734704\n1734826\n5734891\n5102287\n5102300\n1831890\n1832143\n5734640\n11453841\n1832235\n1832248\n1832254\n5734645\n1832612\n11505614\n8825467\n1845270\n1845547\n1845548\n1845607\n4529566\n4528100\n1846604\n10785815\n11730078\n1847062\n1847097\n1847157\n1847260\n1847392\n4528547\n1847641\n9546514\n1848219\n9868978\n1848273\n1848356\n1848378\n4528539\n1848864\n5122013\n1849284\n9007213\n1849656\n4527903\n1850570\n1850633\n1850781\n1851337\n1851543\n1851555\n1852165\n1852177\n6133343\n11287091\n1829533\n1829659\n1829776\n1828637\n6097236\n8871600\n7448174\n4525610\n10835385\n10855556\n5125130\n1861395\n1868428\n1868527\n5734146\n1845866\n1845962\n1834980\n8503184\n1839094\n1841261\n1830152\n1830191\n1830241\n1831458\n1831631\n1831643\n9379855\n8834672\n1839625\n5880147\n9734171\n10679326\n10746289\n11382064\n10698858\n11570545\n10701190\n11807833\n12199936\n11095591\n11418741\n7908344\n12259113\n12208733\n12235234\n12217030\n1758625\n1759150\n1759775\n1760140\n6132868\n6132869\n1760201\n1760927\n10889719\n1760970\n1761111\n1761213\n1761353\n1761387\n9257793\n1762151\n11562374\n1762219\n1762226\n1762298\n1763589\n5109766\n1763650\n1763782\n1763812\n1763976\n1764021\n1764032\n1764043\n1764060\n9278311\n1764531\n1764640\n1764880\n1764886\n1765653\n1765863\n1766260\n1766558\n1766560\n1766570\n1766584\n1766601\n1766618\n3257809\n6116699\n1766888\n1767044\n1767755\n1767758\n1767779\n1767780\n5110190\n11097510\n1767883\n1768440\n5110232\n1768898\n10820762\n1769103\n1769168\n11467034\n10848620\n1769410\n1769425\n1769465\n1769737\n1769772\n10881384\n12148290\n1769823\n1769827\n1769840\n1769852\n1769897\n1769901\n6132966\n6132967\n7701550\n8837162\n1771839\n1771975\n1771977\n1772352\n1772793\n4532500\n5110397\n5110417\n5110447\n5110490\n1774575\n1774576\n1775148\n5110546\n5110765\n5110769\n1777166\n1777631\n5110837\n1777695\n9372988\n6132953\n4687991\n6133029\n5110981\n5110986\n5110993\n5111007\n5111044\n6133058\n9610080\n1779399\n1779456\n6132938\n1780150\n5111830\n10203499\n1780705\n1780716\n1782115\n1783302\n1783652\n1783882\n1784804\n10208792\n1785744\n1785832\n1786317\n1786711\n11368766\n5112500\n6132971\n6132974\n1786980\n1786985\n1787009\n10860091\n6132805\n1788045\n5112531\n1788553\n6132936\n7346446\n6132826\n1788953\n1789225\n1789604\n1789794\n1790331\n1790692\n1790816\n10749137\n10766319\n1790876\n1790888\n1791010\n1791094\n1791097\n10743044\n6132950\n1791514\n1791698\n1791715\n11016336\n11725043\n11971514\n5113078\n5113082\n5113084\n5113148\n5113330\n5113352\n1792541\n1792695\n5113385\n5884243\n9504222\n1793429\n1793610\n1793613\n1793631\n1793635\n1793646\n1793656\n1793892\n5113925\n1796984\n10108671\n6132979\n10600368\n1797178\n1797258\n1797259\n1797276\n1797299\n1797333\n1797344\n1797349\n1797374\n1797429\n1797454\n1797479\n1797527\n4532461\n4532471\n4532473\n8355390\n8756768\n9332506\n1797727\n1798014\n1798101\n5113950\n5884247\n1798346\n1798408\n1798449\n1798481\n1798488\n1798504\n6132841\n6132850\n11732472\n11976273\n1787072\n1787079\n1798523\n1798529\n1798580\n1798594\n1798700\n1798794\n1798802\n1798807\n1798823\n1798863\n1798868\n4301310\n4532351\n4532352\n6115426\n6115437\n6133046\n6133051\n8793873\n1799417\n1799708\n1799743\n1799751\n1799757\n6132824\n6132825\n10722110\n1803148\n1803163\n1803197\n1803302\n1803824\n1804071\n1804477\n9343385\n1804906\n1805044\n1805111\n11494627\n12229237\n1805580\n5115166\n5115167\n5115198\n9663271\n1806814\n1806871\n1806936\n7874258\n1807969\n11453492\n1808140\n1808145\n1808161\n1808166\n1808180\n1808195\n1808221\n1808236\n1808286\n1808340\n1808348\n1808381\n1808440\n1808450\n1808559\n6198302\n9219266\n1808752\n5115701\n5115771\n1809019\n5115777\n1809115\n1809210\n1809308\n10189965\n1809387\n5116095\n10183056\n12006709\n1810099\n1810464\n10882244\n5116395\n5116412\n12176559\n12182061\n1811686\n1812500\n10671425\n10821201\n11736162\n12209759\n1813010\n1813036\n1813114\n1813263\n5117189\n7656811\n1814538\n1814653\n1814913\n1814928\n1814971\n5117399\n5117400\n1815260\n1815680\n10826443\n12249986\n1816029\n1816065\n1816138\n1816246\n1816276\n1816292\n1816299\n1816362\n1816881\n5117779\n1817797\n5734900\n11461056\n11860565\n1818413\n8326103\n1818659\n1818991\n1819050\n10822185\n1819128\n1819145\n4532293\n4532297\n6134023\n6134027\n6197200\n7346382\n7346384\n1819268\n1819270\n1819280\n11656384\n1819421\n8407461\n1819668\n6134035\n1819873\n5118348\n6122092\n7657803\n5118422\n10546538\n1820275\n1820282\n1820291\n1820318\n1820352\n1820372\n1820393\n1820401\n1820406\n1820414\n1820429\n1820440\n1820450\n1820451\n1820458\n1820477\n1820478\n5734655\n5734657\n7346381\n9420824\n1820565\n1820753\n1820888\n1821105\n1821260\n1822141\n1822142\n11731502\n12253343\n12037602\n9276279\n9347308\n5884571\n10503495\n8897869\n7596232\n12176367\n7346231\n12183285\n6097214\n4532544\n4532516\n6133081\n6133083\n4532532\n4532565\n10864524\n12021153\n12021649\n12089608\n9673208\n10270464\n8741750\n9473918\n9400545\n9559336\n6133292\n11332355\n6133340\n10062933\n10717837\n8148822\n12216332\n12242422\n9852545\n10806460\n6133252\n10072380\n6133325\n9754232\n10972780\n11142432\n10629533\n10309234\n12171522\n9493317\n9315833\n11962292\n10399906\n6133266\n6133269\n6133270\n6133271\n10754772\n10812069\n11232431\n6112449\n6133311\n6133312\n6133313\n6133315\n6133317\n8452092\n8526388\n8543494\n8624848\n9927378\n5734901\n6133262\n12257250\n10166724\n8831819\n12135372\n5115872\n5115874\n5116475\n8038357\n6133264\n6097254\n1774829\n5116698\n5116843\n12171068\n9266866\n10178326\n10282389\n10400868\n10469564\n10813849\n10907635\n10982648\n8874633\n9508913\n1783898\n1783906\n6133033\n5116504\n1788635\n9336001\n1781413\n1781421\n1803461\n4532405\n4532408\n4532412\n10866411\n6133241\n6133242\n6133244\n6133248\n7346227\n8000103\n9478424\n1781598\n1794273\n4532534\n1763761\n6115388\n6133297\n1774583\n1774598\n1774604\n1774618\n1774626\n1774635\n1774640\n1774654\n1774661\n1774682\n1774702\n1768626\n6132809\n1819852\n1780287\n1813174\n4532508\n1793515\n1793533\n5111643\n1804532\n1768461\n1760246\n5113036\n5109796\n1821455\n1821464\n1821478\n1821479\n1821505\n1821547\n1821651\n1821863\n1821920\n1821934\n1821940\n1822017\n1819337\n1819362\n1804182\n1774997\n6122364\n1815315\n1781446\n1781473\n6116076\n1783713\n1783725\n1812394\n8237987\n4532366\n4687933\n4687935\n6116646\n10926224\n11088003\n1820118\n1820137\n1819057\n4532453\n6116413\n1820039\n5118396\n1781531\n1798329\n1798331\n1798335\n1784947\n1785072\n1785105\n1765996\n1765999\n1766022\n6133069\n10272611\n10330198\n10598038\n11513188\n11612469\n1786597\n4687389\n5884188\n6132915\n6132916\n6132917\n5110012\n1772822\n12185656\n1809594\n1781350\n1781353\n6133013\n1796943\n1819685\n10098436\n11717028\n1771772\n1782310\n10094256\n6197138\n10765884\n9792270\n5108435\n5108440\n1771903\n1788813\n4301309\n10506164\n1777500\n1777517\n5112440\n1795542\n1860979\n1860983\n1860987\n1860994\n4522890\n4522891\n1860765\n1860768\n1992504\n1852956\n1835432\n1835433\n1835457\n9724183\n1837420\n4529064\n1839293\n1839296\n1840301\n1840346\n1840566\n1840581\n1840596\n1831752\n5125075\n10371735\n1869359\n1869363\n9883856\n1939510\n1939520\n5141344\n1860259\n1860261\n1860274\n4525177\n5123339\n5123394\n5123419\n5769164\n5880040\n5880041\n6132546\n5123449\n5123461\n5123474\n5123485\n5123489\n1869595\n1869706\n1869803\n1869976\n1870202\n1870237\n1870249\n1870250\n1870450\n1870650\n5125306\n1871212\n1871407\n4531402\n4531409\n8766638\n1871451\n1871630\n1871683\n1871698\n1871783\n1871988\n1872094\n1872169\n4531427\n7673242\n10787705\n1872848\n1872850\n1872873\n1872901\n1873051\n1873079\n1873215\n1873417\n1873776\n1873780\n1873783\n4531237\n4531264\n1873843\n1873890\n5125569\n5125596\n5125602\n5125633\n5125635\n5125689\n1874269\n1874274\n4531147\n1874743\n1874937\n1875120\n8219149\n1875327\n1875376\n1875827\n1875830\n1875865\n1875869\n1875918\n1875958\n1876168\n1876329\n1876409\n1876542\n1876592\n1876854\n1876922\n1877038\n1877345\n1877368\n9111961\n1877498\n5126052\n1877788\n1877941\n1877988\n4531417\n1878406\n1878470\n9835867\n1883045\n1888454\n5884888\n6133441\n4525884\n5141493\n1940510\n1940575\n1940639\n1940644\n1940717\n1940744\n4525777\n4525803\n1940807\n12211069\n1939879\n1736358\n1736377\n1736499\n1736560\n1736601\n1736623\n1736727\n1736905\n1736993\n1737015\n4529931\n10842267\n1737313\n1737342\n1737368\n1737491\n1737497\n1737524\n1737526\n1737533\n1737542\n1737650\n1737753\n1737776\n1737847\n8186212\n1738192\n1738222\n1738373\n1738422\n5102931\n5102951\n1738700\n8086347\n1739151\n1739337\n5102982\n1739471\n1739605\n1739833\n1739919\n1739922\n1739980\n1739999\n1740183\n1740185\n1740392\n7797515\n1740469\n1740482\n1740524\n1740623\n8094357\n1740797\n1740828\n1741056\n1741341\n1741368\n4530151\n5103061\n1741633\n1741752\n1742185\n1742263\n1742346\n5103613\n5103736\n5103948\n5771350\n8313553\n5103998\n11846897\n1743475\n7877231\n1743532\n1743604\n5104056\n1743768\n1743775\n1743782\n4529908\n1743828\n1743856\n1743862\n1743867\n1743898\n1743998\n1744071\n1744136\n1744180\n4530632\n1744526\n1744588\n1744593\n1744699\n1744728\n1744731\n1744739\n1744896\n1745013\n10844862\n1745561\n1745579\n1745600\n1745630\n1745634\n1745771\n1745781\n1745816\n1745895\n1745947\n1745952\n1745957\n1746027\n1746174\n1746327\n1746413\n1746440\n1746613\n1746644\n1746666\n1746714\n1746775\n1746832\n1746856\n1746876\n1747141\n5104442\n1747738\n5104597\n6097234\n1748605\n8691947\n5103121\n5103176\n5103227\n5771229\n5771232\n5771236\n5771239\n5771249\n5771258\n4525510\n4525530\n4525540\n1920851\n1920864\n10159697\n10707501\n9916153\n1920957\n1920991\n1920996\n1921009\n1921010\n1921021\n1921040\n1921044\n7346426\n1921055\n10581870\n10825466\n1921092\n1921093\n1921150\n1921163\n1921262\n1921263\n1921300\n10556522\n1921466\n7387466\n1921633\n7346430\n5138069\n1921897\n1922057\n1922085\n1922111\n1922143\n1922163\n1922244\n1922285\n1922288\n10384044\n10442031\n9904499\n1922311\n1922343\n8016522\n5138200\n1922572\n1922584\n4535092\n1922689\n8782891\n1922745\n1922771\n1922937\n5138257\n1922994\n1923019\n5138298\n5138543\n5138561\n5714680\n1923458\n1923491\n1923525\n1923649\n1923650\n1923651\n1923668\n4708977\n1923796\n1923809\n1923883\n1923917\n1924044\n1924057\n1924097\n1924193\n5138681\n1924298\n1924323\n10656713\n1924390\n1924417\n1924458\n1924558\n1924713\n1925233\n4535172\n1925381\n1925454\n1925543\n1925609\n1925628\n1925679\n1925711\n1925731\n1925743\n1925877\n1925918\n1925962\n1926054\n9816676\n1926324\n1926436\n1926437\n1926446\n1926448\n1926456\n1926546\n1926550\n1926574\n5883255\n7390086\n1926593\n1926611\n10116946\n10361239\n10606547\n1926722\n1926800\n1926861\n10087308\n11008182\n11508257\n11543078\n1926972\n1927025\n1927034\n1927217\n1927219\n1927242\n1927272\n1927274\n1927284\n4709111\n5883052\n7408690\n8322165\n9994384\n10517500\n1927348\n1927393\n1927439\n1927445\n1927707\n1927717\n5882965\n7680748\n1927897\n1928248\n5139040\n5139050\n1928349\n1928361\n1928376\n1928382\n1928419\n5139156\n1928628\n5139201\n1928754\n1928849\n1928908\n1928915\n9856663\n1928960\n1929270\n1929402\n1929659\n1929697\n5139309\n5139339\n8356768\n1930110\n1930832\n1930904\n1930916\n1930935\n4535106\n1930954\n1930968\n1931109\n1931132\n8643155\n1931148\n1931179\n1931509\n1931561\n5734268\n7346434\n1931655\n1931656\n1931706\n1931729\n1931735\n1931779\n5139915\n1931889\n1931906\n1931908\n1931943\n1931956\n1931958\n1931979\n1931997\n1932020\n4709051\n1932043\n1932159\n1932166\n1932172\n1932189\n1932206\n1932246\n1932273\n1932287\n4709095\n4708995\n1932411\n1932551\n7346444\n1932607\n5139990\n6132685\n1932752\n1932812\n1932814\n1932863\n1932960\n1932976\n5806412\n1933028\n1933044\n1933084\n4535162\n5140214\n5140244\n5140436\n5140443\n7634721\n7664111\n1933583\n1933647\n1933649\n7346407\n1933679\n1933793\n1933844\n1933845\n5140534\n5140561\n1934187\n1934188\n1934192\n1934211\n1934213\n1934221\n1935363\n1935372\n1935377\n1935405\n1935408\n1935410\n1935454\n1935459\n1926260\n5138929\n7346417\n10879371\n11874998\n4709102\n1933095\n1933138\n1924494\n11055981\n9623220\n1752161\n5734556\n1752373\n1752483\n1752492\n1752494\n1752603\n1752651\n1752749\n1752758\n1752849\n1752903\n1753081\n1753215\n1753395\n5105458\n5105467\n5105547\n5105560\n5105570\n1753432\n1753435\n11014495\n1753636\n5734560\n1753759\n5105588\n10955682\n10932946\n7345843\n6133481\n10017342\n5105339\n5105259\n10795141\n11673056\n1919151\n1919160\n1919161\n1919176\n1919181\n1919221\n1919223\n1919320\n1919328\n1919333\n1919340\n1919344\n1919346\n1919348\n1919407\n1919412\n1919438\n1919444\n1919534\n1919551\n1919564\n1919581\n1919589\n1919635\n1919697\n1919706\n1919712\n1919716\n1919720\n1919728\n1919731\n1919741\n1919744\n1919756\n1919758\n1919762\n1919951\n1919966\n5137747\n5137748\n1920181\n1920237\n1920247\n1920258\n1920259\n5137790\n5137808\n5137823\n5137828\n5137832\n5137833\n5137847\n5137849\n5137854\n5137858\n5805954\n1920349\n1920356\n1920357\n1920362\n1920369\n1920374\n1920395\n5137861\n1920454\n1920467\n1920469\n1920472\n1920491\n1920494\n1920496\n1920502\n1920506\n1920512\n4535307\n5137889\n5137891\n5804932\n5805036\n5805407\n1920515\n5137902\n5137903\n5137908\n5137912\n5137920\n5137926\n5137932\n5137935\n5137938\n5137945\n5137946\n5137949\n5137955\n1920707\n1920709\n1920711\n1920712\n1920718\n1920786\n5804166\n5714914\n5137573\n5137578\n5137582\n5137595\n5137605\n5137612\n5137636\n5137663\n5137677\n5137682\n5137689\n5137706\n5137708\n5803588\n8203812\n1920218\n5137763\n7207679\n1749070\n1750166\n5104891\n5104759\n1758003\n1758440\n1758441\n1758461\n1855241\n1868837\n1868952\n1869057\n1869178\n1869187\n11794362\n1963095\n1963096\n1973530\n11826016\n5143303\n5143311\n5143315\n1954496\n1954563\n5143338\n5143354\n5143368\n5143380\n5143384\n5143437\n5143453\n5143506\n5143511\n5143525\n5143575\n5734335\n1954891\n1954911\n6133648\n1955389\n5143651\n1955552\n1955581\n6133676\n1955694\n1955725\n1955806\n1955856\n5143675\n5143697\n1956309\n1956384\n5734542\n5734543\n1956440\n1956496\n1956524\n1956536\n1956629\n1956710\n6133593\n4525068\n1957161\n1957174\n1957266\n1957300\n1957333\n1957368\n1957413\n1957460\n1957523\n1957572\n1957579\n1957583\n1957611\n1957718\n1957746\n1957791\n1957816\n1957852\n1957854\n5143947\n1958024\n1958045\n1958152\n1958158\n1958163\n1958241\n1958252\n1958255\n1958259\n1958260\n1958275\n1958282\n1958290\n1958305\n1958307\n1958323\n1958324\n6544637\n1958422\n1958454\n1958463\n1958483\n5144027\n1959395\n1959461\n1959494\n1959645\n1959652\n1959666\n1959667\n1959682\n1959735\n6133552\n1959876\n1959914\n1959919\n1959948\n1960002\n10694777\n1960023\n1960181\n1960182\n6133509\n1960484\n5144092\n5144093\n1960571\n1960595\n1960617\n6133518\n1960686\n1960854\n1960963\n1961013\n1961037\n1961040\n5734344\n1961052\n1961126\n1961162\n7346236\n1961190\n1961252\n1961647\n1962204\n1962265\n1962268\n1962434\n1962447\n1962516\n9812211\n1962636\n1962678\n1962839\n1962860\n1963011\n4302252\n5734349\n1963168\n1963306\n5144345\n1963446\n1963629\n1963709\n1963710\n1963733\n1963827\n11644349\n1964024\n1964025\n1964029\n6133500\n1964113\n1964116\n1964195\n1964247\n1964316\n1964331\n1964437\n1964471\n6133502\n1964637\n1964653\n8361848\n1964738\n5144426\n1965166\n1965197\n1965763\n1965777\n1965795\n1965810\n1965825\n1965841\n1965913\n1966017\n5144431\n5144438\n5144472\n9919915\n9370070\n5144499\n1966286\n1966302\n1966310\n5734448\n10670854\n1966362\n1966367\n5144534\n1967003\n1967006\n1967011\n1967039\n5144543\n1967245\n1967265\n1967273\n1967445\n1967590\n1967595\n1967597\n1967672\n1967688\n7346240\n1967815\n1967873\n1968147\n1968182\n1968193\n7681733\n1968304\n1968363\n1968730\n1968746\n1968837\n1968867\n1968951\n11598540\n1968990\n1969357\n1969463\n1969491\n1969581\n6133643\n1969621\n1970034\n1970136\n1970213\n1970284\n1970322\n1970436\n5734405\n6133513\n7346252\n5144677\n5144721\n5144782\n5144787\n5144805\n5144806\n5144864\n5144880\n5144900\n5144936\n5145009\n5145075\n5145136\n5145186\n5145255\n5145260\n5145269\n5145396\n5145409\n5145495\n5145502\n5145522\n5145560\n5145624\n5145729\n5145735\n8014296\n9194811\n1971847\n1971858\n1971888\n6133516\n1972094\n1972185\n1972187\n1972234\n1972250\n5145870\n5145965\n5146038\n5146062\n7541913\n1972443\n1972613\n1972614\n1972616\n1972620\n1972631\n10732353\n1972754\n5146282\n1973242\n1973338\n1973358\n1973393\n1973397\n1973414\n5146434\n5146476\n5146483\n5146496\n5146508\n5146559\n5146566\n5146567\n5146599\n5146601\n5146608\n5146611\n5146659\n5146677\n5146746\n5146752\n5146762\n5146763\n5146833\n5146837\n5146883\n5146894\n5146946\n5146961\n5147030\n5147039\n5147043\n5147058\n5147062\n5147150\n5147171\n5147208\n5147214\n5147232\n5147245\n5147306\n5147354\n5147415\n5147441\n5147478\n5147492\n5147498\n5147516\n8366158\n1975164\n1975198\n6133559\n9875420\n5147608\n5147638\n11856219\n1975546\n1975553\n1975571\n1975583\n1975597\n1975711\n1975733\n8329661\n1975793\n8160782\n1975805\n1975806\n10835542\n1975892\n1975897\n1975903\n1975964\n1975979\n5734539\n9356491\n9410573\n9548993\n1976163\n1976212\n1976213\n1976224\n1976228\n1976311\n1976462\n1976463\n1976469\n1976470\n1976483\n5147681\n6097233\n7973517\n1976928\n1977003\n1977007\n1977068\n5147819\n5147827\n5147834\n1977182\n1977184\n1977297\n5734420\n6133548\n5147917\n5147968\n5148043\n5148055\n5148115\n5148214\n5769028\n1977813\n1977833\n1977863\n6133582\n1977962\n1977967\n1978010\n1978034\n1978045\n1978056\n1978065\n1978114\n1978375\n1978385\n1978398\n1978405\n1978407\n1978422\n1978424\n1978445\n5734388\n1978499\n1978524\n1978529\n4524636\n4524638\n5734519\n6133560\n5148252\n10738407\n1978789\n1978821\n5734396\n1978977\n1978996\n1978999\n6133546\n1979021\n5148286\n1979222\n1979229\n1979308\n1979473\n1979521\n1979561\n1979562\n1979758\n1979781\n1979787\n1979801\n1979806\n1979822\n1980269\n5148436\n5148487\n1980521\n1980532\n11449815\n1980694\n1980811\n1980827\n1980917\n8421569\n1981063\n6133585\n1981357\n1981457\n1981696\n11173690\n10592969\n7345811\n7345813\n1981937\n1981938\n1981998\n1982007\n1982203\n1982221\n1982267\n1982291\n1982406\n1982500\n1982529\n1982541\n1982636\n1982865\n1982885\n1983052\n1983393\n1983442\n1983525\n1983528\n1983648\n1983755\n1983922\n1983999\n1984033\n11121180\n5149012\n1984734\n5149081\n5149136\n5149174\n5149203\n1984942\n1984949\n1985061\n1985152\n1985158\n1985167\n1985181\n1985191\n1985192\n1985228\n1985230\n1985573\n1985707\n6133659\n1985926\n1985993\n1986009\n1986032\n1986052\n1986054\n1986056\n1986061\n5734345\n1986157\n1986166\n1986171\n1986191\n1986220\n1986452\n1986508\n1986522\n1986575\n1986623\n1986650\n1986779\n1986787\n1986936\n5149308\n5149315\n6133614\n1987203\n1987204\n5768880\n1987362\n1987377\n1987527\n9137631\n1987629\n1987665\n1987740\n1987744\n1987766\n1987767\n1987775\n1987776\n1987786\n1987787\n6133591\n4524221\n11650277\n6133534\n11190148\n1988002\n5734451\n1988225\n1988257\n1988306\n1988420\n1988487\n1988593\n1988642\n8388883\n5149414\n5149438\n5734528\n6133644\n1989355\n1989393\n1989428\n1989942\n1990043\n1990050\n1990066\n1990088\n1990105\n1990150\n5734390\n1990551\n1990582\n5149474\n1991123\n1991179\n6133501\n5149609\n1991277\n1991310\n1991371\n1991378\n1991394\n1991779\n1991783\n5149836\n5149843\n10155932\n11098546\n11869776\n1991945\n5734515\n11635419\n1992066\n5149929\n5149986\n6133619\n5734398\n5880533\n5880539\n5880545\n5880550\n5880552\n5880559\n5880563\n8237343\n8632989\n7429212\n9442902\n9414984\n1989594\n4524740\n7990739\n4523560\n4524054\n4523461\n4524998\n4525034\n4524376\n4524822\n11828714\n4524712\n10422582\n10574156\n10632124\n4523522\n5880392\n6133595\n6133596\n6133597\n4523519\n4524070\n4524072\n4524955\n4524962\n10530208\n11555221\n4525078\n6133667\n6133670\n6133673\n6133674\n6133675\n7346249\n9220953\n9249651\n6133637\n6133620\n6133519\n11780161\n6133604\n6133607\n10629052\n7346237\n6133520\n6133562\n10864093\n5734379\n11548960\n7345819\n6133523\n6133525\n6133528\n6133542\n6133497\n6133498\n10477629\n6133575\n9962269\n6133517\n6133586\n6133635\n10175639\n9617411\n9932090\n7346256\n7345829\n11652557\n5734535\n7345801\n5734362\n11477039\n5880478\n6133540\n10755716\n5144190\n5146412\n5734482\n5149499\n5149659\n5149665\n5149704\n5149746\n5149768\n5149787\n5734422\n7443518\n5146303\n5146335\n5146342\n5146379\n1991462\n1991466\n4302268\n4524393\n1942522\n1942060\n1942067\n1942244\n1942251\n5141643\n10773498\n1942378\n1942383\n1942618\n1942621\n1942636\n1942697\n1942715\n1942769\n1942808\n1942836\n4689929\n5141677\n1942878\n1943212\n1943223\n1943236\n1943308\n1943397\n8178854\n8277078\n5141795\n1943505\n1943519\n1943619\n1943625\n1943757\n8073674\n8133678\n8273661\n1944462\n1944483\n1944503\n1944504\n1944521\n1944591\n1944778\n5141924\n1945066\n9050611\n1945088\n1945122\n1945137\n1945143\n1945173\n1945225\n1945227\n1945270\n1945274\n1945286\n1945569\n1945589\n1945605\n1945694\n1945710\n1945715\n1945738\n1945742\n1945748\n1945814\n1945837\n1945856\n1945863\n1945874\n1945877\n1945878\n5142001\n1946019\n1946051\n1946058\n1946067\n1946145\n5142067\n1946432\n1946486\n7346354\n1946695\n1946731\n1946737\n1946738\n7389824\n1946916\n1946917\n1947117\n1947306\n1947335\n1947385\n1947409\n1947446\n1947449\n1947456\n1947491\n1947492\n1947496\n1947626\n1947661\n1947673\n1947703\n1947727\n1947740\n1947745\n1947753\n1947765\n1947775\n5734665\n1947805\n1947846\n1948061\n1948062\n1948073\n1948088\n5142213\n1948464\n1948465\n1948941\n1949008\n1949015\n1949336\n1949366\n1949404\n1949419\n7346351\n8828146\n9068968\n5142338\n5142352\n1949784\n1949794\n1949850\n1949877\n1949929\n5142499\n5142599\n8109173\n1950013\n7346356\n1950156\n1950169\n1950171\n1950302\n1950362\n1950521\n1950533\n1950879\n1950936\n1951157\n5977247\n5977257\n8270406\n7633472\n5142725\n5142729\n5142730\n4535396\n5142006\n5142032\n5142042\n1869512\n1952878\n1952883\n1952909\n10744228\n1800191\n5109821\n1758613\n9355953\n1758874\n1758878\n1759055\n1759069\n1759079\n1759083\n4533952\n7972792\n1759153\n1759177\n1759620\n1759667\n1759686\n5108636\n10329023\n1760104\n7444489\n1760593\n1760620\n1794361\n4534225\n1760857\n1760891\n4533255\n1760939\n1760943\n1761041\n1761438\n1761735\n1761778\n1762244\n6132749\n1762608\n1762657\n6132957\n1762680\n5109506\n5109523\n5109554\n5109599\n5109614\n5109646\n5109661\n5109670\n5109722\n1763610\n1763727\n1763741\n1764174\n1764553\n1764791\n1765010\n1765011\n1765017\n1765038\n1765044\n4534245\n4534252\n5109830\n5109843\n5109848\n5109855\n5109872\n5109882\n5109898\n5109931\n5109943\n8352161\n1765508\n1765658\n1765767\n1765954\n1766130\n1766131\n1766137\n1766210\n1766410\n7895336\n1766646\n1766741\n1766910\n11034779\n1767134\n1767368\n1767393\n1767511\n1767597\n1767625\n10575632\n1767655\n1767674\n5110120\n5734744\n5772169\n5772171\n5772172\n5772176\n5772178\n5772186\n5772196\n5772199\n5772202\n5772206\n5772210\n5802396\n5883914\n5883925\n6132943\n7345742\n7388922\n8045644\n1768117\n5110200\n1768341\n5110213\n1768568\n1768698\n1768702\n1768771\n1768815\n1768819\n5110256\n5110258\n1769057\n1769095\n1769194\n1769209\n1769505\n1769519\n1769566\n1769958\n1769978\n1770150\n1770172\n1770353\n1770477\n1770530\n4532696\n8393221\n1771385\n7725644\n1771509\n1771531\n1771555\n1772013\n1772094\n6133806\n1772169\n1772179\n5772129\n1772977\n1773163\n8222049\n1774272\n1774347\n1774470\n1774797\n4301304\n6115946\n4534046\n4534052\n4534057\n5772269\n4534719\n1775962\n1775963\n1776067\n1776330\n1776371\n1776619\n1776862\n6132861\n4534463\n1777253\n5110818\n5110871\n5110885\n1778074\n4534299\n1778109\n1778143\n5111481\n5111501\n5111535\n5111574\n5772222\n1779258\n1779435\n1779633\n1779641\n1779690\n1780378\n4533325\n1781233\n1781234\n5111974\n5111980\n1781803\n1781841\n1782168\n1782177\n1782341\n1782354\n1782457\n11763567\n1782543\n1782560\n1782579\n1782615\n1782627\n1782672\n1782726\n1782757\n1782763\n1782777\n1782803\n1782841\n1782872\n1782927\n1782948\n1783043\n6133026\n5112283\n5112291\n5714973\n5715004\n5734845\n5772349\n5772351\n1783855\n1783861\n1783971\n1784349\n1784359\n1784513\n1784761\n1784853\n4534290\n1785145\n1785162\n1785181\n1785185\n1785286\n4532886\n4532888\n4532890\n1785314\n1785322\n1785329\n1785361\n1785367\n1785883\n1785887\n1785888\n1785895\n1786007\n1786017\n8292872\n1786360\n1786448\n1786452\n1786515\n1786573\n1786619\n1786664\n1786902\n1787064\n1787112\n1787213\n1787267\n1787279\n1787367\n1787373\n1787381\n4687681\n9268082\n1787400\n1787504\n1787506\n1787590\n1787610\n1787631\n1787751\n1787770\n1787825\n1787841\n4534086\n1788522\n4534011\n1788846\n1788856\n1788917\n1789071\n1789076\n1789086\n4533924\n1789553\n4534166\n1789695\n1789730\n1789745\n1789753\n1789755\n1789957\n1790002\n1790072\n1790084\n1790153\n4533115\n1790361\n1790364\n1790376\n9174377\n1790625\n1791384\n1791422\n1791660\n1791784\n1792061\n1792292\n1792300\n1792335\n1792377\n1792411\n1792414\n1792418\n1792426\n1792431\n1792449\n1792475\n10684776\n1792768\n5113370\n1792996\n1793238\n1793243\n1793246\n7918000\n1793689\n1793877\n1793986\n1795065\n1795068\n4532908\n6133011\n1795215\n7869346\n7922810\n1795597\n1795854\n1795900\n1795957\n1796007\n1796117\n1796145\n1796169\n1796217\n4532700\n4688166\n4688169\n4688172\n1796423\n1796451\n1796463\n8105817\n1796678\n1797030\n1797735\n1798060\n4533431\n4533433\n4533444\n6133001\n6133002\n6133006\n6133007\n6133010\n1798090\n1798372\n11992983\n1798916\n1798922\n1798931\n1798971\n1798974\n1799135\n5113951\n1799695\n1799701\n1800004\n1800032\n1800149\n9536457\n6097260\n8742426\n4534389\n4534207\n10638451\n4532811\n4533273\n8890502\n4533202\n4534398\n6544687\n4534538\n4532269\n4533123\n4533125\n4534408\n4534533\n6132989\n6132762\n6133075\n5883985\n6132781\n8021109\n11478679\n10121804\n11311045\n5110644\n7654770\n6116899\n6132797\n1779334\n5114198\n1763072\n5109385\n5772063\n9038042\n8491927\n4534675\n4534681\n4534683\n4534685\n4534686\n1792555\n8108800\n1771634\n1771650\n1771675\n1771678\n1771698\n1770772\n1770821\n1770880\n1771040\n1771214\n1771245\n4533714\n6132931\n7940536\n1765751\n10841562\n5113847\n5113853\n5772309\n5108660\n5108671\n5108705\n5108724\n5108737\n5108752\n5108761\n5108787\n5108794\n5108796\n5734817\n6132880\n9243764\n1773904\n1759394\n1789512\n1789530\n4533360\n10933525\n5110282\n11566649\n11615549\n11731155\n4532203\n4532206\n4532208\n4532239\n4532253\n4532260\n4532266\n6115772\n6115820\n6115822\n6115830\n1782249\n1782273\n1782279\n1782289\n10063383\n1767293\n8363507\n9325654\n10458175\n10683012\n10702885\n1822487\n1822490\n1822493\n1822587\n1822610\n1822613\n1822787\n1822796\n1822819\n1822830\n1822848\n1822852\n1823294\n1823444\n6133742\n1823573\n5118565\n7346263\n6133720\n1823706\n10996761\n1823726\n5118582\n1824113\n1824117\n1824242\n5734235\n6133692\n7875265\n1824330\n1824338\n1824354\n1824390\n1824666\n1824751\n1824766\n1824845\n1824997\n1825064\n5118859\n1825077\n1825082\n1825083\n4534909\n4534914\n1825156\n1825176\n1825336\n7346284\n5118904\n7624468\n1825539\n5118974\n5118978\n1825786\n7345777\n1825920\n1825956\n1825967\n1825971\n1825983\n1826022\n1826033\n1826108\n1826129\n11322712\n5118996\n5119000\n6133700\n10510959\n11059353\n6133750\n1827125\n1827349\n1827408\n1827414\n1827484\n4534869\n6133691\n9883140\n5119181\n5119211\n5119223\n5119239\n5119245\n1827649\n1827650\n1827687\n1827711\n11435704\n1828162\n1828180\n4534872\n6201790\n7346286\n6133680\n6133681\n6133684\n6133687\n6133688\n7346276\n9921001\n5118837\n5118841\n7346271\n7346273\n9486293\n1822502\n1892554\n1892555\n5127748\n5806166\n11464595\n1892821\n5127835\n5127867\n5127893\n5127916\n5127932\n5127955\n5127971\n5127992\n5127998\n7346346\n9963153\n1893137\n1893177\n1893204\n1893241\n1893266\n5792081\n5128034\n1893329\n1893341\n10055104\n10477747\n12106975\n1893526\n1893538\n1893546\n1893551\n1893558\n1893612\n1893645\n1893660\n1893663\n1893787\n1893793\n1893921\n1893923\n1893951\n4704279\n8832485\n8982591\n9136904\n10333787\n1893989\n1893993\n1893998\n1894002\n1894012\n1894057\n1894060\n1894164\n1894268\n5882039\n5128161\n5128169\n5128182\n7712938\n10398658\n1894714\n4535614\n4535630\n4535632\n4535636\n8049830\n10639484\n1894840\n4535827\n1895037\n4535809\n4535817\n1895159\n5128323\n5128326\n5128353\n5128357\n9804158\n1895448\n1895499\n1895527\n1895609\n1895667\n1895670\n1895867\n1895875\n1895956\n1895984\n1895992\n1896061\n1896063\n1896073\n1896105\n1896141\n1896142\n1896152\n1896304\n5128519\n1896841\n1896915\n1896922\n1897664\n1897677\n1897685\n1897692\n1897722\n1897747\n1897770\n5129266\n1897808\n1897814\n1897817\n1897834\n1897873\n10383968\n1898234\n1898250\n1898286\n4299368\n5129293\n7346344\n1898434\n1898441\n1898521\n1898544\n5129378\n5129417\n1898946\n1898958\n1898970\n1898988\n1899071\n1899187\n1900093\n1900890\n1900897\n1900939\n1901213\n5130277\n1901372\n1901399\n1901404\n1901411\n1901427\n1901428\n1901429\n1901435\n1901463\n1901832\n1901850\n5130369\n5130392\n5130439\n5130444\n5130456\n5130464\n5130471\n5130476\n5130521\n5130542\n1902533\n1902543\n1902560\n1902568\n1902572\n1902586\n1902749\n8140883\n8189761\n4535689\n10394962\n10577473\n5130748\n5130775\n5130813\n5130814\n5130851\n5130904\n5130908\n5130944\n5130971\n5131058\n9968404\n9999965\n1904272\n1904281\n1904282\n1904283\n1904701\n1904719\n1904728\n1904760\n1904764\n1904798\n1904884\n1904887\n1904888\n1904916\n1904921\n1904922\n1904932\n1904938\n1904943\n1904948\n1904996\n1905079\n1905142\n6221746\n1905383\n1905396\n1906552\n8208583\n1907430\n1907432\n1907436\n1907475\n1907498\n1907511\n1907534\n1907541\n1907547\n1907576\n1907580\n1907620\n1907625\n1907637\n1907666\n1907672\n1907687\n4535754\n5881946\n7976131\n1908352\n1908367\n1908660\n1908700\n1908702\n1908707\n1908713\n1908775\n5133051\n11608942\n1908818\n1908840\n1908863\n1908871\n1908897\n1908929\n1908953\n1908962\n1909123\n1909216\n7346301\n8978362\n1909281\n1909319\n10656625\n1909398\n1909607\n1909649\n1909659\n1909810\n1909818\n1909838\n1909854\n1909865\n1909879\n1909884\n1910371\n1910706\n1910753\n6133858\n1910809\n1910812\n1911093\n1911112\n1911168\n1911198\n1911278\n1911298\n1911300\n1911461\n1911503\n7728366\n5133687\n5133689\n1911633\n4535592\n4535596\n1911736\n1911755\n7809779\n8078362\n5133693\n5133695\n1912325\n1912372\n1912395\n1912428\n1912470\n4299535\n4299565\n4299576\n4299597\n4299599\n5133920\n5133990\n5772890\n7428726\n10097687\n10137350\n4535581\n5134098\n5134301\n8312017\n1913091\n1913105\n1913175\n1913178\n1913328\n5134469\n5134517\n5134559\n5134661\n5134667\n5134682\n5134693\n5134810\n5135026\n5135191\n5135355\n5714507\n7738295\n8233062\n8314088\n9915028\n9967126\n1915031\n1915079\n1915080\n1915110\n1915140\n1915144\n1915154\n1915160\n1915262\n1915270\n1915275\n1915325\n1915332\n8669164\n11372793\n11516142\n11535847\n5135643\n5136306\n1916376\n1916410\n1916412\n1916509\n7854318\n1916758\n5136514\n5136594\n5136681\n5136713\n5136752\n5136790\n5136866\n5136868\n5136939\n5137022\n5137085\n5137086\n5137156\n5137166\n5137291\n5137330\n5137388\n1918026\n1918321\n1918394\n1918406\n1918408\n1918411\n1918416\n1918467\n1918495\n1918497\n1918509\n1918517\n1918532\n1918533\n1918547\n1918553\n1918554\n1918627\n1918667\n1918669\n1918736\n1918776\n1918843\n1918854\n8035998\n11645316\n4535618\n4535620\n4535510\n10595994\n10000384\n10043827\n11419137\n11760688\n11840957\n4704316\n5130587\n5130682\n7762841\n10376507\n5131096\n5131142\n5131192\n5131256\n5131293\n5131339\n5131372\n5131407\n5131443\n5131467\n5131493\n5131495\n5131520\n5131555\n5131565\n5131585\n5131593\n10228568\n10277877\n10508423\n11425145\n5132154\n5132183\n5132191\n5132238\n5132479\n7346328\n7346335\n8001799\n5806167\n5881397\n6100725\n6100726\n7642610\n5135513\n5135546\n11525418\n1896957\n5128569\n5128587\n5128644\n5128663\n5129000\n5129025\n5129091\n9087922\n10201273\n5131910\n5881551\n8138711\n8549720\n1910576\n1910628\n1910629\n1910648\n1910662\n1902143\n1902182\n1899349\n1899433\n1899818\n5129913\n7768674\n7934873\n8168644\n8393082\n1914701\n1914708\n1914734\n1914749\n7346340\n1918584\n1951370\n1951412\n1951462\n1951505\n1951507\n1951522\n1951529\n1951542\n1951557\n5142870\n1951631\n9512631\n1951649\n1951671\n1951675\n1951747\n9156165\n1951791\n5734305\n1951818\n1951840\n1951844\n1951859\n1951874\n1951881\n5734326\n1951919\n1952014\n1952034\n1952052\n1952062\n1952147\n1952175\n1952177\n1952229\n5142948\n1952281\n5143007\n5143048\n5143049\n5143076\n5143080\n1952449\n1952481\n1952532\n10782264\n1952551\n1952611\n1952685\n1952704\n5143116\n5143129\n5143147\n1952816\n1952857\n9502606\n5885428\n8604089\n6097228\n1868211\n1868409\n4702564\n1868499\n6544581\n1868470\n5141581\n5141590\n1735121\n1941864\n5121613\n1842097\n1842485\n4301036\n1842695\n9755262\n1843564\n1843602\n1730519\n1730543\n8292351\n5101394\n1730948\n1730978\n1731263\n4525641\n1731598\n10450446\n8008237\n8130866\n8402212\n1872359\n1872361\n1872368\n1878626\n6133117\n1878744\n1878782\n1878862\n1878879\n1878895\n1878904\n1878939\n1879001\n1879125\n1879141\n1879227\n1879337\n1879339\n1879340\n1879379\n5734212\n1879408\n1879452\n1879471\n1879490\n5126212\n5126217\n1879630\n1879691\n1879731\n1879735\n1879765\n10915497\n1879970\n1880062\n1880064\n1880138\n1880140\n1880143\n5126635\n5126637\n1880353\n1880451\n1880464\n1880465\n9524458\n6133225\n1880852\n1880858\n1880907\n1880931\n1880968\n1881089\n1881121\n1881126\n1881151\n1881170\n9819403\n4531687\n1881293\n1881320\n1881329\n1881336\n1881340\n1881362\n1881515\n4531713\n1881834\n1881964\n1882021\n1882210\n1882253\n1882266\n1882272\n1882310\n5126834\n1882753\n1882767\n1882771\n1882884\n1882901\n1882905\n10156181\n1882930\n1882941\n1882960\n1882965\n1883067\n1883161\n1883386\n1883394\n5127097\n1883873\n1883943\n1883951\n1884051\n1884061\n4531690\n1884212\n4531708\n1884228\n1884229\n9294363\n1884434\n1884437\n1884449\n1884461\n1884465\n1884479\n1884671\n6120980\n1884774\n1884816\n1884835\n1884844\n1884858\n1884877\n1884890\n4532122\n1884908\n1884909\n4532146\n1884970\n1885012\n1885262\n1885263\n1885569\n1885623\n1885630\n6133181\n1885745\n1885763\n1885826\n1885836\n1885919\n1885937\n1885945\n1885994\n1886015\n1886084\n1886088\n1886241\n1886251\n1886320\n1886362\n8223165\n1886526\n1886587\n1886700\n1886720\n1886726\n1886729\n7562564\n1886929\n1887054\n1887290\n1887509\n1887586\n4531670\n1887691\n1887701\n1888027\n1888040\n1888092\n4531968\n1888324\n1888346\n10922411\n1888484\n1888537\n1888579\n1888619\n1888733\n1888743\n1888759\n1888891\n1888893\n1888906\n1888911\n1888913\n9535420\n1889039\n1889043\n1889053\n1889071\n1889074\n1889239\n1889249\n1889270\n1889272\n1889277\n1889287\n1889356\n1889358\n1889370\n1889531\n1889552\n1889563\n1889942\n1890012\n1890031\n5127521\n1890097\n1890187\n9519191\n1890287\n1890320\n1890335\n1890343\n7543006\n10180624\n1890410\n1890487\n1890512\n1890522\n1890534\n1890576\n1890656\n1890670\n1890699\n1890724\n1890772\n1890776\n1890898\n1891059\n1891129\n1891167\n1891177\n1891190\n1891217\n1891326\n1891339\n1891366\n1891386\n1891426\n1891473\n1891493\n1891494\n4532022\n4532024\n1891533\n1891583\n1891636\n1891758\n1891889\n1891936\n1892153\n1892242\n1892245\n1892476\n10141437\n11056379\n9674732\n1884255\n1884370\n1884403\n5884851\n6133139\n6133140\n6133141\n5771877\n10227418\n4532125\n9967529\n10145421\n6120803\n6133232\n6121010\n10513366\n10502505\n10397209\n6133154\n10959264\n6133158\n10375403\n5126675\n5126680\n7446048\n8532380\n8537359\n8823068\n8858121\n9100030\n9137965\n1886374\n1889716\n1889765\n1889833\n5127592\n5127609\n5127629\n5127644\n5127656\n5127669\n5127675\n5127683\n5127688\n5127698\n5802339\n1887108\n4532050\n4532088\n4532095\n6121184\n1888638\n1888639\n1883885\n4532150\n4532160\n5771880\n10410699\n1846111\n1846133\n1939597\n1830879\n1831009\n1831136\n4708183\n1854202\n5122430\n5122439\n1854615\n1854824\n1854849\n4526050\n1858637\n1858674\n1858698\n1858775\n1858930\n1859046\n1859177\n1859305\n1859453\n9749806\n6133397\n1859932\n1860026\n4536472\n4536483\n1973467\n5123180\n5123221\n1864897\n1865593\n10014340\n1865650\n1865659\n1865660\n1865666\n1865671\n9914882\n9972403\n1865930\n1866237\n5734291\n1866356\n6106943\n1866491\n1866530\n1866549\n1866556\n1866568\n1866573\n9906979\n5124880\n5124911\n10047346\n1867820\n1867928\n8439879\n9983244\n1867991\n1867993\n11643393\n11670751\n11729388\n5124673\n5124716\n5120278\n1841813\n1841946\n10019169\n10005133\n1861451\n1861456\n1861457\n1861488\n1861494\n1861510\n1861644\n1861663\n1861665\n1861673\n1861697\n1861705\n1861714\n1861721\n1861797\n1861842\n1861862\n5123674\n1861933\n1861936\n1861937\n1861938\n1861949\n1861951\n6106744\n1861975\n1862008\n1862026\n1862061\n1862066\n1862072\n5123676\n5123685\n1862293\n1862363\n1862370\n1862394\n1862401\n1862403\n1862414\n9836014\n10374414\n11907754\n1862430\n1862434\n1862449\n1862454\n1862468\n1862475\n1862481\n1862516\n1862517\n1862521\n1862526\n6106708\n5123707\n5123709\n1862572\n1862578\n1862580\n1862692\n1862719\n1862765\n1862774\n1862837\n1863034\n5123922\n5734719\n1863354\n1863388\n1863394\n1863467\n1863646\n5124007\n5124029\n9310369\n1863829\n1863848\n1863880\n1863907\n1863909\n1863910\n1863924\n1863944\n9578319\n1864126\n1864135\n1864161\n8133328\n1864358\n1864377\n5124121\n5124143\n5124233\n11738734\n11954157\n1864652\n5124300\n5124304\n5124305\n5124332\n5124348\n5124374\n5124415\n5124433\n1864793\n1864796\n5734713\n5885399\n6099041\n6106759\n7346401\n10193618\n6106647\n5123815\n5123824\n5123837\n5123852\n5123870\n5123876\n5123884\n5123889\n5123890\n8810912\n10189661\n10191275\n10436020\n1992634\n1992883\n10842838\n10994020\n1993036\n1993043\n1993419\n1993496\n6133769\n1993637\n1953192\n1953196\n1953217\n1953326\n1953356\n6132711\n6132712\n6132715\n1953407\n1953423\n1953729\n11467944\n6132725\n6132726\n6132723\n6132729\n1954037\n5143241\n5143249\n5143266\n1954120\n6132728\n1830099\n1830380\n1830407\n1754135\n1754263\n5105642\n1754332\n1754368\n1754380\n1754400\n1754465\n1754511\n1754516\n1754535\n11737872\n12075408\n11175615\n1754902\n1754919\n1754933\n1755131\n5734138\n1755237\n1755248\n1755253\n1755276\n5106115\n5106160\n5106249\n5107076\n5107219\n5107644\n7410701\n7674502\n7778368\n7903078\n7955974\n8201251\n8426357\n1757652\n5108318\n5108334\n5108335\n11140464\n11860016\n1757853\n5108346\n5108349\n4522753\n9004359\n1939688\n1829322\n1855630\n1855747\n8734090\n1856105\n1856289\n5122798\n1856384\n1856620\n1856668\n1856768\n1856867\n1856971\n1857258\n1857267\n1857380\n1857581\n1857626\n1857828\n1857829\n1857924\n1857938\n1857978\n1858163\n1858283\n8178453\n1858557\n1937665\n1937699\n1937707\n1937712\n1937723\n1937754\n1937769\n1937792\n1937819\n1937826\n1937847\n1937856\n1937892\n1937911\n1937931\n1937937\n1937966\n1937975\n1937988\n1938007\n1938029\n1938052\n1938058\n1938069\n1938074\n1938088\n1938114\n1938122\n1938125\n1938129\n1938131\n1938147\n1938156\n1938162\n1938168\n1938174\n4692485\n4692504\n4693382\n5734569\n8225376\n9017206\n1936969\n1936988\n1936993\n1937011\n1937037\n1937055\n5141144\n5141154\n5141163\n5141172\n5141177\n5141179\n5141185\n5141187\n5141188\n5141195\n5141197\n5141198\n5141199\n5141202\n5141207\n5141212\n5141215\n5141226\n5141229\n5141230\n5141233\n5141236\n5141242\n5141252\n5141254\n1937444\n1937490\n1937514\n1937530\n10761559\n1937556\n1937566\n1937570\n1937580\n1937582\n1937594\n1937613\n1938214\n1938226\n1938230\n1938233\n1938300\n1938520\n1938612\n1938796\n1938810\n1938955\n1939056\n1939086\n1939156\n1939168\n1939180\n1939215\n1939225\n5141311\n5141317\n5141262\n5141291\n5141305\n8546322\n8574752\n1835031\n5770913\n1835098\n1837172\n1839560\n1841159\n5770922\n5770942\n4529032\n12188993\n1800238\n10213314\n1800441\n6133777\n1800528\n1800539\n10737993\n1800562\n1800572\n1800686\n1800691\n1800696\n1800821\n5114394\n5114400\n5114409\n11873966\n4534796\n4534798\n9544823\n1800881\n5114425\n1800934\n6133780\n1801000\n1801001\n1801051\n1801073\n1801080\n1801084\n1801170\n1801196\n5114465\n1801461\n1801490\n1801503\n1801519\n10066605\n10510325\n4534773\n4534776\n4534778\n4534779\n4534782\n6112606\n6112613\n6112661\n6133809\n6133811\n6133813\n6133814\n9894093\n1801993\n1802090\n8883183\n1802113\n1802120\n1802229\n1802244\n1802280\n1802337\n1802702\n1802783\n1802827\n1802833\n1802919\n1802939\n1803022\n1803035\n1803039\n1803060\n1803065\n1803073\n1803078\n1803108\n10942408\n4534767\n4534769\n6133803\n5114303\n5114311\n8244266\n10987178\n", + "regions/australia.classes": "1992268\n1992283\n1992301\n1992315\n10648791\n1758114\n1758146\n10083877\n9840570\n9960252\n10190647\n10341307\n10435406\n1732978\n1733504\n1733507\n1733511\n1733535\n10155026\n1734851\n10730270\n1831974\n1831999\n1832023\n1832518\n1832533\n1832553\n1832569\n1832649\n1845271\n1845503\n1845586\n1846858\n1847066\n1847111\n1847622\n1847639\n8797017\n5122013\n1850156\n1850633\n1850764\n1850798\n1851039\n1851543\n1852292\n10023115\n10498365\n11706893\n1850463\n9977181\n1829703\n1829866\n1828424\n1828455\n1828456\n6196939\n1828471\n1828491\n1828540\n1828543\n1828544\n10707366\n10833593\n10882997\n5119346\n5119349\n5119350\n5119353\n5119354\n5119361\n10288636\n10639943\n4695709\n1828976\n1837706\n1834428\n4684910\n4686897\n4686905\n4686907\n4686913\n1835848\n1835862\n1835874\n1835886\n1835897\n1835908\n1835928\n1838084\n1838978\n4685802\n1839600\n1839604\n4685468\n4684220\n4685557\n4685946\n1830812\n1830814\n1831458\n1831499\n1831508\n1831655\n5119868\n1839396\n10042504\n10094594\n10379915\n10531480\n10548275\n11919216\n9851221\n9985020\n6132868\n1761572\n1761573\n1761751\n1761752\n1761820\n5109196\n1762849\n1762852\n10256550\n1762887\n1763957\n1763976\n1763994\n1764060\n5109782\n5109784\n5109786\n5109787\n5109788\n1764886\n1765653\n10099906\n10647358\n1766558\n1766560\n1767215\n10340332\n1772543\n5110490\n1774069\n5110546\n1777165\n1777166\n5110837\n11457930\n11609422\n4687991\n5110981\n10403441\n9610080\n1779671\n1780716\n1780856\n1780860\n1780862\n10154280\n1782185\n1782326\n1782328\n1783173\n1783991\n10157400\n5112407\n5112410\n1784646\n1786317\n5112500\n1786958\n1786990\n1787003\n1787010\n5112531\n1788553\n6132936\n7346446\n9494526\n1788881\n6132826\n1788986\n1789225\n10090168\n1789794\n1790450\n10598407\n1790900\n1790910\n9967251\n9983957\n5112940\n1791379\n1791514\n1791715\n9504222\n9860902\n10267570\n1795657\n10573746\n1796984\n10108671\n1797039\n6132979\n1798014\n1798018\n1798023\n1798025\n1798101\n5113950\n5884247\n11636323\n9440183\n9635978\n9923283\n10657151\n1798511\n10096855\n1787090\n1798529\n1798687\n1798768\n1798868\n4532352\n6115437\n8793873\n1799165\n1799167\n1799743\n1799757\n1803148\n1803197\n11909090\n1803781\n1803788\n1804246\n1804429\n1804430\n1804610\n10053130\n1804721\n1804727\n1804742\n10156470\n1805043\n1805505\n1805524\n1805806\n1806704\n1807473\n1807477\n1807478\n1807479\n1807480\n1807483\n1807485\n1807488\n1807490\n1807491\n1807503\n11900897\n1808232\n6198302\n12214821\n1809244\n1809248\n1809381\n10010700\n1810752\n1810851\n5116397\n1812437\n1812453\n1812465\n1812658\n1814913\n10074808\n1815338\n1816029\n1816110\n1816434\n1817065\n11703980\n1817160\n1817171\n1817217\n1817810\n1818413\n5118171\n10556853\n5118291\n1819970\n1820383\n1820401\n1820435\n10274769\n1821448\n10503495\n10106475\n9956017\n10270464\n9473918\n9559336\n12180031\n12203022\n12216332\n9852545\n10496181\n10629533\n10004820\n10248689\n10454874\n10443878\n10637588\n10643533\n10166724\n10480609\n8363709\n10178326\n10469564\n9621271\n5116504\n1818216\n9336001\n1781413\n1781428\n1781598\n1763761\n6115388\n1816634\n1816648\n1816673\n1774598\n1774604\n1774654\n1774691\n1774712\n1768630\n5111643\n1766892\n10164453\n1768190\n9400916\n1768462\n9989156\n5113001\n5109796\n1821464\n1821468\n1821542\n1822003\n1804120\n1804148\n6116076\n1782507\n1783715\n9918092\n4687933\n4687934\n4687935\n1820137\n1799821\n1781531\n1798331\n1798335\n1784936\n1785072\n1765999\n1766007\n10330198\n10598038\n1786597\n4687389\n5884188\n9935660\n5110013\n10196956\n10392889\n1811455\n1811462\n1811465\n1796941\n1782310\n12266659\n5108421\n1771903\n10097776\n4301309\n5112440\n1795542\n1860849\n1992434\n1992489\n1731886\n1731890\n1731906\n1731923\n1731926\n1731927\n1731980\n1732001\n1732005\n1732031\n1732033\n1732044\n1732052\n10640865\n9950697\n1833779\n1833782\n1833794\n1834524\n1834547\n4685588\n4685595\n1834793\n1835086\n1835348\n1835814\n1837968\n1838058\n1838065\n1838071\n1839658\n1839721\n4684986\n1840346\n1831752\n1852832\n1852859\n1860259\n1860260\n5123339\n10361029\n10625116\n5123419\n5880040\n5880041\n10208422\n1853222\n10005632\n10433914\n11756119\n1869707\n1869714\n1870237\n1870450\n1870452\n1870459\n1870506\n1870509\n1870703\n1870988\n1871171\n1871333\n1872169\n9969513\n1872255\n1872470\n1872735\n1872812\n1872827\n1872850\n1872873\n1872901\n1873049\n1873079\n1873222\n1873285\n1873290\n1873291\n1873373\n1873620\n9858922\n1873773\n1873843\n5125591\n5125600\n5125602\n5125629\n1874146\n1875534\n1875554\n1875584\n1875844\n1876479\n1876542\n10356445\n1876876\n10442332\n1876922\n1876955\n1877406\n1877453\n5125943\n1877988\n1878173\n1878406\n1878470\n9835867\n1890056\n1890065\n10211808\n5884888\n10526954\n10065676\n10129011\n10279983\n11591775\n9857679\n10423263\n1748780\n1836906\n1940575\n1736623\n5102683\n1737015\n10146436\n10469532\n1737115\n1737131\n1737182\n1737187\n1737847\n1738045\n1738192\n1739051\n1739316\n1740586\n1740797\n1740828\n12259151\n1741074\n9826405\n1741084\n11906255\n10250474\n1741593\n1743319\n4707896\n4707900\n10073044\n1743680\n9867379\n1745019\n9586705\n1745957\n4707848\n6219423\n10021059\n10023049\n10080502\n10358334\n10476233\n1747639\n1747672\n1747914\n1747924\n10355898\n1748425\n1748442\n1748473\n1748486\n1748751\n10185271\n9952043\n10302660\n10530383\n9909775\n10606887\n10624577\n10153630\n10549715\n12057008\n10462612\n11688440\n5138967\n5138984\n1921010\n1921262\n1921263\n1921300\n5138069\n1922244\n1922745\n1923744\n1923782\n4708972\n4708973\n4708977\n1924362\n1924390\n1924558\n1924713\n1925555\n4708984\n1925628\n1925711\n5138732\n5138743\n5806391\n1926436\n1926448\n1926460\n1927274\n4709107\n1927707\n1927894\n1927895\n1927897\n1927900\n1928018\n4708927\n5139050\n1928382\n1928829\n4709030\n1928923\n1931189\n5139914\n1931889\n1931956\n1931958\n4709051\n1932159\n1932246\n4709095\n4708995\n1932563\n7346444\n1932908\n4709133\n5806412\n1933647\n5138929\n4709102\n4709147\n1752534\n1752536\n1752537\n1752539\n1752545\n1752547\n1752903\n1752946\n1752947\n1753461\n1753902\n1753906\n10368234\n9880359\n10203493\n9959898\n10560849\n10988070\n1919176\n1919340\n1919342\n1919344\n1919348\n1919381\n1919419\n1919421\n1919432\n1919444\n1919540\n1919626\n1919744\n5137828\n5137832\n5137833\n5137842\n5137849\n5137850\n5137854\n1920496\n1920534\n1920535\n1920538\n1920541\n5137929\n5137949\n1749124\n1749529\n1750131\n1750326\n5104822\n5104903\n5105081\n1750934\n1751024\n1828310\n1828317\n9882683\n9451208\n1758596\n1758602\n9943941\n10118678\n1962159\n1962162\n9875141\n1970460\n1970463\n1970473\n1970485\n1964995\n1964996\n10295646\n1954236\n1954522\n1954911\n10634980\n9213204\n10217455\n1955039\n1955093\n1955153\n1955199\n1955202\n1955318\n1955736\n1955737\n1955743\n1955745\n10560674\n11720357\n9593393\n10003902\n10048667\n10062202\n10075732\n10132475\n10177276\n10341059\n10363151\n10398979\n10434798\n10456933\n10457796\n10471477\n10528420\n10623003\n11451126\n11468089\n11638437\n1955899\n10078526\n10360329\n11690145\n1956384\n9234402\n10257899\n1956416\n1956955\n1956958\n1956963\n1956978\n1956983\n10167252\n1957058\n1957062\n1957333\n1957413\n1957523\n1958454\n1959341\n1959500\n1959595\n1959782\n1960106\n1960128\n1960201\n1960411\n5144115\n5144129\n1960521\n1960524\n1960940\n1960941\n1961180\n5144204\n1962829\n1962841\n1962842\n1962934\n1963297\n5144353\n1963782\n1964066\n1964305\n1964331\n1964565\n1964702\n10184940\n10523304\n1965643\n1965649\n1965650\n9952367\n9976926\n5144505\n1966977\n5144553\n1967703\n10174909\n10268303\n10379201\n1967716\n9833933\n1968115\n1968131\n5144633\n1969104\n1969568\n11858774\n1969581\n6133643\n1970093\n1970094\n1970108\n1970159\n1970265\n9939530\n10085335\n10109201\n10505033\n10054019\n5144806\n5144937\n5144942\n5144976\n5145079\n5145422\n5145495\n5145503\n1972407\n1972606\n9119710\n5146262\n11533770\n1972903\n5146294\n1973719\n5146426\n5146456\n5146472\n5146578\n5146719\n5146805\n5146880\n5146937\n5147046\n5147109\n5147121\n5147150\n5147160\n5147225\n5147522\n1975164\n1975212\n1975248\n1975249\n9975134\n10018221\n10572729\n9875420\n1975704\n1975722\n1976123\n1976142\n1976213\n1976243\n1976303\n1976341\n1976342\n1976345\n10118849\n9183738\n10089194\n1976890\n1976891\n1977350\n5147917\n5147923\n5147930\n5148066\n5148097\n5148214\n5148223\n10188228\n1978082\n10058263\n10626099\n10530515\n1978904\n1978915\n1978919\n1978937\n1979041\n1980035\n1980041\n1980044\n1980063\n1980491\n1980659\n10378314\n10571987\n1980821\n1980827\n10860751\n11660632\n1982024\n1982033\n1982043\n1982047\n1982055\n1982071\n1982072\n1982085\n1982100\n1982102\n1982103\n1982120\n1982148\n1982221\n12116722\n5149182\n10199372\n1984913\n1985167\n1985181\n1985228\n1985267\n1985490\n6133659\n1985809\n1985816\n1985826\n1985931\n1986223\n1986650\n1986693\n1986720\n1986774\n1986846\n1986942\n1987203\n1987747\n1987766\n1987775\n1987785\n6133591\n10533589\n5149369\n5149370\n5149371\n5149387\n9987116\n1988302\n1988354\n1988360\n1988361\n1988362\n1988370\n1988376\n1988382\n1988384\n1988820\n1988894\n1989170\n1989181\n1989282\n1989283\n1989377\n1989522\n1989538\n9906229\n1990164\n1990165\n1990167\n1990178\n11465014\n1990255\n1990256\n1990371\n1991394\n1991468\n10155932\n5149873\n5149880\n5149940\n5149941\n1992167\n5880539\n9577234\n10224300\n9830270\n11799357\n10864093\n4702878\n10078800\n8501203\n9629450\n6133635\n10175639\n9617411\n10438474\n10411202\n10146771\n10210935\n10263383\n1963532\n1942060\n1942067\n1942618\n1942621\n1942623\n1942636\n1942641\n5141650\n1942674\n1943089\n1943090\n1943096\n1943101\n4689912\n1943236\n1943250\n1944106\n1944113\n4689963\n1944456\n1944462\n1944520\n1944523\n1944618\n1944619\n1944627\n1944629\n1944631\n1944635\n1944638\n4689905\n1945122\n1945225\n1945715\n1945863\n1945893\n5142067\n1946720\n1946763\n1947446\n1947449\n1947459\n1947491\n1947492\n1950272\n1950591\n1951157\n1951170\n5142749\n1758839\n1758850\n1760172\n1760175\n1761788\n1761789\n1762657\n1762900\n1762902\n1764178\n1764553\n5109848\n5109870\n5109872\n5109882\n8352161\n1765508\n4687817\n4687827\n7800469\n1765898\n11034779\n1767368\n1767381\n1767430\n10575632\n10597823\n5883925\n9356770\n1768972\n1769095\n1769114\n1769209\n1769225\n1769245\n1769250\n1769260\n1769271\n1769272\n1769283\n1769293\n1769294\n1769298\n1769308\n1769310\n4688049\n4688075\n4688092\n4688098\n1771357\n1772668\n4687565\n1774797\n4301304\n6115946\n1774918\n10032003\n1775279\n1775631\n1777120\n5111064\n5111195\n5111214\n5111249\n5111535\n5111600\n1779269\n1779276\n1779382\n1780072\n5111967\n1782354\n1782466\n4687661\n1784513\n1784761\n1785145\n1785149\n1785166\n1785181\n1785217\n1785220\n1785314\n1785329\n1785725\n1787165\n1787185\n1787226\n4687681\n10161728\n1789637\n1789957\n4687906\n1791793\n1791837\n4687930\n1791862\n5113394\n1793661\n1795068\n1795110\n4688166\n4688169\n4688172\n1798084\n1802776\n4532269\n10659737\n10378302\n9890366\n9910243\n10967713\n11054256\n10121804\n5109270\n5109349\n5109418\n5109437\n4688142\n1792555\n1792560\n8108800\n1770849\n1771203\n1771245\n1771296\n1771308\n1765752\n5113853\n5108671\n5108724\n5108737\n5108787\n1759351\n1789530\n10370112\n11437060\n11615549\n4532266\n6115772\n6115820\n6115822\n6115830\n9893740\n1782277\n1781248\n1767259\n1792814\n9325654\n10458175\n10683012\n10658576\n1822257\n1822916\n1822917\n1823493\n5118798\n1824280\n1826020\n1825238\n1825950\n1825956\n1826017\n1826823\n1827429\n1827507\n11905965\n1827802\n1827810\n1827826\n1827829\n10194663\n10551923\n5806166\n1892821\n1893699\n1893787\n4704279\n5128224\n5128225\n1895448\n1895956\n5806175\n5806177\n4704400\n4704401\n4704404\n4704407\n1899931\n1899932\n1899940\n1899943\n1899947\n1899950\n1899956\n1900939\n1901669\n5130456\n5130464\n5130476\n1902233\n1902244\n1902248\n1904728\n1904798\n1904996\n1907683\n1909216\n1909436\n1909453\n1909457\n4704352\n4704356\n1910753\n1910809\n1911755\n1913091\n1915031\n1915144\n11535847\n5135839\n5136594\n5136713\n5136868\n5136939\n5137128\n5137257\n4704500\n4704501\n5131493\n5133088\n5806167\n6100725\n7642610\n1910629\n1910648\n1951492\n1951874\n10548683\n5102423\n1735273\n5102432\n1941683\n1941702\n1941713\n5121177\n1843313\n1843326\n1843331\n1843362\n1843370\n1843379\n5120341\n5120343\n5120357\n5120368\n5120379\n11854390\n9755262\n1843429\n1843485\n1843590\n1731097\n1731221\n11431507\n10535684\n11563728\n11904618\n5101502\n10049887\n10134558\n10307487\n5806352\n5806353\n10629470\n1878744\n1878826\n1879227\n1879339\n1879340\n1879405\n1879408\n1879465\n1879471\n12231152\n5126376\n10489219\n5126635\n5126637\n1880352\n1880353\n1880858\n1880982\n1880986\n1881018\n1881019\n1881031\n1881041\n1881089\n1881132\n1881157\n9819403\n1881228\n1881320\n1881329\n1881336\n1881340\n10046436\n10348110\n10441857\n1881424\n1881485\n1881504\n1881515\n10751438\n1882215\n1882266\n1882272\n1882355\n5126798\n5126843\n5126922\n5127020\n5127039\n5127044\n1882753\n1882767\n1882771\n1882773\n1882884\n1882905\n10156181\n10643403\n1882965\n10464411\n1883024\n1883028\n1883067\n4687288\n1883394\n5127097\n10069243\n1883775\n1883881\n1883943\n1883968\n1884228\n9294363\n10171108\n10209845\n1884434\n1884437\n1884449\n1884461\n1884479\n9837762\n1884531\n6120980\n1884816\n1884890\n1884909\n1885263\n1885569\n1885572\n1885605\n1885630\n6133182\n9957790\n1885702\n1885763\n1885836\n1885919\n1885945\n1886088\n1886251\n1886362\n1886526\n10610809\n1886720\n1886729\n10613467\n1887036\n1887052\n1887054\n1887462\n1887580\n1887585\n1887691\n1887894\n1888123\n1888537\n5127394\n1888906\n1888913\n1888926\n1889043\n1889050\n1889071\n1889074\n1889239\n1889242\n1889249\n1889272\n1889277\n1889356\n1889381\n1889552\n1889563\n1890031\n1890187\n10058481\n1890320\n1890335\n5127530\n10180624\n1890410\n1890670\n1891236\n1891299\n10071588\n1891308\n1891533\n1891583\n10072800\n1892458\n1892462\n10446295\n6133140\n5771877\n10117959\n10227418\n4532125\n9967529\n9900218\n10145421\n10348945\n10521368\n10579230\n10594210\n6120803\n6133232\n6121010\n10257673\n10556366\n6121218\n10502505\n10397209\n6133154\n10462708\n6133158\n10063575\n10375403\n1886374\n1889769\n1889875\n5127592\n5127595\n5127629\n5127638\n5127644\n5127669\n5127675\n5127698\n5802339\n1888638\n1888639\n1883885\n1831136\n4708183\n1731292\n5122307\n1853578\n10222583\n1853855\n1854019\n1854021\n10452421\n10546013\n11428453\n1854249\n5122430\n5122455\n5806333\n1858674\n1858718\n1858762\n1858930\n1858973\n1859061\n4536292\n9768621\n1859453\n9675743\n9749806\n6133397\n1859932\n1860026\n6097269\n9759340\n1864897\n1867788\n10883659\n1868025\n1861457\n1861458\n1861644\n5123663\n1861951\n1861953\n1861958\n1862026\n1862293\n1862331\n1862363\n1862370\n1862403\n9836014\n1862434\n1862441\n1862449\n1862455\n1862475\n1862516\n1862521\n1862526\n6106708\n1862757\n1863034\n1863051\n1863384\n9899724\n1863880\n1863955\n4703479\n5124080\n8133328\n11954157\n5124423\n5123852\n1992634\n9893936\n1992889\n1992907\n1992936\n1992938\n1993021\n1993045\n6133769\n10022517\n1953217\n10132811\n10644798\n11503857\n1954025\n5143279\n1954120\n1830419\n1830435\n1754619\n1754803\n1754806\n1754814\n4689394\n1830669\n8254441\n1855804\n1855807\n1855813\n1856005\n5122779\n1857020\n1857033\n1857097\n1857143\n1857180\n1857258\n1857315\n1857380\n1857626\n1857828\n1857829\n1857840\n1857882\n1857900\n1857935\n1857948\n1858100\n1858163\n1858283\n1858404\n1858411\n1858488\n1937698\n1937712\n1937745\n1937769\n1937988\n1938069\n1938074\n5141177\n5141187\n5141254\n5803065\n1937444\n1937474\n4693675\n1937618\n1939131\n1939156\n1838251\n1838255\n1838276\n1838289\n1838297\n1838304\n1838308\n1838331\n4685893\n4685097\n1833477\n4685485\n1833562\n4686368\n1833600\n1833653\n1833834\n1834019\n1834078\n4685138\n4685219\n4685271\n1834497\n1834850\n1835082\n1835121\n1835123\n1835128\n1835345\n1835555\n1835609\n1835612\n1835635\n1835644\n4685116\n1835790\n1835821\n1835828\n4686483\n1836873\n1836899\n4685431\n4685448\n1837053\n1837057\n1837150\n1837159\n1837172\n1837569\n4686743\n1838034\n4685065\n1838218\n1838224\n4685299\n4685306\n1838333\n4686617\n4686620\n4686621\n4686628\n1838958\n1838960\n4528702\n4685566\n4685576\n1839317\n1839323\n1839325\n1839333\n1839494\n5120053\n5120058\n5120063\n4685645\n4685650\n4685653\n4685655\n4685662\n4685669\n4685678\n4685683\n1840258\n1840260\n1840726\n1840774\n1840776\n1840796\n1840812\n1840844\n1840974\n4686042\n4686055\n4686111\n4686133\n4686164\n4686190\n4686214\n4686264\n4686266\n1841101\n1841221\n1841302\n4685972\n5802248\n5802256\n5802257\n5802259\n4686039\n4686015\n4686016\n4686018\n4686022\n4686027\n4686029\n4684521\n4684591\n4684789\n4684888\n4684893\n4684925\n4684958\n4685629\n4685631\n4685778\n4685810\n4685980\n4685981\n4686355\n4686385\n4686386\n4686531\n4686532\n4686656\n4686697\n4686702\n4686844\n4686956\n10213314\n10225227\n1800441\n1800473\n1800522\n1800562\n10010361\n9859868\n9883274\n1800691\n1800843\n1800844\n5114394\n5114409\n9267364\n10240592\n1801170\n5114515\n1801303\n1801305\n1801316\n1801432\n1801461\n1801519\n10026605\n10066605\n10088502\n10372377\n10448500\n10573425\n11496990\n11508472\n11594541\n11596898\n11698552\n11836409\n11871044\n1801787\n1801903\n1801922\n1802978\n4534792\n6112610\n6112661\n6133811\n9960072\n1802090\n1802702\n1802830\n1802833\n1802888\n1802998\n1803014\n1803021\n1803035\n1803039\n1803078\n1803091\n9485481\n10942408\n10264193\n5114303\n5114353\n", + "regions/caribbean.classes": "12170988\n1921992\n1921993\n1922015\n5140627\n1934570\n1935078\n1935295\n1935301\n1935343\n5140969\n5140980\n1936161\n1936378\n1936388\n1936565\n1936566\n1936649\n10331171\n9620499\n1868575\n1992315\n1846849\n1846860\n1850798\n5110390\n5108951\n8331687\n1763156\n1763163\n1763184\n1763199\n1763223\n1763256\n8028211\n1767307\n1767499\n1768283\n1769000\n1770038\n1771859\n5110326\n5110327\n5110533\n1776163\n1777179\n1777737\n1777942\n1781029\n1782211\n8384839\n1786217\n1786219\n1786247\n7480993\n1787464\n11495556\n5112542\n11890681\n10295290\n1790240\n1790246\n1790248\n1790308\n7785540\n5112843\n1792827\n1794637\n1795049\n1796338\n1798427\n4532352\n1803163\n1803218\n1803266\n1804331\n5115046\n1804759\n1804760\n1805691\n1805717\n1806702\n1806871\n1806872\n1806887\n1807553\n1807569\n1809066\n1809135\n1809491\n1809499\n1810145\n5116145\n5116198\n5116252\n1810846\n7535515\n5116423\n1814182\n1814692\n1815373\n5117414\n1816570\n5117685\n1817940\n1818252\n10395440\n10214972\n10830546\n10851228\n12194283\n8429622\n1781420\n1793538\n8177591\n1775796\n5884258\n7716829\n8299504\n8968321\n1784959\n1785072\n6117485\n7611914\n1780646\n1780668\n1777463\n5123542\n8766638\n1872514\n1872873\n1873051\n1873079\n1873398\n7372375\n1876542\n1877002\n5125525\n5143284\n5143285\n5131957\n1736623\n1739617\n1741823\n1741826\n1935498\n4299071\n9457324\n9622955\n1936026\n1920844\n1920900\n1920923\n1921123\n1922455\n10278292\n1922637\n1922868\n1923678\n1923679\n1923997\n8992718\n9157410\n4300393\n4300399\n8389961\n8904480\n1927301\n1927302\n1927988\n1927996\n1928009\n4300406\n1928589\n1929046\n1929129\n1929966\n1930079\n1930146\n1930167\n1930178\n1930179\n1930181\n1930263\n1930270\n1930361\n1930391\n1930410\n1930422\n1930563\n1930581\n1930621\n1930653\n1930654\n1930728\n1930772\n1930779\n1930830\n1931119\n5139864\n1931310\n5139897\n5139908\n5139909\n1932172\n1932175\n5140033\n5140054\n1933260\n5140534\n1935853\n1935872\n1935888\n1935912\n1935916\n1935935\n5139928\n4300268\n9469139\n9156458\n1751980\n1752034\n1752109\n1752477\n1752775\n5105379\n5105447\n5105491\n5105553\n1753603\n1753604\n1753661\n1753833\n1753871\n1919128\n1919130\n1919149\n1919239\n1919282\n1919287\n1919289\n5137540\n1919646\n1919652\n1919653\n1919656\n4701298\n7661785\n5137553\n1919937\n1919939\n1919943\n1919945\n1919947\n1919949\n5137819\n5137851\n5714819\n1920463\n1920552\n1920571\n1920574\n1920581\n1920691\n1920803\n12234544\n12236627\n1920621\n1956099\n1956215\n1959637\n10650351\n1962051\n1962086\n1962118\n1962120\n1963433\n5144363\n1966088\n1966185\n1968313\n1968315\n1968324\n1968942\n5145560\n1973665\n9590066\n1975287\n1976073\n1976255\n1976651\n1978464\n9243264\n1981160\n1981973\n5148593\n5149237\n1985647\n1985952\n1989582\n1990594\n1990998\n5880539\n5150002\n5150027\n12252926\n11423843\n12239491\n1942141\n1942170\n12286003\n1942416\n1942455\n1942509\n1942558\n5141662\n5141763\n1943571\n1943588\n1943823\n1943824\n1943830\n1943832\n1943901\n1943936\n12198522\n1943942\n1943962\n1944004\n1944273\n1944275\n1944283\n1944286\n1944314\n1944324\n1944329\n1944335\n1944343\n1944361\n1944421\n1944574\n1944769\n4301934\n1944815\n1944832\n5141913\n9551544\n1945302\n1945312\n1945462\n1945477\n1946074\n1946097\n4301426\n1946167\n1946177\n1946333\n1946469\n1946520\n1946544\n1946550\n1946577\n1946582\n1947021\n1947037\n1947048\n1947147\n5142176\n1947577\n1947587\n1947597\n12208168\n1947973\n1947979\n1947980\n1948042\n1948046\n1948158\n7603634\n1948446\n1948521\n1948630\n4301945\n1948823\n1948858\n1948890\n1948947\n1949049\n1949105\n1949322\n1949451\n1949515\n1949592\n1949621\n7726809\n9395000\n5142436\n1950017\n1950019\n1950044\n1950052\n1950153\n1950197\n1950654\n1951097\n1951121\n1951125\n5715127\n5142829\n5977203\n1945374\n12175154\n9366762\n1761892\n1764686\n1764693\n1765155\n5109850\n5109855\n5109881\n5109954\n5109958\n1767571\n1767719\n1777727\n1777730\n1780330\n1780390\n1780440\n1782424\n1783811\n5112414\n1785168\n1785331\n7400814\n1791331\n5113365\n1796274\n1796276\n7383338\n7689966\n7882824\n8405656\n1798288\n10118643\n11615055\n9307254\n1770955\n5108665\n1797903\n1824189\n1825373\n1825391\n1826772\n10043566\n1903598\n1892509\n1892729\n1892770\n4299095\n1892851\n5127805\n5127814\n5128005\n5128007\n5128011\n5128034\n1894076\n1894329\n1895250\n1895709\n1895768\n1895789\n9016382\n1895886\n1896087\n5128433\n5128475\n5128488\n5128491\n1896628\n1896749\n10353400\n1896756\n1896774\n1896932\n5129251\n9590057\n11701883\n5925238\n1897977\n1897990\n1898143\n1898174\n1898348\n1898350\n1898367\n1898374\n1898391\n1898424\n6228464\n5129473\n5129480\n5129481\n5129489\n5129496\n5129524\n5129535\n9255328\n1898686\n1899048\n4299211\n4299213\n1899893\n9446281\n1900024\n1900026\n1900172\n1900175\n1900195\n1900197\n1900199\n1900233\n1900249\n1900303\n1900408\n1900485\n1900618\n1900632\n1900787\n1900830\n1900872\n9072828\n1901261\n8247566\n5130314\n5130322\n5130326\n5130330\n1901744\n1901801\n5130514\n5130528\n5130548\n9357385\n1902378\n1902406\n1902451\n1902458\n1902479\n1902620\n1902623\n1902642\n1902670\n1902676\n1902699\n1902880\n1903607\n5131608\n1904382\n5131951\n1905451\n1907190\n1907272\n1907395\n1908168\n1908199\n1908203\n1908204\n1908256\n1908262\n1908299\n1908302\n1908577\n1908995\n1909019\n1909128\n1909170\n1909185\n1909191\n8727750\n5133255\n5133265\n5133451\n5133523\n5133565\n1910773\n5133581\n1911076\n5133591\n5133595\n5133621\n5133622\n8548427\n12322536\n1911966\n1912003\n1912036\n1912119\n5133736\n5133786\n1914416\n1914424\n1914465\n1914501\n1914697\n1915193\n1915339\n1915396\n1915401\n5136372\n1916701\n1917827\n1917830\n1917834\n1918077\n1918078\n1918082\n1918086\n1918094\n1918097\n1918149\n1918268\n1918269\n1918280\n1918596\n5137408\n1918972\n1918984\n1919010\n5128045\n5128067\n5128118\n5131982\n5132137\n5132221\n5132347\n5132360\n5132374\n5132429\n5132483\n5714312\n9541133\n5133088\n5714299\n5714302\n5130557\n1910628\n5132917\n5132940\n5133008\n9964857\n5125118\n1941570\n1941717\n5101371\n5101527\n7628188\n1879052\n1879160\n1879253\n1879413\n5126494\n5126585\n5126637\n1880505\n1880623\n5126663\n10861282\n11968849\n1881079\n5126721\n5126751\n1881917\n5126756\n1882786\n10107015\n1882819\n1882941\n1882960\n1883067\n10807787\n8981028\n5127090\n1883968\n8324720\n1884479\n1884774\n1884923\n1885099\n1885158\n1885950\n1886251\n1886729\n10510138\n1887634\n1888047\n1888292\n1888306\n1888336\n1888646\n1888955\n1889536\n1890089\n1890247\n11044778\n7543006\n1890368\n1890876\n1891035\n1891932\n1892131\n1892311\n1892477\n5771877\n7864212\n8146570\n8425580\n6120803\n6121010\n6121218\n1886374\n1889721\n1889850\n5127631\n1886123\n1853242\n7946946\n1858930\n9760511\n6133397\n9547681\n1864905\n1865107\n1865132\n5124557\n5124595\n5124598\n1865547\n1865557\n1865709\n1865764\n1865837\n1866105\n1866220\n1866311\n1866902\n1867218\n1867224\n5124873\n1867773\n10591617\n9634178\n5123615\n1861479\n1861559\n5123636\n1861773\n1861783\n1861784\n1862033\n1862044\n1862049\n1862078\n1862087\n1862088\n1862094\n1862096\n1862123\n1862139\n1862163\n1862181\n1862198\n1862207\n5123701\n5123704\n1862547\n1862551\n1862658\n1862928\n1863109\n1863151\n5123784\n5123801\n7803585\n1863366\n1863412\n1863416\n1863426\n1863699\n1863701\n1863706\n1863714\n1863724\n1863732\n1863734\n1863742\n1863757\n1863856\n1863858\n1863864\n11468731\n1864316\n1864320\n1864321\n1864328\n1864329\n1864352\n5124249\n5124250\n5124268\n5124442\n5124448\n5124452\n5123954\n5123956\n5123961\n5123971\n5123979\n5123983\n5123991\n5123996\n1863978\n1863982\n1864004\n1864021\n1864058\n1864068\n1864084\n1864098\n1864103\n1992634\n5150053\n1953499\n5143232\n5143234\n1953998\n1954084\n1830681\n1953166\n1751497\n1751524\n1751588\n1751590\n1751625\n5105217\n5105227\n5122556\n5122581\n1857068\n1858283\n10038125\n1937655\n1937793\n1937885\n1938069\n1938112\n1938159\n4299871\n10600208\n12200213\n1937064\n1937090\n1937110\n1937136\n1937144\n1937162\n1937167\n1937530\n1939130\n1939136\n5141324\n1856555\n4534796\n9385576\n8924506\n", + "regions/central_america.classes": "12170988\n1934715\n1934991\n1935301\n5140969\n5140980\n1936161\n1936378\n1936388\n1936391\n1936566\n5141085\n10331171\n1868535\n10100176\n10517417\n1868575\n1992315\n1732901\n1734384\n5102324\n1845314\n1845385\n1845455\n1846439\n1846849\n1846860\n1850729\n1850771\n1850798\n5122062\n5122121\n5122131\n1851845\n10508467\n5119890\n5110390\n1760385\n1760397\n1760400\n5108951\n1761101\n1761838\n8331687\n8379616\n9354496\n9546910\n1763156\n1763163\n1763184\n1763199\n1763223\n1763256\n8028211\n5110044\n1766839\n1766880\n1767320\n1767499\n9384861\n1768283\n1769000\n1770038\n1770044\n1770263\n1771859\n5110326\n5110327\n5110533\n1776163\n1777052\n1777179\n1777737\n1777942\n5110891\n9610080\n1779740\n1781029\n9305011\n9630748\n1781944\n1781946\n5112060\n1782214\n8384839\n1786217\n1786219\n1786247\n7480993\n1787464\n11495556\n5112542\n11890681\n10295290\n1788891\n5112626\n1790230\n1790240\n1790246\n1790248\n1790257\n1790258\n1790268\n1790274\n1790281\n1790287\n1790308\n1790787\n1790945\n7785540\n5112843\n1791151\n1791372\n9382044\n1792827\n1792831\n1794637\n1795042\n1795049\n9622322\n1797121\n1797521\n9410076\n7598729\n1798427\n4532352\n8150450\n1799183\n1803218\n10033898\n1804404\n1804409\n1804522\n5115046\n1804759\n11907485\n1804974\n1805197\n1805271\n1805537\n1805691\n1805717\n1805938\n1805955\n1806687\n1806690\n1806702\n9394138\n9491341\n1806872\n5115500\n1807514\n1808592\n8929537\n1809066\n1809127\n1809135\n1809294\n1809299\n1809348\n1809491\n1809499\n1810121\n1810172\n5116128\n5116134\n5116145\n5116198\n5116252\n5116293\n9350900\n1810743\n1810824\n1810846\n1810866\n9389851\n7535515\n1811019\n1811079\n1811439\n5116332\n5116358\n5116423\n1814182\n1814336\n1814359\n1814365\n5117348\n1814665\n1814692\n1814863\n5117414\n9434954\n5117430\n5117462\n1816570\n5117685\n1817086\n1817734\n1817749\n1817797\n11725616\n1817864\n1818252\n5118046\n11758730\n1818454\n1819310\n9391467\n1820940\n10395440\n9290866\n9315577\n9406984\n9599150\n10214972\n10830546\n10851228\n12194283\n8429622\n1781420\n1793538\n1813413\n1813415\n8177591\n1775796\n5884258\n7716829\n8299504\n8968321\n1784959\n1785024\n5884188\n6117485\n7611914\n7924383\n1780646\n1777463\n1777471\n1838360\n1860184\n10308365\n5123419\n1870037\n1870308\n1870727\n1870988\n1871175\n10336328\n1872452\n1872514\n1872873\n1873079\n5125545\n1873398\n7372375\n1873753\n10143814\n1875478\n1876542\n1876665\n5125916\n5125917\n1877282\n1877443\n5976937\n5125525\n5143284\n5143285\n12018158\n5131957\n1941294\n1736623\n10274976\n1736860\n4530608\n1737904\n1737929\n1741820\n1741823\n1741826\n11923027\n10073044\n9948031\n1935498\n4299071\n9457324\n1936026\n1920844\n1920889\n1920900\n1920923\n1921053\n10657453\n1921123\n8825450\n1922039\n1922041\n1922219\n1922455\n10278292\n1922637\n1922865\n1922868\n1922889\n1922890\n1923505\n8913017\n1923678\n1923679\n1923997\n1924106\n1924176\n1924518\n1924521\n8840017\n8992718\n9157410\n9478718\n10120854\n1925429\n1925498\n1925515\n4300384\n4300393\n8904480\n1925922\n1926834\n1927988\n1927996\n1928009\n4300406\n1928214\n1928215\n8846776\n1928584\n1928589\n1929046\n1929129\n5139578\n1929962\n1929966\n1930079\n1930146\n1930167\n1930178\n1930179\n1930181\n1930270\n1930288\n1930289\n1930331\n1930361\n1930410\n1930422\n1930451\n1930563\n1930653\n1930728\n1930772\n1930830\n1931119\n1931122\n1931126\n5139864\n1931310\n5139897\n5139898\n5139908\n10113190\n11417741\n1932056\n1932172\n1932386\n1932576\n1932879\n5140033\n5140054\n5140063\n1933260\n1935853\n1935872\n1935878\n1935888\n1935901\n1935912\n1935916\n1935925\n1935931\n1935935\n9867272\n5139928\n4300268\n9469139\n9975698\n9156458\n1751980\n1751986\n1752034\n1752109\n1752111\n9776414\n9941073\n1752775\n1752825\n1752832\n11507608\n5105367\n5105369\n5105379\n5105380\n5105447\n5105491\n5105508\n1753603\n1753604\n1753661\n1753833\n1753864\n1753871\n10514620\n5137512\n12181811\n12226416\n12251247\n1919125\n1919128\n1919130\n1919145\n1919146\n1919149\n1919173\n1919235\n1919239\n1919245\n1919282\n1919289\n5137540\n1919646\n1919649\n1919652\n1919653\n1919656\n4701298\n4701336\n7661785\n5137553\n1919700\n1919705\n10703948\n1919937\n1919939\n1919943\n1919945\n1919947\n1919949\n1920192\n5137800\n4701136\n5137817\n5137819\n5137851\n5714819\n1920426\n1920437\n1920461\n1920463\n1920496\n1920552\n1920571\n1920581\n1920691\n1920803\n1920809\n5137672\n5137694\n12191141\n12206386\n12234544\n12236627\n1920621\n1956098\n1956099\n1958049\n5143964\n1958121\n1959637\n1960090\n1960166\n1960255\n1960268\n1960315\n1960503\n1961155\n1961361\n10650351\n1962051\n1962086\n1962118\n1962120\n9592714\n9264326\n4302252\n1963433\n1963633\n5144363\n1964698\n1965586\n1965697\n1965887\n1966088\n1966185\n1967226\n1967346\n1968313\n1968321\n1968324\n1968538\n5144583\n1968942\n10088253\n5144953\n5145078\n5145466\n5145560\n1972101\n5146179\n1973245\n1973665\n10404426\n5146820\n5147018\n5147139\n5147179\n5147211\n9469300\n9590066\n1975287\n1976073\n1976651\n1976746\n9617496\n1978464\n1978671\n9243264\n5148277\n5806132\n1978958\n1978959\n1980245\n1980247\n1981144\n1981160\n1981252\n1981277\n1981959\n1981973\n5148531\n5148593\n9307713\n9544337\n5148743\n5148952\n1985485\n5149222\n1985647\n1985952\n1986192\n1986906\n1987330\n1989582\n1990270\n1990331\n1990335\n1990357\n1990594\n1990998\n5880539\n9392058\n9438677\n4302221\n9621086\n9281181\n9403481\n9448761\n9545331\n9497623\n9619088\n9237031\n9299326\n10221195\n10288719\n9363893\n9391442\n5149753\n5149811\n1980462\n9256786\n5150002\n5150027\n12200261\n11470872\n11654707\n11776315\n11892494\n12252926\n11423843\n11670842\n12173621\n12247340\n12252340\n12239491\n1942098\n1942141\n1942170\n1942171\n12286003\n1942341\n1942416\n1942455\n1942509\n4301744\n1942558\n1942670\n5141662\n1942854\n5141697\n1943054\n4302008\n5141743\n5141763\n1943563\n1943571\n1943588\n4301355\n1943631\n1943823\n1943824\n1943830\n1943832\n1943901\n1943936\n12198522\n1943954\n1943962\n1944004\n1944273\n1944275\n1944283\n1944286\n1944314\n1944324\n1944329\n1944335\n1944343\n1944361\n1944574\n1944769\n4301934\n1944798\n1944815\n1944832\n5141913\n9551544\n1945081\n1945302\n1945312\n1945462\n1945476\n1945477\n4301942\n1945957\n1946074\n1946078\n1946079\n1946097\n1946163\n1946177\n1946310\n1946327\n1946333\n1946469\n12233838\n1946500\n1946509\n4302101\n1946520\n1946544\n1946550\n1946577\n1946582\n5142086\n1946853\n1946865\n1946901\n1946981\n1946983\n1946989\n1946992\n1947021\n1947037\n1947048\n1947147\n5142166\n5142175\n5142176\n1947402\n1947507\n1947568\n1947587\n1947588\n1947597\n1947842\n1947894\n12208168\n1947973\n1947976\n1947979\n1947980\n1948042\n1948046\n1948158\n7603634\n1948439\n1948446\n1948521\n1948826\n1948865\n1948890\n1948947\n1949049\n1949105\n12353663\n1949285\n1949322\n1949449\n1949451\n1949466\n1949492\n10574663\n1949512\n1949515\n1949592\n1949621\n7726809\n9395000\n1949687\n5142424\n5142436\n5142583\n1950017\n1950019\n4301876\n1950044\n1950052\n1950133\n1950153\n1950197\n1950578\n1950654\n1950767\n1950856\n1951062\n1951097\n1951116\n1951121\n1951125\n1951133\n1951217\n4301897\n5715127\n12180041\n12206694\n1951340\n5142829\n5977259\n5977260\n1948771\n1948779\n1948789\n1948799\n1948800\n1948802\n1948803\n1948810\n1945374\n1945378\n12175154\n12263736\n1758767\n1758771\n1758781\n1758783\n7911151\n9366762\n1759799\n1759881\n1760309\n1761143\n1761892\n1764686\n1764693\n1764917\n1765155\n5109845\n5109850\n5109855\n5109881\n5109954\n8352161\n1766237\n1766287\n1767052\n1767571\n1767584\n9511345\n5772169\n1767719\n1770659\n1773783\n1774243\n9550265\n6115953\n1775509\n1776467\n1777727\n1777728\n9310286\n5111141\n5111568\n1780309\n1780390\n1780407\n1780437\n1780440\n9374443\n9289753\n9457757\n9500945\n1783811\n9348210\n9465978\n9492640\n1784422\n1784461\n5112414\n4534290\n1785168\n1785331\n9636267\n7400814\n1786360\n1786733\n1786808\n1787438\n1788485\n1791331\n1792430\n5113365\n9240216\n1792817\n1792996\n11781335\n1796276\n7383338\n7882824\n1798288\n1799433\n1799675\n1799774\n9388726\n9571514\n1799900\n1799925\n10446574\n8729319\n8562506\n9241105\n9452702\n9484411\n9363692\n9556427\n7779226\n8818378\n8928353\n9538684\n10118643\n9342344\n11452421\n11615055\n11626773\n11627464\n11660145\n11713256\n11753804\n5109299\n5109369\n5109413\n8943174\n9038042\n9307254\n9404919\n5112130\n7398419\n1792564\n1774929\n1770955\n1765751\n5108665\n11783188\n1797903\n1776094\n9354669\n5118509\n1824259\n1825373\n1825391\n1825428\n5118944\n1826156\n1826169\n1826181\n1826222\n5119046\n1826772\n1827716\n1828105\n1828268\n10043566\n1903598\n1892509\n1892729\n1892736\n1892742\n1892759\n4299095\n1892851\n1892858\n1892863\n5127805\n5128005\n5128007\n5128034\n1893337\n1893480\n9113409\n10653980\n1894074\n1894087\n1894088\n1894329\n1894342\n1895176\n1895185\n1895203\n1895733\n1895768\n1895820\n8763986\n9016382\n1895886\n1895904\n1896087\n5128433\n5128438\n5128475\n5128488\n5128491\n1896614\n1896628\n1896658\n1896749\n1896754\n10353400\n1896763\n1896774\n1896876\n1896932\n5129251\n9590057\n11701883\n5925238\n8367663\n1897985\n1897990\n10073321\n10365587\n1898143\n1898174\n1898203\n10321900\n1898286\n4299368\n4299370\n5714369\n1898358\n1898367\n1898391\n1898402\n1898414\n1898416\n1898424\n1898431\n5129387\n5129451\n6228464\n5129473\n5129481\n5129489\n5129496\n5129515\n5129517\n5129520\n5129524\n5129531\n5129535\n9208233\n9255328\n1898686\n1898841\n1898865\n1899048\n4299211\n4299213\n1899873\n1899893\n1899994\n1900024\n1900026\n8847500\n9208918\n9925669\n1900131\n1900134\n1900175\n1900197\n1900199\n1900233\n1900249\n1900295\n1900303\n1900345\n1900485\n1900578\n1900618\n1900626\n1900787\n1900825\n1900830\n1900872\n9190731\n1901001\n1901189\n1901261\n1901268\n8247566\n1901735\n1901744\n1901794\n1901801\n1901804\n1901810\n11135155\n11219489\n12258652\n5130400\n5130514\n5130528\n5130548\n9357385\n1902211\n1902300\n1902378\n1902406\n1902430\n1902458\n1902479\n1902502\n5130559\n1902620\n1902642\n1902670\n1902676\n1902680\n1902692\n1902702\n1902703\n1902704\n4299218\n1902880\n1902885\n1903028\n1903607\n1903658\n1903683\n5131597\n5131608\n5131637\n1904382\n7776011\n5131951\n1905242\n1905451\n1907153\n1907235\n1907250\n1908011\n1908055\n1908123\n1908144\n1908146\n1908148\n1908150\n1908199\n1908203\n1908204\n1908207\n1908256\n1908258\n1908302\n1908577\n5133035\n10542548\n1908995\n1909019\n1909064\n10046510\n1909070\n1909128\n1909170\n1909185\n1909211\n9851867\n8727750\n5133142\n5133251\n5133265\n5133523\n10558140\n5133565\n5133568\n1910773\n5133581\n1911076\n5133595\n5133609\n5133621\n5133623\n5133634\n5133635\n5133637\n9219529\n1911577\n1911939\n12322536\n12335869\n1911966\n1912003\n1912036\n1912119\n5133736\n10638244\n9277330\n1914410\n1914416\n1914420\n1914424\n1914433\n1914435\n1914440\n1914442\n1914465\n1914477\n1914496\n1914498\n1914500\n1914501\n1914511\n4299201\n1914697\n1915193\n9185656\n9988287\n1915339\n1915396\n1915401\n1915417\n1915427\n1915430\n1915456\n1915506\n10487080\n1916700\n1917827\n1917830\n1917834\n1918077\n1918078\n1918082\n1918094\n1918097\n1918133\n10250149\n1918220\n1918269\n1918280\n1918293\n1918596\n1918968\n1918972\n1918984\n1918988\n1919007\n5128045\n10415847\n5130682\n10259880\n5131982\n5132003\n5132079\n5132084\n5132137\n5132225\n5132246\n5132254\n5132317\n5132346\n5132347\n5132360\n5132398\n5132429\n5132446\n5714312\n9541133\n5133088\n5714299\n5714302\n5130557\n10662329\n12045866\n4299778\n5132917\n5132940\n5132956\n5133008\n9964857\n5142842\n1868334\n1868360\n5125118\n1941570\n1941717\n1941719\n5101371\n9114044\n5101527\n1731812\n7628188\n1878688\n1878705\n1879052\n1879160\n1879253\n1879348\n1879398\n1879413\n10366679\n10874932\n1879452\n1879471\n5126494\n5126517\n5126533\n5126585\n5126637\n1880505\n10056494\n1880537\n1880623\n5126663\n10861282\n11968849\n1881079\n1881111\n1881139\n1881166\n5126721\n1881767\n1881822\n5126751\n1881917\n1882089\n1882190\n1882195\n5126963\n10107015\n1882812\n1882816\n1882818\n1882941\n1882960\n1883067\n10807787\n8981028\n5127089\n1883968\n1883975\n8324720\n9864281\n1884001\n1884479\n1884685\n9308930\n1884774\n1884923\n1885099\n1885158\n1885642\n1885950\n1886251\n5127209\n1886501\n1886729\n10510138\n1887004\n1887024\n1887341\n1887459\n5127339\n5127355\n1887565\n1887634\n1888009\n1888047\n1888292\n1888306\n1888338\n1888435\n5127378\n1888646\n1888695\n1888823\n12106417\n1888955\n1889028\n1889267\n1889536\n1890089\n1890247\n1890368\n1890374\n1890417\n1890487\n1890512\n1890599\n1890730\n1890737\n1890794\n1890876\n1890885\n6207059\n1891035\n1891074\n1891167\n1891488\n10310835\n1891755\n1891932\n1892131\n1892230\n1892311\n1892355\n1892420\n1892427\n1892477\n1892488\n5771877\n7864212\n8146570\n8425580\n6121010\n6121218\n8876855\n1886374\n1889721\n1889745\n1889850\n5127562\n5127631\n5127680\n5802339\n1886123\n1886207\n1831136\n1853242\n1853312\n1854143\n7946946\n1858615\n9777614\n1858674\n1858930\n1859046\n1859161\n8790054\n9700261\n10103570\n1864905\n8877458\n9240588\n9355107\n9531432\n9606779\n1865102\n1865107\n1865108\n1865132\n1865299\n1865333\n1865353\n5124557\n5124589\n5124595\n5806244\n1865572\n1865590\n1865709\n1865764\n1865837\n1865842\n1865853\n1865963\n1866003\n1866085\n1866100\n1866105\n1866123\n1866201\n1866214\n1866311\n1866330\n1866496\n1866550\n1866570\n1866601\n1866902\n5124873\n1867515\n1867525\n1867535\n1867773\n10247309\n10591617\n9634178\n10248521\n5123615\n1861479\n1861559\n5123636\n1861773\n1861783\n1861784\n1861823\n1861887\n1862033\n1862044\n1862047\n1862049\n1862078\n1862083\n1862087\n1862088\n1862091\n1862094\n1862096\n1862123\n1862129\n1862139\n1862163\n1862181\n1862198\n1862207\n1862225\n5123701\n5123704\n1862547\n1862551\n1862595\n1862624\n1862658\n1862841\n1862923\n1862928\n1863021\n1863088\n5123775\n1863109\n1863151\n5123784\n5123801\n7803585\n1863366\n1863407\n1863412\n1863416\n1863426\n1863699\n1863701\n1863706\n1863714\n1863732\n1863734\n1863742\n1863757\n1863856\n1863858\n1863864\n1864164\n11468731\n1864316\n1864320\n1864321\n1864328\n1864329\n1864352\n5124172\n5124200\n5124249\n5124250\n5124268\n5124442\n5124443\n5124450\n5124452\n5123954\n5123956\n5123961\n5123968\n5123971\n5123979\n5123983\n5123991\n5123996\n5124000\n8849480\n1863978\n1864004\n1864008\n1864021\n1864046\n1864058\n1864068\n1864070\n1864084\n1864098\n1864103\n1864106\n1993643\n1992817\n1953499\n5143232\n9053308\n9424853\n1953970\n1953998\n1954084\n5105649\n5105656\n5105671\n10322104\n1830681\n1953166\n1751497\n1751524\n1751572\n1751588\n1751590\n1751609\n1751625\n1751626\n9332550\n1751670\n1751684\n1751785\n5105193\n5105217\n5105218\n5105227\n1854920\n5122526\n5122538\n5122581\n5122646\n5122647\n5122696\n1855358\n1856581\n1857143\n1857380\n1858283\n10038125\n1937642\n1937655\n1937688\n1937722\n1937751\n1937758\n1937793\n1937803\n1937816\n1937846\n1937885\n1938016\n1938059\n1938112\n4299871\n10600208\n12211009\n1937090\n1937109\n1937110\n1937124\n1937136\n1937144\n1937162\n1937167\n1937527\n1939130\n1939136\n5141321\n5141324\n5141333\n5141342\n4694313\n1856555\n4534796\n1800963\n8924506\n9426252\n", + "regions/east_asia.classes": "1837646\n1935849\n1992277\n1992283\n1992315\n1860668\n1732063\n1732114\n1732115\n1732416\n1732452\n1732508\n1732521\n1732525\n1732565\n1732662\n1732685\n1732763\n1732830\n1732842\n5101640\n1733154\n1733155\n1733243\n1733258\n1733394\n1733412\n1733484\n4525266\n5734897\n5101745\n5769191\n1734453\n5102207\n5102242\n1734496\n1734519\n1734704\n1734826\n5734891\n5102287\n5102300\n1832143\n5734640\n11453841\n1832235\n1832248\n1832254\n5734645\n1832612\n11505614\n8825467\n1845270\n1845547\n1845607\n4529566\n1846604\n10785815\n11730078\n1847062\n1847157\n1847260\n1847392\n4528547\n1847641\n1848273\n1848356\n1848378\n4528539\n1848864\n5122013\n1849284\n9007213\n4527903\n1850570\n1850633\n1851337\n1851543\n1851555\n1852177\n6133343\n11287091\n1829533\n1829659\n1829776\n1828637\n6097236\n7448174\n4525610\n10835385\n10855556\n5125130\n1861395\n1868428\n1868527\n5734146\n1834980\n8503184\n1839094\n1830152\n1830241\n1831458\n1831631\n1831643\n9379855\n8834672\n1839625\n5880147\n9734171\n10679326\n10746289\n11382064\n10698858\n11570545\n10701190\n11807833\n12199936\n11095591\n11418741\n7908344\n12235234\n12217030\n1758625\n1759150\n1759775\n1760140\n6132868\n6132869\n1760201\n1760927\n10889719\n1760970\n1761111\n1761213\n1761353\n1761387\n9257793\n1762151\n11562374\n1762219\n1762226\n1762298\n1763589\n5109766\n1763650\n1763782\n1763812\n1763976\n1764021\n1764032\n1764043\n1764060\n9278311\n1764531\n1764880\n1764886\n1765653\n1765863\n1766260\n1766560\n1766570\n1766584\n1766601\n1766618\n3257809\n6116699\n1766888\n1767044\n1767755\n5110190\n11097510\n1768440\n5110232\n1768898\n10820762\n1769103\n1769168\n11467034\n10848620\n1769410\n1769425\n1769465\n1769737\n1769772\n10881384\n12148290\n1769823\n1769827\n1769840\n1769852\n1769897\n1769901\n6132966\n6132967\n1771839\n1771975\n1771977\n1772793\n4532500\n5110397\n5110417\n5110447\n5110490\n1774575\n1774576\n1775148\n5110546\n5110765\n5110769\n1777166\n1777631\n5110837\n1777695\n9372988\n6132953\n4687991\n6133029\n5110986\n5110993\n5111007\n5111044\n6133058\n9610080\n1779456\n6132938\n1780150\n5111830\n1780705\n1780716\n1782115\n1783302\n1783652\n1784804\n10208792\n1785744\n1785832\n1786317\n1786711\n5112500\n6132971\n6132974\n1786980\n1787009\n10860091\n6132805\n1788045\n5112531\n1788553\n6132936\n7346446\n6132826\n1788953\n1789225\n1789604\n1789794\n1790331\n1790692\n10749137\n10766319\n1790876\n1790888\n1791010\n1791094\n1791097\n10743044\n6132950\n1791514\n1791698\n1791715\n11016336\n11725043\n11971514\n5113078\n5113082\n5113084\n5113148\n5113330\n5113352\n1792541\n1792695\n5113385\n5884243\n9504222\n1793429\n1793610\n1793613\n1793631\n1793635\n1793646\n1793656\n1793892\n5113925\n1796984\n10600368\n1797258\n1797259\n1797299\n1797344\n1797374\n1797454\n1797479\n4532471\n8355390\n8756768\n9332506\n1797727\n1798014\n1798101\n5113950\n5884247\n1798346\n1798408\n1798449\n1798488\n1798504\n6132841\n6132850\n11976273\n1787072\n1787079\n1798523\n1798580\n1798594\n1798700\n1798794\n1798802\n1798807\n1798823\n1798863\n1798868\n4301310\n4532351\n4532352\n6115426\n6115437\n6133046\n6133051\n8793873\n1799417\n1799708\n1799743\n1799751\n1799757\n6132824\n6132825\n10722110\n1803148\n1803163\n1803197\n1803824\n1804071\n1804477\n9343385\n1804906\n1805044\n11494627\n12229237\n1805580\n5115166\n5115167\n5115198\n9663271\n1806936\n7874258\n11453492\n1808140\n1808145\n1808161\n1808195\n1808221\n1808236\n1808286\n1808348\n1808559\n6198302\n9219266\n1808752\n5115701\n5115771\n1809019\n5115777\n1809115\n1809210\n1809308\n5116095\n10183056\n12006709\n1810099\n1810464\n10882244\n5116395\n5116412\n12176559\n1811686\n1812500\n10671425\n10821201\n1813010\n1813114\n1813263\n5117189\n7656811\n1814653\n1814913\n1814928\n1814971\n5117399\n5117400\n1815260\n10826443\n12249986\n1816065\n1816138\n1816246\n1816276\n1816292\n1816299\n1816362\n1816881\n5117779\n1817797\n5734900\n11461056\n11860565\n1818413\n8326103\n1818659\n1818991\n10822185\n1819128\n1819145\n4532293\n4532297\n6134023\n6134027\n7346382\n7346384\n1819268\n1819270\n1819280\n11656384\n8407461\n6134035\n1819873\n5118348\n7657803\n5118422\n1820352\n1820372\n1820406\n1820414\n1820450\n1820451\n1820477\n5734655\n5734657\n7346381\n9420824\n1820565\n1820753\n1820888\n1821105\n1821260\n1822141\n1822142\n11731502\n12253343\n12037602\n9276279\n9347308\n5884571\n10503495\n8897869\n7596232\n12176367\n7346231\n6097214\n4532544\n4532516\n6133081\n6133083\n4532565\n10864524\n12021153\n12021649\n12089608\n9673208\n10270464\n8741750\n9473918\n9400545\n9559336\n6133292\n11332355\n6133340\n10062933\n10717837\n8148822\n10806460\n6133252\n10072380\n6133325\n10972780\n11142432\n10309234\n12171522\n9493317\n9315833\n11962292\n10399906\n6133266\n6133269\n6133270\n6133271\n11232431\n6133311\n6133312\n6133313\n6133315\n6133317\n8526388\n8624848\n5734901\n6133262\n12257250\n8831819\n5115872\n5115874\n5116475\n8038357\n6133264\n1774829\n5116843\n12171068\n9266866\n10178326\n10282389\n10400868\n10469564\n10813849\n10907635\n10982648\n8874633\n9508913\n1783898\n1783906\n6133033\n5116504\n9336001\n1781413\n1781421\n1803461\n4532405\n4532408\n4532412\n10866411\n6133241\n6133242\n6133244\n6133248\n7346227\n8000103\n9478424\n1794273\n6115388\n6133297\n1774583\n1774598\n1774618\n1774626\n1774635\n1774640\n1774654\n1774661\n6132809\n1819852\n1780287\n4532508\n1793515\n1793533\n5111643\n1768461\n1760246\n5113036\n5109796\n1821455\n1821478\n1821479\n1821505\n1821651\n1821863\n1821920\n1821934\n1821940\n1822017\n1819337\n1819362\n1804182\n1774997\n6122364\n1781473\n1783713\n1783725\n1812394\n8237987\n4532366\n4687933\n6116646\n10926224\n11088003\n1820118\n1820137\n1819057\n1820039\n5118396\n1781531\n1798329\n1798335\n1784947\n1785072\n1765996\n1765999\n1766022\n6133069\n11513188\n1786597\n5884188\n6132915\n6132916\n6132917\n5110012\n12185656\n1809594\n1781350\n1781353\n6133013\n1796943\n1819685\n10098436\n11717028\n1771772\n1782310\n10094256\n10765884\n9792270\n5108435\n5108440\n1771903\n1788813\n4301309\n10506164\n1777500\n1777517\n5112440\n1795542\n1860979\n1860983\n1860987\n4522891\n1860768\n1852956\n1835432\n1835433\n1835457\n9724183\n1837420\n4529064\n1839293\n1839296\n1840301\n1840346\n1840566\n1840581\n1840596\n1831752\n10371735\n1869359\n1869363\n9883856\n1939510\n1939520\n5141344\n1860261\n1860274\n4525177\n5123339\n5123394\n5123419\n5769164\n5880040\n5880041\n6132546\n5123449\n5123461\n5123474\n5123485\n5123489\n1869706\n1869803\n1870202\n1870237\n1870249\n1870250\n1870450\n1871407\n4531402\n1871630\n1871683\n1871698\n1871783\n1871988\n1872169\n10787705\n1872848\n1872850\n1872873\n1872901\n1873079\n1873215\n1873417\n1873776\n1873780\n1873783\n4531264\n1873843\n1873890\n5125569\n5125596\n5125602\n5125633\n5125635\n5125689\n1874274\n4531147\n1874743\n1874937\n1875120\n8219149\n1875376\n1875827\n1875830\n1875865\n1875869\n1875918\n1875958\n1876168\n1876329\n1876409\n1876542\n1876592\n1876854\n1876922\n1877038\n1877368\n1877498\n5126052\n1877788\n1877941\n1877988\n4531417\n1878406\n1878470\n9835867\n1883045\n1888454\n5884888\n6133441\n5141493\n1940510\n1940575\n1940639\n1940807\n1939879\n1736358\n1736377\n1736499\n1736560\n1736601\n1736623\n1736727\n1736905\n1736993\n1737015\n4529931\n10842267\n1737313\n1737342\n1737368\n1737491\n1737497\n1737524\n1737526\n1737533\n1737542\n1737650\n1737753\n1737847\n1738192\n1738222\n1738373\n1738422\n5102951\n1738700\n8086347\n1739337\n5102982\n1739471\n1739605\n1739833\n1739919\n1739980\n1739999\n1740183\n1740185\n1740392\n7797515\n1740469\n1740482\n1740524\n1740797\n1740828\n1741341\n1741368\n4530151\n5103061\n1741633\n1741752\n1742185\n1742263\n1742346\n5103736\n5103948\n5771350\n8313553\n5103998\n1743475\n7877231\n1743532\n1743604\n5104056\n1743768\n1743775\n1743782\n4529908\n1743828\n1743856\n1743862\n1743867\n1743898\n1743998\n1744071\n1744136\n1744180\n1744526\n1744588\n1744593\n1744699\n1744728\n1744731\n1744739\n1744896\n10844862\n1745561\n1745579\n1745600\n1745630\n1745634\n1745771\n1745816\n1745895\n1745947\n1745952\n1745957\n1746027\n1746174\n1746327\n1746613\n1746644\n1746666\n1746714\n1746775\n1746832\n1746856\n1746876\n1747141\n6097234\n1748605\n8691947\n5103121\n5103176\n5103227\n5771229\n5771232\n5771236\n5771239\n5771249\n5771258\n4525510\n4525530\n4525540\n1920851\n1920864\n10159697\n9916153\n1920957\n1920996\n1921009\n1921010\n1921040\n7346426\n10581870\n1921092\n1921150\n1921163\n1921263\n7387466\n1921633\n7346430\n1921897\n1922111\n1922143\n1922244\n1922285\n1922311\n1922343\n8016522\n5138200\n1922584\n8782891\n1922937\n5138543\n5138561\n5714680\n1923491\n1923649\n1923651\n1923668\n1923796\n1923809\n1923917\n1924044\n1924057\n1924097\n1924193\n5138681\n1924298\n1924390\n1924458\n1924713\n4535172\n1925381\n1925543\n1925731\n1925877\n1925918\n1925962\n1926054\n1926436\n1926448\n1926574\n5883255\n1926593\n1926611\n10116946\n10361239\n1926800\n1926861\n1927034\n1927217\n4709111\n5883052\n1927393\n1927439\n1927717\n5882965\n1928248\n5139050\n1928349\n1928361\n1928419\n5139156\n1928849\n1928908\n1928915\n1929270\n1929659\n1929697\n8356768\n1930110\n1930832\n1930968\n1931132\n8643155\n1931148\n1931561\n5734268\n7346434\n1931706\n1931735\n1931779\n5139915\n1931956\n1931958\n1931997\n1932020\n1932043\n1932159\n1932166\n1932273\n4708995\n1932411\n1932551\n7346444\n1932607\n6132685\n1932814\n1932960\n5806412\n1933028\n1933044\n5140214\n5140244\n5140436\n7634721\n7664111\n1933583\n1933647\n7346407\n1933793\n1933844\n1933845\n1934187\n1934188\n1934192\n1934211\n1934213\n1934221\n1935377\n1935410\n1935454\n1935459\n1926260\n5138929\n7346417\n11874998\n4709102\n1933138\n1924494\n11055981\n9623220\n5734556\n1752373\n1752483\n1752494\n1752603\n1752651\n1752749\n1752758\n1752849\n1753081\n1753215\n1753395\n5105458\n5105467\n5105547\n5105560\n1753432\n1753435\n11014495\n1753636\n5734560\n1753759\n5105588\n10955682\n10932946\n7345843\n6133481\n10017342\n5105339\n5105259\n10795141\n11673056\n1919151\n1919320\n1919328\n1919340\n1919344\n1919348\n1919438\n1919534\n1919551\n1919581\n1919589\n1919635\n1919697\n1919712\n1919720\n1919728\n1919731\n1919741\n1919951\n5137748\n1920237\n1920247\n1920259\n5137808\n5137823\n5137828\n5137832\n5137833\n5137849\n5805954\n5137861\n1920454\n1920467\n1920469\n1920494\n1920496\n1920506\n5137889\n5137891\n5804932\n5805407\n1920515\n5137903\n5137908\n5137912\n5137920\n5137926\n5137932\n5137938\n5137945\n5137946\n5137949\n1920711\n1920712\n1920718\n5804166\n5714914\n5137573\n5137578\n5137582\n5137595\n5137605\n5137612\n5137636\n5137677\n5137689\n5137706\n5137708\n5803588\n1920218\n5137763\n1749070\n1750166\n5104891\n5104759\n1758003\n1758440\n1758441\n1758461\n1855241\n1868837\n1869057\n1869178\n1869187\n1963096\n1973530\n11826016\n5143303\n5143311\n5143315\n1954496\n1954563\n5143338\n5143354\n5143368\n5143380\n5143384\n5143437\n5143453\n5143506\n5143511\n5143525\n5143575\n5734335\n1954891\n1954911\n6133648\n1955389\n5143651\n1955552\n1955581\n6133676\n1955725\n1955806\n5143675\n5143697\n1956309\n1956384\n5734542\n5734543\n1956440\n1956524\n1956536\n1956629\n1956710\n6133593\n4525068\n1957161\n1957174\n1957266\n1957300\n1957333\n1957368\n1957460\n1957572\n1957583\n1957791\n1957816\n1957854\n5143947\n1958024\n1958045\n1958152\n1958158\n1958163\n1958241\n1958252\n1958255\n1958259\n1958260\n1958275\n1958282\n1958290\n1958305\n1958323\n6544637\n1958454\n1958463\n1958483\n5144027\n1959494\n1959645\n1959652\n1959666\n1959667\n1959682\n1959735\n6133552\n1959876\n1959914\n1959919\n1959948\n10694777\n1960023\n1960181\n1960182\n6133509\n5144092\n5144093\n1960571\n1960595\n1960617\n6133518\n1960686\n1960854\n1960963\n1961013\n1961040\n5734344\n1961052\n1961126\n1961162\n7346236\n1961190\n1961252\n1961647\n1962204\n1962265\n1962268\n1962434\n1962447\n1962516\n9812211\n1962678\n1962839\n1962860\n1963011\n4302252\n5734349\n1963306\n5144345\n1963446\n1963709\n1963733\n1963827\n11644349\n1964024\n1964025\n1964029\n6133500\n1964113\n1964116\n1964195\n1964247\n1964316\n1964437\n6133502\n1964653\n8361848\n1964738\n5144426\n1965166\n1965763\n1965777\n1965795\n1965810\n1965825\n1965841\n1965913\n1966017\n5144431\n5144438\n9919915\n9370070\n5144499\n1966286\n1966302\n1966310\n5734448\n10670854\n1966362\n5144534\n1967011\n1967039\n5144543\n1967245\n1967265\n1967273\n1967445\n1967590\n1967595\n1967597\n1967672\n1967688\n7346240\n1967815\n1967873\n1968147\n1968182\n1968193\n7681733\n1968304\n1968363\n1968730\n1968746\n1968867\n1968951\n11598540\n1968990\n1969357\n1969491\n6133643\n1969621\n1970034\n1970136\n1970213\n1970322\n1970436\n5734405\n6133513\n7346252\n5144677\n5144721\n5144782\n5144787\n5144805\n5144806\n5144864\n5144900\n5144936\n5145009\n5145136\n5145186\n5145260\n5145269\n5145409\n5145522\n5145624\n5145729\n5145735\n9194811\n1971888\n6133516\n1972094\n1972185\n1972234\n1972250\n5145870\n5145965\n5146038\n5146062\n7541913\n1972443\n1972613\n1972614\n1972616\n1972620\n1972631\n10732353\n1972754\n5146282\n1973242\n1973338\n1973358\n1973393\n1973397\n1973414\n5146434\n5146483\n5146496\n5146508\n5146559\n5146566\n5146567\n5146599\n5146601\n5146611\n5146659\n5146677\n5146746\n5146752\n5146762\n5146763\n5146833\n5146837\n5146883\n5146946\n5146961\n5147039\n5147062\n5147150\n5147171\n5147208\n5147214\n5147232\n5147245\n5147306\n5147354\n5147441\n5147478\n5147498\n5147516\n1975198\n6133559\n5147608\n5147638\n11856219\n1975546\n1975553\n1975571\n1975583\n1975597\n1975711\n1975733\n8329661\n1975793\n8160782\n1975805\n1975806\n1975892\n1975897\n1975903\n1975964\n1975979\n5734539\n9356491\n9410573\n9548993\n1976163\n1976212\n1976213\n1976224\n1976228\n1976311\n1976462\n1976463\n1976469\n1976470\n1976483\n5147681\n6097233\n7973517\n1976928\n1977003\n1977007\n1977068\n5147819\n5147827\n5147834\n1977182\n1977184\n1977297\n5734420\n6133548\n5147917\n5147968\n5148043\n5148055\n5148115\n5769028\n1977813\n1977833\n1977863\n6133582\n1977962\n1977967\n1978010\n1978034\n1978045\n1978056\n1978065\n1978114\n1978375\n1978385\n1978398\n1978405\n1978407\n1978422\n1978424\n1978445\n5734388\n1978499\n1978524\n1978529\n4524636\n4524638\n5734519\n6133560\n5148252\n10738407\n1978789\n1978821\n5734396\n1978977\n1978996\n1978999\n6133546\n1979021\n5148286\n1979222\n1979229\n1979308\n1979473\n1979521\n1979561\n1979562\n1979758\n1979781\n1979787\n1979801\n1979806\n1979822\n1980269\n5148436\n5148487\n1980521\n1980532\n11449815\n1980694\n1980811\n1980827\n1980917\n8421569\n1981063\n6133585\n1981357\n1981457\n1981696\n11173690\n10592969\n7345811\n7345813\n1981937\n1981938\n1981998\n1982007\n1982203\n1982267\n1982291\n1982406\n1982500\n1982529\n1982541\n1982636\n1982865\n1982885\n1983052\n1983525\n1983648\n1983755\n1983922\n1983999\n11121180\n5149012\n1984734\n5149174\n1984949\n1985061\n1985152\n1985158\n1985167\n1985191\n1985192\n1985230\n1985707\n6133659\n1985926\n1985993\n1986009\n1986032\n1986052\n1986054\n1986056\n1986061\n5734345\n1986157\n1986166\n1986171\n1986191\n1986220\n1986452\n1986508\n1986522\n1986575\n1986623\n1986779\n1986787\n1986936\n5149308\n5149315\n6133614\n1987204\n5768880\n1987362\n1987377\n1987527\n1987629\n1987665\n1987740\n1987744\n1987766\n1987767\n1987775\n1987776\n1987786\n1987787\n6133591\n4524221\n11650277\n6133534\n11190148\n1988002\n5734451\n1988225\n1988257\n1988306\n1988420\n1988487\n1988593\n8388883\n5149414\n5149438\n5734528\n6133644\n1989355\n1989393\n1989428\n1989942\n1990043\n1990050\n1990066\n1990088\n1990105\n1990150\n5734390\n1990551\n1990582\n1991123\n1991179\n6133501\n5149609\n1991277\n1991310\n1991371\n1991378\n1991779\n1991783\n5149836\n5149843\n10155932\n11098546\n11869776\n1991945\n5734515\n11635419\n1992066\n5149929\n5149986\n6133619\n5734398\n5880533\n5880539\n5880545\n5880550\n5880552\n5880559\n5880563\n8237343\n8632989\n7429212\n9442902\n4524740\n4523560\n4524054\n4524998\n4524376\n4524822\n11828714\n10422582\n10574156\n5880392\n6133595\n6133596\n6133597\n4524070\n4524072\n4524955\n10530208\n11555221\n4525078\n6133667\n6133670\n6133673\n6133674\n6133675\n7346249\n6133637\n6133620\n6133519\n11780161\n6133604\n6133607\n7346237\n6133520\n6133562\n5734379\n11548960\n7345819\n6133523\n6133525\n6133528\n6133542\n6133497\n6133498\n6133575\n6133517\n6133586\n6133635\n10175639\n9932090\n7346256\n7345829\n11652557\n5734535\n7345801\n5734362\n5880478\n6133540\n10755716\n5144190\n5146412\n5734482\n5149499\n5149704\n5149746\n5149768\n5734422\n7443518\n5146303\n5146342\n5146379\n1991462\n1991466\n4302268\n4524393\n10773498\n1942378\n1942383\n1942697\n1942808\n4689929\n5141677\n1943212\n1943223\n1943236\n1943397\n8277078\n5141795\n1943505\n1943619\n8133678\n1944503\n1944504\n1944591\n1944778\n5141924\n1945066\n9050611\n1945088\n1945137\n1945143\n1945173\n1945225\n1945227\n1945569\n1945605\n1945694\n1945710\n1945738\n1945742\n1945748\n1945814\n1945837\n1945856\n1945863\n1945874\n1945878\n1946051\n1946058\n5142067\n1946432\n7346354\n1946695\n1946738\n7389824\n1946917\n1947306\n1947335\n1947385\n1947409\n1947449\n1947456\n1947492\n1947626\n1947673\n1947703\n1947727\n1947740\n1947753\n1947765\n5734665\n1948062\n1948073\n1948464\n1948465\n1948941\n1949008\n1949015\n1949336\n1949366\n7346351\n8828146\n1949794\n1949929\n5142499\n5142599\n8109173\n1950013\n7346356\n1950171\n1950362\n1950521\n1950879\n5977257\n8270406\n7633472\n5142725\n5142729\n5142730\n5142006\n5142032\n5142042\n1869512\n1952878\n1952883\n1952909\n10744228\n1800191\n5109821\n1758613\n9355953\n1758874\n1758878\n1759055\n1759069\n1759083\n4533952\n7972792\n1759153\n1759177\n1759620\n1759667\n1759686\n10329023\n1760104\n1760593\n1760620\n1794361\n4534225\n1760891\n4533255\n1760939\n1760943\n1761041\n1761438\n1761778\n1762244\n6132749\n1762608\n1762657\n6132957\n1762680\n5109506\n5109523\n5109599\n5109670\n5109722\n1763610\n1763727\n1763741\n1764791\n1765010\n1765011\n1765038\n4534245\n5109830\n5109843\n5109848\n5109872\n5109882\n5109898\n5109943\n8352161\n1765658\n1765767\n1766130\n1766131\n1766137\n1766210\n1766410\n7895336\n1766646\n1766741\n1766910\n11034779\n1767134\n1767368\n1767393\n1767511\n1767597\n1767625\n10575632\n1767655\n5110120\n5734744\n5772176\n5772196\n5772199\n5772202\n5772206\n5772210\n5802396\n5883914\n5883925\n6132943\n7345742\n7388922\n8045644\n1768117\n5110200\n1768341\n5110213\n1768568\n1768698\n1768702\n1768771\n1768819\n5110256\n5110258\n1769057\n1769095\n1769194\n1769505\n1769519\n1769566\n1769958\n1769978\n1770150\n1770172\n1770477\n1770530\n4532696\n8393221\n1771385\n7725644\n1771509\n1771531\n1771555\n1772013\n1772094\n6133806\n1772169\n1772179\n5772129\n1772977\n1773163\n1774272\n1774347\n1774797\n4301304\n6115946\n4534046\n4534052\n4534057\n4534719\n1775962\n1775963\n1776067\n1776330\n1776371\n1776619\n1776862\n6132861\n4534463\n5110871\n5110885\n4534299\n1778109\n1778143\n5111535\n5111574\n5772222\n1779435\n1779633\n1779641\n1779690\n1780378\n1781233\n1781234\n5111974\n5111980\n1781803\n1781841\n1782168\n1782177\n1782341\n1782354\n1782457\n11763567\n1782543\n1782560\n1782615\n1782627\n1782672\n1782726\n1782757\n1782763\n1782777\n1782803\n1782841\n1782872\n1782927\n1782948\n1783043\n6133026\n5112291\n5714973\n5715004\n5734845\n5772349\n5772351\n1783855\n1783861\n1784359\n1784513\n1784761\n1784853\n4534290\n1785145\n1785162\n1785181\n1785185\n1785286\n4532886\n4532888\n4532890\n1785314\n1785322\n1785329\n1785367\n1785883\n1785887\n1785888\n1785895\n1786007\n1786017\n8292872\n1786360\n1786448\n1786452\n1786515\n1786573\n1786619\n1786902\n1787112\n1787213\n1787267\n1787367\n1787373\n1787381\n4687681\n9268082\n1787400\n1787504\n1787506\n1787590\n1787610\n1787631\n1787841\n1788522\n4534011\n1788846\n1788856\n1788917\n1789071\n1789076\n1789086\n4533924\n1789553\n4534166\n1789753\n1789957\n1790002\n1790084\n4533115\n1790361\n1790364\n1790376\n9174377\n1791384\n1791422\n1791784\n1792061\n1792292\n1792377\n1792411\n1792414\n1792418\n1792426\n1792431\n1792449\n1792475\n10684776\n5113370\n1792996\n1793243\n1793246\n1793689\n1793877\n1793986\n1795065\n1795068\n4532908\n6133011\n7869346\n1795854\n1795957\n1796007\n1796117\n1796145\n1796169\n1796217\n4688172\n1796423\n1796463\n8105817\n1796678\n1797030\n1797735\n1798060\n4533431\n4533433\n4533444\n6133001\n6133002\n6133006\n6133007\n6133010\n1798090\n1798372\n1798916\n1798931\n1798971\n1798974\n1799135\n5113951\n1799695\n1799701\n1800004\n1800032\n1800149\n9536457\n4534389\n4534207\n10638451\n4532811\n4533273\n8890502\n4534398\n6544687\n4532269\n4533123\n4534408\n4534533\n6132989\n6132762\n6133075\n6132781\n11311045\n5110644\n6132797\n5114198\n1763072\n5109385\n5772063\n9038042\n8491927\n4534681\n4534685\n4534686\n1792555\n8108800\n1771634\n1771650\n1771678\n1771698\n1770880\n1771040\n1771214\n1771245\n6132931\n7940536\n10841562\n5113847\n5113853\n5772309\n5108671\n5108705\n5108724\n5108737\n5108752\n5108761\n5108787\n5108794\n5108796\n5734817\n6132880\n9243764\n1759394\n1789512\n4533360\n10933525\n5110282\n11566649\n11615549\n11731155\n4532208\n4532239\n4532253\n4532266\n6115772\n6115820\n6115822\n6115830\n1782249\n1782273\n1782279\n1782289\n10063383\n1767293\n9325654\n10458175\n10683012\n10702885\n1822487\n1822490\n1822493\n1822587\n1822610\n1822613\n1822787\n1822796\n1822819\n1822830\n1822848\n1822852\n1823294\n1823444\n6133742\n1823573\n5118565\n7346263\n6133720\n1823706\n10996761\n5118582\n1824242\n5734235\n6133692\n7875265\n1824330\n1824338\n1824354\n1824390\n1824666\n1824751\n1824766\n1824845\n1824997\n1825064\n5118859\n1825077\n1825082\n1825083\n4534909\n4534914\n1825156\n1825176\n1825336\n7346284\n1825539\n5118974\n5118978\n1825786\n7345777\n1825967\n1825971\n1825983\n1826022\n1826033\n1826108\n1826129\n11322712\n5118996\n5119000\n6133700\n10510959\n11059353\n6133750\n1827125\n1827349\n1827408\n1827414\n1827484\n4534869\n6133691\n9883140\n5119181\n5119211\n5119223\n5119239\n5119245\n1827649\n1827650\n1827687\n1827711\n11435704\n1828162\n1828180\n6201790\n7346286\n6133680\n6133681\n6133684\n6133687\n6133688\n7346276\n9921001\n5118837\n5118841\n7346271\n7346273\n9486293\n1822502\n5806166\n11464595\n1892821\n5127867\n5127893\n5127932\n5127955\n7346346\n1893137\n1893266\n1893329\n12106975\n1893546\n1893612\n1893793\n1893923\n1893951\n4704279\n8832485\n8982591\n1894002\n1894012\n1894164\n1894268\n5882039\n5128161\n5128182\n7712938\n1894714\n4535614\n4535630\n4535636\n8049830\n10639484\n1894840\n4535827\n1895037\n4535809\n4535817\n1895159\n5128323\n5128326\n5128353\n5128357\n9804158\n1895499\n1895609\n1895667\n1895867\n1895875\n1895956\n1895992\n1896105\n1896304\n5128519\n1896841\n1896922\n1897664\n1897685\n1897747\n1897817\n1898250\n1898286\n4299368\n5129293\n7346344\n1898434\n1898441\n1898544\n5129378\n5129417\n1898946\n1898970\n1898988\n1900890\n1900897\n1901213\n1901399\n1901404\n1901411\n1901427\n1901428\n1901429\n1901435\n1901463\n1901832\n1901850\n5130369\n5130444\n5130464\n5130471\n5130476\n5130521\n5130542\n1902533\n1902543\n1902560\n1902568\n1902572\n1902586\n1902749\n8140883\n8189761\n4535689\n10577473\n5130775\n5130813\n5130814\n5130851\n5130904\n5130908\n5130944\n1904272\n1904701\n1904719\n1904887\n1904938\n1904943\n1904948\n1904996\n1905079\n6221746\n1905383\n1905396\n1906552\n8208583\n1907436\n1907498\n1907511\n1907534\n1907541\n1907547\n1907580\n1907620\n1907625\n1907687\n4535754\n1908352\n1908367\n1908660\n1908702\n1908840\n1908871\n1908929\n1909123\n7346301\n8978362\n1909319\n10656625\n1909398\n1909607\n1909659\n1909810\n1909865\n1910706\n1910809\n1911093\n1911112\n1911168\n1911278\n1911298\n1911461\n1911503\n7728366\n5133687\n5133689\n4535592\n1911736\n7809779\n8078362\n5133693\n5133695\n1912325\n1912372\n1912428\n4299535\n4299565\n4299576\n4299597\n4299599\n5772890\n7428726\n4535581\n5134098\n8312017\n1913105\n1913175\n1913178\n1913328\n5134469\n5134517\n5134559\n5134661\n5134667\n5134682\n5134693\n5134810\n5135026\n5135191\n5135355\n5714507\n7738295\n8233062\n8314088\n9915028\n9967126\n1915079\n1915080\n1915140\n1915154\n1915325\n11516142\n11535847\n1916410\n1916509\n1916758\n5136594\n5136681\n5136713\n5136939\n5137085\n5137166\n1918321\n1918394\n1918406\n1918408\n1918411\n1918416\n1918467\n1918495\n1918497\n1918509\n1918533\n1918553\n1918554\n1918627\n1918669\n1918843\n4535510\n10000384\n10043827\n5130587\n5130682\n5131096\n5131142\n5131192\n5131293\n5131339\n5131443\n5131467\n5131495\n5131520\n5131555\n5131585\n5131593\n10228568\n10277877\n10508423\n11425145\n5132154\n5132183\n5132191\n5132238\n5132479\n7346328\n7346335\n8001799\n5806167\n7642610\n11525418\n5128644\n5129000\n10201273\n5131910\n5881551\n8138711\n8549720\n1910628\n1910629\n1910662\n1902143\n1902182\n1899433\n1899818\n5129913\n7768674\n7934873\n8168644\n8393082\n1914701\n1914708\n1914734\n1914749\n7346340\n1918584\n1951370\n1951412\n1951462\n1951505\n1951507\n1951522\n1951529\n1951542\n1951557\n5142870\n1951631\n9512631\n1951649\n1951671\n1951675\n1951747\n9156165\n1951791\n5734305\n1951818\n1951840\n1951844\n1951859\n1951881\n5734326\n1951919\n1952014\n1952034\n1952052\n1952062\n1952147\n1952175\n1952177\n1952229\n5142948\n1952281\n5143007\n5143048\n5143049\n5143076\n5143080\n1952449\n1952481\n1952532\n10782264\n1952551\n1952611\n1952685\n5143116\n5143129\n5143147\n1952857\n9502606\n5885428\n8604089\n6097228\n1868211\n1868409\n4702564\n6544581\n1868470\n5141581\n5141590\n1735121\n1941864\n5121613\n1842097\n1842695\n9755262\n1843564\n1843602\n1730519\n1730543\n8292351\n5101394\n1730948\n1730978\n4525641\n1731598\n10450446\n8402212\n1872359\n1872361\n1872368\n1878626\n6133117\n1878744\n1878782\n1878862\n1878879\n1878895\n1878904\n1878939\n1879125\n1879141\n1879227\n1879337\n1879339\n1879340\n1879379\n5734212\n1879408\n1879452\n1879471\n5126212\n5126217\n1879630\n1879731\n1879735\n10915497\n1879970\n1880062\n1880064\n1880138\n1880140\n5126635\n5126637\n1880353\n1880451\n1880464\n1880465\n9524458\n6133225\n1880852\n1880858\n1880968\n1881089\n1881121\n1881151\n9819403\n4531687\n1881329\n1881336\n1881515\n4531713\n1881834\n1881964\n1882021\n1882210\n1882253\n1882266\n1882272\n5126834\n1882753\n1882767\n1882884\n1882901\n1882905\n10156181\n1882930\n1882965\n1883067\n1883161\n5127097\n1883873\n1883943\n1883951\n1884051\n1884061\n4531690\n1884212\n4531708\n1884229\n9294363\n1884434\n1884437\n1884449\n1884461\n1884465\n1884479\n6120980\n1884816\n1884835\n1884844\n1884858\n1884877\n4532122\n1884908\n1884909\n4532146\n1884970\n1885012\n1885262\n1885263\n1885569\n1885623\n1885630\n6133181\n1885745\n1885826\n1885919\n1885945\n1885994\n1886251\n1886320\n1886362\n8223165\n1886526\n1886587\n1886700\n1886720\n1886726\n1886729\n7562564\n1886929\n1887054\n1887290\n1887509\n1887586\n1887691\n1887701\n1888027\n1888092\n4531968\n1888324\n1888346\n1888484\n1888537\n1888619\n1888733\n1888743\n1888759\n1888891\n1888893\n1888906\n1888911\n1888913\n9535420\n1889039\n1889043\n1889053\n1889071\n1889074\n1889239\n1889249\n1889270\n1889272\n1889277\n1889287\n1889356\n1889358\n1889370\n1889552\n1889563\n1889942\n1890012\n1890031\n5127521\n1890097\n1890187\n9519191\n1890287\n1890320\n1890335\n1890343\n10180624\n1890410\n1890487\n1890534\n1890576\n1890670\n1890699\n1890772\n1890898\n1891059\n1891167\n1891190\n1891326\n1891339\n1891386\n1891426\n1891473\n1891493\n4532022\n1891533\n1891583\n1891636\n1891758\n1891889\n1892153\n1892242\n10141437\n11056379\n9674732\n1884255\n1884370\n5884851\n6133139\n6133141\n5771877\n4532125\n9967529\n10145421\n6120803\n6133232\n6121010\n10513366\n10397209\n6133154\n10959264\n6133158\n5126675\n5126680\n7446048\n8532380\n8537359\n8823068\n8858121\n9100030\n9137965\n1886374\n1889716\n1889765\n1889833\n5127592\n5127609\n5127629\n5127644\n5127656\n5127669\n5127675\n5127683\n5127688\n5127698\n5802339\n1887108\n4532050\n4532088\n4532095\n6121184\n1888638\n1883885\n4532150\n4532160\n5771880\n10410699\n1846111\n1846133\n1939597\n1830879\n1831009\n1831136\n4708183\n5122430\n5122439\n1854824\n1854849\n1858637\n1858674\n1858698\n1858775\n1859046\n1859177\n1859305\n1859453\n9749806\n6133397\n1859932\n1860026\n4536472\n4536483\n1973467\n5123221\n1865593\n10014340\n1865650\n1865659\n1865660\n1865666\n1865671\n9914882\n9972403\n1866237\n5734291\n1866356\n6106943\n1866491\n1866530\n1866549\n1866556\n1866568\n5124880\n5124911\n10047346\n1867820\n1867928\n8439879\n9983244\n1867991\n1867993\n11643393\n11670751\n11729388\n5124716\n5120278\n1841946\n10019169\n10005133\n1861451\n1861456\n1861457\n1861488\n1861494\n1861644\n1861663\n1861665\n1861673\n1861697\n1861705\n1861714\n1861721\n1861797\n1861862\n5123674\n1861933\n1861936\n1861937\n1861938\n1861949\n1861951\n6106744\n1861975\n1862008\n1862061\n1862066\n1862072\n5123676\n5123685\n1862293\n1862363\n1862370\n1862394\n1862401\n1862403\n10374414\n11907754\n1862430\n1862449\n1862454\n1862468\n1862475\n1862481\n1862516\n1862517\n5123707\n5123709\n1862572\n1862578\n1862580\n1862719\n1862765\n1862774\n1862837\n1863034\n5123922\n5734719\n1863354\n1863394\n1863467\n1863646\n5124007\n5124029\n9310369\n1863829\n1863848\n1863909\n1863910\n1863944\n9578319\n1864126\n1864135\n1864161\n1864358\n1864377\n5124121\n5124143\n5124233\n11738734\n11954157\n1864652\n5124300\n5124304\n5124305\n5124332\n5124348\n5124374\n5124415\n5124433\n1864793\n1864796\n5734713\n5885399\n6099041\n6106759\n7346401\n10193618\n6106647\n5123815\n5123876\n5123889\n5123890\n8810912\n10189661\n10191275\n10436020\n1992634\n1992883\n10842838\n10994020\n1993036\n1993043\n1993419\n1993637\n1953196\n1953326\n1953356\n6132711\n6132712\n6132715\n1953407\n1953423\n1953729\n11467944\n6132725\n6132726\n6132723\n6132729\n1954037\n5143241\n5143249\n5143266\n1954120\n6132728\n1830099\n1830380\n1830407\n1754135\n5105642\n1754368\n1754380\n1754400\n1754465\n1754511\n1754516\n1754535\n11737872\n12075408\n11175615\n1754902\n1754919\n1754933\n1755131\n5734138\n1755237\n1755248\n1755253\n1755276\n5106160\n5107644\n7410701\n7674502\n7778368\n7903078\n7955974\n8426357\n1757652\n5108318\n5108334\n11140464\n11860016\n1757853\n5108346\n5108349\n4522753\n9004359\n1939688\n1855630\n1855747\n8734090\n1856384\n1856620\n1856668\n1856768\n1856867\n1856971\n1857258\n1857267\n1857380\n1857626\n1857828\n1857829\n1857924\n1857938\n1857978\n1858283\n8178453\n1858557\n1937707\n1937723\n1937754\n1937819\n1937826\n1937892\n1937911\n1938007\n1938052\n1938058\n1938069\n1938088\n1938114\n1938162\n1938168\n1938174\n4692485\n4692504\n4693382\n5734569\n8225376\n1936988\n1936993\n5141144\n5141177\n5141179\n5141185\n5141187\n5141199\n5141212\n5141215\n5141226\n5141229\n5141233\n5141242\n1937490\n10761559\n1937556\n1937566\n1937570\n1937580\n1937582\n1937594\n1937613\n1938214\n1938226\n1938230\n1938233\n1938300\n1938612\n1938796\n1938810\n1938955\n1939056\n1939086\n1939168\n5141311\n5141317\n8546322\n8574752\n1835098\n1837172\n1839560\n5770922\n5770942\n12188993\n1800238\n10213314\n6133777\n1800528\n1800539\n10737993\n1800572\n1800686\n1800696\n1800821\n5114394\n5114400\n11873966\n4534798\n9544823\n1800881\n5114425\n1800934\n6133780\n1801000\n1801001\n1801073\n1801080\n1801084\n1801170\n1801196\n5114465\n1801461\n1801490\n10066605\n10510325\n4534779\n4534782\n6112606\n6112613\n6112661\n6133809\n6133811\n6133813\n6133814\n1801993\n1802090\n8883183\n1802113\n1802120\n1802229\n1802244\n1802280\n1802337\n1802702\n1802783\n1802827\n1802919\n1802939\n1803022\n1803035\n1803039\n1803065\n1803073\n1803108\n10942408\n4534767\n6133803\n5114311\n8244266\n10987178\n", + "regions/europe.classes": "1934693\n1860621\n1860628\n4522795\n1860659\n1860664\n1860668\n1860671\n1860688\n1860709\n1860711\n4522933\n5123582\n1732063\n1732072\n1732416\n1732419\n1732452\n1732457\n1732521\n1732565\n1732662\n1732680\n1732685\n1732697\n1733258\n1733484\n4525266\n4525268\n4525270\n4525273\n1733620\n1733755\n5101678\n5101717\n5101745\n5769191\n1734453\n1734704\n1734794\n1734826\n5102287\n11529292\n1831861\n1831863\n1831890\n1845270\n1845368\n1845548\n1845565\n1845607\n4529566\n4528100\n1846374\n1846604\n1846657\n1846715\n1846729\n1846916\n1847061\n1847097\n1847111\n1847407\n4528547\n1847572\n9262981\n1847956\n9546514\n1848150\n1848202\n10450501\n1848219\n9868978\n1848273\n1848356\n1848378\n1848426\n4528539\n1848596\n1848610\n1848636\n1848657\n1848669\n1848690\n1848713\n1848714\n1848717\n1848730\n1848741\n1848753\n1848864\n1848868\n1849104\n1849267\n1849273\n1849284\n1849294\n1849477\n11052757\n11080751\n1849531\n1849539\n1849552\n1849630\n1849856\n1849897\n1849924\n1850008\n1850042\n1850045\n1850076\n1850077\n1850106\n1850238\n1850246\n11576787\n1850279\n1850302\n1850335\n1850386\n1850394\n1850450\n1850497\n1850506\n4527903\n1850522\n1850533\n1850538\n1850570\n1850640\n4528529\n1850781\n1850971\n1851000\n1851010\n1851011\n5122037\n5122113\n1851203\n1851220\n1851337\n1851347\n1851555\n5122206\n4527972\n1852150\n1852159\n1852165\n1852177\n1852311\n1852430\n11287091\n4527957\n1848920\n1829533\n1829588\n1829776\n1829785\n1829799\n1829823\n1829974\n4525354\n1828637\n6097236\n8871600\n9182336\n5769272\n7623903\n8912441\n5879654\n7448174\n4525610\n1751852\n1861395\n1845866\n1845952\n1845962\n1845965\n1845982\n1839094\n1841261\n1830838\n1830843\n1830122\n1830125\n1830131\n1830144\n1830147\n1830152\n1830186\n1830191\n1830207\n1830221\n1830241\n1830243\n1830262\n1830266\n1830271\n4525476\n4525487\n1831643\n1841296\n4528593\n8271010\n1853723\n5880147\n9734171\n11418741\n11513018\n11571523\n12151997\n12160125\n12022449\n7908344\n1761111\n1764531\n1769103\n1769897\n7701550\n8837162\n1772793\n4532500\n1777289\n8141741\n1777631\n1777695\n1779399\n1780149\n1780150\n8193562\n1783882\n1786980\n1786985\n1788553\n1790692\n1790816\n5113078\n5113084\n5113234\n9310626\n1792210\n1797178\n1797258\n1797276\n1797333\n1797349\n1797367\n1797374\n1797429\n1797454\n1797479\n1797527\n1797542\n4532461\n4532471\n4532473\n8016905\n8756768\n1798346\n1798408\n4532493\n1798449\n1798481\n1798504\n1798594\n1798802\n1798807\n4532351\n4532352\n4532357\n1799708\n1803163\n1803824\n1804071\n1804906\n1805110\n1805155\n4532608\n7874258\n1807969\n1808195\n1808440\n1808450\n1808752\n5115701\n5115771\n5115777\n1809210\n1810099\n5116416\n1813114\n5117189\n5117200\n7656811\n1814552\n1814630\n1814653\n5117399\n5117400\n1816881\n1817797\n8326103\n1819050\n1819145\n4532293\n4532297\n1819268\n8407461\n1819699\n9331464\n1819873\n1819928\n6122092\n7657803\n8361973\n1820372\n1820406\n12253343\n5884571\n7596232\n5771982\n6097214\n4532544\n4532614\n4532516\n4532532\n4532565\n12089608\n8148822\n11962292\n12135372\n11033463\n11812181\n5115854\n5115872\n5115874\n5116475\n8038357\n8165185\n6097254\n5116698\n1805535\n9198767\n1788635\n4532395\n4532405\n4532408\n4532412\n1780869\n8000103\n4532534\n1768626\n4532508\n4532510\n1760244\n1760246\n5113030\n5113036\n1821856\n1821911\n1819170\n1812394\n8237987\n4532366\n4532453\n1820039\n1772822\n1771772\n1771779\n1777517\n1860979\n1860983\n1860987\n1860994\n1861011\n1861031\n4522911\n4522916\n4522919\n4522922\n12318291\n4522886\n4522890\n4522891\n4522896\n1860765\n1860768\n1860852\n1860857\n7767114\n7851302\n7961640\n1992378\n1992504\n1852956\n1852978\n1835432\n1835433\n1835456\n1835457\n9724183\n1837343\n1837420\n1837429\n1837464\n1837515\n4529064\n7958169\n8015612\n1839293\n1839296\n1840297\n1840301\n1840345\n1840346\n1840360\n1840371\n1840380\n1840408\n1840478\n1840483\n1840485\n1840555\n1840566\n1840570\n1840581\n1840596\n1840621\n4529186\n5119808\n1831752\n1852751\n1852787\n1852831\n9473121\n4529630\n5125075\n5125104\n8416348\n1751236\n1751290\n1751298\n1751299\n1751368\n1751457\n4535884\n4535904\n1860408\n4525177\n5123339\n5123394\n5769164\n5123461\n5123474\n1751207\n1751216\n1869595\n1869656\n1869803\n1869852\n1869858\n1869976\n1870202\n1870249\n1870250\n1870450\n1870650\n1870988\n5125306\n1871160\n1871212\n1871217\n1871252\n1871264\n1871407\n4531402\n4531409\n1871451\n4531365\n4531376\n1871683\n1871698\n1871783\n1871826\n4531427\n7673242\n10787705\n1872848\n1872901\n1872904\n1873048\n1873051\n1873079\n1873215\n1873411\n4530947\n4530951\n1873776\n1873780\n1873783\n4531237\n4531264\n5125689\n1874168\n1874192\n1874204\n1874211\n1874229\n1874269\n1874280\n1874295\n4531145\n4531147\n4531158\n1874375\n1874743\n9782192\n1875008\n1875120\n8219149\n1875327\n1875376\n1875409\n1875429\n4531242\n1875631\n1875633\n1875680\n1875682\n1875687\n4531284\n1875827\n1875830\n1875865\n1875869\n1875918\n1875940\n1875952\n1875958\n1876063\n1876329\n1876357\n1876409\n1876512\n1876542\n1876623\n1876854\n1877038\n1877310\n1877341\n1877345\n1877368\n4531246\n9111961\n5126052\n1877941\n1877986\n1877988\n1878067\n4531417\n4531425\n4531429\n1878197\n1878350\n1878470\n1878471\n1878490\n1878500\n1878586\n1890065\n5884888\n11728049\n1877035\n1872315\n1748805\n1940158\n4525859\n4525884\n5141493\n5141501\n1940504\n1940510\n1940575\n1940639\n1940644\n1940717\n1940744\n1940768\n4525777\n4525803\n1940807\n1940838\n4525846\n1941330\n1941348\n1941377\n1941437\n10309794\n12211069\n1939879\n1736377\n1736412\n1736425\n1736447\n1736484\n1736511\n1736528\n1736560\n1736565\n1736601\n1736623\n5102628\n5102642\n1736727\n1736800\n1736898\n1736904\n1736905\n1736906\n1736945\n4530406\n4529931\n1737131\n1737342\n1737368\n1737413\n1737437\n1737491\n1737497\n1737509\n4530608\n7466487\n1737524\n1737526\n1737533\n1737542\n1737552\n1737650\n1737753\n1737775\n1737776\n1737783\n1737847\n1737893\n1737924\n4530002\n8186212\n1738050\n1738163\n1738222\n1738245\n1738317\n1738322\n1738337\n1738373\n1738422\n1738429\n1738514\n8420632\n8869900\n5102931\n5102951\n1738687\n1738700\n1738722\n1738777\n1738794\n1738839\n1738883\n1739042\n1739043\n8086347\n1739128\n1739151\n1739272\n1739284\n1739290\n1739337\n1739377\n1739381\n5102982\n1739449\n1739451\n1739461\n1739471\n1739605\n1739748\n1739797\n1739816\n1739819\n1739833\n1739919\n1739922\n1739931\n1739980\n1739999\n1740005\n1740053\n1740069\n1740116\n1740120\n1740155\n1740174\n1740183\n1740185\n1740305\n1740374\n1740392\n7797515\n8215326\n1740482\n1740518\n1740533\n1740567\n1740570\n1740623\n8094357\n1740762\n1741056\n1741147\n1741253\n1741258\n1741340\n1741341\n1741368\n4530151\n8345820\n5103066\n5771357\n1741545\n1741551\n10838422\n1741590\n1741593\n1741615\n1741633\n1741634\n1741667\n1741752\n1741756\n1741765\n4530424\n1741820\n10807169\n11093909\n1742106\n1742142\n1742185\n1742263\n1742346\n1742402\n5103451\n5103502\n5103613\n5103736\n5103948\n5771350\n7975250\n1743196\n8313553\n5103998\n7661023\n11846897\n1743453\n1743475\n7877231\n1743532\n1743588\n1743604\n1743613\n5104056\n6097235\n1743641\n1743643\n1743710\n1743714\n4530214\n1743730\n1743768\n1743775\n1743782\n4529900\n4529908\n4529915\n1743828\n1743856\n1743862\n1743867\n1743898\n1744071\n1744136\n1744180\n1744224\n4530632\n1744416\n1744498\n1744526\n1744542\n1744588\n1744593\n1744693\n1744699\n1744709\n1744714\n1744728\n1744731\n1744739\n1744742\n1744748\n1744763\n1744777\n1744782\n1744789\n1744808\n1744810\n1744860\n1744896\n1744901\n7964262\n1745013\n1745079\n10844862\n1745131\n1745558\n1745561\n1745579\n1745600\n1745630\n1745634\n1745636\n1745643\n1745659\n1745676\n1745678\n1745705\n1745724\n1745725\n1745737\n1745756\n1745762\n1745771\n1745781\n1745787\n1745788\n1745816\n1745827\n1745830\n8162538\n8369868\n1745925\n1746027\n8424972\n1746174\n1746413\n1746440\n1746613\n1746644\n1746666\n1746689\n1746775\n1746832\n1746856\n1746876\n1746910\n1747050\n1747141\n5104442\n1747738\n4530138\n5104558\n1748203\n1748321\n5104597\n6097234\n7588222\n9242559\n1748456\n1748720\n5104641\n8691947\n10580256\n5103121\n5103176\n5103181\n5103185\n5103227\n5771227\n5771229\n5771230\n5771232\n5771236\n5771239\n5771241\n5771243\n5771249\n5771255\n5771256\n5771258\n5771259\n1831780\n4525500\n4525503\n4525505\n4525510\n4525530\n4525540\n4525547\n4525557\n4525562\n1920851\n1920864\n1920892\n10556522\n1921466\n1921521\n1921590\n7387466\n1922197\n10854079\n1922311\n1922343\n8016522\n1922572\n1922584\n4535092\n1922937\n1923019\n1923037\n12165672\n5138298\n5138492\n5138543\n5138561\n5714680\n1923796\n1924077\n1924082\n1924097\n5138681\n1924713\n11470119\n1924867\n1925221\n1925233\n7354189\n4535172\n1925381\n1925410\n1925454\n1925918\n1925962\n1926054\n9816676\n1926324\n1926385\n1926861\n5882965\n1928248\n5139040\n5139156\n1928945\n1928960\n1929270\n1929659\n1929697\n5792092\n8356768\n1930110\n1930904\n4535106\n1931179\n1931509\n1931779\n1931788\n1932393\n1932411\n1932473\n1932517\n1932551\n1932752\n1932960\n1932976\n5140214\n5140244\n5140436\n5140443\n5772702\n5772749\n7634721\n7664111\n9954885\n1933583\n1933649\n1933793\n1926166\n1926260\n11874998\n1933095\n1933126\n1933138\n1933163\n1933204\n1924494\n1752383\n4522322\n5105339\n1919221\n1919223\n1919317\n1919320\n1919330\n1919333\n4535285\n7981372\n1919698\n1919706\n1919712\n1919716\n1919966\n1920237\n1920258\n1920259\n1920395\n1920491\n1920494\n1920496\n1920498\n1920502\n1920506\n1920509\n1920512\n4535307\n5137902\n5137903\n5804895\n1920707\n1920709\n1920712\n4535271\n5137578\n5137582\n5137595\n5137612\n5137636\n5137677\n5137682\n5137695\n5137706\n5137708\n8203812\n1920218\n1748890\n1748922\n1748942\n1749050\n1749070\n1749164\n1749449\n1749661\n1749713\n1749744\n1749846\n1749869\n1749908\n1749921\n1749929\n1749936\n1749948\n1749954\n1749959\n1749975\n1750051\n1750076\n1750097\n1750131\n1750143\n1750159\n1750166\n1750288\n1750326\n5104772\n5104781\n5104797\n5104829\n5104882\n5104891\n5104903\n5104927\n5104940\n5105054\n5105088\n5105106\n5105158\n5976947\n1751051\n5104759\n1749596\n1749608\n1749635\n8741260\n1735532\n4527339\n4527342\n1731826\n1731837\n1731860\n1855235\n1855241\n1954490\n1954563\n5143380\n5143453\n5143477\n1955479\n1955484\n5143651\n1955694\n1955856\n4524588\n5143675\n5143697\n1956440\n1956524\n1956599\n1956639\n1956710\n4525068\n1957266\n1957286\n1957300\n1957556\n1957565\n1957570\n1957572\n1957579\n1957583\n1957611\n1957632\n1957673\n1957706\n1957718\n1957746\n1957791\n1957816\n1957822\n4524320\n8172949\n1957845\n1957852\n1957854\n4524421\n4524424\n4524426\n5143944\n5143947\n1958024\n11554842\n1958065\n1958323\n1958515\n1959383\n1959395\n1959423\n1959436\n1959461\n1959467\n1959473\n1959682\n1959735\n1959799\n1959876\n1959914\n1959919\n1960617\n1961013\n1961037\n1961040\n1961068\n1961190\n7741315\n1962204\n1962265\n1962268\n1962434\n1962516\n9812211\n10004969\n1962584\n4524568\n1962636\n1962860\n1962961\n1962972\n1962990\n1963011\n4302252\n1963168\n1963306\n1963446\n1963463\n1963587\n1963709\n1963710\n1963755\n1964189\n1964191\n1964195\n1964401\n1964437\n1964471\n1964637\n1964653\n1964657\n8361848\n1964836\n5144426\n1965166\n1965197\n1965208\n1965345\n1965640\n1965763\n1965777\n1965795\n1965810\n1965825\n1965841\n1965913\n1965996\n1966017\n1966351\n1966358\n1966854\n1966886\n5144534\n1967003\n1967006\n1967011\n1967025\n5144543\n1967245\n1967265\n1967273\n1967452\n1967597\n1967803\n1967815\n1967873\n7681733\n1968678\n1968686\n1968837\n1968867\n11598540\n1968990\n1969291\n1969339\n1969463\n1969954\n1969958\n4523707\n1970213\n1970227\n1970243\n1970259\n1970284\n5144677\n5144721\n5144782\n5144787\n5144805\n5144880\n5144900\n5145009\n5145136\n5145186\n5145255\n5145260\n5145269\n5145409\n5145502\n5145522\n5145729\n7753668\n8014296\n9627567\n1971847\n1971852\n1971858\n1971888\n1971986\n1972120\n1972185\n1972187\n1972234\n1972250\n1972278\n1972342\n1972374\n1972377\n5145870\n5145965\n7541913\n7624494\n7960566\n1972434\n1972449\n1973300\n1973323\n1973327\n1973414\n7996464\n5146420\n5146440\n5146476\n5146496\n5146510\n5146525\n5146528\n5146559\n5146599\n5146601\n5146611\n5146651\n5146659\n5146677\n5146693\n5146720\n5146762\n5146774\n5146786\n5146815\n5146833\n5146837\n5146842\n5146852\n5146862\n5146883\n5146899\n5146908\n5146920\n5146927\n5146946\n5146961\n5147002\n5147030\n5147038\n5147039\n5147041\n5147043\n5147058\n5147062\n5147071\n5147099\n5147145\n5147150\n5147155\n5147165\n5147171\n5147193\n5147208\n5147212\n5147232\n5147245\n5147259\n5147287\n5147319\n5147354\n5147395\n5147415\n5147437\n5147441\n5147478\n5147492\n5147513\n5147516\n5147534\n5147560\n7919880\n7988195\n8067894\n8366158\n1975198\n5147608\n5147638\n1975341\n1975546\n1975553\n1975571\n1975733\n8329661\n1975793\n8160782\n1975897\n1975903\n1976163\n5147681\n6097233\n7973517\n8414310\n8955497\n5147794\n1976993\n1977003\n1977007\n1977068\n4523725\n5147827\n5147834\n1977300\n5769028\n5148247\n5148248\n1977962\n1977967\n1977971\n1978056\n1978065\n1978114\n1978375\n1978445\n4524636\n4524638\n10712554\n4524890\n4524902\n5148264\n1978770\n1978776\n1978821\n1978977\n5148286\n1979308\n1979430\n1979473\n1979781\n5148394\n5148424\n5148436\n5148462\n5148475\n5148486\n5148487\n1980521\n1980525\n8421569\n1981696\n1981998\n1982406\n1982458\n1982500\n1982525\n1982529\n1982541\n1982542\n1982592\n1982636\n1982671\n1982746\n1982770\n1982779\n1982790\n1982791\n1982838\n1982867\n1982885\n1982918\n1982924\n1983000\n1983034\n1983039\n1983052\n1983062\n1983101\n1983111\n1983170\n1983260\n1983288\n1983387\n1983393\n1983441\n1983442\n1983525\n1983528\n1983548\n1983558\n1983648\n1983705\n1983755\n1983756\n1983888\n1983896\n1983922\n1983967\n1983997\n1983999\n1984033\n1984117\n7752082\n7993353\n8015895\n8026858\n8262357\n8394261\n1984734\n1984942\n1984949\n1984954\n7905361\n1985522\n1985573\n1985734\n1985742\n1985760\n1986052\n1986056\n1986157\n1986166\n1986171\n1986191\n1986220\n1986367\n1986452\n1986522\n1986575\n1986604\n1986877\n5149315\n5768880\n1987527\n9137631\n1987578\n4525091\n4525093\n4525097\n4525103\n6118530\n1987650\n1987737\n1987744\n4524221\n1988007\n1988019\n1988064\n4524513\n1988390\n1988506\n1988593\n1988602\n1988642\n1988684\n7555991\n8388883\n1988762\n5149414\n5149438\n1988881\n1989428\n1990066\n1990150\n1990533\n1990551\n1990582\n5149474\n1991179\n1991371\n1991532\n5149836\n5149839\n5149843\n1991846\n1992066\n8180900\n5880512\n5880533\n5880545\n5880550\n5880552\n5880559\n5880563\n8237343\n8632989\n5769062\n5769068\n5769072\n7429212\n11654024\n7507369\n9414984\n9563355\n1989594\n4524740\n7990739\n4523556\n4523560\n4523564\n4524052\n4524054\n4523486\n4523461\n4525034\n4524376\n4524822\n4524712\n4523522\n4522974\n4524541\n4523519\n4524070\n4524072\n4524403\n4524793\n4524914\n4524922\n4524929\n4524951\n4524955\n4524961\n4524962\n4525078\n9220953\n9249651\n5144190\n5146412\n5768597\n5149499\n5149569\n7769543\n8851663\n4523880\n4523883\n4523885\n5149659\n5149665\n5149667\n5149704\n5149717\n5149746\n5149768\n5149780\n5149784\n5149787\n5149820\n7443518\n5146342\n5146379\n4302268\n4524393\n5141677\n1943397\n4535386\n8178854\n8277078\n8073674\n8133678\n8273661\n1945569\n1945877\n1946661\n7389824\n1947306\n1947335\n5142338\n5142352\n1949715\n1949784\n1949794\n1949850\n1949852\n1949877\n1949929\n1949938\n1949954\n1950006\n5142394\n5142599\n7683096\n8109173\n8270406\n7633472\n10715410\n4535396\n5142006\n5142032\n1869467\n1869478\n1869489\n1869512\n9359597\n5769709\n1735844\n1735855\n9400895\n9530977\n10963226\n10982815\n5109821\n1758878\n1759055\n1759069\n1759079\n1759083\n1759097\n4533952\n7972792\n1759153\n1759159\n4533211\n1759407\n1759597\n1759620\n1759661\n1759667\n1759668\n1759673\n1759686\n1760104\n7444489\n9060267\n1760593\n1794361\n4533957\n4534225\n8708745\n1760857\n1760867\n1760887\n1760891\n1760893\n4533255\n5108958\n1761041\n1761392\n1761438\n1761735\n1761865\n1762244\n1762271\n1762383\n1762608\n1762680\n5109498\n5109506\n5109523\n5109554\n5109599\n5109614\n5109646\n5109661\n5109670\n5109722\n1763610\n1763697\n8167743\n1764174\n1764673\n1764716\n1764986\n1764987\n1765010\n1765011\n1765017\n1765038\n1765044\n1765069\n1765073\n4534245\n4534252\n4534257\n4534275\n5109843\n5109931\n8352161\n1765604\n1765767\n1765954\n1766086\n1766128\n1766130\n1766131\n1766137\n1766210\n4534691\n1766274\n1766410\n1766418\n1766510\n7895336\n1766646\n1766718\n1766721\n1766741\n1766773\n1766784\n1766814\n1767511\n1767597\n1767608\n1767625\n1767655\n1767674\n5772169\n5772171\n5772172\n5772176\n5772178\n5772180\n5772186\n5772196\n5772199\n5772202\n5772205\n5772206\n5772210\n7388922\n7768584\n8045644\n1768117\n1768150\n5110200\n1768308\n1768341\n5110211\n5110213\n1768702\n1768727\n1768729\n1768735\n1768741\n1768749\n1768771\n1768815\n1768819\n8150836\n1769029\n1769057\n1769505\n1769519\n1769543\n1769566\n1769944\n1769958\n1770150\n1770307\n1770353\n1770416\n1770477\n1770530\n1770573\n4532696\n8393221\n1771385\n1771391\n7725644\n1771509\n1771531\n4532986\n1772013\n1772169\n1772179\n1772255\n5772129\n1772940\n1772956\n1773062\n1773163\n1773231\n1773309\n1773328\n1773377\n1773484\n1773572\n8222049\n1774272\n1774347\n1774859\n1774873\n1774878\n1774959\n1775112\n4534046\n4534052\n4534057\n1775172\n1775299\n1775301\n1775329\n5110593\n5772269\n5883881\n1775891\n1775913\n4534719\n1776067\n5110670\n1776207\n1776330\n1776371\n5772446\n1776619\n1776862\n4534463\n1777253\n5110818\n5110858\n5110871\n5110885\n1778074\n4534299\n1778127\n1778143\n1778517\n1778524\n1778596\n5111147\n5111481\n5111501\n5111513\n5111574\n5772222\n8253467\n1779258\n1779435\n1779641\n1779690\n1780378\n4533937\n1780926\n1780928\n1780954\n1781008\n1781016\n4533285\n4533325\n7664771\n1781694\n1782319\n1782560\n1782579\n1782615\n1782627\n1782672\n1782726\n1782727\n1782763\n1782777\n1782841\n1782872\n1782927\n1782948\n1783016\n1783037\n1783043\n1783045\n1783090\n5112155\n5112160\n5112254\n5112283\n5112291\n5112336\n5112345\n5112388\n5714973\n5715004\n5772349\n5772351\n7921916\n8043500\n1783777\n1783855\n1783971\n1784359\n1784812\n1784824\n1784826\n1784853\n4534290\n1785185\n1785286\n4532886\n4532888\n4532890\n1785329\n1785361\n1785883\n1785887\n1785888\n1785895\n1786007\n1786017\n8292872\n1786360\n1786515\n1786619\n1786651\n1786658\n1786664\n1786902\n1786936\n1787064\n1787112\n1787213\n1787267\n1787279\n1787381\n1787400\n1787417\n1787504\n1787590\n1787610\n1787631\n1787697\n1787751\n1787770\n1787825\n1787841\n1787859\n1787905\n4534086\n7917033\n1788425\n1788522\n1788734\n9216200\n4534011\n4534017\n1788917\n1789071\n1789073\n1789076\n1789086\n1789250\n1789255\n1789267\n9805848\n1789403\n4533882\n4533924\n1789481\n1789491\n1789553\n1789580\n4534162\n4534166\n4534170\n4534194\n1789694\n1789695\n1789730\n1789745\n1789753\n1789755\n1789783\n1789785\n1789840\n1789849\n1789957\n10068024\n10113008\n10290084\n10312073\n10904813\n1789982\n1789984\n1790002\n1790023\n1790059\n1790062\n1790072\n1790084\n1790153\n1790160\n4533115\n8047343\n9092175\n1790361\n1790364\n9174377\n1790625\n1790671\n1791384\n1791422\n1791784\n1791846\n1792061\n1792292\n1792300\n1792335\n1792377\n1792379\n1792383\n1792411\n1792414\n1792418\n1792426\n1792431\n1792449\n1792475\n1792645\n1792768\n5113370\n1792996\n1793212\n7918000\n1793877\n1793986\n1794102\n1794351\n1794532\n1794534\n1794590\n1794599\n1794609\n1795068\n4532908\n1795180\n1795215\n1795282\n7869346\n1795483\n7922810\n1795854\n1795862\n1795896\n1795900\n1795930\n1795946\n1795957\n1796007\n1796032\n1796117\n1796139\n1796145\n1796169\n1796188\n4534485\n4534486\n7438067\n8007222\n1796217\n7780930\n4532700\n1796423\n1796451\n1796463\n8105817\n1796678\n4533431\n4533433\n4533442\n4533444\n4533446\n1798372\n11992983\n1798916\n1798922\n1798931\n1798971\n1798974\n1798984\n1799132\n1799135\n1799701\n1799799\n1800004\n1800032\n6097260\n7712384\n7981386\n8304206\n8742426\n9069966\n4534389\n4534207\n10638451\n4532273\n4532283\n4532811\n4534663\n4534669\n4533273\n4534540\n8890502\n9135821\n4534038\n4533202\n4534398\n6544687\n4534538\n4534360\n4533123\n4533125\n4533128\n4533136\n4533661\n4533663\n4533671\n4534408\n4534458\n4534533\n5883985\n8021109\n11478679\n5110644\n7654770\n1774283\n1774285\n1779334\n5114198\n1763072\n5772063\n9038042\n4534675\n4534681\n4534683\n4534685\n4534686\n8108800\n1771634\n1771650\n1771678\n1771698\n8581601\n9549172\n1770772\n1770773\n1770821\n1770869\n1770880\n1771040\n1771143\n1771169\n1771204\n1771214\n1771245\n4533695\n4533714\n4533720\n7940536\n1765751\n5113847\n5113853\n5772309\n5108660\n5108761\n4534525\n1773901\n1773904\n4533344\n4533345\n4533347\n4533360\n4533362\n4532203\n4532206\n4532216\n4532236\n4532239\n4532253\n4532260\n4532264\n4532266\n8103163\n8363507\n1822346\n1822587\n1822610\n1822613\n1822787\n1822796\n1822819\n1822830\n1823604\n1823726\n1824113\n1824121\n1824131\n7875265\n1825064\n1825077\n1825083\n4534909\n4534914\n1825156\n1825176\n4534826\n5118892\n5118904\n7624468\n7937573\n8397564\n1825539\n1825971\n1825983\n1826022\n1826033\n5118996\n1827125\n5119143\n5119193\n5119245\n1827645\n1828162\n4534872\n6201790\n1893137\n1894268\n5882039\n7712938\n1894714\n4535614\n4535627\n4535632\n4535636\n8049830\n1894840\n4535827\n4535809\n4535817\n4535819\n9519321\n5128323\n5128357\n6231906\n1895875\n1896841\n1897852\n1898286\n1898290\n4299368\n1898521\n1898544\n5129378\n1901850\n1902533\n1902749\n8140883\n8189761\n4535689\n6221746\n1905383\n1906552\n8208583\n1909398\n1909838\n1911093\n1911112\n1911122\n1911168\n1911182\n1911278\n1911298\n1911461\n7728366\n8396242\n4535592\n7809779\n8078362\n1912325\n1912372\n1912395\n1912470\n4299535\n4299576\n4299597\n4299599\n5133990\n5772890\n7428726\n7799370\n8810143\n4535581\n5134098\n5134301\n8312017\n1913175\n1913178\n1913328\n1913351\n1913371\n11046092\n5134469\n5134543\n5134569\n5134583\n5134607\n5134621\n5134659\n5134667\n5134682\n5134686\n5134815\n5134837\n5134884\n5135191\n5772948\n7509928\n7700512\n7738295\n7791190\n7791558\n7798382\n7940299\n8047165\n8137978\n8167638\n8214814\n8233062\n8262258\n8295666\n8298764\n8314088\n1916347\n1916352\n1916410\n1916412\n1916458\n1916554\n7854318\n1918632\n1918669\n1918694\n1918733\n1918736\n1918776\n1918789\n1918795\n1918843\n1918854\n1918859\n1918868\n8035998\n8176911\n7622059\n7988274\n8404037\n4535618\n4535620\n4535510\n5130587\n5130682\n7762841\n5131096\n5131142\n5132183\n8001799\n7642610\n5135513\n5135546\n1896957\n5131910\n8138711\n1902143\n1902169\n1902182\n1899349\n1899433\n1899737\n1899818\n6229058\n7768674\n7867379\n7934873\n8168644\n8393082\n1951557\n4527355\n5142870\n1951649\n1952014\n1952062\n1952130\n1952229\n5143048\n1952449\n1952532\n5143129\n5143147\n1952806\n1952812\n1952816\n1951713\n1951725\n1832819\n1832853\n1832862\n1832915\n1832927\n1832936\n1833096\n1833159\n5880257\n5880258\n6097224\n6097225\n6097228\n1853064\n1853079\n4529248\n5976910\n1735193\n1941864\n5120465\n5120668\n5120675\n5120767\n5121040\n5121046\n5121177\n5121244\n5121517\n5121613\n5121737\n8273859\n1842097\n1842196\n5120396\n1842485\n1842542\n4301036\n1842690\n1842695\n4529738\n8292351\n5101394\n1730978\n1731263\n4525641\n1731598\n1872368\n1878782\n1878798\n1878804\n1878845\n1878862\n1878879\n1878895\n1878904\n1878907\n1878939\n1878951\n4531506\n4531517\n1879001\n1879227\n1879252\n1879408\n1879427\n1879452\n1879471\n5126212\n5126217\n1879534\n1879630\n1879655\n1879691\n1879703\n1879731\n1879735\n1879765\n10915497\n1879970\n1880040\n1880062\n1880064\n1880094\n1880104\n1880138\n1880139\n1880140\n1880143\n1880818\n1880907\n1880931\n4531643\n1881122\n1881126\n1881151\n9819403\n4531687\n1881208\n1881362\n1881393\n1881404\n1881418\n1881603\n4531713\n1881834\n4531975\n1882158\n1882165\n1882210\n1882437\n1882459\n1882557\n1882729\n5126834\n8325294\n1882905\n1882965\n1883067\n1883161\n1883168\n1883386\n1883634\n4531690\n1884212\n4531708\n1884465\n4532122\n1884970\n1885931\n1885937\n1886084\n1886251\n1886320\n8223165\n1886579\n1886587\n1886648\n7562564\n1886951\n1887290\n4531670\n1887701\n4531968\n10922411\n1888463\n1888484\n1888491\n1888579\n1888619\n1888623\n1888733\n1888736\n1888743\n1888759\n1888826\n1889287\n9228024\n1889905\n1889942\n1890187\n1890522\n1890534\n1890540\n1890576\n1890656\n1890670\n1890679\n1890699\n1890701\n1890703\n1890724\n1890772\n1890776\n1890823\n1890898\n1890957\n1890975\n1891013\n1891059\n1891167\n1891171\n1891177\n1891186\n1891190\n1891217\n1891326\n1891366\n1891386\n1891426\n1891453\n1891473\n1891493\n1891494\n4532022\n4532024\n8411753\n1892242\n1892245\n1892476\n9674732\n1884240\n1884254\n1884255\n1884273\n1884274\n1884280\n1884312\n1884332\n1884365\n1884370\n1884403\n5884851\n11761541\n5126675\n5126680\n7446048\n8532380\n8537359\n8823068\n8856895\n8858121\n9100030\n9101339\n1889833\n1887108\n1887173\n1887177\n1887178\n4532050\n4532057\n4532088\n4532095\n4532097\n6121184\n8218441\n4532150\n4532155\n4532160\n5771880\n1846107\n1846111\n1846112\n1846133\n1846141\n1846149\n1846159\n1846210\n1846219\n1846236\n4528813\n4528818\n1830879\n1830937\n1830962\n1831002\n1831009\n1831128\n1831136\n1831168\n4525443\n4525448\n5122293\n1853587\n4526048\n1854202\n1854259\n1854287\n1854347\n5122439\n1854615\n1854792\n1854824\n1854849\n1854237\n4526050\n7717983\n1858637\n1858674\n1858698\n1858762\n1858775\n1858778\n1858873\n1859046\n1859100\n1859177\n4536292\n1859285\n1859305\n1859471\n1859480\n1859488\n1859534\n1859952\n1860063\n1860076\n4536472\n4536483\n7642240\n8200050\n12046692\n1973467\n4525132\n5123221\n6097269\n5123042\n5124512\n1866356\n1866568\n5124911\n1867820\n1867928\n7764232\n7734292\n1841460\n1841476\n1841616\n1841675\n1841706\n1841813\n1841821\n1841946\n1841989\n1861510\n1861644\n1861673\n1861797\n1861842\n1861862\n1862293\n1862401\n1862517\n1862572\n1862578\n1862580\n1862701\n1862719\n1862765\n1862774\n1862837\n1862894\n5123922\n5124007\n5124029\n1864161\n1864358\n1864377\n5124143\n5124151\n5124233\n1864652\n1993419\n1939432\n4525189\n1860108\n5119506\n5119513\n1830361\n1830372\n1830374\n1830380\n1830407\n1830408\n1830410\n1830457\n4525369\n1830498\n4525420\n4525425\n7976145\n1830534\n1830537\n1830584\n1830632\n1830802\n4525364\n1754183\n1754332\n5105929\n5106115\n5106160\n5106249\n5106539\n5106894\n5107128\n5107219\n5107640\n5107644\n5107829\n7410701\n7586742\n7674502\n7761138\n7778368\n7870336\n7903078\n7909858\n7955974\n8048904\n8102790\n8111395\n8158342\n8201251\n8348761\n8426357\n8964772\n4522753\n1939647\n1939658\n1939677\n1939680\n1939688\n1939717\n7646066\n1829322\n1829363\n10055273\n1855452\n1855799\n1856005\n1856105\n1856289\n5122798\n1856384\n1856595\n1856620\n1856658\n1856663\n1856668\n1856686\n1856691\n1856701\n1856730\n1856768\n1856772\n1856867\n1857068\n1857143\n1857577\n1857581\n1857626\n9790007\n1857785\n1857828\n1857829\n1857856\n1857863\n1857878\n1857924\n1857978\n1858074\n1858100\n1858113\n1858163\n1858321\n1938050\n1938131\n8225376\n1936969\n1938214\n4690079\n1938520\n1938810\n1938955\n5141262\n5141288\n5141291\n5141297\n5802625\n1856503\n1858531\n1838691\n1838811\n1838838\n1838905\n1838911\n4528692\n4528694\n1833626\n1833627\n4528658\n1834589\n1834775\n1835031\n5770913\n1835156\n1835393\n1835396\n1835407\n1835422\n1836899\n1837172\n4528702\n1838969\n1839770\n1839851\n1839878\n1839893\n1841158\n1841159\n5770922\n5770942\n4529032\n5119893\n5114409\n4534798\n4534757\n1801051\n1801896\n4534773\n4534776\n4534778\n4534779\n4534782\n4534787\n4534788\n4534792\n9894093\n1802280\n1803012\n1803060\n1803073\n4534762\n4534766\n4534767\n4534769\n5114311\n5114316\n5114327\n8244266\n", + "regions/europe_v3.classes": "1934693\n1860621\n1860628\n4522795\n1860659\n1860664\n1860668\n1860671\n1860688\n1860709\n1860711\n4522933\n5123582\n1732063\n1732072\n1732416\n1732419\n1732452\n1732457\n1732521\n1732565\n1732662\n1732680\n1732685\n1732697\n1733258\n1733484\n4525266\n4525268\n4525270\n4525273\n1733620\n1733755\n5101678\n5101717\n5101745\n5769191\n1734453\n1734704\n1734794\n1734826\n5102287\n11529292\n1831861\n1831863\n1831890\n1845270\n1845368\n1845548\n1845565\n1845607\n4529566\n4528100\n1846374\n1846604\n1846657\n1846715\n1846729\n1846916\n1847061\n1847097\n1847111\n1847407\n4528547\n1847572\n9262981\n1847956\n9546514\n1848150\n1848202\n10450501\n1848219\n9868978\n1848273\n1848356\n1848378\n1848426\n4528539\n1848596\n1848610\n1848636\n1848657\n1848669\n1848690\n1848713\n1848714\n1848717\n1848730\n1848741\n1848753\n1848864\n1848868\n1849104\n1849267\n1849273\n1849284\n1849294\n1849477\n11052757\n11080751\n1849531\n1849539\n1849552\n1849630\n1849856\n1849897\n1849924\n1850008\n1850042\n1850045\n1850076\n1850077\n1850106\n1850238\n1850246\n11576787\n1850279\n1850302\n1850335\n1850386\n1850394\n1850450\n1850497\n1850506\n4527903\n1850522\n1850533\n1850538\n1850570\n1850640\n4528529\n1850781\n1850971\n1851000\n1851010\n1851011\n5122037\n5122113\n1851203\n1851220\n1851337\n1851347\n1851555\n5122206\n4527972\n1852150\n1852159\n1852165\n1852177\n1852311\n1852430\n11287091\n4527957\n1848920\n1829533\n1829588\n1829776\n1829785\n1829799\n1829823\n1829974\n4525354\n1828637\n6097236\n8871600\n9182336\n5769272\n7623903\n8912441\n5879654\n7448174\n4525610\n1751852\n1861395\n1845866\n1845952\n1845962\n1845965\n1845982\n1839094\n1841261\n1830838\n1830843\n1830122\n1830125\n1830131\n1830144\n1830147\n1830152\n1830186\n1830191\n1830207\n1830221\n1830241\n1830243\n1830262\n1830266\n1830271\n1830284\n4525476\n4525487\n1831458\n1831643\n1841296\n4528593\n8271010\n1853723\n5880147\n9734171\n11418741\n11513018\n11571523\n12151997\n12160125\n12022449\n7908344\n1761111\n1764531\n1769103\n1769897\n7701550\n8837162\n1772793\n4532500\n1777289\n8141741\n1777631\n1777695\n1779399\n1780149\n1780150\n8193562\n1783882\n1786980\n1786985\n1788553\n1790692\n1790816\n5113078\n5113084\n5113234\n9310626\n1792210\n1797178\n1797258\n1797276\n1797333\n1797344\n1797349\n1797367\n1797374\n1797429\n1797454\n1797479\n1797527\n1797542\n4532461\n4532471\n4532473\n8016905\n8355390\n8756768\n1798346\n1798408\n4532493\n1798449\n1798481\n1798504\n1798594\n1798802\n1798807\n4532351\n4532352\n4532357\n1799708\n1803163\n1803824\n1804071\n1804906\n1805110\n1805155\n4532608\n7874258\n1807969\n1808195\n1808348\n1808440\n1808450\n1808752\n5115701\n5115771\n5115777\n1809210\n1810099\n5116416\n1813114\n5117189\n5117200\n7656811\n1814552\n1814630\n1814653\n5117399\n5117400\n1816881\n1817797\n8326103\n1819050\n1819145\n4532293\n4532297\n1819268\n8407461\n1819699\n9331464\n1819873\n1819928\n6122092\n7657803\n8361973\n1820372\n1820406\n12253343\n5884571\n7596232\n5771982\n6097214\n4532544\n4532614\n4532549\n4532516\n4532532\n4532565\n12089608\n8148822\n11962292\n12135372\n11033463\n11812181\n5115854\n5115872\n5115874\n5116475\n8038357\n8165185\n6097254\n5116698\n1805535\n9198767\n1788635\n4532395\n4532405\n4532408\n4532412\n1780869\n8000103\n4532534\n1768626\n4532508\n4532510\n1760244\n1760246\n5113030\n5113036\n1821856\n1821911\n1819170\n1812394\n8237987\n4532366\n4532453\n1820039\n1772822\n1771772\n1771779\n1777517\n1860979\n1860983\n1860987\n1860994\n1861011\n1861031\n4522911\n4522916\n4522919\n4522922\n12318291\n4522886\n4522890\n4522891\n4522896\n1860765\n1860768\n1860852\n1860857\n7767114\n7851302\n7961640\n1992378\n1992504\n1852956\n1852978\n1835432\n1835433\n1835456\n1835457\n9724183\n1837343\n1837420\n1837429\n1837464\n1837515\n4529064\n7958169\n8015612\n1839293\n1839296\n1840297\n1840301\n1840345\n1840346\n1840360\n1840371\n1840380\n1840408\n1840478\n1840483\n1840485\n1840555\n1840566\n1840570\n1840581\n1840596\n1840621\n4529186\n5119808\n1831752\n1852751\n1852787\n1852831\n9473121\n4529630\n5125075\n5125104\n8416348\n1751236\n1751290\n1751298\n1751299\n1751368\n1751457\n4535884\n4535904\n1860408\n4525177\n5123339\n5123394\n5769164\n5123461\n5123474\n1751207\n1751216\n1869595\n1869656\n1869803\n1869852\n1869858\n1869976\n1870202\n1870249\n1870250\n1870450\n1870650\n1870988\n5125306\n1871160\n1871212\n1871217\n1871252\n1871264\n1871407\n4531402\n4531409\n1871451\n4531365\n4531376\n1871683\n1871698\n1871783\n1871826\n4531427\n7673242\n10787705\n1872848\n1872873\n1872901\n1872904\n1873048\n1873051\n1873079\n1873215\n1873411\n4530947\n4530951\n1873776\n1873780\n1873783\n4531237\n4531264\n1873890\n5125689\n1874168\n1874192\n1874204\n1874211\n1874229\n1874269\n1874280\n1874295\n4531145\n4531147\n4531158\n1874375\n1874743\n9782192\n1875008\n1875120\n8219149\n1875327\n1875376\n1875409\n1875429\n4531242\n1875631\n1875633\n1875680\n1875682\n1875687\n4531284\n1875827\n1875830\n1875865\n1875869\n1875918\n1875940\n1875952\n1875958\n1876063\n1876329\n1876357\n1876409\n1876512\n1876542\n1876623\n1876854\n1877038\n1877310\n1877341\n1877345\n1877368\n4531246\n9111961\n5126052\n1877941\n1877986\n1877988\n1878067\n4531417\n4531425\n4531429\n1878197\n1878350\n1878370\n1878470\n1878471\n1878490\n1878500\n1878586\n1890065\n5884888\n11728049\n1877035\n1872315\n1748805\n1940158\n4525859\n4525884\n5141493\n5141501\n1940504\n1940510\n1940575\n1940639\n1940644\n1940717\n1940744\n1940768\n4525777\n4525803\n1940807\n1940838\n4525846\n1941330\n1941348\n1941377\n1941437\n10309794\n12211069\n1939879\n1736377\n1736412\n1736425\n1736447\n1736484\n1736499\n1736511\n1736528\n1736560\n1736565\n1736601\n1736623\n5102628\n5102642\n1736727\n1736800\n1736898\n1736904\n1736905\n1736906\n1736945\n4530406\n4529931\n1737131\n1737342\n1737368\n1737413\n1737437\n1737491\n1737497\n1737509\n4530608\n7466487\n1737524\n1737526\n1737533\n1737542\n1737552\n1737650\n1737753\n1737775\n1737776\n1737783\n1737847\n1737893\n1737924\n4530002\n8186212\n1738050\n1738163\n1738222\n1738245\n1738317\n1738322\n1738337\n1738373\n1738422\n1738429\n1738514\n8420632\n8869900\n5102931\n5102951\n1738687\n1738700\n1738722\n1738777\n1738794\n1738839\n1738883\n1739042\n1739043\n8086347\n1739128\n1739151\n1739272\n1739284\n1739290\n1739337\n1739377\n1739381\n5102982\n1739449\n1739451\n1739461\n1739471\n1739605\n1739748\n1739797\n1739816\n1739819\n1739833\n1739919\n1739922\n1739931\n1739980\n1739999\n1740005\n1740053\n1740069\n1740116\n1740120\n1740155\n1740174\n1740183\n1740185\n1740305\n1740374\n1740392\n7797515\n8215326\n1740482\n1740518\n1740533\n1740567\n1740570\n1740623\n8094357\n1740762\n1741056\n1741147\n1741253\n1741258\n1741340\n1741341\n1741368\n4530151\n8345820\n5103066\n5771357\n1741545\n1741551\n10838422\n1741590\n1741593\n1741615\n1741633\n1741634\n1741667\n1741747\n1741752\n1741756\n1741765\n4530424\n1741820\n10807169\n11093909\n1742106\n1742142\n1742185\n1742263\n1742346\n1742402\n5103451\n5103502\n5103613\n5103736\n5103948\n5771350\n7975250\n1743196\n8313553\n5103998\n7661023\n11846897\n1743453\n1743475\n7877231\n1743532\n1743588\n1743604\n1743613\n5104056\n6097235\n1743641\n1743643\n1743710\n1743714\n4530214\n1743730\n1743768\n1743775\n1743782\n4529900\n4529908\n4529915\n1743828\n1743856\n1743862\n1743867\n1743898\n1744071\n1744136\n1744180\n1744224\n4530632\n1744416\n1744498\n1744526\n1744542\n1744588\n1744593\n1744693\n1744699\n1744709\n1744714\n1744728\n1744731\n1744739\n1744742\n1744748\n1744763\n1744777\n1744782\n1744789\n1744808\n1744810\n1744860\n1744896\n1744901\n7964262\n1745013\n1745079\n10844862\n1745131\n1745558\n1745561\n1745579\n1745600\n1745630\n1745634\n1745636\n1745643\n1745659\n1745676\n1745678\n1745705\n1745724\n1745725\n1745737\n1745756\n1745762\n1745771\n1745781\n1745787\n1745788\n1745816\n1745827\n1745830\n8162538\n8369868\n1745925\n1746027\n8424972\n1746174\n1746413\n1746440\n1746613\n1746644\n1746666\n1746689\n1746775\n1746832\n1746856\n1746876\n1746910\n1747050\n1747141\n5104442\n1747738\n4530138\n5104558\n1748203\n1748321\n5104597\n6097234\n7588222\n9242559\n1748456\n1748720\n5104641\n8691947\n10580256\n5103121\n5103176\n5103181\n5103185\n5103227\n5771227\n5771229\n5771230\n5771232\n5771236\n5771239\n5771241\n5771243\n5771249\n5771255\n5771256\n5771258\n5771259\n1831780\n4525500\n4525503\n4525505\n4525510\n4525530\n4525540\n4525547\n4525557\n4525562\n1920851\n1920864\n1920892\n10556522\n1921466\n1921521\n1921590\n7387466\n1922197\n10442031\n10854079\n1922311\n1922343\n8016522\n1922572\n1922584\n4535092\n1922937\n1923019\n1923037\n12165672\n5138298\n5138492\n5138543\n5138561\n5714680\n1923796\n1924077\n1924082\n1924097\n5138681\n1924713\n11470119\n1924867\n1925221\n1925233\n7354189\n4535172\n1925381\n1925410\n1925454\n1925918\n1925962\n1926054\n9816676\n1926324\n1926385\n1926550\n1926722\n1926861\n5882965\n1928248\n5139040\n5139156\n1928945\n1928960\n1929270\n1929402\n1929659\n1929697\n5792092\n8356768\n1930110\n1930904\n4535106\n1931179\n1931509\n1931561\n1931779\n1931788\n1932393\n1932411\n1932473\n1932517\n1932551\n1932752\n1932960\n1932976\n5140214\n5140244\n5140436\n5140443\n5772702\n5772749\n7634721\n7664111\n9954885\n1933583\n1933647\n1933649\n1933793\n1926166\n1926260\n11874998\n1933095\n1933126\n1933138\n1933163\n1933204\n1924494\n1752383\n4522322\n5105339\n1919221\n1919223\n1919317\n1919320\n1919330\n1919333\n4535280\n4535285\n7981372\n1919698\n1919706\n1919712\n1919716\n1919966\n1920237\n1920247\n1920258\n1920259\n1920395\n1920491\n1920494\n1920496\n1920498\n1920502\n1920506\n1920509\n1920512\n4535307\n5805036\n5137902\n5137903\n5137908\n5804895\n1920707\n1920709\n1920712\n4535271\n5137578\n5137582\n5137595\n5137612\n5137636\n5137677\n5137682\n5137695\n5137706\n5137708\n8203812\n1920218\n1748890\n1748922\n1748942\n1749050\n1749070\n1749164\n1749449\n1749661\n1749713\n1749744\n1749846\n1749869\n1749908\n1749921\n1749929\n1749936\n1749948\n1749954\n1749959\n1749975\n1750051\n1750076\n1750097\n1750131\n1750143\n1750159\n1750166\n1750288\n1750326\n5104772\n5104781\n5104797\n5104829\n5104882\n5104891\n5104903\n5104927\n5104940\n5105054\n5105088\n5105106\n5105158\n5976947\n1751051\n5104759\n1749596\n1749608\n1749635\n8741260\n1735532\n4527339\n4527342\n1731826\n1731837\n1731860\n1855235\n1855241\n1954490\n1954563\n5143380\n5143453\n5143477\n1955479\n1955484\n5143651\n1955694\n1955856\n4524588\n5143675\n5143697\n1956440\n1956524\n1956599\n1956639\n1956710\n4525068\n1957266\n1957286\n1957300\n1957556\n1957565\n1957570\n1957572\n1957579\n1957583\n1957611\n1957632\n1957673\n1957706\n1957718\n1957746\n1957791\n1957816\n1957822\n4524320\n8172949\n1957845\n1957852\n1957854\n4524421\n4524424\n4524426\n5143944\n5143947\n1958024\n11554842\n1958065\n1958323\n1958515\n1959383\n1959395\n1959423\n1959436\n1959461\n1959467\n1959473\n1959682\n1959735\n1959799\n1959876\n1959914\n1959919\n1960484\n1960617\n1961013\n1961037\n1961040\n1961068\n1961190\n7741315\n1962204\n1962265\n1962268\n1962434\n1962516\n9812211\n10004969\n1962584\n4524568\n1962636\n1962860\n1962961\n1962972\n1962990\n1963011\n4302252\n1963168\n1963306\n1963446\n1963463\n1963587\n1963709\n1963710\n1963755\n1964189\n1964191\n1964195\n1964401\n1964437\n1964471\n1964637\n1964653\n1964657\n8361848\n1964836\n5144426\n1965166\n1965197\n1965208\n1965345\n1965640\n1965763\n1965777\n1965795\n1965810\n1965825\n1965841\n1965913\n1965996\n1966017\n1966351\n1966358\n1966854\n1966886\n5144534\n1967003\n1967006\n1967011\n1967025\n5144543\n1967245\n1967265\n1967273\n1967324\n1967452\n1967597\n1967803\n1967815\n1967873\n7681733\n1968678\n1968686\n1968837\n1968867\n11598540\n1968990\n1969291\n1969339\n1969463\n1969954\n1969958\n4523707\n1970213\n1970227\n1970243\n1970259\n1970284\n5144677\n5144721\n5144782\n5144787\n5144805\n5144880\n5144900\n5145009\n5145136\n5145186\n5145255\n5145260\n5145269\n5145409\n5145502\n5145522\n5145729\n7753668\n8014296\n9627567\n1971847\n1971852\n1971858\n1971888\n1971986\n1972120\n1972185\n1972187\n1972234\n1972250\n1972278\n1972342\n1972374\n1972377\n5145870\n5145965\n7541913\n7624494\n7960566\n1972434\n1972449\n1973300\n1973323\n1973327\n1973414\n7996464\n5146420\n5146440\n5146476\n5146496\n5146510\n5146525\n5146528\n5146559\n5146599\n5146601\n5146611\n5146651\n5146659\n5146677\n5146693\n5146720\n5146762\n5146774\n5146786\n5146815\n5146833\n5146837\n5146842\n5146852\n5146862\n5146883\n5146894\n5146899\n5146908\n5146920\n5146927\n5146946\n5146961\n5147002\n5147030\n5147038\n5147039\n5147041\n5147043\n5147058\n5147062\n5147071\n5147099\n5147145\n5147150\n5147155\n5147165\n5147171\n5147193\n5147208\n5147212\n5147232\n5147245\n5147259\n5147287\n5147319\n5147354\n5147395\n5147415\n5147437\n5147441\n5147478\n5147492\n5147513\n5147516\n5147534\n5147560\n7919880\n7988195\n8067894\n8366158\n1975198\n5147608\n5147638\n1975341\n1975546\n1975553\n1975571\n1975733\n8329661\n1975793\n8160782\n1975897\n1975903\n1976163\n5147681\n6097233\n7973517\n8414310\n8955497\n5147794\n1976993\n1977003\n1977007\n1977068\n4523725\n5147827\n5147834\n1977300\n5769028\n5148247\n5148248\n1977962\n1977967\n1977971\n1978056\n1978065\n1978114\n1978375\n1978445\n4524636\n4524638\n10712554\n4524890\n4524902\n5148264\n1978770\n1978776\n1978821\n1978977\n5148286\n1979308\n1979430\n1979473\n1979781\n5148394\n5148424\n5148436\n5148462\n5148475\n5148486\n5148487\n1980521\n1980525\n8421569\n1981696\n1981998\n1982406\n1982458\n1982500\n1982525\n1982529\n1982533\n1982541\n1982542\n1982592\n1982636\n1982671\n1982746\n1982770\n1982779\n1982790\n1982791\n1982838\n1982867\n1982885\n1982918\n1982924\n1983000\n1983034\n1983039\n1983052\n1983062\n1983101\n1983111\n1983170\n1983260\n1983288\n1983387\n1983393\n1983441\n1983442\n1983525\n1983528\n1983548\n1983558\n1983648\n1983705\n1983755\n1983756\n1983888\n1983896\n1983922\n1983967\n1983997\n1983999\n1984033\n1984117\n7752082\n7993353\n8015895\n8026858\n8262357\n8394261\n1984734\n1984942\n1984949\n1984954\n7905361\n1985522\n1985573\n1985734\n1985742\n1985760\n1986052\n1986056\n1986157\n1986166\n1986171\n1986191\n1986220\n1986367\n1986452\n1986522\n1986575\n1986604\n1986623\n1986877\n5149315\n5768880\n1987527\n9137631\n1987578\n4525091\n4525093\n4525097\n4525103\n6118530\n1987650\n1987737\n1987744\n4524221\n4524223\n1988007\n1988019\n1988064\n4524513\n1988390\n1988506\n1988593\n1988602\n1988642\n1988684\n7555991\n8388883\n1988762\n5149414\n5149438\n1988881\n1989428\n1990066\n1990150\n1990533\n1990551\n1990582\n5149474\n1991179\n1991371\n1991532\n5149836\n5149839\n5149843\n1991846\n1992066\n8180900\n6133619\n5880512\n5880533\n5880545\n5880550\n5880552\n5880559\n5880563\n7657419\n8237343\n8632989\n5769062\n5769068\n5769072\n7429212\n11654024\n7507369\n9414984\n9563355\n1989594\n4524740\n7990739\n4523556\n4523560\n4523564\n4524052\n4524054\n4523486\n4523461\n4524998\n4525034\n4524376\n4524822\n4524712\n4523522\n4522974\n4524541\n4523519\n4524070\n4524072\n4524403\n4524793\n4524914\n4524922\n4524929\n4524951\n4524955\n4524961\n4524962\n4525078\n9220953\n9249651\n5144190\n5146412\n5768597\n5149499\n5149569\n7769543\n8851663\n4523880\n4523883\n4523885\n5149659\n5149664\n5149665\n5149667\n5149704\n5149717\n5149746\n5149768\n5149780\n5149784\n5149787\n5149820\n7443518\n5146342\n5146379\n4302268\n4524393\n5141677\n1943397\n4535386\n8178854\n8277078\n8073674\n8133678\n8273661\n1945569\n1945589\n1945877\n1946661\n7389824\n1947306\n1947335\n5142338\n5142352\n1949715\n1949784\n1949794\n1949850\n1949852\n1949877\n1949929\n1949938\n1949954\n1950006\n5142394\n5142599\n7683096\n8109173\n5977247\n8270406\n7633472\n10715410\n4535396\n5142006\n5142032\n5142042\n1869467\n1869478\n1869489\n1869512\n9359597\n5769709\n1735844\n1735855\n9400895\n9530977\n10963226\n10982815\n5109821\n1758878\n1759055\n1759069\n1759079\n1759083\n1759097\n4533952\n7972792\n1759153\n1759159\n4533211\n1759407\n1759597\n1759620\n1759661\n1759667\n1759668\n1759673\n1759686\n1760104\n7444489\n9060267\n1760593\n1794361\n4533957\n4534225\n8708745\n1760857\n1760867\n1760887\n1760891\n1760893\n4533255\n5108958\n1761041\n1761392\n1761438\n1761735\n1761865\n1762244\n1762271\n1762383\n1762608\n1762680\n5109498\n5109506\n5109523\n5109554\n5109599\n5109614\n5109646\n5109661\n5109670\n5109722\n1763610\n1763697\n8167743\n1764174\n1764673\n1764716\n1764986\n1764987\n1765010\n1765011\n1765017\n1765038\n1765044\n1765069\n1765073\n4534245\n4534252\n4534257\n4534275\n5109843\n5109931\n8352161\n1765604\n1765767\n1765954\n1766086\n1766128\n1766130\n1766131\n1766137\n1766210\n4534691\n1766274\n1766410\n1766418\n1766510\n7895336\n1766646\n1766718\n1766721\n1766741\n1766773\n1766784\n1766814\n1767511\n1767597\n1767608\n1767625\n1767655\n1767674\n5772169\n5772171\n5772172\n5772176\n5772178\n5772180\n5772186\n5772196\n5772199\n5772202\n5772205\n5772206\n5772210\n7388922\n7768584\n8045644\n1768117\n1768150\n5110200\n1768308\n1768341\n5110211\n5110213\n1768702\n1768727\n1768729\n1768735\n1768741\n1768749\n1768771\n1768815\n1768819\n8150836\n1769029\n1769057\n1769505\n1769519\n1769543\n1769566\n1769944\n1769958\n1770150\n1770307\n1770353\n1770416\n1770477\n1770530\n1770573\n4532696\n8393221\n1771385\n1771391\n7725644\n1771509\n1771531\n4532986\n1771997\n1772013\n1772169\n1772179\n1772255\n5772129\n1772940\n1772956\n1772977\n1773062\n1773163\n1773231\n1773309\n1773328\n1773377\n1773484\n1773572\n8222049\n1774272\n1774347\n1774859\n1774873\n1774878\n1774959\n1775112\n4534046\n4534052\n4534057\n1775172\n1775299\n1775301\n1775329\n5110593\n5772269\n5883881\n1775891\n1775913\n4534719\n1776067\n5110670\n1776207\n1776330\n1776371\n5772446\n1776619\n1776862\n4534463\n1777253\n5110818\n5110858\n5110871\n5110885\n1778074\n4534299\n1778127\n1778143\n1778517\n1778524\n1778596\n5111147\n5111481\n5111501\n5111513\n5111574\n5772222\n8253467\n1779258\n1779435\n1779633\n1779641\n1779690\n1780378\n4533937\n1780926\n1780928\n1780954\n1781008\n1781016\n4533285\n4533325\n7664771\n1781694\n1782319\n1782560\n1782579\n1782615\n1782627\n1782672\n1782726\n1782727\n1782763\n1782777\n1782841\n1782872\n1782927\n1782948\n1783016\n1783037\n1783043\n1783045\n1783090\n5112155\n5112160\n5112254\n5112283\n5112291\n5112336\n5112345\n5112388\n5714973\n5715004\n5772349\n5772351\n7921916\n8043500\n1783777\n1783855\n1783971\n1784349\n1784359\n1784812\n1784824\n1784826\n1784853\n4534290\n1785185\n1785286\n4532886\n4532888\n4532890\n1785329\n1785361\n1785883\n1785887\n1785888\n1785895\n1786007\n1786017\n8292872\n1786360\n1786515\n1786619\n1786651\n1786658\n1786664\n1786902\n1786936\n1787064\n1787112\n1787213\n1787267\n1787279\n1787381\n1787400\n1787417\n1787438\n1787504\n1787590\n1787610\n1787631\n1787697\n1787751\n1787770\n1787825\n1787841\n1787859\n1787905\n4534086\n7917033\n1788425\n1788522\n1788734\n9216200\n4534011\n4534017\n1788917\n1789071\n1789073\n1789076\n1789086\n1789250\n1789255\n1789267\n9805848\n1789403\n4533882\n4533924\n1789481\n1789491\n1789553\n1789580\n4534162\n4534166\n4534170\n4534194\n1789694\n1789695\n1789730\n1789745\n1789753\n1789755\n1789783\n1789785\n1789840\n1789849\n1789957\n10068024\n10113008\n10290084\n10312073\n10904813\n1789982\n1789984\n1790002\n1790023\n1790059\n1790062\n1790072\n1790084\n1790153\n1790160\n4533115\n8047343\n9092175\n1790361\n1790364\n9174377\n1790625\n1790671\n1791384\n1791422\n1791784\n1791846\n1792061\n1792292\n1792300\n1792335\n1792377\n1792379\n1792383\n1792411\n1792414\n1792418\n1792426\n1792431\n1792449\n1792475\n1792645\n1792768\n5113370\n1792996\n1793212\n7918000\n1793877\n1793986\n1794102\n1794351\n1794532\n1794534\n1794590\n1794599\n1794609\n1795068\n4532908\n1795180\n1795215\n1795282\n7869346\n1795483\n7922810\n1795854\n1795862\n1795896\n1795900\n1795930\n1795946\n1795957\n1796007\n1796032\n1796117\n1796139\n1796145\n1796169\n1796188\n4534485\n4534486\n7438067\n8007222\n1796217\n7780930\n4532700\n9803522\n1796423\n1796451\n1796463\n8105817\n1796678\n4533431\n4533433\n4533442\n4533444\n4533446\n1798372\n11992983\n1798916\n1798922\n1798931\n1798971\n1798974\n1798984\n1799132\n1799135\n1799701\n1799799\n1800004\n1800032\n6097260\n7712384\n7981386\n8304206\n8742426\n9069966\n4534389\n4534207\n10638451\n4532273\n4532283\n4532811\n4534663\n4534669\n4533273\n4534540\n8890502\n9135821\n4534038\n4533202\n4534398\n6544687\n4534538\n4534360\n4533123\n4533125\n4533128\n4533136\n4533661\n4533663\n4533671\n4534408\n4534458\n4534533\n5883985\n8021109\n11478679\n5110644\n7654770\n1774283\n1774285\n1779334\n5114198\n1763072\n5772063\n9038042\n4534675\n4534681\n4534683\n4534685\n4534686\n8108800\n1771634\n1771650\n1771678\n1771698\n8581601\n9549172\n1770772\n1770773\n1770821\n1770869\n1770880\n1771040\n1771143\n1771169\n1771204\n1771214\n1771245\n4533695\n4533714\n4533720\n7940536\n1765751\n5113847\n5113853\n5772309\n5108660\n5108761\n4534525\n1773901\n1773904\n4533344\n4533345\n4533347\n4533360\n4533362\n4532203\n4532206\n4532216\n4532236\n4532239\n4532253\n4532260\n4532264\n4532266\n8103163\n8363507\n1822346\n1822587\n1822610\n1822613\n1822787\n1822796\n1822819\n1822830\n1823604\n1823726\n1824113\n1824121\n1824131\n7875265\n1825064\n1825077\n1825083\n4534909\n4534914\n1825156\n1825176\n4534826\n5118892\n5118904\n7624468\n7937573\n8397564\n1825539\n1825971\n1825983\n1826022\n1826033\n5118996\n1827125\n5119143\n5119193\n5119245\n1827645\n1828162\n4534872\n6201790\n1893137\n1894164\n1894268\n5882039\n7712938\n1894714\n4535614\n4535627\n4535630\n4535632\n4535636\n8049830\n1894840\n4535827\n4535809\n4535817\n4535819\n9519321\n5128323\n5128353\n5128357\n6231906\n9804158\n1895875\n1896841\n1897852\n1898286\n1898290\n4299368\n4299370\n1898521\n1898544\n5129378\n1901850\n1902533\n1902749\n8140883\n8189761\n4535689\n6221746\n1905383\n1905396\n1906552\n8208583\n1909398\n1909838\n1911093\n1911112\n1911122\n1911168\n1911182\n1911278\n1911298\n1911461\n7728366\n8396242\n1911633\n4535592\n4535596\n7809779\n8078362\n1912325\n1912372\n1912395\n1912470\n4299535\n4299565\n4299576\n4299597\n4299599\n5133990\n5772890\n7428726\n7799370\n8810143\n4535581\n5134098\n5134301\n8312017\n1913175\n1913178\n1913328\n1913351\n1913371\n11046092\n5134469\n5134543\n5134569\n5134583\n5134607\n5134621\n5134659\n5134667\n5134682\n5134686\n5134693\n5134815\n5134837\n5134884\n5135191\n5772948\n7509928\n7700512\n7738295\n7791190\n7791558\n7798382\n7940299\n8047165\n8137978\n8167638\n8214814\n8233062\n8262258\n8295666\n8298764\n8314088\n1916347\n1916352\n1916410\n1916412\n1916458\n1916554\n7854318\n1918627\n1918632\n1918669\n1918688\n1918694\n1918733\n1918736\n1918776\n1918789\n1918795\n1918843\n1918854\n1918859\n1918868\n4535539\n8035998\n8176911\n7622059\n7988274\n8404037\n4535618\n4535620\n4535510\n5130587\n5130682\n7762841\n5131096\n5131142\n5132183\n8001799\n5133088\n7642610\n5135513\n5135546\n1896957\n5131910\n8138711\n1902143\n1902169\n1902182\n1899349\n1899433\n1899737\n1899818\n6229058\n7768674\n7867379\n7934873\n8168644\n8393082\n1951557\n4527355\n5142870\n1951649\n1952014\n1952062\n1952130\n1952229\n5143048\n1952449\n1952532\n5143129\n5143147\n1952806\n1952812\n1952816\n1951713\n1951725\n1832819\n1832853\n1832862\n1832915\n1832927\n1832936\n1833096\n1833159\n5880257\n5880258\n6097224\n6097225\n6097228\n1853064\n1853079\n4529248\n5976910\n1735193\n1941864\n5120465\n5120577\n5120668\n5120675\n5120767\n5121040\n5121046\n5121177\n5121244\n5121517\n5121613\n5121737\n8273859\n1842097\n1842196\n5120396\n1842485\n1842542\n4301036\n1842690\n1842695\n4529738\n1843602\n8292351\n5101394\n1730978\n1731263\n4525641\n1731598\n1872368\n1878782\n1878798\n1878804\n1878845\n1878862\n1878879\n1878895\n1878904\n1878907\n1878939\n1878951\n4531506\n4531517\n1879001\n1879227\n1879252\n1879408\n1879427\n1879452\n1879471\n5126212\n5126217\n1879534\n1879630\n1879655\n1879691\n1879703\n1879731\n1879735\n1879765\n10915497\n1879970\n1880040\n1880062\n1880064\n1880094\n1880104\n1880138\n1880139\n1880140\n1880143\n1880818\n1880907\n1880931\n4531643\n1881122\n1881126\n1881151\n9819403\n4531687\n1881208\n1881362\n1881393\n1881404\n1881418\n1881603\n4531713\n1881834\n4531975\n1882158\n1882165\n1882210\n1882437\n1882459\n1882557\n1882729\n5126834\n8325294\n1882905\n1882965\n1883067\n1883161\n1883168\n1883386\n1883634\n4531690\n1884212\n4531708\n1884465\n4532122\n1884970\n1885931\n1885937\n1886084\n1886251\n1886320\n8223165\n1886579\n1886587\n1886648\n7562564\n1886951\n1887290\n4531670\n1887701\n4531968\n10922411\n1888463\n1888484\n1888491\n1888579\n1888619\n1888623\n1888733\n1888736\n1888743\n1888759\n1888826\n1889287\n9228024\n1889905\n1889942\n5127521\n1890187\n1890346\n1890487\n1890522\n1890534\n1890540\n1890576\n1890656\n1890670\n1890679\n1890699\n1890701\n1890703\n1890724\n1890772\n1890776\n1890823\n1890898\n1890957\n1890975\n1891013\n1891059\n1891167\n1891171\n1891177\n1891186\n1891190\n1891217\n1891326\n1891366\n1891386\n1891426\n1891453\n1891473\n1891493\n1891494\n4532022\n4532024\n8411753\n1892242\n1892245\n1892476\n9674732\n1884240\n1884254\n1884255\n1884273\n1884274\n1884280\n1884312\n1884332\n1884365\n1884370\n1884403\n5884851\n6133232\n11761541\n5126675\n5126680\n7446048\n8532380\n8537359\n8823068\n8856895\n8858121\n9100030\n9101339\n9137965\n1889833\n5127656\n1887108\n1887173\n1887177\n1887178\n4532050\n4532057\n4532088\n4532095\n4532097\n6121184\n8218441\n4532150\n4532155\n4532160\n5771880\n1846107\n1846111\n1846112\n1846133\n1846141\n1846149\n1846159\n1846210\n1846219\n1846236\n4528813\n4528818\n1830879\n1830937\n1830962\n1831002\n1831009\n1831128\n1831136\n1831168\n4525443\n4525448\n5122293\n1853587\n4526048\n1854202\n1854259\n1854287\n1854347\n5122439\n1854615\n1854792\n1854824\n1854849\n1854237\n4526094\n4526050\n7717983\n1858637\n1858674\n1858698\n1858762\n1858775\n1858778\n1858873\n1858930\n1859046\n1859100\n1859177\n4536292\n1859285\n1859305\n1859471\n1859480\n1859488\n1859534\n1859952\n1860026\n1860063\n1860076\n4536472\n4536483\n7642240\n8200050\n12046692\n1973467\n4525132\n5123221\n6097269\n5123042\n5124512\n1866356\n1866556\n1866568\n5124911\n1867820\n1867928\n7764232\n5124716\n7734292\n1841460\n1841476\n1841616\n1841675\n1841706\n1841813\n1841821\n1841946\n1841989\n1861510\n1861644\n1861673\n1861797\n1861842\n1861862\n1862293\n1862401\n1862517\n1862572\n1862578\n1862580\n1862692\n1862701\n1862719\n1862765\n1862774\n1862837\n1862894\n5123922\n5124007\n5124029\n1864161\n1864358\n1864377\n5124143\n5124151\n5124233\n1864652\n1993419\n1939432\n4525189\n1860108\n5119506\n5119513\n1830361\n1830372\n1830374\n1830380\n1830407\n1830408\n1830410\n1830457\n4525369\n1830498\n4525420\n4525425\n7976145\n1830534\n1830537\n1830584\n1830632\n1830802\n4525364\n1754183\n1754332\n5105929\n5106115\n5106160\n5106249\n5106539\n5106894\n5107128\n5107219\n5107640\n5107644\n5107829\n7410701\n7586742\n7674502\n7761138\n7778368\n7870336\n7903078\n7909858\n7955974\n8048904\n8102790\n8111395\n8158342\n8201251\n8348761\n8426357\n8964772\n4522753\n1939647\n1939658\n1939677\n1939680\n1939688\n1939717\n7646066\n1829322\n1829363\n8254441\n10055273\n1855452\n1855799\n1856005\n1856105\n1856289\n5122798\n1856384\n1856595\n1856620\n1856658\n1856663\n1856668\n1856686\n1856691\n1856701\n1856730\n1856768\n1856772\n1856867\n1857068\n1857143\n1857577\n1857581\n1857626\n9790007\n1857785\n1857828\n1857829\n1857856\n1857863\n1857878\n1857924\n1857978\n1858074\n1858100\n1858113\n1858163\n1858321\n1938050\n1938131\n8225376\n1936969\n1938214\n4690079\n1938520\n1938810\n1938955\n5141262\n5141288\n5141291\n5141297\n5802625\n1856503\n1858531\n1838691\n1838811\n1838838\n1838905\n1838911\n4528692\n4528694\n1833500\n1833626\n1833627\n4528658\n1834589\n1834775\n1835031\n5770913\n1835156\n1835393\n1835396\n1835407\n1835422\n1836899\n1837172\n4528702\n1838969\n1839770\n1839851\n1839878\n1839893\n1841158\n1841159\n5770922\n5770942\n4529032\n5119893\n5114409\n4534796\n4534798\n4534757\n1801051\n1801896\n4534773\n4534776\n4534778\n4534779\n4534782\n4534787\n4534788\n4534792\n9894093\n1802280\n1803012\n1803060\n1803073\n1803108\n4534762\n4534766\n4534767\n4534769\n5114311\n5114316\n5114327\n8244266\n", + "regions/japan.classes": "1992315\n1733154\n1733412\n5101745\n5102287\n1832235\n1847392\n1829659\n8503184\n1831458\n1831631\n9379855\n10679326\n12199936\n1759775\n1760927\n1761353\n1762151\n1764021\n1764032\n1764060\n1764531\n1766260\n1766570\n11097510\n5110232\n1769410\n1769772\n1769901\n6132967\n1775148\n5110765\n1777695\n6132953\n1780705\n1780716\n1783652\n5112500\n6132974\n1787009\n10860091\n1788553\n1788953\n1789225\n1791698\n1791715\n5113082\n5113352\n5884243\n5113925\n1796984\n10600368\n1797259\n1797299\n1797479\n8756768\n9332506\n5113950\n5884247\n1798449\n1787072\n1798700\n1798868\n4301310\n4532352\n6133046\n10722110\n1803148\n1803824\n1805044\n5115167\n1808286\n9219266\n1808752\n5115771\n5116412\n12176559\n1813114\n1813263\n1814913\n1814928\n1815260\n1816299\n1816362\n8326103\n1818991\n4532293\n6134023\n7346384\n1819268\n8407461\n5118348\n1820372\n1820406\n1820450\n9420824\n12037602\n5884571\n8897869\n6133083\n6133292\n11142432\n10399906\n6133271\n11232431\n8831819\n5115874\n10178326\n10907635\n10982648\n8874633\n9508913\n1783898\n1783906\n9478424\n6115388\n1774583\n1774598\n1774618\n1774626\n1774654\n1768461\n5113036\n5109796\n1821934\n1821940\n6122364\n8237987\n4687933\n6116646\n1798329\n1785072\n1765999\n1786597\n5884188\n6132915\n6132916\n1782310\n5112440\n1860987\n9883856\n1939510\n1939520\n1860261\n1860274\n1869706\n4531402\n1872848\n1873079\n5125569\n5125633\n1874274\n1874937\n1875120\n1875830\n1877038\n6133441\n1736499\n1736993\n5102982\n1740482\n1740797\n1743532\n1745952\n1746775\n1920851\n1920996\n10581870\n1921150\n1921163\n8782891\n5714680\n1924044\n1924193\n1924713\n4535172\n1925918\n1926448\n5883255\n1927034\n5883052\n1927393\n5882965\n5139050\n1928849\n1928908\n1929697\n1931132\n1931561\n7346434\n1931706\n1931956\n1932043\n1933844\n1752849\n5105547\n5105560\n1753636\n5105588\n6133481\n1919720\n1919951\n5137832\n5805954\n1920496\n5137889\n5137908\n5137912\n5137949\n1920711\n5803588\n1920218\n11826016\n1954496\n1956524\n1956629\n6133593\n1957854\n1958252\n1958454\n5144027\n1959645\n1959876\n1959914\n1959919\n1960023\n1960181\n5144093\n1960686\n1960854\n1961052\n1961162\n7346236\n1961252\n1961647\n1962265\n1964024\n6133500\n1964247\n1964316\n1965913\n5144431\n1967595\n1967815\n1967873\n1968147\n1968193\n7681733\n1968304\n1968363\n1968867\n6133643\n1970136\n5144677\n5145409\n9194811\n1972443\n1973338\n5146434\n5147062\n1975198\n1975805\n1975806\n1975892\n1975964\n1975979\n9548993\n1976212\n1976213\n1976311\n5148115\n1977833\n1978422\n4524636\n4524638\n1979781\n1980521\n1980811\n8421569\n11173690\n1981937\n1981938\n1982267\n1985061\n1985152\n1985158\n1985167\n1985191\n1986052\n1986056\n1986508\n5149308\n1987377\n1987665\n1987776\n11650277\n1988225\n1988306\n5149414\n1989428\n1990050\n1991123\n1991277\n1991378\n1991783\n5149986\n6133619\n5880539\n9442902\n11828714\n10574156\n5880392\n4524070\n7345819\n6133542\n7345829\n5880478\n6133540\n5146379\n1942697\n4689929\n1943212\n5141924\n1945066\n1945225\n1945227\n1945694\n1945878\n1946695\n7389824\n1947492\n1947626\n1947740\n1949336\n5142499\n5977257\n5142725\n1952883\n1952909\n1758874\n1758878\n7972792\n1759620\n1759667\n1760593\n1760939\n1761438\n1762680\n1764791\n5109830\n5109882\n8352161\n1766130\n1767368\n1767655\n5802396\n1768698\n1769519\n1769566\n1770172\n4532696\n1772179\n6115946\n1775962\n1776067\n5772222\n1781233\n1781234\n1782168\n1782177\n1782457\n1782543\n1782672\n1782726\n1782757\n5715004\n1784513\n1784761\n1785145\n1785314\n1785367\n1786360\n1786448\n1788522\n1788856\n1788917\n1789957\n1790376\n9174377\n1791422\n1795065\n4532908\n1795957\n4688172\n1797030\n6133007\n5113951\n1800004\n1800032\n1800149\n6544687\n4532269\n4533123\n4534533\n6132989\n6132781\n4534685\n1771678\n1771698\n1771040\n1771245\n5113853\n5108737\n5108761\n5108787\n5108794\n9243764\n1759394\n4532266\n1767293\n9325654\n10458175\n1822610\n1822613\n1822787\n1822830\n1822848\n1823294\n1824242\n1824390\n1824666\n5118859\n1825176\n1825539\n5118978\n1825786\n7345777\n1825967\n1826108\n5118996\n1827125\n1827408\n4534869\n9883140\n5119181\n5119223\n1827649\n1827650\n11435704\n6133687\n6133688\n9921001\n5118841\n9486293\n1893266\n1893546\n1893923\n7712938\n4535614\n4535630\n4535827\n1895499\n1895867\n1895875\n1895956\n1895992\n5128519\n1897664\n1897685\n4299368\n5129293\n7346344\n1898434\n1898441\n1898544\n5129378\n5129417\n1901399\n1901832\n5130464\n5130471\n5130476\n1902543\n1902749\n8140883\n1904948\n1905079\n6221746\n1907436\n1907498\n1907625\n1908702\n10656625\n1909398\n1909607\n1909865\n1911093\n7428726\n1913105\n5134682\n5135026\n5136681\n5137085\n1918411\n1918467\n4535510\n5130587\n5131096\n5131142\n5131293\n5131339\n5131585\n5806167\n7642610\n8138711\n1910629\n1910662\n1914701\n1951412\n1951462\n1951507\n5142870\n1951791\n1952062\n1952175\n1952177\n5143007\n5143080\n1952449\n5143147\n5885428\n4702564\n6544581\n5141590\n1730948\n1879379\n1879408\n1879471\n5126635\n1880852\n1880858\n1880968\n1881151\n1881329\n1881336\n1882253\n1882767\n1882884\n1882905\n1882930\n1884051\n9294363\n4532122\n1884908\n1885919\n1886251\n1886320\n1886726\n1886729\n1886929\n1887509\n1887691\n1887701\n1888027\n1888092\n1888891\n1888913\n1889039\n1889074\n1889277\n1889370\n1890320\n1890410\n1890487\n1891326\n1891758\n1892153\n11056379\n6133141\n5771877\n4532125\n6120803\n6133232\n5126680\n1889765\n5127592\n5127669\n5127688\n6121184\n1831136\n5122430\n9749806\n1865659\n1866356\n1866568\n5124880\n8439879\n9983244\n1867993\n5124716\n10005133\n1861456\n1861488\n1861494\n1861644\n1861665\n1861697\n5123674\n1861938\n1861949\n1862072\n5123685\n1862293\n1862363\n1862370\n1862401\n11907754\n1862430\n1862449\n1862475\n1862517\n1862578\n1863034\n5124029\n1863829\n1863848\n1863944\n1864126\n1864377\n5124121\n11954157\n5124304\n5124332\n5124348\n5124415\n5124433\n1864793\n5885399\n7346401\n5123815\n5123890\n1992883\n6132711\n6132726\n5143249\n5105642\n1754368\n1754535\n1754933\n1755237\n1757853\n5108349\n1858557\n1937723\n1937819\n1937892\n1938058\n1938088\n1938114\n1938162\n1938168\n4693382\n8225376\n5141212\n5141226\n1937490\n1937556\n1938230\n1938233\n1938612\n1938796\n1939168\n8546322\n1839560\n1800238\n10213314\n1800528\n1800572\n1800696\n5114394\n9544823\n5114425\n1800934\n1801080\n1801084\n1801490\n6112661\n1802090\n1802113\n1802244\n1802280\n1802783\n1803022\n1803065\n1803108\n10942408\n6133803\n", + "regions/madagascar.classes": "1766612\n1776265\n1776268\n1786980\n1788553\n1790287\n5884245\n6117055\n6115437\n1803163\n5117776\n5116504\n8723161\n1780897\n6115388\n6116661\n1765997\n4687389\n1922063\n1922244\n1923465\n8023645\n1924713\n1932302\n1932332\n8177775\n1933649\n5138841\n1919181\n1919213\n1919346\n5137827\n1920374\n5137863\n1943236\n1946661\n1947113\n5109848\n6116899\n1892554\n5806166\n1895956\n1897972\n1898017\n5130392\n5130464\n5130487\n5130502\n5130542\n1906621\n11378273\n5133610\n1915499\n11372793\n11375508\n5131347\n7642610\n5128597\n1910628\n1910629\n1879452\n1879490\n5126637\n1883067\n1883124\n1884051\n1884437\n1884449\n6120980\n1884774\n1885262\n1886104\n1886729\n1887054\n8955839\n4531670\n1889272\n1889277\n1889543\n7543006\n1890410\n1890670\n1892456\n5771877\n6121010\n5127644\n1867014\n1868049\n1868060\n1861433\n1861510\n1861544\n1861644\n1862293\n1862311\n1862401\n1862765\n1863034\n1863282\n9178932\n5124088\n5124352\n1938125\n1938166\n1939314\n1802662\n1802868\n", + "regions/mediterranean.classes": "1934693\n1860628\n1860659\n1860664\n1860671\n1860711\n4522933\n1732063\n1732072\n1732416\n1732419\n1732452\n1732457\n1732521\n1732565\n1732662\n1732680\n1732685\n1732697\n1733258\n1733484\n4525266\n4525268\n4525270\n4525273\n1733620\n1733755\n5101678\n5101717\n5101745\n5769191\n1734453\n1734690\n1734704\n1734794\n1734826\n5102287\n11529292\n1831861\n1831863\n1831890\n1845270\n1845368\n1845548\n1845565\n1845607\n4529566\n4528100\n1846374\n1846604\n1846657\n1847061\n1847097\n1847111\n1847407\n4528547\n9262981\n1847956\n9546514\n1848150\n1848202\n1848219\n9868978\n1848273\n4528539\n1848596\n1848610\n1848636\n1848657\n1848690\n1848741\n1848864\n1849104\n1849477\n11080751\n1849531\n1849539\n1849552\n1849630\n1849856\n1849924\n1850008\n1850238\n1850246\n1850335\n1850497\n1850506\n4527903\n1850522\n1850533\n1850538\n1850570\n1850640\n1850781\n1851010\n5122037\n5122113\n1851220\n1851337\n1851347\n5122206\n4527972\n1852150\n1852159\n1852165\n1852177\n1852311\n11287091\n4527957\n1848920\n1829533\n1829776\n1829785\n1829823\n4525354\n1828637\n6097236\n8871600\n9182336\n5769272\n7623903\n8912441\n5879654\n7448174\n4525610\n1751852\n1861395\n1845866\n1845952\n1845962\n1845965\n1845982\n1839094\n1841261\n1830838\n1830843\n1830125\n1830131\n1830152\n1830191\n1830241\n1830271\n4525476\n4525487\n1831458\n1831643\n1841296\n4528593\n5880147\n11418741\n11513018\n11571523\n12151997\n12160125\n12022449\n7908344\n1761111\n1764531\n1769103\n1769897\n7701550\n1772793\n4532500\n5110490\n1777289\n8141741\n1777631\n1779399\n1780149\n1780150\n8193562\n1783882\n1786980\n1786985\n1788553\n1790692\n1790816\n5113078\n5113084\n5113234\n1792210\n1797178\n1797258\n1797276\n1797333\n1797349\n1797367\n1797429\n1797454\n1797479\n1797527\n1797542\n4532461\n4532471\n4532473\n8016905\n8756768\n1798346\n1798408\n4532493\n1798449\n1798481\n1798504\n1798594\n1798802\n1798807\n4532351\n4532352\n4532357\n1799708\n1803148\n1803163\n1804071\n1804906\n1805110\n1805111\n1805155\n4532608\n7874258\n1807969\n1808166\n1808440\n1808450\n1808752\n5115701\n5115771\n5115777\n1809210\n1810099\n5116416\n1813114\n5117189\n5117200\n7656811\n1814538\n1814552\n1814630\n1814653\n5117399\n5117400\n1816881\n1817797\n8326103\n1819050\n1819145\n4532297\n1819268\n8407461\n1819699\n9331464\n1819873\n1819928\n6122092\n7657803\n1820372\n1820406\n12253343\n5884571\n7596232\n5771982\n6097214\n4532544\n4532614\n4532549\n4532516\n4532532\n4532565\n12089608\n10062933\n8148822\n11962292\n12135372\n11033463\n11812181\n5115854\n5115872\n5115874\n5116475\n8165185\n6097254\n5116698\n1805535\n9198767\n1788635\n4532395\n4532405\n4532408\n4532412\n1780869\n8000103\n4532534\n1768626\n4532508\n4532510\n1760244\n1760246\n5113030\n5113036\n1821547\n1821856\n1821911\n1819170\n1812394\n8237987\n4532366\n4532453\n1820039\n1772822\n1771772\n1771779\n1777517\n1860979\n1860983\n1860987\n1860994\n1861011\n1861031\n4522911\n4522916\n4522919\n4522886\n4522890\n4522891\n1860765\n1860768\n1860852\n1860857\n7767114\n7961640\n1992378\n1992504\n1852956\n1852978\n1835432\n1835457\n1837420\n1837429\n8015612\n1840297\n1840301\n1840346\n1840360\n1840380\n1840478\n1840483\n1840555\n1840570\n1840581\n1840596\n1840621\n4529186\n1831752\n1852751\n1852831\n9473121\n5125075\n5125104\n8416348\n1751236\n1751298\n1751457\n1860408\n5123339\n5123419\n5769164\n5123461\n5123474\n1869595\n1869656\n1869803\n1869852\n1869858\n1869976\n1870202\n1870249\n1870250\n1870450\n1870650\n1870988\n5125306\n1871160\n1871212\n1871217\n1871252\n1871264\n1871407\n4531402\n4531409\n1871451\n4531365\n4531376\n1871683\n1871698\n1871783\n1871826\n4531427\n7673242\n1872848\n1872873\n1872901\n1872904\n1873048\n1873051\n1873079\n1873215\n1873411\n4530947\n4530951\n1873776\n1873783\n4531237\n1873890\n5125689\n1874168\n1874192\n1874204\n1874211\n1874229\n1874269\n1874280\n1874295\n4531145\n4531147\n4531158\n1874375\n1874743\n9782192\n1875008\n1875120\n8219149\n1875327\n1875376\n1875409\n1875429\n1875633\n1875680\n1875682\n1875687\n4531284\n1875827\n1875830\n1875865\n1875869\n1875918\n1875940\n1875952\n1875958\n1876329\n1876357\n1876512\n1876542\n1876623\n1876854\n1877038\n1877310\n1877341\n1877345\n1877368\n9111961\n5126052\n1877941\n1877986\n1877988\n1878067\n4531417\n4531425\n4531429\n1878197\n1878350\n1878370\n1878470\n1878471\n1878490\n1878500\n1878586\n5884888\n11728049\n1877035\n1872315\n1940158\n4525859\n4525884\n5141493\n5141501\n1940504\n1940510\n1940575\n1940644\n1940717\n1940744\n1940768\n4525777\n4525803\n1940807\n1940838\n4525846\n1941330\n1941348\n1941377\n1941437\n10309794\n12211069\n1939879\n1736377\n1736425\n1736447\n1736499\n1736560\n1736601\n1736623\n5102628\n1736727\n1736800\n1736898\n1736904\n1736905\n1736906\n4529931\n1737131\n1737342\n1737368\n1737413\n1737437\n1737491\n1737497\n1737509\n4530608\n7466487\n1737524\n1737526\n1737542\n1737552\n1737650\n1737753\n1737775\n1737776\n1737847\n1737893\n4530002\n8186212\n1738163\n1738222\n1738245\n1738337\n1738373\n1738422\n1738429\n1738514\n8420632\n8869900\n5102931\n5102951\n1738700\n1738722\n1738794\n1738839\n1738883\n1739151\n1739272\n1739290\n1739337\n1739377\n1739381\n5102982\n1739461\n1739605\n1739748\n1739797\n1739819\n1739833\n1739919\n1739922\n1739931\n1739980\n1740069\n1740120\n1740174\n1740185\n1740392\n1740482\n1740533\n1740567\n1740623\n8094357\n1740762\n1741056\n1741147\n1741258\n1741341\n1741368\n4530151\n8345820\n5103066\n5771357\n1741545\n10838422\n1741590\n1741593\n1741615\n1741633\n1741667\n1741752\n1741756\n4530424\n1741820\n1742185\n1742346\n5103451\n5103502\n5103613\n5103948\n5771350\n7975250\n1743196\n5103998\n7661023\n11846897\n7877231\n1743532\n1743588\n1743604\n5104056\n6097235\n1743643\n1743710\n1743768\n1743775\n1743782\n4529900\n4529908\n4529915\n1743828\n1743856\n1743862\n1743867\n1743898\n1744071\n1744136\n1744180\n4530632\n1744416\n1744498\n1744526\n1744588\n1744593\n1744728\n1744731\n1744739\n1744763\n1744782\n1744789\n1744808\n1744810\n1744896\n1745013\n1745079\n10844862\n1745558\n1745561\n1745600\n1745634\n1745643\n1745659\n1745678\n1745705\n1745737\n1745762\n1745781\n1745827\n1745830\n1745925\n1746027\n8424972\n1746174\n1746413\n1746440\n1746613\n1746666\n1746689\n1746775\n1746832\n1746856\n1746876\n1746910\n1747050\n1747141\n5104442\n4530138\n5104558\n1748203\n1748321\n5104597\n6097234\n1748456\n1748720\n5104641\n10580256\n5103121\n5103176\n5103181\n5103185\n5103227\n5771227\n5771229\n5771232\n5771239\n5771243\n5771249\n5771255\n5771259\n1831780\n4525503\n4525505\n4525510\n4525530\n4525540\n4525557\n4525562\n1920851\n1920864\n1920892\n10581870\n10825466\n10556522\n1921466\n1921521\n1921590\n7387466\n1922197\n10384044\n10442031\n10854079\n9904499\n1922311\n1922343\n8016522\n1922572\n1922584\n4535092\n1922937\n1923019\n1923037\n5138298\n5138492\n5138543\n5138561\n5714680\n1923796\n1924077\n1924082\n1924097\n5138681\n10656713\n1924713\n11470119\n1924867\n1925221\n1925233\n7354189\n4535172\n1925381\n1925410\n1925454\n1925918\n1925962\n1926054\n9816676\n1926324\n1926385\n1926546\n1926550\n1926722\n1926861\n5882965\n7680748\n1928248\n5139040\n5139156\n1928754\n1928945\n1928960\n1929270\n1929402\n1929659\n1929697\n5139339\n5792092\n8356768\n1930110\n1930904\n1930916\n4535106\n1931179\n1931509\n1931779\n1931788\n1932393\n1932411\n1932473\n1932517\n1932551\n1932752\n1932960\n1932976\n4535162\n5140214\n5140244\n5140436\n5140443\n5772702\n5772749\n7634721\n7664111\n9954885\n1933583\n1933647\n1933649\n1933793\n1926166\n1926260\n10879371\n11874998\n1933095\n1933126\n1933138\n1933163\n1933204\n1924494\n1752383\n4522322\n5105339\n1919181\n1919221\n1919223\n1919317\n1919320\n1919330\n1919333\n4535280\n4535285\n7981372\n1919346\n1919698\n1919703\n1919706\n1919712\n1919716\n1919966\n1920237\n1920247\n1920258\n1920259\n5137790\n1920357\n1920359\n1920369\n1920395\n1920491\n1920494\n1920496\n1920498\n1920502\n1920506\n1920509\n1920512\n4535307\n5805036\n5137902\n5137903\n5804895\n1920707\n1920709\n1920712\n4535271\n5137578\n5137582\n5137612\n5137682\n5137695\n5137706\n8203812\n1920218\n1748890\n1748922\n1748942\n1749070\n1749449\n1749713\n1749869\n1749921\n1749929\n1749936\n1750051\n1750131\n1750159\n1750326\n5104891\n5104940\n5105106\n1751051\n5104759\n1749635\n8741260\n1735532\n4527339\n1731860\n1855235\n1954490\n1954563\n5143380\n5143477\n1955479\n1955484\n5143651\n1955694\n1955856\n4524588\n5143675\n5143697\n1956440\n1956524\n1956599\n1956639\n1956897\n4525068\n1957266\n1957286\n1957300\n1957556\n1957565\n1957570\n1957572\n1957579\n1957583\n1957611\n1957632\n1957673\n1957706\n1957718\n1957746\n1957791\n1957816\n1957822\n4524320\n8172949\n1957845\n1957852\n1957854\n4524421\n4524424\n4524426\n5143944\n5143947\n1958024\n11554842\n1958065\n1958323\n1958515\n1959383\n1959395\n1959423\n1959436\n1959461\n1959467\n1959473\n1959682\n1959735\n1959799\n1959876\n1959914\n1959919\n1960002\n1960484\n1960617\n1961013\n1961037\n1961040\n1961068\n7741315\n1962204\n1962265\n1962268\n1962434\n1962516\n10004969\n1962584\n4524568\n1962636\n1962860\n1962961\n1962972\n1962990\n4302252\n1963168\n1963306\n1963446\n1963463\n1963587\n1963709\n1963710\n1963755\n1964189\n1964191\n1964195\n1964401\n1964471\n1964637\n1964653\n1964657\n8361848\n1964836\n5144426\n1965166\n1965197\n1965208\n1965345\n1965640\n1965763\n1965795\n1965825\n1965841\n1965913\n1966017\n1966351\n1966358\n1966854\n1966886\n5144534\n1967003\n1967006\n1967011\n1967025\n5144543\n1967245\n1967265\n1967273\n1967324\n1967452\n1967597\n1967803\n1967815\n1967873\n7681733\n1968678\n1968686\n1968837\n1968867\n11598540\n1968990\n1969291\n1969339\n1969463\n1969954\n1969958\n4523707\n1970213\n1970227\n1970243\n1970259\n1970284\n5144677\n5144721\n5144782\n5144787\n5144805\n5144880\n5144900\n5145009\n5145136\n5145186\n5145255\n5145260\n5145269\n5145409\n5145502\n5145522\n5145729\n5145842\n7753668\n8014296\n9627567\n1971847\n1971852\n1971858\n1971888\n1971986\n1972120\n1972185\n1972187\n1972234\n1972250\n1972278\n1972342\n1972374\n1972377\n5145870\n5145965\n7541913\n7624494\n7960566\n1972434\n1972449\n1973300\n1973323\n1973327\n1973414\n7996464\n5146420\n5146440\n5146476\n5146496\n5146510\n5146525\n5146559\n5146599\n5146601\n5146611\n5146651\n5146659\n5146677\n5146693\n5146720\n5146762\n5146774\n5146786\n5146815\n5146833\n5146837\n5146842\n5146852\n5146862\n5146883\n5146894\n5146899\n5146908\n5146920\n5146927\n5146946\n5146961\n5147002\n5147030\n5147038\n5147039\n5147041\n5147043\n5147058\n5147062\n5147071\n5147099\n5147145\n5147150\n5147155\n5147165\n5147171\n5147193\n5147208\n5147212\n5147232\n5147245\n5147259\n5147287\n5147319\n5147354\n5147395\n5147415\n5147437\n5147441\n5147478\n5147492\n5147513\n5147516\n5147534\n5147560\n7919880\n7988195\n8067894\n8366158\n5147608\n5147638\n1975341\n1975546\n1975553\n1975571\n1975733\n8329661\n1975793\n8160782\n1975897\n1975903\n1976163\n5147681\n6097233\n7973517\n8414310\n8955497\n5147794\n1977003\n1977068\n4523725\n5147827\n5147834\n1977300\n5769028\n5148247\n5148248\n1977962\n1977967\n1977971\n1978056\n1978065\n1978114\n1978375\n1978445\n4524636\n4524638\n10712554\n4524890\n4524902\n5148264\n1978770\n1978776\n1978821\n5148286\n1979308\n1979430\n1979473\n5148394\n5148424\n5148436\n5148462\n5148475\n5148486\n5148487\n1980521\n1980525\n8421569\n1981696\n1981998\n1982406\n1982458\n1982500\n1982525\n1982529\n1982533\n1982541\n1982542\n1982592\n1982636\n1982671\n1982746\n1982770\n1982779\n1982790\n1982838\n1982867\n1982885\n1982918\n1982924\n1983000\n1983034\n1983039\n1983052\n1983062\n1983101\n1983170\n1983260\n1983288\n1983387\n1983393\n1983442\n1983525\n1983528\n1983548\n1983648\n1983705\n1983755\n1983756\n1983888\n1983896\n1983922\n1983967\n1983997\n1983999\n1984033\n1984117\n7752082\n8015895\n8262357\n8394261\n1984734\n1984942\n1984949\n1984954\n7905361\n1985522\n1985573\n1985734\n1985742\n1985760\n1986052\n1986056\n1986157\n1986166\n1986171\n1986220\n1986367\n1986452\n1986522\n1986575\n1986604\n1986877\n5149315\n5768880\n1987527\n9137631\n1987578\n4525091\n4525093\n4525097\n4525103\n6118530\n1987650\n1987737\n1987744\n4524221\n4524223\n1988007\n1988019\n1988064\n4524513\n1988390\n1988506\n1988593\n1988602\n1988642\n1988684\n7555991\n8388883\n1988762\n5149438\n1988881\n1989428\n1990066\n1990150\n1990533\n1990551\n1990582\n5149474\n1991179\n1991371\n1991532\n5149836\n5149839\n5149843\n1991846\n1992066\n8180900\n5880512\n5880533\n5880545\n5880550\n5880552\n5880559\n5880563\n8237343\n8632989\n5769062\n5769068\n5769072\n7429212\n11654024\n7507369\n9414984\n9563355\n1989594\n4524740\n7990739\n4523556\n4523560\n4523564\n4524052\n4524054\n4523486\n4523461\n4525034\n4524376\n4524822\n4524712\n4523522\n4524541\n4523519\n4524072\n4524403\n4524793\n4524914\n4524922\n4524929\n4524951\n4524955\n4524961\n4524962\n4525078\n9220953\n9249651\n5144190\n5146412\n5768597\n5149499\n5149569\n7769543\n8851663\n4523880\n4523883\n4523885\n5149659\n5149664\n5149665\n5149667\n5149704\n5149717\n5149746\n5149768\n5149780\n5149784\n5149787\n5149820\n7443518\n5146342\n5146379\n4302268\n4524393\n5141677\n1943397\n4535386\n8178854\n8277078\n8073674\n8133678\n8273661\n1945569\n1945589\n1945877\n1946661\n7389824\n1947335\n5142338\n5142352\n1949715\n1949784\n1949794\n1949850\n1949852\n1949877\n1949929\n1949938\n1949954\n5142394\n5142599\n7683096\n8109173\n5977247\n8270406\n7633472\n10715410\n4535396\n5142006\n5142032\n5142042\n1869467\n1869512\n5769709\n9530977\n5109821\n1758878\n1759055\n1759069\n1759079\n1759083\n1759097\n4533952\n7972792\n1759153\n1759159\n4533211\n1759407\n1759597\n1759661\n1759667\n1759668\n1759673\n1760104\n7444489\n9060267\n1760593\n1794361\n4533957\n4534225\n8708745\n1760857\n1760867\n1760887\n1760891\n1760893\n4533255\n5108958\n1761041\n1761392\n1761438\n1761735\n1761865\n1762244\n1762383\n1762680\n5109498\n5109506\n5109523\n5109599\n5109614\n5109646\n5109661\n5109722\n1763610\n1763697\n8167743\n1764174\n1764673\n1764986\n1764987\n1765011\n1765017\n1765038\n1765044\n1765069\n1765073\n4534245\n4534250\n4534252\n4534257\n4534275\n5109843\n5109855\n5109931\n8352161\n1765604\n1765767\n1765954\n1766086\n1766128\n1766130\n1766131\n1766137\n1766210\n4534691\n1766274\n1766410\n1766418\n1766510\n7895336\n1766646\n1766718\n1766721\n1766741\n1766773\n1766784\n1766814\n1767511\n1767597\n1767608\n1767625\n1767655\n1767674\n5772169\n5772171\n5772172\n5772176\n5772178\n5772180\n5772186\n5772196\n5772199\n5772202\n5772205\n5772206\n5772210\n7388922\n7768584\n8045644\n1768117\n1768150\n5110200\n1768308\n1768341\n5110211\n5110213\n1768702\n1768727\n1768729\n1768735\n1768741\n1768749\n1768771\n1768815\n1768819\n1769029\n1769057\n1769505\n1769519\n1769543\n1769566\n1769944\n1769958\n1770150\n1770307\n1770353\n1770416\n1770477\n1770530\n4532696\n8393221\n1771385\n7725644\n1771509\n1771531\n4532986\n1772169\n1772179\n1772255\n5772129\n1772940\n1772956\n1773062\n1773163\n1773328\n1773484\n1773572\n8222049\n1774272\n1774859\n1774873\n1774878\n1774959\n1775112\n4534046\n4534052\n4534057\n1775172\n1775299\n1775301\n1775329\n5110593\n5772269\n5883881\n1775891\n1775913\n4534719\n5110670\n1776207\n1776330\n1776371\n5772446\n1776619\n1776862\n1777253\n5110818\n5110858\n5110871\n5110885\n1778074\n4534299\n1778127\n1778143\n1778517\n1778596\n5111147\n5111481\n5111501\n5111513\n5111574\n5772222\n8253467\n1779258\n1779435\n1779641\n1779690\n1780378\n4533937\n1780926\n1780928\n1780954\n1781008\n1781016\n4533285\n4533325\n7664771\n1782319\n1782560\n1782579\n1782615\n1782627\n1782672\n1782726\n1782727\n1782763\n1782777\n1782841\n1782872\n1782927\n1782948\n1783016\n1783043\n1783090\n5112155\n5112160\n5112254\n5112283\n5112291\n5112336\n5112345\n5112388\n5714973\n5715004\n5772349\n5772351\n7921916\n8043500\n1783777\n1783855\n1783971\n1784349\n1784359\n1784812\n1784824\n1784826\n1784853\n4534290\n1785185\n1785286\n4532886\n4532888\n4532890\n1785329\n1785361\n1785883\n1785887\n1785888\n1785895\n1786017\n8292872\n1786360\n1786619\n1786651\n1786658\n1786664\n1786902\n1786936\n1787064\n1787112\n1787213\n1787267\n1787279\n1787400\n1787417\n1787438\n1787504\n1787590\n1787610\n1787631\n1787697\n1787751\n1787770\n1787825\n1787859\n1787905\n4534086\n7917033\n1788425\n1788522\n1788734\n9216200\n4534011\n4534017\n1788917\n1789071\n1789073\n1789076\n1789086\n1789250\n1789255\n1789267\n9805848\n1789403\n4533882\n4533924\n1789481\n1789491\n1789553\n1789580\n4534162\n4534166\n4534170\n4534194\n1789694\n1789695\n1789730\n1789745\n1789753\n1789755\n1789783\n1789785\n1789840\n1789849\n1789957\n10904813\n1789982\n1789984\n1790002\n1790023\n1790059\n1790062\n1790072\n1790084\n1790153\n4533115\n8047343\n9092175\n1790364\n1790625\n1790671\n1791384\n1791422\n1791784\n1791846\n1792061\n1792292\n1792300\n1792335\n1792379\n1792383\n1792411\n1792414\n1792418\n1792426\n1792645\n1792768\n1792996\n1793212\n7918000\n1793877\n1794351\n1794532\n1794534\n1794590\n1794599\n1794609\n1795068\n4532908\n1795180\n1795215\n1795282\n7869346\n1795483\n7922810\n1795854\n1795862\n1795896\n1795900\n1795930\n1795946\n1795957\n1796007\n1796032\n1796117\n1796139\n1796145\n1796169\n4534485\n4534486\n7438067\n8007222\n1796217\n7780930\n4532700\n9803522\n1796423\n1796451\n1796463\n8105817\n1796678\n4533431\n4533433\n4533446\n1798372\n11992983\n1798916\n1798922\n1798931\n1798971\n1798974\n1798984\n1799132\n1799135\n1799701\n1799799\n1800004\n1800032\n6097260\n7712384\n7981386\n8304206\n8742426\n9069966\n4534389\n4534207\n10638451\n4532273\n4532283\n4532811\n4534663\n4533273\n4534540\n8890502\n9135821\n4534038\n4533202\n6544687\n4534538\n4534360\n4533125\n4533128\n4533136\n4533661\n4533663\n4533671\n4534408\n4534458\n4534533\n5883985\n8021109\n11478679\n5110644\n7654770\n6116899\n1774283\n1774285\n5114198\n1763072\n5772063\n9038042\n4534675\n4534681\n4534683\n4534685\n4534686\n8108800\n1771634\n1771650\n1771678\n1771698\n1770772\n1770773\n1770821\n1770869\n1770880\n1771040\n1771143\n1771169\n1771204\n1771214\n1771245\n4533695\n4533714\n4533720\n7940536\n1765751\n5113847\n5113853\n5772309\n5108660\n5108761\n4534525\n1773901\n1773904\n4533344\n4533345\n4533347\n4533360\n4533362\n11819666\n4532203\n4532206\n4532216\n4532236\n4532239\n4532260\n4532264\n4532266\n8103163\n8363507\n1822346\n1822587\n1822610\n1822613\n1822787\n1822796\n1822819\n1822830\n1823604\n1823726\n1824113\n1824117\n1824121\n1824131\n1825064\n1825077\n1825083\n4534909\n4534914\n1825156\n1825176\n4534826\n5118892\n5118904\n7624468\n7937573\n8397564\n1825539\n1825971\n1825983\n1826022\n5118996\n1827125\n5119143\n5119193\n5119245\n1827645\n1828162\n4534872\n6201790\n1893137\n1894268\n7712938\n1894714\n4535614\n4535627\n4535632\n4535636\n8049830\n1894840\n4535827\n4535809\n4535817\n4535819\n9519321\n6231906\n1896841\n1896915\n1897852\n1898286\n1898290\n4299368\n4299370\n1898521\n1898544\n5129378\n1901850\n5130464\n5130542\n1902533\n1902749\n8140883\n8189761\n4535689\n6221746\n1905383\n1906552\n8208583\n4535754\n1909398\n1909838\n1911093\n1911112\n1911122\n1911168\n1911182\n1911278\n1911298\n1911300\n1911461\n7728366\n8396242\n1911633\n4535592\n4535596\n7809779\n8078362\n1912325\n1912372\n1912395\n1912470\n4299535\n4299597\n5133990\n5772890\n7428726\n7799370\n4535581\n5134098\n5134301\n8312017\n1913175\n1913178\n1913328\n1913351\n1913371\n11046092\n5134469\n5134543\n5134569\n5134583\n5134607\n5134621\n5134659\n5134682\n5134686\n5134815\n5134837\n5135191\n5772948\n7509928\n7700512\n7738295\n7791190\n7791558\n7798382\n7940299\n8047165\n8137978\n8167638\n8214814\n8233062\n8262258\n8295666\n8298764\n8314088\n1916347\n1916352\n1916376\n1916410\n1916412\n1916458\n1916554\n7854318\n1918632\n1918667\n1918669\n1918688\n1918694\n1918733\n1918736\n1918776\n1918789\n1918795\n1918843\n1918854\n1918859\n1918868\n4535539\n8035998\n8176911\n7622059\n7988274\n8404037\n4535618\n4535620\n4535510\n5130587\n5130682\n7762841\n5131096\n5131142\n5132183\n8001799\n5133088\n7642610\n5135513\n5135546\n1896957\n5131910\n8138711\n1902169\n1902182\n1899349\n1899433\n1899737\n1899818\n5129913\n6229058\n7768674\n7867379\n7934873\n8168644\n8393082\n1951557\n4527355\n5142870\n1951649\n1952014\n1952062\n1952130\n1952229\n5143048\n1952449\n1952532\n5143129\n5143147\n1952806\n1952812\n1952816\n1951713\n1951725\n1832853\n1833096\n1853064\n4529248\n5976910\n1735193\n1941864\n5120465\n5120577\n5120675\n5121040\n5121177\n5121613\n1842097\n5120396\n1842485\n1842508\n1842542\n4301036\n1842690\n1842695\n4529738\n1843602\n8292351\n5101394\n1730978\n1731263\n4525641\n1731598\n1872368\n1878782\n1878798\n1878804\n1878845\n1878862\n1878879\n1878895\n1878904\n1878907\n1878939\n1878951\n4531506\n4531517\n1879001\n1879227\n1879252\n1879408\n1879427\n1879452\n1879471\n5126212\n5126217\n1879534\n1879630\n1879655\n1879691\n1879703\n1879731\n1879735\n1879765\n1879970\n1880064\n1880094\n1880104\n1880139\n1880140\n1880143\n1880818\n1880907\n1880931\n4531643\n1881122\n1881126\n1881151\n9819403\n4531687\n1881208\n1881362\n1881393\n1881404\n1881418\n1881603\n4531713\n1881834\n4531975\n1882158\n1882165\n1882210\n1882437\n1882459\n1882557\n5126834\n1882905\n1882965\n1883067\n1883161\n1883168\n1883386\n1883634\n4531690\n4531708\n1884465\n1884774\n4532122\n4532146\n1884970\n1885931\n1885937\n1886084\n1886251\n8223165\n1886579\n1886587\n1886648\n7562564\n1886951\n1887290\n4531670\n1887701\n4531968\n1888346\n10922411\n1888463\n1888484\n1888491\n1888579\n1888619\n1888623\n1888733\n1888736\n1888759\n1888826\n1889287\n9228024\n1889905\n1889942\n1890187\n1890346\n1890487\n1890522\n1890534\n1890540\n1890576\n1890656\n1890670\n1890679\n1890699\n1890701\n1890703\n1890724\n1890772\n1890776\n1890823\n1890898\n1890957\n1890975\n1891013\n1891059\n1891129\n1891167\n1891171\n1891177\n1891186\n1891190\n1891217\n1891326\n1891366\n1891386\n1891426\n1891453\n1891473\n1891493\n1891494\n4532022\n4532024\n8411753\n1892242\n1892245\n1892476\n9674732\n1884240\n1884254\n1884255\n1884273\n1884274\n1884280\n1884312\n1884332\n1884365\n1884370\n1884403\n5884851\n5771877\n11761541\n5126675\n5126680\n7446048\n8537359\n8823068\n8856895\n8858121\n9100030\n9101339\n1889833\n1887108\n1887173\n1887177\n4532088\n4532095\n4532097\n6121184\n8218441\n4532150\n4532155\n4532160\n5771880\n1846107\n1846111\n1846112\n1846133\n1846159\n1830879\n1830937\n1831002\n1831009\n1831128\n1831136\n5122293\n4526048\n1854202\n1854259\n1854347\n5122439\n1854615\n1854824\n1854849\n1854237\n4526050\n7717983\n1858637\n1858674\n1858698\n1858762\n1858775\n1858930\n1859046\n1859177\n1859285\n1860026\n1860063\n4536472\n8200050\n12046692\n1973467\n4525132\n5123221\n6097269\n5124512\n1866356\n1866556\n1866568\n5124911\n1867820\n1867928\n7764232\n7734292\n1841460\n1841616\n1841706\n1841813\n1841946\n1841989\n1861494\n1861510\n1861644\n1861673\n1861797\n1861842\n1861862\n1862293\n1862401\n1862517\n1862578\n1862580\n1862692\n1862701\n1862719\n1862765\n1862774\n1862837\n1862894\n5123922\n5124007\n1864161\n1864358\n1864377\n5124143\n5124151\n5124233\n1864652\n1993419\n1939432\n4525189\n5119506\n5119513\n1830380\n1830407\n1830408\n1830410\n1830457\n4525369\n1830498\n4525425\n7976145\n1830534\n1830632\n1830802\n4525364\n1754183\n1754332\n5105929\n5106115\n5106249\n5106539\n5106894\n5107076\n5107128\n5107219\n5107640\n5107644\n5107829\n7410701\n7586742\n7674502\n7761138\n7778368\n7870336\n7903078\n7909858\n7955974\n8048904\n8102790\n8111395\n8158342\n8201251\n8348761\n8426357\n8964772\n4522753\n1939647\n1939658\n1939677\n1939680\n1939688\n1939717\n7646066\n1829322\n1829363\n10055273\n1855452\n1855799\n1856005\n1856105\n1856289\n5122798\n1856595\n1856663\n1856686\n1856701\n1856730\n1856772\n1856867\n1857068\n1857143\n1857577\n1857581\n1857626\n1857785\n1857828\n1857829\n1857878\n1858074\n1858113\n1858163\n1858283\n1858321\n1938050\n1938069\n1938131\n8225376\n1936969\n1938214\n4690079\n1938520\n1938810\n1938955\n5141262\n5141288\n5141291\n5141297\n5141305\n5802625\n1856503\n1858531\n1838691\n1838811\n1838838\n1838905\n1838911\n4528692\n4528694\n1833626\n1833627\n4528658\n1834589\n1834775\n1835031\n5770913\n1835156\n1835393\n1835396\n1835422\n1836899\n1837172\n1838969\n1839770\n1839851\n1839878\n1839893\n1841158\n1841159\n4529032\n5119893\n5114409\n4534796\n4534798\n4534757\n1801051\n1801896\n4534773\n4534776\n4534778\n4534779\n4534782\n4534787\n4534788\n4534792\n9894093\n1802280\n1803012\n1803060\n1803073\n1803108\n4534762\n4534767\n4534769\n5114311\n5114316\n5114327\n8244266\n", + "regions/middle_east.classes": "1934693\n1732115\n1733484\n5101745\n5769191\n1734690\n1734704\n1831890\n1845270\n1845548\n4528100\n9546514\n1848219\n9868978\n1850781\n1852165\n11287091\n6097236\n8871600\n1845866\n1845962\n1839094\n1841261\n1831458\n1764531\n1769103\n1769897\n7701550\n4532500\n5110490\n1779399\n1783882\n1786980\n1786985\n1788553\n1790692\n1790816\n5113084\n1797178\n1797258\n1797276\n1797333\n1797349\n1797429\n1797454\n1797479\n1797527\n4532461\n4532473\n8016905\n1798346\n1798408\n1798481\n1798504\n1798802\n4532352\n1803148\n1803163\n1804071\n1805111\n1807969\n1808166\n1808195\n1808440\n1808450\n1808752\n5115701\n5115771\n1810099\n7656811\n1814538\n1814653\n5117400\n1819050\n1819145\n8407461\n6122092\n1820372\n1820406\n12253343\n5884571\n6097214\n4532544\n4532516\n4532532\n12089608\n10062933\n8148822\n6112449\n5115874\n5116698\n1788635\n4532412\n8000103\n4532534\n4532508\n1760246\n1821547\n1804182\n1812394\n8237987\n4532453\n1820039\n4687389\n1772822\n1777517\n1860987\n4522890\n1860765\n1831752\n5125075\n5123339\n5123419\n5123474\n1870450\n5125306\n1871212\n1871407\n4531402\n4531409\n1871451\n1871783\n4531427\n1872848\n1872901\n1873051\n1873079\n1873215\n4531237\n5125689\n1874280\n1875120\n1875827\n1875918\n1875958\n1876329\n1876542\n1877345\n9111961\n5126052\n1877941\n1877988\n1878067\n4531417\n1878470\n5884888\n4525884\n1940644\n1940717\n1940744\n4525777\n4525803\n12211069\n1939879\n1736623\n1737368\n1737526\n1737776\n1737847\n8186212\n1739833\n1740623\n8094357\n1741341\n1742185\n11846897\n1743898\n1744526\n1746832\n5104442\n5104597\n1920851\n1920864\n1921044\n10581870\n10825466\n1921150\n10556522\n1921466\n7387466\n1922244\n1922288\n10384044\n10442031\n9904499\n1922311\n1922343\n8016522\n1922572\n1922584\n4535092\n1922689\n1923019\n5138298\n5138543\n5714680\n1923650\n1924077\n1924097\n5138681\n10656713\n1924713\n1925233\n1925381\n1925454\n1925609\n1925918\n1925962\n9816676\n1926324\n1926448\n1926546\n1926550\n1926722\n1926861\n5882965\n7680748\n1928248\n5139040\n5139050\n5139156\n5139201\n1928754\n1928960\n1929270\n1929402\n1929659\n1929697\n5139339\n8356768\n1930110\n1930904\n1930916\n4535106\n1931179\n1931509\n1931779\n1932166\n1932172\n1932411\n1932752\n1932976\n5806412\n4535162\n5140214\n5140244\n5140436\n5140443\n7634721\n7664111\n1933583\n1933647\n1933649\n1933793\n1934192\n1926260\n10879371\n11874998\n1933095\n1933138\n1924494\n5105339\n1919181\n1919221\n1919223\n1919320\n1919333\n1919346\n1919348\n1919706\n1919712\n1919716\n1919966\n5137748\n1920181\n1920237\n1920247\n1920258\n1920259\n5137790\n5137849\n1920349\n1920356\n1920357\n1920362\n1920369\n1920374\n1920395\n1920491\n1920496\n1920502\n1920506\n1920512\n4535307\n5137891\n5805036\n5137902\n5137903\n1920707\n1920709\n1920712\n5137578\n5137605\n5137612\n5137663\n5137682\n5137706\n8203812\n1920218\n7207679\n1954490\n1954563\n5143380\n5143651\n1955694\n1955856\n1956440\n4525068\n1957266\n1957300\n1957572\n1957579\n1957583\n1957611\n1957718\n1957852\n1959395\n1959461\n1959682\n1960002\n1960484\n1960617\n1961013\n1962268\n1962636\n4302252\n1963168\n1963306\n1963710\n1964471\n1964637\n1965197\n1965913\n1967003\n1967006\n1967011\n1967265\n1967873\n11598540\n1968990\n1969463\n5144677\n5144782\n5144805\n5144880\n5144900\n5145186\n5145255\n5145502\n5145522\n8014296\n1971847\n5146476\n5146599\n5146601\n5146677\n5146762\n5146833\n5146837\n5146894\n5147030\n5147043\n5147062\n5147150\n5147171\n5147232\n5147354\n5147415\n5147441\n5147516\n8366158\n5147681\n1977068\n1977962\n4524638\n1980521\n1981998\n1983525\n1984033\n1984734\n1984942\n1985573\n1985760\n1986157\n9137631\n1987744\n4524221\n1989428\n1990582\n5149474\n1991371\n1992066\n5880550\n7429212\n9414984\n1989594\n4524998\n4525034\n4524376\n4524712\n4523522\n4523519\n4525078\n9220953\n9249651\n5149659\n5149768\n5149787\n7443518\n1942769\n4689929\n5141677\n1943236\n1943397\n8178854\n8277078\n8073674\n8273661\n1944504\n1945569\n1945589\n1945605\n1945877\n1945878\n1946661\n1946695\n7389824\n1947117\n1948941\n5142338\n5142352\n1949784\n1949794\n1949850\n1949877\n1949929\n5142599\n8109173\n1950156\n5977247\n8270406\n7633472\n4535396\n5142032\n1759079\n1759083\n1759153\n1760593\n1794361\n1760857\n1760891\n4533255\n1761438\n1761735\n1762680\n5109646\n5109661\n1764174\n1765017\n4534245\n4534252\n5109843\n5109855\n5109931\n8352161\n1765767\n1765954\n1766137\n1766210\n1766646\n1767511\n1767625\n1767674\n5772169\n5772171\n5772172\n5772176\n5772178\n5772186\n5772199\n5772206\n1768117\n5110213\n1769057\n1770353\n1770477\n4532696\n1772013\n8222049\n1776619\n1777253\n5110818\n1778074\n5111481\n5111513\n5772222\n1779641\n1780378\n4533325\n1782560\n1782672\n1782726\n1782948\n1783043\n5112283\n5714973\n5772349\n1783971\n1784349\n1784853\n1785185\n4532890\n1785361\n1786360\n1786619\n1786664\n1787064\n1787279\n1787610\n1787825\n1788522\n4534011\n1789071\n1789076\n1789086\n4534166\n1789695\n1789730\n1789745\n1789753\n1789755\n1790153\n4533115\n1792061\n1792418\n1792768\n1792996\n7918000\n1795068\n1795215\n7922810\n1795900\n1796169\n4532700\n1796451\n6097260\n4532811\n4534538\n4533125\n5883985\n8021109\n7654770\n6116899\n5114198\n1763072\n5772063\n9038042\n4534675\n4534681\n4534683\n8108800\n1771650\n1770772\n1770821\n1771040\n1771245\n4533714\n1765751\n5113847\n5113853\n5772309\n5108660\n5108761\n4532203\n4532206\n4532236\n4532260\n4532266\n8363507\n1822610\n1822796\n1823726\n1824113\n1824117\n1825077\n4534909\n4534914\n1825156\n5118904\n5118996\n5119245\n1892554\n1892555\n5806166\n1893137\n1893558\n1894268\n10398658\n1894714\n4535632\n4535636\n8049830\n10639484\n1894840\n4535809\n1896915\n1898286\n4299368\n5129293\n7346344\n1898521\n1898544\n1899071\n1901850\n5130392\n5130464\n5130471\n5130542\n8140883\n8189761\n4535689\n6221746\n1905383\n1906552\n8208583\n4535754\n5881946\n10656625\n1909398\n1909838\n1911298\n1911300\n1911461\n7728366\n5133687\n1911633\n4535596\n7809779\n8078362\n5133693\n1912395\n4299535\n5133990\n5772890\n4535581\n5134098\n5134301\n8312017\n1913175\n1913178\n1913328\n5135191\n8233062\n8314088\n11372793\n5136306\n1916376\n1916410\n1916412\n1918497\n1918667\n1918736\n1918776\n1918789\n1918843\n1918854\n8035998\n11645316\n4535618\n4535620\n4535510\n5130587\n7762841\n5131096\n8001799\n7642610\n5135513\n5135546\n1896957\n5129091\n9087922\n8138711\n1910628\n1899349\n1899433\n1899818\n5129913\n7934873\n8168644\n8393082\n5142870\n1952062\n1952816\n1941864\n1842097\n4301036\n8292351\n5101394\n1730978\n1731263\n1731598\n1878862\n1878895\n1878904\n1879001\n1879227\n1879408\n1879452\n1879471\n1879765\n1880907\n1880931\n1881126\n1881151\n9819403\n1881362\n1882210\n1882965\n1883067\n1883386\n1884465\n1884774\n1885937\n1886084\n1886088\n1886251\n1886587\n7562564\n4531670\n1888346\n10922411\n1888484\n1888579\n1888619\n1888759\n1889287\n1890187\n1890320\n1890534\n1890576\n1890670\n1890772\n1890776\n1890898\n1891129\n1891167\n1891177\n1891190\n1891217\n1891326\n1891386\n1891494\n4532022\n4532024\n1892242\n1892245\n1892476\n9674732\n1884255\n1884403\n5771877\n6133232\n5126680\n1889833\n5127656\n6121184\n4532150\n4532160\n5771880\n1831136\n1854615\n1858674\n1859046\n1973467\n5123221\n1867928\n1861494\n1861510\n1861644\n1861673\n1861797\n1861842\n1862293\n1862401\n1862517\n1862580\n1862692\n1862719\n1862765\n1862774\n5123922\n5124007\n1864161\n1864358\n1864652\n1993419\n5106115\n5106249\n5107076\n5107219\n7410701\n7674502\n7903078\n8201251\n8426357\n4522753\n1856289\n5122798\n1857581\n1857626\n1857829\n1858283\n1938069\n1938125\n1938131\n8225376\n1936969\n1938214\n1938520\n1938810\n5141262\n5141291\n5141305\n1835031\n5770913\n1841159\n5114409\n4534796\n1801051\n4534776\n4534779\n4534788\n9894093\n1802280\n1803060\n4534769\n", + "regions/new_zealand.classes": "1831999\n1832649\n1849007\n1849010\n1850156\n1850184\n1850781\n5806361\n11528968\n1851347\n1829776\n1829814\n4705103\n4695719\n1828395\n1828400\n1828402\n8150089\n1828426\n1828826\n1845965\n1830812\n1831473\n1831499\n1831565\n1831667\n4708342\n1761751\n1761752\n1762849\n1780857\n1798023\n5113950\n1803197\n5115777\n1816110\n1816264\n1781413\n9400916\n5113036\n4687389\n4529064\n1837724\n1837726\n1837727\n1839714\n1840346\n1841095\n1831752\n1852832\n5123339\n1870703\n1870988\n1872735\n1872827\n1872901\n1873079\n1874146\n1875534\n1876542\n10142569\n1877453\n1877988\n1878470\n1878490\n1890056\n1890065\n1836907\n1940575\n1736623\n1737131\n1737847\n1737893\n1738045\n1738081\n1739128\n1739220\n1739553\n1739567\n1743182\n1743184\n1743319\n4707896\n4707900\n1744998\n1745307\n1746462\n1746512\n1747068\n1747215\n1747222\n1747814\n1748103\n1748425\n1748518\n1748648\n1748661\n1738196\n1924713\n5139357\n5139524\n5139673\n11636481\n1932563\n7346444\n1920496\n1749531\n1749664\n1750131\n1750326\n5104903\n1954236\n1954514\n5143586\n1955271\n1955272\n1955413\n1955416\n1955422\n1955753\n1955755\n1955763\n1955899\n1956416\n1959379\n1960004\n4702961\n1962656\n1962657\n1962659\n1962689\n1964137\n1964141\n1964143\n1964144\n1964151\n1964153\n1964155\n1964158\n1964174\n1966978\n5144554\n5144558\n1970145\n1970148\n1970150\n5144937\n4702783\n4702784\n1972797\n1972800\n1972806\n5146856\n1976933\n1976934\n1976939\n1976941\n5148096\n1977759\n1977764\n1977767\n1977773\n1978274\n1978281\n1978282\n1978283\n4702599\n4702603\n4702609\n1980055\n1980063\n1980068\n1986101\n4702731\n1987855\n4702892\n4702893\n4702911\n4702912\n1988894\n1989282\n1989377\n1992167\n1954338\n1954344\n1954346\n1954351\n1954353\n1954356\n1954359\n10263383\n1758727\n1760173\n1762902\n5109882\n5802396\n1768546\n1768554\n1768557\n1768560\n1769302\n4688049\n9493016\n1776182\n5111195\n1785145\n1785149\n1785314\n1785329\n5112457\n5112460\n5112461\n5112464\n5112465\n5112467\n5112469\n5112474\n5112475\n5112480\n5112481\n1787165\n1791793\n1791862\n1794425\n1795068\n10690739\n10700540\n10706419\n10716234\n10732033\n10741837\n10747908\n10799294\n10814936\n10824750\n10840540\n10840565\n10850393\n10850415\n10866199\n10891794\n11539735\n11858666\n1796791\n1798084\n1792560\n8108800\n1770849\n1771245\n1771296\n1894054\n7712938\n5806175\n5806176\n5806177\n1902106\n1902108\n1909216\n1908108\n5133088\n7642610\n1910629\n1853190\n1735168\n1735391\n1735398\n5102432\n5120675\n5121177\n5121613\n8273859\n1842119\n1842124\n5120396\n1842508\n1879405\n10851840\n10857326\n5126231\n5126240\n5126241\n5126259\n5126284\n5126287\n5126292\n5126315\n5126332\n5126344\n5126357\n5126381\n5126396\n5126397\n5126398\n5126434\n5126445\n5126449\n5126454\n5126458\n5802331\n5802333\n1880353\n1880439\n1881122\n1881132\n1881157\n1881504\n1882297\n1882355\n5126866\n5126870\n5126889\n5126905\n5126916\n5126946\n5127024\n5127045\n5127054\n1882905\n1882965\n1884503\n1884539\n1884595\n1884607\n1884610\n4687228\n1884936\n1886251\n1887580\n1887686\n1888958\n1892462\n6133232\n5802339\n10245924\n10769553\n1887126\n1880275\n1880286\n1880293\n1880305\n1880310\n1880316\n1880318\n1880321\n1880350\n1831097\n1831136\n4708183\n10546013\n11428453\n1854028\n1854249\n1854906\n1858674\n1858762\n1859061\n4536292\n9590272\n9801765\n5123118\n5123137\n5123276\n1861644\n1992976\n1757853\n8254441\n1856005\n5122779\n1856348\n1856374\n1856516\n1857143\n1857180\n1857213\n1857233\n1857241\n1857295\n1857385\n1857410\n1857626\n1857829\n1857882\n1857900\n1857935\n1858100\n1858523\n1858526\n1856893\n1838289\n1838304\n1838308\n1838331\n1833518\n1833523\n1833525\n1833531\n1833532\n1833535\n1833539\n1833600\n1833664\n1835082\n1836871\n1836899\n1837172\n1837572\n1837857\n1837870\n1837894\n1838626\n1838629\n1838633\n1838635\n1838641\n1838649\n8958353\n1838960\n4528702\n1839370\n1841180\n1841183\n1841188\n1841215\n1841219\n1801432\n", + "regions/north_africa.classes": "1733755\n1734704\n11529292\n1845270\n9868978\n1850640\n1850781\n1845952\n4532500\n1783882\n1786980\n1786985\n1788553\n1790692\n1792210\n1797542\n4532473\n1798481\n1798504\n1798802\n4532352\n1803148\n1803163\n1805110\n5117189\n1814552\n9331464\n1819928\n8148822\n1780869\n4532453\n1777517\n1860857\n1871252\n1871783\n7673242\n1872901\n1873079\n1873215\n1875409\n1875687\n1876542\n9111961\n5126052\n4531417\n5884888\n1941330\n10309794\n1736623\n1739833\n10581870\n1922572\n1924082\n10656713\n1924713\n1925918\n1926324\n1926385\n1926546\n1926550\n1929697\n1930904\n1930916\n4535106\n1931788\n1932393\n1932411\n1932752\n1932976\n9954885\n1933647\n1933649\n1926166\n1933204\n1919223\n1919333\n7981372\n1919346\n1919703\n1919966\n1920258\n5137790\n1920359\n1920369\n1920395\n1920496\n1920506\n1920709\n5137612\n1920218\n1955694\n1957266\n1957286\n8172949\n1961013\n1964195\n1964836\n1967025\n1967265\n1969958\n5144805\n5144900\n5145502\n5145842\n8014296\n7996464\n5146611\n5146774\n5146837\n5147039\n5147043\n5147354\n5147395\n5147415\n5147437\n5147441\n5147478\n5147560\n5148264\n1983039\n1983062\n1983525\n1983528\n1985742\n4525093\n6118530\n1988019\n1988064\n1992066\n11654024\n7507369\n1989594\n4525034\n4524541\n9220953\n5149787\n8277078\n8073674\n1946661\n5142338\n1949954\n4534275\n5109843\n5109931\n8352161\n5772171\n5772172\n1775329\n5110858\n5772222\n1785185\n1786360\n1787770\n4534166\n4534194\n1792418\n1795068\n4532908\n1795483\n4532811\n1763072\n4534675\n4534681\n8108800\n1770821\n1771040\n4533714\n1765751\n4532203\n4532206\n4532266\n1824131\n5118892\n4535632\n8049830\n4535809\n4535819\n4299368\n1901850\n5130542\n1911461\n5134098\n5134301\n1916352\n1916554\n1918632\n1918776\n7988274\n8404037\n7762841\n7642610\n1896957\n1899737\n7934873\n8393082\n1879001\n1879408\n1879427\n1879452\n1879471\n1879691\n1881126\n1881151\n9819403\n1881362\n1882905\n1882965\n1885931\n1886251\n7562564\n1888484\n1890534\n1890898\n1891171\n1891217\n1892476\n1889833\n6121184\n8218441\n4532150\n4532160\n1831136\n1861494\n1861510\n1862293\n1862401\n1862692\n1862765\n1864652\n7761138\n1857581\n8225376\n4690079\n5141297\n4534796\n1803060\n", + "regions/north_america.classes": "12170988\n1934991\n1935301\n5140969\n5140980\n1936378\n1936388\n10331171\n1868535\n10100176\n10517417\n1992315\n1860664\n1860736\n5101556\n5101559\n1732717\n1732901\n1733525\n5101763\n5101811\n5715280\n5715281\n1734384\n5102304\n5102324\n5102335\n5102365\n5102396\n1833475\n4302388\n1845270\n1845279\n1845314\n1845329\n1845335\n1845385\n1845442\n1845448\n1845455\n1845502\n1845513\n1845604\n1845605\n1846313\n1846351\n1846439\n5121847\n5121850\n1846849\n1846860\n1846914\n1846941\n1846945\n1846971\n1846992\n1847013\n1847059\n1847064\n1847068\n1847111\n1847149\n1847225\n1847249\n1847274\n1847308\n1847343\n1847392\n1847407\n1847426\n1847457\n1847484\n1847498\n1847568\n1847572\n8559137\n1847919\n1847930\n1847944\n10427568\n1848114\n1848259\n1848272\n1848274\n1848295\n1848312\n1848322\n1848325\n1848490\n1848505\n1848610\n1848639\n1848730\n1848864\n9973217\n1849294\n1849457\n1849470\n1850045\n1850156\n1850184\n1850225\n1850321\n1850575\n1850585\n1850589\n1850597\n1850673\n1850690\n1850722\n1850729\n1850771\n1850773\n1850774\n1850781\n1850798\n1850868\n1850884\n1850908\n1850922\n1850923\n1850962\n1850971\n1851002\n1851011\n8986624\n5122062\n5122086\n5122121\n5122131\n1851213\n1851237\n1851243\n1851300\n1851337\n1851347\n1851453\n1851462\n1851670\n1851714\n1851750\n5122206\n1851828\n1851845\n1852165\n1852320\n1852382\n9123440\n1848212\n1848213\n1848920\n1849498\n11430021\n1829533\n1829659\n1829612\n1829799\n8779506\n10508467\n12031071\n11642411\n1829021\n1829029\n10053809\n10176413\n10067382\n5879654\n1835460\n1845793\n1845866\n1845962\n1846035\n1846052\n9159662\n1846505\n10594478\n8503184\n1834710\n1841261\n5119890\n1830843\n1830125\n1830137\n1830191\n1830194\n1830202\n1830203\n1830229\n1830241\n1830243\n1830284\n1830293\n9998920\n5110390\n1758860\n1758861\n1758866\n1760384\n1760385\n1760396\n1760397\n1760398\n1760400\n5108951\n1760927\n1761101\n1761102\n1761110\n1761838\n1762151\n1762286\n9553692\n1762474\n8331687\n8379616\n9354496\n9546910\n1763163\n1763184\n1763199\n1763223\n1763256\n1764525\n1765097\n1765182\n5110044\n1766839\n1766845\n1766880\n1767031\n1767320\n1767499\n1767508\n9384861\n1768283\n1769000\n1769336\n1769841\n1770038\n1770044\n1770263\n1770380\n1770383\n1770384\n1770385\n11728240\n7396517\n5110297\n5110299\n5110305\n8963926\n9256436\n9279670\n9283228\n9323382\n9327042\n9395422\n9399145\n9440644\n9560782\n9564612\n9607447\n9636442\n1771846\n1771848\n1771859\n5110326\n5110327\n1772260\n1772427\n1772428\n1772716\n9237599\n9424441\n9534690\n5110492\n5110533\n1774907\n9287097\n1775980\n1777024\n1777034\n1777052\n1777075\n8345991\n1777179\n9257908\n1777737\n1777942\n5110891\n1778548\n1778549\n1778551\n1778555\n9423248\n9610080\n1779740\n1780150\n1781029\n1781038\n7672864\n9305011\n9390065\n9630748\n1781944\n1781946\n5112051\n5112053\n5112060\n5112068\n5112078\n5112080\n9008379\n1782208\n1782214\n8384839\n1783365\n1785913\n1785916\n9520799\n1786219\n1786247\n7480993\n1786912\n1786913\n1787106\n1787464\n11495556\n5112542\n1788278\n11890681\n10295290\n7346446\n1788891\n1789190\n1789191\n1789193\n5112626\n1789794\n1790230\n1790240\n1790246\n1790248\n1790257\n1790258\n1790268\n1790274\n1790281\n1790287\n1790308\n5112798\n1790692\n1790787\n1790832\n1790937\n1790945\n7785540\n9345545\n5112843\n1791151\n5112892\n5112900\n5112908\n5112911\n5112915\n5112917\n5112923\n5112927\n5112940\n5112944\n5112947\n5112959\n5112960\n5112961\n5112963\n5112968\n5112990\n1791372\n1792276\n9382044\n1792831\n1793566\n1794518\n10850929\n1795042\n1795045\n1795049\n9340452\n9622322\n1796257\n1796288\n1796338\n1797111\n1797121\n1797122\n1797135\n1797137\n1797146\n1797194\n1797198\n1797206\n1797210\n1797218\n1797252\n1797257\n1797275\n1797285\n1797290\n1797296\n1797300\n1797339\n1797365\n1797373\n1797375\n1797379\n1797394\n1797409\n1797432\n1797433\n1797436\n1797440\n1797445\n1797464\n1797474\n1797475\n1797478\n1797488\n1797507\n1797521\n1797556\n8874140\n9022399\n9236138\n9240357\n9252524\n9273409\n9289908\n9310510\n9312545\n9340070\n9344456\n9350484\n9367471\n9406020\n9410076\n9416645\n9455404\n9468297\n9483647\n9547311\n9549475\n9554074\n9560404\n9604825\n9607036\n9611624\n9618068\n9622725\n5113950\n7598729\n1798393\n1798402\n1798427\n1798449\n4532352\n8150450\n8793873\n9238900\n9243875\n9292394\n9314022\n9353360\n9358521\n9425857\n9499599\n9527919\n9533271\n9545713\n9579730\n9608673\n9621113\n9626500\n1799183\n1799703\n9249036\n1803127\n1803218\n10033898\n5114892\n5114903\n11713970\n5114923\n5114930\n5114934\n5114946\n1804071\n1804074\n1804331\n1804394\n1804398\n1804401\n1804404\n1804407\n1804409\n1804512\n1804513\n5115046\n1804759\n11508076\n11907485\n1804963\n1804969\n1804971\n1804974\n1805197\n1805537\n1805540\n1805542\n1805549\n1805682\n1805691\n1805938\n1805955\n1806145\n1806170\n1806176\n1806687\n1806690\n1806702\n1806737\n1806740\n9235225\n9278398\n9394138\n9417594\n9491341\n9541734\n9565980\n9588105\n1806872\n1807271\n1807273\n5115500\n1807514\n1807881\n1808088\n1808590\n1808592\n1808752\n8929537\n1809066\n5115777\n1809127\n1809135\n9463067\n1809294\n1809299\n1809305\n1809348\n1809499\n1810025\n1810121\n1810469\n5116128\n5116134\n5116145\n5116293\n1810743\n1810846\n9389851\n7535515\n1811019\n1811079\n1811122\n1811439\n5116332\n5116338\n5116353\n5116358\n5116423\n1813248\n1814182\n1814336\n1814338\n1814357\n1814359\n1814365\n1814800\n1814827\n1814838\n1814843\n1814863\n5117414\n9434954\n5117430\n5117462\n1816570\n5117685\n1817086\n1817690\n1817693\n1817696\n1817727\n1817729\n1817732\n1817734\n1817749\n1817797\n11725616\n1817864\n1817940\n5118046\n11758730\n1818454\n1818463\n1819310\n1819873\n5118327\n5925317\n8720118\n9391467\n9568710\n1820406\n1820711\n1820714\n1820722\n1820764\n1820791\n1820940\n1821051\n1821113\n8178238\n10551407\n11873825\n8872165\n9288386\n9291075\n9362560\n9480768\n9601788\n9400545\n10395440\n8774985\n8908724\n9135886\n9247563\n9288596\n9290866\n9315577\n9334851\n9406984\n9432644\n9452274\n9526331\n9552703\n9555094\n9599150\n10214972\n10851228\n12194283\n5115854\n5115874\n9530200\n9359871\n9379595\n9387353\n9407200\n9432438\n9452497\n9460510\n9498206\n9552466\n9627917\n5114949\n5114950\n5114956\n8429622\n1788711\n1788717\n7560807\n9301336\n5114912\n5114915\n5114921\n1781413\n1781420\n9446902\n1796523\n8805966\n8905759\n9051758\n9254017\n9298735\n9324570\n9368974\n9443159\n9469928\n9488783\n9637664\n1793538\n1793542\n1813468\n1813413\n1813415\n1760233\n1760257\n9235027\n9522383\n8177591\n5109796\n1821856\n1775796\n1811814\n1811948\n1812026\n1812105\n1812207\n1812262\n1812339\n5884258\n7716829\n8299504\n8968321\n9451320\n1820039\n1784959\n1785024\n1785072\n5884188\n6117485\n7611914\n7924383\n1780617\n1780646\n1780668\n1780676\n1777463\n1777471\n5112440\n1791735\n1791736\n1860974\n1860989\n1860993\n1860996\n1861030\n7472845\n1852956\n1852978\n1835430\n1835436\n1835438\n1835449\n1835451\n1835467\n1835819\n10610041\n1837360\n1837420\n4529064\n10017792\n1838360\n1838465\n1838512\n1838584\n1839296\n1840311\n1840346\n1840360\n1840379\n1840441\n1840448\n1840485\n1840520\n1840543\n1840553\n1840592\n1840656\n1841081\n1841084\n1841091\n10187154\n1831752\n9473121\n1852901\n9851261\n1751299\n1751336\n1751400\n1860184\n10165831\n1860443\n10308365\n9913863\n5123394\n5123419\n5769164\n5123461\n1735408\n4302389\n8797666\n1869666\n1869825\n1869852\n1870017\n1870037\n1870202\n1870250\n1870267\n1870308\n1870415\n1870426\n1870450\n1870607\n1870721\n1870727\n1870733\n1870751\n1870777\n1870988\n1871175\n1871379\n10246305\n10588642\n10817208\n1871407\n8766638\n9944922\n1871414\n1871419\n1871457\n1871509\n1871560\n1871597\n1871698\n1871763\n1871890\n1871923\n1871940\n1872200\n1872210\n10336328\n1872452\n1872456\n1872466\n1872514\n1872515\n1872873\n1872901\n1873051\n1873079\n1873267\n1873319\n5125545\n10807383\n1873376\n1873381\n1873383\n1873384\n1873398\n1873585\n7372375\n1873753\n10143814\n10165457\n10366580\n10410048\n10518163\n10561589\n9971850\n1874158\n1874160\n1874179\n1874248\n1874257\n1874274\n1874279\n4531145\n1874317\n1874513\n1874552\n10244305\n1874901\n1875196\n1875319\n1875407\n1875451\n1875478\n1875483\n1875485\n1875606\n1875607\n1875631\n1875914\n1876409\n1876542\n1876548\n1876549\n1876665\n1876987\n10142569\n1877002\n5125916\n5125917\n1877282\n1877321\n1877338\n1877353\n1877364\n1877365\n1877372\n1877443\n1877492\n1877537\n5125939\n1877643\n5126000\n5126013\n1877940\n1877941\n1877975\n1877988\n1877995\n1878158\n1878370\n1878392\n1878490\n5976937\n5884888\n1875885\n1873697\n5143284\n5143285\n11950325\n12018158\n12060941\n12087490\n1939962\n1939964\n1940110\n11667300\n5131957\n5141493\n5714558\n5714572\n5714575\n5714600\n10267561\n10286565\n10451589\n10509408\n1940517\n1940546\n1940575\n1940580\n1940601\n1940604\n1940609\n1940612\n1940694\n1940744\n1940757\n4525777\n8956729\n9930604\n10402067\n1941310\n1941437\n10495733\n10584071\n12252570\n1941266\n1941294\n1941299\n1939833\n1939879\n9146244\n1736315\n1736390\n10132596\n11645405\n1736499\n1736623\n10274976\n5102635\n5102637\n5102651\n5102666\n5102668\n5102671\n5102678\n1736760\n10355428\n1736803\n1736807\n1736809\n1736811\n1736821\n1736826\n1736836\n1736860\n10638589\n1736915\n1736918\n1736937\n1736939\n1736995\n1737015\n1737072\n1737131\n1737231\n1737374\n1737403\n1737417\n1737491\n4530608\n7350238\n7466487\n1737526\n1737542\n1737544\n1737551\n1737552\n1737753\n1737768\n1737847\n1737904\n1737929\n1737964\n1737968\n1737973\n1737978\n8485254\n1738218\n10090105\n10370026\n1738422\n5102693\n5102735\n5102773\n5102782\n5102807\n5102809\n5102830\n8420632\n9953996\n5102931\n1738700\n1738791\n1738794\n1738809\n1738839\n1738888\n1739034\n8086347\n1739272\n1739284\n1739290\n1739362\n1739364\n1739381\n1739400\n10596756\n1739612\n1739617\n1739629\n1739646\n1739656\n1739668\n1739677\n10229731\n1739727\n1739767\n1739770\n1739833\n1739867\n1739884\n1739922\n1739924\n1739927\n1739954\n1739956\n1739964\n1739973\n1739983\n1740003\n1740037\n1740060\n1740069\n1740116\n1740120\n1740133\n1740148\n1740155\n1740163\n1740225\n1740246\n1740305\n1740370\n1740389\n1740392\n1740400\n1740449\n1740533\n8094357\n1741056\n1741130\n1741131\n1741324\n1741361\n1741368\n4530151\n1741398\n1741400\n5103066\n5771357\n10709446\n10776625\n10869347\n1741633\n1741719\n1741747\n1741812\n1741818\n1741820\n1741823\n1741824\n1741826\n9880932\n1742081\n1742089\n1742091\n1742106\n1742121\n1742150\n1742168\n1742178\n1742180\n1742198\n1742203\n1742214\n1742239\n1742241\n1742260\n1742263\n1742268\n1742272\n1742273\n1742287\n1742293\n1742304\n1742310\n1742335\n10000103\n10044107\n10137001\n10194727\n10395101\n10695966\n11508404\n11899754\n5103394\n5103451\n9849625\n9885192\n10534945\n1743323\n10095278\n10134865\n11923027\n1743461\n10073044\n10295171\n10365884\n10388627\n10446580\n10539598\n12197284\n5104063\n5104088\n5104093\n5104116\n9051888\n9958147\n9971153\n1743653\n1743657\n1743658\n1743663\n1743694\n1743768\n1743825\n1743828\n1743838\n1743855\n1743898\n10205587\n10450442\n1744071\n10271464\n1744130\n1744136\n5104157\n1744212\n1744416\n12276630\n9860684\n9953708\n1744700\n1744709\n1744724\n1744731\n1744949\n1744953\n1745022\n10483734\n1745558\n1745606\n1745634\n1745666\n1745669\n1745675\n1745724\n1745729\n1745746\n1745756\n1745761\n1745787\n1745814\n1745830\n9991710\n1746000\n10593489\n1746068\n1746586\n1746666\n1746695\n1746751\n1746754\n1746763\n1746774\n1746775\n1746831\n1746856\n1746859\n1746876\n1746881\n1746898\n1746927\n1746949\n4302199\n4302202\n1747024\n1747140\n1747147\n1747150\n1747155\n1747160\n1747161\n1747163\n1747166\n1747171\n1747188\n1747189\n10046698\n10442122\n12066849\n12107129\n12126779\n1747196\n9040133\n9896144\n10380465\n10445629\n10446898\n10481441\n10503464\n10547716\n10776919\n12223349\n1747523\n1747738\n1747740\n1748109\n1748148\n1748149\n1748151\n1748152\n9176043\n10580256\n9911298\n9948031\n10002059\n8734154\n8843927\n10236521\n5103083\n5103100\n5103118\n5103154\n5103166\n5103183\n5103201\n5103227\n5771230\n5771232\n5771256\n9023222\n1743651\n10545267\n1831775\n10310599\n10346267\n4525540\n1935498\n4299071\n1920844\n1920889\n1920900\n1920923\n1921053\n10657453\n1921123\n1921239\n1921240\n1921247\n1921248\n1921255\n1921910\n8825450\n1922038\n1922039\n1922041\n1922044\n1922049\n1922219\n1922223\n1922455\n10278292\n1922676\n1922851\n1922865\n1922868\n1922889\n1922890\n1922937\n5138387\n5138602\n5714679\n5714689\n9002107\n1923498\n1923505\n8913017\n1923678\n1923679\n1924050\n1924106\n1924176\n12174634\n12185456\n12188086\n12205404\n12212066\n12222885\n12229400\n12233602\n12250854\n12257418\n12258984\n12265590\n1924223\n1924232\n1924513\n1924518\n1924521\n1924713\n8992718\n9157410\n1924770\n10120854\n1925429\n1925458\n1925498\n1925500\n1925501\n1925509\n1925515\n4300384\n4300393\n4300399\n8904480\n12195040\n1925918\n1925922\n4300000\n4300011\n4300012\n12219036\n1926001\n1926009\n11797637\n1926054\n4300259\n1926823\n1926834\n1926861\n1927301\n1927302\n5139026\n5139029\n5714747\n5714755\n5714788\n5139034\n1927909\n1927988\n1928009\n4300406\n1928214\n1928215\n8846776\n5139064\n1928584\n1928589\n1929046\n1929129\n11720834\n5139346\n5139540\n5139578\n5139700\n5714618\n1929772\n1929962\n1930079\n1930146\n1930167\n1930178\n1930179\n1930181\n1930183\n1930263\n1930270\n1930288\n1930289\n1930331\n1930361\n1930391\n1930410\n1930422\n1930481\n1930563\n1930581\n1930653\n1930660\n1930678\n1930728\n1930772\n1930830\n1931116\n1931119\n1931122\n1931126\n5139864\n1931310\n1931553\n1931784\n1931787\n5139897\n5139908\n5139909\n10113190\n10357476\n10570752\n11417741\n11802190\n1932056\n1932172\n1932175\n1932386\n1932406\n1932409\n1932414\n1932417\n1932428\n4300277\n4300363\n7346444\n1932576\n1932879\n5140033\n5140054\n5140063\n1933260\n1933998\n1935853\n1935872\n1935878\n1935884\n1935888\n1935899\n1935904\n1935912\n1935931\n1935935\n5139928\n4300268\n9469139\n9975698\n1752109\n1752111\n9776414\n1752281\n1752285\n1752286\n1752825\n1752832\n1752894\n1752923\n10376685\n1753105\n1753106\n1753111\n11507608\n5105365\n5105367\n5105369\n5105376\n5105447\n5105469\n5105491\n5105508\n11014495\n1753604\n1753668\n5105588\n1753833\n1753922\n1753929\n5105603\n10515719\n10413588\n10514620\n5105336\n5105344\n5105352\n5806127\n5137511\n5137512\n12181811\n12226416\n12251247\n1919125\n1919128\n1919130\n1919145\n1919149\n1919173\n1919235\n1919245\n1919282\n1919289\n5137540\n1919316\n1919326\n1919327\n1919328\n1919338\n1919646\n1919652\n1919653\n1919656\n4701298\n4701336\n7661785\n1919700\n1919701\n1919702\n1919705\n1919711\n1919719\n10703948\n1919939\n1919943\n1919947\n1919949\n1920192\n5137791\n5137800\n5137802\n5137803\n4701136\n5137817\n5137819\n5714819\n1920426\n1920461\n1920463\n1920496\n5137882\n5137890\n5137894\n1920552\n1920571\n1920574\n1920581\n1920691\n1920803\n1920809\n1920810\n5714914\n5137582\n5137595\n5137601\n5137615\n5137626\n5137636\n5137659\n5137664\n5137672\n5137674\n5137679\n5137689\n5137693\n5137694\n5137700\n5137711\n5137714\n12191141\n12206386\n12234544\n12236627\n1920621\n1748922\n1749050\n1749287\n1749713\n1749760\n1749929\n1749936\n5104815\n5104891\n5104903\n5104948\n5104986\n5105031\n5105057\n5105068\n5105120\n5105124\n9942354\n1750924\n1751146\n1751163\n1749591\n1749656\n8741260\n11840028\n1758461\n1731826\n1731862\n1992547\n1954930\n1954933\n1954992\n1954993\n1955497\n1955498\n5143657\n5143703\n1956098\n1956099\n1956215\n1956462\n1956505\n1956510\n1956597\n1956626\n1956716\n8793973\n1956904\n1957441\n1957845\n1957870\n8775810\n5143952\n1958049\n5143960\n5143964\n1958121\n1958528\n1959543\n1959637\n1959858\n1959890\n1959898\n1959917\n1959919\n1959934\n9320916\n1960090\n1960166\n1960255\n1960503\n1960632\n1960951\n4302240\n9468667\n1961361\n1961388\n1961718\n10650351\n1962051\n1962076\n1962118\n9368382\n9592714\n5144227\n5144318\n1962432\n1962434\n1962479\n1962490\n1962516\n1962722\n1962727\n9264326\n1962895\n1962900\n1962925\n4302252\n1963052\n1963201\n1963207\n1963212\n12214993\n1963433\n1963619\n1963633\n1963848\n1963854\n1963874\n1963879\n1963892\n1964041\n1964585\n8361848\n1964715\n5144424\n1965024\n1965038\n1965058\n1965069\n1965078\n1965100\n5880367\n6214734\n1965586\n1965671\n1965697\n1965699\n1965763\n1965794\n1965797\n1965805\n1965807\n1965823\n1965825\n1965831\n1965838\n1965861\n1965865\n1965887\n5144457\n1966088\n1966185\n1966195\n1966198\n1967127\n1967128\n1967212\n1967226\n1967240\n9277294\n9492499\n1967433\n1968205\n5144564\n5144575\n8793278\n1968313\n1968315\n1968321\n1968324\n1968538\n5144583\n5144588\n5144593\n5144596\n5144597\n1968942\n1969961\n1969978\n1970119\n5144729\n5144870\n5144935\n5144953\n5145078\n5145139\n5145238\n5145466\n5145521\n5145547\n5145560\n5145713\n7700568\n1971835\n1971995\n1971998\n1971999\n1972010\n1972101\n1972250\n5145998\n5146030\n5146082\n5146091\n1972447\n1972449\n1972454\n9558845\n5146179\n1972691\n1973146\n1973147\n1973164\n1973165\n1973245\n1973487\n1973493\n1973665\n10404426\n5146497\n5146598\n5146677\n5146820\n5146832\n5147018\n5147039\n5147114\n5147139\n5147179\n5147211\n9370933\n9469300\n9590066\n1975365\n1975607\n9477531\n1975741\n5715277\n5715278\n1975897\n1975914\n1976073\n8793324\n1976248\n1976333\n8820198\n5147703\n5147713\n1976651\n1977003\n1977007\n1977054\n1977068\n5147827\n5147838\n5147858\n5147868\n5147871\n5147879\n5147883\n5147894\n5147898\n5147899\n5147909\n8951618\n5148184\n9617496\n1978445\n9308082\n1978464\n1978493\n1978494\n1978526\n1978671\n9243264\n1978751\n5148277\n5148280\n5806132\n1978958\n1978959\n1978977\n1979255\n1979289\n1979344\n1979358\n1979380\n1979427\n1979430\n1979473\n1979475\n1979501\n1979721\n1979726\n1980025\n1980245\n1980247\n1980250\n1980290\n5148379\n5148462\n1980505\n1980509\n1980559\n8421569\n1981144\n1981160\n1981161\n1981162\n1981191\n1981202\n1981209\n1981210\n1981222\n1981252\n1981258\n1981277\n1981280\n1981281\n1981284\n1981312\n1981718\n10247981\n1981951\n1981959\n1981973\n5148520\n1982406\n1982447\n1982533\n1982613\n1982746\n1982780\n1982824\n1982898\n1982951\n1983260\n1983263\n1983434\n1983441\n1983491\n1983705\n1983709\n1983799\n1983896\n1984073\n1984110\n9577547\n5148531\n5148544\n5148576\n9237621\n9307713\n9370312\n9424464\n9488754\n9544337\n9610059\n5148719\n5148743\n5148753\n5148766\n5148850\n5148934\n5148952\n5148954\n1984654\n9382415\n1984942\n1985405\n1985406\n1985409\n1985421\n1985423\n9332369\n1985485\n1985487\n5149222\n5149237\n1985945\n1985952\n1985956\n1986004\n1986020\n1986040\n1986091\n1986113\n1986171\n1986192\n1986367\n1986497\n1986623\n1986807\n1986906\n5149307\n1986998\n4302274\n5149317\n1987145\n1987146\n1987301\n1987330\n9538525\n1987633\n4524223\n1988495\n1989083\n1989084\n1989538\n1989582\n1989903\n1990155\n1990198\n1990200\n1990270\n1990331\n1990335\n1990357\n1990594\n1990998\n1991012\n1991280\n1991281\n1991289\n1991294\n1991295\n1991298\n1991299\n1991303\n5149630\n5149631\n1991371\n1991429\n1992172\n12010643\n12225687\n5880539\n5880552\n5880559\n5880563\n7657419\n8941993\n9110918\n9243319\n9251088\n9259786\n9261296\n9272461\n9311081\n9330467\n9339487\n9366016\n9368398\n9392058\n9392076\n9400977\n9402536\n9413168\n9419734\n9428900\n9438677\n9454444\n9456004\n9474405\n9489399\n9502724\n9530135\n9532702\n9558873\n9574939\n9616438\n9624918\n9632824\n5144381\n5144386\n5144407\n9533293\n4302221\n9621086\n4302230\n4523560\n9281181\n9352348\n9352978\n9403481\n9436173\n9448761\n9453490\n9494431\n9516038\n9516680\n9523379\n9534291\n9545331\n4524072\n9288979\n9307098\n9423863\n9497623\n9581695\n9619088\n9273963\n9479525\n9237031\n9274899\n9321500\n9299326\n9309575\n9415669\n5144196\n5715276\n5715275\n10221195\n1978197\n9363893\n9391442\n4523885\n5149713\n5149753\n5149777\n5149782\n5149811\n5149819\n5146305\n5146326\n5146389\n1980462\n1972942\n4302268\n9256786\n9291092\n5150027\n12200261\n11470872\n11654707\n11776315\n11834445\n11892494\n12252926\n11423843\n11670842\n12173621\n12247340\n12252340\n12239491\n12258146\n1942141\n1942170\n1942171\n12286003\n1942341\n1942416\n1942455\n1942509\n4301744\n4301749\n1942558\n1942670\n5141662\n1942945\n1942947\n1942964\n1942967\n1942971\n1942980\n1942982\n1942994\n5141697\n1943054\n1943066\n4302008\n5141743\n5141763\n1943563\n1943571\n1943573\n1943588\n4301355\n1943631\n1943655\n1943673\n1943823\n1943824\n1943830\n1943832\n1943901\n12198522\n12233808\n1943942\n1943953\n1943954\n1943960\n1943962\n1943964\n1943990\n1944004\n8133678\n1944273\n1944275\n1944283\n1944286\n1944314\n1944324\n1944329\n1944335\n1944343\n1944361\n1944574\n1944769\n4301934\n1944798\n1944815\n1944832\n5141913\n9551544\n1945081\n1945302\n1945312\n1945462\n1945476\n1945477\n1945605\n4301942\n1945957\n1946074\n1946078\n1946079\n1946163\n1946177\n5142061\n5142062\n1946310\n1946327\n1946333\n1946469\n12223105\n12233838\n1946495\n1946500\n1946509\n4302101\n1946544\n1946550\n1946577\n1946582\n1946610\n1946612\n1946618\n1946628\n1946737\n5142086\n1946810\n1946853\n1946865\n1946901\n11753578\n1946980\n1946981\n1946983\n1946989\n1946991\n1946992\n1946995\n1946999\n1947037\n1947055\n1947147\n1947282\n1947333\n1947335\n5142166\n5142175\n1947402\n1947507\n1947568\n1947577\n1947587\n1947588\n1947597\n1947842\n1947894\n1947915\n12208168\n1947973\n1947976\n1947979\n1947980\n1948042\n1948054\n1948158\n7603634\n1948439\n1948446\n1948521\n4301945\n1948826\n1948865\n1948890\n1948947\n1949049\n12353663\n1949285\n1949322\n1949331\n1949449\n1949451\n1949466\n1949492\n10574663\n1949512\n1949515\n1949520\n1949544\n1949545\n1949549\n1949592\n1949621\n7726809\n9395000\n1949687\n1949697\n1950006\n5142372\n5142424\n5142436\n5142583\n1950017\n1950019\n4301876\n1950044\n1950047\n1950052\n1950133\n1950153\n1950197\n11967675\n1950384\n1950396\n1950408\n1950409\n1950567\n1950578\n1950654\n1950767\n1950856\n1951062\n1951097\n1951116\n1951121\n1951125\n1951133\n1951217\n1951218\n4301897\n5715127\n12180041\n12206694\n1951340\n5142829\n5977179\n5977185\n5977197\n5977203\n5977207\n5977208\n5977214\n5977216\n5977220\n5977235\n5977250\n5977251\n5977259\n5977260\n5977261\n5977262\n5142249\n5142254\n5142267\n5142269\n5142273\n5142278\n5142283\n5142298\n5142300\n5142314\n5142317\n5142319\n5142322\n5142328\n7633472\n1948771\n1948774\n1948779\n1948789\n1948799\n1948800\n1948802\n1948803\n1948804\n1948808\n1948809\n1948810\n1945374\n1945378\n12175154\n9400895\n9245604\n1758767\n1758771\n1758781\n1758783\n7911151\n9366762\n9445489\n5108416\n5108417\n5108419\n1758879\n1758898\n1758906\n1758916\n1759037\n1759040\n1759041\n1759092\n9447614\n1759338\n1759553\n1759563\n1759573\n1759585\n1759605\n1759610\n1759611\n1759621\n1759624\n1759631\n1759632\n1759633\n1759634\n1759671\n1759677\n1759678\n1759688\n1759691\n1759694\n1759719\n1759799\n1759881\n9306367\n1760261\n1760309\n1760361\n1760454\n1760455\n1760682\n5108957\n1761143\n1761498\n1761553\n1761563\n1761798\n1761892\n9418549\n9616055\n1762609\n1762615\n5109523\n5109535\n5109566\n5109596\n5109651\n9337858\n1763610\n9328683\n9438913\n1764238\n1764691\n1764693\n1764917\n1764929\n1765011\n1765044\n4534245\n1765172\n5109829\n5109845\n5109848\n5109850\n5109852\n5109855\n5109881\n5109954\n5109958\n8352161\n1765733\n11487320\n1765769\n1765779\n1765798\n1765962\n1766193\n1766205\n1766210\n1766237\n1766287\n1766392\n1766410\n1766489\n1766509\n4301071\n4301081\n7895336\n9362190\n1766646\n1766650\n1766917\n1766919\n1766921\n1767052\n1767140\n1767142\n1767335\n1767336\n1767337\n1767338\n1767347\n7598945\n9062262\n1767484\n9471709\n1767571\n1767579\n1767584\n9511345\n1767602\n1767612\n1767628\n5772169\n9381852\n1767719\n1768132\n1768172\n1768174\n1769592\n9373686\n1769814\n1769934\n1769947\n1769958\n1770132\n1770144\n9148810\n1770461\n1770659\n1771441\n1771872\n1771997\n1772013\n9242609\n9244973\n9254157\n9396755\n9463442\n9476708\n9495306\n9562175\n9616658\n9625112\n9630930\n9633562\n1772043\n1772169\n5110333\n5110341\n5110356\n9539128\n1772422\n1772462\n9605631\n1772954\n1772977\n1773002\n1773069\n1773081\n1773248\n1773313\n1773315\n1773510\n1773577\n1773662\n1773677\n1773728\n4301148\n9369576\n1773742\n1773743\n1773744\n1773746\n9367674\n9399288\n9593475\n1773783\n1773784\n9283948\n9560018\n1774092\n1774095\n9322646\n1774243\n1774253\n1774254\n1774262\n1774268\n9243117\n9409309\n9550265\n1774314\n1774358\n1774792\n4301304\n6115953\n1775046\n1775055\n9547676\n1775089\n1775118\n1775290\n1775291\n1775508\n1775509\n1775672\n1775680\n1775791\n1775866\n1775970\n1776167\n5110723\n5110728\n5110752\n5110754\n5110756\n1776397\n1776406\n1776415\n1776459\n1776462\n1776467\n1776470\n1776472\n1776473\n1776476\n1776618\n1776861\n1776871\n1776880\n1777139\n1777261\n1777728\n1777730\n9310286\n5110863\n5715009\n5715010\n5715013\n1777974\n1777976\n1777980\n1777982\n1777994\n1777996\n1778000\n1778006\n1778007\n1778013\n1778015\n1778024\n1778031\n1778033\n1778034\n1778037\n1778045\n1778049\n9456735\n1778337\n1778534\n1778688\n5111076\n5111139\n5111141\n5111343\n5111360\n5111372\n5111397\n5111521\n5111528\n5111546\n5111568\n7593392\n9175037\n9596498\n1779430\n1779633\n1779643\n1779709\n1779713\n1779959\n1780209\n1780213\n1780214\n1780215\n1780272\n1780309\n1780313\n1780326\n1780330\n1780344\n1780390\n1780407\n1780414\n1780437\n1780440\n1780450\n8802610\n9284849\n1780852\n7825945\n9374443\n9392614\n5111956\n1781692\n1781819\n1782031\n1782422\n1782424\n1782523\n1782542\n1782585\n1782595\n9289753\n9433772\n9525172\n1782622\n10441062\n1782682\n1782689\n1782700\n1782705\n1782706\n1782707\n1782708\n1782709\n1782743\n1782744\n1782745\n1782747\n1782762\n1782776\n1782803\n1782808\n1782809\n1782819\n1782822\n1782826\n1782833\n1782837\n1782840\n1782853\n1782870\n1782871\n1782878\n1782921\n1782928\n1782934\n1782961\n1782972\n1782978\n1782993\n1783002\n1783008\n1783013\n1783035\n1783055\n1783059\n4301044\n9581976\n1783313\n9457757\n9500945\n1783371\n1783372\n1783373\n1783376\n1783378\n5112153\n5112191\n5112199\n5112229\n5112233\n5112283\n5112302\n5112377\n5714951\n5714973\n5714984\n5714994\n5715004\n1783811\n9348210\n9465978\n9492640\n1783841\n1783842\n1783861\n1783940\n1784276\n1784278\n1784281\n1784282\n1784283\n1784422\n1784461\n1784582\n1784610\n9320776\n1784688\n5112414\n4534290\n1784893\n1785145\n1785168\n1785185\n1785280\n9633615\n1785331\n1785399\n1785403\n9636267\n1785728\n1785730\n1785732\n1785733\n7400814\n9250744\n9329292\n1785875\n1785886\n1785951\n1785955\n1785964\n1785982\n1785992\n1785997\n1786007\n1786035\n1786036\n1786308\n1786360\n1786455\n1786514\n1786565\n1786566\n1786567\n1786691\n1786733\n1786808\n1786918\n4687681\n9305798\n1787438\n1787506\n1788034\n1788037\n1788063\n1788070\n1788139\n9547140\n1788425\n9282469\n1788485\n1788673\n1788677\n1788679\n1788680\n1788681\n1788720\n4301312\n1788917\n1788929\n1789076\n1789155\n9612009\n1789212\n9248329\n9449132\n1789505\n4534166\n4534198\n1789695\n1789730\n1790013\n1790084\n1790151\n9092175\n9410414\n1790339\n1790343\n11693171\n1790359\n1790362\n1790369\n1790371\n1790737\n9297059\n1791331\n1791590\n1791593\n1791680\n1791784\n1791862\n1792072\n1792073\n1792087\n1792091\n1792095\n1792096\n1792097\n1792099\n9426771\n9622117\n1792318\n9241669\n9338769\n9530319\n9548726\n1792430\n1792442\n1792449\n1792456\n1792465\n1792478\n1792485\n1792497\n1792517\n5113365\n9240216\n1792817\n9233420\n9539292\n1792996\n1793189\n1793192\n1793368\n1793369\n1793419\n1793453\n1793455\n4301052\n4301055\n1793589\n1793699\n1793983\n1794102\n1794510\n4301238\n11781335\n1795788\n1795802\n1795812\n1795871\n1795983\n1796032\n1796035\n1796040\n1796051\n1796100\n1796117\n1796154\n1796180\n1796181\n1796188\n4534486\n9377268\n9541908\n1796217\n1796274\n1796276\n7689966\n7882824\n8405656\n9256638\n9327259\n9589234\n1796310\n1796312\n1796463\n8105817\n1796678\n1796686\n1796842\n1796958\n1797587\n1797592\n1797593\n1797595\n1797601\n4301242\n4301249\n4301255\n1798288\n1798371\n1798375\n1798419\n5113985\n5114011\n5114021\n5114039\n5114043\n5114081\n5114083\n5114096\n5114107\n5114128\n5114151\n5114159\n9500553\n1799433\n1799675\n1799680\n9368026\n9593098\n1799774\n9388726\n9571514\n1799870\n1799877\n1799880\n1799884\n1799894\n1799900\n1799901\n1799911\n1799917\n1799925\n1799938\n1799944\n1799956\n1799957\n1799958\n1799967\n1799977\n1800017\n1800024\n1800028\n10446574\n9496311\n8729319\n4301068\n4301282\n4301283\n4301306\n4301307\n8751100\n9395261\n9564779\n12103087\n7558165\n8050639\n8440999\n8551997\n8562506\n8647523\n8761810\n8781370\n8998296\n9042018\n9163659\n9241105\n9247947\n9255102\n9261458\n9281907\n9288185\n9291297\n9362785\n9373309\n9390293\n9424681\n9452702\n9474256\n9481002\n9484411\n9485070\n9488551\n9530271\n9530928\n9533506\n9534429\n9544558\n9545480\n9552253\n9573163\n9577379\n9590907\n9591877\n9594509\n9595155\n9602019\n9634575\n11922580\n9406822\n9432810\n4534533\n9248830\n9363692\n9556427\n9597741\n9503548\n9415435\n9424082\n9610447\n7589577\n7779226\n8818378\n8928353\n9538684\n9486411\n7717385\n8424964\n9511749\n6132781\n10118643\n9875111\n9342344\n9496896\n9629365\n9478331\n5108640\n5110377\n5114189\n5114192\n11452421\n11466090\n11470672\n11590674\n11615055\n11619030\n11626773\n11627464\n11660145\n11713256\n11749278\n11753804\n11781300\n11859640\n11887065\n5109299\n5109369\n5109413\n8755207\n8943174\n9038042\n9307254\n9334639\n9387782\n9404919\n9506719\n5112130\n5112131\n9244066\n9551316\n7398419\n1792564\n1800130\n1800140\n9623131\n1774929\n1770828\n1770918\n1770955\n1771019\n1771055\n1771067\n1771245\n1765751\n5108665\n5108670\n9374637\n9586329\n1768196\n1768199\n1768201\n11783188\n4533347\n9490756\n1797903\n6115793\n6115822\n11501104\n1776094\n9354669\n10714961\n10867462\n9253819\n9517291\n9561820\n11562243\n5118459\n5118474\n5118509\n5118524\n1822667\n9778438\n1822784\n1822788\n1822805\n1822848\n1823637\n1824080\n1824259\n1824442\n1824449\n1824571\n5118828\n1825083\n9426054\n1825218\n1825373\n1825428\n1825430\n5118934\n5118944\n5118949\n1825967\n1826048\n1826058\n1826084\n1826156\n1826163\n1826164\n1826167\n1826169\n1826172\n1826173\n1826175\n1826181\n1826222\n5119009\n5119011\n5119013\n5119016\n5119026\n5119039\n5119046\n5119050\n10115073\n1826772\n9807789\n1827103\n1827112\n1827113\n1827132\n1827133\n1827161\n1827716\n1828105\n1828268\n9454052\n9255512\n1892509\n1892729\n1892736\n1892742\n4299095\n1892851\n1892858\n1892863\n5127805\n5128005\n5128007\n5128034\n9113409\n10653980\n1894074\n1894087\n1894088\n1894102\n1894164\n1894293\n1894298\n5882039\n1894329\n1894342\n1894896\n4535827\n1895138\n1895185\n1895203\n5128232\n5128250\n5128266\n5128326\n5128357\n5128363\n5128380\n9804158\n1895768\n1895820\n8763986\n1895886\n1895904\n5128475\n5128488\n5128491\n1896614\n1896658\n1896749\n10353400\n1896774\n1896932\n5129251\n11701883\n5925238\n8367663\n1897990\n10073321\n10365587\n1898143\n1898174\n1898203\n10321900\n1898286\n4299368\n4299370\n5714367\n5714369\n1898391\n1898402\n1898414\n1898416\n1898424\n1898431\n5129374\n5129378\n5129387\n5129405\n5129430\n5129432\n5129451\n5714356\n5714361\n6228464\n5129473\n5129481\n5129489\n5129496\n5129515\n5129517\n5129520\n5129531\n5129535\n9208233\n9255328\n5129544\n1898686\n1898841\n1899048\n4299211\n4299213\n1899873\n1899893\n1900024\n8847500\n9208918\n1900131\n1900175\n1900199\n1900233\n1900249\n1900485\n1900618\n1900830\n1900872\n9190731\n1901001\n1901189\n1901261\n1901268\n8247566\n1901735\n1901744\n1901794\n1901801\n1901810\n11135155\n11219489\n12258652\n5130400\n5130514\n5130528\n5130548\n9357385\n1902378\n1902406\n1902430\n1902458\n1902479\n1902502\n5130559\n1902620\n1902642\n1902670\n1902676\n1902680\n1902692\n1902699\n1902702\n1902703\n1902704\n4299218\n1902880\n1903607\n1903658\n1903683\n5131608\n1904382\n7776011\n5131951\n1905161\n1905162\n1905172\n1905187\n1905189\n1905242\n1905257\n1905267\n1905281\n1905297\n1905299\n1905301\n1905310\n1905317\n1905451\n1907153\n1907235\n1907250\n1907272\n1908011\n1908044\n1908052\n1908055\n1908148\n1908199\n1908203\n1908204\n1908207\n1908256\n1908302\n5133035\n10542548\n1908995\n1909064\n10046510\n1909128\n1909170\n1909185\n9851867\n8727750\n12234977\n1909800\n5133251\n5133265\n10558140\n5133565\n5133568\n1910773\n5133581\n1911112\n1911178\n1911246\n5133595\n5133621\n5133637\n8548427\n9219529\n1911577\n1911939\n12322536\n12335869\n1911966\n1912003\n1912036\n1912119\n1912428\n4299535\n4299565\n4299576\n4299599\n5133864\n5714410\n10638244\n9277330\n5134517\n5134559\n5134661\n5134687\n5134693\n5134759\n5135355\n5714507\n8233062\n1914410\n1914416\n1914421\n1914424\n1914435\n1914439\n1914440\n1914442\n1914458\n1914464\n1914465\n1914477\n1914484\n1914496\n1914498\n1914500\n1914501\n1914511\n4299191\n4299201\n8918036\n1915193\n9185656\n9988287\n1915339\n1915396\n1915401\n1915417\n1915427\n1915430\n1915469\n1915470\n1915487\n1915492\n1915506\n10487080\n1916700\n1917827\n1917830\n1918082\n1918094\n10250149\n1918269\n1918280\n1918293\n1918395\n4299802\n4299804\n1918964\n1918968\n1918972\n1918984\n1918986\n1918988\n1919007\n5128045\n5130682\n5130696\n5131982\n5132003\n5132079\n5132084\n5132246\n5132254\n5132317\n5132347\n5132360\n5132398\n5132446\n5132461\n5132505\n5714312\n5714333\n9541133\n5133088\n5714299\n5714302\n5130557\n1910628\n1902175\n10662329\n12045866\n4299778\n5132917\n5132940\n5132956\n5132973\n5133009\n9964857\n1951448\n5142842\n1951657\n1951660\n1951784\n5142903\n1952032\n1952043\n1952093\n1952730\n5143107\n6097225\n10045595\n1853064\n4529248\n1868334\n10597291\n5102424\n1941717\n1843888\n1843889\n5120577\n5120675\n5120767\n5121517\n5121613\n1842043\n5120396\n1842446\n1842508\n4301036\n4529738\n5120453\n1843444\n10327658\n10619048\n5101371\n10304313\n10607329\n11484123\n9114044\n1730978\n10458960\n10469497\n5101527\n1731750\n1731811\n1731812\n7628188\n1878688\n1878705\n1878751\n1878753\n1878789\n1878810\n1878837\n1878879\n1878937\n1878958\n1879052\n1879253\n1879272\n1879274\n1879348\n1879398\n1879408\n1879413\n10366679\n10874932\n1879443\n1879452\n1879471\n10177508\n5126229\n5126352\n5126365\n5126404\n5126494\n5126517\n5126533\n10915497\n10922201\n1879939\n1879970\n1879975\n1880013\n1880019\n1880025\n1880044\n1880049\n1880062\n1880064\n1880078\n1880083\n1880088\n1880123\n1880132\n1880133\n1880156\n5126585\n5126637\n1880379\n1880381\n1880411\n4302319\n1880505\n5126663\n10861282\n11968849\n1881079\n1881094\n1881111\n1881139\n1881151\n1881166\n9819403\n4531687\n5126697\n5126718\n5126721\n5126726\n5126729\n1881767\n1881822\n5126751\n1881917\n1881955\n1882089\n1882190\n1882195\n1882218\n1882253\n1882316\n5126785\n5126892\n5126958\n5126963\n1882785\n1882786\n10107015\n1882812\n1882816\n1882818\n1882819\n10191785\n11891668\n1882927\n1882941\n1882958\n1882959\n1882960\n1882965\n1882977\n1882979\n8725248\n1883020\n1883038\n1883067\n5127089\n5127107\n5127116\n5127118\n5127130\n5127132\n1883829\n1883897\n1883968\n1883975\n8324720\n9864281\n1883993\n1884001\n1884213\n1884428\n1884435\n1884439\n1884453\n1884464\n1884479\n1884685\n9308930\n1884703\n1884774\n1884790\n4532122\n1884923\n1884997\n1885001\n1885158\n1885202\n1885229\n1885642\n5127170\n1885950\n1886251\n1886262\n5127203\n1886292\n8223165\n1886378\n1886398\n1886400\n1886419\n4302333\n5127209\n1886490\n1886501\n1886579\n1886583\n1886650\n1886729\n10510138\n1886868\n1886906\n1886929\n1886935\n5127222\n1887004\n1887024\n1887031\n1887285\n1887309\n1887341\n1887459\n10437872\n5127325\n5127335\n5127336\n5127337\n5127339\n5127350\n5127353\n5127354\n5127355\n5127357\n1887565\n1887634\n1888009\n1888047\n4531968\n1888306\n1888307\n1888336\n1888338\n1888410\n1888435\n5127378\n5127380\n1888579\n1888646\n1888695\n1888823\n12106417\n1888946\n1888955\n1889028\n1889267\n1889327\n1889536\n1889939\n5127521\n1890089\n1890187\n1890247\n11044778\n7543006\n1890368\n1890374\n1890404\n1890410\n1890417\n1890487\n1890491\n1890508\n1890512\n1890520\n1890560\n1890599\n1890622\n1890629\n1890654\n1890730\n1890737\n1890783\n1890794\n1890800\n1890802\n1890854\n1890876\n1890885\n1890917\n1890934\n1890936\n6207059\n7431428\n1891035\n10034831\n1891048\n1891074\n1891167\n1891438\n1891473\n1891484\n1891488\n1891493\n10310835\n1891755\n9884308\n1891932\n1892131\n1892193\n1892301\n1892302\n1892311\n1892320\n1892355\n1892420\n1892427\n1892433\n9059564\n1892477\n1892488\n1884326\n1884337\n10179389\n10259280\n10330376\n10482025\n10655790\n9181627\n9935837\n5771877\n7864212\n8146570\n8425580\n6120803\n6121218\n8876855\n10106345\n10432184\n10444331\n5126675\n8858121\n9530406\n1886374\n1889717\n1889721\n1889745\n1889760\n1889828\n1889838\n1889850\n1889870\n5127631\n5127656\n5802339\n1887119\n1887122\n1887125\n1887178\n1886123\n1886207\n1846099\n1846103\n1846111\n1846112\n1846133\n1846141\n1846190\n1846229\n1846236\n1846240\n1846259\n1846261\n1831136\n1831168\n4525443\n9958241\n1853312\n1854143\n1854202\n7946946\n5880063\n12239445\n4526094\n1858615\n1858637\n9777614\n1858659\n1858660\n1858674\n1858706\n9689122\n1858930\n1859046\n1859161\n1859287\n9760511\n8790054\n9675743\n9686431\n9746673\n9748079\n6133397\n1859929\n1859932\n9752950\n1860026\n4536472\n9700261\n1973458\n1973466\n5123046\n5124468\n1864905\n8877458\n9240588\n9355107\n9531432\n9547535\n9606779\n1865102\n1865107\n1865108\n11754954\n1865295\n1865299\n1865313\n1865319\n1865328\n1865333\n1865341\n1865345\n1865347\n1865348\n1865353\n5124557\n5124589\n5124595\n5806244\n1865555\n1865571\n1865590\n1865668\n1865709\n1865837\n1865839\n1865842\n1865853\n1865856\n1865862\n1865963\n1866003\n1866085\n1866123\n1866214\n1866311\n1866330\n1866336\n1866338\n1866341\n1866496\n1866550\n1866570\n1866601\n1866902\n1867021\n1867022\n1867029\n1867032\n1867037\n1867525\n1867535\n1867773\n10247309\n10591617\n1736271\n7734292\n1841764\n1841782\n1841813\n1841946\n10309331\n5123615\n1861456\n1861559\n1861604\n5123636\n1861759\n1861773\n1861783\n1861784\n1861823\n1861834\n1861836\n1861851\n11529603\n1861887\n1861892\n1861893\n1862044\n1862047\n1862049\n1862078\n1862087\n1862088\n1862123\n1862129\n1862139\n1862181\n1862198\n1862207\n1862363\n1862401\n1862475\n1862547\n1862569\n1862595\n1862624\n1862719\n1862757\n1862837\n1862841\n1862916\n1862917\n1862923\n1862928\n1863021\n1863025\n1863075\n1863080\n1863088\n5123775\n7803585\n1863366\n1863405\n1863407\n4301348\n1863412\n1863416\n1863584\n5124049\n1863699\n1863706\n1863714\n1863732\n1863734\n1863742\n1863757\n5124050\n1863856\n1863864\n1864156\n1864164\n1864165\n8956567\n1864204\n11468731\n1864316\n1864320\n1864321\n1864328\n1864329\n1864352\n1864377\n11141784\n5124118\n5124119\n5124136\n5124147\n5124172\n5124199\n5124200\n5124208\n5124219\n5124232\n5124249\n5124250\n5124268\n1864652\n5124332\n5124442\n5124443\n5124448\n5124450\n5123954\n5123956\n5123968\n5123971\n5123979\n5123983\n5123991\n5123999\n5124000\n8849480\n9513830\n1863978\n1863982\n1864004\n1864008\n1864021\n1864046\n1864070\n1864090\n1864098\n1992573\n1992634\n5150053\n5150092\n1993643\n1992817\n1939460\n1953499\n5143232\n9053308\n9424853\n1953970\n1953998\n1954084\n1860108\n1860118\n1830031\n10650211\n5119482\n1830442\n1830457\n4525369\n1754270\n5105642\n5105649\n5105656\n5105671\n1757839\n10174151\n10322104\n1830681\n10604375\n1953124\n1751497\n1751557\n1751572\n1751575\n1751588\n1751590\n1751609\n1751625\n1751626\n1751670\n1751684\n1751690\n5105217\n5105218\n1829287\n1829363\n1854920\n5122526\n5122538\n5122556\n5122571\n5122574\n5122581\n5122620\n5122646\n5122647\n5122668\n5122683\n5122691\n5122696\n5122702\n9015218\n1855358\n10055273\n1856005\n1856581\n1856686\n1856701\n1856720\n1856730\n1857068\n1857143\n1857258\n1857380\n1857626\n1857809\n1857828\n1857829\n1857856\n1857863\n1857918\n1857924\n1857938\n1857945\n1857973\n1858163\n5122876\n5122969\n1858283\n1856891\n10038125\n1937642\n1937655\n1937688\n1937691\n1937722\n1937739\n1937751\n1937758\n1937793\n1937803\n1937816\n1937819\n1937846\n1937885\n1937974\n1938016\n1938022\n1938059\n1938081\n1938104\n1938112\n1938159\n4299870\n4299871\n8225376\n10600208\n12200213\n12211009\n1937110\n1937124\n1937136\n1937144\n1937162\n1937167\n1937527\n1938446\n1938955\n1938975\n1939056\n1939130\n1939134\n1939136\n5141321\n5141324\n5141333\n5141342\n4694313\n11561676\n12219250\n12229940\n12247359\n12253844\n12262562\n1856368\n1856394\n1856555\n1857690\n5123018\n1838811\n1838838\n1838911\n1833497\n1833499\n1833500\n1833626\n8546322\n5770913\n1835500\n5119905\n5119961\n5119969\n10304283\n1836899\n1837172\n1837900\n1838666\n1838960\n9895629\n1841159\n10511237\n5119893\n5119895\n4534796\n1800963\n5114431\n5114435\n5114436\n5114439\n9313634\n9385576\n9454291\n9574801\n9579309\n9626037\n8924506\n10942408\n9239301\n9426252\n5114295\n5114317\n5114340\n", + "regions/north_europe.classes": "1934693\n1860621\n1860628\n4522795\n1860659\n1860664\n1860668\n1860671\n1860688\n1860709\n1860711\n4522933\n5123582\n1732063\n1732416\n1732452\n1732565\n1732662\n1732685\n1733258\n1733484\n4525266\n4525273\n5101678\n5101745\n5769191\n1734453\n1734704\n1734826\n5102287\n1845270\n1845368\n1845565\n4529566\n4528100\n1846604\n1846657\n1846715\n1846729\n1846916\n1847097\n1847407\n1847572\n9262981\n1847956\n1848150\n1848202\n10450501\n1848219\n1848273\n1848356\n1848426\n4528539\n1848596\n1848610\n1848636\n1848657\n1848669\n1848690\n1848713\n1848714\n1848717\n1848730\n1848753\n1848864\n1848868\n1849104\n1849267\n1849273\n1849284\n1849294\n1849477\n11052757\n11080751\n1849630\n1849856\n1849897\n1849924\n1850008\n1850042\n1850045\n1850076\n1850077\n1850106\n1850238\n1850246\n11576787\n1850279\n1850302\n1850335\n1850386\n1850394\n1850450\n1850506\n4527903\n1850522\n1850533\n1850538\n1850781\n1850971\n1851000\n1851010\n1851011\n5122037\n5122113\n1851203\n1851220\n1851337\n1851347\n1851555\n5122206\n4527972\n1852150\n1852177\n1852311\n1852430\n11287091\n4527957\n1848920\n1829533\n1829588\n1829776\n1829785\n1829799\n1829823\n1829974\n4525354\n1828637\n6097236\n5769272\n5879654\n7448174\n4525610\n1861395\n1845866\n1845962\n1845965\n1841261\n1830838\n1830843\n1830122\n1830125\n1830131\n1830144\n1830147\n1830152\n1830186\n1830191\n1830207\n1830241\n1830243\n1830262\n1830266\n1830271\n4525476\n4525487\n1831643\n1841296\n4528593\n8271010\n1853723\n5880147\n9734171\n11418741\n11571523\n1761111\n1764531\n1769103\n1769897\n1772793\n4532500\n1780150\n1790692\n1790816\n5113078\n5113084\n5113234\n1797178\n1797258\n1797276\n1797367\n1797479\n4532471\n8756768\n1798346\n1798408\n4532493\n1798449\n1798504\n1798594\n1798802\n1798807\n4532357\n1799708\n1804071\n1804906\n7874258\n1807969\n1808450\n1808752\n5115771\n5115777\n1810099\n5116416\n1813114\n5117189\n5117200\n7656811\n1814630\n5117399\n5117400\n1819145\n4532293\n4532297\n1819268\n8407461\n1819873\n8361973\n1820372\n1820406\n12253343\n5884571\n7596232\n5771982\n6097214\n4532544\n4532516\n4532532\n12089608\n11962292\n12135372\n5115874\n5116475\n5116698\n1788635\n4532405\n4532408\n4532412\n8000103\n4532534\n4532508\n1760246\n5113036\n1821856\n1821911\n1812394\n8237987\n1820039\n1771772\n1860979\n1860983\n1860987\n1861031\n4522911\n4522916\n4522919\n4522922\n12318291\n4522886\n4522891\n1860768\n1860852\n7767114\n7851302\n7961640\n1992504\n1852956\n1852978\n1835432\n1835433\n1835456\n1835457\n9724183\n1837343\n1837420\n1837429\n1837464\n1837515\n4529064\n7958169\n8015612\n1839293\n1839296\n1840297\n1840301\n1840345\n1840346\n1840360\n1840371\n1840380\n1840408\n1840478\n1840483\n1840485\n1840555\n1840566\n1840570\n1840581\n1840596\n1840621\n4529186\n5119808\n1831752\n1852751\n9473121\n4529630\n1751236\n1751290\n1751298\n1751299\n1751368\n1751457\n4535884\n4535904\n1860408\n4525177\n5123339\n5123394\n5769164\n5123461\n5123474\n1751207\n1751216\n1869803\n1869852\n1869976\n1870202\n1870249\n1870250\n1870450\n1870988\n1871160\n1871252\n1871407\n4531402\n1871698\n1871826\n10787705\n1872901\n1873048\n1873079\n1873411\n1873776\n1873780\n1873783\n4531264\n5125689\n1874192\n1874204\n1874211\n4531145\n4531147\n4531158\n1874375\n1874743\n9782192\n1875008\n1875120\n8219149\n1875327\n4531242\n1875631\n1875633\n4531284\n1875827\n1875865\n1875869\n1875918\n1875940\n1875952\n1876329\n1876409\n1876542\n1876623\n1876854\n1877310\n1877341\n1877368\n4531246\n5126052\n1877941\n1877988\n1878470\n1878490\n1878586\n11728049\n1872315\n1748805\n1940158\n4525859\n4525884\n5141493\n5141501\n1940504\n1940510\n1940575\n1940639\n1940644\n1940717\n1940744\n1940768\n4525777\n1940807\n1940838\n1941377\n1941437\n1939879\n1736377\n1736412\n1736425\n1736447\n1736484\n1736511\n1736528\n1736560\n1736565\n1736601\n5102628\n1736727\n1736800\n1736898\n1736904\n1736905\n1736906\n1736945\n4530406\n4529931\n1737342\n1737368\n1737437\n1737491\n1737497\n7466487\n1737524\n1737526\n1737533\n1737542\n1737552\n1737650\n1737753\n1737775\n1737776\n1737783\n1737847\n1737893\n1737924\n4530002\n8186212\n1738050\n1738163\n1738222\n1738245\n1738317\n1738322\n1738337\n1738422\n1738429\n1738514\n8420632\n8869900\n5102931\n5102951\n1738687\n1738700\n1738722\n1738777\n1738794\n1738839\n1738883\n1739042\n1739043\n8086347\n1739128\n1739272\n1739284\n1739290\n1739337\n1739377\n1739381\n5102982\n1739449\n1739451\n1739461\n1739605\n1739748\n1739797\n1739816\n1739819\n1739833\n1739919\n1739922\n1739931\n1739980\n1739999\n1740005\n1740053\n1740069\n1740116\n1740120\n1740174\n1740183\n1740185\n1740305\n1740374\n1740392\n7797515\n8215326\n1740482\n1740518\n1740533\n1740567\n1740570\n1740623\n8094357\n1741056\n1741147\n1741253\n1741340\n1741341\n1741368\n4530151\n8345820\n5103066\n5771357\n1741545\n1741551\n1741590\n1741593\n1741615\n1741633\n1741634\n1741667\n1741752\n1741756\n1741765\n4530424\n10807169\n11093909\n1742106\n1742142\n1742185\n1742263\n1742346\n1742402\n5103451\n5103502\n5103736\n5103948\n5771350\n7975250\n1743196\n8313553\n5103998\n7661023\n1743453\n1743475\n7877231\n1743532\n1743588\n1743604\n1743613\n5104056\n6097235\n1743641\n1743643\n1743710\n1743714\n4530214\n1743730\n1743768\n1743775\n4529900\n4529908\n4529915\n1743828\n1743856\n1743862\n1743867\n1743898\n1744071\n1744136\n1744180\n1744224\n4530632\n1744416\n1744498\n1744542\n1744588\n1744593\n1744693\n1744699\n1744709\n1744714\n1744728\n1744731\n1744739\n1744742\n1744748\n1744763\n1744777\n1744782\n1744789\n1744808\n1744810\n1744860\n1744896\n1744901\n7964262\n1745079\n10844862\n1745131\n1745558\n1745561\n1745579\n1745600\n1745630\n1745634\n1745636\n1745643\n1745659\n1745676\n1745678\n1745705\n1745724\n1745725\n1745737\n1745756\n1745762\n1745771\n1745787\n1745788\n1745816\n1745830\n8162538\n8369868\n1745925\n1746027\n8424972\n1746174\n1746413\n1746440\n1746613\n1746644\n1746666\n1746689\n1746775\n1746832\n1746856\n1746876\n1746910\n1747050\n1747141\n5104442\n1747738\n4530138\n5104558\n1748203\n1748321\n6097234\n7588222\n9242559\n1748456\n5104641\n8691947\n10580256\n5103121\n5103176\n5103181\n5103185\n5771227\n5771230\n5771232\n5771236\n5771239\n5771241\n5771243\n5771249\n5771256\n5771258\n5771259\n1831780\n4525500\n4525503\n4525505\n4525510\n4525530\n4525540\n4525547\n4525557\n4525562\n1920851\n1922311\n1922343\n8016522\n1922584\n1922937\n5138543\n5138561\n5714680\n1923796\n1924097\n5138681\n1925221\n1925233\n4535172\n1925454\n1925918\n1925962\n1926324\n1926861\n5882965\n1928248\n5139156\n1928945\n1929270\n1929659\n1929697\n8356768\n1930110\n1931179\n1931779\n1932411\n1932960\n5140436\n7634721\n1933793\n1926260\n1933095\n1933138\n1924494\n4522322\n5105339\n1919712\n1920259\n1920491\n1920494\n1920496\n1920506\n4535307\n5137903\n5804895\n1920712\n5137582\n5137595\n5137612\n5137636\n5137695\n5137706\n8203812\n1920218\n1748890\n1748942\n1749050\n1749070\n1749164\n1749449\n1749661\n1749713\n1749744\n1749846\n1749869\n1749908\n1749921\n1749929\n1749936\n1749948\n1749954\n1749959\n1749975\n1750051\n1750076\n1750097\n1750143\n1750159\n1750288\n5104772\n5104781\n5104797\n5104829\n5104882\n5104891\n5104903\n5104927\n5104940\n5105054\n5105088\n5105106\n5105158\n5976947\n1751051\n5104759\n1749596\n1749608\n1749635\n8741260\n1735532\n4527339\n4527342\n1731826\n1731837\n1731860\n1954563\n5143380\n5143453\n5143477\n5143651\n5143675\n5143697\n1956440\n1956524\n1956599\n1956710\n4525068\n1957266\n1957300\n1957570\n1957572\n1957632\n1957718\n1957816\n1957845\n1957852\n1957854\n4524421\n4524426\n5143944\n5143947\n1958024\n1958323\n1959383\n1959395\n1959467\n1959682\n1959735\n1959914\n1959919\n1960617\n1961040\n1961068\n1961190\n1962204\n1962265\n1962268\n1962434\n1962516\n9812211\n1962636\n1962860\n1962990\n1963011\n4302252\n1963306\n1963446\n1963463\n1964191\n1964195\n1964471\n1964637\n1964653\n1964657\n8361848\n5144426\n1965166\n1965208\n1965345\n1965763\n1965777\n1965795\n1965810\n1965825\n1965841\n1965913\n1965996\n1966017\n1966351\n1966886\n5144534\n1967011\n5144543\n1967245\n1967273\n1967597\n1967815\n1967873\n7681733\n1968678\n1968867\n11598540\n1969291\n1969954\n1970213\n1970227\n1970284\n5144677\n5144721\n5144805\n5144900\n5145009\n5145136\n5145186\n5145260\n5145269\n5145409\n7753668\n1971858\n1971888\n1971986\n1972120\n1972185\n1972187\n1972234\n1972250\n1972278\n1972342\n1972377\n5145870\n5145965\n7541913\n7624494\n7960566\n1972434\n1972449\n1973414\n5146496\n5146510\n5146559\n5146611\n5146659\n5146677\n5146762\n5146837\n5146883\n5146946\n5146961\n5147038\n5147039\n5147062\n5147150\n5147171\n5147193\n5147208\n5147232\n5147245\n5147354\n5147478\n7988195\n5147608\n5147638\n1975341\n1975546\n1975553\n1975571\n1975733\n8329661\n1975793\n8160782\n1975897\n1975903\n1976163\n5147681\n6097233\n1976993\n1977003\n1977007\n1977068\n4523725\n5147827\n5147834\n5769028\n5148247\n5148248\n1978056\n1978065\n1978114\n1978375\n1978445\n4524636\n4524638\n4524890\n1978776\n1978821\n1978977\n5148286\n1979308\n1979430\n1979473\n1979781\n5148394\n5148424\n5148436\n5148462\n5148475\n5148486\n5148487\n1980521\n8421569\n1981696\n1982406\n1982500\n1982525\n1982529\n1982541\n1982542\n1982592\n1982636\n1982671\n1982746\n1982791\n1982838\n1982885\n1983000\n1983052\n1983111\n1983170\n1983260\n1983288\n1983387\n1983441\n1983442\n1983525\n1983548\n1983558\n1983648\n1983705\n1983755\n1983888\n1983896\n1983922\n1983997\n1983999\n1984117\n7752082\n7993353\n8015895\n8026858\n8262357\n8394261\n1984734\n1984942\n1984949\n1984954\n1985522\n1986052\n1986056\n1986157\n1986166\n1986171\n1986191\n1986220\n1986367\n1986452\n1986522\n1986575\n5149315\n5768880\n1987527\n1987578\n1987744\n4524221\n1988593\n1988602\n1988684\n8388883\n5149414\n5149438\n1988881\n1989428\n1990066\n1990150\n1990551\n5149474\n1991179\n1991371\n5149836\n5149839\n1992066\n5880512\n5880533\n5880545\n5880550\n5880552\n5880559\n5880563\n8237343\n8632989\n5769062\n5769068\n5769072\n7429212\n9414984\n4524740\n4523556\n4523560\n4523564\n4524054\n4524376\n4524822\n4523522\n4524070\n4524072\n4524403\n4524793\n4524951\n4525078\n5144190\n5146412\n5149499\n7769543\n4523880\n4523883\n4523885\n5149659\n5149665\n5149704\n5149746\n5149768\n5149820\n7443518\n5146342\n5146379\n4302268\n4524393\n5141677\n1943397\n8277078\n8073674\n8133678\n8273661\n1945569\n7389824\n1947306\n1947335\n1949784\n1949794\n1949852\n1949938\n1950006\n8109173\n8270406\n7633472\n1869478\n1869489\n1869512\n9359597\n5769709\n1735844\n1735855\n9400895\n9530977\n10963226\n10982815\n5109821\n1758878\n1759055\n1759069\n1759079\n1759083\n4533952\n7972792\n1759153\n1759407\n1759597\n1759620\n1759661\n1759667\n1759668\n1759673\n1759686\n1760104\n1760593\n1794361\n4534225\n8708745\n1760857\n1760887\n1760891\n1761041\n1761438\n1761735\n1761865\n1762244\n1762608\n5109498\n5109506\n5109523\n5109599\n5109614\n5109661\n5109722\n1763610\n1764987\n1765011\n1765017\n1765044\n4534245\n4534257\n1765767\n1765954\n1766128\n1766130\n1766131\n1766137\n1766210\n1766274\n1766410\n1766418\n1766510\n7895336\n1766646\n1766741\n1766814\n1767597\n1767625\n1767655\n5772172\n5772176\n5772178\n5772180\n5772186\n5772196\n5772199\n5772202\n5772205\n5772206\n5772210\n1768117\n1768150\n5110200\n1768341\n5110213\n1768702\n1768729\n1768749\n1768771\n1768815\n1769057\n1769505\n1769519\n1769566\n1769958\n1770150\n1770307\n1770477\n4532696\n1771385\n1771391\n7725644\n1771509\n1771531\n1772013\n1772169\n1772179\n5772129\n1772940\n1772956\n1773163\n1773309\n1773328\n4534046\n4534052\n4534057\n5772269\n1775891\n4534719\n5110670\n1776330\n1776371\n5772446\n1776619\n1776862\n4534463\n1777253\n5110871\n5110885\n1778074\n4534299\n1778127\n1778143\n1778517\n1778596\n5111574\n8253467\n1779435\n1779641\n1779690\n1780378\n1780926\n1781008\n4533285\n1781694\n1782560\n1782615\n1782627\n1782672\n1782726\n1782727\n1782763\n1782777\n1782841\n1782927\n1782948\n1783016\n1783037\n1783043\n1783045\n5112155\n5112254\n5112283\n5112291\n5112336\n5112345\n5714973\n5715004\n5772349\n5772351\n7921916\n8043500\n1783855\n1784359\n1784812\n1784826\n1784853\n4534290\n1785185\n1785286\n4532886\n4532888\n4532890\n1785888\n1785895\n1786007\n8292872\n1786902\n1786936\n1787064\n1787112\n1787267\n1787400\n1787504\n1787590\n1787610\n1787697\n1787751\n1787770\n1787841\n1787859\n1788425\n1788522\n4534011\n1788917\n1789076\n1789086\n1789267\n1789481\n1789553\n1789580\n4534166\n1789694\n1789695\n1789730\n1789745\n1789753\n1789755\n1789783\n1789785\n1789840\n1789849\n10068024\n10113008\n10312073\n10904813\n1789982\n1790002\n1790062\n1790072\n1790084\n1790160\n4533115\n8047343\n9092175\n1790361\n1790364\n9174377\n1790625\n1791422\n1791784\n1792061\n1792292\n1792335\n1792377\n1792379\n1792383\n1792411\n1792414\n1792418\n1792426\n1792449\n1792475\n1793877\n1793986\n1794102\n1794590\n1795215\n1795282\n7869346\n1795854\n1795930\n1795946\n1795957\n1796007\n1796117\n1796139\n1796145\n1796169\n1796188\n4534485\n4534486\n7438067\n8007222\n1796217\n7780930\n1796463\n8105817\n1796678\n4533431\n4533433\n4533442\n4533444\n4533446\n1798372\n11992983\n1798916\n1798931\n1798971\n1798974\n1798984\n1799132\n1799135\n1799701\n1799799\n1800004\n1800032\n7981386\n8742426\n4534389\n4534207\n10638451\n4532811\n4533273\n4534540\n8890502\n9135821\n4534038\n4533202\n4534398\n6544687\n4534538\n4533128\n4533136\n4533661\n4533671\n4534408\n4534458\n4534533\n5883985\n11478679\n5110644\n1774285\n1779334\n5114198\n1763072\n5772063\n4534686\n1771634\n1771650\n1771678\n1771698\n8581601\n1770772\n1770869\n1770880\n1771040\n1771204\n1771214\n1771245\n4533714\n7940536\n5113847\n5772309\n5108761\n4534525\n4533347\n4533360\n4532239\n4532253\n1822346\n1822587\n1822610\n1822613\n1822787\n1822796\n1822819\n1822830\n1823726\n1824113\n7875265\n1825064\n1825077\n1825083\n4534909\n4534914\n1825156\n1825176\n5118892\n5118904\n7624468\n7937573\n8397564\n1825539\n1825971\n1825983\n1826022\n1826033\n5118996\n1827125\n5119143\n5119245\n1827645\n1828162\n4534872\n1894268\n7712938\n1894714\n4535614\n4535632\n4535636\n8049830\n1894840\n4535827\n4535809\n4535817\n5128323\n5128357\n1895875\n1896841\n1898286\n4299368\n1898544\n1902533\n1902749\n8140883\n6221746\n1905383\n8208583\n1909398\n1911112\n1911168\n1911278\n1911461\n7728366\n7809779\n8078362\n1912325\n1912372\n1912470\n4299535\n4299576\n4299597\n4299599\n5772890\n7428726\n7799370\n8810143\n5134098\n1913175\n1913178\n1913328\n1913351\n5134469\n5134667\n5134682\n5134815\n5135191\n7738295\n7791190\n7791558\n7798382\n8298764\n8314088\n7854318\n1918868\n8176911\n7622059\n4535510\n5130587\n5130682\n7762841\n5132183\n5135513\n5131910\n8138711\n1902169\n1899433\n7768674\n7934873\n8168644\n8393082\n1951557\n5142870\n1951649\n1952014\n1952062\n1952130\n1952229\n5143048\n1952449\n1952532\n5143129\n5143147\n1952806\n1952812\n1951713\n1832819\n1832853\n1832862\n1832915\n1832927\n1832936\n1833096\n1833159\n5880257\n5880258\n6097224\n6097225\n6097228\n1853064\n1853079\n4529248\n5120465\n5120668\n5120675\n5120767\n5121040\n5121046\n5121177\n5121244\n5121517\n5121613\n5121737\n8273859\n1842196\n5120396\n1842485\n1842542\n1842690\n1842695\n5101394\n1730978\n1731598\n1872368\n1878782\n1878862\n1878879\n1878895\n1878907\n1878939\n4531506\n4531517\n1879252\n1879452\n5126212\n5126217\n1879534\n1879630\n1879655\n1879703\n1879731\n1879735\n1879765\n10915497\n1879970\n1880040\n1880062\n1880064\n1880094\n1880104\n1880138\n1880139\n1880140\n1880143\n1881151\n4531687\n1881603\n4531713\n1881834\n4531975\n1882158\n1882210\n1882437\n1882459\n1882557\n1882729\n5126834\n8325294\n1882905\n1883161\n1883386\n4531690\n1884212\n4531708\n1884465\n4532122\n1884970\n1886084\n1886320\n8223165\n1886579\n1886587\n1887290\n1887701\n4531968\n10922411\n1888579\n1888733\n1888743\n1888759\n1888826\n1889287\n1889942\n1890187\n1890522\n1890534\n1890576\n1890656\n1890699\n1890703\n1890772\n1891059\n1891326\n1891386\n1891426\n1891473\n1891493\n1891494\n4532022\n1892242\n9674732\n1884255\n1884273\n1884280\n1884312\n1884332\n1884370\n1884403\n5884851\n5126675\n5126680\n7446048\n8532380\n8537359\n8823068\n8856895\n8858121\n9100030\n9101339\n1889833\n1887108\n1887173\n1887177\n1887178\n4532050\n4532057\n4532088\n4532095\n4532097\n6121184\n4532160\n1846107\n1846111\n1846112\n1846133\n1846141\n1846149\n1846159\n1846210\n1846219\n1846236\n4528813\n4528818\n1830879\n1830937\n1830962\n1831002\n1831009\n1831128\n1831136\n1831168\n4525443\n4525448\n5122293\n1853587\n4526048\n1854202\n1854287\n1854347\n5122439\n1854792\n1854849\n1854237\n4526050\n7717983\n1858637\n1858698\n1858762\n1858775\n1858778\n1858873\n1859046\n1859100\n1859177\n4536292\n1859285\n1859305\n1859471\n1859480\n1859488\n1859534\n1859952\n1860063\n1860076\n4536472\n4536483\n7642240\n8200050\n1973467\n5123221\n5123042\n1866568\n5124911\n1867820\n7734292\n1841616\n1841675\n1841813\n1841821\n1861644\n1861797\n1861862\n1862578\n1862580\n1862719\n1862837\n5123922\n5124007\n5124029\n1864161\n1864358\n1864377\n5124143\n5124233\n1864652\n1993419\n1939432\n4525189\n5119513\n1830361\n1830372\n1830374\n1830380\n1830407\n1830408\n1830410\n1830457\n4525369\n1830498\n4525420\n4525425\n7976145\n1830537\n1830584\n1830632\n1830802\n4525364\n1754332\n5107128\n5107219\n5107644\n5107829\n7410701\n7674502\n7761138\n7778368\n7903078\n7955974\n8158342\n8201251\n8348761\n8426357\n4522753\n1939658\n1939677\n1939680\n1939688\n1939717\n7646066\n1829322\n1829363\n10055273\n1856005\n1856289\n1856384\n1856595\n1856620\n1856658\n1856668\n1856686\n1856691\n1856701\n1856730\n1856768\n1856772\n1856867\n1857577\n1857626\n9790007\n1857828\n1857829\n1857856\n1857863\n1857878\n1857924\n1857978\n1858074\n1858113\n1858163\n8225376\n1938214\n1938520\n1938810\n1858531\n1838691\n1838811\n1838838\n1838905\n1838911\n4528692\n4528694\n1833626\n4528658\n1835031\n5770913\n1835156\n1835393\n1835396\n1835407\n1836899\n1837172\n1838969\n1839851\n1839893\n1841158\n1841159\n5770922\n5770942\n4529032\n5119893\n1801051\n1801896\n4534779\n4534782\n1802280\n1803012\n1803073\n4534762\n4534767\n5114327\n8244266\n", + "regions/north_europe_v3.classes": "1934693\n1860621\n1860628\n4522795\n1860659\n1860664\n1860668\n1860671\n1860688\n1860709\n1860711\n4522933\n5123582\n1732063\n1732416\n1732452\n1732521\n1732565\n1732662\n1732685\n1733258\n1733484\n4525266\n4525273\n5101678\n5101745\n5769191\n1734453\n1734704\n1734826\n5102287\n1845270\n1845368\n1845565\n1845607\n4529566\n4528100\n1846604\n1846657\n1846715\n1846729\n1846916\n1847061\n1847097\n1847407\n4528547\n1847572\n9262981\n1847956\n1848150\n1848202\n10450501\n1848219\n1848273\n1848356\n1848378\n1848426\n4528539\n1848596\n1848610\n1848636\n1848657\n1848669\n1848690\n1848713\n1848714\n1848717\n1848730\n1848753\n1848864\n1848868\n1849104\n1849267\n1849273\n1849284\n1849294\n1849477\n11052757\n11080751\n1849630\n1849856\n1849897\n1849924\n1850008\n1850042\n1850045\n1850076\n1850077\n1850106\n1850238\n1850246\n11576787\n1850279\n1850302\n1850335\n1850386\n1850394\n1850450\n1850497\n1850506\n4527903\n1850522\n1850533\n1850538\n1850570\n4528529\n1850781\n1850971\n1851000\n1851010\n1851011\n5122037\n5122113\n1851203\n1851220\n1851337\n1851347\n1851555\n5122206\n4527972\n1852150\n1852159\n1852177\n1852311\n1852430\n11287091\n4527957\n1848920\n1829533\n1829588\n1829776\n1829785\n1829799\n1829823\n1829974\n4525354\n1828637\n6097236\n5769272\n5879654\n7448174\n4525610\n1861395\n1845866\n1845962\n1845965\n1841261\n1830838\n1830843\n1830122\n1830125\n1830131\n1830144\n1830147\n1830152\n1830186\n1830191\n1830207\n1830241\n1830243\n1830262\n1830266\n1830271\n4525476\n4525487\n1831643\n1841296\n4528593\n8271010\n1853723\n5880147\n9734171\n11418741\n11571523\n7908344\n1761111\n1764531\n1769103\n1769897\n1772793\n4532500\n1777631\n1780150\n1790692\n1790816\n5113078\n5113084\n5113234\n1797178\n1797258\n1797276\n1797367\n1797374\n1797479\n4532471\n8355390\n8756768\n1798346\n1798408\n4532493\n1798449\n1798504\n1798594\n1798802\n1798807\n4532351\n4532357\n1799708\n1803163\n1803824\n1804071\n1804906\n7874258\n1807969\n1808450\n1808752\n5115771\n5115777\n1810099\n5116416\n1813114\n5117189\n5117200\n7656811\n1814630\n5117399\n5117400\n1816881\n8326103\n1819145\n4532293\n4532297\n1819268\n8407461\n1819873\n7657803\n8361973\n1820372\n1820406\n12253343\n5884571\n7596232\n5771982\n6097214\n4532544\n4532516\n4532532\n4532565\n12089608\n8148822\n11962292\n12135372\n5115874\n5116475\n8165185\n6097254\n5116698\n1788635\n4532405\n4532408\n4532412\n8000103\n4532534\n4532508\n1760246\n5113030\n5113036\n1821856\n1821911\n1812394\n8237987\n1820039\n1771772\n1860979\n1860983\n1860987\n1861031\n4522911\n4522916\n4522919\n4522922\n12318291\n4522886\n4522890\n4522891\n4522896\n1860765\n1860768\n1860852\n7767114\n7851302\n7961640\n1992504\n1852956\n1852978\n1835432\n1835433\n1835456\n1835457\n9724183\n1837343\n1837420\n1837429\n1837464\n1837515\n4529064\n7958169\n8015612\n1839293\n1839296\n1840297\n1840301\n1840345\n1840346\n1840360\n1840371\n1840380\n1840408\n1840478\n1840483\n1840485\n1840555\n1840566\n1840570\n1840581\n1840596\n1840621\n4529186\n5119808\n1831752\n1852751\n1852787\n9473121\n4529630\n5125104\n1751236\n1751290\n1751298\n1751299\n1751368\n1751457\n4535884\n4535904\n1860408\n4525177\n5123339\n5123394\n5769164\n5123461\n5123474\n1751207\n1751216\n1869803\n1869852\n1869976\n1870202\n1870249\n1870250\n1870450\n1870988\n1871160\n1871252\n1871407\n4531402\n1871698\n1871826\n10787705\n1872848\n1872901\n1872904\n1873048\n1873079\n1873215\n1873411\n1873776\n1873780\n1873783\n4531264\n1873890\n5125689\n1874192\n1874204\n1874211\n1874295\n4531145\n4531147\n4531158\n1874375\n1874743\n9782192\n1875008\n1875120\n8219149\n1875327\n1875376\n1875429\n4531242\n1875631\n1875633\n1875682\n4531284\n1875827\n1875865\n1875869\n1875918\n1875940\n1875952\n1876329\n1876357\n1876409\n1876512\n1876542\n1876623\n1876854\n1877038\n1877310\n1877341\n1877368\n4531246\n5126052\n1877941\n1877988\n1878470\n1878471\n1878490\n1878586\n1890065\n11728049\n1872315\n1748805\n1940158\n4525859\n4525884\n5141493\n5141501\n1940504\n1940510\n1940575\n1940639\n1940644\n1940717\n1940744\n1940768\n4525777\n4525803\n1940807\n1940838\n1941377\n1941437\n1939879\n1736377\n1736412\n1736425\n1736447\n1736484\n1736511\n1736528\n1736560\n1736565\n1736601\n5102628\n5102642\n1736727\n1736800\n1736898\n1736904\n1736905\n1736906\n1736945\n4530406\n4529931\n1737342\n1737368\n1737437\n1737491\n1737497\n7466487\n1737524\n1737526\n1737533\n1737542\n1737552\n1737650\n1737753\n1737775\n1737776\n1737783\n1737847\n1737893\n1737924\n4530002\n8186212\n1738050\n1738163\n1738222\n1738245\n1738317\n1738322\n1738337\n1738373\n1738422\n1738429\n1738514\n8420632\n8869900\n5102931\n5102951\n1738687\n1738700\n1738722\n1738777\n1738794\n1738839\n1738883\n1739042\n1739043\n8086347\n1739128\n1739272\n1739284\n1739290\n1739337\n1739377\n1739381\n5102982\n1739449\n1739451\n1739461\n1739471\n1739605\n1739748\n1739797\n1739816\n1739819\n1739833\n1739919\n1739922\n1739931\n1739980\n1739999\n1740005\n1740053\n1740069\n1740116\n1740120\n1740155\n1740174\n1740183\n1740185\n1740305\n1740374\n1740392\n7797515\n8215326\n1740482\n1740518\n1740533\n1740567\n1740570\n1740623\n8094357\n1740762\n1741056\n1741147\n1741253\n1741340\n1741341\n1741368\n4530151\n8345820\n5103066\n5771357\n1741545\n1741551\n10838422\n1741590\n1741593\n1741615\n1741633\n1741634\n1741667\n1741747\n1741752\n1741756\n1741765\n4530424\n10807169\n11093909\n1742106\n1742142\n1742185\n1742263\n1742346\n1742402\n5103451\n5103502\n5103613\n5103736\n5103948\n5771350\n7975250\n1743196\n8313553\n5103998\n7661023\n1743453\n1743475\n7877231\n1743532\n1743588\n1743604\n1743613\n5104056\n6097235\n1743641\n1743643\n1743710\n1743714\n4530214\n1743730\n1743768\n1743775\n4529900\n4529908\n4529915\n1743828\n1743856\n1743862\n1743867\n1743898\n1744071\n1744136\n1744180\n1744224\n4530632\n1744416\n1744498\n1744526\n1744542\n1744588\n1744593\n1744693\n1744699\n1744709\n1744714\n1744728\n1744731\n1744739\n1744742\n1744748\n1744763\n1744777\n1744782\n1744789\n1744808\n1744810\n1744860\n1744896\n1744901\n7964262\n1745079\n10844862\n1745131\n1745558\n1745561\n1745579\n1745600\n1745630\n1745634\n1745636\n1745643\n1745659\n1745676\n1745678\n1745705\n1745724\n1745725\n1745737\n1745756\n1745762\n1745771\n1745787\n1745788\n1745816\n1745830\n8162538\n8369868\n1745925\n1746027\n8424972\n1746174\n1746413\n1746440\n1746613\n1746644\n1746666\n1746689\n1746775\n1746832\n1746856\n1746876\n1746910\n1747050\n1747141\n5104442\n1747738\n4530138\n5104558\n1748203\n1748321\n6097234\n7588222\n9242559\n1748456\n5104641\n8691947\n10580256\n5103121\n5103176\n5103181\n5103185\n5103227\n5771227\n5771230\n5771232\n5771236\n5771239\n5771241\n5771243\n5771249\n5771256\n5771258\n5771259\n1831780\n4525500\n4525503\n4525505\n4525510\n4525530\n4525540\n4525547\n4525557\n4525562\n1920851\n7387466\n1922311\n1922343\n8016522\n1922584\n1922937\n5138543\n5138561\n5714680\n1923796\n1924097\n5138681\n1925221\n1925233\n4535172\n1925454\n1925918\n1925962\n1926054\n1926324\n1926861\n5882965\n1928248\n5139156\n1928945\n1929270\n1929659\n1929697\n8356768\n1930110\n1931179\n1931779\n1932411\n1932960\n5140214\n5140244\n5140436\n7634721\n7664111\n1933583\n1933793\n1926260\n1933095\n1933138\n1924494\n4522322\n5105339\n1919712\n1920237\n1920259\n1920491\n1920494\n1920496\n1920506\n4535307\n5137903\n5804895\n1920712\n5137582\n5137595\n5137612\n5137636\n5137695\n5137706\n5137708\n8203812\n1920218\n1748890\n1748922\n1748942\n1749050\n1749070\n1749164\n1749449\n1749661\n1749713\n1749744\n1749846\n1749869\n1749908\n1749921\n1749929\n1749936\n1749948\n1749954\n1749959\n1749975\n1750051\n1750076\n1750097\n1750131\n1750143\n1750159\n1750166\n1750288\n5104772\n5104781\n5104797\n5104829\n5104882\n5104891\n5104903\n5104927\n5104940\n5105054\n5105088\n5105106\n5105158\n5976947\n1751051\n5104759\n1749596\n1749608\n1749635\n8741260\n1735532\n4527339\n4527342\n1731826\n1731837\n1731860\n1954563\n5143380\n5143453\n5143477\n5143651\n1955694\n5143675\n5143697\n1956440\n1956524\n1956599\n1956710\n4525068\n1957266\n1957300\n1957570\n1957572\n1957632\n1957706\n1957718\n1957746\n1957816\n1957845\n1957852\n1957854\n4524421\n4524426\n5143944\n5143947\n1958024\n1958323\n1959383\n1959395\n1959467\n1959682\n1959735\n1959914\n1959919\n1960617\n1961037\n1961040\n1961068\n1961190\n1962204\n1962265\n1962268\n1962434\n1962516\n9812211\n1962636\n1962860\n1962972\n1962990\n1963011\n4302252\n1963306\n1963446\n1963463\n1964191\n1964195\n1964437\n1964471\n1964637\n1964653\n1964657\n8361848\n5144426\n1965166\n1965197\n1965208\n1965345\n1965640\n1965763\n1965777\n1965795\n1965810\n1965825\n1965841\n1965913\n1965996\n1966017\n1966351\n1966886\n5144534\n1967006\n1967011\n5144543\n1967245\n1967265\n1967273\n1967452\n1967597\n1967815\n1967873\n7681733\n1968678\n1968867\n11598540\n1968990\n1969291\n1969339\n1969954\n1970213\n1970227\n1970284\n5144677\n5144721\n5144782\n5144805\n5144900\n5145009\n5145136\n5145186\n5145260\n5145269\n5145409\n5145729\n7753668\n8014296\n9627567\n1971847\n1971858\n1971888\n1971986\n1972120\n1972185\n1972187\n1972234\n1972250\n1972278\n1972342\n1972377\n5145870\n5145965\n7541913\n7624494\n7960566\n1972434\n1972449\n1973414\n5146496\n5146510\n5146559\n5146599\n5146611\n5146659\n5146677\n5146762\n5146837\n5146842\n5146883\n5146946\n5146961\n5147038\n5147039\n5147062\n5147150\n5147171\n5147193\n5147208\n5147232\n5147245\n5147354\n5147441\n5147478\n7988195\n5147608\n5147638\n1975341\n1975546\n1975553\n1975571\n1975733\n8329661\n1975793\n8160782\n1975897\n1975903\n1976163\n5147681\n6097233\n7973517\n8414310\n1976993\n1977003\n1977007\n1977068\n4523725\n5147827\n5147834\n5769028\n5148247\n5148248\n1977967\n1978056\n1978065\n1978114\n1978375\n1978445\n4524636\n4524638\n10712554\n4524890\n4524902\n1978776\n1978821\n1978977\n5148286\n1979308\n1979430\n1979473\n1979781\n5148394\n5148424\n5148436\n5148462\n5148475\n5148486\n5148487\n1980521\n8421569\n1981696\n1982406\n1982500\n1982525\n1982529\n1982541\n1982542\n1982592\n1982636\n1982671\n1982746\n1982770\n1982791\n1982838\n1982867\n1982885\n1983000\n1983052\n1983111\n1983170\n1983260\n1983288\n1983387\n1983441\n1983442\n1983525\n1983548\n1983558\n1983648\n1983705\n1983755\n1983888\n1983896\n1983922\n1983997\n1983999\n1984117\n7752082\n7993353\n8015895\n8026858\n8262357\n8394261\n1984734\n1984942\n1984949\n1984954\n1985522\n1986052\n1986056\n1986157\n1986166\n1986171\n1986191\n1986220\n1986367\n1986452\n1986522\n1986575\n1986623\n5149315\n5768880\n1987527\n1987578\n1987737\n1987744\n4524221\n1988064\n1988593\n1988602\n1988642\n1988684\n7555991\n8388883\n5149414\n5149438\n1988881\n1989428\n1990066\n1990150\n1990551\n1990582\n5149474\n1991179\n1991371\n5149836\n5149839\n1992066\n5880512\n5880533\n5880545\n5880550\n5880552\n5880559\n5880563\n7657419\n8237343\n8632989\n5769062\n5769068\n5769072\n7429212\n9414984\n9563355\n4524740\n4523556\n4523560\n4523564\n4524054\n4524376\n4524822\n4523522\n4524070\n4524072\n4524403\n4524793\n4524914\n4524951\n4524955\n4525078\n9220953\n5144190\n5146412\n5149499\n5149569\n7769543\n8851663\n4523880\n4523883\n4523885\n5149659\n5149665\n5149704\n5149717\n5149746\n5149768\n5149784\n5149820\n7443518\n5146342\n5146379\n4302268\n4524393\n5141677\n1943397\n8277078\n8073674\n8133678\n8273661\n1945569\n7389824\n1947306\n1947335\n1949784\n1949794\n1949852\n1949929\n1949938\n1950006\n5142394\n7683096\n8109173\n8270406\n7633472\n1869467\n1869478\n1869489\n1869512\n9359597\n5769709\n1735844\n1735855\n9400895\n9530977\n10963226\n10982815\n5109821\n1758878\n1759055\n1759069\n1759079\n1759083\n1759097\n4533952\n7972792\n1759153\n1759407\n1759597\n1759620\n1759661\n1759667\n1759668\n1759673\n1759686\n1760104\n1760593\n1794361\n4534225\n8708745\n1760857\n1760887\n1760891\n1761041\n1761438\n1761735\n1761865\n1762244\n1762608\n5109498\n5109506\n5109523\n5109599\n5109614\n5109661\n5109670\n5109722\n1763610\n1764673\n1764987\n1765011\n1765017\n1765044\n4534245\n4534257\n8352161\n1765767\n1765954\n1766128\n1766130\n1766131\n1766137\n1766210\n1766274\n1766410\n1766418\n1766510\n7895336\n1766646\n1766718\n1766721\n1766741\n1766814\n1767511\n1767597\n1767608\n1767625\n1767655\n5772172\n5772176\n5772178\n5772180\n5772186\n5772196\n5772199\n5772202\n5772205\n5772206\n5772210\n8045644\n1768117\n1768150\n5110200\n1768308\n1768341\n5110213\n1768702\n1768729\n1768749\n1768771\n1768815\n1769057\n1769505\n1769519\n1769543\n1769566\n1769958\n1770150\n1770307\n1770353\n1770416\n1770477\n1770530\n1770573\n4532696\n8393221\n1771385\n1771391\n7725644\n1771509\n1771531\n1771997\n1772013\n1772169\n1772179\n5772129\n1772940\n1772956\n1772977\n1773062\n1773163\n1773309\n1773328\n1773484\n1774347\n4534046\n4534052\n4534057\n1775172\n5110593\n5772269\n1775891\n4534719\n1776067\n5110670\n1776330\n1776371\n5772446\n1776619\n1776862\n4534463\n1777253\n5110871\n5110885\n1778074\n4534299\n1778127\n1778143\n1778517\n1778596\n5111574\n5772222\n8253467\n1779435\n1779641\n1779690\n1780378\n1780926\n1780954\n1781008\n4533285\n1781694\n1782319\n1782560\n1782579\n1782615\n1782627\n1782672\n1782726\n1782727\n1782763\n1782777\n1782841\n1782872\n1782927\n1782948\n1783016\n1783037\n1783043\n1783045\n5112155\n5112160\n5112254\n5112283\n5112291\n5112336\n5112345\n5714973\n5715004\n5772349\n5772351\n7921916\n8043500\n1783855\n1784359\n1784812\n1784826\n1784853\n4534290\n1785185\n1785286\n4532886\n4532888\n4532890\n1785887\n1785888\n1785895\n1786007\n8292872\n1786360\n1786515\n1786619\n1786902\n1786936\n1787064\n1787112\n1787213\n1787267\n1787400\n1787504\n1787590\n1787610\n1787631\n1787697\n1787751\n1787770\n1787841\n1787859\n4534086\n1788425\n1788522\n4534011\n1788917\n1789076\n1789086\n1789267\n4533882\n1789481\n1789553\n1789580\n4534162\n4534166\n1789694\n1789695\n1789730\n1789745\n1789753\n1789755\n1789783\n1789785\n1789840\n1789849\n10068024\n10113008\n10312073\n10904813\n1789982\n1790002\n1790062\n1790072\n1790084\n1790160\n4533115\n8047343\n9092175\n1790361\n1790364\n9174377\n1790625\n1790671\n1791422\n1791784\n1792061\n1792292\n1792335\n1792377\n1792379\n1792383\n1792411\n1792414\n1792418\n1792426\n1792431\n1792449\n1792475\n1793877\n1793986\n1794102\n1794590\n1794599\n1795068\n1795215\n1795282\n7869346\n1795854\n1795930\n1795946\n1795957\n1796007\n1796117\n1796139\n1796145\n1796169\n1796188\n4534485\n4534486\n7438067\n8007222\n1796217\n7780930\n1796463\n8105817\n1796678\n4533431\n4533433\n4533442\n4533444\n4533446\n1798372\n11992983\n1798916\n1798931\n1798971\n1798974\n1798984\n1799132\n1799135\n1799701\n1799799\n1800004\n1800032\n7981386\n8742426\n4534389\n4534207\n10638451\n4532811\n4533273\n4534540\n8890502\n9135821\n4534038\n4533202\n4534398\n6544687\n4534538\n4533128\n4533136\n4533661\n4533671\n4534408\n4534458\n4534533\n5883985\n11478679\n5110644\n1774283\n1774285\n1779334\n5114198\n1763072\n5772063\n4534681\n4534685\n4534686\n8108800\n1771634\n1771650\n1771678\n1771698\n8581601\n1770772\n1770773\n1770869\n1770880\n1771040\n1771169\n1771204\n1771214\n1771245\n4533714\n7940536\n5113847\n5772309\n5108761\n4534525\n1773901\n1773904\n4533347\n4533360\n4532203\n4532206\n4532239\n4532253\n1822346\n1822587\n1822610\n1822613\n1822787\n1822796\n1822819\n1822830\n1823726\n1824113\n7875265\n1825064\n1825077\n1825083\n4534909\n4534914\n1825156\n1825176\n5118892\n5118904\n7624468\n7937573\n8397564\n1825539\n1825971\n1825983\n1826022\n1826033\n5118996\n1827125\n5119143\n5119245\n1827645\n1828162\n4534872\n1894164\n1894268\n5882039\n7712938\n1894714\n4535614\n4535632\n4535636\n8049830\n1894840\n4535827\n4535809\n4535817\n5128323\n5128357\n6231906\n9804158\n1895875\n1896841\n1897852\n1898286\n4299368\n1898544\n1902533\n1902749\n8140883\n6221746\n1905383\n8208583\n1909398\n1911093\n1911112\n1911168\n1911278\n1911461\n7728366\n7809779\n8078362\n1912325\n1912372\n1912470\n4299535\n4299565\n4299576\n4299597\n4299599\n5772890\n7428726\n7799370\n8810143\n5134098\n1913175\n1913178\n1913328\n1913351\n5134469\n5134569\n5134667\n5134682\n5134693\n5134815\n5134837\n5135191\n7700512\n7738295\n7791190\n7791558\n7798382\n8047165\n8167638\n8233062\n8298764\n8314088\n7854318\n1918669\n1918868\n8035998\n8176911\n7622059\n4535510\n5130587\n5130682\n7762841\n5132183\n8001799\n5135513\n5131910\n8138711\n1902143\n1902169\n1899433\n7768674\n7934873\n8168644\n8393082\n1951557\n5142870\n1951649\n1952014\n1952062\n1952130\n1952229\n5143048\n1952449\n1952532\n5143129\n5143147\n1952806\n1952812\n1951713\n1832819\n1832853\n1832862\n1832915\n1832927\n1832936\n1833096\n1833159\n5880257\n5880258\n6097224\n6097225\n6097228\n1853064\n1853079\n4529248\n1941864\n5120465\n5120577\n5120668\n5120675\n5120767\n5121040\n5121046\n5121177\n5121244\n5121517\n5121613\n5121737\n8273859\n1842196\n5120396\n1842485\n1842542\n1842690\n1842695\n5101394\n1730978\n1731263\n4525641\n1731598\n1872368\n1878782\n1878798\n1878862\n1878879\n1878895\n1878907\n1878939\n4531506\n4531517\n1879252\n1879408\n1879452\n5126212\n5126217\n1879534\n1879630\n1879655\n1879703\n1879731\n1879735\n1879765\n10915497\n1879970\n1880040\n1880062\n1880064\n1880094\n1880104\n1880138\n1880139\n1880140\n1880143\n1881126\n1881151\n9819403\n4531687\n1881208\n1881603\n4531713\n1881834\n4531975\n1882158\n1882210\n1882437\n1882459\n1882557\n1882729\n5126834\n8325294\n1882905\n1883067\n1883161\n1883386\n1883634\n4531690\n1884212\n4531708\n1884465\n4532122\n1884970\n1885937\n1886084\n1886320\n8223165\n1886579\n1886587\n1886951\n1887290\n1887701\n4531968\n10922411\n1888484\n1888579\n1888733\n1888743\n1888759\n1888826\n1889287\n1889942\n1890187\n1890522\n1890534\n1890540\n1890576\n1890656\n1890679\n1890699\n1890701\n1890703\n1890772\n1890823\n1890898\n1891013\n1891059\n1891167\n1891326\n1891386\n1891426\n1891453\n1891473\n1891493\n1891494\n4532022\n1892242\n9674732\n1884240\n1884255\n1884273\n1884280\n1884312\n1884332\n1884365\n1884370\n1884403\n5884851\n5126675\n5126680\n7446048\n8532380\n8537359\n8823068\n8856895\n8858121\n9100030\n9101339\n1889833\n1887108\n1887173\n1887177\n1887178\n4532050\n4532057\n4532088\n4532095\n4532097\n6121184\n4532160\n1846107\n1846111\n1846112\n1846133\n1846141\n1846149\n1846159\n1846210\n1846219\n1846236\n4528813\n4528818\n1830879\n1830937\n1830962\n1831002\n1831009\n1831128\n1831136\n1831168\n4525443\n4525448\n5122293\n1853587\n4526048\n1854202\n1854287\n1854347\n5122439\n1854792\n1854824\n1854849\n1854237\n4526094\n4526050\n7717983\n1858637\n1858698\n1858762\n1858775\n1858778\n1858873\n1859046\n1859100\n1859177\n4536292\n1859285\n1859305\n1859471\n1859480\n1859488\n1859534\n1859952\n1860063\n1860076\n4536472\n4536483\n7642240\n8200050\n1973467\n5123221\n5123042\n1866568\n5124911\n1867820\n7734292\n1841460\n1841616\n1841675\n1841813\n1841821\n1841989\n1861510\n1861644\n1861797\n1861862\n1862578\n1862580\n1862719\n1862765\n1862837\n5123922\n5124007\n5124029\n1864161\n1864358\n1864377\n5124143\n5124233\n1864652\n1993419\n1939432\n4525189\n1860108\n5119506\n5119513\n1830361\n1830372\n1830374\n1830380\n1830407\n1830408\n1830410\n1830457\n4525369\n1830498\n4525420\n4525425\n7976145\n1830537\n1830584\n1830632\n1830802\n4525364\n1754183\n1754332\n5107128\n5107219\n5107644\n5107829\n7410701\n7674502\n7761138\n7778368\n7903078\n7955974\n8158342\n8201251\n8348761\n8426357\n4522753\n1939658\n1939677\n1939680\n1939688\n1939717\n7646066\n1829322\n1829363\n8254441\n10055273\n1856005\n1856289\n1856384\n1856595\n1856620\n1856658\n1856668\n1856686\n1856691\n1856701\n1856730\n1856768\n1856772\n1856867\n1857068\n1857143\n1857577\n1857626\n9790007\n1857828\n1857829\n1857856\n1857863\n1857878\n1857924\n1857978\n1858074\n1858100\n1858113\n1858163\n8225376\n1938214\n1938520\n1938810\n1858531\n1838691\n1838811\n1838838\n1838905\n1838911\n4528692\n4528694\n1833500\n1833626\n4528658\n1834589\n1835031\n5770913\n1835156\n1835393\n1835396\n1835407\n1836899\n1837172\n1838969\n1839851\n1839893\n1841158\n1841159\n5770922\n5770942\n4529032\n5119893\n1801051\n1801896\n4534779\n4534782\n1802280\n1803012\n1803073\n4534762\n4534767\n5114311\n5114327\n8244266\n", + "regions/oceania.classes": "1992268\n1992283\n1992301\n1992315\n10648791\n1758114\n1758146\n10083877\n9840570\n9960252\n10190647\n10341307\n10435406\n1732978\n1733504\n1733507\n1733511\n1733535\n10155026\n1734851\n10730270\n1831974\n1831999\n1832023\n1832518\n1832533\n1832553\n1832569\n1832649\n1845271\n1845503\n1845586\n1846858\n1847066\n1847111\n1847622\n1847639\n8797017\n1849007\n1849010\n5122013\n1850156\n1850184\n1850633\n1850764\n1850781\n1850798\n1851039\n5806361\n11528968\n1851347\n1851543\n1852292\n10023115\n10498365\n11706893\n1850463\n9977181\n1829703\n1829776\n1829814\n1829866\n4705103\n4695719\n1828395\n1828400\n1828402\n8150089\n1828424\n1828426\n1828455\n1828456\n6196939\n1828471\n1828491\n1828540\n1828543\n1828544\n10707366\n10833593\n10882997\n5119346\n5119349\n5119350\n5119353\n5119354\n5119361\n10288636\n10639943\n1828826\n4695709\n1828976\n1837706\n1834428\n4684910\n4686897\n4686905\n4686907\n4686913\n1835848\n1835862\n1835874\n1835886\n1835897\n1835908\n1835928\n1838084\n1838978\n4685802\n1839600\n1839604\n4685468\n4684220\n4685557\n4685946\n1835460\n1845965\n1830812\n1830814\n1831458\n1831473\n1831499\n1831508\n1831565\n1831655\n1831667\n4708342\n5119868\n1839396\n10042504\n10094594\n10379915\n10531480\n10548275\n11919216\n9851221\n9985020\n6132868\n1761572\n1761573\n1761751\n1761752\n1761820\n1762151\n5109196\n1762849\n1762852\n10256550\n1762887\n1763957\n1763976\n1763994\n1764060\n5109782\n5109784\n5109786\n5109787\n5109788\n1764886\n1765653\n10099906\n10647358\n1766558\n1766560\n1767215\n10340332\n1772543\n5110490\n1774069\n5110546\n1777165\n1777166\n5110837\n11457930\n11609422\n4687991\n5110981\n10403441\n9610080\n1779671\n1780716\n1780856\n1780857\n1780860\n1780862\n10154280\n1782185\n1782326\n1782328\n1783173\n1783991\n10157400\n5112407\n5112410\n1784646\n1785832\n1786317\n5112500\n1786958\n1786990\n1787003\n1787009\n1787010\n5112531\n1788553\n6132936\n7346446\n9494526\n1788881\n6132826\n1788986\n1789225\n10090168\n1789794\n1790257\n1790450\n10598407\n1790900\n1790910\n9967251\n9983957\n5112940\n1791379\n1791514\n1791715\n9504222\n9860902\n10267570\n1795657\n10573746\n1796984\n10108671\n1797039\n6132979\n1798014\n1798018\n1798023\n1798025\n1798101\n5113950\n5884247\n11636323\n9440183\n9635978\n9923283\n10657151\n1798511\n10096855\n1787090\n1798529\n1798687\n1798768\n1798868\n4532352\n6115437\n8793873\n1799165\n1799167\n1799743\n1799757\n1803148\n1803197\n11909090\n1803781\n1803788\n1804246\n1804429\n1804430\n1804610\n10053130\n1804721\n1804727\n1804742\n10156470\n1805043\n1805505\n1805524\n1805806\n1806704\n1806871\n1807473\n1807477\n1807478\n1807479\n1807480\n1807483\n1807485\n1807488\n1807490\n1807491\n1807503\n11900897\n1808232\n6198302\n5115777\n12214821\n1809244\n1809248\n10189965\n1809381\n10010700\n1810752\n1810851\n5116397\n1812437\n1812453\n1812465\n1812658\n1814913\n10074808\n1815338\n1816029\n1816110\n1816264\n1816434\n1817065\n11703980\n1817160\n1817171\n1817217\n1817810\n1818413\n5118171\n10556853\n5118291\n1819970\n1820383\n1820401\n1820435\n10274769\n1821448\n10503495\n10106475\n9956017\n10270464\n9473918\n9559336\n12180031\n12203022\n12216332\n9852545\n10496181\n10629533\n10004820\n10248689\n10454874\n10443878\n10637588\n10643533\n10166724\n10480609\n8363709\n10178326\n10469564\n9621271\n5116504\n1818216\n9336001\n1781413\n1781428\n1781598\n1763761\n6115388\n1816634\n1816648\n1816673\n1774598\n1774604\n1774654\n1774691\n1774712\n1768630\n5111643\n1766892\n1813468\n10164453\n1768190\n9400916\n1768462\n9989156\n5113001\n5113036\n5109796\n1821464\n1821468\n1821542\n1822003\n1804120\n1804148\n6116076\n1782507\n1783715\n9918092\n1775796\n4687933\n4687934\n4687935\n1820137\n1799821\n1781531\n1798331\n1798335\n1784936\n1785072\n1765999\n1766007\n10330198\n10598038\n11612469\n1786597\n4687389\n5884188\n9935660\n5110013\n10196956\n10392889\n1811455\n1811462\n1811465\n1796941\n1782310\n12266659\n5108421\n1771903\n10097776\n4301309\n5112440\n1795542\n1860849\n1992434\n1992489\n1731886\n1731890\n1731906\n1731923\n1731926\n1731927\n1731980\n1732001\n1732005\n1732031\n1732033\n1732044\n1732052\n10640865\n9950697\n1833779\n1833782\n1833794\n1834524\n1834547\n4685588\n4685595\n1834793\n1835086\n1835348\n1835814\n4529064\n1837724\n1837726\n1837727\n1837968\n1838058\n1838065\n1838071\n1839658\n1839714\n1839721\n4684986\n1840346\n1841095\n1831752\n1852832\n1852859\n1860259\n1860260\n5123339\n10361029\n10625116\n5123419\n5880040\n5880041\n6132546\n10208422\n1853222\n10005632\n10433914\n11756119\n1869707\n1869714\n1870237\n1870450\n1870452\n1870459\n1870506\n1870509\n1870703\n1870988\n1871171\n1871333\n1872169\n9969513\n1872255\n1872470\n1872735\n1872812\n1872827\n1872850\n1872873\n1872901\n1873049\n1873079\n1873222\n1873285\n1873290\n1873291\n1873373\n1873620\n9858922\n1873773\n1873843\n5125591\n5125600\n5125602\n5125629\n1874146\n1875478\n1875534\n1875554\n1875584\n1875844\n1876479\n1876542\n10356445\n1876876\n10442332\n1876922\n1876955\n10142569\n1877406\n1877453\n5125943\n1877988\n1878173\n1878406\n1878470\n1878490\n9835867\n1888454\n1890056\n1890065\n10211808\n5884888\n10526954\n10065676\n10129011\n10279983\n11591775\n9857679\n10423263\n1748780\n1836906\n1836907\n1940575\n1736623\n5102683\n1736995\n1737015\n10146436\n10469532\n1737115\n1737131\n1737182\n1737187\n1737847\n1737893\n1738045\n1738081\n1738192\n1739051\n1739128\n1739220\n1739316\n1739553\n1739567\n1740586\n1740797\n1740828\n12259151\n1741074\n9826405\n1741084\n11906255\n10250474\n1741593\n1741820\n1741826\n1743182\n1743184\n1743319\n4707896\n4707900\n10073044\n1743680\n9867379\n1744998\n1745019\n1745307\n9586705\n1745957\n1746000\n1746462\n1746512\n4707848\n1747068\n1747215\n1747222\n6219423\n10021059\n10023049\n10080502\n10358334\n10476233\n1747639\n1747672\n1747814\n1747914\n1747924\n10355898\n1748103\n1748425\n1748442\n1748473\n1748486\n1748518\n1748648\n1748661\n1748751\n10185271\n9952043\n10302660\n10530383\n9909775\n10606887\n10624577\n10153630\n10549715\n12057008\n10462612\n11688440\n1738196\n5138967\n5138984\n1921010\n10581870\n1921123\n1921262\n1921263\n1921300\n5138069\n1922244\n1922745\n1923744\n1923782\n4708972\n4708973\n4708977\n1924362\n1924390\n1924558\n1924713\n4300393\n1925555\n4708984\n1925628\n1925711\n5138732\n5138743\n5806391\n1925877\n1926436\n1926448\n1926460\n1926574\n4300259\n1927274\n4709107\n1927707\n1927894\n1927895\n1927897\n1927900\n1928018\n4708927\n5139050\n1928382\n1928829\n1928915\n4709030\n1928923\n5139357\n5139524\n5139673\n1931189\n5139914\n1931889\n1931943\n1931956\n1931958\n4709051\n1932159\n1932172\n1932206\n1932246\n1932273\n4709095\n4708995\n11636481\n1932563\n7346444\n1932908\n4709133\n5806412\n1933647\n5138929\n4709102\n4709147\n1752534\n1752536\n1752537\n1752539\n1752545\n1752547\n1752903\n1752946\n1752947\n1753461\n11014495\n1753902\n1753906\n10368234\n9880359\n10203493\n9959898\n10560849\n10988070\n1919176\n1919340\n1919342\n1919344\n1919348\n1919381\n1919419\n1919421\n1919432\n1919444\n1919540\n1919626\n1919652\n1919744\n1919758\n5137808\n5137828\n5137832\n5137833\n5137842\n5137849\n5137850\n5137854\n1920496\n1920534\n1920535\n1920538\n1920541\n5137929\n5137949\n1920621\n1749124\n1749529\n1749531\n1749664\n1750131\n1750326\n5104822\n5104903\n5105081\n1750934\n1751024\n1828310\n1828317\n9882683\n9451208\n1758461\n1758596\n1758602\n9943941\n10118678\n1962159\n1962162\n9875141\n1970460\n1970463\n1970473\n1970485\n1964995\n1964996\n10295646\n1954236\n1954514\n1954522\n1954911\n10634980\n5143586\n9213204\n10217455\n1955039\n1955093\n1955153\n1955199\n1955202\n1955271\n1955272\n1955318\n1955413\n1955416\n1955422\n1955736\n1955737\n1955743\n1955745\n10560674\n11720357\n1955753\n1955755\n9593393\n1955763\n10003902\n10048667\n10062202\n10075732\n10132475\n10177276\n10341059\n10363151\n10398979\n10434798\n10456933\n10457796\n10471477\n10528420\n10623003\n11451126\n11468089\n11638437\n1955899\n10078526\n10360329\n11690145\n1956384\n9234402\n10257899\n1956416\n1956955\n1956958\n1956963\n1956978\n1956983\n10167252\n1957058\n1957062\n1957333\n1957413\n1957523\n1958454\n1959341\n1959379\n1959500\n1959595\n1959782\n1960004\n4702961\n1960106\n1960128\n1960201\n1960411\n5144115\n5144129\n1960521\n1960524\n1960940\n1960941\n1961180\n5144204\n1962656\n1962657\n1962659\n1962689\n1962829\n1962841\n1962842\n1962934\n1963297\n5144353\n1963782\n1964066\n1964137\n1964141\n1964143\n1964144\n1964151\n1964153\n1964155\n1964158\n1964174\n1964305\n1964331\n1964565\n1964702\n10184940\n10523304\n1965643\n1965649\n1965650\n9952367\n9976926\n1966185\n5144505\n1966977\n1966978\n5144553\n1967703\n10174909\n10268303\n10379201\n1967716\n9833933\n1968115\n1968131\n5144554\n5144558\n5144633\n1969104\n1969568\n11858774\n1969581\n6133643\n1970093\n1970094\n1970108\n1970145\n1970148\n1970150\n1970159\n1970265\n9939530\n10085335\n10109201\n10505033\n10054019\n5144806\n5144937\n5144942\n5144976\n5145079\n5145422\n5145495\n5145503\n1972407\n4702783\n4702784\n1972606\n9119710\n5146262\n11533770\n1972797\n1972800\n1972806\n1972903\n5146294\n1973719\n5146426\n5146456\n5146472\n5146578\n5146719\n5146805\n5146856\n5146880\n5146937\n5147046\n5147109\n5147121\n5147150\n5147160\n5147225\n5147522\n1975164\n1975212\n1975248\n1975249\n9975134\n10018221\n10572729\n9875420\n1975704\n1975722\n1976123\n1976142\n1976213\n1976243\n1976303\n1976341\n1976342\n1976345\n10118849\n9183738\n10089194\n1976890\n1976891\n1976933\n1976934\n1976939\n1976941\n1977350\n5147917\n5147923\n5147930\n5148066\n5148096\n5148097\n5148214\n5148223\n1977759\n1977764\n1977767\n1977773\n10188228\n1978082\n1978274\n1978281\n1978282\n1978283\n10058263\n10626099\n10530515\n1978904\n1978915\n1978919\n1978937\n1979041\n4702599\n4702603\n4702609\n1980035\n1980041\n1980044\n1980055\n1980063\n1980068\n1980491\n1980659\n1980694\n10378314\n10571987\n1980821\n1980827\n10860751\n11660632\n1982024\n1982033\n1982043\n1982047\n1982055\n1982071\n1982072\n1982085\n1982100\n1982102\n1982103\n1982120\n1982148\n1982221\n12116722\n9488754\n5149182\n10199372\n1984913\n1985167\n1985181\n1985228\n1985267\n1985490\n6133659\n1985809\n1985816\n1985826\n1985931\n1986101\n1986223\n4702731\n1986650\n1986693\n1986720\n1986774\n1986846\n1986942\n1987203\n1987747\n1987766\n1987775\n1987785\n6133591\n10533589\n5149369\n5149370\n5149371\n5149387\n9987116\n1987855\n4702892\n4702893\n4702911\n4702912\n1988302\n1988354\n1988360\n1988361\n1988362\n1988370\n1988376\n1988382\n1988384\n1988820\n1988894\n1989170\n1989181\n1989282\n1989283\n1989377\n1989522\n1989538\n9906229\n1990164\n1990165\n1990167\n1990178\n11465014\n1990255\n1990256\n1990371\n1991394\n1991468\n10155932\n5149873\n5149880\n5149940\n5149941\n1992167\n5880539\n9577234\n10224300\n9830270\n11799357\n10864093\n4702878\n10078800\n8501203\n9629450\n6133635\n10175639\n9617411\n10438474\n10411202\n10146771\n1954338\n1954344\n1954346\n1954351\n1954353\n1954356\n1954359\n10210935\n10263383\n5149753\n1963532\n1942060\n1942067\n1942618\n1942621\n1942623\n1942636\n1942641\n5141650\n1942674\n1943089\n1943090\n1943096\n1943101\n4689912\n1943236\n1943250\n1944106\n1944113\n4689963\n1944456\n1944462\n1944520\n1944523\n1944618\n1944619\n1944627\n1944629\n1944631\n1944635\n1944638\n4689905\n1945122\n1945225\n1945694\n1945715\n1945863\n1945893\n5142067\n1946720\n1946737\n1946763\n1947446\n1947449\n1947459\n1947491\n1947492\n1950272\n1950591\n1951157\n1951170\n5715127\n5142749\n1758727\n1758839\n1758850\n1760172\n1760173\n1760175\n1761788\n1761789\n1762657\n1762900\n1762902\n1764178\n1764553\n5109848\n5109855\n5109870\n5109872\n5109882\n8352161\n1765508\n4687817\n4687827\n7800469\n1765898\n11034779\n1767368\n1767381\n1767430\n10575632\n10597823\n5802396\n5883925\n9356770\n1768546\n1768554\n1768557\n1768560\n1768972\n1769095\n1769114\n1769209\n1769225\n1769245\n1769250\n1769260\n1769271\n1769272\n1769283\n1769293\n1769294\n1769298\n1769302\n1769308\n1769310\n4688049\n4688075\n4688092\n4688098\n9493016\n1771357\n1772668\n4687565\n1774797\n4301304\n6115946\n1774918\n10032003\n1775279\n1775631\n1776182\n1777120\n5111064\n5111195\n5111214\n5111249\n5111535\n5111600\n1779269\n1779276\n1779382\n1780072\n1780330\n5111967\n1782354\n1782466\n4687661\n1784513\n5112414\n1784761\n1785145\n1785149\n1785166\n1785181\n1785217\n1785220\n1785314\n1785329\n1785725\n7400814\n5112457\n5112460\n5112461\n5112464\n5112465\n5112467\n5112469\n5112474\n5112475\n5112480\n5112481\n1787165\n1787185\n1787226\n4687681\n10161728\n1789637\n1789957\n4687906\n1791793\n1791837\n4687930\n1791862\n1792996\n5113394\n1793661\n1794425\n1795068\n1795110\n1795597\n4688166\n4688169\n4688172\n10690739\n10700540\n10706419\n10716234\n10732033\n10741837\n10747908\n10799294\n10814936\n10824750\n10840540\n10840565\n10850393\n10850415\n10866199\n10891794\n11539735\n11858666\n1796791\n1798084\n1802776\n8729319\n4532269\n10659737\n6132989\n10378302\n9890366\n9910243\n10967713\n11054256\n10121804\n5109270\n5109349\n5109418\n5109437\n4688142\n1792555\n1792560\n8108800\n1770849\n1771203\n1771245\n1771296\n1771308\n1765752\n5113853\n5108665\n5108671\n5108724\n5108737\n5108787\n1759351\n1789530\n10370112\n11437060\n11615549\n4532208\n4532266\n6115772\n6115820\n6115822\n6115830\n9893740\n1782277\n1781248\n1767259\n1792814\n9325654\n10458175\n10683012\n10658576\n1822257\n1822916\n1822917\n1823493\n5118798\n1824280\n1826020\n1825238\n1825950\n1825956\n1826017\n1826823\n1827429\n1827507\n11905965\n1827802\n1827810\n1827826\n1827829\n10194663\n10551923\n5127748\n5806166\n1892821\n1893660\n1893699\n1893787\n4704279\n1894054\n7712938\n5128224\n5128225\n1895448\n1895956\n1896304\n11701883\n5129266\n5714367\n5806175\n5806176\n5806177\n1898970\n4704400\n4704401\n4704404\n4704407\n1899931\n1899932\n1899940\n1899943\n1899947\n1899950\n1899956\n1900872\n1900939\n1901669\n5130439\n5130456\n5130464\n5130476\n1902106\n1902108\n1902233\n1902244\n1902248\n1904728\n1904798\n1904884\n1904996\n1907569\n1907683\n1908700\n1908713\n1909216\n10656625\n1909436\n1909453\n1909457\n4704352\n4704356\n1909659\n1909854\n1910753\n1910809\n1910812\n1911755\n1913091\n1908108\n1915031\n1915144\n11535847\n5135839\n5136594\n5136713\n5136790\n5136868\n5136939\n5137085\n5137128\n5137257\n9251096\n4704316\n4704500\n4704501\n5131493\n5133088\n5806167\n6100725\n7642610\n1910576\n1910628\n1910629\n1910648\n1910662\n1951492\n1951874\n1853190\n10548683\n1735168\n1735391\n1735398\n5102423\n1735273\n5102432\n1941683\n1941702\n1941713\n5120675\n5121177\n5121613\n8273859\n1843313\n1843326\n1843331\n1843362\n1843370\n1843379\n1842119\n1842124\n5120341\n5120343\n5120357\n5120368\n5120379\n5120396\n1842508\n11854390\n9755262\n1843429\n1843485\n1843590\n1730519\n1730543\n1731097\n1731221\n11431507\n10535684\n11563728\n11904618\n5101502\n10049887\n10134558\n10307487\n5806352\n5806353\n10629470\n8008237\n1878744\n1878826\n1879227\n1879339\n1879340\n1879405\n1879408\n1879465\n1879471\n10851840\n10857326\n12231152\n5126231\n5126240\n5126241\n5126259\n5126284\n5126287\n5126292\n5126315\n5126332\n5126344\n5126357\n5126376\n5126381\n5126396\n5126397\n5126398\n5126434\n5126445\n5126449\n5126454\n5126458\n5802331\n5802333\n10489219\n5126635\n5126637\n1880352\n1880353\n1880439\n1880852\n1880858\n1880982\n1880986\n1881018\n1881019\n1881031\n1881041\n1881089\n1881122\n1881132\n1881151\n1881157\n9819403\n1881228\n1881320\n1881329\n1881336\n1881340\n10046436\n10348110\n10441857\n1881424\n1881485\n1881504\n1881515\n10751438\n1882297\n1882215\n1882253\n1882266\n1882272\n1882355\n5126798\n5126843\n5126866\n5126870\n5126889\n5126905\n5126916\n5126922\n5126946\n5127020\n5127024\n5127039\n5127044\n5127045\n5127054\n1882753\n1882767\n1882771\n1882773\n1882884\n1882905\n10156181\n10643403\n1882965\n10464411\n1883024\n1883028\n1883067\n4687288\n1883394\n5127097\n10069243\n1883775\n1883881\n1883943\n1883968\n1884228\n9294363\n10171108\n10209845\n1884434\n1884437\n1884449\n1884461\n1884479\n9837762\n1884503\n1884531\n1884539\n1884595\n1884607\n1884610\n4687228\n6120980\n1884816\n1884890\n1884909\n1884936\n1885263\n1885569\n1885572\n1885605\n1885630\n6133182\n9957790\n1885702\n1885763\n1885836\n1885919\n1885945\n1886088\n1886251\n1886362\n1886526\n10610809\n1886720\n1886729\n10613467\n1887036\n1887052\n1887054\n1887462\n1887580\n1887585\n1887686\n1887691\n1887894\n1888123\n1888537\n5127394\n1888906\n1888913\n1888926\n1888958\n1889043\n1889050\n1889071\n1889074\n1889239\n1889242\n1889249\n1889272\n1889277\n1889356\n1889381\n1889552\n1889563\n1890031\n1890187\n1890247\n10058481\n1890320\n1890335\n7543006\n5127530\n10180624\n1890410\n1890670\n1891236\n1891299\n10071588\n1891308\n1891533\n1891583\n10072800\n1892458\n1892462\n10446295\n6133140\n5771877\n10117959\n10227418\n4532125\n9967529\n9900218\n10145421\n10348945\n10521368\n10579230\n10594210\n6120803\n6133232\n6121010\n10257673\n10556366\n6121218\n10502505\n10397209\n6133154\n10462708\n6133158\n10063575\n10375403\n1886374\n1889769\n1889833\n1889875\n5127592\n5127595\n5127629\n5127638\n5127644\n5127669\n5127675\n5127698\n5802339\n10245924\n10769553\n1887126\n1888638\n1888639\n1886123\n1883885\n1880275\n1880286\n1880293\n1880305\n1880310\n1880316\n1880318\n1880321\n1880350\n1831097\n1831136\n4708183\n1731292\n5122307\n1853578\n10222583\n1853855\n1854019\n1854021\n10452421\n10546013\n11428453\n1854028\n1854249\n5122430\n5122455\n5806333\n1854906\n1858674\n1858718\n1858762\n1858930\n1858973\n1859061\n4536292\n9768621\n9590272\n9801765\n1859453\n9675743\n9749806\n6133397\n1859932\n1860026\n5123118\n5123137\n5123276\n6097269\n9759340\n1864897\n1867788\n10883659\n1868025\n7734292\n10019169\n1861451\n1861456\n1861457\n1861458\n1861488\n1861644\n5123636\n5123663\n1861951\n1861953\n1861958\n1862026\n1862293\n1862331\n1862363\n1862370\n1862401\n1862403\n1862414\n9836014\n1862434\n1862441\n1862449\n1862455\n1862475\n1862516\n1862521\n1862526\n6106708\n1862757\n1863034\n1863051\n1863384\n9899724\n1863467\n1863880\n1863955\n1864135\n4703479\n5124080\n8133328\n11954157\n5124332\n5124423\n5123852\n1992634\n9893936\n1992889\n1992907\n1992936\n1992938\n1992976\n1993021\n1993045\n6133769\n10022517\n1953217\n10132811\n10644798\n11503857\n1954025\n5143279\n1954120\n1830419\n1830435\n1754619\n1754803\n1754806\n1754814\n1757853\n4689394\n1830669\n8254441\n1855804\n1855807\n1855813\n1856005\n5122779\n1856348\n1856374\n1856516\n1857020\n1857033\n1857068\n1857097\n1857143\n1857180\n1857213\n1857233\n1857241\n1857258\n1857295\n1857315\n1857380\n1857385\n1857410\n1857626\n1857828\n1857829\n1857840\n1857882\n1857900\n1857935\n1857948\n1858100\n1858163\n1858283\n1858404\n1858411\n1858488\n1858523\n1858526\n1856891\n1856893\n1937698\n1937712\n1937745\n1937769\n1937819\n1937856\n1937988\n1938069\n1938074\n1938088\n1938129\n5141177\n5141187\n5141252\n5141254\n5803065\n1937444\n1937474\n4693675\n1937618\n1939131\n1939156\n1838251\n1838255\n1838276\n1838289\n1838297\n1838304\n1838308\n1838331\n4685893\n1833518\n1833523\n1833525\n1833531\n1833532\n1833535\n1833539\n4685097\n1833477\n4685485\n1833562\n4686368\n1833600\n1833653\n1833664\n1833834\n1834019\n1834078\n4685138\n4685219\n4685271\n1834497\n1834850\n1835082\n1835121\n1835123\n1835128\n1835345\n1835555\n1835609\n1835612\n1835635\n1835644\n4685116\n1835790\n1835821\n1835828\n4686483\n1836871\n1836873\n1836899\n4685431\n4685448\n1837053\n1837057\n1837150\n1837159\n1837172\n1837569\n1837572\n4686743\n1837857\n1837870\n1837894\n1838034\n4685065\n1838218\n1838224\n4685299\n4685306\n1838333\n4686617\n4686620\n4686621\n4686628\n1838626\n1838629\n1838633\n1838635\n1838641\n1838649\n8958353\n1838958\n1838960\n4528702\n4685566\n4685576\n1839317\n1839323\n1839325\n1839333\n1839370\n1839494\n5120053\n5120058\n5120063\n4685645\n4685650\n4685653\n4685655\n4685662\n4685669\n4685678\n4685683\n1840258\n1840260\n1840726\n1840774\n1840776\n1840796\n1840812\n1840844\n1840974\n4686042\n4686055\n4686111\n4686133\n4686164\n4686190\n4686214\n4686264\n4686266\n1841101\n1841180\n1841183\n1841188\n1841215\n1841219\n1841221\n1841302\n4685972\n5802248\n5802256\n5802257\n5802259\n4686039\n4686015\n4686016\n4686018\n4686022\n4686027\n4686029\n4684521\n4684591\n4684789\n4684888\n4684893\n4684925\n4684958\n4685629\n4685631\n4685778\n4685810\n4685980\n4685981\n4686355\n4686385\n4686386\n4686531\n4686532\n4686656\n4686697\n4686702\n4686844\n4686956\n10213314\n10225227\n1800441\n1800473\n1800522\n1800562\n10010361\n9859868\n9883274\n1800691\n1800843\n1800844\n5114394\n5114409\n9267364\n10240592\n1801170\n5114515\n1801303\n1801305\n1801316\n1801432\n1801461\n1801490\n1801519\n10026605\n10066605\n10088502\n10372377\n10448500\n10573425\n11496990\n11508472\n11594541\n11596898\n11698552\n11836409\n11871044\n1801787\n1801903\n1801922\n1802978\n4534792\n6112610\n6112661\n6133811\n9960072\n1802090\n1802702\n1802830\n1802833\n1802888\n1802998\n1803014\n1803021\n1803035\n1803039\n1803078\n1803091\n9485481\n10942408\n10264193\n5114303\n5114353\n", + "regions/oceania_excluding_australia_nz.classes": "1849007\n1850798\n1835460\n1831655\n1762151\n1763976\n1764060\n1765653\n1766560\n1777166\n4687991\n5110981\n9610080\n1780716\n1785832\n1786990\n7346446\n1789794\n1790257\n1791514\n9504222\n1796984\n10108671\n6132979\n1798023\n1798101\n5113950\n5884247\n1787090\n4532352\n6115437\n8793873\n1803148\n1803197\n1806871\n10189965\n1809381\n1816029\n1820401\n10270464\n12216332\n9852545\n10178326\n5116504\n1781413\n1763761\n6115388\n1816648\n1774598\n1774604\n1774654\n1813468\n9400916\n5109796\n1775796\n4687933\n4687935\n1781531\n10330198\n10598038\n11612469\n1786597\n4687389\n5884188\n9935660\n4301309\n5112440\n5880040\n6132546\n1872873\n5125602\n1875478\n1736623\n1736995\n1737015\n1740828\n1741820\n1741826\n1746000\n10581870\n1921123\n1921263\n1921300\n5138069\n1922244\n1922745\n4708972\n4708977\n1924558\n1924713\n4300393\n1925628\n1925877\n1926436\n1926448\n1926574\n4300259\n1927274\n4709107\n1928382\n1928915\n1931889\n1931943\n1931956\n1931958\n4709051\n1932159\n1932172\n1932206\n1932246\n1932273\n4709095\n4708995\n1932563\n7346444\n4709102\n11014495\n1919176\n1919340\n1919348\n1919444\n1919652\n1919744\n1919758\n5137808\n5137849\n5137854\n1920496\n5137949\n1920621\n1758461\n9593393\n1956384\n1957523\n1958454\n1964305\n1964331\n1966185\n11858774\n6133643\n9875420\n1976213\n5148214\n1980694\n1982221\n9488754\n1985181\n1985228\n1986774\n1987775\n6133591\n1989538\n10155932\n5880539\n9617411\n5149753\n1942060\n1942621\n1942636\n1944462\n1945225\n1945694\n1945715\n5142067\n1946737\n5715127\n1758839\n1762657\n5109848\n5109872\n5109882\n1765508\n1767430\n4301304\n5111195\n1780330\n5112414\n1785145\n1785725\n7400814\n4687681\n1791862\n1792996\n1795068\n1795597\n4688169\n8729319\n6132989\n10121804\n1771245\n5108665\n4532208\n6115822\n1825956\n5127748\n1892821\n1893660\n1893787\n4704279\n1895448\n1895956\n1896304\n11701883\n5129266\n5714367\n1898970\n1900872\n1900939\n5130439\n5130456\n5130476\n1904798\n1904884\n1904996\n1907569\n1907683\n1908700\n1908713\n1909216\n10656625\n1909659\n1909854\n1910753\n1910809\n1910812\n1911755\n1913091\n1915031\n1915144\n5135839\n5136713\n5136790\n5136939\n5137085\n5137128\n9251096\n4704316\n5131493\n5133088\n6100725\n7642610\n1910576\n1910629\n1910648\n1910662\n1951492\n1951874\n5102432\n1730519\n1730543\n8008237\n1879408\n1879471\n5126635\n1880852\n1880858\n1881151\n1881320\n1881329\n1881504\n1882253\n1882771\n1882884\n1882965\n1883067\n1884228\n9294363\n6120980\n1884890\n1884909\n1886251\n1886720\n1886729\n1887054\n1888913\n1889272\n1889277\n1890247\n1890335\n7543006\n5771877\n10145421\n6121218\n10502505\n5127698\n5802339\n1888638\n1888639\n1886123\n1858930\n1859932\n1864897\n7734292\n10019169\n1861451\n1861456\n1861457\n1861488\n1861644\n5123636\n1861951\n1862026\n1862293\n1862331\n1862363\n1862370\n1862401\n1862403\n1862414\n9836014\n1862475\n1862516\n1862526\n6106708\n1863467\n1863880\n1864135\n11954157\n5124332\n5123852\n1953217\n1954120\n1856348\n1857068\n1857143\n1857258\n1857380\n1856891\n1937698\n1937712\n1937819\n1937856\n1937988\n1938069\n1938074\n1938088\n1938129\n5141177\n5141187\n5141252\n5141254\n1937444\n1937618\n1939156\n10213314\n1800441\n1800691\n1801490\n1802090\n1802702\n1803035\n10942408\n", + "regions/south_america.classes": "12170988\n11871190\n1921992\n1921993\n1922015\n1922024\n5140603\n5140627\n1934331\n1934447\n1934570\n1934715\n1934991\n1935078\n1935295\n1935301\n1935343\n1935346\n1935350\n5140969\n5140980\n1936161\n1936233\n1936312\n1936378\n1936388\n1936391\n1936565\n1936566\n5141085\n1936649\n10132775\n10331171\n9620499\n10075196\n1868575\n1732901\n1845385\n1850798\n5110390\n5108951\n8331687\n1763156\n1763163\n1763184\n1763199\n1763223\n1763256\n8028211\n1767307\n1767499\n1768283\n1770038\n1770044\n1770263\n5110326\n5110327\n5110533\n1776163\n1777052\n1777179\n1777737\n1777942\n5110891\n9610080\n1781029\n9630748\n1782211\n8384839\n1786217\n1786219\n1786247\n7480993\n1787464\n11495556\n5112542\n11890681\n10295290\n1788372\n5112626\n1790230\n1790240\n1790246\n1790248\n1790257\n1790281\n1790287\n1790308\n1790787\n1790945\n5112843\n5112990\n1792827\n1794637\n1795042\n1795049\n7598729\n1798427\n4532352\n8150450\n1803163\n1803218\n1803266\n1803628\n1804522\n5115046\n1805184\n1805271\n1805691\n1805717\n1805955\n1805976\n1805982\n1806064\n1806075\n5115406\n1806702\n1806871\n1806872\n1806878\n1806887\n1807353\n1807355\n1807514\n1807553\n1807569\n1807787\n1808648\n1809066\n1809127\n1809294\n1809348\n1809491\n1809499\n1810145\n1810172\n1810318\n5116145\n5116198\n5116238\n5116252\n9350900\n1810824\n1810846\n1810866\n1810867\n7535515\n1811019\n1811026\n1811081\n5116423\n1812573\n1812881\n1814182\n1814323\n1814336\n1814359\n5117245\n5117347\n5117348\n5117361\n1814658\n1814665\n1814692\n1814823\n1814863\n8933773\n1815373\n5117413\n5117414\n5117430\n5117462\n5117463\n5117553\n1815856\n1816570\n5117685\n5117687\n1817086\n1817734\n11725616\n1817808\n1817852\n1817854\n1818252\n1819310\n1819873\n11904675\n10395440\n10214972\n10830546\n10851228\n12194283\n8429622\n1781420\n1793538\n1813413\n8177591\n1775796\n5117941\n5884258\n7716829\n8299504\n1784959\n1785024\n1785072\n5884188\n6117485\n7611914\n7924383\n1780646\n1780668\n1860184\n5123542\n1870308\n1870450\n1870988\n1871407\n8766638\n1872514\n1872873\n1872901\n1873079\n1873398\n7372375\n1876542\n1876665\n5125916\n1877282\n1877988\n5125525\n5143284\n5143285\n5131957\n4525777\n1740623\n8094357\n1741826\n10407953\n1935498\n4299071\n8345567\n9457324\n9622955\n1936026\n1936810\n1936859\n1934172\n1920844\n1920900\n1920923\n10657453\n1921123\n8825450\n1922455\n10278292\n1922637\n1922739\n1922849\n1922865\n1922867\n1922868\n8913017\n1923678\n1923679\n1923997\n10436850\n1924754\n8837974\n8840017\n8992718\n9157410\n9478718\n1924759\n10120854\n10307383\n10411472\n4300384\n4300393\n8389961\n8904480\n1925922\n1927988\n1927992\n1927996\n1928009\n4300406\n1928584\n1928589\n1929046\n1929049\n1929129\n5139578\n1929966\n1930079\n1930146\n1930167\n1930178\n1930179\n1930181\n1930270\n1930289\n1930361\n1930410\n1930422\n1930451\n1930466\n1930539\n1930563\n1930621\n1930653\n1930654\n1930728\n1930772\n1930779\n1930830\n1931119\n1931122\n5139864\n1931310\n5139898\n1932172\n1932576\n5140033\n5140054\n5140056\n1933260\n5140534\n1935869\n1935872\n1935888\n1935901\n1935912\n1935916\n1935925\n1935935\n10176954\n10573187\n9867272\n9960318\n5139928\n4300268\n9469139\n10068544\n9975698\n9156458\n11554226\n1751980\n1751986\n1752034\n1752109\n9941073\n1752477\n1752775\n1752825\n11507608\n5105367\n5105379\n5105380\n5105447\n5105491\n5105553\n1753603\n1753604\n1753661\n1753833\n1753864\n1753871\n12181811\n12226416\n12251247\n1919125\n1919128\n1919129\n1919130\n1919146\n1919149\n1919173\n1919233\n1919235\n1919239\n1919245\n1919267\n1919277\n1919282\n1919289\n5137540\n1919646\n1919649\n1919652\n1919653\n1919656\n4701298\n7661785\n5137553\n10703948\n1919937\n1919939\n1919943\n1919945\n1919947\n1919949\n1920266\n1920275\n5137819\n5137851\n1920426\n1920431\n1920437\n1920461\n1920463\n1920506\n1920552\n1920571\n1920581\n1920586\n1920691\n5137969\n1920803\n1920809\n5137588\n5137593\n5137608\n12191141\n12206386\n12234544\n12236627\n1955694\n1956099\n1959637\n1960090\n1960255\n1960268\n1960315\n1961155\n1961361\n10650351\n1962051\n1962086\n1962118\n1962120\n4302252\n10084195\n1963425\n1963433\n1963633\n5144363\n1964698\n1965887\n1966088\n1966185\n1967346\n1968313\n1968315\n1968321\n1968324\n1968538\n1968942\n10088253\n5145466\n5145560\n1972101\n5146179\n5146253\n1973665\n10404426\n9590066\n1975287\n1976073\n1976255\n1976651\n1976746\n1978268\n1978464\n9243264\n1978958\n1978959\n1981160\n1981252\n1981951\n1981973\n5148593\n1985485\n5149222\n1985647\n1987330\n1989582\n1990594\n1990998\n1991405\n1991410\n5880539\n9438677\n9497623\n9619088\n9237031\n10464824\n10221195\n10288719\n9391442\n5149753\n5149811\n5150002\n5150027\n5142358\n12200261\n11654707\n10713577\n12252926\n11423843\n11729494\n12239491\n1942098\n1942141\n1942170\n1942206\n12286003\n1942327\n1942370\n1942372\n1942416\n1942455\n1942509\n1942558\n5141662\n1942854\n5141763\n1943475\n1943563\n1943571\n1943588\n1943823\n1943824\n1943830\n1943832\n1943901\n1943936\n12198522\n12243973\n1943962\n1944004\n1944273\n1944275\n1944283\n1944286\n1944314\n1944324\n1944329\n1944335\n1944343\n1944361\n1944374\n1944421\n1944574\n1944580\n1944744\n1944769\n1944815\n1944832\n5141913\n6205994\n9551544\n1944977\n1945302\n1945312\n1945396\n1945462\n1945476\n1945477\n4301942\n1946074\n1946097\n1946163\n1946167\n1946174\n1946177\n1946290\n1946310\n1946327\n1946333\n1946469\n1946520\n1946544\n1946550\n1946577\n1946582\n1946756\n5142086\n1947021\n1947037\n1947048\n1947049\n5142176\n1947402\n1947506\n1947568\n1947587\n1947588\n1947597\n1947890\n1947894\n1947973\n1947979\n1947980\n1948046\n1948158\n7603634\n1948439\n1948446\n1948521\n1948630\n1948826\n1948858\n1948861\n1948883\n1948890\n8792353\n1948947\n1949049\n1949068\n1949105\n1949219\n1949322\n1949451\n1949492\n10574663\n1949515\n1949592\n1949621\n7726809\n9395000\n10202439\n1949687\n5142424\n5142436\n1950017\n1950019\n1950024\n1950044\n1950052\n1950133\n1950153\n1950197\n1950243\n1950654\n1950767\n1951062\n1951072\n12231344\n1951097\n1951103\n1951121\n1951125\n1951133\n5142822\n5142825\n5715127\n12180041\n5142829\n5977260\n1945374\n12175154\n12263736\n7911151\n1760309\n1761892\n1764686\n1764690\n1764693\n1765155\n5109845\n5109850\n5109855\n5109881\n5109954\n5109958\n1766285\n1767052\n1767571\n9511345\n1767719\n1770659\n6115953\n1777727\n5111546\n1780309\n1780390\n1780407\n1780437\n1780440\n1782031\n1782424\n1783811\n5112414\n1785168\n1785331\n1785462\n7400814\n1786360\n1786733\n1791331\n1791870\n5113365\n1792817\n1792996\n1796276\n7383338\n7689966\n7882824\n8405656\n1799900\n10446574\n8729319\n10118643\n9342344\n11615055\n11626773\n1792564\n1774929\n5108665\n1797903\n1824189\n1825373\n1825391\n1826772\n1827145\n10043566\n10266782\n1896863\n1903598\n1892915\n1908317\n1908337\n1908339\n1892509\n1892634\n1892729\n1892736\n1892742\n1892746\n1892759\n1892761\n1892770\n4299095\n8941801\n1892837\n1892851\n1892855\n1892856\n1892858\n1892863\n5127814\n1892944\n5128005\n5128007\n5128011\n5128034\n1893337\n1893377\n1893381\n1893480\n10653980\n1894074\n1894082\n1894085\n1894087\n1894088\n1894329\n1894342\n1894349\n10412261\n1895176\n1895185\n1895203\n1895250\n1895709\n9192882\n1895733\n1895745\n1895768\n1895773\n1895789\n1895809\n1895818\n1895820\n1895829\n9016382\n1895838\n1895886\n1896087\n1896126\n5128398\n5128423\n5128432\n5128433\n5128438\n5128446\n5128475\n5128488\n5128491\n9981187\n1896316\n1896614\n1896628\n10465059\n1896658\n1896749\n1896754\n10353400\n1896756\n1896763\n1896774\n1896876\n9361954\n1896932\n5129251\n9590057\n11701883\n5129257\n5925238\n8367663\n1897977\n1897980\n1897985\n10073321\n10365587\n10375186\n10401396\n1898077\n1898133\n1898143\n1898174\n1898200\n1898203\n10321900\n10208801\n10265559\n4299370\n8961830\n9396180\n9563837\n1898348\n1898350\n1898352\n1898358\n1898367\n1898368\n1898370\n1898374\n1898391\n1898402\n6228464\n5129473\n5129479\n5129480\n5129481\n5129489\n5129496\n5129502\n5129524\n5129531\n5129535\n9208233\n9255328\n1898686\n1898789\n1898841\n1898848\n1898858\n1898865\n1899048\n5129636\n4299211\n4299213\n10474236\n1899835\n1899873\n1899893\n1899922\n9028122\n9446281\n1899989\n8445010\n1899994\n1900014\n1900024\n1900026\n9925669\n1900112\n1900121\n1900131\n1900134\n1900172\n1900175\n1900195\n1900197\n1900199\n1900233\n1900249\n1900295\n1900303\n1900345\n1900408\n1900485\n1900523\n1900565\n1900578\n1900618\n1900626\n1900632\n1900768\n1900787\n1900825\n1900830\n1900872\n1900918\n9392084\n11701991\n1901001\n1901153\n1901189\n9072828\n1901257\n1901261\n8247566\n5130296\n1901533\n1901580\n1901744\n1901794\n1901801\n1901804\n1901810\n11832697\n5130528\n5130548\n9357385\n1902110\n1902111\n1902114\n1902117\n1902118\n1902211\n1902300\n1902346\n1902378\n1902384\n1902388\n1902406\n1902410\n1902451\n1902458\n1902479\n1902502\n5130559\n1902615\n1902623\n1902642\n1902660\n1902676\n1902680\n1902692\n1902702\n1902704\n10512675\n1902814\n1902880\n1902882\n1902885\n5130562\n5130574\n1903028\n1903607\n1903634\n1903636\n1903646\n10114865\n5131597\n5131608\n5131637\n1904382\n1905321\n10312760\n10615631\n1905451\n1906715\n1907190\n1907250\n1907272\n1907727\n1908123\n1908138\n1908144\n1908146\n1908148\n1908150\n1908168\n1908174\n1908199\n1908203\n1908204\n1908217\n1908256\n1908258\n1908262\n1908299\n1908302\n1908309\n1908577\n5133035\n10542548\n1908995\n1909004\n1909019\n1909025\n1909039\n1909064\n10046510\n1909070\n1909108\n1909128\n1909135\n1909155\n1909185\n1909191\n1909209\n1909211\n1909213\n9851867\n8727750\n1909241\n1909489\n1909532\n1909573\n5133142\n5133255\n5133265\n5133366\n5133451\n5133503\n5133523\n1910378\n10558140\n5133565\n5133568\n1910773\n5133581\n5133589\n1911076\n1911077\n5133591\n5133595\n5133609\n5133615\n5133621\n5133622\n5133623\n5133634\n5133635\n9086331\n9219529\n1911577\n1911939\n12322536\n12335869\n1911966\n1912003\n1912036\n1912119\n5133736\n5133786\n9277330\n1914416\n1914420\n1914424\n1914433\n1914440\n1914465\n1914500\n1914501\n1914511\n1914693\n1914697\n1915193\n9988287\n1915339\n1915368\n1915369\n1915396\n1915401\n1915415\n1915417\n1915427\n1915456\n10078453\n10196441\n10487080\n11572120\n5136372\n1916700\n1916701\n1916772\n1916790\n1917830\n1917834\n1917840\n1917911\n1918076\n1918077\n1918078\n1918086\n1918094\n1918097\n1918133\n1918149\n10250149\n1918220\n1918263\n1918268\n1918269\n1918280\n1918596\n1918601\n5137408\n1919007\n1919010\n5128045\n5128067\n5128118\n10059034\n10415847\n10454590\n10455658\n11573394\n5881748\n10259880\n5131982\n5132003\n5132008\n5132078\n5132137\n5132225\n5132239\n5132252\n5132283\n5132289\n5132317\n5132346\n5132347\n5132360\n5132374\n5132429\n5132440\n5132446\n5132483\n5714312\n9541133\n5133088\n5714299\n5714302\n5881400\n5130557\n1910628\n8643309\n10265841\n10511167\n12045866\n5132917\n5133008\n9964857\n9745549\n5142842\n1868334\n1868360\n5125118\n1941570\n1941717\n1941719\n1941864\n5101371\n5101374\n5101527\n7628188\n1879052\n1879160\n1879253\n1879413\n1879471\n5126494\n5126517\n5126533\n5126585\n5126637\n1880411\n1880505\n10056494\n1880537\n1880623\n5126663\n10861282\n11968849\n1881079\n1881151\n5126721\n5126751\n5126756\n1882786\n10107015\n1882812\n1882818\n1882819\n1882941\n1882960\n1883067\n10807787\n8981028\n5127090\n1883968\n8324720\n1884428\n1884437\n1884449\n1884479\n1884685\n1884774\n1884923\n1885099\n1885158\n1885950\n1886251\n1886729\n10510138\n1887004\n1887634\n1888047\n1888292\n1888646\n1888955\n1889267\n1889536\n1890089\n1890247\n11044778\n7543006\n1890368\n1890410\n1890512\n1890737\n1890876\n1891035\n10310835\n1891932\n1892131\n1892230\n1892311\n1892355\n1892477\n1892488\n5771877\n7864212\n8146570\n8425580\n6121010\n6121218\n8876855\n1886374\n1889721\n1889850\n5127562\n5127631\n5127680\n1886123\n1886207\n1831136\n1853242\n11773446\n7946946\n1858674\n1858930\n9645309\n9700261\n10103570\n9547681\n10129812\n1864905\n1865107\n1865108\n1865120\n1865132\n5124542\n5124557\n5124595\n5124597\n5124598\n5124607\n5806244\n10534664\n1865547\n1865557\n1865572\n1865578\n1865709\n1865711\n1865764\n1865827\n1865837\n1865869\n1865963\n1866003\n1866006\n1866100\n1866105\n1866162\n1866164\n1866201\n1866220\n1866311\n1866496\n1866838\n1866902\n1867108\n1867171\n1867218\n1867224\n1867231\n5124873\n1867426\n1867515\n1867535\n1867547\n1867552\n1867709\n1867722\n1867773\n10108753\n10591617\n9634178\n10248521\n10302305\n10547404\n5123615\n1861479\n1861559\n5123636\n1861773\n1861783\n1861784\n1861967\n1862033\n1862044\n1862046\n1862047\n1862049\n1862078\n1862083\n1862087\n1862088\n1862091\n1862094\n1862096\n1862123\n1862139\n1862163\n1862181\n1862198\n1862207\n1862225\n9559671\n5123701\n5123704\n1862547\n1862551\n1862658\n1862805\n1862874\n1862923\n1863109\n1863143\n1863151\n5123784\n5123801\n7803585\n1863366\n1863412\n1863416\n1863426\n1863699\n1863701\n1863706\n1863714\n1863724\n1863732\n1863734\n1863735\n1863742\n1863750\n1863757\n1863856\n1863858\n1863864\n11468731\n1864316\n1864320\n1864321\n1864329\n1864352\n5124249\n5124250\n5124268\n5124442\n5124443\n5124448\n5124450\n5124452\n5123954\n5123956\n5123961\n5123971\n5123979\n5123980\n5123983\n5123991\n5123996\n1864004\n1864021\n1864046\n1864058\n1864068\n1864070\n1864084\n1864098\n1864103\n1864106\n1992634\n1992817\n1953499\n5143232\n5143234\n9424853\n1953970\n1953998\n1830681\n1953166\n1751497\n1751507\n1751509\n1751524\n1751572\n1751588\n1751590\n1751606\n1751625\n1751626\n9332550\n1751670\n1751785\n5105193\n5105194\n5105212\n5105217\n5105218\n5105227\n5122556\n10055273\n1857380\n1857829\n1858163\n1858283\n10038125\n1937655\n1937793\n1937816\n1937885\n1938022\n1938059\n1938112\n1938148\n10600208\n11716362\n1937064\n1937090\n1937109\n1937110\n1937124\n1937129\n1937136\n1937144\n1937155\n1937162\n1937165\n1937167\n1937530\n1937540\n1939130\n1939136\n1939143\n5141321\n5141324\n5141331\n5141340\n1939336\n1836899\n1837172\n4534796\n9385576\n8924506\n", + "regions/south_asia.classes": "1935849\n1992277\n1992315\n1732115\n1732525\n1732830\n5101640\n1733154\n5102242\n1734519\n5102300\n1845547\n1849656\n1850633\n1831458\n11095591\n12208733\n1758625\n1759775\n1760140\n6132868\n1760201\n1760927\n1761213\n1761387\n1762151\n11562374\n1762219\n1762226\n5109766\n1763650\n1763976\n1764032\n1764043\n1764640\n1764886\n1765653\n1765863\n1766570\n1766584\n1766601\n1766618\n3257809\n6116699\n1766888\n1767758\n1767779\n1767780\n5110190\n11097510\n1767883\n5110232\n1768898\n10820762\n11467034\n10848620\n1769465\n1769772\n10881384\n1769827\n1769840\n1771977\n1772352\n5110417\n5110447\n5110490\n1775148\n5110546\n5110769\n1777166\n5110837\n9372988\n4687991\n5110986\n5110993\n6133058\n9610080\n5111830\n10203499\n1780716\n1782115\n1783302\n1785744\n1785832\n1786317\n1786711\n5112500\n1786980\n1786985\n1787009\n5112531\n1788553\n6132936\n7346446\n6132826\n1788953\n1789794\n1790876\n1790888\n1791010\n10743044\n1791514\n1791715\n11725043\n5113148\n5113330\n5113352\n5113385\n5884243\n9504222\n1793631\n5113925\n1796984\n10108671\n6132979\n9332506\n1797727\n1798014\n1798101\n5113950\n5884247\n1798481\n1798488\n1798504\n6132841\n6132850\n11732472\n1787079\n1798529\n1798700\n1798794\n1798807\n4532352\n6115437\n6133046\n8793873\n1799743\n1799751\n6132825\n1803148\n1803163\n1803197\n1803302\n1805044\n1805580\n1806814\n1806871\n1808180\n1808236\n1808381\n5115701\n5115771\n1809115\n10189965\n1809387\n12006709\n10882244\n5116395\n12182061\n1811686\n11736162\n12209759\n1813036\n1814653\n1814913\n1814928\n1814971\n1815260\n1815680\n1816065\n1816138\n1816292\n1816299\n1816362\n5117779\n1818413\n1818659\n1818991\n1819128\n6197200\n7346382\n1819280\n8407461\n6134035\n5118348\n5118422\n10546538\n1820275\n1820282\n1820318\n1820352\n1820393\n1820414\n1820440\n1820450\n1820458\n1820477\n1820478\n1820888\n1821105\n1822141\n10503495\n8897869\n12176367\n12183285\n10864524\n10270464\n9473918\n9559336\n6133292\n10062933\n10717837\n8148822\n12242422\n6133325\n9754232\n10972780\n11142432\n10309234\n12171522\n10399906\n10754772\n10812069\n6112449\n8452092\n8526388\n8543494\n8624848\n12257250\n10166724\n8831819\n1774829\n10178326\n10282389\n10400868\n10813849\n10907635\n10982648\n8874633\n9508913\n1783906\n5116504\n9336001\n1781413\n1781421\n8000103\n9478424\n1781598\n1794273\n1763761\n6115388\n6133297\n1774583\n1774598\n1774618\n1774626\n1774635\n1774640\n1774654\n1774661\n1774682\n1819852\n1804532\n1768461\n5109796\n1821920\n1822017\n1819337\n1819362\n1804182\n6122364\n1815315\n1781446\n6116076\n1783713\n1812394\n4687933\n6116646\n1820118\n1820137\n4532453\n6116413\n1781531\n1798329\n1798331\n1798335\n1784947\n1785072\n1785105\n1765999\n6133069\n10272611\n10598038\n11513188\n1786597\n4687389\n5884188\n6132915\n6132916\n5110012\n1819685\n10098436\n11717028\n1782310\n10094256\n6197138\n5108435\n1771903\n5112440\n10371735\n1869363\n1939510\n5141344\n6132546\n1870237\n1870450\n8766638\n1871988\n1872094\n1872850\n1872873\n1873079\n5125602\n5125635\n1874937\n1876168\n1876542\n1876592\n1876922\n1877788\n1878406\n1883045\n1888454\n6133441\n1736623\n1740469\n1740797\n1740828\n1743998\n1745947\n1746714\n1920851\n10159697\n10707501\n9916153\n1920957\n1920991\n1921009\n1921010\n1921021\n1921044\n7346426\n1921055\n10581870\n10825466\n1921092\n1921150\n1921163\n1921633\n7346430\n1922085\n1922111\n1922143\n1922244\n1922285\n1922288\n5138200\n1922584\n1922745\n1923019\n1923458\n1923491\n1923525\n1923649\n1923650\n1923651\n1923668\n1923809\n1923917\n1924193\n1924298\n1924323\n1924390\n1924458\n1924713\n1925381\n1925543\n1925731\n1925743\n1925877\n1926436\n1926437\n1926446\n1926448\n1926456\n1926546\n1926550\n1926574\n5883255\n7390086\n1926593\n1926611\n10116946\n10361239\n10606547\n1926800\n11008182\n1927034\n1927219\n1927242\n1927284\n4709111\n7408690\n1927348\n1927393\n1927445\n1927707\n1927717\n7680748\n5139040\n5139050\n1928349\n1928361\n1928376\n1928419\n1928628\n1928849\n1928908\n1928915\n9856663\n1929697\n5139309\n5139339\n8356768\n1930904\n1930935\n4535106\n1930954\n1930968\n1931109\n1931148\n1931509\n1931655\n1931656\n1931706\n1931735\n1931908\n1931943\n1931956\n1931958\n1931979\n1931997\n1932020\n1932043\n1932159\n1932166\n1932273\n4708995\n1932551\n7346444\n1932607\n5139990\n1932814\n1932863\n5806412\n1933028\n1933044\n1933084\n5140436\n1933583\n1933647\n1933679\n1933845\n1934187\n1934188\n1934192\n1934211\n1934221\n1935377\n1935405\n1935410\n1935454\n7346417\n10879371\n4709102\n1933095\n1752161\n1752483\n1752492\n1753215\n5105458\n5105547\n1753759\n6133481\n11673056\n1919151\n1919161\n1919181\n1919340\n1919344\n1919348\n1919412\n1919438\n1919534\n1919551\n1919581\n1919589\n1919635\n1919716\n1919728\n1919731\n1919741\n1919951\n5137747\n5137748\n1920237\n1920247\n1920259\n5137790\n5137808\n5137823\n5137828\n5137832\n5137849\n5137858\n1920349\n1920356\n1920357\n1920362\n1920369\n1920374\n5137861\n1920454\n1920467\n1920469\n1920472\n1920502\n1920506\n1920512\n4535307\n5137889\n5137891\n1920515\n5137920\n5137926\n5137932\n5137935\n5137938\n5137945\n5137946\n5137578\n5137605\n5137612\n1920218\n5137763\n7207679\n1758003\n1868952\n1869057\n1963095\n5143311\n5143315\n5143354\n5143384\n1954911\n6133648\n1955552\n1955694\n1955725\n1956384\n1956496\n1956536\n6133593\n1957161\n1957333\n1957368\n1957413\n1957611\n1958152\n1958158\n1958290\n1958305\n1958307\n1958454\n1958463\n1958483\n1959645\n1959667\n6133552\n1959948\n1960181\n6133509\n5144092\n5144093\n1960617\n6133518\n1960686\n1961647\n1962678\n1962839\n4302252\n1963168\n1963629\n1963733\n11644349\n1964024\n1964025\n1964029\n1964116\n1964316\n5144431\n5144472\n1966367\n1967590\n7346240\n1968147\n7681733\n1968363\n1968730\n1968746\n1969581\n6133643\n1970322\n7346252\n5144806\n5145075\n5145396\n5145502\n5145560\n5145624\n9194811\n6133516\n5146062\n1972614\n1972620\n10732353\n1972754\n1973242\n1973338\n1973358\n5146508\n5146566\n5146608\n5146677\n5146752\n5146763\n5147306\n1975164\n6133559\n11856219\n1975805\n1975806\n1975892\n9356491\n9410573\n9548993\n1976212\n1976213\n1976224\n1976228\n1976311\n1976469\n1976928\n1977182\n1977184\n5147917\n5147968\n5148043\n5148055\n1977813\n1977833\n1977863\n6133582\n1977962\n1978385\n1978405\n1978499\n1978524\n5148252\n1978789\n1978999\n6133546\n1979787\n1980521\n11449815\n1980827\n1981063\n7345811\n1982007\n1982221\n1982267\n1982865\n5149081\n5149136\n5149174\n1985152\n1985158\n1985167\n1985192\n6133659\n1985926\n1986032\n1986054\n1986508\n1986650\n1986779\n1986936\n1987203\n1987362\n1987377\n1987766\n1987767\n1987775\n1987776\n6133591\n1988257\n1988306\n1988420\n1988487\n1989355\n1989942\n1990043\n1991123\n5149609\n1991310\n1991378\n1991779\n10155932\n11098546\n11869776\n5734515\n10422582\n10632124\n6133595\n6133596\n10530208\n11555221\n6133670\n6133673\n6133674\n6133519\n11780161\n6133604\n10629052\n7346237\n6133562\n5734379\n6133523\n6133525\n6133542\n6133498\n10477629\n6133517\n10175639\n9617411\n9932090\n7345829\n11477039\n6133540\n10755716\n5149768\n5146303\n5146335\n1942522\n1942244\n1942251\n10773498\n1942378\n1942769\n1942808\n4689929\n1943212\n1943223\n1943236\n8277078\n5141795\n1943505\n1943519\n1943619\n1944503\n1944504\n1944521\n1944778\n5141924\n9050611\n1945088\n1945137\n1945173\n1945225\n1945227\n1945274\n1945286\n1945569\n1945605\n1945715\n1945738\n1945742\n1945748\n1945814\n1945856\n1945863\n1945874\n1945877\n1945878\n5142001\n1946051\n1946058\n1946067\n5142067\n1946432\n1946695\n1946737\n1946738\n1946917\n1947385\n1947409\n1947446\n1947492\n1947496\n1947661\n1947673\n1947727\n1947745\n1947753\n1947765\n1947805\n1947846\n1948062\n1948088\n5142213\n1948464\n1948465\n1948941\n1949008\n1949015\n1949336\n1949366\n1949404\n7346351\n8828146\n9068968\n5142338\n1950013\n7346356\n1950156\n1950171\n1950521\n1950533\n1950879\n1950936\n1951157\n5977247\n7633472\n5142725\n5142729\n5142730\n1758613\n5108636\n10329023\n1760620\n1761438\n1762657\n6132957\n1764174\n1764553\n5109843\n5109848\n5109882\n5109898\n5109931\n8352161\n1765658\n1766910\n1767368\n1767393\n5772171\n5802396\n5883925\n1769095\n1769978\n1771555\n1774797\n6115946\n5111535\n5772222\n1779641\n1782341\n1782354\n1782543\n5714973\n1784513\n1784761\n1785145\n1785181\n1785185\n1785314\n1786452\n1786573\n1787373\n4687681\n1789957\n1791660\n1793246\n7918000\n1793689\n1795068\n6133011\n4688169\n4688172\n1798090\n1800149\n6132989\n6132797\n5109385\n4534681\n1792555\n8108800\n1771675\n1771245\n5113853\n5108671\n5108724\n5108787\n5108794\n1789530\n10933525\n11615549\n4532206\n4532208\n4532266\n6115820\n6115822\n6115830\n1782273\n10063383\n9325654\n10458175\n1822490\n1822493\n5118565\n1824338\n1824751\n1824766\n1824997\n1825336\n7346284\n1825920\n5118996\n5119000\n6133700\n1827484\n5119239\n1827711\n6133680\n6133684\n7346276\n9921001\n5118841\n1892555\n5127748\n5806166\n11464595\n1892821\n5127835\n5127867\n5127893\n5127932\n5127971\n5127992\n9963153\n1893177\n5792081\n1893329\n1893341\n10477747\n1893538\n1893546\n1893612\n1893793\n1893923\n1893951\n4704279\n8832485\n9136904\n10333787\n1894002\n1894012\n5128161\n5128169\n5128182\n10398658\n10639484\n1895037\n1895159\n1895499\n1895527\n1895609\n1895667\n1895956\n1895984\n1895992\n1896061\n1896105\n1896304\n1896922\n1897664\n1897677\n1897685\n1897692\n1897747\n1897808\n1897814\n1897817\n1897834\n1897873\n4299368\n5129293\n7346344\n1898434\n1898521\n1898946\n1898958\n1898988\n1899187\n5130277\n1901399\n1901404\n1901411\n1901427\n1901428\n1901429\n1901435\n1901463\n1901850\n5130369\n5130444\n5130464\n5130471\n5130521\n5130542\n8189761\n4535689\n10577473\n5130775\n5130813\n5130814\n5130851\n5130904\n5130944\n5130971\n9968404\n9999965\n1904272\n1904701\n1904719\n1904943\n1904948\n1904996\n1905079\n1905142\n6221746\n1905383\n1906552\n1907576\n1907620\n1907637\n1907672\n1907687\n4535754\n5881946\n7976131\n1908352\n1908702\n1908775\n1908840\n1908871\n1908929\n7346301\n8978362\n10656625\n1909607\n1909649\n1909659\n1909810\n1909818\n1909838\n1909865\n1910706\n1911298\n1911300\n5133687\n5133689\n1911633\n1911736\n8078362\n5133693\n5133695\n10097687\n4535581\n5134098\n5134301\n8312017\n1913105\n1915079\n1915080\n1915110\n1915140\n1915154\n1915160\n1915262\n1915275\n1915325\n11516142\n11535847\n5135643\n1916410\n1916412\n1916758\n5136594\n5136681\n5136713\n5136752\n5136790\n5137156\n5137166\n5137291\n5137330\n1918026\n1918321\n1918394\n1918406\n1918408\n1918495\n1918497\n1918517\n1918533\n1918547\n1918554\n1918667\n1918736\n11645316\n4535618\n10595994\n10000384\n10043827\n5130587\n7762841\n5131142\n5131339\n5131372\n5131407\n5131443\n5131467\n5131495\n5131520\n5131555\n5131565\n10228568\n10277877\n10508423\n7346335\n8001799\n5806167\n6100726\n7642610\n5135546\n5128587\n5128644\n5129000\n5129025\n10201273\n1910628\n1910629\n1899818\n5129913\n1914708\n1914749\n1918584\n1951505\n1951507\n5142870\n1951675\n1951747\n1951859\n1952034\n1952177\n1952281\n5143080\n1952481\n1952551\n1952685\n1952704\n5143116\n1952857\n5885428\n1868409\n4702564\n1868499\n5141581\n1730519\n1730543\n1730948\n8008237\n8130866\n8402212\n1872361\n1878744\n1879125\n1879141\n1879227\n1879340\n1879379\n1879408\n1879471\n1879490\n5126635\n5126637\n1880451\n1880852\n1880858\n1880968\n1881089\n1881121\n1881126\n1881151\n1881170\n9819403\n1881293\n1881329\n1881336\n1881340\n1881515\n1881964\n1882253\n1882266\n1882310\n1882753\n1882767\n1882884\n1882901\n10156181\n1882930\n1882941\n1882960\n1882965\n1883067\n5127097\n1883943\n1884051\n1884229\n1884434\n1884437\n1884449\n1884461\n1884479\n1884671\n6120980\n1884774\n1884835\n1884844\n1884890\n1884908\n1884909\n4532146\n1885012\n1885262\n1885263\n1885630\n6133181\n1885745\n1885763\n1885826\n1885836\n1885919\n1885945\n1885994\n1886015\n1886241\n1886251\n1886362\n1886526\n1886720\n1886726\n1886729\n1887054\n1887586\n1887691\n1888324\n1888346\n1888537\n1888906\n1888911\n1888913\n1889043\n1889071\n1889074\n1889249\n1889272\n1889277\n1889356\n1889552\n1889563\n1890031\n1890287\n1890320\n1890335\n7543006\n10180624\n1890410\n1890512\n1890670\n1891167\n1891339\n1891583\n1891636\n1891758\n1891936\n1892153\n1892476\n10141437\n11056379\n9674732\n6133140\n5771877\n10227418\n4532125\n10145421\n6120803\n6133232\n6121010\n10397209\n6133154\n10959264\n6133158\n10375403\n5126680\n1886374\n1889833\n5127592\n5127629\n5127644\n5127656\n5127669\n5127675\n5127698\n5802339\n1888638\n1883885\n10410699\n1831136\n5122430\n1858674\n1858930\n1859453\n1859932\n1860026\n1865593\n1865660\n9914882\n1865930\n1866356\n6106943\n1866530\n1866556\n1866573\n11729388\n5124673\n5124716\n5120278\n10005133\n1861451\n1861456\n1861457\n1861488\n1861494\n1861644\n1861714\n1861721\n5123674\n1861933\n1861936\n1861937\n1861949\n1861951\n1862008\n1862061\n5123676\n5123685\n1862293\n1862363\n1862370\n1862394\n1862401\n1862430\n1862449\n1862454\n1862468\n1862475\n1862481\n1862516\n1862517\n1862526\n5123707\n1862765\n1862774\n1863034\n1863354\n1863394\n1863467\n1863646\n1863829\n1863909\n1863910\n1863944\n9578319\n1864126\n1864135\n8133328\n11738734\n11954157\n1864652\n5124305\n5124332\n5124348\n5124374\n5124415\n1864796\n6099041\n6106759\n7346401\n10193618\n5123837\n5123876\n5123884\n5123890\n8810912\n10191275\n10436020\n1992634\n1993496\n6133769\n1993637\n1953196\n1953326\n6132712\n1953407\n1953423\n11467944\n6132725\n6132729\n1954037\n5143241\n5143249\n1954120\n1754135\n1754368\n1754535\n1754919\n1754933\n1755248\n1757652\n5108318\n5108334\n11860016\n5108346\n1857380\n1857828\n1857938\n1858283\n8178453\n1858557\n1937707\n1937723\n1937792\n1937826\n1937892\n1937911\n1937931\n1938029\n1938052\n1938069\n1938088\n1938114\n1938147\n1938156\n1938174\n4692504\n8225376\n1936988\n1936993\n1937055\n5141144\n5141163\n5141177\n5141179\n5141185\n5141187\n5141199\n5141212\n5141215\n5141226\n5141233\n5141242\n5141254\n1937570\n1937580\n1937613\n1938520\n1939086\n1939168\n1939180\n1939215\n5141311\n5141317\n8546322\n10213314\n1800528\n1800539\n1800562\n1800572\n1800686\n1800821\n5114394\n5114400\n5114409\n11873966\n9544823\n5114425\n1801073\n1801080\n1801461\n1801503\n1801519\n10510325\n6112606\n6112661\n6133809\n6133811\n1801993\n1802090\n1802229\n1802337\n1802702\n1802827\n1802833\n1802939\n1803022\n1803035\n1803039\n1803060\n1803078\n10942408\n", + "regions/southeast_asia.classes": "1935614\n1935838\n1935849\n1992277\n1992283\n1992315\n1732114\n1732115\n1732830\n1733155\n5102207\n5102242\n1734519\n11453841\n1832235\n1847062\n1847641\n1849656\n8503184\n1831458\n1831631\n1831655\n11095591\n12259113\n12208733\n1759775\n1760140\n6132868\n6132869\n1760201\n1760927\n1760970\n1761213\n1761387\n1762151\n11562374\n1762219\n1762226\n1762298\n5109766\n1763782\n1763812\n1763976\n1764043\n1764060\n1764640\n1765653\n1765863\n1766558\n1766560\n1766570\n1766584\n1766601\n1766618\n3257809\n6116699\n1766888\n1767758\n1767779\n1767780\n5110190\n11097510\n1767883\n1768440\n5110232\n1768898\n10820762\n1769168\n11467034\n10848620\n1769425\n1769465\n1769772\n6132967\n1771975\n1771977\n1772352\n5110417\n5110447\n1775148\n5110546\n5110765\n5110769\n1777166\n9372988\n4687991\n5110981\n5110986\n5110993\n5111044\n6133058\n9610080\n1779456\n6132938\n10203499\n1780705\n1780716\n1782115\n1783302\n10208792\n1785744\n1785832\n1786317\n1786711\n11368766\n5112500\n6132971\n1786958\n1787009\n1788553\n6132936\n7346446\n6132826\n1788953\n1789225\n1789604\n1789794\n10766319\n1790888\n1791010\n1791514\n11725043\n5113148\n5113330\n5113352\n1792695\n5113385\n5884243\n9504222\n1793631\n5113925\n1796984\n10108671\n6132979\n9332506\n1797727\n1798101\n5113950\n5884247\n1798488\n6132850\n11732472\n1787079\n1798700\n1798868\n4301310\n4532352\n6115437\n8793873\n1799743\n1799751\n1799757\n1803148\n1803197\n1805044\n9663271\n1806814\n1806871\n11453492\n1808161\n1808236\n1808340\n6198302\n1809115\n10189965\n1809381\n12006709\n12176559\n1811686\n10671425\n11736162\n12209759\n1813036\n1814913\n1814928\n1814971\n1815260\n10826443\n1816029\n1816065\n1816138\n1816246\n1816292\n1816299\n1816362\n5117779\n1818413\n1818659\n1818991\n1819128\n6197200\n7346382\n1819270\n1819280\n1819421\n1819668\n5118348\n5118422\n10546538\n1820282\n1820291\n1820352\n1820393\n1820401\n1820414\n1820429\n1820440\n1820450\n1820451\n1820478\n7346381\n1820565\n1820888\n1821105\n1822141\n10503495\n8897869\n12176367\n10270464\n9559336\n6133292\n10062933\n10717837\n12216332\n12242422\n9852545\n6133325\n9754232\n10972780\n11142432\n10309234\n12171522\n10399906\n10754772\n8452092\n8526388\n8624848\n9927378\n6133262\n12257250\n1774829\n10282389\n10400868\n10469564\n10813849\n10907635\n10982648\n8874633\n9508913\n1783906\n5116504\n9336001\n1781413\n1781421\n1803461\n9478424\n1794273\n1763761\n6115388\n1816648\n6133297\n1774583\n1774598\n1774604\n1774618\n1774626\n1774635\n1774654\n1774661\n1774702\n1819852\n1780287\n1813174\n5111643\n1768461\n5109796\n1821464\n1821651\n1821920\n1822017\n1819337\n1819362\n1804182\n1815315\n1781446\n1781473\n6116076\n1783713\n4687933\n4687935\n6116646\n1820118\n1820137\n1819057\n6116413\n1781531\n1798329\n1798331\n1798335\n1785072\n1765999\n6133069\n10272611\n10330198\n10598038\n11513188\n11612469\n1786597\n4687389\n5884188\n6132915\n6132917\n9935660\n5110012\n1781350\n1796943\n1819685\n10098436\n11717028\n1782310\n5108435\n5108440\n4301309\n5112440\n10371735\n5141344\n1860259\n1860261\n1860274\n5123419\n5880040\n5880041\n6132546\n5123485\n5123489\n1870237\n1871988\n1872094\n1872848\n1872850\n1872873\n1873417\n5125602\n5125633\n5125635\n1874937\n1876168\n1876542\n1876592\n1877788\n1878406\n9835867\n1888454\n6133441\n1737313\n1740469\n1740524\n1740797\n1740828\n1743998\n1745947\n1746714\n1748605\n10159697\n10707501\n9916153\n1920957\n1920991\n1921009\n1921010\n1921021\n1921044\n7346426\n1921055\n10581870\n1921092\n1921093\n1921150\n1921163\n1921262\n1921263\n1921300\n7346430\n5138069\n1922057\n1922143\n1922163\n1922244\n1922285\n5138200\n1922745\n1922771\n5138257\n1922994\n1923458\n1923491\n1923525\n1923649\n1923651\n1923668\n4708972\n4708977\n1923883\n1923917\n1924193\n1924298\n1924323\n1924390\n1924417\n1924458\n1924558\n1924713\n1925543\n1925628\n1925679\n1925731\n1925743\n1925877\n1926436\n1926437\n1926446\n1926448\n1926456\n1926574\n5883255\n7390086\n1926593\n1926611\n10116946\n10361239\n10606547\n1926800\n10087308\n11008182\n11508257\n11543078\n1926972\n1927025\n1927034\n1927217\n1927219\n1927242\n1927272\n1927274\n1927284\n4709107\n4709111\n7408690\n8322165\n9994384\n10517500\n1927348\n1927393\n1927707\n1927717\n1927897\n5139040\n5139050\n1928349\n1928361\n1928376\n1928382\n1928419\n1928849\n1928908\n1928915\n9856663\n1930954\n1930968\n1931109\n1931148\n1931655\n1931706\n1931729\n1931735\n1931889\n1931906\n1931908\n1931943\n1931956\n1931958\n1931979\n1931997\n1932020\n4709051\n1932043\n1932159\n1932166\n1932189\n1932206\n1932246\n1932273\n1932287\n4709095\n4708995\n1932551\n7346444\n1932607\n1932812\n1932814\n1932863\n5806412\n1933028\n1933044\n1933583\n1933647\n1933679\n1933845\n5140534\n5140561\n1934187\n1934188\n1934211\n1934213\n1934221\n1935363\n1935372\n1935377\n1935405\n1935408\n1935410\n1935454\n5138929\n7346417\n4709102\n1752161\n1752373\n1752483\n1752492\n1752603\n1752651\n1752749\n1752903\n5105458\n5105547\n5105570\n11014495\n10932946\n7345843\n6133481\n10017342\n11673056\n1919151\n1919160\n1919176\n1919340\n1919344\n1919348\n1919407\n1919438\n1919444\n1919534\n1919551\n1919564\n1919581\n1919589\n1919635\n1919728\n1919731\n1919741\n1919744\n1919756\n1919758\n1919762\n1919951\n5137748\n5137808\n5137823\n5137832\n5137833\n5137847\n5137849\n5137854\n5137858\n5137861\n1920454\n1920467\n1920469\n5137889\n5137891\n5804932\n1920515\n5137920\n5137926\n5137932\n5137935\n5137938\n5137945\n5137946\n5137949\n5137955\n1920786\n1758003\n1758461\n1868952\n1869057\n1869178\n11794362\n1963095\n5143384\n6133648\n1955389\n1955552\n1955725\n1956384\n1957161\n1957333\n1957368\n1957413\n1957523\n1958152\n1958158\n1958163\n1958305\n1958324\n1958422\n1958454\n1958463\n1958483\n1959645\n6133509\n5144092\n1961162\n1961647\n1962678\n5734349\n5144345\n1963629\n11644349\n1964024\n1964025\n1964029\n6133500\n1964116\n1964331\n1964738\n5144431\n9370070\n7346240\n1968147\n1968363\n1968746\n1969581\n6133643\n1970034\n1970136\n1970322\n1970436\n7346252\n5144806\n5145075\n5145396\n5145495\n5145624\n9194811\n1972620\n10732353\n1972754\n1973242\n5146434\n5146483\n5146508\n5146566\n5146608\n5146752\n5146763\n5147306\n5147498\n1975164\n6133559\n9875420\n11856219\n1975711\n1975805\n1975806\n10835542\n1975892\n9356491\n9410573\n9548993\n1976212\n1976213\n1976228\n1976311\n1976469\n1977184\n6133548\n5147917\n5147968\n5148043\n5148055\n5148214\n1977813\n1977833\n1977863\n1978385\n1978499\n1978524\n6133560\n1978996\n1978999\n1979521\n1980694\n1980827\n1981063\n7345813\n1982221\n1982267\n1982865\n11121180\n5149136\n5149174\n5149203\n1985152\n1985158\n1985167\n1985181\n1985192\n1985228\n6133659\n1986054\n1986508\n1986774\n1986779\n1986787\n1986936\n1987203\n1987204\n1987362\n1987377\n1987766\n1987767\n1987775\n1987776\n6133591\n1988257\n1988420\n1988487\n1989942\n1991123\n5149609\n1991310\n1991378\n1991394\n10155932\n11869776\n5734515\n5880539\n10422582\n10632124\n6133596\n10530208\n11555221\n6133670\n6133673\n6133674\n7346249\n6133637\n11780161\n6133604\n6133607\n10629052\n6133562\n10864093\n6133523\n6133525\n6133498\n10477629\n6133575\n9962269\n6133517\n10175639\n9617411\n9932090\n7345829\n1942522\n1942060\n1942067\n1942251\n5141643\n10773498\n1942378\n1942618\n1942621\n1942636\n1942715\n1942808\n1942836\n4689929\n1942878\n1943212\n1943223\n1943236\n1943308\n5141795\n1943505\n1943619\n1943625\n1943757\n1944462\n1944483\n1944504\n1944521\n1944778\n5141924\n9050611\n1945088\n1945122\n1945137\n1945143\n1945173\n1945225\n1945227\n1945270\n1945274\n1945605\n1945694\n1945710\n1945715\n1945738\n1945742\n1945748\n1945814\n1945837\n1945856\n1945863\n1945874\n1945878\n1946019\n1946051\n1946058\n1946067\n1946145\n5142067\n1946432\n1946486\n1946695\n1946731\n1946737\n1946738\n1946916\n1946917\n1947385\n1947409\n1947449\n1947456\n1947491\n1947492\n1947496\n1947661\n1947673\n1947703\n1947727\n1947745\n1947753\n1947765\n1947775\n1947805\n1947846\n1948061\n1948062\n1948073\n5142213\n1948464\n1948465\n1949008\n1949015\n1949336\n1949366\n1949404\n1949419\n7346351\n8828146\n9068968\n1950013\n7346356\n1950169\n1950171\n1950302\n1950521\n1950879\n1951157\n5142725\n5142729\n5142730\n1758613\n10329023\n1762657\n6132957\n1763741\n1764553\n5109843\n5109848\n5109872\n5109882\n5109898\n1765508\n1766910\n1767368\n1767393\n10575632\n5802396\n5883925\n1769095\n1769209\n1769978\n1771555\n1774797\n6115946\n5111535\n1782341\n1782354\n1782757\n1785145\n1785314\n1785329\n1785725\n1786573\n1787367\n1787373\n4687681\n1788856\n1793238\n1793246\n1793689\n1795068\n1795597\n4688166\n4688169\n4688172\n6132989\n10121804\n6132797\n5109385\n8491927\n1792555\n5113853\n5108671\n5108752\n5108794\n1789512\n1789530\n10933525\n11615549\n4532266\n6115822\n6115830\n1782273\n1782289\n9325654\n10458175\n10683012\n1822487\n1822493\n1822852\n6133742\n5118565\n6133720\n5118582\n6133692\n1824766\n1824997\n1825336\n1825920\n1825956\n6133700\n1827484\n5119239\n1827711\n6133680\n6133681\n6133684\n9921001\n5118841\n5127748\n5806166\n11464595\n1892821\n5127867\n5127893\n5127916\n5127932\n5127955\n5127971\n5127992\n5127998\n9963153\n1893204\n1893241\n1893266\n5128034\n1893329\n10055104\n1893526\n1893546\n1893551\n1893612\n1893645\n1893660\n1893663\n1893787\n1893793\n1893921\n1893923\n1893951\n4704279\n8832485\n8982591\n10333787\n1893989\n1893993\n1893998\n1894002\n1894012\n1894057\n1894060\n5128161\n5128182\n1895037\n1895159\n1895448\n1895499\n1895609\n1895667\n1895670\n1895956\n1895984\n1895992\n1896061\n1896063\n1896073\n1896141\n1896142\n1896152\n1896304\n1896922\n1897664\n1897685\n1897692\n1897722\n1897747\n1897770\n5129266\n1897808\n1897814\n1897817\n10383968\n1898234\n4299368\n5129293\n7346344\n1898434\n5129417\n1898958\n1898970\n1898988\n1900093\n1900939\n1901213\n5130277\n1901372\n1901399\n1901404\n1901411\n1901427\n1901428\n1901429\n1901435\n1901463\n1901669\n5130369\n5130439\n5130444\n5130456\n5130464\n5130471\n5130476\n5130521\n5130542\n1902568\n10394962\n10577473\n5130748\n5130775\n5130813\n5130814\n5130851\n5130904\n5130944\n5130971\n5131058\n9999965\n1904272\n1904281\n1904282\n1904283\n1904701\n1904719\n1904728\n1904760\n1904764\n1904798\n1904884\n1904887\n1904888\n1904916\n1904921\n1904922\n1904932\n1904938\n1904943\n1904948\n1904996\n1905079\n1905142\n1907430\n1907432\n1907475\n1907534\n1907637\n1907666\n1907683\n1907687\n4535754\n5881946\n7976131\n1908352\n1908660\n1908700\n1908702\n1908707\n1908713\n1908775\n5133051\n11608942\n1908818\n1908840\n1908863\n1908871\n1908897\n1908929\n1908953\n1908962\n1909123\n1909216\n7346301\n8978362\n1909281\n1909319\n10656625\n1909607\n1909659\n1909810\n1909854\n1909879\n1909884\n1910371\n1910706\n1910753\n6133858\n1910809\n1910812\n5133687\n5133689\n1911736\n1911755\n5133695\n1913091\n1913105\n1915031\n1915079\n1915080\n1915110\n1915140\n1915144\n1915160\n1915262\n1915270\n1915325\n1915332\n8669164\n11516142\n11535847\n1916758\n5136514\n5136594\n5136681\n5136713\n5136752\n5136790\n5136866\n5136868\n5136939\n5137022\n5137085\n5137086\n5137128\n5137156\n5137166\n5137291\n5137330\n5137388\n1918321\n1918394\n1918406\n1918495\n1918497\n1918532\n1918533\n1918554\n10595994\n10000384\n10043827\n11419137\n11760688\n11840957\n4704316\n10376507\n5131142\n5131256\n5131339\n5131372\n5131407\n5131443\n5131467\n5131493\n5131495\n5131520\n5131555\n5131565\n10228568\n10277877\n10508423\n7346335\n5806167\n5881397\n6100725\n6100726\n7642610\n5128569\n5128644\n5128663\n5129000\n10201273\n1910576\n1910628\n1910629\n1910648\n1910662\n1914708\n1914749\n7346340\n1918584\n1951492\n1951505\n5142870\n1951675\n1951859\n1951874\n1951881\n1952147\n1952175\n1952281\n5143007\n5143076\n5143080\n1952685\n1952704\n5143116\n1952857\n1868409\n4702564\n1868499\n1868470\n5141581\n1730519\n1730543\n8008237\n8130866\n8402212\n1872361\n6133117\n1878744\n1879125\n1879141\n1879227\n1879340\n1879379\n1879408\n1879471\n5126635\n5126637\n1880353\n1880451\n1880852\n1880858\n1881121\n1881170\n1881293\n1881320\n1881329\n1881336\n1881340\n1881515\n1881964\n1882253\n1882266\n1882310\n1882753\n1882767\n1882771\n1882884\n10156181\n1882930\n1882960\n1882965\n1883067\n1883394\n5127097\n1883873\n1883943\n1883951\n1884051\n1884228\n1884229\n9294363\n1884434\n1884437\n1884449\n1884479\n1884671\n6120980\n1884774\n1884816\n1884844\n1884890\n1884909\n4532146\n1885012\n1885263\n1885569\n1885630\n1885745\n1885826\n1885836\n1885919\n1885945\n1886015\n1886241\n1886251\n1886526\n1886700\n1886720\n1886726\n1886729\n1887054\n1887586\n1887691\n1888027\n1888040\n1888092\n1888324\n1888891\n1888906\n1888911\n1888913\n1889043\n1889053\n1889071\n1889074\n1889249\n1889270\n1889272\n1889277\n1889356\n1889358\n1889531\n1889552\n1890031\n1890287\n1890320\n1890335\n10180624\n1890410\n1890512\n1891339\n1891583\n1891636\n1891758\n1891936\n10141437\n6133140\n5771877\n4532125\n9967529\n10145421\n6120803\n6133232\n6121010\n10502505\n10397209\n6133154\n6133158\n1886374\n1889833\n5127592\n5127629\n5127644\n5127656\n5127669\n5127675\n5127688\n5127698\n5802339\n6121184\n1888638\n1888639\n1883885\n10410699\n5122430\n1858698\n1858930\n1859453\n1859932\n5123180\n1864897\n1865593\n1865660\n1865666\n9914882\n1865930\n1866237\n6106943\n1866530\n1866573\n9906979\n10047346\n11729388\n5124716\n5120278\n10019169\n10005133\n1861451\n1861456\n1861457\n1861488\n1861494\n1861644\n1861665\n1861714\n1861721\n1861933\n1861936\n1861937\n1861949\n1861951\n1861975\n1862008\n1862026\n1862061\n5123676\n5123685\n1862293\n1862363\n1862370\n1862394\n1862401\n1862403\n1862414\n9836014\n1862430\n1862434\n1862449\n1862454\n1862468\n1862475\n1862481\n1862516\n1862517\n1862521\n1862526\n6106708\n5123707\n5123709\n1863034\n1863354\n1863388\n1863394\n1863467\n1863646\n1863829\n1863848\n1863880\n1863907\n1863909\n1863910\n1863924\n1863944\n1864126\n1864135\n8133328\n11738734\n11954157\n5124304\n5124305\n5124332\n5124348\n5124374\n1864796\n6099041\n6106759\n10193618\n5123824\n5123837\n5123852\n5123870\n5123876\n5123884\n5123890\n8810912\n10189661\n10191275\n10436020\n1992634\n1993496\n1993637\n1953192\n1953196\n1953217\n1953326\n1953356\n6132711\n6132712\n1953407\n1953423\n11467944\n6132725\n6132723\n6132729\n1954037\n5143241\n5143249\n5143266\n1954120\n6132728\n1754135\n1754263\n1754368\n1754516\n1754535\n1754919\n1754933\n1757652\n5108318\n5108334\n5108335\n11860016\n5108346\n9004359\n1855630\n1857380\n1857828\n1858283\n8178453\n1858557\n1937665\n1937699\n1937707\n1937712\n1937723\n1937769\n1937826\n1937847\n1937856\n1937892\n1937911\n1937937\n1937966\n1937975\n1937988\n1938052\n1938069\n1938074\n1938088\n1938114\n1938122\n1938129\n1938174\n4692504\n9017206\n1936988\n1936993\n1937011\n1937037\n5141154\n5141163\n5141172\n5141177\n5141179\n5141185\n5141187\n5141188\n5141195\n5141197\n5141198\n5141199\n5141202\n5141207\n5141212\n5141215\n5141226\n5141229\n5141230\n5141233\n5141236\n5141242\n5141252\n5141254\n1937444\n1937514\n1937530\n1937570\n1937580\n1937613\n1937618\n1939086\n1939156\n1939168\n1939225\n5141311\n5141317\n10213314\n1800441\n6133777\n1800539\n1800562\n1800572\n1800686\n1800691\n1800821\n5114394\n5114400\n11873966\n9544823\n5114425\n1801080\n1801170\n1801196\n5114465\n1801461\n1801490\n1801503\n1801519\n10066605\n10510325\n6112606\n6112613\n6112661\n6133809\n6133811\n1801993\n1802090\n1802337\n1802702\n1802827\n1802833\n1802919\n1803022\n1803035\n1803078\n6133803\n5114303\n", + "regions/subsaharan_africa.classes": "1992315\n6113873\n1732087\n5101590\n1732660\n1732955\n6113959\n1845270\n1845574\n1845616\n4528100\n1847111\n9868978\n1850640\n5119338\n1839146\n1831458\n11513018\n1763976\n1766612\n1767883\n1769739\n1771455\n1772352\n1772447\n1772689\n5110546\n8979264\n1776265\n1776268\n4687991\n1778430\n5111054\n1786190\n1786980\n1786984\n1786985\n1787009\n1788553\n6116754\n1789057\n1789498\n1789805\n1790287\n1791715\n1792210\n1795074\n1796984\n5884245\n6117055\n6117124\n1798481\n6115283\n1798802\n4301310\n4532352\n6115437\n8793873\n1803148\n1803163\n1803197\n1804337\n8865876\n1806871\n1806913\n1808172\n1808359\n1809158\n1809159\n1814552\n8916247\n5117776\n5117791\n5117805\n6122301\n6121912\n1820802\n1820948\n1821012\n1821436\n6122103\n10503495\n8881513\n4532549\n12017078\n6112547\n6112472\n5115381\n1774826\n5116504\n8723161\n5108808\n1781413\n1780897\n1794268\n1803590\n1803593\n1819320\n1772374\n6115388\n1816685\n1774600\n1803544\n1803545\n1817973\n1804532\n1813460\n1807634\n1782645\n1768459\n5113036\n1821547\n1821581\n1821684\n1768212\n5118223\n1820573\n6116073\n1816775\n1803306\n4687933\n6116659\n6116661\n6116669\n6116674\n4532453\n1814877\n11754729\n1781503\n6115504\n1785072\n1785105\n1765997\n4687389\n5884188\n1809585\n1807924\n1782310\n1777517\n6115973\n5123339\n5123474\n1869595\n1870450\n1870988\n1871407\n8766638\n4531365\n1871754\n1872850\n1872873\n1872901\n1873051\n1873079\n1873215\n1873890\n1876542\n1876922\n1877788\n1890024\n5884888\n1877035\n5125780\n1871504\n12231385\n1736623\n1737131\n1737509\n4530608\n1740762\n1740797\n11846897\n1745781\n1921064\n10581870\n1921650\n10858809\n11374171\n11378618\n1922063\n1922064\n1922244\n1922291\n1922468\n1922679\n1922689\n1922694\n1922701\n1923465\n1923473\n10656713\n1924392\n1924429\n8023645\n8951523\n1924713\n5138701\n1925410\n1925609\n1925615\n1925676\n1925693\n1925694\n1925801\n1926530\n1926531\n1926539\n1926546\n1926550\n1926817\n1927313\n1927633\n11667997\n1927943\n1927955\n1927979\n1928070\n1928076\n5139040\n1928389\n5139188\n5139201\n1928746\n1929059\n1929697\n1930904\n1930916\n1930923\n1930931\n1931046\n1931403\n1931437\n1932177\n1932302\n1932332\n1932354\n8833509\n7346444\n8177775\n1932580\n1932629\n5139954\n5140006\n1932751\n1932752\n1932753\n1932882\n1932976\n9954885\n1933583\n1933649\n5138841\n5138921\n7964910\n1933204\n1752327\n1752805\n5105584\n1919181\n1919194\n1919210\n1919213\n1919214\n1919223\n4535280\n4535285\n1919346\n1919660\n1919663\n1919665\n1919924\n1919929\n1919930\n1920181\n1920258\n5137790\n5137799\n5137827\n5137828\n5137849\n1920348\n1920353\n1920359\n1920362\n1920363\n1920369\n1920370\n1920374\n1920377\n1920378\n1920379\n1920381\n1920390\n1920395\n1920401\n1920404\n1920405\n4699245\n5137863\n1920496\n1920506\n1920509\n4535271\n5137988\n5137996\n5137998\n1920795\n1920815\n1920816\n5137612\n5137663\n1750326\n1868884\n1869043\n1869238\n1869278\n1869286\n1955694\n1956897\n1959839\n1960105\n1961025\n4302252\n1963168\n1964076\n1966255\n1967209\n1967324\n1967438\n1967606\n5144691\n5145075\n5145396\n5145468\n5145502\n5145842\n1973171\n5147058\n1978017\n1980521\n1980525\n1980533\n1982267\n1985742\n4525097\n6118530\n6214843\n4524223\n1988064\n1992066\n7507369\n4525034\n4523519\n6119299\n6119323\n6119359\n6119488\n5149664\n5149787\n1987602\n1954382\n11794114\n1942762\n1942790\n1942793\n1943236\n8073674\n1944234\n1944910\n1945535\n1945571\n1945587\n1945786\n1945877\n1945878\n1945980\n1946037\n1946660\n1946661\n1947112\n1947113\n1947117\n5142130\n5142160\n1948371\n1948994\n5142352\n1950156\n1950877\n1948916\n1758839\n5108619\n1761439\n1762383\n5109646\n1764174\n4534245\n4534250\n4534275\n11797244\n5109843\n5109848\n5109855\n5109931\n8352161\n1766072\n9105656\n5772171\n5772206\n1768042\n1768048\n1770416\n1774470\n1774797\n6115946\n5772222\n1780049\n1783777\n1784349\n1784591\n1785181\n1785185\n1785329\n1785361\n1786360\n1787264\n1787438\n4534166\n4534194\n1789957\n1790364\n1791758\n1792418\n1794507\n1795068\n9803522\n1796451\n4532269\n6116341\n6116368\n6116899\n1763072\n5109259\n5109345\n5109407\n4534675\n4534681\n4534686\n6116440\n8108800\n1770821\n1771040\n1771245\n1765751\n5108660\n5108671\n11714235\n11819666\n1797793\n1797864\n1797942\n1797965\n4532203\n4532206\n4532216\n4532266\n6115772\n6115793\n6115822\n1782267\n1767302\n8363507\n10458175\n5119183\n1827775\n10023821\n1892544\n1892554\n1892555\n1892621\n11688586\n5806166\n10587253\n1892811\n1892814\n5127822\n1893558\n1893562\n1893901\n8049830\n1895956\n1896547\n1896600\n1896603\n5128545\n1897904\n1897946\n1897965\n1897970\n1897972\n1898002\n1898017\n10114575\n1898286\n1898290\n4299368\n4299370\n1899071\n1899144\n1899164\n1899198\n1900053\n1900055\n1901781\n1901782\n1901850\n11546465\n11623814\n11726907\n11841763\n5130335\n5130347\n5130392\n5130393\n5130396\n5130448\n5130464\n5130467\n5130487\n5130502\n5130542\n1903009\n1903661\n1904206\n1906006\n1906014\n1906030\n1906063\n1906117\n5132523\n5132529\n5132540\n5132545\n5132550\n5132591\n5132713\n1906604\n1906621\n1906679\n10569879\n11378273\n5132839\n1907399\n4535754\n1908356\n8727750\n1909818\n5133610\n10203260\n1912506\n8964866\n1915499\n11372793\n11375508\n12301192\n12357826\n12358748\n1909736\n5135573\n5135944\n5136059\n5136113\n5136200\n5136306\n1918207\n1918212\n1918688\n1918776\n4535539\n5137397\n9902073\n10717680\n5131347\n5131442\n5131540\n5133088\n7642610\n5135513\n10873137\n1896957\n5128597\n5128825\n5128984\n5129091\n5129190\n9087922\n1910496\n1910501\n1910628\n1910629\n1910663\n1842097\n4301036\n4529738\n6122527\n1878656\n1878804\n1878951\n1879001\n1879227\n1879340\n1879408\n1879427\n1879452\n5126204\n1879471\n1879490\n1879655\n1879691\n1880011\n5126637\n1880408\n1880865\n1881126\n1881147\n1881151\n5126668\n9819403\n1881303\n1882110\n1882884\n1882905\n1882941\n1882960\n1882965\n1883067\n1883124\n1883386\n1883458\n5127094\n1884051\n1884437\n1884449\n1884479\n6120980\n1884774\n1884844\n1884909\n4532146\n1885024\n1885262\n1885745\n1885764\n6120861\n1885836\n1886015\n1886088\n1886104\n1886251\n1886648\n1886729\n7562564\n1887054\n8955839\n4531670\n1887694\n1888346\n1888915\n1889071\n1889272\n1889277\n1889543\n9228024\n1890287\n1890335\n7543006\n1890346\n1890410\n1890534\n1890670\n1891167\n1891217\n4532022\n4532024\n1891583\n8986756\n1892456\n1892476\n5771877\n6133232\n6121010\n6121218\n6133158\n8876855\n1886374\n1889833\n5127644\n5127669\n5127675\n5802339\n6121184\n1886207\n1883885\n1831136\n1858674\n1858930\n1859285\n1859932\n1866249\n1866252\n1866262\n1866421\n5124813\n1866980\n1867009\n1867014\n1867295\n1867312\n1867673\n1867744\n1867749\n1867750\n1867751\n1868014\n1868049\n1868060\n11414590\n11464362\n5120278\n1861433\n1861510\n1861522\n1861544\n1861584\n1861592\n1861644\n1862293\n1862311\n1862401\n1862433\n1862692\n1862719\n1862765\n1862989\n1863034\n1863282\n1863544\n1863640\n9178932\n5124071\n5124088\n5124093\n5124109\n1864576\n1864652\n5124352\n1992634\n1992956\n1992969\n6132725\n1830437\n1830459\n10055273\n1857068\n1857143\n1857577\n1857581\n1857626\n1858283\n1937643\n1937667\n1937702\n1937711\n1937849\n1937959\n1938069\n1938125\n1938166\n5141170\n5141195\n5141216\n5141234\n5141248\n5141250\n1939314\n1800642\n5114409\n4534796\n4534757\n6112634\n1802662\n1802850\n1802868\n1803022\n1803025\n1803060\n", + "regions/tasmania.classes": "9840570\n10341307\n10435406\n1832553\n1829866\n1828456\n1828540\n1828544\n10833593\n5119350\n5119353\n1837706\n4686905\n4686913\n1835886\n4685557\n1831458\n1831499\n1761751\n1761820\n1780856\n10154280\n5112407\n5112410\n1790450\n1795657\n1799165\n1803197\n1804430\n1806704\n1807503\n1809244\n1809248\n1816110\n1816434\n1817065\n1817171\n10274769\n1811455\n1731906\n1731923\n1732001\n1732005\n10640865\n1840346\n5123339\n10005632\n1870703\n1872255\n1873290\n5125600\n5125629\n1874146\n1875534\n1890065\n10211808\n10526954\n1940575\n12259151\n1741074\n11906255\n9867379\n1745019\n10358334\n1748425\n1748473\n9952043\n10606887\n10549715\n1925555\n4708984\n1927894\n4708927\n1928923\n1932563\n7346444\n1752536\n1752547\n1920496\n1828310\n1962159\n9875141\n1970485\n1964995\n1964996\n10295646\n1954236\n10634980\n9213204\n1955093\n10560674\n11720357\n9593393\n10062202\n10075732\n10132475\n10363151\n10398979\n10456933\n10457796\n10471477\n10623003\n11468089\n10257899\n1956416\n10167252\n1959341\n1960201\n1960521\n5144204\n1964066\n1965643\n1965650\n10174909\n1967716\n1968115\n1968131\n1969104\n10109201\n5144937\n5144942\n5145422\n1972407\n1972606\n5146262\n1972903\n5146472\n5146805\n5146880\n1975212\n1975248\n10572729\n1976341\n1976342\n1976890\n1976891\n1978082\n10530515\n1978904\n1980041\n1980063\n1980491\n10378314\n10571987\n1982024\n1982055\n1982085\n1982148\n12116722\n1985826\n1986223\n1986846\n1986942\n5149369\n5149387\n1988354\n1988360\n1988362\n1988376\n1988894\n1989181\n1989283\n1989377\n1990165\n1990167\n1990255\n1990256\n1991468\n1992167\n4702878\n10078800\n10146771\n1963532\n1942618\n1943090\n1943096\n4689912\n1944523\n4689905\n1760172\n1761788\n1762900\n1762902\n1768972\n1769260\n1769310\n4688049\n4688092\n4688098\n1771357\n4687565\n1774918\n10032003\n1785149\n1791793\n1798084\n9890366\n1792560\n1770849\n1771203\n1771296\n10658576\n1823493\n1827507\n11905965\n1827802\n5806175\n5806177\n4704400\n4704407\n1899943\n1899947\n1899950\n5130456\n1902244\n4704500\n5102423\n5120379\n11563728\n10134558\n12231152\n5126376\n1880982\n1881018\n1881019\n1881031\n1881041\n1881132\n1881424\n1881504\n1882215\n1882355\n5126843\n5126922\n5127044\n1882905\n1884531\n1892462\n10521368\n1854021\n1854249\n1858762\n1862331\n1754619\n1754814\n4689394\n1855804\n1857033\n1857180\n1857829\n1857882\n1857935\n5803065\n1838297\n1838308\n1833477\n1833653\n1835121\n1835123\n1835821\n1836899\n4686620\n4685566\n5120053\n4685669\n4685678\n4685810\n4686385\n4686702\n1801432\n10573425\n11508472\n11836409\n1801787\n", + "release.json": "{\n \"schema\": \"mambo-release-v1\",\n \"model_id\": \"MAMBO_v3\",\n \"artifact_revision\": 3,\n \"package_version\": \"0.3.0\",\n \"distribution\": \"mambo-v3\",\n \"default_preset\": \"full\",\n \"licenses\": {\n \"code\": \"MIT\",\n \"weights\": \"CC-BY-NC-SA-4.0\",\n \"weights_text\": \"MODEL_LICENSE.txt\",\n \"notices\": \"NOTICES.md\"\n },\n \"score_semantics\": \"hierarchical-leaf-logits-logsumexp-v1\",\n \"profiles\": {\n \"torch\": {\n \"model\": \"models/pytorch/best.pt\",\n \"files\": [\n \"models/pytorch/best.pt\"\n ]\n },\n \"onnx\": {\n \"model\": \"models/onnx/model.onnx\",\n \"files\": [\n \"models/onnx/model.onnx\",\n \"models/onnx/model.onnx.data\"\n ]\n },\n \"onnx-embedding\": {\n \"model\": \"models/onnx-embedding/model.onnx\",\n \"files\": [\n \"models/onnx-embedding/model.onnx\",\n \"models/onnx-embedding/model.onnx.data\"\n ]\n }\n },\n \"embedding\": {\n \"dimension\": 1280,\n \"stage\": \"normalized preclassification\"\n },\n \"origins\": {\n \"models/pytorch/best.pt\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/pytorch/best.pt\",\n \"models/onnx/model.onnx\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/onnx-fp32/model.onnx\",\n \"models/onnx/model.onnx.data\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/onnx-fp32/model.onnx.data\",\n \"models/onnx/manifest.json\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/onnx-fp32/manifest.json\",\n \"models/onnx-embedding/model.onnx\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/viewer/browser-model/model.onnx\",\n \"models/onnx-embedding/model.onnx.data\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/viewer/browser-model/model.onnx.data\",\n \"models/onnx-embedding/manifest.json\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/viewer/browser-model/manifest.json\"\n },\n \"files\": {\n \"CODE_LICENSE\": {\n \"size\": 1063,\n \"sha256\": \"0f50663fcec13e423612ab95729a0b197122e4b05c16a679b8946cad5b53d62b\"\n },\n \"MODEL_CARD.md\": {\n \"size\": 3037,\n \"sha256\": \"5fce6cd2d6c5dc452fe210aebafe3fd90fbc2779716900be30d1efd254922b87\"\n },\n \"MODEL_LICENSE.txt\": {\n \"size\": 19018,\n \"sha256\": \"600ca4e25fe11762b75a97e714707fab48bb778374e92d24c6ca068791661c11\"\n },\n \"MODEL_PROVENANCE.toml\": {\n \"size\": 2782,\n \"sha256\": \"a3e7ab98dca7795c06fb7f9921b376f1ea9a76aa3c68a4d769c780675f181e97\"\n },\n \"NOTICES.md\": {\n \"size\": 3565,\n \"sha256\": \"915571674425f8f96a88a49d02edadd87460e6216ed7cd7eda7163965abbe8e7\"\n },\n \"PRESETS.md\": {\n \"size\": 5847,\n \"sha256\": \"ad2b0ff489156813358578134bb122a2404c9942f3ef81325e42e313dcd6d3cd\"\n },\n \"PRESET_DEFINITIONS.toml\": {\n \"size\": 9704,\n \"sha256\": \"d89e62e5ee9d91aea0e46ccd60edbc49bd0378017cf6d8b8f70870e4f7673be6\"\n },\n \"PRESET_UPDATES.toml\": {\n \"size\": 3473,\n \"sha256\": \"6d953dbed98f761f48adf959813e7954271e88fb11eb2ac3007c45b884d1e737\"\n },\n \"README.md\": {\n \"size\": 14752,\n \"sha256\": \"c619aff1b1674d8c7c8717bf88cc513cdd1f833181fb9f36c14975979a890bf6\"\n },\n \"classes.json\": {\n \"size\": 487272,\n \"sha256\": \"8359b0ea67b6111ccd1897b1296f5bbeff1137cd306f1345136650e366f328db\"\n },\n \"models/onnx/manifest.json\": {\n \"size\": 1787397,\n \"sha256\": \"a49e6ee862f24095cc2f66e309b5704c47011b54c11a7bfa56f432342e26b32b\"\n },\n \"models/onnx/model.onnx\": {\n \"size\": 1527453,\n \"sha256\": \"aa02baa22765a04de03c5ba46029e2a66ca7e430bfddce0a001af5cec2e7c15d\"\n },\n \"models/onnx/model.onnx.data\": {\n \"size\": 151838720,\n \"sha256\": \"9ffb389ec4c6fe9864a4dfb16b167cf68950d7fa35b3fa39d84b1987b1845f4e\"\n },\n \"models/onnx-embedding/manifest.json\": {\n \"size\": 294850,\n \"sha256\": \"d84e148626581e568df76832f257c7e59db944b343fe5cbc1f0636467874cf8d\"\n },\n \"models/onnx-embedding/model.onnx\": {\n \"size\": 1932003,\n \"sha256\": \"70130c3dbc2b8a6bc4610bb213a1aaf029816fb634faf104bbb27ffa997dfc44\"\n },\n \"models/onnx-embedding/model.onnx.data\": {\n \"size\": 151838720,\n \"sha256\": \"9ffb389ec4c6fe9864a4dfb16b167cf68950d7fa35b3fa39d84b1987b1845f4e\"\n },\n \"models/pytorch/best.pt\": {\n \"size\": 153951029,\n \"sha256\": \"174b9214bfea2df69e4f5c5d16afd841fec961db4274f3e6bf474cef9cab5e8a\"\n },\n \"preprocessing.json\": {\n \"size\": 595,\n \"sha256\": \"be12f8cc92d37ad780cc92040955b3dcea0e79cea4e6cbd57f6ceb8f2f6786ea\"\n },\n \"presets.json\": {\n \"size\": 15725,\n \"sha256\": \"eb94b47baf91ec767d54f1cc6ed7d668c44c159c8fe62acaac61f0d0c127423a\"\n },\n \"regions/africa.classes\": {\n \"size\": 7433,\n \"sha256\": \"471c14708f50d98e51b8513ec49e978fae360e1099b6f40491c008e9bd1d59c1\"\n },\n \"regions/arctic.classes\": {\n \"size\": 12416,\n \"sha256\": \"a9138c543b90e319296d2c0cd5dc3400c9045616633988755f8057450a19ae5f\"\n },\n \"regions/asia.classes\": {\n \"size\": 35832,\n \"sha256\": \"c54053282b739c7bfcfad6a69c9f9b2e613f4ff4986cf30e1cd0848fe5eb2daf\"\n },\n \"regions/australia.classes\": {\n \"size\": 15266,\n \"sha256\": \"04892d628263fa751c268693fccd9afd480a819b4896791ac5e0219b8467cb53\"\n },\n \"regions/caribbean.classes\": {\n \"size\": 7046,\n \"sha256\": \"ebb9cfbb63a4ad434ae8fa49b2709e09de0df30f3d31a2f939846e41c9731dc3\"\n },\n \"regions/central_america.classes\": {\n \"size\": 13230,\n \"sha256\": \"835b3447932cc142dd7c470617e0ce5f948ec2d6f6119be7d06b78e365f79885\"\n },\n \"regions/east_asia.classes\": {\n \"size\": 27660,\n \"sha256\": \"4a3e8635e06c7c86c0b08cfbc6acfa13ceb484d708f771312afc874e47ac0085\"\n },\n \"regions/europe.classes\": {\n \"size\": 24168,\n \"sha256\": \"df66152ba29ba979b32741db4a0dc7c85db18fa65eac5602ca4aab702343de90\"\n },\n \"regions/europe_v3.classes\": {\n \"size\": 24745,\n \"sha256\": \"465e644095abe381b7b6a44f7ce05d5da0ba77bf75b76e1c53d0eba6c89f487a\"\n },\n \"regions/japan.classes\": {\n \"size\": 5605,\n \"sha256\": \"8b3a9cd5874c26ecb5217e61f6402fb7e60082f3ebeea13273abe177c233a64b\"\n },\n \"regions/madagascar.classes\": {\n \"size\": 859,\n \"sha256\": \"cda395b4bab28ffec49a698487cbb2aa6578a79107ce7a9885c8260e421b9c54\"\n },\n \"regions/mediterranean.classes\": {\n \"size\": 21489,\n \"sha256\": \"f203302f8bfdcb92aec580fa3f11e6ebda8c3886f5fd691379860408e84fd4e3\"\n },\n \"regions/middle_east.classes\": {\n \"size\": 6789,\n \"sha256\": \"2f74a654f035774373e25b9518b1d3d0724a456389647be6584dab4ab85261a9\"\n },\n \"regions/new_zealand.classes\": {\n \"size\": 3428,\n \"sha256\": \"81b4facb4283f0e0e867fa7219f8bc5f33418e68cde61fc18df212b2a085887b\"\n },\n \"regions/north_africa.classes\": {\n \"size\": 1893,\n \"sha256\": \"015e6c49e7c220421fdd646743216d34464708e6bfeebfac408f912a87e4a62b\"\n },\n \"regions/north_america.classes\": {\n \"size\": 35698,\n \"sha256\": \"2707b4956327c31e719331cc2c40cd457f3d1fa67896a831d26a3e7e9accb44f\"\n },\n \"regions/north_europe.classes\": {\n \"size\": 15847,\n \"sha256\": \"065bb3ade45c970ca129c7507b56ed62fe16b84251961bf53352f5098b8b2be6\"\n },\n \"regions/north_europe_v3.classes\": {\n \"size\": 17625,\n \"sha256\": \"78ee7693c7352244cd8a99b7276196aa32de27e620ed66648c4087f826d47092\"\n },\n \"regions/oceania.classes\": {\n \"size\": 18490,\n \"sha256\": \"bf6f77aeb7700a0e1d46f7d51e5a45b842485a16d2f9777b3c5e61a899b84b47\"\n },\n \"regions/oceania_excluding_australia_nz.classes\": {\n \"size\": 2837,\n \"sha256\": \"5a38ae5ba587577b7dcad4a8850089f1b8036abc6f1e676436968f97e34f322d\"\n },\n \"regions/south_america.classes\": {\n \"size\": 12172,\n \"sha256\": \"47ee75929656a4f66874861e54a05b8503aa7974ebb5eb3d1eef1a68dbf7b130\"\n },\n \"regions/south_asia.classes\": {\n \"size\": 12540,\n \"sha256\": \"5d838de414acb5a4ca14a5098972bbd36c3078c44525584860f6e2e7a94f3849\"\n },\n \"regions/southeast_asia.classes\": {\n \"size\": 13513,\n \"sha256\": \"ad2f4d1ed1f78abd66594f59d9550383f37f96b9bdcda81138c11f64c3907ccd\"\n },\n \"regions/subsaharan_africa.classes\": {\n \"size\": 6406,\n \"sha256\": \"1cc936061b0037c71d60d5cdb74fc8af1817dd567e54dcd6904a6901009d9184\"\n },\n \"regions/tasmania.classes\": {\n \"size\": 2241,\n \"sha256\": \"21248a60d54592bc4db4e638e6565b07ee37ad1911c7e7f4e4a8fd0fc49d913f\"\n }\n }\n}\n" + } +} diff --git a/deployment/mambo_deploy/download.py b/deployment/mambo_deploy/download.py new file mode 100644 index 0000000..81298d2 --- /dev/null +++ b/deployment/mambo_deploy/download.py @@ -0,0 +1,82 @@ +"""Pinned ERDA downloads with atomic, verified caching and explicit offline support.""" + +import hashlib +import json +import os +import shutil +import tempfile +from pathlib import Path +from urllib.request import urlopen + + +def fetch_file(url, destination, *, size, sha256, offline=False): + destination = Path(destination) + if destination.exists(): + with destination.open("rb") as stream: + digest = hashlib.file_digest(stream, "sha256").hexdigest() + if destination.stat().st_size != size or digest != sha256: + raise ValueError(f"Cached artifact integrity mismatch: {destination}") + return destination + if offline: + raise FileNotFoundError(f"Artifact is not cached: {destination}. Disable offline mode to download it first.") + if not url.startswith("https://"): + raise ValueError("Artifact URL must use HTTPS") + destination.parent.mkdir(parents=True, exist_ok=True) + partial = None + try: + with tempfile.NamedTemporaryFile(dir=destination.parent, prefix=".download-", delete=False) as stream: + partial = Path(stream.name) + digest = hashlib.sha256() + total = 0 + with urlopen(url, timeout=60) as response: + while chunk := response.read(1024 * 1024): + total += len(chunk) + if total > size: + raise ValueError(f"Downloaded artifact exceeds expected size: {url}") + stream.write(chunk) + digest.update(chunk) + if total != size or digest.hexdigest() != sha256: + raise ValueError(f"Downloaded artifact integrity mismatch: {url}") + partial.replace(destination) + finally: + if partial is not None: + partial.unlink(missing_ok=True) + return destination + + +def cached_model_file(url, destination, *, cache, size, sha256, offline=False): + """Reuse immutable weight bytes across metadata revisions, without symlinks.""" + destination = Path(destination) + blob = Path(cache) / "blobs" / sha256 + fetch_file(url, blob, size=size, sha256=sha256, offline=offline) + destination.parent.mkdir(parents=True, exist_ok=True) + with tempfile.TemporaryDirectory(prefix=".model-", dir=destination.parent) as temporary: + staged = Path(temporary) / "data" + try: + os.link(blob, staged) + except OSError: + shutil.copyfile(blob, staged) + staged.replace(destination) + + +def default_bundle(): + """Install small packaged metadata; model files are fetched lazily by Bundle.""" + descriptor = json.loads(Path(__file__).with_name("default_bundle.json").read_text()) + revision = hashlib.sha256(json.dumps(descriptor, sort_keys=True).encode()).hexdigest()[:16] + cache = Path(os.environ.get("MAMBO_CACHE", Path(os.environ.get("XDG_CACHE_HOME", Path.home() / ".cache")) / "mambo")) + root = cache.expanduser() / revision + for relative, content in descriptor["metadata"].items(): + path = (root / relative).resolve() + if not path.is_relative_to(root.resolve()): + raise ValueError("Packaged metadata path escapes cache") + data = content.encode() + if path.exists(): + if path.read_bytes() != data: + raise ValueError(f"Cached metadata differs from this release: {path}") + continue + path.parent.mkdir(parents=True, exist_ok=True) + with tempfile.NamedTemporaryFile(dir=path.parent, delete=False) as stream: + temp = Path(stream.name) + stream.write(data) + temp.replace(path) + return root diff --git a/deployment/mambo_deploy/onnx_session.py b/deployment/mambo_deploy/onnx_session.py new file mode 100644 index 0000000..67ae87d --- /dev/null +++ b/deployment/mambo_deploy/onnx_session.py @@ -0,0 +1,62 @@ +"""Validate CUDA graph optimizations once before admitting a session for inference.""" + +import time +import warnings + +import numpy as np + +from .preprocessing import RECIPE + + +def create_session(ort, path, providers, threads, *, cuda, embeddings): + started = time.perf_counter() + attempts = [] + outputs = ["output_0", "embedding"] if embeddings else ["output_0"] + profiles = [("optimized", ort.GraphOptimizationLevel.ORT_ENABLE_ALL)] + if cuda: + profiles.append(("unoptimized", ort.GraphOptimizationLevel.ORT_DISABLE_ALL)) + for name, level in profiles: + options = ort.SessionOptions() + options.intra_op_num_threads = threads + options.inter_op_num_threads = 1 + options.enable_profiling = False + options.graph_optimization_level = level + session = None + probe_seconds = 0.0 + try: + session = ort.InferenceSession(str(path), sess_options=options, providers=providers) + session.disable_fallback() + if cuda and session.get_providers()[0] != "CUDAExecutionProvider": + raise RuntimeError("Requested ONNX CUDA provider failed to initialize; refusing CPU-only fallback") + if cuda: + # CPU outputs make completion synchronous. No image decoding or dataset access. + probe_started = time.perf_counter() + session.run(outputs, {"images": np.zeros((1, 3, RECIPE["crop_size"], RECIPE["crop_size"]), dtype=np.float32)}) + probe_seconds = time.perf_counter() - probe_started + except Exception as error: + session = None + compatibility_error = any(code in str(error) for code in ("cudaErrorNoKernelImageForDevice", "cudaErrorInvalidDeviceFunction")) + if not cuda or not compatibility_error: + raise + attempts.append({"profile": name, "error": str(error)}) + if name == "unoptimized": + raise RuntimeError( + "ONNX CUDA baseline compatibility check failed with graph optimizations disabled. " + "This runtime/device cannot execute the baseline model; use a compatible CUDA runtime build. " + "No CPU fallback was performed." + ) from error + continue + if name == "unoptimized": + warnings.warn( + "ONNX CUDA optimized graph failed its kernel compatibility probe; using a validated session with " + "graph optimizations disabled. GPU execution is retained; throughput may be lower.", + RuntimeWarning, + stacklevel=2, + ) + return session, { + "profile": name, + "probe_batch_size": 1 if cuda else None, + "probe_seconds": probe_seconds, + "initialization_seconds": time.perf_counter() - started, + "failed_attempts": attempts, + } diff --git a/deployment/mambo_deploy/predictor.py b/deployment/mambo_deploy/predictor.py new file mode 100644 index 0000000..906783c --- /dev/null +++ b/deployment/mambo_deploy/predictor.py @@ -0,0 +1,526 @@ +"""Two explicit backends sharing one image, vocabulary and result contract.""" + +import hashlib +import os +import re +import threading +from concurrent.futures import ThreadPoolExecutor +from contextlib import closing, nullcontext +from functools import cached_property +from itertools import islice +from pathlib import Path + +import numpy as np + +from .augmentation import infer_augmented, infer_prepared, prepared_views, resolve_tta +from .bundle import Bundle +from .download import default_bundle +from .onnx_session import create_session +from .preprocessing import RECIPE, TorchDecode, TorchPreprocess, _rgb, image_items, prepare_batch +from .result_worker import ResultWorker +from .results import HierarchyPlan, Prediction +from .streaming import prepared_stream +from .transfers import device_batches, download_tensors, pinned_factory + + +class Predictor: + def __init__( + self, + bundle=None, + *, + backend="onnx", + device="cpu", + model=None, + class_list=None, + class_mask=None, + weights=None, + batch_size=8, + threads=2, + precision="auto", + tta="none", + preprocess_workers=None, + ): + if backend not in ("torch", "onnx"): + raise ValueError("backend must be 'torch' or 'onnx'") + if device != "cpu" and not re.fullmatch(r"cuda(?::\d+)?", str(device)): + raise ValueError("device must be cpu, cuda or cuda:N") + if not isinstance(batch_size, int) or batch_size < 1 or not isinstance(threads, int) or threads < 1: + raise ValueError("batch_size and threads must be positive integers") + self.tta = resolve_tta(tta) + self.preprocess_workers = threads if preprocess_workers is None else preprocess_workers + if not isinstance(self.preprocess_workers, int) or self.preprocess_workers < 1: + raise ValueError("preprocess_workers must be a positive integer") + if precision not in ("auto", "fp32", "fp16", "bf16", "tf32"): + raise ValueError("precision must be auto, fp32, fp16, bf16 or tf32") + self.precision = precision + self.effective_precision = precision + if precision == "auto": + self.effective_precision = ("fp16" if backend == "torch" else "tf32") if str(device).startswith("cuda") else "fp32" + if self.effective_precision != "fp32" and device == "cpu": + raise ValueError("CPU inference requires auto or fp32 precision") + if backend == "onnx" and self.effective_precision not in ("fp32", "tf32"): + raise ValueError("Standard ONNX supports fp32 or CUDA tf32; fp16/bf16 autocast requires the torch backend") + if backend == "torch" and self.effective_precision == "tf32": + raise ValueError("tf32 is an ONNX CUDA option; use fp16, bf16 or fp32 for torch") + if class_list is not None and class_mask is not None: + raise ValueError("class_list and class_mask are mutually exclusive") + if weights is not None and model is not None: + raise ValueError("model and weights are mutually exclusive") + if weights is not None and backend != "torch": + raise ValueError("weights override is only supported by the PyTorch backend") + bundle = bundle or os.environ.get("MAMBO_BUNDLE") + automatic = not bundle + self.bundle = Bundle(default_bundle() if automatic else bundle, download=automatic) + if self.bundle.preprocessing != RECIPE: + raise ValueError("Unsupported preprocessing recipe; use the matching deployment runtime") + self.backend, self.device, self.batch_size, self.threads = backend, str(device), batch_size, threads + self._sessions, self._torch_model = {}, None + self._hierarchy_plans = {} + self.runtime_timings = {} + self._model_events = [] + self._download_stream = None + self.onnx_session_info = {} + self._lock = threading.RLock() + self.weights = weights + if weights is not None: + # This adapter supports the pinned release architecture only; do not accept arbitrary pickles. + with Path(weights).open("rb") as stream: + digest = hashlib.file_digest(stream, "sha256").hexdigest() + expected = self.bundle.manifest["files"][self.bundle.manifest["profiles"]["torch"]["model"]]["sha256"] + if digest != expected: + raise ValueError("Local weights must match the pinned release checkpoint") + self.preset = self._preset_name(model or "full") + if class_list is not None: + self._select_labels(self._read_list(class_list)) + self.preset = "custom" + else: + labels = ( + self.bundle.classes["labels"][0] + if self.preset == "full" + else self.bundle.file(self.bundle.regions[self.preset]["path"]).read_text().splitlines() + ) + self._select_labels(labels) + if class_mask is not None: + self._apply_class_mask(class_mask) + + def _preset_name(self, value): + def normalize(text): + return re.sub(r"[^a-z0-9]", "", text.lower()) + + names = list(self.bundle.regions) + ["full"] + query = normalize(str(value)) + exact = [name for name in names if normalize(name) == query] + matches = exact or [name for name in names if query and normalize(name).startswith(query)] + if len(matches) != 1: + raise ValueError(f"Unknown or ambiguous preset {value!r}; choose from {', '.join(names)}") + return matches[0] + + @staticmethod + def _read_list(value): + if isinstance(value, (str, Path)): + return Path(value).read_text().splitlines() + return list(value) + + def _select_labels(self, labels): + requested = {str(label).strip() for label in labels if str(label).strip()} + vocabulary = self.bundle.classes["labels"][0] + unknown = requested - set(vocabulary) + if unknown: + raise ValueError(f"Unknown species IDs: {', '.join(sorted(unknown)[:20])}") + if not requested: + raise ValueError("Class list is empty") + self.selected = np.array([i for i, label in enumerate(vocabulary) if label in requested], dtype=np.int64) + self.class_list = [vocabulary[i] for i in self.selected] + self.class_list_sha256 = hashlib.sha256(("\n".join(self.class_list) + "\n").encode()).hexdigest() + + def _apply_class_mask(self, mask): + with self._lock: + if mask is None or isinstance(mask, int) and mask == -1: + self._select_labels(self.bundle.classes["labels"][0]) + self.preset = "full" + return + if isinstance(mask, int): + raise ValueError("Only -1 is a valid integer mask flag") + if hasattr(mask, "detach"): + mask = mask.detach().cpu().numpy() + mask = list(mask) + if not mask: + raise ValueError("Class mask is empty") + if all(isinstance(value, (bool, np.bool_)) for value in mask): + if len(mask) != len(self.bundle.classes["labels"][0]): + raise ValueError("Boolean class mask must cover the full species vocabulary") + mask = [i for i, keep in enumerate(mask) if keep] + labels = [] + for value in mask: + if isinstance(value, str): + labels.append(value) + elif isinstance(value, (int, np.integer)) and 0 <= value < len(self.bundle.classes["labels"][0]): + labels.append(self.bundle.classes["labels"][0][value]) + else: + raise ValueError(f"Invalid class-mask value: {value!r}") + self._select_labels(labels) + self.preset = "custom" + + def available_presets(self): + return {"full": {"count": len(self.bundle.classes["labels"][0]), "scope": "All model species"}, **self.bundle.regions} + + def configure(self, *, model=None, class_list=None, tta=None): + """Change scope/TTA between calls while retaining loaded runtime sessions. + + Omitted options remain unchanged. ``model="full"`` resets a custom list; + ``tta=False`` disables augmentation. Invalid options leave state unchanged. + """ + if model is not None and class_list is not None: + raise ValueError("Choose a preset or a custom class list, not both") + with self._lock: + augmentation = self.tta if tta is None else resolve_tta(tta) + preset, labels = self.preset, None + if class_list is not None: + preset, labels = "custom", self._read_list(class_list) + elif model is not None: + preset = self._preset_name(model) + labels = ( + self.bundle.classes["labels"][0] + if preset == "full" + else self.bundle.file(self.bundle.regions[preset]["path"]).read_text().splitlines() + ) + if labels is not None: + self._select_labels(labels) + self._hierarchy_plans.clear() + self.preset, self.tta = preset, augmentation + return self + + @cached_property + def _onnx_api(self): + try: + import onnxruntime as ort + except ImportError as error: + raise ImportError("Install mambo-v3[onnx], or onnxruntime-gpu for CUDA") from error + return ort + + @cached_property + def _torch_api(self): + try: + import torch + + from mini_trainer.modeling.classifier import bypass_submodule + except ImportError as error: + raise ImportError("Install the matching mini_trainer wheel and a suitable PyTorch backend") from error + return torch, bypass_submodule + + @cached_property + def _decode(self): + return TorchDecode(self._torch_api[0]) if self.backend == "torch" else _rgb + + @cached_property + def _device_preprocess(self): + return TorchPreprocess(self._torch_api[0], self.device) + + @property + def _compact_inputs(self): + return self.backend == "torch" and self.device != "cpu" + + def _onnx(self, images, embeddings): + ort = self._onnx_api + key = "onnx-embedding" if embeddings else "onnx" + if key not in self._sessions: + path = self.bundle.profile(key) + if self.device == "cpu": + providers = ["CPUExecutionProvider"] + else: + if "CUDAExecutionProvider" not in ort.get_available_providers(): + raise RuntimeError("ONNX CUDA is unavailable; install onnxruntime-gpu and its CUDA/cuDNN dependencies") + if hasattr(ort, "preload_dlls"): + ort.preload_dlls() + providers = [ + ( + "CUDAExecutionProvider", + { + "device_id": int(self.device.split(":")[-1]) if ":" in self.device else 0, + "use_tf32": int(self.effective_precision == "tf32"), + }, + ), + "CPUExecutionProvider", + ] + session, info = create_session(ort, path, providers, self.threads, cuda=self.device != "cpu", embeddings=embeddings) + self.onnx_session_info[key] = info + self._sessions[key] = session + outputs = ["output_0", "embedding"] if embeddings else ["output_0"] + if isinstance(images, ort.OrtValue): + binding = self._sessions[key].io_binding() + binding.bind_ortvalue_input("images", images) + for name in outputs: + binding.bind_output(name, "cpu") + self._sessions[key].run_with_iobinding(binding) + values = [value.numpy() for value in binding.get_outputs()] + else: + values = self._sessions[key].run(outputs, {"images": images}) + return values[0], values[1] if embeddings else None + + def _torch(self, images, embeddings, *, tensors=False): + torch, bypass_submodule = self._torch_api + if self._torch_model is None: + from mini_trainer.builders import BaseBuilder + + path = self.weights or self.bundle.profile("torch") + if self.device != "cpu" and not torch.cuda.is_available(): + raise RuntimeError("PyTorch CUDA is unavailable; explicitly choose device='cpu' or install/configure CUDA") + if self.effective_precision == "bf16": + with torch.cuda.device(self.device): + if not torch.cuda.is_bf16_supported(including_emulation=False): + raise RuntimeError("BF16 requires native device support; choose fp16 or fp32") + # Full local state and pretrained=False prevent constructor downloads. + state = torch.load(str(path), map_location="cpu", weights_only=True) + self._torch_model, _ = BaseBuilder.build_model( + weights=state, device="cpu", dtype=torch.float32, model_args={"pretrained": False} + ) + self._torch_model.to(self.device).eval() + head = self._torch_model.classifier + device_type = self.device.split(":")[0] + amp = self.effective_precision in ("fp16", "bf16") + dtype = torch.bfloat16 if self.effective_precision == "bf16" else torch.float16 + with torch.inference_mode(): + # Use the existing backbone boundary; keep the complete head in FP32. + with ( + torch.autocast(device_type, dtype=dtype, enabled=amp), + bypass_submodule(self._torch_model, self._torch_model._backbone_output_name), + ): + tensor = images if isinstance(images, torch.Tensor) else torch.from_numpy(images).to(self.device) + if tensor.dtype == torch.uint8: + tensor = self._device_preprocess(tensor) + events = None + if tensors and tensor.device.type == "cuda": + events = (torch.cuda.Event(enable_timing=True), torch.cuda.Event(enable_timing=True)) + events[0].record(torch.cuda.current_stream(tensor.device)) + features = self._torch_model(tensor) + with torch.autocast(device_type, enabled=False): + features = features.float() + output = head(features) + embedding = head.preclassification(features) if embeddings else None + if events is not None: + events[1].record(torch.cuda.current_stream(tensor.device)) + self._model_events.append(events) + if embedding is not None and not tensors: + embedding = embedding.cpu().numpy() + return (output if tensors else output[0].float().cpu().numpy()), embedding + + def hierarchy_plan(self, selected): + # Hash contiguous bytes in native code, not one Python integer per species. + key = np.asarray(selected, dtype=np.int64).tobytes() + plan = self._hierarchy_plans.get(key) + if plan is None: + plan = self._hierarchy_plans[key] = HierarchyPlan(selected, self.bundle.classes) + return plan + + def _ranked_views(self, views, view_count, selectors, embeddings=False, *, defer=False): + """Keep native ranks on Torch; reduce masked/averaged leaves on the same device.""" + if self.backend != "torch": + leaf, vectors = ( + infer_prepared(self._infer, views, view_count, embeddings) + if self.tta is not None + else self._infer(next(iter(views)), embeddings) + ) + return (lambda: (leaf, vectors, None)) if defer else (leaf, vectors, None) + torch, _ = self._torch_api + + leaf, vectors, output, norms = None, None, None, None + self._model_events.clear() + with torch.inference_mode(): + for view in views: + output, embedding = self._torch(view, embeddings, tensors=True) + part = output[0].float() / view_count if self.tta is not None else output[0].float() + leaf = part if leaf is None else leaf + part + if embeddings: + embedding = torch.as_tensor(embedding, device=leaf.device).float() + part = embedding / view_count if self.tta is not None else embedding + vectors = part if vectors is None else vectors + part + if embeddings and self.tta is not None: + norms = torch.linalg.vector_norm(vectors, dim=1, keepdim=True) + vectors /= norms + native = output if self.tta is None else None + plans = {name: self.hierarchy_plan(selected) for name, selected in selectors.items()} + ranks = {name: plan.torch_values(leaf, native) for name, plan in plans.items()} + tensors = [value for raw, _, _ in ranks.values() for value in raw] + full_name = next((name for name, plan in plans.items() if plan.full), None) + if full_name is None: + tensors.append(leaf) + if vectors is not None: + tensors.append(vectors) + if norms is not None: + tensors.append(norms) + if defer and leaf.device.type == "cuda" and self._download_stream is None: + self._download_stream = torch.cuda.Stream(device=leaf.device) + download = download_tensors( + tensors, self.runtime_timings, torch=torch, defer=True, stream=self._download_stream if defer else None + ) + events = tuple(self._model_events) + self._model_events.clear() + + def finish(): + downloaded = iter(download()) + for begin, end in events: + self.runtime_timings["model_stream_seconds"] = ( + self.runtime_timings.get("model_stream_seconds", 0.0) + begin.elapsed_time(end) / 1000 + ) + completed = {name: ([next(downloaded) for _ in raw], labels, mapping) for name, (raw, labels, mapping) in ranks.items()} + leaf_array = completed[full_name][0][0] if full_name is not None else next(downloaded) + embedding_array = next(downloaded) if vectors is not None else None + if norms is not None: + norm_array = next(downloaded) + if not np.isfinite(norm_array).all() or np.any(norm_array <= np.finfo(np.float32).eps): + raise RuntimeError("TTA produced an undefined mean embedding") + return leaf_array, embedding_array, completed + + return finish if defer else finish() + + def prepared_batches(self, items, batch_size, *, device_prefetch=True, stats=None, **options): + """Yield backend inputs: CUDA Torch uint8 squares, otherwise normalized FP32. + + Device slots remain valid until the next iteration. + """ + stats = {} if stats is None else stats + accelerated = device_prefetch and self.device != "cpu" + compact = self._compact_inputs + factory = pinned_factory(self.device, compact=compact) if accelerated and self.backend == "torch" else None + source = prepared_stream( + items, + batch_size, + tta=self.tta, + stats=stats, + reuse_buffers=True, + buffer_factory=factory, + compact=compact, + decode=self._decode, + **options, + ) + if accelerated: + yield from device_batches(source, self.backend, self.device, stats) + else: + with closing(source): + for offset, views in source: + yield offset, views, len(views[0]) + + def _prepare(self, batch, pool=None): + return prepare_batch(batch, pool, compact=self._compact_inputs, decode=self._decode) + + def _infer(self, images, embeddings=False): + return (self._torch if self.backend == "torch" else self._onnx)(images, embeddings) + + def _infer_batch(self, batch, embeddings=False, pool=None): + if self.tta is not None: + return infer_augmented(self._infer, batch, self.tta, embeddings, pool) + return self._infer(self._prepare(batch, pool), embeddings) + + def _predict(self, x, embeddings=False, topk=1): + with self._lock: + leaf_batches, embedding_batches, rank_batches = [], [], [] + items = image_items(x) + with ThreadPoolExecutor(max_workers=self.preprocess_workers) if self.preprocess_workers > 1 else nullcontext(None) as pool: + while batch := list(islice(items, self.batch_size)): + if self.backend == "torch": + views = ( + prepared_views(batch, self.tta, pool, compact=self._compact_inputs, decode=self._decode) + if self.tta + else (self._prepare(batch, pool),) + ) + leaves, vectors, ranks = self._ranked_views( + views, len(self.tta.transforms) if self.tta else 1, {"selected": self.selected}, embeddings + ) + rank_batches.append(ranks["selected"]) + else: + leaves, vectors = self._infer_batch(batch, embeddings, pool) + if not np.isfinite(leaves).all(): + raise RuntimeError("Model returned non-finite species scores") + leaf_batches.append(leaves) + if embeddings: + embedding_batches.append(vectors) + if not leaf_batches: + raise ValueError("No images supplied") + if rank_batches: + raw = [np.concatenate([batch[0][rank] for batch in rank_batches]) for rank in range(len(rank_batches[0][0]))] + labels, mappings = rank_batches[0][1:] + else: + raw, labels, mappings = self.hierarchy_plan(self.selected).numpy(np.concatenate(leaf_batches)) + result = Prediction( + raw, + labels, + mappings, + topk, + **self._prediction_metadata(), + ) + return (result, np.concatenate(embedding_batches)) if embeddings else result + + def _prediction_metadata(self): + return dict( + model_id=self.bundle.manifest["model_id"], + artifact_revision=self.bundle.manifest.get("artifact_revision"), + bundle_sha256=self.bundle.manifest_sha256, + preprocessing_id=self.bundle.preprocessing["id"], + backend=self.backend, + preset=self.preset, + class_list_sha256=self.class_list_sha256, + precision=self.effective_precision, + tta=self.tta.name if self.tta else "none", + tta_views=len(self.tta.transforms) if self.tta else 1, + ) + + def predict(self, x, topk=1): + return self._predict(x, topk=topk) + + def __call__(self, x, **kwargs): + return self.predict(x, **kwargs) + + def predict_with_embeddings(self, x, topk=1): + return self._predict(x, embeddings=True, topk=topk) + + def predict_stream( + self, + paths, + *, + embeddings=False, + topk=1, + read_workers=32, + prepare_workers=None, + read_window=None, + prefetch_batches=2, + encoded_budget=256 * 1024**2, + stats=None, + device_prefetch=True, + ): + """Yield one Prediction (or Prediction/embedding pair) per batch of paths. + + Use contextlib.closing when stopping before exhaustion. Input paths are lazy; + outputs are not accumulated. Loading settings are explicit per stream. + """ + batches = self.prepared_batches( + ((path, None) for path in paths), + self.batch_size, + device_prefetch=device_prefetch, + read_workers=read_workers, + prepare_workers=self.preprocess_workers if prepare_workers is None else prepare_workers, + read_window=max(128, self.batch_size) if read_window is None else read_window, + prefetch_batches=prefetch_batches, + encoded_budget=encoded_budget, + stats=stats, + ) + + def process(resolve, plan, metadata): + leaves, vectors, ranks = resolve() + if not np.isfinite(leaves).all(): + raise RuntimeError("Model returned non-finite species scores") + result = Prediction(*(ranks["selected"] if ranks is not None else plan.numpy(leaves)), topk, **metadata) + return (result, vectors) if embeddings else result + + with closing(batches), ResultWorker(process) as worker: + for _, views, _ in batches: + with self._lock: + resolve = self._ranked_views(views, len(views), {"selected": self.selected}, embeddings, defer=True) + worker.submit( + resolve, + self.hierarchy_plan(self.selected), + self._prediction_metadata(), + ) + if len(worker.pending) == 2: + yield worker.pop() + while worker.pending: + yield worker.pop() diff --git a/deployment/mambo_deploy/preprocessing.py b/deployment/mambo_deploy/preprocessing.py new file mode 100644 index 0000000..f9d24d2 --- /dev/null +++ b/deployment/mambo_deploy/preprocessing.py @@ -0,0 +1,186 @@ +"""Release image geometry with portable CPU and batched Torch finishing.""" + +import io +from pathlib import Path + +import numpy as np +from PIL import Image + +RECIPE = { + "id": "nearest-square-uint8-bilinear-center-imagenet-v1", + "decode": "RGB; discard alpha; ignore EXIF orientation", + "input": "uint8 CHW/BCHW or image paths; float images must be in [0,1]", + "square_size": 384, + "resize_size": 438, + "crop_size": 384, + "nearest_coordinates": "floor(float32(output_index) * float32(source_size/384))", + "bilinear": "half-pixel coordinates; edge clamp; round to uint8 before normalization", + "mean": [0.485, 0.456, 0.406], + "std": [0.229, 0.224, 0.225], + "output": "float32 NCHW; RGB/255 then channel normalization", +} + + +def _rgb(item): + if isinstance(item, (str, Path, bytes)): + with Image.open(io.BytesIO(item) if isinstance(item, bytes) else item) as im: + return _rgb(im) + if isinstance(item, Image.Image): + array = np.asarray(item if item.mode == "RGB" else item.convert("RGB"), dtype=np.uint8).transpose(2, 0, 1) + else: + if hasattr(item, "detach"): + item = item.detach().cpu().numpy() + array = np.asarray(item) + if array.ndim == 2: + array = array[None] + if array.ndim != 3 or array.shape[0] not in (1, 3, 4): + raise ValueError("Images must be CHW with 1, 3 or 4 channels; transpose HWC arrays explicitly") + if array.dtype != np.uint8: + if not np.issubdtype(array.dtype, np.floating) or not np.isfinite(array).all() or array.min() < 0 or array.max() > 1: + raise ValueError("Image arrays must be uint8 or finite floating point in [0,1]") + array = np.rint(array * 255).astype(np.uint8) + if array.shape[0] == 1: + array = np.repeat(array, 3, axis=0) + array = array[:3] + if min(array.shape[1:]) < 1: + raise ValueError("Empty image") + return array + + +# The model-space interpolation grid is fixed; source-size indexing is per image. +_SIZE, _RESIZED = RECIPE["crop_size"], RECIPE["resize_size"] +_GRID = np.arange(_SIZE, dtype=np.float32) +_COORD = np.maximum((np.arange(_RESIZED, dtype=np.float32) + 0.5) * np.float32(_SIZE / _RESIZED) - 0.5, 0) +_COORD = _COORD[(_RESIZED - _SIZE) // 2 : (_RESIZED + _SIZE) // 2] +_LO = np.floor(_COORD).astype(np.intp) +_HI = np.minimum(_LO + 1, _SIZE - 1) +# FP32 is sufficient for image interpolation; avoid promoting every temporary to FP64. +_FRACTION = _COORD - _LO.astype(np.float32) +_MEAN = np.array(RECIPE["mean"], dtype=np.float32)[:, None, None] +_STD = np.array(RECIPE["std"], dtype=np.float32)[:, None, None] + + +def _nearest_indices(length, padding=0): + pad = int(np.ceil(length * padding)) + return np.clip((_GRID * np.float32((length + 2 * pad) / _SIZE)).astype(np.intp) - pad, 0, length - 1) + + +def _square(item, padding=0): + image = _rgb(item) + height, width = image.shape[1:] + if height == width == _SIZE and padding == 0: + return image + # Gather whole RGB pixels, avoiding NumPy's buffered three-axis iterator. + rgb = image.transpose(1, 2, 0) + yy, xx = _nearest_indices(height, padding), _nearest_indices(width, padding) + if width > _SIZE and rgb.flags.c_contiguous: + # Large decoded images: select just the output pixels, not full-width rows. + square = rgb.reshape(-1, 3).take(yy[:, None] * width + xx[None, :], axis=0) + else: + # Small/strided images: row gathering avoids flattening/copying the source. + square = rgb[yy].take(xx, axis=1) + return square.transpose(2, 0, 1) + + +def prepare_uint8(item, out=None, *, padding=0): + """Select compact pixels; virtual edge padding avoids a full-size padded image.""" + square = _square(item, padding) + if out is None: + return np.ascontiguousarray(square) + out[...] = square + return out + + +def preprocess(item, out=None, *, padding=0): + """Finish the release geometry and normalization in FP32 on CPU.""" + image = np.ascontiguousarray(_square(item, padding), dtype=np.float32) + rows = image.take(_LO, axis=1) + scratch = image.take(_HI, axis=1) + rows *= (1 - _FRACTION)[None, :, None] + scratch *= _FRACTION[None, :, None] + rows += scratch + pixels = out if out is not None and out.dtype == np.float32 else np.empty((3, _SIZE, _SIZE), dtype=np.float32) + # Coordinates are already clamped; clip permits unbuffered writes to out. + np.take(rows, _LO, axis=2, out=pixels, mode="clip") + np.take(rows, _HI, axis=2, out=scratch, mode="clip") + pixels *= (1 - _FRACTION)[None, None, :] + scratch *= _FRACTION[None, None, :] + pixels += scratch + if out is None: + out = pixels + np.rint(pixels, out=out) + out /= 255 + out -= _MEAN + out /= _STD + return out + + +def prepare_batch(items, pool=None, transform=None, *, compact=False, decode=_rgb): + """Fill one contiguous batch without per-image output allocations and stacking.""" + output = np.empty((len(items), 3, _SIZE, _SIZE), dtype=np.uint8 if compact else np.float32) + prepare = prepare_uint8 if compact else preprocess + + def fill(index): + item = decode(items[index]) + if transform is not None: + item = transform(item.copy()) + prepare(item, out=output[index]) + + if pool is not None and len(items) > 1: + for _ in pool.map(fill, range(len(items))): + pass + else: + for index in range(len(items)): + fill(index) + return output + + +class TorchDecode: + """Native CPU JPEG/PNG decoding, using the Torch backend's existing dependency.""" + + def __init__(self, torch): + from torchvision.io import ImageReadMode, decode_image + + self.torch, self.decode, self.mode = torch, decode_image, ImageReadMode.RGB + + def __call__(self, item): + if isinstance(item, (str, Path)): + item = Path(item).read_bytes() + if isinstance(item, bytes) and item.startswith((b"\xff\xd8\xff", b"\x89PNG\r\n\x1a\n")): + # Writable encoded storage avoids a read-only tensor view; only compressed + # bytes are copied. Decoded pixels stay in native storage shared with NumPy. + encoded = self.torch.frombuffer(bytearray(item), dtype=self.torch.uint8) + decoded = self.decode(encoded, mode=self.mode, apply_exif_orientation=False) + if decoded.dtype == self.torch.uint8: + return decoded.numpy() + # Preserve Pillow RGB conversion for high-bit-depth PNGs. + return _rgb(item) + + +class TorchPreprocess: + """Finish a batch of uint8 squares with native operations on its Torch device.""" + + def __init__(self, torch, device): + self.torch = torch + mean = torch.as_tensor(_MEAN, device=device) + std = torch.as_tensor(_STD, device=device) + self.scale, self.bias = 1 / (255 * std), -mean / std + + def __call__(self, images): + torch = self.torch + with torch.autocast(images.device.type, enabled=False): + values = torch.nn.functional.interpolate( + images.float(), size=(_RESIZED, _RESIZED), mode="bilinear", align_corners=False, antialias=False + ) + start = (_RESIZED - _SIZE) // 2 + values = values[..., start : start + _SIZE, start : start + _SIZE] + # One broadcast normalization kernel also produces compact NCHW storage. + return torch.addcmul(self.bias, values.round_(), self.scale) + + +def image_items(value): + if isinstance(value, (str, Path, Image.Image)): + return iter([value]) + if hasattr(value, "ndim") and value.ndim in (2, 3): + return iter([value]) + return iter(value) diff --git a/deployment/mambo_deploy/result_worker.py b/deployment/mambo_deploy/result_worker.py new file mode 100644 index 0000000..eef71b2 --- /dev/null +++ b/deployment/mambo_deploy/result_worker.py @@ -0,0 +1,27 @@ +"""Ordered result processing, overlapped with inference and bounded to two batches.""" + +from collections import deque +from concurrent.futures import ThreadPoolExecutor + + +class ResultWorker: + def __init__(self, function): + self.function = function + self.pending = deque() + self.pool = ThreadPoolExecutor(max_workers=1, thread_name_prefix="mambo-results") + + def __enter__(self): + return self + + def submit(self, *args): + if len(self.pending) >= 2: + raise RuntimeError("Drain a result before submitting another batch") + self.pending.append(self.pool.submit(self.function, *args)) + + def pop(self): + return self.pending.popleft().result() + + def __exit__(self, *exc): + for future in self.pending: + future.cancel() + self.pool.shutdown(wait=True, cancel_futures=True) diff --git a/deployment/mambo_deploy/results.py b/deployment/mambo_deploy/results.py new file mode 100644 index 0000000..653638b --- /dev/null +++ b/deployment/mambo_deploy/results.py @@ -0,0 +1,144 @@ +"""Runtime-neutral result containers and masked hierarchy postprocessing.""" + +import json +from dataclasses import asdict, dataclass +from functools import cached_property + +import numpy as np + +from .transfers import download_tensors + + +@dataclass +class PredictionItem: + label: tuple[str, ...] + confidence: tuple[float, ...] + index: tuple[int, ...] + + def to_dict(self): + return asdict(self) + + +class HierarchyPlan: + """Cache vocabulary order and parent groups; no runtime dependency for NumPy.""" + + def __init__(self, selected, classes): + indices = np.asarray(selected, dtype=np.int64) + self.full = np.array_equal(indices, np.arange(len(classes["labels"][0]))) + self.indices = [indices] + self.groups = [] + for parents in classes["parents"]: + indices, inverse = np.unique(np.asarray(parents, dtype=np.int64)[indices], return_inverse=True) + order = np.argsort(inverse, kind="stable") + starts = np.r_[0, np.flatnonzero(np.diff(inverse[order])) + 1] + self.groups.append((inverse, order, starts)) + self.indices.append(indices) + self.labels = [[classes["labels"][rank][int(i)] for i in indices] for rank, indices in enumerate(self.indices)] + self._devices = {} + + def numpy(self, leaf): + values = np.asarray(leaf if self.full else leaf[:, self.indices[0]], dtype=np.float32) + logits = [values] + for inverse, order, starts in self.groups: + ordered = values[:, order] + maxima = np.maximum.reduceat(ordered, starts, axis=1) + shifts = np.where(np.isfinite(maxima), maxima, 0) + with np.errstate(over="ignore", divide="ignore", invalid="ignore"): + shifted = np.exp(ordered - shifts[:, inverse[order]]) + values = np.log(np.add.reduceat(shifted, starts, axis=1)) + shifts + logits.append(values) + return logits, self.labels, self.indices + + @cached_property + def _torch_api(self): + import torch + + from mini_trainer.hierarchical.utils import batched_scatter_logsumexp + + return torch, batched_scatter_logsumexp + + def torch_values(self, leaf, native=None): + torch, batched_scatter_logsumexp = self._torch_api + if self.full and native is not None: + values = native + else: + key = str(leaf.device) + if key not in self._devices: + self._devices[key] = ( + torch.as_tensor(self.indices[0], device=leaf.device), + [torch.as_tensor(group[0], device=leaf.device) for group in self.groups], + ) + selected, parents = self._devices[key] + values = [leaf.index_select(1, selected)] + for rank, index in enumerate(parents, start=1): + values.append(batched_scatter_logsumexp(values[-1], index, dim_size=len(self.indices[rank]))) + return values, self.labels, self.indices + + def torch(self, leaf, native=None): + values, labels, indices = self.torch_values(leaf, native) + return download_tensors(values, torch=self._torch_api[0]), labels, indices + + +def hierarchy(leaf, selected, classes): + """Mask leaves before batched stable parent reduction, preserving class order.""" + return HierarchyPlan(selected, classes).numpy(leaf) + + +class Prediction: + def __init__(self, raw, labels, global_indices, topk=1, **metadata): + if not isinstance(topk, int) or topk < 1 or topk > min(map(len, labels)): + raise ValueError("topk must be positive and no larger than the smallest retained rank") + self.topk, self.metadata, self.raw_logits = topk, metadata, raw + # Snapshot names cheaply; most callers never need the complete lookup map. + self._class_labels = tuple(tuple(names) for names in labels) + indices, maxima = [], [] + for values in raw: + if topk == 1: + index = np.argmax(values, axis=1)[:, None] + maximum = np.take_along_axis(values, index, axis=1) + # argmax selects NaN when present; inspect only one value per row. + # Keep stable sorting's NaN-last prediction and NaN confidence. + if np.isnan(maximum).any(): + index = np.argsort(-values, axis=1, kind="stable")[:, :1] + else: + index = np.argsort(-values, axis=1, kind="stable")[:, :topk] + maximum = values.max(axis=1, keepdims=True) + indices.append(index) + maxima.append(maximum) + self.indices = np.stack(indices, axis=-1) + self.global_indices = np.stack([mapping[idx] for mapping, idx in zip(global_indices, indices)], axis=-1) + self.logits = np.stack([np.take_along_axis(values, idx, axis=1) for values, idx in zip(raw, indices)], axis=-1) + probabilities = [] + for values, idx, maximum in zip(raw, indices, maxima): + exp = values - maximum + exp = np.exp(exp, out=exp if exp.dtype.kind in "fc" else None) + probabilities.append(np.take_along_axis(exp, idx, axis=1) / exp.sum(axis=1, keepdims=True)) + self.confidence = np.stack(probabilities, axis=-1) + self.labels = [[[labels[r][int(self.indices[b, k, r])] for r in range(3)] for k in range(topk)] for b in range(len(raw[0]))] + nested = [ + [PredictionItem(tuple(lab), tuple(map(float, conf)), tuple(map(int, idx))) for lab, conf, idx in zip(labs, confs, idxs)] + for labs, confs, idxs in zip(self.labels, self.confidence, self.indices) + ] + self.items = [row[0] for row in nested] if topk == 1 else nested + + @cached_property + def cls2idx(self): + return {str(rank): {label: i for i, label in enumerate(names)} for rank, names in enumerate(self._class_labels)} + + def __len__(self): + return len(self.items) + + def __getitem__(self, index): + return self.items[index] + + def __iter__(self): + return iter(self.items) + + def to_dict(self): + return [item.to_dict() for item in self.items] if self.topk == 1 else [[item.to_dict() for item in row] for row in self.items] + + def save(self, path): + with open(path, "w") as stream: + json.dump( + {"results": self.to_dict(), "metadata": self.metadata, "config": {"topk": self.topk, "cls2idx": self.cls2idx}}, stream + ) diff --git a/deployment/mambo_deploy/streaming.py b/deployment/mambo_deploy/streaming.py new file mode 100644 index 0000000..645c24e --- /dev/null +++ b/deployment/mambo_deploy/streaming.py @@ -0,0 +1,212 @@ +"""Bounded path streaming with independent IO and image preparation concurrency.""" + +import hashlib +import threading +import time +from concurrent.futures import ThreadPoolExecutor +from heapq import heappop, heappush +from pathlib import Path +from queue import Empty, SimpleQueue + +import numpy as np + +from .augmentation import _prepare_view +from .preprocessing import RECIPE, _rgb, prepare_uint8, preprocess + + +def read_image(path, size, digest): + with path.open("rb") as stream: + data = stream.read(size + 1) + if len(data) != size: + raise ValueError(f"Image size changed: {path}") + if digest is not None and hashlib.sha256(data).hexdigest() != digest: + raise ValueError(f"Image bytes changed: {path}") + return data + + +def prepare_image(data, tta, out=None, *, compact=False, decode=_rgb): + decoded = decode(data) + prepare = prepare_uint8 if compact else preprocess + if out is None: + return (prepare(decoded),) if tta is None else tuple(_prepare_view(decoded, view, compact=compact) for view in tta.transforms) + if tta is None: + prepare(decoded, out=out[0]) + else: + for transform, target in zip(tta.transforms, out, strict=True): + _prepare_view(decoded, transform, out=target, compact=compact) + return out + + +def image_metadata(path, digest): + path = Path(path) + return path, path.stat().st_size, digest + + +def prepared_stream( + items, + batch_size, + *, + tta=None, + read_workers=32, + prepare_workers=4, + read_window=128, + prefetch_batches=2, + encoded_budget=256 * 1024**2, + stats=None, + reuse_buffers=False, + buffer_factory=None, + compact=False, + decode=_rgb, +): + """Yield ordered (offset, batch views); reusable buffers are leased until next(). + + One owner admits reads, assigns disjoint preparation slices and recycles + returned batches; IO workers only do metadata/file IO, never wait for capacity. + Workers report completions to the owner. Encoded bytes + stay reserved through preparation; batch capacity is released by the consumer. + Close on early exit. Shutdown waits for running filesystem/preparation calls. + """ + values = (batch_size, read_workers, prepare_workers, read_window, encoded_budget) + if any(not isinstance(v, int) or v < 1 for v in values) or not isinstance(prefetch_batches, int) or prefetch_batches < 0: + raise ValueError("Positive batch/workers/window/budget and nonnegative prefetch required") + if read_window < batch_size: + raise ValueError("read_window must cover at least one batch") + stats = {} if stats is None else stats + events, output = SimpleQueue(), SimpleQueue() + source = iter(items) + capacity = batch_size * (prefetch_batches + 1) + factory = buffer_factory or (lambda shape: np.empty(shape, dtype=np.uint8 if compact else np.float32)) + shape = (batch_size, 3, RECIPE["crop_size"], RECIPE["crop_size"]) + + def prepare_into(data, target): + start = time.perf_counter() + prepare_image(data, tta, out=target, compact=compact, decode=decode) + return time.perf_counter() - start + + def submit(pool, kind, index, size, function, *args): + pool.submit(function, *args).add_done_callback(lambda future: events.put((kind, index, size, future))) + + def produce(): + ready, available, active, metadata = [], [], {}, {} + consumed = admitted = emitted = next_read = reserved = 0 + reading = inspecting = preparing = 0 + exhausted = False + readers = ThreadPoolExecutor(max_workers=read_workers, thread_name_prefix="mambo-read") + preparers = ThreadPoolExecutor(max_workers=prepare_workers, thread_name_prefix="mambo-prepare") + stats.update(encoded_bytes=0, prepared_images=0, prepared_batches=0, host_buffer_allocations=0) + + def complete(event): + nonlocal consumed, reading, inspecting, preparing, reserved + kind, index, size, value = event + if kind == "metadata": + inspecting -= 1 + path, length, digest = value.result() + if length > encoded_budget: + raise ValueError(f"Image exceeds encoded byte budget: {path}") + metadata[index] = (path, length, digest) + elif kind == "read": + reading -= 1 + heappush(ready, (index, size, value.result())) + elif kind == "prepared": + stats["preparation_worker_seconds"] = stats.get("preparation_worker_seconds", 0.0) + value.result() + preparing -= 1 + reserved -= size + active[index // batch_size][1] += 1 + stats["prepared_images"] += 1 + elif kind == "taken": + stats["prepared_images"] -= size + stats["prepared_batches"] -= 1 + elif kind == "returned": + consumed = index + size + if reuse_buffers: + available.append(value) + return kind != "stop" + + try: + while True: + # Completions identify exactly which item changed; no future/buffer scans. + try: + while complete(events.get_nowait()): + pass + break + except Empty: + pass + while ready and ready[0][0] < consumed + capacity and preparing < prepare_workers: + index, size, data = heappop(ready) + number, slot = divmod(index, batch_size) + if number not in active: + if available: + views = available.pop() + else: + views = tuple(factory(shape) for _ in range(1 if tta is None else len(tta.transforms))) + stats["host_buffer_allocations"] += len(views) + active[number] = [views, 0] + target = tuple(view[slot] for view in active[number][0]) + submit(preparers, "prepared", index, size, prepare_into, data, target) + preparing += 1 + del data + # Reserve before dispatch, in order: later images cannot crowd an + # earlier required image out of the byte budget. Readers never wait. + while next_read in metadata and reading + inspecting < read_workers: + path, size, digest = metadata[next_read] + if reserved + size > encoded_budget: + break + del metadata[next_read] + reserved += size + stats["peak_encoded_bytes"] = max(stats.get("peak_encoded_bytes", 0), reserved) + submit(readers, "read", next_read, size, read_image, path, size, digest) + reading += 1 + next_read += 1 + while not exhausted and admitted < consumed + read_window and reading + inspecting < read_workers: + try: + path, digest = next(source) + except StopIteration: + exhausted = True + break + submit(readers, "metadata", admitted, 0, image_metadata, path, digest) + inspecting += 1 + admitted += 1 + while emitted // batch_size in active: + views, count = active[emitted // batch_size] + expected = min(batch_size, admitted - emitted) if exhausted else batch_size + if count != expected: + break + del active[emitted // batch_size] + stats["prepared_batches"] += 1 + output.put((emitted, tuple(view[:count] for view in views))) + emitted += count + stats.update(reading=reading, inspecting=inspecting, encoded_bytes=reserved, encoded_ready=len(ready), preparing=preparing) + stats["peak_prepared_images"] = max(stats.get("peak_prepared_images", 0), stats["prepared_images"] + preparing) + if exhausted and consumed == admitted: + output.put(None) + return + if not complete(events.get()): + break + except BaseException as error: + output.put(error) + finally: + readers.shutdown(wait=True, cancel_futures=True) + preparers.shutdown(wait=True, cancel_futures=True) + # Completed futures can retain encoded images; discard them after shutdown. + while not events.empty(): + events.get_nowait() + + producer = threading.Thread(target=produce, name="mambo-stream") + producer.start() + try: + while True: + start = time.perf_counter() + result = output.get() + stats["queue_wait_seconds"] = stats.get("queue_wait_seconds", 0.0) + time.perf_counter() - start + stats["input_wait_seconds"] = stats["queue_wait_seconds"] + if isinstance(result, BaseException): + raise result + if result is None: + return + offset, views = result + events.put(("taken", offset, len(views[0]), None)) + yield offset, views + events.put(("returned", offset, len(views[0]), views)) + finally: + events.put(("stop", 0, 0, None)) + producer.join() diff --git a/deployment/mambo_deploy/transfers.py b/deployment/mambo_deploy/transfers.py new file mode 100644 index 0000000..8c49d94 --- /dev/null +++ b/deployment/mambo_deploy/transfers.py @@ -0,0 +1,131 @@ +"""Two-slot device staging; runtime imports remain optional and lazy.""" + +import math +import time +from concurrent.futures import ThreadPoolExecutor + + +def pinned_factory(device, *, compact=False): + import torch + + def allocate(shape): + with torch.cuda.device(device): + return torch.empty(shape, dtype=torch.uint8 if compact else torch.float32, pin_memory=True).numpy() + + return allocate + + +def download_tensors(values, stats=None, *, torch, defer=False, stream=None): + """Return CPU arrays, or a completion callable retaining buffers until D2H finishes.""" + if values[0].device.type == "cpu": + arrays = [value.float().numpy() for value in values] + return (lambda: arrays) if defer else arrays + packed = torch.cat([value.float().reshape(-1) for value in values]) + shapes = [tuple(value.shape) for value in values] + host = torch.empty(packed.shape, dtype=torch.float32, pin_memory=True) + current = torch.cuda.current_stream(packed.device) + stream = stream or current + stream.wait_stream(current) + with torch.cuda.stream(stream): + begin, done = torch.cuda.Event(enable_timing=True), torch.cuda.Event(enable_timing=True) + begin.record(stream) + host.copy_(packed, non_blocking=True) + done.record(stream) + packed.record_stream(stream) + + def finish(): + start = time.perf_counter() + done.synchronize() # Only the result consumer waits; no CPU access before completion. + if stats is not None: + stats["d2h_device_seconds"] = stats.get("d2h_device_seconds", 0.0) + begin.elapsed_time(done) / 1000 + stats["output_completion_wait_seconds"] = stats.get("output_completion_wait_seconds", 0.0) + time.perf_counter() - start + array = host.numpy() + result, offset = [], 0 + for shape in shapes: + end = offset + math.prod(shape) + result.append(array[offset:end].reshape(shape)) + offset = end + return result + + return finish if defer else finish() + + +def device_batches(source, backend, device, stats): + """Stage N+1 while N executes; yielded buffers are leased until the next iteration.""" + device_id = int(device.split(":")[-1]) if ":" in device else 0 + slots = [{"buffers": [], "used": None}, {"buffers": [], "used": None}] + counter = 0 + if backend == "torch": + import torch + + copy_stream = torch.cuda.Stream(device=device) + else: + import onnxruntime as ort + + ort.preload_dlls() if hasattr(ort, "preload_dlls") else None + pool = ThreadPoolExecutor(max_workers=1, thread_name_prefix="mambo-transfer") + + def stage(): + nonlocal counter + try: + offset, views = next(source) + except StopIteration: + return None + slot = slots[counter % 2] + counter += 1 + start = time.perf_counter() + if backend == "torch": + with torch.cuda.device(device), torch.cuda.stream(copy_stream): + if slot["used"] is not None: + copy_stream.wait_event(slot["used"]) + begin, end = torch.cuda.Event(enable_timing=True), torch.cuda.Event(enable_timing=True) + begin.record(copy_stream) + staged = [] + for index, view in enumerate(views): + source_tensor = torch.from_numpy(view) + if index == len(slot["buffers"]): + slot["buffers"].append(torch.empty(view.shape, dtype=source_tensor.dtype, device=device)) + stats["device_buffer_allocations"] = stats.get("device_buffer_allocations", 0) + 1 + target = slot["buffers"][index][: len(view)] + target.copy_(source_tensor, non_blocking=True) + staged.append(target) + end.record(copy_stream) + end.synchronize() # The source may recycle its pinned host buffers on next(). + stats["h2d_device_seconds"] = stats.get("h2d_device_seconds", 0.0) + begin.elapsed_time(end) / 1000 + else: + staged = [] + for index, view in enumerate(views): + if index == len(slot["buffers"]) or tuple(slot["buffers"][index].shape()) != view.shape: + value = ort.OrtValue.ortvalue_from_numpy(view, "cuda", device_id) + if index == len(slot["buffers"]): + slot["buffers"].append(value) + else: + slot["buffers"][index] = value + stats["device_buffer_allocations"] = stats.get("device_buffer_allocations", 0) + 1 + else: + slot["buffers"][index].update_inplace(view) + staged.append(slot["buffers"][index]) + stats["transfer_worker_seconds"] = stats.get("transfer_worker_seconds", 0.0) + time.perf_counter() - start + return offset, tuple(staged), slot, len(views[0]) + + future = pool.submit(stage) + try: + while True: + result = future.result() + if result is None: + break + offset, views, slot, count = result + future = pool.submit(stage) + try: + yield offset, views, count + finally: + if backend == "torch": + with torch.cuda.device(device): + slot["used"] = torch.cuda.Event() + slot["used"].record(torch.cuda.current_stream(device)) + finally: + future.cancel() + pool.shutdown(wait=True, cancel_futures=True) + source.close() + if backend == "torch": + copy_stream.synchronize() diff --git a/deployment/pyproject.toml b/deployment/pyproject.toml new file mode 100644 index 0000000..7a6ff11 --- /dev/null +++ b/deployment/pyproject.toml @@ -0,0 +1,33 @@ +[project] +name = "mambo-v3" +version = "0.3.0" +description = "Portable local inference for MAMBO model bundles" +requires-python = ">=3.12" +dependencies = ["numpy>=2.4", "pillow>=11"] +readme = "README.md" +license = "MIT" +license-files = ["LICENSE"] +authors = [{name = "Asger Svenning"}] +keywords = ["image-classification", "biodiversity", "lepidoptera", "onnx", "pytorch"] + +[project.urls] +Documentation = "https://github.com/asgersvenning/mini_trainer/blob/MAMBO_v3/deployment/README.md" +Repository = "https://github.com/asgersvenning/mini_trainer" +Issues = "https://github.com/asgersvenning/mini_trainer/issues" +Changelog = "https://github.com/asgersvenning/mini_trainer/releases/tag/MAMBO_v3" + +[project.optional-dependencies] +onnx = ["onnxruntime>=1.20"] +onnx-cuda = ["onnxruntime-gpu[cuda,cudnn]>=1.21,<2"] +torch = ["mt-trainer>=0.3.0,<0.4"] + +[project.scripts] +mambo_predict = "mambo_deploy.cli:run" + +[build-system] +requires = ["uv_build>=0.10.7,<0.11.0"] +build-backend = "uv_build" + +[tool.uv.build-backend] +module-root = "" +module-name = "mambo_deploy" diff --git a/dev/README.md b/dev/README.md index 2481c27..e4ce9ac 100644 --- a/dev/README.md +++ b/dev/README.md @@ -1,18 +1,21 @@ -# Development checks +# Development guide -Tests are grouped by subsystem; see the [test suite map](../tests/README.md). -Use [local worktrees](worktrees.md) to develop independent branches concurrently. -For quantization work, follow the [branch roadmap](../docs/quantization-roadmap.md) -and [benchmark command index](benchmarks/README.md). -For a mounted global_lepi dataset on a manually allocated UCloud node, use the -[paired branch training comparison](ucloud/README.md), including fresh environment -setup, single-GPU/DDP launch and a checkpoint-based ONNX follow-up. +Use the existing uv environment from [installation](../README.md#local-installation). +Checks never synchronize it; explicitly choose the PyTorch backend when installing +dependencies. Start with the [roadmap](../docs/roadmap.md) for priorities. -Use the uv-managed environment from the [installation guide](../README.md#local-installation). -The default sync includes the development dependency group. Choose a PyTorch backend -explicitly when syncing; checks use `.venv` without changing installed packages. +| Task | Guide | +|---|---| +| Locate behavioral coverage | [Test suite map](../tests/README.md) | +| Work on independent branches | [Worktrees](worktrees.md) | +| Run training/inference experiments | [Benchmark commands](benchmarks/README.md) | +| Compare branches on UCloud | [UCloud setup and execution](ucloud/README.md) | +| Qualify native INT8 or PTQ/QAT | [Quantization roadmap](../docs/quantization-roadmap.md) | +| Maintain the MAMBO release | [Release inputs and workflows](releases/mambo_v3/README.md) | +| Change loading or optimizer behavior | [Runtime contracts](#training-and-loading-contracts) | +| Reproduce publication experiments | [Research workflows](../publication/experiments/README.md) | -Run from the repository root: +From the repository root: ```bash bash dev/check.sh static @@ -22,339 +25,176 @@ bash dev/check.sh test --cov=mini_trainer --cov-report=xml --cov-report=term bash dev/check-wheel.sh ``` -The script resolves the repository relative to itself, so it also works when invoked -by absolute path from another directory. With no arguments it runs static checks. -`static` checks lint, formatting, and the dependency contracts in `pyproject.toml`. -Formatting failures include the proposed diff; apply it with -`.venv/bin/python -m ruff format mini_trainer tests dev`, then rerun static checks. -CI uses the locked formatter; local checks use the installed version without syncing. -It does not import training code. `test` passes remaining arguments to pytest; -`all` runs static checks first and stops if they fail. - -Tests default to hidden CUDA devices and a headless plotting backend. Set -`CUDA_VISIBLE_DEVICES=0` explicitly for tests intended to exercise a GPU. The CPU DDP -integration test launches two processes and requires localhost sockets; a restricted -sandbox may need to allow that execution. Failures caused by missing dependencies or -restricted execution should be reported separately from assertion failures. - -The slow backbone tests are skipped unless `RUN_SLOW_TESTS=1`. Enabling them can -require downloaded weights or cached configurations. The separate -`tests/utils/run_compatibility_tests.py` utility also writes compatibility results -and may change the architecture blacklist; it is not part of routine checks. +`static` checks Ruff formatting/lint and import contracts without importing the +package. `test` forwards arguments to pytest; `all` runs static checks before tests. +The harness also works by absolute path. Apply formatting with +`.venv/bin/python -m ruff format mini_trainer tests dev`. + +Tests hide CUDA and use a headless plotting backend by default. Set +`CUDA_VISIBLE_DEVICES=0` for intentional GPU checks; some also require +`RUN_CUDA_TESTS=1`. Slow backbone tests require `RUN_SLOW_TESTS=1` and may download +weights. CPU DDP tests need localhost sockets. Report dependency/sandbox failures +separately from assertion failures. The optional +`tests/utils/run_compatibility_tests.py` can mutate the architecture blacklist; +it is not a routine validation command. ## Reviewing a change -- Explain the observable behavior and compatibility guarantees. -- Run focused behavioral tests for changed code, plus static checks. Use the full - suite for changes crossing training, loading, checkpointing, or harness boundaries. -- Keep synthetic tests independent of datasets, model downloads, and service accounts. -- For refactors, retain current defaults and output formats. Add regression tests - where behavior is not already covered; avoid tests that merely repeat implementation. -- Record any untested GPU, backend, export, or optional-dependency cases explicitly. +Preserve public defaults, output formats and checkpoint identities during refactors. +Use existing regression coverage before adding tests; cover observable behavior +and meaningful failures, not private layout or configuration literals. Run focused +tests plus static checks, and the full suite for changes spanning training, loading, +checkpointing or the validation harness. Record skipped and untested boundaries. +Documentation-only edits need content/link and diff checks, not model execution. ## Installed package and dependency checks -`bash dev/check-wheel.sh` explicitly builds a wheel and installs it into a disposable -CPU environment using the core dependencies in `uv.lock`. It does not sync `.venv`. -It needs uv and access to dependencies, either cached or downloadable. Supply a Python -version or interpreter path as its first argument to select another supported Python. - -The check runs outside the source tree with isolated Python imports. It verifies -minimal imports, every console entry point's help, the packaged architecture blacklist, -and a tiny image-folder training/reload/prediction round trip. Optional integrations -must be absent. Temporary environments and outputs are cleaned up when the check exits. +`bash dev/check-wheel.sh [python-version-or-path]` builds and installs the wheel +with locked core CPU dependencies in a disposable environment outside the checkout. +It checks minimal imports, CLI help, packaged metadata and a tiny training/reload/ +prediction round trip without optional integrations. It needs uv and cached or +downloadable dependencies; it does not sync `.venv`. -CI runs the source suite and the installed-wheel check on Python 3.12, 3.13, and 3.14. -Regular CI uses the tracked `uv.lock` with `uv sync --locked`. Local checks continue -to use the existing environment; they do not imply that it matches the lockfile. -For an explicit reproducible CPU setup, run `uv sync --locked --extra all --extra cpu`. -Select your CUDA extra instead when maintaining a GPU environment. - -The separate scheduled/manual dependency-compatibility workflow runs `uv lock --upgrade` -in its disposable checkout, then the same checks. It does not update the committed lock. -To propose an upgrade locally, run `uv lock --upgrade` (or `uv lock --upgrade-package NAME`), -inspect the lock diff, explicitly sync the desired backend, and validate before committing. +CI runs source and wheel checks on Python 3.12–3.14 using the committed lock. +The scheduled/manual dependency workflow upgrades its disposable lock before +running the same checks. To propose an upgrade, explicitly update the lock, +review it, sync the intended backend and validate. Local checks use the installed +environment and do not establish agreement with the lock. ## Behavioral coverage and known limits -Loader regressions live in `tests/data/test_loader.py`. They simulate restricted -CPU affinity, Python/platform fallbacks, and explicit worker counts without starting -large worker pools. Small image and RAM-cache fixtures check output compatibility, -and the distributed loader check verifies sampler/spawn configuration. The full CPU -DDP integration test remains the runtime check for distributed training. - -`tests/training/test_checkpoint_contract.py` compares live and reloaded predictions, verifies -model/optimizer/scheduler/scaler state at the continuation boundary, and compares final -checkpoint contents after uninterrupted and resumed CPU float32 training. It retains -the original epoch budget and uses fixed data order with stochastic transforms disabled. -The disabled float32 scaler has empty state; this does not test active AMP restoration. -Checkpoints currently omit RNG and sampler state, so arbitrary stochastic runs are not -guaranteed to continue identically. - -EMA state restoration is checked independently. Full EMA continuation currently has a -strict expected-failure regression: evaluation populates nonpersistent classifier cache -buffers with shapes that differ from the training model's buffers at the next EMA update. -See the [roadmap](../docs/roadmap.md) for the follow-up. Expected failures remain visible -in pytest output and become failures if they unexpectedly pass. +The [test map](../tests/README.md) owns subsystem coverage. +Checkpoint tests compare model/optimizer/scheduler/scaler state and uninterrupted +versus resumed CPU float32 training with fixed order and no stochastic transforms. +They do not qualify active AMP restoration or arbitrary stochastic continuation: +checkpoints omit RNG and sampler state. + +EMA continuation retains a strict expected failure for incompatible classifier +cache-buffer shapes after evaluation. Preserve that regression until fixed; see +[the roadmap](../docs/roadmap.md). Passing CPU checks does not establish CUDA, +AMP, optional-backbone or distributed behavior. ## ONNX checks -`tests/export/test_onnx.py` requires the `export` extra; optional backend cases additionally -require `timm`, `transformers` and `bioclip`. CI's `all` extra includes these. -Tests use randomly initialized offline models and check all classifier head families, -representative backbones, state preservation, masks and structured outputs. +Export tests use offline initialized models and require the `export` extra; +optional backbones need their own dependencies. See [export contracts](../docs/onnx.md). -`bash dev/check-onnx.sh [path/to/export-environment/bin/python]` exports a classifier -and compares predictions in a disposable environment containing ONNX Runtime and -its dependencies, with no PyTorch or mini_trainer. It explicitly installs the runtime -version from the export environment and needs registry access or cached packages. -It does not synchronize `.venv`. CI runs this in addition to the shared test harness. +`bash dev/check-onnx.sh [export-environment/bin/python]` exports a classifier and +checks predictions in a disposable ONNX Runtime environment without PyTorch or +mini_trainer. It installs the export environment's runtime version and needs cache +or registry access; the working environment is unchanged. ## Reproducible dataset benchmarks -The [benchmark progression](benchmarks/README.md) starts with a fast synthetic -classification task with a known oracle and independent train/validation/test -splits. Its runner uses the actual training, checkpoint and inference paths. -MNIST and hierarchical Blair have explicit real-data profiles; their test data must -remain separate from configuration and checkpoint selection. - -## Optimizer step contract - -`trainer._optimizer_step` preserves the successful-step gate previously supplied -by MuonAuxAdamW's `_step_count`. The scheduler and EMA averaging update advance only -after a completed step that AMP did not reject. EMA still receives the original -batch-based index (`batches_per_epoch * epoch + batch_index`); its update-rate and -distillation schedules have not been redefined. EMA's separate cache bug is not fixed. - -The trainer uses a temporary public optimizer post-step hook. Ordinary GradScaler -omits `optimizer.step()` on overflow, so that hook does not run. Native fused AdamW -and SGD enter `step()` even on overflow and skip inside the kernel: the hook captures -GradScaler's transient `optimizer.found_inf` tensor before it is removed. Only this -AMP-aware path reads the device flag for the Python scheduler/EMA decision. The -ordinary Muon/AdamW/SGD path adds no scaler-value readback or parameter comparison. - -A completed step is not defined by whether parameters changed: zero learning rate -or zero gradients still count. Scale equality and the optimizer's return value -cannot establish success. Temporary hooks are removed even if the step raises, -and no new counter enters optimizer checkpoints. MuonAuxAdamW retains its own counter. - -Custom optimizers must follow the ordinary Optimizer/GradScaler step contract or -the native `found_inf` AMP contract. The deprecated `step(..., grad_scaler=...)` -protocol is rejected before execution when scaling is enabled because its internal -skip cannot be observed reliably. Arbitrary custom internal no-ops are not inferred -by inspecting parameters. This boundary must be rechecked when PyTorch changes its -fused AMP contract. - -`tests/training/test_optimizer_steps.py` uses real GradScaler overflow, scale growth and -recovery on CPU and optionally CUDA, including native fused AdamW/SGD. It checks -parameters, optimizer state, scheduler state and EMA call indices, as well as -zero-LR steps, scale underflow and hook cleanup. Checkpoint regressions additionally -compare uninterrupted/resumed MuonAuxAdamW, AdamW and momentum SGD training. +Follow the [benchmark progression](benchmarks/README.md): synthetic oracle, +MNIST, then hierarchical Blair. Keep test splits separate from configuration and +checkpoint selection. A passing correctness profile is not a throughput claim. -```bash -bash dev/check.sh test tests/training/test_optimizer_steps.py tests/training/test_checkpoint_contract.py -RUN_CUDA_TESTS=1 CUDA_VISIBLE_DEVICES=0 bash dev/check.sh test tests/training/test_optimizer_steps.py -k cuda -``` +## Agent-only changes and CI -The configured GPU benchmark workflow runs these CUDA regressions too. An explicitly -requested CUDA test fails when no device is available; ordinary CPU CI skips those -hardware cases. These are optimizer/AMP tests, not an EMA-functionality claim. +Follow [agent workspace policy](../.agents/README.md) for file placement and separate +`agent:` commits. The prefix does not disable checks. CI classifies the entire diff: +only `AGENTS.md`, Markdown under `.agents/` and `.agents/.gitignore` qualify as +agent-only. Mixed or unreadable changes run checks; scheduled/manual jobs are +unchanged. Do not use `[skip ci]` to bypass required checks. -References: [optimizer post-step hooks](https://docs.pytorch.org/docs/2.12/generated/torch.optim.Optimizer.register_step_post_hook.html) -and [GradScaler](https://docs.pytorch.org/docs/2.12/amp.html). +[The classifier](ci_scope.py) and [its tests](../tests/core/test_ci_scope.py) own exact +path/rename handling. Required-check behavior on the first hosted agent-only PR +still needs verification under the actual branch-protection settings. -### CUDA batch transfer lookahead +## PR change statistics -`mt_train --cuda-prefetch` and `mt_predict --cuda-prefetch` opt into one-batch -transfer lookahead. Python loader builders accept `cuda_prefetch=True` with a CUDA -`device`. The returned object still inherits `DataLoader`, with the same sampler, -length, worker settings and repeated-epoch behavior; its batches are already on -the requested CUDA device. Shape, dtype and order are preserved. Model -preprocessing/augmentation stays on the caller's compute stream, so this works -independently of float32, AMP or INT8 model execution. - -The option defaults off, rejects CPU targets, and is bypassed for an already -CUDA-cached dataset. It stages one additional batch and records stream usage so -the allocator cannot recycle batch storage before consumption completes. It does -not increase worker counts or add CPU reader threads. Custom CPU hooks may run a -batch earlier; stochastic hooks sharing global RNG state can therefore change -their interleaving with caller code. Returned batches may outlive iteration; -callers using them on another CUDA stream must establish their own stream handoff. -See [PyTorch stream semantics](https://docs.pytorch.org/docs/main/notes/cuda.html#cuda-streams). - -This is an opt-in throughput/memory tradeoff. Actual gains depend on the balance -between transfer and compute; compare peak allocation as well as wall time using -[the transfer probe](benchmarks/training.md#capacity-and-bottleneck-probes). +[The workflow](../.github/workflows/pr-change-summary.yml) reports PR changes by +content group. Only root `README.md` is included in its code headline; other Markdown +has a separate row. Its `featureMarkdown` set defines exceptions. -### Direct pinned cache batches +It reads GitHub metadata without checking out or executing PR code, flags incomplete +diffs above 3,000 files and classifies renames by destination. Counts describe volume, +not quality or effort. -For a CUDA target with `cache="CPU"` and `num_workers=0`, the shared training -loader now gathers cached rows directly into pinned batch storage. This removes -the intermediate pageable batch and its second copy during pinning. Batches own -their storage: modifying one cannot change the cache, and keeping an older batch -cannot cause it to be overwritten by a later iteration. Sampling, label order, -shape and dtype are unchanged. +## Training and loading contracts -This applies automatically with either ordinary transfer or `--cuda-prefetch`. -Raw `LazyDataset` users can request `pin_batches=True` for the same behavior. -Worker processes always use the ordinary gather path and DataLoader's parent-side -pinning; this option never initializes the CUDA pin allocator in a worker. CPU -training, CUDA-cached datasets and scalar indexing keep their existing behavior. +These constraints matter when changing runtime behavior. The linked implementations +and tests own exact cases; benchmark commands are in the [training guide](benchmarks/training.md). -### Direct collation of stacked batches +### Optimizer step contract -Repository loaders now retain the gathered batch tensors through collation, -avoiding creation of one image/label view per sample. Their batch sampler tags -index lists for this internal path; dataset identity, shuffle/drop-last behavior, -distributed sampler access and RNG consumption are preserved. +Scheduler and EMA updates follow successful optimizer steps, including zero-LR or +zero-gradient updates. Parameter changes, scale equality and return values do not establish success. +Fused AMP optimizers may enter `step()` on overflow; the trainer observes their +`found_inf` skip flag. The deprecated `step(..., grad_scaler=...)` protocol is rejected +with scaling enabled. [Tests](../tests/training/test_optimizer_steps.py) cover overflow, +recovery and hook cleanup; checkpoint tests cover continuation. Run the CUDA cases with: -Ordinary external `LazyDataset.__getitems__` calls still return actual sample -lists, including direct `torch.stack` compatibility. An external DataLoader that -reuses the repository batch sampler with its default collator materializes sample -views on demand. Tests cover image-only and image/label batches with both direct -loading and CPU caches, including spawned workers and CUDA prefetch. +```bash +RUN_CUDA_TESTS=1 CUDA_VISIBLE_DEVICES=0 bash dev/check.sh test tests/training/test_optimizer_steps.py -k cuda +``` -A one-thread cache benchmark with 4,096 uint8 RGB 28×28 images, batch size 128, -and seven alternating trials measured approximately 0.52 million samples/s before -this change and 2.22 million afterward. This isolates cached iteration; larger -images, decoding, transfer and model compute change the overall benefit. See the -[integrated measurements](https://github.com/asgersvenning/mini_trainer/blob/f5c69e7cab2bfde8a5467026b293858b93e628f9/docs/archive/benchmark-history.md#larger-batches-and-direct-collation). +### CUDA batch transfer lookahead -### Model compilation +`mt_train --cuda-prefetch`, `mt_predict --cuda-prefetch` and Python `cuda_prefetch=True` opt into +one-batch transfer lookahead. CPU targets are rejected; CUDA-cached data bypasses it. +Sampling/order are preserved and preprocessing stays on the caller's compute stream. +CPU hooks may execute earlier, affecting shared RNG interleaving. Callers using +another CUDA stream own that handoff. Use the +[transfer probe](benchmarks/training.md#capacity-and-bottleneck-probes) to measure benefits. -`mt_train --compile --compile-mode reduce-overhead` selects a PyTorch model -compilation mode. The Python training entry points accept `compile_mode`, and -`dev.benchmarks.training.run` accepts the same CLI flag and records it in success and -failure reports. An explicit mode requires `--compile`; omitting it preserves -ordinary `torch.compile(model)` behavior. Optimizer compilation remains separate. +### Direct pinned cache batches -Supported modes are `default`, `reduce-overhead`, `max-autotune`, and -`max-autotune-no-cudagraphs`. PyTorch's CUDA graph modes can reduce launch overhead -for eligible graphs, but capture is not guaranteed and workspace caching can -increase memory. Measure both float and INT8 with the same mode, including -compilation time, later training phases, peak allocation and held-out quality. -See the [PyTorch compilation modes](https://docs.pytorch.org/docs/2.12/generated/torch.compile.html). +CUDA with `cache="CPU"` and `num_workers=0` gathers directly into owned pinned +batches (`LazyDataset(pin_batches=True)`). Workers use ordinary gather followed by +parent-side pinning; they must not initialize CUDA pin allocators. Retaining or +modifying a batch must not corrupt the cache or subsequent batches. -### Optimizer compilation +### Direct collation of stacked batches -`mt_train --compile-optimizer` opts into compiling optimizer updates independently -of model `--compile`. The benchmark runner accepts the same option and records it -in result and failure reports. It defaults off; compilation overhead and graph -breaks can outweigh any steady-state benefit, so measure the intended workload. - -The first real optimizer call initializes lazy state eagerly. Subsequent calls -use compilation with tensor learning rates, allowing scheduler changes without -specializing a graph for every numeric rate. AMP overflow handling and scheduler -advancement remain controlled by the trainer. MuonAuxAdamW compiles its child -optimizers while keeping its outer step counter in Python; Muon's compilation -preserves the explicit BF16 casts in its Newton-Schulz iterations. - -For custom training, call `mini_trainer.training.compilation.compile_optimizer` -after constructing the scheduler and restoring checkpoint state. Saved learning -rates remain ordinary scalars, so a checkpoint can resume without compilation. -Explicit `foreach=True` Adam/AdamW requires `capturable=True`; unsupported -combinations fail before the helper changes the optimizer. Default and explicit -`foreach=False` updates do not need that setting. - -Regression coverage compares eager and compiled SGD, AdamW, their native fused -variants, and MuonAuxAdamW on CUDA, including overflow skips, scheduler changes, -parameter updates and optimizer state. This does not establish support for every -custom optimizer or a real-workload INT8 speedup. Quantized update dispatch and -its performance remain a separate validation boundary. +Repository loaders avoid splitting gathered batches into per-sample views. +External `LazyDataset.__getitems__` still returns sample lists for default collators. +Preserve sampler/RNG, shuffle/drop-last and worker behavior; see +[loader tests](../tests/data/test_loader.py). -### Optimizer CUDA graphs +### Model compilation -`mt_train --compile-optimizer --optimizer-cudagraphs` additionally requests CUDA -graph replay for optimizer updates. It requires parameters on one CUDA device -and the default Inductor backend. It is independent of model compilation; -`--compile --compile-mode reduce-overhead` can enable model graphs as well. -The benchmark runner accepts and records the same optimizer option. - -For custom training, call `compile_optimizer(optimizer, cudagraphs=True)` after -scheduler construction and checkpoint restoration. The first real update still -initializes state eagerly, under the trainer's AMP gating. Subsequent updates use -device-resident learning rates. Scheduler updates, overflow decisions and Muon's -outer step counter remain outside graph capture. Changing the graph setting of -an already compiled optimizer is rejected rather than silently ignored. - -Numeric rates retain float64 precision; explicitly supplied tensor rates retain -their dtype. Checkpoints save numeric values plus a `_mini_trainer_lr_dtype` -marker for non-default precision, allowing compiled restoration to recover that -choice. Ordinary eager loading still accepts the numeric rates. Native fused -SGD/Adam/AdamW tensor-rate kernels require an explicitly selected float32 tensor -rate (or its recorded checkpoint marker); unsupported rates fail before mutation. -The existing foreach/capturable restrictions still apply. - -INT8 updates use compiler-visible arithmetic and final storage copies during AOT -fake-tensor tracing. This avoids an opaque in-place operator carrying CPU scalar -inputs into CUDA graph partitions. The native row update remains available in -eager execution. Regression tests check actual optimizer-only replay, arithmetic, -AMP skips, rate precision, same-optimizer restoration and eager checkpoint resume. -Capture eligibility, extra gradient copies, graph workspace memory and first-use -compilation costs still depend on the optimizer and workload. Measure both float -and INT8 with the same options; enabling graphs alone is not evidence of a speedup. +`--compile-mode` requires `--compile`; choices are `default`, `reduce-overhead`, +`max-autotune` and `max-autotune-no-cudagraphs`. Optimizer compilation is separate. +Measure startup, warm throughput, memory and held-out quality; speedup is not guaranteed. -## Agent-only changes and CI +### Optimizer compilation -Material primarily for coding agents lives in [`.agents/`](../.agents/README.md), -with root [`AGENTS.md`](../AGENTS.md) as the entry point. Durable notes use the -[shared format](../.agents/notes/README.md); scratch work belongs in ignored -`.agents/local/`. Developer-facing documentation remains in `docs/` and `dev/`. - -Use separate `agent:` commits for agent instructions and notes. This prefix marks -purpose, not authorship, and does not disable checks. CI workflow changes, executable -helpers and application changes receive normal separate commits. - -The CI and dataset benchmark workflows skip pushes that change only `AGENTS.md`, -Markdown inside `.agents/`, or `.agents/.gitignore`. Other Markdown, code, scripts, -configuration and workflow changes still run the usual checks. On pull requests, -a small `scope` job compares the complete PR diff; agent-only changes skip costly -jobs while preserving job statuses. Mixed changes run checks regardless of commit -messages. Scheduled and manual benchmarks keep their existing behavior. - -`dev/ci_scope.py` uses Git and the Python standard library, with no environment -installation. Missing/unreadable/empty comparisons run checks conservatively; -renames inspect both old and new paths. If classification fails, downstream checks -still run unless the workflow was cancelled. The push patterns are also checked -against the classifier by `tests/core/test_ci_scope.py`. - -Do not use `[skip ci]` as an alternative: GitHub documents that workflow-level -skipping can leave [required PR checks pending](https://docs.github.com/en/actions/reference/workflows-and-actions/workflow-syntax#onpushpull_requestpull_request_targetpathspaths-ignore). -Agent-only edits need content/link review and `git diff --check`; changes to the -classifier or workflows need their focused checks. Release-tag, scheduled and -manual workflows are not disabled by agent commit messages. - -## Automatic CPU budgets - -Automatic loader and cache worker counts now use the smallest detected process -CPU count, affinity mask, visible Linux cgroup CPU quota, and positive -`SLURM_CPUS_PER_TASK` allocation. Cgroup v1 and v2 ancestor limits are included; -fractional CPU quotas are rounded down before applying the existing four-CPU -reserve and worker caps. Explicit worker counts, including zero, remain unchanged. -Unreadable, unlimited, or malformed quota data falls back to the other signals. - -These are resource ceilings, not a measurement of contention from other jobs. -For a deliberately shared allocation, set worker counts explicitly when needed. -The relevant interfaces are documented by the -[Linux kernel](https://docs.kernel.org/admin-guide/cgroup-v2.html#cpu-interface-files) -and [Slurm](https://slurm.schedmd.com/sbatch.html#OPT_SLURM_CPUS_PER_TASK). - -CI runs on pull requests targeting `master` and on pushes to `master`. Feature -branches such as `quant` use PR checks, avoiding duplicate push/PR jobs. New -commits cancel superseded runs for the same PR or branch. The x86 quantization -job forces AVX2 to verify portability without relying on runner VNNI support. +`--compile-optimizer` defaults off. Custom training calls +`mini_trainer.training.compilation.compile_optimizer` after scheduler construction +and checkpoint restoration. The first real update initializes state eagerly; +subsequent updates use tensor learning rates without specializing each numeric rate. +AMP skip decisions stay with the trainer; saved scalar rates support eager resume. +Explicit foreach Adam/AdamW requires `capturable=True`; incompatible settings fail +before mutation. -## PR change statistics +### Optimizer CUDA graphs -`pr-change-summary.yml` maintains one bot comment per PR, with file and line counts -for the core module, tests, benchmark tooling, CI, packaging, and other areas. -Markdown is excluded from the headline except root `README.md`, whose onboarding -instructions are part of the user interface. Other Markdown remains visible in a -separate row. The workflow's `featureMarkdown` set is the explicit exception list; -add a path there when its content is itself a delivered feature. - -The workflow reads GitHub PR metadata only. It uses `pull_request_target` with -permission to comment, performs no checkout and never executes PR content. It -starts working once installed on the PR base branch. Counts use GitHub's PR diff, -classify renames by destination, and flag incomplete results above the API's -3,000-file limit. They measure change volume, not quality or development effort. +`--compile-optimizer --optimizer-cudagraphs` requests Inductor replay on one CUDA +device; custom code uses `compile_optimizer(optimizer, cudagraphs=True)`. +Scheduler calls, overflow decisions and Muon's outer counter stay outside capture. +An already compiled optimizer cannot change its graph setting. + +Numeric rates retain float64 precision; explicitly typed tensor rates retain their +dtype in checkpoints. Fused SGD/Adam/AdamW graph kernels require explicitly selected +float32 rates; never silently coerce them. Foreach/capturable restrictions still apply. +[Implementation](../mini_trainer/training/compilation.py) and +[tests](../tests/training/test_optimizer_steps.py) define the exact state contract; +graph overhead and INT8 performance need workload-specific evidence. + +### Automatic CPU budgets + +Defaults use the smallest available process CPU count, affinity mask, visible +Linux cgroup quota (including ancestors) and positive `SLURM_CPUS_PER_TASK`. +Fractional quotas round down; unusable signals fall back to the others. Explicit +counts, including zero, are preserved. + +| Consumer | Automatic budget | Override | +|---|---|---| +| Training DataLoader | CPUs minus 4, rounded down to even, bounded 0–16 | `--num_workers` | +| Prediction DataLoader | Same rule, capped at 32 | `--num_workers` | +| Training cache preparation | Same rule, capped at 16; zero is serial | `--cache-workers` / `cache_workers` | + +CUDA-cached datasets force zero DataLoader workers. These limits do not measure +competition from other jobs; set explicit per-rank budgets when sharing resources. diff --git a/dev/benchmarks/README.md b/dev/benchmarks/README.md index 99d1b2d..f150264 100644 --- a/dev/benchmarks/README.md +++ b/dev/benchmarks/README.md @@ -1,16 +1,20 @@ -# Reproducible benchmark progression +# Benchmark workflows -Start with a synthetic oracle, then MNIST, then hierarchical Blair. CPU is the fast -continuous check; GPU profiles validate additional behavior. Birds and iNaturalist -2021 remain optional larger follow-ups. Notebook settings and timing claims are -references, not acceptance criteria. +Start with the synthetic CPU oracle, then GPU profiles, then MNIST and hierarchical +Blair. These exercise training, checkpoint reconstruction and inference. Notebook +timings are illustrations, not acceptance criteria. -See [visible results and coverage](../../docs/benchmarks.md) for initial observations, -known issues, reporting and storage limits. +| Task | Guide | +|---|---| +| Paired training, native INT8 and loading/capacity probes | [Training](training.md) | +| ONNX/TensorRT preparation, calibration, quality and resources | [Inference](inference.md) | +| Target execution, compact history and optional publishing | [Reporting](reporting.md) | +| Measured findings and limitations | [Findings](../../docs/benchmarks.md) | +| Unfinished qualification | [Quantization roadmap](../../docs/quantization-roadmap.md) | ## Shared pipeline commands -Use the existing environment; these commands never install or synchronize packages: +Use a prepared environment and a new output directory for each run: ```bash bash dev/check-benchmarks.sh cpu /tmp/benchmarks-cpu @@ -18,144 +22,98 @@ bash dev/check-benchmarks.sh gpu /tmp/benchmarks-gpu BENCHMARK_DATA_ROOT="$PWD/examples" \ BLAIR_CLASS_SPEC="$PWD/examples/blair/blair_model/class_spec.json" \ bash dev/check-benchmarks.sh real /tmp/benchmarks-real -bash dev/check.sh test tests/benchmarks/test_benchmark_synthetic.py tests/benchmarks/test_benchmark_datasets.py ``` -Each results directory must be new. Set `BENCHMARK_PYTHON` to use a different prepared -interpreter. CPU runs the synthetic float32 profile. GPU runs synthetic float32, -float16 AMP and bfloat16 AMP with CUDA caching. Real runs MNIST on CPU and CUDA, -then hierarchical Blair on CUDA. Profiles run sequentially, retain failures, and -return a nonzero exit code if any profile fails. No requested GPU silently falls -back to CPU. The real profile requires existing datasets and a saved Blair class -specification; it performs no downloads or online taxonomy queries. +`BENCHMARK_PYTHON` selects an alternative interpreter; otherwise the harness uses +`.venv/bin/python` without installing or synchronizing dependencies. + +| Profile | Workload | +|---|---| +| `cpu` | Synthetic float32 oracle | +| `gpu` | Synthetic float32, FP16 AMP and BF16 AMP with CUDA caching | +| `real` | MNIST on CPU/CUDA, then hierarchical Blair on CUDA | -Individual runs are configurable: +Profiles run sequentially, retain failures and return nonzero if any run fails. +A requested GPU never silently falls back to CPU. Real-data runs require existing +datasets and a reviewed Blair class specification; they do not download data or +query taxonomy online. + +For individual settings, use `python -m dev.benchmarks.training.run --help`: ```bash -.venv/bin/python -m dev.benchmarks.training.run --output /tmp/oracle \ - --seed 42 --threads 1 --device cpu .venv/bin/python -m dev.benchmarks.training.run --dataset mnist \ --data-root examples/mnist --output /tmp/mnist-amp --epochs 5 \ --device cuda:0 --dtype float16 --cache CUDA --allow-nondeterministic ``` -`--num-workers` defaults to zero and is always explicit in reports. CUDA caching -forces zero effective loader workers. Threads default to one. Cache modes are -`NONE`, `RAM` and `CUDA`. The CPU float32 profile and synthetic GPU profiles use -strict deterministic algorithms. Real GPU profiles explicitly allow nondeterministic -operations because CUDA adaptive-pooling backward lacks a deterministic implementation. -AMP, CUDA caching and algorithm determinism are separate report fields. +Default workers are zero and runtime threads one. CUDA caching forces zero loader +workers. Synthetic profiles use deterministic algorithms; real GPU profiles allow +nondeterminism because adaptive-pooling backward lacks a deterministic CUDA path. +AMP, caching and determinism are separate settings and report fields. ## Dataset and training contracts -The synthetic generator uses four balanced classes encoding two binary factors in -red and green channels of 8-by-8 RGB images. Intensities are 32 or 224 with bounded -noise of at most 16. Thresholding channel means at 128 is an exact 100% oracle; -uniform guessing achieves 25% in expectation. Blue contains nuisance noise. A parent -label encodes the red factor, ready for a future synthetic hierarchical profile. - -Independent streams keyed by seed, split, class and sample generate 128 training, -32 validation and 64 test images. The synthetic runner uses flat labels, a channel-mean -backbone and an unnormalized linear classifier. Fixed 12-epoch runs train with -MuonAuxAdamW at learning rate 0.1. The exact oracle quality gate fails if held-out -accuracy is below 100%. - -MNIST and Blair use a tiny randomly initialized convolutional backbone, five epochs -and learning rate 0.01 in the shared profile. MNIST uses 28-pixel inputs and a flat -head; Blair uses 64-pixel inputs and the normalized hierarchical head. Blair's -reviewed specification must exactly cover the training class names. It is included -in the manifest so mappings cannot change silently across runs. - -For real datasets, 20% of each class's unique training files become validation data, -using seeded shuffling. Byte-identical duplicates stay together. Training files -identical to supplied test files are excluded from the index and recorded; the -source files and official test split remain untouched. Conflicting cross-split -content fails validation. Hashes cover encoded file bytes, not perceptual duplicates. - -Every profile uses the actual mini_trainer training, checkpoint reconstruction and -inference loader. The final checkpoint is evaluated after a fixed epoch budget; -held-out labels are never used for checkpoint or hyperparameter selection. There -is no augmentation, EMA or regularization in this baseline. Real-data completion -has no quality acceptance threshold yet. Declare such thresholds and comparisons -before attempting improvements; do not tune against these test scores. +The [synthetic generator](data/synthetic.py) has independent seeded splits and an +exact 100% oracle. Its runner fails the quality gate below 100% held-out accuracy. +It is a correctness test; real-data profiles currently have no quality acceptance +threshold. Fix budgets and quality criteria before comparing changes. + +For real data, a seeded 20% of each class's unique training files forms validation. +Byte-identical duplicates stay together; training copies of test files are excluded +from the index and recorded without changing source files or the official test +split. Remaining cross-split byte duplicates fail validation; within-split label +conflicts are not audited. Hashing is not perceptual. Blair's reviewed class mapping +must exactly cover training classes and is retained in the manifest. + +The final checkpoint is evaluated after a fixed epoch budget; test labels never +select checkpoints or hyperparameters. Baseline profiles disable augmentation, +EMA and regularization. Exact model and optimizer recipes live in +[the runner](training/run.py) and [shared harness](../check-benchmarks.sh). ## Reproduction artifacts -Each run writes `report.json`, `predictions.npz` with sample paths and per-level -scores/targets, dataset/split manifests, and a normal training directory containing -resolved configuration and checkpoints. Synthetic images can be regenerated; -real images remain external. Scores retain the model's evaluation-forward semantics. -The report contains source, lockfile, dataset and checkpoint hashes, versions, -configuration, hardware, coverage flags, quality and synchronized training-call wall -time. Peak CUDA allocated memory covers training, not total device/process memory. - -Wall time includes initialization, training, validation, logging and checkpoint -writes. It excludes interpreter startup, inventory/generation and final inference. -It is not pure throughput or loader-wait time. Dedicated profiling and repeated, -matched experiments are still needed to establish speed improvements. - -Tests verify exact repeated CPU predictions within one environment, matching dataset -hashes, independent splits, oracle correctness, explicit GPU failure and taxonomy -contracts. They do not guarantee byte-identical checkpoints or cross-version/GPU -numerical identity. Reports explicitly mark unexercised features; do not infer full -module coverage from a passing profile. +Retain `report.json`, `predictions.npz`, dataset/split manifests and the training +directory with resolved configuration/checkpoints. Reports record source, +environment, input and model identities; scores retain evaluation-forward semantics. +Synthetic images are regenerable; real images remain external. + +Reported training-call wall time includes setup, training, validation, logging and +checkpoint writes, but excludes interpreter startup, data inventory and final +inference. CUDA allocated peak is not total process/device memory. Neither measure +is pure inference throughput. Cross-environment numerical identity and complete +feature coverage are not implied by a passing profile. ## Continuous execution and visible reporting -`.github/workflows/benchmarks.yml` runs the CPU oracle on pull requests, master pushes -and weekly. It uses a locked CPU environment and uploads results even on failure. -The Actions run page contains a readable summary and artifacts with 90-day retention. -The README links to that history. The source checkout is not modified to publish results. -These dataset artifacts still expire. A separate opt-in TensorRT publisher connects -compact records to draft storage and Pages; its [activation and live-verification -steps](reporting.md#opt-in-public-history-publisher) remain pending. - -GPU execution uses a configured self-hosted runner labeled `self-hosted`, `linux`, -`gpu`. It creates a disposable uv environment with an explicitly selected CUDA extra, -leaving the runner's existing environments alone. Enable it manually using the `gpu` -workflow input, or set repository variable `ENABLE_GPU_BENCHMARKS=true` for weekly -execution. Set `BENCHMARK_CUDA_BACKEND` for scheduled runs (default `cu130`). - -For real-data jobs, enable input `real_data` together with `gpu`, or set -`BENCHMARK_REAL_DATA=true`. Set repository variables `BENCHMARK_DATA_ROOT` and -`BLAIR_CLASS_SPEC` to stable dataset and specification paths on that runner, outside -the checkout. The workflow does not assume these resources already exist and cannot -validate GPU behavior on a CPU-only hosted runner. Local command validation does -not establish that the hosted GPU workflow has run successfully; retain the actual -workflow run and target-machine evidence when qualifying it. - -References: [Actions job summaries](https://docs.github.com/en/actions/reference/workflows-and-actions/workflow-commands#adding-a-job-summary) -and [artifact retention](https://github.com/actions/upload-artifact#retention-period). - -## Focused guides +[Dataset CI](../../.github/workflows/benchmarks.yml) runs the CPU oracle on PRs, +master pushes and weekly, with a locked CPU environment. Actions summaries and +artifacts include failures; artifacts expire after 90 days. -| Task | Guide | -| --- | --- | -| Native QT, representative training, capacity, loading, convergence and training predictions | [Training](training.md) | -| Input preparation, calibration, ONNX CPU/TensorRT builds, placement, quality and isolated resources | [Inference](inference.md) | -| Target workflow, compact CPU/GPU history, draft storage and Pages activation | [Reporting](reporting.md) | -| Current findings and their limits | [Benchmark findings](../../docs/benchmarks.md) | -| Ordered branch work, bottlenecks and hardware dependencies | [Quantization roadmap](../../docs/quantization-roadmap.md) | +GPU jobs require a self-hosted Linux runner labelled `gpu`. They install a +disposable environment with an explicitly selected CUDA extra. + +| Configuration | Purpose | +|---|---| +| Manual `gpu` / `ENABLE_GPU_BENCHMARKS=true` | Enable GPU jobs manually / weekly | +| Manual `cuda_backend` / `BENCHMARK_CUDA_BACKEND` | CUDA extra; default `cu130` | +| Manual `real_data` / `BENCHMARK_REAL_DATA=true` | Include real-data profiles; requires GPU job | +| `BENCHMARK_DATA_ROOT`, `BLAIR_CLASS_SPEC` | Existing dataset/specification paths outside checkout | +| Manual `qt` / `BENCHMARK_QT=true` | Include paired native INT8 profiles; requires GPU job | -Use the shared commands in these guides; they do not implicitly synchronize the -working environment. Historical experiments and rejected approaches are retained -in the [experiment archive](https://github.com/asgersvenning/mini_trainer/blob/f5c69e7cab2bfde8a5467026b293858b93e628f9/docs/archive/benchmark-history.md). +A configured workflow is not evidence of a successful target run. The separate +[history publisher](reporting.md#opt-in-public-history-publisher) remains opt-in +and needs live qualification; it does not make ordinary dataset artifacts permanent. ## Source layout and command migration -| Package | Ownership | -| --- | --- | -| `training/` | Dataset training, native QT/PTQ probes, large heads, prediction adapter | -| `data/` | Dataset generation/indexing, loading, caching, reading and transfer probes | -| `inference/` | Input preparation, calibration, ONNX/TensorRT, paired quality/resources | -| `reporting/` | Summaries, immutable history, release storage | - -Development CLI modules now include their package: for example, -`dev.benchmarks.run` becomes `dev.benchmarks.training.run` and -`dev.benchmarks.cpu_deployment` becomes `dev.benchmarks.inference.cpu_deployment`. -The shared `dev/check-*.sh` entry points are unchanged. `models.py` stays at its -original import path because saved benchmark checkpoints name those classes. -`prepare_inputs.py` retains the old preprocessing-factory import for saved recipes; -`_int8_weight.py` retains the earlier probe compatibility import. -Source hashes change with this reorganization; historical reports keep their -original hashes and should not be relabeled as runs of the new revision. +| Package | Responsibility | +|---|---| +| `training/` | Dataset training, QT/PTQ probes, large heads, prediction adapter | +| `data/` | Generation/indexing, loading, caching, reading and transfers | +| `inference/` | Input preparation, ONNX/TensorRT, paired quality/resources | +| `reporting/` | Summaries, immutable history and storage | + +Development CLI modules use these package paths; shared `dev/check-*.sh` commands +are unchanged. Preserve `models.py` for saved checkpoint identities, +`prepare_inputs.py` for saved preprocessing factories and `_int8_weight.py` for +older probe imports. Historical source hashes must not be relabelled as new runs. diff --git a/dev/benchmarks/inference/_stage.py b/dev/benchmarks/inference/_stage.py new file mode 100644 index 0000000..b47f974 --- /dev/null +++ b/dev/benchmarks/inference/_stage.py @@ -0,0 +1,33 @@ +"""Logged subprocess stages shared by the inference comparison orchestrators.""" + +import json +import os +import subprocess +from pathlib import Path + +from .onnx_inference import file_hash + + +def run_stage(output, report, name, command, expected, *, env=None): + """Persist before launching; the caller owns final reporting and failure cleanup.""" + stage = {"name": name, "command": command, "status": "running", "log": f"{name}.log"} + report["stages"].append(stage) + (output / "report.json").write_text(json.dumps(report, indent=2) + "\n") + with (output / stage["log"]).open("w") as log: + process = subprocess.run( + command, + cwd=Path(__file__).resolve().parents[3], + env={**os.environ, "PYTHONHASHSEED": "0", **(env or {})}, + stdout=log, + stderr=subprocess.STDOUT, + check=False, + ) + stage["returncode"] = process.returncode + if process.returncode: + raise RuntimeError(f"{name} failed with exit code {process.returncode}; see {output / stage['log']}") + path = output / name / "report.json" + result = json.loads(path.read_text()) + if result["status"] != expected: + raise RuntimeError(f"Unexpected {name} status: {result['status']}") + stage.update(status=expected, report_sha256=file_hash(path)) + return result diff --git a/dev/benchmarks/inference/cpu_deployment.py b/dev/benchmarks/inference/cpu_deployment.py index e8bc8ed..dfa02ef 100644 --- a/dev/benchmarks/inference/cpu_deployment.py +++ b/dev/benchmarks/inference/cpu_deployment.py @@ -1,12 +1,11 @@ """Compose CPU deployment quality, placement and isolated resource measurements.""" import json -import os -import subprocess import sys from argparse import ArgumentParser from pathlib import Path +from ._stage import run_stage from .inference_pair import run_pair from .onnx_inference import file_hash @@ -40,27 +39,7 @@ def save(): def child(name, module, arguments, expected): command = [sys.executable, "-m", f"dev.benchmarks.inference.{module}", *map(str, arguments), "--output", str(output / name)] - stage = {"name": name, "command": command, "status": "running", "log": f"{name}.log"} - report["stages"].append(stage) - save() - with (output / stage["log"]).open("w") as log: - process = subprocess.run( - command, - cwd=Path(__file__).resolve().parents[3], - env={**os.environ, "PYTHONHASHSEED": "0"}, - stdout=log, - stderr=subprocess.STDOUT, - check=False, - ) - stage["returncode"] = process.returncode - if process.returncode: - raise RuntimeError(f"{name} failed; see {output / stage['log']}") - result_path = output / name / "report.json" - result = json.loads(result_path.read_text()) - if result["status"] != expected: - raise RuntimeError(f"Unexpected {name} status: {result['status']}") - stage.update(status=expected, report_sha256=file_hash(result_path)) - return result + return run_stage(output, report, name, command, expected) try: report["phase"] = "quality" diff --git a/dev/benchmarks/inference/inference_pair.py b/dev/benchmarks/inference/inference_pair.py index 42dd8e8..810244f 100644 --- a/dev/benchmarks/inference/inference_pair.py +++ b/dev/benchmarks/inference/inference_pair.py @@ -1,12 +1,11 @@ """Run paired held-out inference and mini_metrics evaluation in fresh processes.""" import json -import os -import subprocess import sys from argparse import ArgumentParser from pathlib import Path +from ._stage import run_stage from .onnx_inference import file_hash @@ -81,27 +80,7 @@ def save(): try: for name, command, expected in commands: - stage = {"name": name, "command": command, "status": "running", "log": f"{name}.log"} - report["stages"].append(stage) - save() - with (output / stage["log"]).open("w") as log: - result = subprocess.run( - command, - cwd=Path(__file__).resolve().parents[3], - env={**os.environ, "PYTHONHASHSEED": "0"}, - stdout=log, - stderr=subprocess.STDOUT, - check=False, - ) - stage["returncode"] = result.returncode - if result.returncode: - stage["status"] = "failed" - raise RuntimeError(f"{name} failed with exit code {result.returncode}; see {output / stage['log']}") - child_path = output / name / "report.json" - child = json.loads(child_path.read_text()) - if child["status"] != expected: - raise RuntimeError(f"Unexpected {name} report status: {child['status']}") - stage.update(status=expected, report_sha256=file_hash(child_path)) + child = run_stage(output, report, name, command, expected) save() report.update(status="evaluated", levels=child["levels"], models=child["models"], undefined_metrics=child["undefined_metrics"]) lines = [ diff --git a/dev/benchmarks/inference/tensorrt_deployment.py b/dev/benchmarks/inference/tensorrt_deployment.py index 6c9b809..3d1bd1e 100644 --- a/dev/benchmarks/inference/tensorrt_deployment.py +++ b/dev/benchmarks/inference/tensorrt_deployment.py @@ -1,13 +1,12 @@ """Compose TensorRT held-out quality, inspection, paired latency and isolated memory.""" import json -import os -import subprocess import sys from argparse import ArgumentParser from collections import Counter from pathlib import Path +from ._stage import run_stage from .inference_pair import run_pair from .onnx_inference import file_hash @@ -83,26 +82,7 @@ def save(): def child(name, module, arguments): command = [sys.executable, "-m", f"dev.benchmarks.inference.{module}", *map(str, arguments), "--output", str(output / name)] - stage = {"name": name, "command": command, "status": "running", "log": f"{name}.log"} - report["stages"].append(stage) - save() - with (output / stage["log"]).open("w") as log: - process = subprocess.run( - command, - cwd=Path(__file__).resolve().parents[3], - env={**os.environ, "PYTHONHASHSEED": "0", "OMP_NUM_THREADS": str(threads)}, - stdout=log, - stderr=subprocess.STDOUT, - check=False, - ) - stage["returncode"] = process.returncode - if process.returncode: - raise RuntimeError(f"{name} failed; see {output / stage['log']}") - result = json.loads((output / name / "report.json").read_text()) - if result["status"] != "passed": - raise RuntimeError(f"Unexpected {name} status: {result['status']}") - stage.update(status="passed", report_sha256=file_hash(output / name / "report.json")) - return result + return run_stage(output, report, name, command, "passed", env={"OMP_NUM_THREADS": str(threads)}) def identity(role, engine_info): if engine_info["sha256"] != report["builds"][role]["engine"]["sha256"]: diff --git a/dev/benchmarks/reporting/confusion.md b/dev/benchmarks/reporting/confusion.md index 645c221..7d32e8f 100644 --- a/dev/benchmarks/reporting/confusion.md +++ b/dev/benchmarks/reporting/confusion.md @@ -1,85 +1,64 @@ # Whole-matrix confusion diagnostics -Confusion figures retain every model output index on both axes, including -prediction-only and unobserved classes, in the same order across epochs. Rows -are true classes and columns are predicted classes. Class names can be resolved -from the saved model/config classifier metadata. No taxonomy regrouping or -selected-pair view replaces the full matrix. - -The specialized reporting logic lives in `mini_trainer/logging/confusion.py`: -rank reduction, whole-matrix overviews, palette encoding and numerical artifacts. -The existing `visualization/plot.py` retains generic heatmap/colorbar rendering; -its byte-color mapping now uses bounded chunks with regression checks against -the previous RGB pixels. No new runtime dependencies or background service are -introduced. +Confusion figures keep every model output index on both axes, including +prediction-only and unobserved classes. Rows are truth and columns predictions; +resolve names from saved classifier metadata. Class order stays fixed across epochs. +[logging/confusion.py](../../../mini_trainer/logging/confusion.py) owns distributed +reduction, previews and numerical artifacts; generic heatmaps remain in +`visualization/plot.py`. ## Dashboard images and local detail -TensorBoard/W&B receive RGB previews with a matrix side of at most 1,536 pixels, -plus a 200-pixel legend and a 24-pixel caption. Each preview covers the entire -matrix. For N classes its block width is `ceil(N / 1536)`; a preview cell is the -arithmetic mean of the row-normalized probabilities in that block. Partial edge -blocks use their actual cell counts. This is an overview of probabilities, not -an aggregated or renormalized confusion matrix. The caption, `/overview_mean` -tag and metadata explicitly identify the reduction. Small images enlarge with -nearest-neighbor sampling; there are no cell borders or spatial smoothing. -Isolated errors may become less visible in the mean overview; native-resolution -images and numerical matrices retain them. - -Soft images use 128 positive logarithmic color levels over probabilities -`[1e-6, 1]`, plus dedicated black zero and magenta invalid/negative colors. Values -below the positive floor use the lowest positive color, never the zero color. -Hard images retain the 256-color magma mapping on the same fixed scale. Scales -remain comparable across epochs. Posterization changes displayed colors only; -raw values are retained. The full soft PNG is indexed (palette mode), without -dithering. The matching discrete colorbar is saved separately, so its text does -not expand the matrix palette. Dashboard previews include the legend. - -Each epoch saves the following under -`model/logs/figures/epoch-NNNN/Confusion_matrix_lvlL/` and -`Soft_confusion_matrix_lvlL/`: - -- `matrix.png`: one pixel per original class pair, without the old 5,000-class - maximum-pooling limit. The separate colorbar does not change matrix dimensions. -- `counts.npz` for hard matrices: exact integer COO arrays `rows`, `columns`, - `counts`, plus `shape`. Absent entries are zero. -- `probability_sums.npy` for soft matrices: the original accumulated float32 - probability sums, before normalization, clipping or posterization. -- `row_support.npy`: hard true-label counts or the soft row probability mass - used for normalization. Empty rows remain zero. -- `metadata.json`: original class indices, orientation, normalization, palette, - invalid-cell count and preview block shape; and `colorbar.png`. - -The soft NPY is deliberately uncompressed to avoid spending logging time -compressing high-entropy floats. It is about 100 MB for 5,000 classes and 400 MB -for 10,000 classes per saved epoch/level. Local storage therefore increases even -though dashboard traffic decreases. NumPy can inspect it with `mmap_mode='r'`. -Storage throughput on the production filesystem needs qualification. Accumulation -and exact matrix storage still scale quadratically with class count. Full-size -PNGs remain large decoded images; the bounded preview is what protects dashboard -responsiveness. This increment does not add a tile server or custom viewer. +TensorBoard/W&B receive an RGB whole-matrix preview with at most 1,536 cells per +side, plus a legend and caption. For N classes, block width is `ceil(N / 1536)`. +Each preview cell is the arithmetic mean of row-normalized probabilities in its +block; edge blocks use their actual counts. This is not a regrouped or renormalized +confusion matrix. The `/overview_mean` tag and metadata identify the reduction. +Small previews enlarge with nearest-neighbor sampling. Means may obscure isolated +errors; full-resolution images and numerical data retain them. + +Both palettes use a fixed logarithmic `[1e-6, 1]` probability scale across epochs: +soft images have 128 positive levels; hard images use 256-color magma. Black means +exact zero, magenta means invalid/negative, and positive values below the floor +use the lowest positive color. Soft PNGs use an indexed palette without dithering. +Rendering does not change raw values; a separate colorbar preserves the matrix palette. + +Each epoch writes beneath `model/logs/figures/epoch-NNNN/Confusion_matrix_lvlL/` +and `Soft_confusion_matrix_lvlL/`: + +| Artifact | Meaning | +| --- | --- | +| `matrix.png` | One pixel per original class pair, with no class-count pooling limit | +| `counts.npz` (hard) | Exact integer COO `rows`, `columns`, `counts` and `shape`; omitted entries are zero | +| `probability_sums.npy` (soft) | Accumulated float32 sums before normalization, clipping or palette mapping | +| `row_support.npy` | Hard truth counts or soft row probability mass used for normalization; empty rows stay zero | +| `metadata.json` | Class indices, orientation, normalization, palette, invalid-cell count and preview block shape | +| `colorbar.png` | Matching legend, also included in dashboard previews | + +Soft sums are uncompressed to avoid compression cost during logging: about 100 MB +at 5,000 classes or 400 MB at 10,000, per saved epoch/level. Inspect with NumPy +`mmap_mode='r'`. Accumulation/storage remain quadratic, and full PNGs are large when +decoded. Bounded previews reduce dashboard traffic; production storage throughput +still needs qualification. ## Distributed reporting -Every rank participates in confusion collection. Small shape descriptors allow -even a rank with no validation samples to participate; count and probability -matrices are summed onto rank zero in bounded chunks. NCCL uses temporary CUDA -chunks rather than placing the entire matrix on the GPU. Only rank zero renders, -writes artifacts and forwards preview images. Soft accumulation buffers are not -mutated, so repeated reporting does not double counts. Counts include validation -sampler padding, matching the samples actually reported; sample-ID deduplication -is outside this change. +All ranks participate, including ranks without validation samples. Shape descriptors +coordinate bounded reductions onto rank zero; NCCL uses temporary CUDA chunks. +Only rank zero renders, writes and forwards images. Soft buffers remain unchanged +across repeated reports. Counts include validation sampler padding; no sample-ID +deduplication is performed. -CPU two-process tests cover an empty rank, prediction-only classes and repeated -collection. CUDA/NCCL and live TensorBoard/W&B uploads remain target-job checks. +[CPU two-process tests](../../../tests/logging/test_confusion.py) cover an empty +rank, prediction-only classes and repeated collection. CUDA/NCCL and live dashboard +uploads require target-job checks. ## Reproduce rendering measurements -The benchmark uses seeded dense soft probabilities with 20 large diagonal blocks -and a diagonal signal. Timing includes normalization, image rendering and file -writes. The new path also writes the exact matrix and full-resolution PNG, which -the old path did not retain. RSS includes imports and the input matrix; it is not -training's peak memory. Run each case in a fresh process: +The seeded workload has dense soft probabilities, 20 diagonal blocks and a diagonal +signal. Timing includes normalization, rendering and file writes; the new path also +saves exact data and full-resolution PNGs absent from the old path. RSS includes +imports and inputs. Use a fresh process and output directory for each case: ```bash git show d521cef:mini_trainer/visualization/plot.py > /tmp/heatmap-before.py @@ -92,31 +71,29 @@ OMP_NUM_THREADS=1 MKL_NUM_THREADS=1 MPLBACKEND=Agg \ # Repeat with --classes 10000 and new output directories. ``` -Representative local CPU results (decimal MB for file sizes): +Recorded local CPU results (decimal MB for file sizes): | Classes | Old/new seconds | Old/new peak RSS MiB | Old/new dashboard PNG MB | | --- | ---: | ---: | ---: | | 5,000 | 9.58 / 2.77 | 2,994 / 907 | 47.18 / 1.34 | | 10,000 | 12.12 / 6.62 | 3,236 / 1,258 | 33.00 / 1.11 | -The new full-resolution soft PNGs are 15.78 MB and 62.67 MB respectively. The old -10,000-class dashboard was already pooled to 5,000 cells per side; the new local -PNG preserves all 10,000. These are synthetic, host-specific measurements, -excluding distributed reduction and remote dashboard upload. +New full-resolution soft PNGs occupy 15.78 and 62.67 MB respectively. The old +10,000-class dashboard was pooled to 5,000 cells per side; new local PNGs preserve +all classes. These synthetic host-specific measurements exclude distributed +reduction and remote upload, and do not establish training peak memory. -The existing browser benchmark also accepts PNGs. With the disposable browser -environment described in [dendrogram.md](dendrogram.md), run: +For PNG browser measurements, use the disposable environment in +[dendrogram.md](dendrogram.md): ```bash /tmp/svg-browser-env/bin/python dev/benchmarks/reporting/svg_browser.py \ /tmp/confusion-before/dashboard.png /tmp/confusion-after/dashboard.png \ - --output /tmp/confusion-browser + --repeats 3 --output /tmp/confusion-browser ``` -For the final 5,000-class dashboard PNGs, headless Chromium's median decode plus -forced raster time (three interleaved runs per image/size, fresh contexts) was -1,132 ms before versus 52.6 ms after at a 1,200-pixel display, and 1,242 ms versus -170 ms at 4,800 pixels. This compares the old large dashboard image with the new -captioned whole-matrix preview; it does not imply that the full-resolution local -PNG is cheap to display. Timings exclude Python/browser startup, network transfer -and PNG encoding. Live TensorBoard/W&B end-to-end performance was not measured. +At 5,000 classes, headless Chromium's median decode plus forced raster time was +1,132 / 52.6 ms (old/new) at 1,200 pixels and 1,242 / 170 ms at 4,800 pixels. +These were three interleaved trials per image/size in fresh contexts, comparing the +old dashboard with the new captioned preview. Startup, network and PNG encoding +are excluded. This does not measure full-resolution PNG or live dashboard performance. diff --git a/dev/benchmarks/reporting/dendrogram.md b/dev/benchmarks/reporting/dendrogram.md index bb67bd1..3558907 100644 --- a/dev/benchmarks/reporting/dendrogram.md +++ b/dev/benchmarks/reporting/dendrogram.md @@ -1,57 +1,45 @@ # Dendrogram scaling and artifact validation -The renderer uses an iterative SciPy-linkage layout, retaining the original -right-child-first leaf order, distance-based radial positions and flat-cluster -assignments. It does not construct recursive BioPython/pyCirclize tree objects. -Same-color branches share paths; adjacent same-color taxonomy bands are merged. -Circular arcs use bounded chords or cubic Bezier segments instead of dense sampled -polylines. -Every leaf label remains present, including repeated display names. Single-class -levels render without attempting linkage. Taxonomy colors now follow stable -first-occurrence order rather than unordered set iteration. - -Training saves dendrogram SVGs with text elements instead of glyph outlines, -and retains all figure types under `model/logs/figures/epoch-NNNN/` even with the -default metrics-only logger. Matrix images are PNGs; dendrograms remain vector -SVGs. Rank zero owns local artifact writes. Existing external logging backends -still receive the figures. A failed export closes all created dendrogram figures. -Font appearance can depend on the SVG viewer's installed fonts. - -Species-name resolution uses at most eight concurrent lookups, reuses resolved -class lists across epochs (a bounded process-local cache), and falls back to the -original labels when the service or its disk cache is unavailable. GBIF HTTP -requests now have a ten-second socket timeout. This is not a hard total deadline -for taxonomy preparation. A cold large taxonomy still requires real API requests; -the subsequent epochs reuse the result. Logs distinguish label resolution, -per-level rendering and final export time. Pairwise model distances and Ward -linkage remain quadratic in class count; this change does not establish full -production-taxonomy memory capacity or multi-GPU figure latency. +Training retains dendrogram SVGs under `model/logs/figures/epoch-NNNN/`, including +with the metrics-only logger. Rank zero writes local artifacts and forwards figures +to configured logging backends; failed exports close created figures. Labels remain +selectable text, so their appearance depends on the viewer's installed fonts. + +The iterative SciPy-linkage renderer preserves right-child-first leaf order, +distance-based radii, cluster assignments and every label, including duplicate +display names. Singleton levels bypass linkage. Taxonomy colors follow stable +first-occurrence order; branches and adjacent taxonomy bands share paths by color. + +Name resolution uses at most eight concurrent lookups and a bounded process-local +cache across epochs, falling back to original labels on service/cache errors. +Cold taxonomies still require network requests. The current GBIF callers use the +process-wide socket default; there is no lookup or batch deadline. Logs separate +label resolution, rendering and export. Model distances and Ward linkage remain +quadratic in class count; production-taxonomy capacity needs separate qualification. -## Reproduce locally +## Bounded simplification and compact SVG export -Use the existing environment with the recommended plotting dependencies. Each -invocation is a fresh process and includes linkage, layout, render and SVG save. -Input distances are seeded synthetic values; model distance computation and -network name lookup are excluded. Both baseline and current renderer use SVG -text, so the comparison isolates layout/path changes. +Short arcs use chords with at most 0.02-point sagitta in figure space (0.027 CSS +pixels at native size, 0.11 at 4x zoom). Larger arcs use cubic segments of at most +45 degrees, with radial error below 0.006 points at the maximum figure size. +Endpoints remain exact; backend path simplification is disabled on branches. +These are bounded approximations, not guarantees at arbitrary magnification. -```bash -git show 863a85c:mini_trainer/visualization/dendrogram.py > /tmp/dendrogram-before.py -OMP_NUM_THREADS=1 MKL_NUM_THREADS=1 MPLBACKEND=Agg \ - .venv/bin/python -m dev.benchmarks.reporting.dendrogram --classes 3422 \ - --module-file /tmp/dendrogram-before.py --output /tmp/dendrogram-baseline -OMP_NUM_THREADS=1 MKL_NUM_THREADS=1 MPLBACKEND=Agg \ - .venv/bin/python -m dev.benchmarks.reporting.dendrogram --classes 3422 \ - --output /tmp/dendrogram-current -OMP_NUM_THREADS=1 MKL_NUM_THREADS=1 MPLBACKEND=Agg \ - .venv/bin/python -m dev.benchmarks.reporting.dendrogram --classes 1100 --deep \ - --output /tmp/dendrogram-deep -``` +`save_dendrogram_svg` rounds path coordinates to 0.001 points (maximum Euclidean +rounding error 0.00071 points), shares text styles and removes empty label wrappers. +Text, fonts, colors, positions and rotations are preserved. Geometry simplification +also applies to ordinary Matplotlib figures; markup compaction requires this exporter. +See [_dendrogram_layout.py](../../../mini_trainer/visualization/_dendrogram_layout.py) +and [_svg.py](../../../mini_trainer/visualization/_svg.py) for the implementation. + +## Recorded measurements -Representative local CPU measurements, Python 3.13, Matplotlib 3.10.9, -BioPython 1.87 and pyCirclize 1.10.1, from the same seeded workload: +These are historical local CPU measurements on seeded 3,422-class inputs with +Python 3.13, Matplotlib 3.10.9, BioPython 1.87 and pyCirclize 1.10.1. Each comparison +includes linkage, layout and SVG export, excluding model distances and name lookup. +They are separate paired measurements, not production training guarantees. -| 3,422 classes | Previous renderer | New renderer | +| First comparison | Recursive renderer | Iterative renderer | | --- | ---: | ---: | | Layout/render, including linkage | 18.38 s | 2.78 s | | Including SVG export | 24.53 s | 6.82 s | @@ -59,46 +47,10 @@ BioPython 1.87 and pyCirclize 1.10.1, from the same seeded workload: | SVG path elements | 20,529 | 27 | | Leaf labels | 3,422 | 3,422 | -In that first increment, path coordinates occupy 1,492,596 bytes (53%) and the 3,422 -text groups occupy 1,305,053 bytes (46%). Batching removes path-element overhead, -but retains the branch geometry. Matplotlib repeats the font-family list, style -and position/rotation attributes for each label. Shared text styles and lower -coordinate precision were not yet applied in that measurement; see the next -section for the subsequent optimization. -Gzip compresses this example to 769,175 bytes without changing its contents. +The 1,100-leaf comb tree previously raised `RecursionError`; the iterative renderer +exported all leaves in about 1.9 seconds with seven paths and no recursion-limit change. -The 1,100-leaf comb tree previously raised `RecursionError` during branch -coloring. The new renderer exported all leaves with seven SVG paths in about -1.9 seconds without changing Python's recursion limit. These are host-specific -single-process measurements, not production training performance promises. - -Regression checks cover deep trees, singleton levels, duplicate names, linkage -geometry and cluster identity, label-cache reuse and outages, SVG text retention, -figure cleanup after failure, and local saving without TensorBoard/W&B. - -## Bounded simplification and compact SVG export - -The next increment replaces short circular arcs with chords only when the -sagitta is at most 0.02 points in figure space (using the full figure width as a -conservative scale bound). This is at most 0.027 CSS pixels at native size, or -0.11 pixels at 4x zoom. Larger arcs retain cubic curves, now at most 45 degrees -per segment; their radial approximation error is below 0.006 points at the -maximum figure size. Branch endpoints, leaf order, cluster assignments and all -labels remain intact. Narrow taxonomy bands consequently become quadrilaterals. -Backend path simplification is disabled on the branch paths to keep it from -adding a second uncontrolled approximation. Magnification far beyond the design -scale can reveal these approximations; this is not exact analytic geometry. - -`save_dendrogram_svg` rounds path coordinates to 0.001 points (at most 0.00071 -points Euclidean rounding error), deduplicates identical text styles, and removes -empty per-label group wrappers. Label strings, fonts, colors, positions and -rotations remain unchanged. Ordinary returned Matplotlib figures benefit from -simpler geometry; training's SVG export additionally applies the markup changes. - -Like-for-like local CPU results for the same 3,422-class input, relative to the -iterative renderer introduced in `909cb09`: - -| Measurement | Before simplification | After simplification | +| Compaction comparison, relative to `909cb09` | Before | After | | --- | ---: | ---: | | Geometry vertices, including curve controls and bands | 63,719 | 28,980 | | Figure construction, including linkage | 2.70 s | 1.03 s | @@ -108,17 +60,26 @@ iterative renderer introduced in `909cb09`: | Chromium decode + raster, 1,200 px square | 329 ms | 252 ms | | Chromium decode + raster, 4,800 px square | 421 ms | 357 ms | -Browser values are medians of five interleaved before/after measurements, each -in a fresh browser context, using headless Chromium 151. They include SVG image -decode, canvas drawing and forced pixel readback, excluding process startup, -network transfer and PNG encoding. They do not measure interactive panning or -production dashboard integration. Rasterization alone improved more modestly -(189 to 177 ms at 1,200 px; 311 to 285 ms at 4,800 px); labels still cost work. -These timings are host-specific, not GPU training guarantees. +Browser values are medians of five interleaved trials per image/size in fresh +headless Chromium 151 contexts: decode, canvas draw and forced pixel readback. +Rasterization alone changed from 189 to 177 ms at 1,200 px and 311 to 285 ms at +4,800 px; labels still cost work. Startup, network and PNG encoding are excluded; +interactive panning and live dashboard integration were not measured. -Reproduce the figure benchmark with the prior layout and the current exporter: +## Reproduce locally + +Use the existing environment with plotting dependencies and a new output directory +per invocation. Both baseline paths export SVG text. Run each case in a fresh process: ```bash +git show 863a85c:mini_trainer/visualization/dendrogram.py > /tmp/dendrogram-before.py +OMP_NUM_THREADS=1 MKL_NUM_THREADS=1 MPLBACKEND=Agg \ + .venv/bin/python -m dev.benchmarks.reporting.dendrogram --classes 3422 \ + --module-file /tmp/dendrogram-before.py --output /tmp/dendrogram-baseline +OMP_NUM_THREADS=1 MKL_NUM_THREADS=1 MPLBACKEND=Agg \ + .venv/bin/python -m dev.benchmarks.reporting.dendrogram --classes 1100 --deep \ + --output /tmp/dendrogram-deep + git show 909cb09:mini_trainer/visualization/_dendrogram_layout.py > /tmp/layout-before.py OMP_NUM_THREADS=1 MKL_NUM_THREADS=1 MPLBACKEND=Agg \ .venv/bin/python -m dev.benchmarks.reporting.dendrogram --classes 3422 \ @@ -128,8 +89,9 @@ OMP_NUM_THREADS=1 MKL_NUM_THREADS=1 MPLBACKEND=Agg \ --output /tmp/svg-after ``` -Browser verification uses a disposable environment, without adding dependencies -to training. The benchmark saves raster images and all timing samples: +The current command measures the current checkout; reproducing an intermediate +historical result also requires its renderer revision. Browser verification uses +a disposable environment and retains raster images and all samples: ```bash uv venv /tmp/svg-browser-env @@ -140,7 +102,7 @@ uv pip install --python /tmp/svg-browser-env/bin/python playwright --output /tmp/svg-browser-results ``` -Regression tests check chord deviation, cubic radial error, unchanged endpoints, -text/style/transform retention, and export idempotence, alongside the existing -large/deep-tree and logging checks. Pixel comparisons complement those geometric -checks; they cannot establish visibility at arbitrary zoom levels. +[Regression tests](../../../tests/utils/test_dendrogram.py) cover geometry/error +bounds, deep and singleton trees, duplicate labels, cache behavior, SVG text/styles, +export idempotence and figure cleanup. Pixel comparisons complement geometric checks; +they cannot establish visibility at arbitrary zoom levels. diff --git a/dev/benchmarks/reporting/summarize.py b/dev/benchmarks/reporting/summarize.py index c1f31bb..2de736b 100644 --- a/dev/benchmarks/reporting/summarize.py +++ b/dev/benchmarks/reporting/summarize.py @@ -82,18 +82,17 @@ def summarize(directory: Path) -> str: lines.extend( [ "", - "Synthetic profiles require 100% oracle accuracy. Real-data runs marked `completed`", - "have no quality acceptance threshold yet; completion does not establish an improvement.", + "Synthetic runs require 100% oracle accuracy; real-data completion has no quality gate.", + "Compare matching hardware, data/configuration and measurement scopes. CPU results do not validate GPU behavior.", + "See JSON reports for provenance, errors and coverage.", "", - "Wall times include setup, training, validation, logging and checkpoints. Compare timings", - "only with matching hardware, dataset/configuration and timing scope. See JSON reports", - "for provenance, errors and explicit coverage flags. CPU results do not validate GPU behavior.", - "QT coverage counts quantized Linear modules; other operations may remain floating point.", - "Frozen backbone parameters do not imply evaluation mode: fine-tuning retains normal BatchNorm/dropout behavior.", - "Parameter bytes describe stored parameters. CUDA peaks cover training, excluding final held-out inference.", - "Older CUDA readings without a scope marker are unverified because logger resets could hide earlier peaks.", - "Later-epoch medians use timed training phases from epoch 3 onward, including loading, preprocessing and batch logging.", - "They exclude validation/figures/checkpoints, but may still include later compilation; they do not replace total wall time.", + "- Wall time: setup, training, validation, logging and checkpoints.", + "- Epoch 3+ median: loading, preprocessing and batch logging; excludes validation, figures and checkpoints.", + " Later compilation may still contribute; this does not replace wall time.", + "- CUDA peak: training allocations, excluding final held-out inference. Legacy readings without scope markers", + " are unverified because logger resets could hide earlier peaks.", + "- Parameter bytes: stored parameters. QT coverage: INT8 Linear modules; other operations may remain floating point.", + "- Frozen backbone: parameters frozen, normal training-mode BatchNorm/dropout retained.", ] ) return "\n".join(lines) + "\n" diff --git a/dev/benchmarks/training.md b/dev/benchmarks/training.md index 8dbed36..23c8329 100644 --- a/dev/benchmarks/training.md +++ b/dev/benchmarks/training.md @@ -68,10 +68,10 @@ arguments. These are focused diagnostics, not substitutes for paired training. | `training.large_head_training` | EfficientNetV2 large-head setup, steps and memory; `--frozen` evaluates the backbone | | `training.quantized_training` | Integer linear forward/backward and updates against floating compute | | `training.quantization` | Separate CPU PTQ/QAT behavior | -| `data.loader` | Cached loader throughput | -| `data.cache` | Cache construction and host/shared-memory costs | -| `data.reader` | Streaming image decode/resize | -| `data.transfer` | Host/device transfer and overlap | +| `data.loader` | Scalar vs batched fetching; optional pinned gathering | +| `data.cache` | CPU cache construction from repeated PNGs | +| `data.reader` | Real-image decode/resize with exact batch comparison | +| `data.transfer` | Pinned H2D/overlap with fixed ResNet18; optional backward | ```bash OMP_NUM_THREADS=1 .venv/bin/python -m dev.benchmarks.data.loader diff --git a/dev/benchmarks/training/quantized_training.py b/dev/benchmarks/training/quantized_training.py index 304b6f5..d30903c 100644 --- a/dev/benchmarks/training/quantized_training.py +++ b/dev/benchmarks/training/quantized_training.py @@ -14,8 +14,6 @@ import torch -from mini_trainer.modeling.quantized_training import IntegerLinear as IntegerLinear - def dependencies(): from mini_trainer.modeling._quantized_training import TrainingWeight, quantize_int8_rowwise, scaled_int8_mm diff --git a/dev/benchmarks/training/run.py b/dev/benchmarks/training/run.py index 07d7194..93eb57f 100644 --- a/dev/benchmarks/training/run.py +++ b/dev/benchmarks/training/run.py @@ -341,9 +341,9 @@ def run( "versions": { name: version(name) for name in ( - ("torch", "torchvision", "numpy", "mini_trainer", "torchao") + ("torch", "torchvision", "numpy", "mt-trainer", "torchao") if quantization_recipe - else ("torch", "torchvision", "numpy", "mini_trainer") + else ("torch", "torchvision", "numpy", "mt-trainer") ) }, "dataset_manifest_sha256": hashlib.sha256(manifest_path.read_bytes()).hexdigest(), @@ -408,36 +408,7 @@ def main(): if args.output.exists(): parser.error("Output directory must be new.") try: - result = run( - args.output, - args.seed, - args.epochs, - device=args.device, - dtype=args.dtype, - cache=args.cache, - num_workers=args.num_workers, - dataset=args.dataset, - data_root=args.data_root, - class_spec=args.class_spec, - cuda_prefetch=args.cuda_prefetch, - quantized_training=args.quantized_training, - compile=args.compile, - compile_mode=args.compile_mode, - compile_optimizer=args.compile_optimizer, - optimizer_cudagraphs=args.optimizer_cudagraphs, - hidden=args.hidden, - backbone=args.backbone, - head=args.head, - normalized=args.normalized, - image_size=args.image_size, - pretrained=args.pretrained, - fine_tune=args.fine_tune, - batch_size=args.batch_size, - cache_workers=args.cache_workers, - model_profile=args.model_profile, - optimizer=args.optimizer, - learning_rate=args.learning_rate, - ) + result = run(**{key: value for key, value in vars(args).items() if key not in ("threads", "allow_nondeterministic")}) except Exception as error: args.output.mkdir(parents=True, exist_ok=True) failure = { diff --git a/dev/check-wheel.sh b/dev/check-wheel.sh index d4a1597..c428cc4 100644 --- a/dev/check-wheel.sh +++ b/dev/check-wheel.sh @@ -4,6 +4,8 @@ set -euo pipefail cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." smoke_python="${1:-.venv/bin/python}" +wheel_output="${WHEEL_OUTPUT_DIR:-}" +if [[ -n "$wheel_output" ]]; then wheel_output="$(realpath -m "$wheel_output")"; fi smoke_dir="$(mktemp -d "${TMPDIR:-/tmp}/mini-trainer-wheel.XXXXXXXX")" trap 'rm -rf -- "$smoke_dir"' EXIT @@ -17,3 +19,9 @@ cd -- "$smoke_dir" # Make the custom test backbone importable for weights-only reconstruction. CUDA_VISIBLE_DEVICES="" MPLBACKEND=Agg MPLCONFIGDIR="$smoke_dir/matplotlib" "$smoke_dir/env/bin/python" -I -c \ 'import sys; sys.path.insert(0, "."); from smoke_fixture.check import main; main()' + +# Retain the exact installed and exercised wheel for publication preparation. +if [[ -n "$wheel_output" ]]; then + mkdir -p "$wheel_output" + cp "$smoke_dir"/dist/*.whl "$wheel_output/" +fi diff --git a/dev/monitor_mambo_release.py b/dev/monitor_mambo_release.py new file mode 100644 index 0000000..b5bf04c --- /dev/null +++ b/dev/monitor_mambo_release.py @@ -0,0 +1,125 @@ +"""Read-only progress/ETA monitor for existing MAMBO collection logs; standard library only.""" + +import argparse +import json +import re +import sys +import time +from collections import deque +from pathlib import Path + +PROGRESS = re.compile(r"^(?:(?:torch|onnx) \S+: )?(\d+)[ /](\d+)\s*$", re.MULTILINE) + + +def read_json(path): + try: + return json.loads(path.read_text()) + except (FileNotFoundError, json.JSONDecodeError): + return None # The producer may be between truncating and writing its report. + + +def checkpoint(path): + try: + with path.open("rb") as stream: + stream.seek(0, 2) + stream.seek(max(0, stream.tell() - 65536)) + matches = list(PROGRESS.finditer(stream.read().decode(errors="replace"))) + if matches: + done, total = map(int, matches[-1].groups()) + if 0 < done <= total: + return done, total, path.stat().st_mtime + except FileNotFoundError: + pass + return None + + +class Rate: + def __init__(self): + self.points = deque() + + def estimate(self, done, total, timestamp, now): + if self.points and (done < self.points[-1][1] or timestamp < self.points[-1][0]): + self.points.clear() + if not self.points or done > self.points[-1][1]: + self.points.append((timestamp, done)) + while len(self.points) > 2 and self.points[1][0] < timestamp - 300: + self.points.popleft() + if len(self.points) < 2: + return None + first, last = self.points[0], self.points[-1] + elapsed = last[0] - first[0] + if elapsed <= 0: + return None + cadence = elapsed / (len(self.points) - 1) + if now - last[0] > max(60, 3 * cadence): + return None # Do not continue projecting throughput while logs stop advancing. + rate = (last[1] - first[1]) / elapsed + return rate, (total - done) / rate + + +def duration(seconds): + seconds = max(0, int(seconds)) + return f"{seconds // 3600}h {(seconds % 3600) // 60:02}m {seconds % 60:02}s" + + +def snapshot(directory, rates, now): + plan = read_json(directory / "plan.json") + if plan is None: + return [f"Waiting for readable {directory / 'plan.json'}"], False + rows = [] + completed = 0 + for job in plan["jobs"]: + name = job["name"] + report = read_json(directory / name / "report.json") + status = report.get("status") if report else None + if name in plan["completed"] or status == "complete": + rows.append(f"{name}: complete") + completed += 1 + continue + log = directory / f"{name}.log" + point = checkpoint(log) + if point is None: + state = status or ("initializing; no image checkpoint yet" if log.exists() else "queued") + rows.append(f"{name}: {state}") + continue + done, total, timestamp = point + estimate = rates.setdefault(name, Rate()).estimate(done, total, timestamp, now) + text = f"{name}: {done:,}/{total:,} ({100 * done / total:.1f}%) | checkpoint age {duration(now - timestamp)}" + if status == "failed": + text += " | FAILED" + elif done == total: + text += " | finalizing; completion not yet confirmed" + elif estimate: + rate, eta = estimate + text += f" | ~{rate:.1f} images/s | remaining at last checkpoint ~{duration(eta)}" + else: + text += " | ETA unavailable: need advancing checkpoints" + rows.append(text) + header = f"{directory.name}: {plan['status']} | {completed}/{len(plan['jobs'])} jobs complete" + return [header, *rows], plan["status"] in ("complete", "failed") + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("directory", type=Path, help="Campaign phase directory, e.g. runs-ptx/full") + parser.add_argument("--interval", type=float, default=10, help="Poll seconds (default 10)") + parser.add_argument("--once", action="store_true", help="Print counts/status once; rate needs multiple observations") + args = parser.parse_args() + if args.interval <= 0: + parser.error("--interval must be positive") + rates = {} + try: + while True: + rows, finished = snapshot(args.directory.expanduser(), rates, time.time()) + if sys.stdout.isatty() and not args.once: + print("\033[2J\033[H", end="") + print(time.strftime("%Y-%m-%d %H:%M:%S"), *rows, sep="\n", flush=True) + if args.once or finished: + break + time.sleep(args.interval) + except KeyboardInterrupt: + pass + + +if __name__ == "__main__": + main() diff --git a/dev/release_route.py b/dev/release_route.py new file mode 100644 index 0000000..2b9923e --- /dev/null +++ b/dev/release_route.py @@ -0,0 +1,82 @@ +"""Resolve release intent from branch/tag identity; never authorize publication on push.""" + +import argparse +import json +import os +import re +import tomllib +from pathlib import Path + + +def products(root, kind): + if kind == "packages": + project = tomllib.loads((root / "pyproject.toml").read_text())["project"] + return {project["name"]: {"project": "."}} + return tomllib.loads((root / ".github/model-releases.toml").read_text())["models"] + + +def resolve(root, kind, event_name, ref, event, selected=None): + entries = products(root, kind) + tag = event.get("release", {}).get("tag_name", "") + category = "models" if kind == "demos" else kind + if event_name == "release": + if kind == "demos": + return {"enabled": "false"} + prefix = f"{category}/" + if tag.startswith(prefix): + parts = tag.split("/") + if len(parts) != 3: + raise ValueError("Expected category/product/vVERSION release tag") + selected = parts[1] + else: + selected = next((name for name, item in entries.items() if item.get("tag") == tag), None) + if selected is None: + return {"enabled": "false"} + elif event_name == "push": + prefix = f"refs/heads/release/{kind}/" + if not ref.startswith(prefix): + return {"enabled": "false"} + selected = ref.removeprefix(prefix) + elif event_name == "workflow_dispatch": + if kind == "packages" and not selected: + selected = next(iter(entries)) + else: + return {"enabled": "false"} + if selected not in entries or not re.fullmatch(r"[a-z0-9][a-z0-9-]*", selected): + raise ValueError(f"Unknown {kind} product: {selected!r}") + entry = entries[selected] + project_path = (root / entry["project"] / "pyproject.toml").resolve() + if not project_path.is_relative_to(root.resolve()): + raise ValueError("Project must be inside the repository") + project = tomllib.loads(project_path.read_text())["project"] + if project["name"] != selected: + raise ValueError("Release product differs from distribution name") + version = project["version"] + expected = entry.get("tag", f"{category}/{selected}/v{version}") + if "tag" in entry and entry.get("tag_version") != version: + raise ValueError("Explicit release tag must be reviewed for the new package version") + if event_name == "release" and tag != expected: + raise ValueError(f"Tag does not match checked-out release: expected {expected!r}") + module = entry.get("module", "") + if kind != "packages" and not re.fullmatch(r"[a-z_]\w*(?:\.[a-z_]\w*)+", module): + raise ValueError("Model needs a valid preparation module") + return {"enabled": "true", "product": selected, "version": version, "tag": expected, "module": module} + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("kind", choices=("packages", "models", "demos")) + args = parser.parse_args() + result = resolve( + Path(__file__).resolve().parents[1], + args.kind, + os.environ["GITHUB_EVENT_NAME"], + os.environ["GITHUB_REF"], + json.loads(Path(os.environ["GITHUB_EVENT_PATH"]).read_text()), + os.environ.get("RELEASE_PRODUCT"), + ) + with Path(os.environ["GITHUB_OUTPUT"]).open("a") as stream: + for key, value in result.items(): + if "\n" in value or "\r" in value: + raise ValueError("Invalid multiline release metadata") + stream.write(f"{key}={value}\n") diff --git a/dev/releases/README.md b/dev/releases/README.md new file mode 100644 index 0000000..89334b9 --- /dev/null +++ b/dev/releases/README.md @@ -0,0 +1,46 @@ +# Release preparation and publication + +Branches select preparation; publishing a GitHub Release selects publication. +A branch push or tag push never publishes packages, weights or a hosted demo. +Ordinary CI covers `master` and every `release/**` branch. + +| Product | Preparation branch | GitHub Release tag | Workflow | +| --- | --- | --- | --- | +| Training package | `release/packages/mt-trainer` | `packages/mt-trainer/vVERSION` | `publish.yml` | +| Model package and assets | `release/models/PRODUCT` | `models/PRODUCT/vVERSION` | `publish-model.yml` | +| Demo only | `release/demos/PRODUCT` | No package/model release | `publish-demo.yml` | + +Manual dispatch also prepares a selected revision; model/demo dispatch requires +`product`. Only a non-prerelease GitHub Release can reach package/model publication. +Demo-only publication requires manual `publish=true`. Human environment approvals +remain the last gate. Release routing uses the tag, not `target_commitish`: the +latter may be a commit SHA and does not reliably identify a branch. + +[The resolver](../release_route.py) checks product and version against the +checked-out `pyproject.toml`. [Model descriptors](../../.github/model-releases.toml) +select each model's project and preparation module. Future models add a descriptor +and their necessary release-specific preparation; the publication workflows do +not need another model-name condition. An explicit tag override requires a matching +`tag_version`, preventing accidental reuse for a maintenance version. + +**MAMBO V3 keeps `MAMBO_v3` as its explicit release tag**, preserving prepared +public links. Its existing `release/mambo-v3` branch still receives CI and can use +manual preparation with `product=mambo-v3`; no branch rename is required. Use +`release/models/mambo-v3` for automatic model preparation on push. These are the +same product, not two independently publishable release identities. + +Each model module owns `prepare_candidate`, `qualify_candidate`, +`publication_assets` and `publish_assets`, using the command interfaces shown in +the workflows. This keeps model-specific input inventories, fixture policy, bundle +layout and immutable-upload handling with the release that knows those contracts. +Demo staging exports `stage_space(output)` and its pinned requirements. Shared +workflows orchestrate these steps and retain their exact qualified artifacts. + +Training uses `pypi-training`. Model environments are scoped per product: +`pypi-model-PRODUCT`, `model-assets-PRODUCT` and `model-demo-PRODUCT`. Configure +model/Space destinations and narrowly scoped credentials there. Both demo paths +share a per-product deployment concurrency group. A future model needs its own +accounts/environments; it cannot inherit another model's destinations implicitly. + +Use [the MAMBO V3 handoff](mambo_v3/publication.md) for concrete accounts, +artifact review, publication order, endpoint checks and safe retries. diff --git a/dev/releases/mambo_v3/MODEL_CARD.md b/dev/releases/mambo_v3/MODEL_CARD.md new file mode 100644 index 0000000..88970ca --- /dev/null +++ b/dev/releases/mambo_v3/MODEL_CARD.md @@ -0,0 +1,81 @@ +--- +license: cc-by-nc-sa-4.0 +library_name: onnx +pipeline_tag: image-classification +tags: + - biology + - lepidoptera + - moths + - butterflies + - pytorch + - onnx + - hierarchical-classification +--- + +# MAMBO V3 + +EfficientNetV2-S trained on global-lepi in September +2026. Predicts 12,632 species, 4,476 genera and 104 families, identified by GBIF taxon +IDs. Native PyTorch and standard floating-point ONNX artifacts share this vocabulary. +No quantized model is included. Embeddings have 1,280 dimensions and unit length. + +[Try one image](https://huggingface.co/spaces/asgersvenning/MAMBO-v3) · +[Python package](https://pypi.org/project/mambo-v3/) · +[Integration and comparison figures](https://github.com/asgersvenning/mini_trainer/blob/MAMBO_v3/deployment/README.md) + +```python +from mambo_deploy import Predictor +result = Predictor().predict("moth.jpg") +print(result[0].label, result[0].confidence) +``` + +Install with `uv pip install 'mambo-v3[onnx]==0.3.0'`. The package downloads verified +weights from ERDA automatically. For a Hub snapshot, use its `bundle/` directory +with `Predictor(bundle="/path/to/snapshot/bundle")`; this is not a Transformers +`from_pretrained` model. `CITATION.cff` identifies the release citation. + +Use the release README for installation, input/output formats and configuration. +Global is the default. Region presets and custom class lists constrain eligible +species; they are permissive occurrence filters, not native-range maps. Taxonomic +ranks are predicted independently. Optional TTA uses `rotation30_pad25_3`. + +## Intended use and evidence + +Local moth/butterfly image classification and downstream integration. This is a +closed-vocabulary classifier for images of individual animals, not an animal +detector or a validated unknown-species rejection system. Both +Flemming monitoring crops and the original global-lepi test split have completed +V2/V3, backend and TTA comparisons. Their different domains produce different TTA +responses; neither establishes accuracy for every deployment. Regional vocabulary +and confidence thresholds affect the results. Consult the README's figures and +linked evidence for macro metrics, acceptance coverage, support truncation and +calibration policy. Laptop and B200 timings have distinct environment/workload +boundaries and do not establish universal hardware throughput. + +The Python adapter supports CPU and NVIDIA CUDA via separately installed runtimes. +ONNX offers a path to browser and other native-runtime integrations; those require +matching preprocessing and are not automatically qualified by Python execution. +No complete Windows/macOS/edge-device compatibility claim is made. + +## Training and artifact identity + +The checksum-verified training console reports the best model at epoch **30**. +`MODEL_PROVENANCE.toml` identifies the checkpoint, configuration, epoch summary and +training log with immutable hashes and public source URLs. The retained materials +do not identify the exact training Git revision or retain the starting checkpoint +hash. The preparation source initializes a torchvision DEFAULT EfficientNetV2-S +backbone (ImageNet-1K) and a new hierarchical head with seed 42; this is a source-based +reconstruction rather than a verified identity for the original starting file. The recorded September 11 checkout is packaging provenance, +not a claimed training revision. The trained checkpoint itself is identified and +can be loaded without retraining or downloading an initialization model. + +`release.json` covers the graph/external-weight files, presets, preprocessing, +vocabulary and documentation. `PRESET_DEFINITIONS.toml` and `PRESET_UPDATES.toml` +record list construction. Read `NOTICES.md` for code, model and source-data boundaries. + +## License + +The model weights use **CC BY-NC-SA 4.0**: attribution, +non-commercial use and share-alike terms for distributed adaptations. See +`MODEL_LICENSE.txt` and `NOTICES.md` for the terms and upstream attribution. +The adapter code remains MIT-licensed. diff --git a/dev/releases/mambo_v3/MODEL_LICENSE.txt b/dev/releases/mambo_v3/MODEL_LICENSE.txt new file mode 100644 index 0000000..baee873 --- /dev/null +++ b/dev/releases/mambo_v3/MODEL_LICENSE.txt @@ -0,0 +1,170 @@ +Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International + + Creative Commons Corporation (“Creative Commons”) is not a law firm and does not provide legal services or legal advice. Distribution of Creative Commons public licenses does not create a lawyer-client or other relationship. Creative Commons makes its licenses and related information available on an “as-is” basis. Creative Commons gives no warranties regarding its licenses, any material licensed under their terms and conditions, or any related information. Creative Commons disclaims all liability for damages resulting from their use to the fullest extent possible. + +Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and conditions that creators and other rights holders may use to share original works of authorship and other material subject to copyright and certain other rights specified in the public license below. The following considerations are for informational purposes only, are not exhaustive, and do not form part of our licenses. + +Considerations for licensors: Our public licenses are intended for use by those authorized to give the public permission to use material in ways otherwise restricted by copyright and certain other rights. Our licenses are irrevocable. Licensors should read and understand the terms and conditions of the license they choose before applying it. Licensors should also secure all rights necessary before applying our licenses so that the public can reuse the material as expected. Licensors should clearly mark any material not subject to the license. This includes other CC-licensed material, or material used under an exception or limitation to copyright. More considerations for licensors. + +Considerations for the public: By using one of our public licenses, a licensor grants the public permission to use the licensed material under specified terms and conditions. If the licensor’s permission is not necessary for any reason–for example, because of any applicable exception or limitation to copyright–then that use is not regulated by the license. Our licenses grant only permissions under copyright and certain other rights that a licensor has authority to grant. Use of the licensed material may still be restricted for other reasons, including because others have copyright or other rights in the material. A licensor may make special requests, such as asking that all changes be marked or described. Although not required by our licenses, you are encouraged to respect those requests where reasonable. More considerations for the public. + +Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International Public License + +By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions. + +Section 1 – Definitions. + + a. Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image. + + b. Adapter's License means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License. + + c. BY-NC-SA Compatible License means a license listed at creativecommons.org/compatiblelicenses, approved by Creative Commons as essentially the equivalent of this Public License. + + d. Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights. + + e. Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements. + + f. Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material. + + g. License Elements means the license attributes listed in the name of a Creative Commons Public License. The License Elements of this Public License are Attribution, NonCommercial, and ShareAlike. + + h. Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License. + + i. Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license. + + j. Licensor means the individual(s) or entity(ies) granting rights under this Public License. + + k. NonCommercial means not primarily intended for or directed towards commercial advantage or monetary compensation. For purposes of this Public License, the exchange of the Licensed Material for other material subject to Copyright and Similar Rights by digital file-sharing or similar means is NonCommercial provided there is no payment of monetary compensation in connection with the exchange. + + l. Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them. + + m. Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world. + + n. You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning. + +Section 2 – Scope. + + a. License grant. + + 1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to: + + A. reproduce and Share the Licensed Material, in whole or in part, for NonCommercial purposes only; and + + B. produce, reproduce, and Share Adapted Material for NonCommercial purposes only. + + 2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions. + + 3. Term. The term of this Public License is specified in Section 6(a). + + 4. Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted Material. + + 5. Downstream recipients. + + A. Offer from the Licensor – Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License. + + B. Additional offer from the Licensor – Adapted Material. Every recipient of Adapted Material from You automatically receives an offer from the Licensor to exercise the Licensed Rights in the Adapted Material under the conditions of the Adapter’s License You apply. + + C. No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material. + + 6. No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i). + + b. Other rights. + + 1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise. + + 2. Patent and trademark rights are not licensed under this Public License. + + 3. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties, including when the Licensed Material is used other than for NonCommercial purposes. + +Section 3 – License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the following conditions. + + a. Attribution. + + 1. If You Share the Licensed Material (including in modified form), You must: + + A. retain the following if it is supplied by the Licensor with the Licensed Material: + + i. identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of warranties; + + v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable; + + B. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and + + C. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License. + + 2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information. + + 3. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable. + + b. ShareAlike.In addition to the conditions in Section 3(a), if You Share Adapted Material You produce, the following conditions also apply. + + 1. The Adapter’s License You apply must be a Creative Commons license with the same License Elements, this version or later, or a BY-NC-SA Compatible License. + + 2. You must include the text of, or the URI or hyperlink to, the Adapter's License You apply. You may satisfy this condition in any reasonable manner based on the medium, means, and context in which You Share Adapted Material. + + 3. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, Adapted Material that restrict exercise of the rights granted under the Adapter's License You apply. + +Section 4 – Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material: + + a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database for NonCommercial purposes only; + + b. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material, including for purposes of Section 3(b); and + + c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database. +For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights. + +Section 5 – Disclaimer of Warranties and Limitation of Liability. + + a. Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You. + + b. To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You. + + c. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability. + +Section 6 – Term and Termination. + + a. This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically. + + b. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates: + + 1. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or + + 2. upon express reinstatement by the Licensor. + + For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License. + + c. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License. + + d. Sections 1, 5, 6, 7, and 8 survive termination of this Public License. + +Section 7 – Other Terms and Conditions. + + a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed. + + b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License. + +Section 8 – Interpretation. + + a. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License. + + b. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions. + + c. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor. + + d. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority. + +Creative Commons is not a party to its public licenses. Notwithstanding, Creative Commons may elect to apply one of its public licenses to material it publishes and in those instances will be considered the “Licensor.” Except for the limited purpose of indicating that material is shared under a Creative Commons public license or as otherwise permitted by the Creative Commons policies published at creativecommons.org/policies, Creative Commons does not authorize the use of the trademark “Creative Commons” or any other trademark or logo of Creative Commons without its prior written consent including, without limitation, in connection with any unauthorized modifications to any of its public licenses or any other arrangements, understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses. + +Creative Commons may be contacted at creativecommons.org. diff --git a/dev/releases/mambo_v3/NOTICES.md b/dev/releases/mambo_v3/NOTICES.md new file mode 100644 index 0000000..fcff111 --- /dev/null +++ b/dev/releases/mambo_v3/NOTICES.md @@ -0,0 +1,61 @@ +# MAMBO V3 notices + +## Model weights + +The MAMBO V3 trained weights, in PyTorch and ONNX form, are prepared for release +under **Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International** +(`CC-BY-NC-SA-4.0`). The full terms are in `MODEL_LICENSE.txt` and at +. + +Attribute **MAMBO V3 / mini_trainer project**, link to + and the +license, and identify modifications when sharing. The license permits +non-commercial use and sharing; distributed adaptations must retain the same +license elements under the license's ShareAlike conditions. It does not require +private adaptations to be published. Commercial use requires separate permission +from the relevant rights holders. The license grants only rights the licensor +has authority to grant; it does not replace third-party rights or notices. + +## Initialization and attribution + +The retained UCloud preparation code creates `initial_seed42.pt` before training: +it initializes the torchvision EfficientNetV2-S backbone with `DEFAULT` pretrained +weights and a new normalized hierarchical classification head using seed 42. +Torchvision documents this default as `EfficientNet_V2_S_Weights.IMAGENET1K_V1`, +trained on ImageNet-1K. Production then loads the saved starting checkpoint with +`pretrained=false` to avoid loading the upstream weights again. + +This lineage is reconstructed from preparation source, not verified against the +original initialization file: its bytes/hash and the run-specific preparation +manifest were not retained in the release archive. `MODEL_PROVENANCE.toml` records +the source revision and this limitation. The deployed trained checkpoint is +independently identified by its SHA-256; inference does not require the initial file. + +Acknowledgements: the TorchVision maintainers and contributors, ImageNet, and +Mingxing Tan and Quoc V. Le for EfficientNetV2. Upstream references: + +- [TorchVision EfficientNetV2-S weights](https://docs.pytorch.org/vision/stable/models/generated/torchvision.models.efficientnet_v2_s.html) +- [EfficientNetV2 paper](https://arxiv.org/abs/2104.00298) +- [TorchVision model terms](https://github.com/pytorch/vision#pre-trained-model-license) + +TorchVision notes that pretrained models may have terms derived from their training +data. Its software license alone is not a blanket license for pretrained weights +or photographs. The MAMBO license does not relicense those upstream materials. + +## Repository code and runtime dependencies + +The deployment adapter and mini_trainer code remain **MIT-licensed** (`CODE_LICENSE`). +The model-weight license does not relicense independently written application code. +PyTorch/torchvision, ONNX Runtime, NumPy and Pillow are installed separately by the +application's package manager, not vendored in the model bundle. Their distributions +carry their own licenses and notices. CUDA/cuDNN components have separate terms. +Keep dependency notices when redistributing an environment or container. + +## Dataset, taxonomy and photographs + +Global-lepi metadata and GBIF taxon identifiers informed training and regional +presets. Training/evaluation photographs and the Flemming dataset are not included +in this deployment release. Their original source permissions remain separate; +this release grants no permission to redistribute those datasets or images. +Preset files contain taxon IDs and filter definitions, not photographs. Retained +private evaluation inputs must remain outside publication assets. diff --git a/dev/releases/mambo_v3/README.md b/dev/releases/mambo_v3/README.md new file mode 100644 index 0000000..f5fe0bb --- /dev/null +++ b/dev/releases/mambo_v3/README.md @@ -0,0 +1,133 @@ +# MAMBO_v3 release maintenance + +Start with the [deployment README](../../../deployment/README.md) for integration. +This directory maintains release inputs, qualification and reproducible evaluation. +Models, predictions and raw datasets stay outside Git. + +| Task | Maintained source | +| --- | --- | +| Build and qualify release artifacts | [Deployment qualification](deployment-qualification.md); [final qualification](final-qualification.md) records the completed candidate | +| Prepare publication | [Publication checklist](publication.md) | +| Evaluate or regenerate reports | [Evaluation workflow](evaluation.md), [UCloud runbook](ucloud-release.md), [evidence policy](evidence-policy.md) | +| Inspect or revise geographic presets | [Catalogue](../../../docs/model-presets.md), [definitions](preset-definitions.toml), [generated hashes/counts](preset-manifest.toml) | +| Integrate or migrate from V2 | [Integration details](../../../docs/mambo-integration.md) | +| Verify model identity and training provenance | [Inventory](inventory.toml), [model provenance](model-provenance.toml), audit below | + +## Reproduce the audit + +`inventory.toml` pins 44 downloaded files by URL, relative path, size and SHA-256. +Download each to its corresponding path beneath an evidence root. Keep both ONNX +graphs beside their `model.onnx.data` files. Production hashes were checked against +published checksums; legacy weight hashes were observed during retrieval, not +independently authenticated. `metadata_readback` identifies metadata hashed then. + +From the repository root, using the existing environment without synchronization: + +```sh +.venv/bin/python dev/releases/mambo_v3/audit.py local-evidence/mambo-v3 \ + --flemming /home/asger/data/flemming +.venv/bin/python dev/releases/mambo_v3/check_legacy_fixture.py +bash dev/check.sh test tests/releases/test_mambo_inventory.py +``` + +The audit verifies pinned files, safely reads checkpoint state on CPU, compares +ordered class/parent mappings, recovers legacy masks and checks the ONNX manifest. +It does not execute models. The container fixture needs the pinned local Git +history, but neither old dependencies nor a backbone download. + +The September 23 audit verified all 44 files and identical V2/V3 mappings: +12,632 species, 4,476 genera and 104 families, with no index remapping. Predictions +are not equivalent: BioCLIP-2 becomes EfficientNetV2-S and input size changes +from 512 to 384. Legacy classifier weights need a separately available backbone. +Best epoch 30 is verified; the exact training revision and original +`initial_seed42.pt` hash remain unavailable. [Final qualification](final-qualification.md) +distinguishes the recovered initialization recipe from verified starting bytes. + +## Regional scope and construction + +The [preset catalogue](../../../docs/model-presets.md) owns current geographic +scope, thresholds and membership rules. The details here explain how the unchanged +legacy lists were recovered; [construction.toml](construction.toml) pins the source +Parquet hash, filters and totals. Presets follow model order from each weight's +`cls2idx` and active indices, not sorted GBIF IDs. + +### Reproduce construction from metadata + +With PyArrow installed in the existing environment, run: + +```sh +.venv/bin/python -m dev.releases.mambo_v3.reconstruct_presets \ + examples/global_lepi/0032836-250426092105405_processing_metadata_postprocessed_quality_filtered.parquet +``` + +The script verifies the Parquet hash and frozen memberships without changing +ordering or splits. Counts use metadata rows, without additional deduplication, +across **all existing splits 0–9, including held-out records**. Historical vocabulary +selection therefore used test rows too; retain this disclosure in evaluation. + +| Legacy preset | Reconstruction | Evidence / limit | +| --- | --- | --- | +| `europe` | `continent == "EUROPE"`; species with >25 rows | 3,014 species; membership and all 3,132 pre-threshold species counts match the retained historical table. | +| `north_europe` | `countryCode` in `DE DK EE FI LT LV NL NO PL SE`; species with >25 rows | 1,977 species; exact membership match, but the original country expression is not uniquely recoverable. | + +Europe cannot be reproduced as a union of entire countries with the same threshold. +For example, species `11470119` is included with 595 Spanish rows, while `5145842` +is excluded despite 194 Spanish rows (192 labelled AFRICA, two without continent). +Transcontinental countries contribute only their EUROPE-labelled records. The +original continent-assignment geometry and taxonomy retrieval date are unknown. + +For northern Europe, removing any of the ten countries changes membership; adding +the UK adds 29 unwanted species. Adding any or all `IE IS AX FO GG IM JE SJ` changes +nothing. These are tested equivalent additions, not a recovered original script or +an exhaustive list of possible filters. The catalogue marks this ambiguity. + +The historical Europe count-table SHA-256 is +`47e817d3e5009f929df4a8bc7404e4434c98232806596bc1585dd8c2b88e37d5`; +reconstruction no longer depends on that unversioned table. Published memberships +remain fixed; intentional changes require a new revision and added/removed-ID report. + +## Compatibility boundary + +The baseline is MAMBO_v2 commit `32b3cd661778356b2e8c4cff5b10fa9061aa6f5d` plus +observed weight hashes. [compatibility.toml](compatibility.toml) captures its top-1 +container and archived CSV columns. The fixture qualifies that container only; +current input, masking, CLI and backend coverage is described in +[deployment qualification](deployment-qualification.md). + +Keep these historical distinctions when interpreting compatibility: + +- V2 defaulted to Europe; portable V3 defaults to global. Embeddings and predictions + change with the model; [migration guidance](../../../docs/mambo-integration.md#moving-from-v2) + owns current calling conventions and output differences. +- Legacy ranks were independently ranked, not necessarily one ancestral path. + Top-k beyond one was experimental and nested-result serialization incomplete. +- The legacy probability heuristic used a batch-wide sum. This defect and an + archived CSV schema are not sufficient grounds for promising score or CLI parity. + +## Historical dataset quality filter + +The [retired filtering script](https://github.com/asgersvenning/mini_trainer/blob/027e5b8a6e82b0356c28ea47672d1b69bdea0a7b/examples/apply_quality_filter.py) +records this policy: retain images predicted as `Valid` or `Dead` with confidence +≥0.5, then retain species with ≥50 surviving images. It selects Parquet records by +matching filename stems to the selected image IDs. This dataset filter is separate +from the regional preset occurrence thresholds above. + +The script was labelled reference-only; its remote I/O is not a maintained rebuild +workflow, and it does not prove how the supplied Parquet bytes were produced. +Release construction uses the hashed metadata snapshot in `construction.toml`. + +## Evaluation handoff + +Flemming contains 58,640 images / 522 species. Its species-directory and filename +identities match the archived expert predictions; this is membership evidence, +not image-content checksum equality. Both legacy regional lists exclude 16 truth +species / 8,042 images. Keep those rows visible in evaluation. + +The 632,913-image global-lepi test split was evaluated on UCloud without resplitting. +Preserve original sample identities when joining numeric staging filenames. +Retained prediction/confidence archives support metric recomputation without images. + +Current results: [Flemming](../../../docs/mambo-deployment-evidence.md), +[in-domain](../../../docs/mambo-indomain-evidence.md), [HPC timings](../../../docs/mambo-hpc-evidence.md). +Use the workflows linked above; historical first-pass reports do not describe the +current default-TTA comparison. diff --git a/dev/releases/mambo_v3/acceleration_report.py b/dev/releases/mambo_v3/acceleration_report.py new file mode 100644 index 0000000..3dad3ac --- /dev/null +++ b/dev/releases/mambo_v3/acceleration_report.py @@ -0,0 +1,286 @@ +"""Macro-led quality and complete-pipeline speed for accelerated release defaults.""" + +import argparse +import csv +import hashlib +import json +import statistics +from collections import defaultdict +from pathlib import Path + +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.releases.mambo_v3.comparison_charts import COLORS, REGION_LABELS, REGIONS, completed +from dev.releases.mambo_v3.evaluation_data import write_json +from dev.releases.mambo_v3.metrics import METRIC_SCHEMA + +from .figure_export import save_figure + +METRICS = ("accuracy", "precision", "recall", "f1", "micro_accuracy", "theilU", "coverage") + + +def aggregate(args): + reference = json.loads(args.reference.read_text()) + completed(args.quality / "plan.json") + data = { + "reference": reference, + "quality": [], + "speed": [], + "resources": [], + "sources_sha256": {str(args.reference): file_hash(args.reference)}, + } + for backend in ("torch", "onnx"): + folder = args.quality / f"{backend}-cuda-0-prediction" + report = completed(folder / "report.json") + for key in ("bundle_sha256", "manifest_sha256"): + if data.setdefault(key, report[key]) != report[key]: + raise ValueError("Different quality artifacts or manifest") + expected = "fp16" if backend == "torch" else "tf32" + if report["effective_precision"] != expected: + raise ValueError("Unexpected automatic precision") + for preset in (*REGIONS, "north_europe_v3", "europe_v3"): + path = folder / preset / "metrics.json" + metric = json.loads(path.read_text()) + old = next(r for r in reference["quality"] if r["model"] == "v3" and r["preset"] == preset) + if ( + metric["metric_schema"] != METRIC_SCHEMA + or metric["mini_metrics_revision"] != old["metric_revision"] + or file_hash(path.with_name("mini_metric.csv")) != metric["source_sha256"] + or metric["source_sha256"] != report["csv_sha256"][preset] + ): + raise ValueError("Stale metrics") + if old["sample_ids_sha256"] != report["sample_ids_sha256"] or old["list_sha256"] != report["lists"][preset]["sha256"]: + raise ValueError("Changed evaluation population or list") + data["quality"].append( + { + "model": backend, + "precision": expected, + "preset": preset, + "ranks": metric["ranks"], + "scores": {scope: metric[scope] for scope in ("all", "known")}, + } + ) + data["sources_sha256"][str(path)] = file_hash(path) + data["sources_sha256"][str(folder / "report.json")] = file_hash(folder / "report.json") + grouped, resources = defaultdict(list), defaultdict(list) + for name in completed(args.performance / "plan.json")["completed"]: + path = args.performance / name / "report.json" + report = completed(path) + bank = hashlib.sha256(json.dumps(report["samples"], sort_keys=True).encode()).hexdigest() + if bank != reference["timing_bank_sha256"]: + raise ValueError("Different timing image bank") + if any(report[key] != data[key] for key in ("bundle_sha256", "manifest_sha256")): + raise ValueError("Timing and quality artifacts differ") + settings = report["settings"] + if settings["threads"] != 4 or settings["embeddings"]: + raise ValueError("Unexpected benchmark configuration") + backend, device = settings["backend"], settings["device"] + expected = "fp32" if device == "cpu" else ("fp16" if backend == "torch" else "tf32") + if settings["precision"] != "auto" or report["effective_precision"] != expected: + raise ValueError("Unexpected timing precision") + for cell in report["cells"]: + grouped[backend, device, cell["preset"], cell["batch_size"]].append(cell["end_to_end"]) + resources[backend, device].append( + { + "rss_mib": report["peak_rss_kib_linux"] / 1024, + "load_first_seconds": report["constructor_seconds"] + report["cold_first_image_seconds"], + "allocated_mib": report.get("torch_peak_allocated_bytes", 0) / 2**20 if backend == "torch" and device != "cpu" else None, + } + ) + data["sources_sha256"][str(path)] = file_hash(path) + expected_cells = { + (backend, device, preset, batch) + for backend in ("torch", "onnx") + for device in ("cpu", "cuda:0") + for preset in REGIONS + for batch in ((1, 8) if device == "cpu" else (1, 8, 32)) + } + if set(grouped) != expected_cells: + raise ValueError("Incomplete timing matrix") + for (backend, device, preset, batch), runs in sorted(grouped.items()): + values = [v for run in runs for v in run["seconds"]] + if len(runs) != 3 or len(values) != 21: + raise ValueError("Require three complete seven-observation trials") + data["speed"].append( + { + "model": backend, + "device": device, + "preset": preset, + "batch": batch, + "images_per_second": batch / statistics.median(values), + "trial_min_ips": batch / max(r["median_seconds"] for r in runs), + "trial_max_ips": batch / min(r["median_seconds"] for r in runs), + } + ) + for (backend, device), rows in resources.items(): + if len(rows) != 3: + raise ValueError("Require three resource observations") + data["resources"].append( + { + "model": backend, + "device": device, + **{key: statistics.median(r[key] for r in rows) if rows[0][key] is not None else None for key in rows[0]}, + } + ) + return data + + +def render(data, output): + import matplotlib + + matplotlib.use("Agg") + import matplotlib.pyplot as plt + import numpy as np + + output.mkdir(parents=True, exist_ok=True) + plt.rcParams.update( + { + "svg.fonttype": "none", + "svg.hashsalt": "mambo-acceleration-v1", + "axes.spines.top": False, + "axes.spines.right": False, + "font.size": 10, + } + ) + + def save(fig, name, note): + fig.text(0.02, 0.02, note, fontsize=9, color="#555555") + save_figure(fig, output, name) + + fig, axes = plt.subplots(2, 2, figsize=(12, 8)) + for col, backend in enumerate(("torch", "onnx")): + for row, device in enumerate(("cpu", "cuda:0")): + ax = axes[row, col] + batches = (1, 8) if device == "cpu" else (1, 8, 32) + for name, label, color in ( + ("v2", "MAMBO v2", COLORS[0]), + (f"v3-{backend}", "Previous v3 FP32", "#888888"), + (backend, "Updated v3 auto", COLORS[col + 1]), + ): + source = data["speed"] if name == backend else data["reference"]["speed"] + rows = [ + next(r for r in source if (r["model"], r["device"], r["preset"], r["batch"]) == (name, device, "north_europe", batch)) + for batch in batches + ] + values = [r["images_per_second"] for r in rows] + low = [r.get("trial_min_ips", r["batch"] * 1000 / r["trial_max_ms"] if "trial_max_ms" in r else 0) for r in rows] + high = [r.get("trial_max_ips", r["batch"] * 1000 / r["trial_min_ms"] if "trial_min_ms" in r else 0) for r in rows] + ax.plot(range(len(batches)), values, marker="o", color=color, label=label) + ax.vlines(range(len(batches)), low, high, colors=color, alpha=0.5) + ax.annotate( + f"{values[-1]:.1f}", + (len(values) - 1, values[-1]), + xytext=(4, -14 if name.startswith("v3-") else 5), + textcoords="offset points", + fontsize=9, + ) + ax.set( + xticks=range(len(batches)), + xticklabels=batches, + xlabel="Batch size", + ylabel="End-to-end images / second", + title=f"{backend.title()} · {'CPU' if device == 'cpu' else 'GPU'}", + ylim=(0, None), + ) + ax.margins(y=0.25) + ax.grid(axis="y", alpha=0.2) + ax.legend(fontsize=8) + for row in range(2): + maximum = max(ax.get_ylim()[1] for ax in axes[row]) + for ax in axes[row]: + ax.set_ylim(0, maximum) + fig.suptitle("Northern Europe: complete-pipeline batch throughput", fontsize=16) + fig.tight_layout(rect=(0, 0.09, 1, 0.95)) + save( + fig, + "mambo-accelerated-speed", + "Three fresh-process trials; four CPU threads; decode, preparation and CPU results included. Whiskers: trial-median range.\n" + "Updated CUDA: FP16 backbone for PyTorch, TF32 for standard ONNX. CPU: FP32. V2 CPU requires its documented input cast.", + ) + + fig, axes = plt.subplots(1, 2, figsize=(12, 4.8)) + labels = ["V2", "V3 torch\nFP32", "V3 torch\nauto", "V3 ONNX\nFP32", "V3 ONNX\nauto"] + for ax, device in zip(axes, ("cpu", "cuda:0"), strict=True): + values = [] + for name in ("v2", "v3-torch", "torch", "v3-onnx", "onnx"): + updated = name in ("torch", "onnx") + source = data["resources"] if updated else data["reference"]["resources"] + value = next(r for r in source if r["model"] == name and r["device"] == device)["rss_mib"] + values.append(value if updated else value["median"]) + bars = ax.bar(labels, values, color=[COLORS[0], "#888888", COLORS[1], "#888888", COLORS[2]]) + ax.bar_label(bars, fmt="%.0f", padding=3) + ax.set(title="CPU execution" if device == "cpu" else "GPU execution", ylabel="Peak host RSS (MiB)", ylim=(0, 4800)) + ax.grid(axis="y", alpha=0.2) + ax.set_axisbelow(True) + fig.suptitle("Process memory across the complete batch sweep", fontsize=15) + fig.tight_layout(rect=(0, 0.10, 1, 0.94)) + save( + fig, + "mambo-accelerated-memory", + "Median of three fresh processes; includes loading and batch sweep. Host memory, not GPU VRAM.\n" + "CPU batches 1/8; GPU batches 1/8/32. V2 CPU uses the documented input cast.", + ) + + series = [ + ("v2", "MAMBO v2", COLORS[0], data["reference"]["quality"]), + ("v3", "V3 FP32 reference", "#888888", data["reference"]["quality"]), + ("torch", "V3 PyTorch FP16", COLORS[1], data["quality"]), + ("onnx", "V3 ONNX TF32", COLORS[2], data["quality"]), + ] + for scope in ("all", "known"): + fig, axes = plt.subplots(2, 2, figsize=(12, 7.5)) + for ax, (metric, title) in zip( + axes.ravel(), + (("accuracy", "Macro accuracy"), ("f1", "Macro-F1"), ("precision", "Macro precision"), ("micro_accuracy", "Micro accuracy")), + strict=True, + ): + for i, (model, label, color, source) in enumerate(series): + values = [ + next(r for r in source if r["model"] == model and r["preset"] == preset)["scores"][scope][metric]["0"] + for preset in REGIONS + ] + bars = ax.bar(np.arange(3) + (i - 1.5) * 0.2, values, 0.2, color=color, label=label) + ax.bar_label(bars, fmt="%.3f", padding=3, fontsize=8, rotation=45) + ax.set(title=title, xticks=np.arange(3), xticklabels=REGION_LABELS, ylim=(0, 1.05)) + ax.grid(axis="y", alpha=0.15) + ax.set_axisbelow(True) + fig.legend( + *axes[0, 0].get_legend_handles_labels(), loc="upper center", bbox_to_anchor=(0.5, 0.94), ncol=4, fontsize=9, frameon=False + ) + fig.suptitle(f"Species quality · {scope} truth · automatic GPU settings", fontsize=16) + fig.tight_layout(rect=(0, 0.08, 1, 0.88)) + save( + fig, + f"mambo-accelerated-quality-{scope}", + "Pinned mini_metrics; threshold 0, no optimization. All: 58,640 images; known: 50,598 images.\n" + "Full tables retain macro recall, Theil U, coverage and every taxonomic rank, including updated European lists.", + ) + with (output / "mambo-accelerated-metrics.csv").open("w", newline="") as stream: + writer = csv.writer(stream, lineterminator="\n") + writer.writerow(["variant", "preset", "scope", "rank", "images", *METRICS]) + for model, label, color, source in series: + for entry in (r for r in source if r["model"] == model): + for scope in ("all", "known"): + for level, rank in enumerate(("species", "genus", "family")): + writer.writerow( + [ + label, + entry["preset"], + scope, + rank, + entry["ranks"][rank]["images" if scope == "all" else "known_images"], + *[entry["scores"][scope][key][str(level)] for key in METRICS], + ] + ) + write_json(output / "mambo-accelerated-comparison.json", data) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--data", type=Path) + for name in ("reference", "quality", "performance"): + parser.add_argument("--" + name, type=Path) + parser.add_argument("--output", type=Path, required=True) + args = parser.parse_args() + if not args.data and any(getattr(args, key) is None for key in ("reference", "quality", "performance")): + parser.error("Supply --data or all three evidence inputs") + render(json.loads(args.data.read_text()) if args.data else aggregate(args), args.output) diff --git a/dev/releases/mambo_v3/audit.py b/dev/releases/mambo_v3/audit.py new file mode 100644 index 0000000..d51a70d --- /dev/null +++ b/dev/releases/mambo_v3/audit.py @@ -0,0 +1,86 @@ +"""Offline audit of pinned release inputs; does not construct models or use CUDA.""" + +import argparse +import csv +import hashlib +import json +import tomllib +from pathlib import Path + +HERE = Path(__file__).resolve().parent + + +def sha256(path): + with path.open("rb") as stream: + return hashlib.file_digest(stream, "sha256").hexdigest() + + +def verify_files(root, inventory): + """Fail closed on absent, changed, or escaping artifact paths.""" + root = root.resolve() + for item in inventory["artifacts"]: + path = (root / item["path"]).resolve() + if not path.is_relative_to(root): + raise ValueError(f"Artifact escapes evidence root: {item['path']}") + if path.stat().st_size != item["size"] or sha256(path) != item["sha256"]: + raise ValueError(f"Artifact integrity mismatch: {item['path']}") + + +def recover_preset(state): + mapping = state["classifier._extra_state"]["cls2idx"]["0"] + reverse = {index: label for label, index in mapping.items()} + indices = state["classifier.active_indices"].tolist() + if len(indices) != len(set(indices)): + raise ValueError("Duplicate preset indices") + return [reverse[index] for index in indices] + + +def audit(root, flemming=None): + import torch + + inventory = tomllib.loads((HERE / "inventory.toml").read_text()) + verify_files(root, inventory) + production = root / inventory["production"] + candidate = torch.load(production / "models/pytorch/best.pt", map_location="cpu", weights_only=True) + metadata = candidate["classifier._extra_state"] + manifest = json.loads((production / "models/onnx-fp32/manifest.json").read_text()) + if manifest["classifiers"][0]["metadata"]["cls2idx"] != metadata["cls2idx"]: + raise ValueError("ONNX and PyTorch class ordering differs") + full = torch.load(root / "MAMBO/hierarchical_bioclip2_ft_v1.pt", map_location="cpu", weights_only=True) + states = [full] + counts = {"full": len(metadata["cls2idx"]["0"])} + for name, preset in inventory["presets"].items(): + state = torch.load(root / preset["source"], map_location="cpu", weights_only=True) + states.append(state) + path = HERE / preset["path"] + labels = path.read_text().splitlines() + if sha256(path) != preset["sha256"] or len(labels) != preset["count"] or labels != recover_preset(state): + raise ValueError(f"Preset mismatch: {name}") + counts[name] = len(labels) + for state in states: + if state["classifier._extra_state"]["cls2idx"] != metadata["cls2idx"]: + raise ValueError("Legacy and candidate mappings differ") + for rank in (0, 1): + key = f"classifier.mask_{rank}" + if not torch.equal(state[key], candidate[key]): + raise ValueError(f"Legacy and candidate parent mapping differs: {key}") + report = {"verified_files": len(inventory["artifacts"]), "presets": counts, "mapping_and_parent_order": "identical"} + if flemming is not None: + with (production / "evaluation/expert/predictions/mini_metric.csv").open() as stream: + rows = [row for row in csv.DictReader(stream) if row["level"] == "0"] + expected = {tuple(Path(row["filename"]).parts[-2:]) for row in rows} + actual = {tuple(path.parts[-2:]) for path in flemming.glob("*/*.jpg")} + if len(expected) != len(rows) or expected != actual: + raise ValueError(f"Flemming identity mismatch: missing={len(expected - actual)}, extra={len(actual - expected)}") + if any(row["label"] != Path(row["filename"]).parent.name for row in rows): + raise ValueError("Flemming labels differ from species directories") + report["flemming"] = {"images": len(expected), "species": len({key[0] for key in expected}), "identity": "species/path only"} + return report + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("root", type=Path) + parser.add_argument("--flemming", type=Path) + args = parser.parse_args() + print(json.dumps(audit(args.root, args.flemming), indent=2)) diff --git a/dev/releases/mambo_v3/benchmark.py b/dev/releases/mambo_v3/benchmark.py new file mode 100644 index 0000000..09b216d --- /dev/null +++ b/dev/releases/mambo_v3/benchmark.py @@ -0,0 +1,250 @@ +"""Fresh-process local deployment timings; cold first-call and warmed boundaries are explicit.""" + +import argparse +import os +import resource +import statistics +import subprocess +import sys +import time +from contextlib import contextmanager +from pathlib import Path +from unittest.mock import patch + +import numpy as np + +from deployment.mambo_deploy import Predictor +from deployment.mambo_deploy.augmentation import DEFAULT_TTA, PROFILES +from deployment.mambo_deploy.preprocessing import preprocess +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.releases.mambo_v3.evaluate import runtime_settings +from dev.releases.mambo_v3.evaluation_data import load_records, write_json + + +def snapshot(): + cpuinfo = Path("/proc/cpuinfo") + result = { + "cpu_model": next( + (line.split(":", 1)[1].strip() for line in cpuinfo.read_text().splitlines() if line.startswith("model name")), None + ) + if cpuinfo.exists() + else None + } + for name, command in ( + ( + "gpu", + ["nvidia-smi", "--query-gpu=name,memory.used,power.draw,temperature.gpu,clocks.current.sm,pstate", "--format=csv,noheader"], + ), + ("gpu_processes", ["nvidia-smi", "--query-compute-apps=pid,used_memory", "--format=csv,noheader"]), + ): + try: + result[name] = subprocess.check_output(command, text=True, stderr=subprocess.DEVNULL, timeout=10).strip() + except (OSError, subprocess.SubprocessError): + result[name] = None + for name, path in ( + ("ac_online", "/sys/class/power_supply/AC1/online"), + ("power_profile", "/sys/firmware/acpi/platform_profile"), + ("cpu_governor", "/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor"), + ): + result[name] = Path(path).read_text().strip() if Path(path).is_file() else None + return result + + +def timing(call, repeats): + values = [] + for _ in range(repeats): + t = time.perf_counter() + call() + values.append(time.perf_counter() - t) + return {"seconds": values, "median_seconds": statistics.median(values), "p95_seconds": float(np.percentile(values, 95))} + + +@contextmanager +def observe_loading(backend, values): + def timed(name, function): + def wrapper(*args, **kwargs): + start = time.perf_counter() + try: + return function(*args, **kwargs) + finally: + values[name] = values.get(name, 0.0) + time.perf_counter() - start + + return wrapper + + if backend == "torch": + import torch + + from mini_trainer.builders import BaseBuilder + from mini_trainer.modeling.classifier import Classifier + + with ( + patch.object(torch, "load", timed("checkpoint_deserialization", torch.load)), + patch.object(BaseBuilder, "build_model", timed("architecture_and_weight_construction", BaseBuilder.build_model)), + patch.object( + Classifier, + "init_spherical_repulsion", + classmethod(timed("spherical_initialization_within_model_build", Classifier.init_spherical_repulsion.__func__)), + ), + ): + yield + else: + import onnxruntime as ort + + with patch.object(ort, "InferenceSession", timed("session_construction", ort.InferenceSession)): + yield + + +def benchmark(args): + args.output.mkdir(parents=True, exist_ok=False) + setup_start = time.perf_counter() + settings = runtime_settings(args.threads, args.backend) + setup_seconds = time.perf_counter() - setup_start + report = { + "status": "running", + "settings": {k: str(v) if isinstance(v, Path) else v for k, v in vars(args).items()}, + "runtime": settings, + "runtime_import_config_seconds": setup_seconds, + "before": snapshot(), + "pid": os.getpid(), + "runner_sha256": file_hash(__file__), + "bundle_sha256": file_hash(args.bundle / "release.json"), + "manifest_sha256": file_hash(args.manifest), + "cells": [], + "boundaries": { + "end_to_end": "image path through CPU result/embedding; threaded decode/preprocess/transfer/reduction included", + "preprocessing": "single-view serial preparation diagnostic (also with TTA); not public API timing", + "prepared": "single-view diagnostic (also with TTA): CPU input to CPU output; transfers included; no decode/reduction", + "cold": "first image after Predictor construction; lazy model/session load included; runtime import/config measured separately", + }, + } + try: + _, records = load_records(args.manifest, args.root, max(args.bank_size, max(args.batches)), args.seed) + report["samples"] = records + t = time.perf_counter() + predictor = Predictor( + args.bundle, + backend=args.backend, + device=args.device, + model="full", + threads=args.threads, + batch_size=max(args.batches), + precision=args.precision, + tta=getattr(args, "tta", "none"), + ) + report["effective_precision"] = predictor.effective_precision + report["runtime"].update( + precision=predictor.effective_precision, + autocast=predictor.effective_precision in ("fp16", "bf16"), + tf32=predictor.effective_precision == "tf32", + ) + report["constructor_seconds"] = time.perf_counter() - t + paths = [args.root / r["path"] for r in records] + for path, record in zip(paths, records, strict=True): + if file_hash(path) != record["sha256"]: + raise ValueError("Benchmark image bytes changed") + _, stream_records = load_records(args.manifest, args.root, args.stream_images, args.seed) + stream_paths = [args.root / record["path"] for record in stream_records] + for path, record in zip(stream_paths, stream_records, strict=True): + if file_hash(path) != record["sha256"]: + raise ValueError("Streaming benchmark image bytes changed") + report["stream_samples"] = stream_records + predict = predictor.predict_with_embeddings if args.embeddings else predictor.predict + report["load_components_seconds"] = {} + cold_start = time.perf_counter() + with observe_loading(args.backend, report["load_components_seconds"]): + predict(paths[:1]) + report["cold_first_image_seconds"] = time.perf_counter() - cold_start + runtime = predictor._torch if args.backend == "torch" else predictor._onnx + for size in args.batches: + prepared = np.stack([preprocess(path) for path in paths[:size]]) + for preset in args.presets: + selector = Predictor(args.bundle, model=preset) + predictor._apply_class_mask(selector.class_list) + for _ in range(args.warmup): + predict(paths[:size]) + runtime(prepared, args.embeddings) + cell = {"batch_size": size, "preset": preset, "list_sha256": selector.class_list_sha256} + cell["preprocessing"] = timing(lambda: np.stack([preprocess(path) for path in paths[:size]]), args.repeats) + cell["end_to_end"] = timing(lambda: predict(paths[:size]), args.repeats) + cell["prepared"] = timing(lambda: runtime(prepared, args.embeddings), args.repeats) + cell["images_per_second"] = size / cell["end_to_end"]["median_seconds"] + if size == max(args.batches): + predictor.batch_size = size + stream_stats = {} + + def stream_call(): + for _ in predictor.predict_stream( + stream_paths, + embeddings=args.embeddings, + read_workers=args.read_workers, + prepare_workers=args.stream_workers, + read_window=max(size, args.read_window), + prefetch_batches=args.prefetch_batches, + encoded_budget=args.encoded_budget_mib * 1024**2, + stats=stream_stats, + device_prefetch=not args.no_device_prefetch, + ): + pass + + cell["streaming"] = timing(stream_call, 3) + cell["streaming"]["images"] = len(stream_paths) + cell["streaming"]["images_per_second"] = cell["streaming"]["images"] / cell["streaming"]["median_seconds"] + cell["streaming"]["pipeline"] = stream_stats + predictor.batch_size = max(args.batches) + cell["resources"] = snapshot() + report["cells"].append(cell) + print(args.backend, args.device, args.embeddings, size, preset, round(cell["images_per_second"], 2), flush=True) + if args.backend == "onnx": + import onnxruntime as ort + + report["runtime"]["onnxruntime"] = ort.__version__ + report["onnx_session_info"] = predictor.onnx_session_info + report["providers"] = {name: session.get_providers() for name, session in predictor._sessions.items()} + report["provider_options"] = {key: session.get_provider_options() for key, session in predictor._sessions.items()} + if args.device != "cpu" and args.backend == "torch": + import torch + + report["torch_peak_allocated_bytes"] = torch.cuda.max_memory_allocated() + report["torch_peak_reserved_bytes"] = torch.cuda.max_memory_reserved() + report["status"] = "complete" + except Exception as error: + report.update(status="failed", error=f"{type(error).__name__}: {error}") + raise + finally: + report["torch_imported"] = "torch" in sys.modules + report["peak_rss_kib_linux"] = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss + report["after"] = snapshot() + write_json(args.output / "report.json", report) + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + for name in ("bundle", "manifest", "root", "output"): + parser.add_argument(f"--{name}", type=Path, required=True) + parser.add_argument("--backend", choices=["torch", "onnx"], required=True) + parser.add_argument("--device", default="cpu") + parser.add_argument("--precision", choices=["auto", "fp32", "fp16", "bf16", "tf32"], default="fp32") + parser.add_argument("--tta", nargs="?", const=DEFAULT_TTA, choices=PROFILES, default="none") + parser.add_argument("--embeddings", action="store_true") + parser.add_argument("--threads", type=int, default=4) + parser.add_argument("--batches", nargs="+", type=int, default=[1, 8, 32]) + parser.add_argument("--presets", nargs="+", default=["full", "europe_v3"]) + parser.add_argument("--warmup", type=int, default=2) + parser.add_argument("--repeats", type=int, default=7) + parser.add_argument("--bank-size", type=int, default=32) + parser.add_argument("--seed", type=int, default=20260923) + parser.add_argument("--no-device-prefetch", action="store_true") + parser.add_argument("--stream-images", type=int, default=1024) + parser.add_argument("--stream-workers", type=int, default=4) + parser.add_argument("--read-workers", type=int, default=32) + parser.add_argument("--read-window", type=int, default=128) + parser.add_argument("--prefetch-batches", type=int, default=2) + parser.add_argument("--encoded-budget-mib", type=int, default=256) + args = parser.parse_args() + if args.bank_size < 1 or min(args.batches) < 1 or args.warmup < 1 or args.repeats < 3: + parser.error("Positive batches/warmup and at least three repeats required") + benchmark(args) + + +if __name__ == "__main__": + main() diff --git a/dev/releases/mambo_v3/benchmark_acceleration.py b/dev/releases/mambo_v3/benchmark_acceleration.py new file mode 100644 index 0000000..464c2fd --- /dev/null +++ b/dev/releases/mambo_v3/benchmark_acceleration.py @@ -0,0 +1,69 @@ +"""Fresh-process CPU/GPU timings for the qualified automatic deployment settings.""" + +import argparse +import json +import os +import subprocess +from pathlib import Path + +from deployment.mambo_deploy.augmentation import DEFAULT_TTA, PROFILES +from dev.releases.mambo_v3.evaluation_data import write_json + + +def run(args): + args.output.mkdir(parents=True, exist_ok=False) + report = {"status": "running", "completed": [], "commands": []} + shared = ["--bundle", str(args.bundle.resolve()), "--manifest", str(args.manifest.resolve()), "--root", str(args.root.resolve())] + shared += ["--tta", args.tta] + variants = [(backend, device) for device in ("cuda:0", "cpu") for backend in ("torch", "onnx")] + env = dict(os.environ, CUDA_VISIBLE_DEVICES="0", OMP_NUM_THREADS="4", MKL_NUM_THREADS="4", OPENBLAS_NUM_THREADS="1", PYTHONHASHSEED="0") + try: + for trial in range(3): + for backend, device in variants if trial != 1 else reversed(variants): + name = f"trial-{trial}-{backend}-{device.replace(':', '-')}" + command = [ + str(args.python), + "-m", + "dev.releases.mambo_v3.benchmark", + *shared, + "--backend", + backend, + "--device", + device, + "--precision", + "auto", + "--threads", + "4", + "--presets", + *args.presets, + "--batches", + "1", + "8", + ] + if device != "cpu": + command += ["32"] + command += ["--output", str((args.output / name).resolve())] + report["commands"].append(command) + write_json(args.output / "plan.json", report) + print(name, flush=True) + with (args.output / f"{name}.log").open("w") as stream: + subprocess.run(command, env=env, stdout=stream, stderr=subprocess.STDOUT, check=True) + if json.loads((args.output / name / "report.json").read_text())["status"] != "complete": + raise ValueError("Incomplete trial") + report["completed"].append(name) + write_json(args.output / "plan.json", report) + report["status"] = "complete" + except Exception as error: + report.update(status="failed", error=str(error)) + raise + finally: + write_json(args.output / "plan.json", report) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + for name in ("python", "bundle", "manifest", "root", "output"): + parser.add_argument("--" + name, type=Path, required=True) + parser.add_argument("--tta", nargs="?", const=DEFAULT_TTA, choices=PROFILES, default="none") + parser.add_argument("--presets", nargs="+", default=["north_europe", "europe", "full"]) + run(parser.parse_args()) diff --git a/dev/releases/mambo_v3/build_bundle.py b/dev/releases/mambo_v3/build_bundle.py new file mode 100644 index 0000000..33eb619 --- /dev/null +++ b/dev/releases/mambo_v3/build_bundle.py @@ -0,0 +1,152 @@ +"""Assemble verified release inputs into a relocatable, offline candidate bundle.""" + +import argparse +import hashlib +import json +import shutil +import tempfile +import tomllib +from pathlib import Path + +from deployment.mambo_deploy.preprocessing import RECIPE +from dev.releases.mambo_v3.audit import HERE, sha256 +from dev.releases.mambo_v3.package_download_metadata import distribution_readme + +INPUTS = { + "models/pytorch/best.pt": "models/pytorch/best.pt", + "models/onnx/model.onnx": "models/onnx-fp32/model.onnx", + "models/onnx/model.onnx.data": "models/onnx-fp32/model.onnx.data", + "models/onnx/manifest.json": "models/onnx-fp32/manifest.json", + "models/onnx-embedding/model.onnx": "viewer/browser-model/model.onnx", + "models/onnx-embedding/model.onnx.data": "viewer/browser-model/model.onnx.data", + "models/onnx-embedding/manifest.json": "viewer/browser-model/manifest.json", +} + + +def build(source, destination): + if destination.exists(): + raise FileExistsError(f"Refusing to replace existing bundle: {destination}") + inventory = tomllib.loads((HERE / "inventory.toml").read_text()) + presets = tomllib.loads((HERE / "preset-manifest.toml").read_text()) + definitions = tomllib.loads((HERE / "preset-definitions.toml").read_text()) + provenance = tomllib.loads((HERE / "model-provenance.toml").read_text()) + if sha256(HERE / "preset-definitions.toml") != presets["definitions_sha256"]: + raise ValueError("Preset manifest is stale; rebuild presets first") + files = {item["path"]: item for item in inventory["artifacts"]} + production = inventory["production"] + + destination.parent.mkdir(parents=True, exist_ok=True) + with tempfile.TemporaryDirectory(prefix="mambo-bundle-", dir=destination.parent) as temp: + root = Path(temp) / "bundle" + root.mkdir() + origins = {} + for target, relative in INPUTS.items(): + item = files[f"{production}/{relative}"] + path = source / item["path"] + if path.stat().st_size != item["size"] or sha256(path) != item["sha256"]: + raise ValueError(f"Input integrity mismatch: {path}") + output = root / target + output.parent.mkdir(parents=True, exist_ok=True) + shutil.copyfile(path, output) + origins[target] = item["url"] + export = json.loads((root / "models/onnx/manifest.json").read_text()) + metadata = export["classifiers"][0]["metadata"] + if metadata.get("prior") is not None or metadata.get("normalized") is not True: + raise ValueError("Unqualified head semantics") + mappings = metadata["cls2idx"] + labels = [sorted(mappings[str(rank)], key=mappings[str(rank)].get) for rank in range(3)] + parents = [[-1] * len(labels[rank]) for rank in range(2)] + for species, lineage in metadata["labels"].items(): + for rank in range(2): + child = mappings[str(rank)][lineage[rank]] + parent = mappings[str(rank + 1)][lineage[rank + 1]] + if parents[rank][child] not in (-1, parent): + raise ValueError(f"Ambiguous parent for {species}") + parents[rank][child] = parent + if any(-1 in rank for rank in parents): + raise ValueError("Incomplete class hierarchy") + + def write_json(relative, data): + (root / relative).write_text(json.dumps(data, indent=2) + "\n") + + write_json("classes.json", {"ranks": ["species", "genus", "family"], "labels": labels, "parents": parents}) + write_json("preprocessing.json", RECIPE) + regions = {} + (root / "regions").mkdir() + for name, item in presets["presets"].items(): + path = HERE / item["path"] + data = path.read_bytes() + if hashlib.sha256(data).hexdigest() != item["sha256"]: + raise ValueError(f"Preset integrity mismatch: {name}") + target = f"regions/{name}.classes" + (root / target).write_bytes(data) + regions[name] = { + **item, + "path": target, + "scope": definitions["presets"][name]["scope"], + "qualification_status": definitions["qualification_status"], + } + write_json("presets.json", regions) + shutil.copyfile(HERE / "preset-definitions.toml", root / "PRESET_DEFINITIONS.toml") + shutil.copyfile(HERE / "preset-updates.toml", root / "PRESET_UPDATES.toml") + (root / "README.md").write_text(distribution_readme()) + shutil.copyfile(HERE.parents[2] / "LICENSE", root / "CODE_LICENSE") + lines = [ + "# Presets", + "", + "V3 uses metadata row counts, including all splits, without further deduplication. " + "New lists require at least 3 regional and 25 global rows; legacy lists preserve their historical membership.", + "", + "| Preset | Species | Regional/global minimum rows | Scope |", + "|---|---:|---|---|", + ] + lines += [ + f"| {name} | {item['count']} | {item['minimum_regional_rows']}/{item['minimum_global_rows'] or 'none'} | {item['scope']} |" + for name, item in regions.items() + ] + lines += ["", "Exact filters: PRESET_DEFINITIONS.toml. `full` includes all 12,632 model species.", ""] + (root / "PRESETS.md").write_text("\n".join(lines)) + for filename in ("MODEL_CARD.md", "NOTICES.md", "MODEL_LICENSE.txt"): + shutil.copyfile(HERE / filename, root / filename) + shutil.copyfile(HERE / "model-provenance.toml", root / "MODEL_PROVENANCE.toml") + profiles = { + "torch": {"model": "models/pytorch/best.pt", "files": ["models/pytorch/best.pt"]}, + "onnx": {"model": "models/onnx/model.onnx", "files": ["models/onnx/model.onnx", "models/onnx/model.onnx.data"]}, + "onnx-embedding": { + "model": "models/onnx-embedding/model.onnx", + "files": ["models/onnx-embedding/model.onnx", "models/onnx-embedding/model.onnx.data"], + }, + } + manifest = { + "schema": "mambo-release-v1", + "model_id": "MAMBO_v3", + "artifact_revision": 3, + "package_version": "0.3.0", + "distribution": "mambo-v3", + "default_preset": "full", + "licenses": { + "code": "MIT", + "weights": provenance["weights_license"], + "weights_text": "MODEL_LICENSE.txt", + "notices": "NOTICES.md", + }, + "score_semantics": "hierarchical-leaf-logits-logsumexp-v1", + "profiles": profiles, + "embedding": {"dimension": 1280, "stage": "normalized preclassification"}, + "origins": origins, + "files": {}, + } + for path in sorted(root.rglob("*")): + if path.is_file(): + manifest["files"][path.relative_to(root).as_posix()] = {"size": path.stat().st_size, "sha256": sha256(path)} + write_json("release.json", manifest) + root.rename(destination) + print(destination) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("source", type=Path) + parser.add_argument("destination", type=Path) + args = parser.parse_args() + build(args.source, args.destination) diff --git a/dev/releases/mambo_v3/build_presets.py b/dev/releases/mambo_v3/build_presets.py new file mode 100644 index 0000000..1b2190d --- /dev/null +++ b/dev/releases/mambo_v3/build_presets.py @@ -0,0 +1,300 @@ +"""Build or verify release preset assets and their public scope catalogue.""" + +import argparse +import hashlib +import json +import tomllib +from pathlib import Path + +from dev.releases.mambo_v3.audit import HERE, sha256 + +ROOT = HERE.parents[2] + + +def select_region(table, rule): + """Union continent/country predicates, then apply explicit restrictions.""" + import pyarrow as pa + import pyarrow.compute as pc + + permitted = { + "label", + "scope", + "countries", + "continents", + "excluded_countries", + "state_province", + "country_state_restrictions", + "country_continent_restrictions", + "minimum_regional_rows", + "minimum_global_rows", + "minimum_latitude", + } + if unknown := set(rule) - permitted: + raise ValueError(f"Unknown region fields: {sorted(unknown)}") + mask = None + for key, column in (("countries", "countryCode"), ("continents", "continent")): + if values := rule.get(key): + part = pc.fill_null(pc.is_in(table[column], value_set=pa.array(values)), False) + mask = part if mask is None else pc.or_(mask, part) + if "minimum_latitude" in rule: + minimum = rule["minimum_latitude"] + if not -90 <= minimum <= 90: + raise ValueError("minimum_latitude must be within [-90, 90]") + text = pc.utf8_trim_whitespace(pc.cast(table["decimalLatitude"], pa.string())) + numeric = pc.match_substring_regex(text, r"^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?$") + latitude = pc.cast(pc.if_else(numeric, text, None), pa.float64()) + northern = pc.fill_null(pc.and_(pc.greater_equal(latitude, minimum), pc.less_equal(latitude, 90)), False) + mask = northern if mask is None else pc.and_(mask, northern) + if mask is None: + raise ValueError("Region requires countries, continents or minimum_latitude") + if values := rule.get("excluded_countries"): + mask = pc.and_(mask, pc.invert(pc.is_in(table["countryCode"], value_set=pa.array(values)))) + if values := rule.get("state_province"): + mask = pc.and_(mask, pc.fill_null(pc.is_in(table["stateProvince"], value_set=pa.array(values)), False)) + for country, states in rule.get("country_state_restrictions", {}).items(): + is_country = pc.fill_null(pc.equal(table["countryCode"], country), False) + in_state = pc.fill_null(pc.is_in(table["stateProvince"], value_set=pa.array(states)), False) + mask = pc.and_(mask, pc.or_(pc.invert(is_country), in_state)) + for country, continents in rule.get("country_continent_restrictions", {}).items(): + is_country = pc.fill_null(pc.equal(table["countryCode"], country), False) + in_continent = pc.fill_null(pc.is_in(table["continent"], value_set=pa.array(continents)), False) + mask = pc.and_(mask, pc.or_(pc.invert(is_country), in_continent)) + return table.filter(mask) + + +def ordered_membership(counts, minimum, vocabulary, global_counts=None, global_minimum=0): + if global_minimum and global_counts is None: + raise ValueError("Global qualification requires global counts") + chosen = { + species + for species, count in counts.items() + if count >= minimum and (not global_minimum or global_counts.get(species, 0) >= global_minimum) + } + if unknown := chosen - set(vocabulary): + raise ValueError(f"Selected species missing from model: {sorted(unknown)}") + return [label for label in vocabulary if label in chosen] + + +def recipe(rule): + parts = [] + for key, column in (("continents", "continent"), ("countries", "countryCode")): + if rule.get(key): + parts.append(f"`{column}` in `{', '.join(rule[key])}`") + result = " OR ".join(parts) + if "minimum_latitude" in rule: + latitude = f"valid `decimalLatitude` between {rule['minimum_latitude']} and 90 degrees inclusive" + result = f"({result}) AND {latitude}" if result else latitude + if rule.get("excluded_countries"): + result = f"({result}) AND country NOT in `{', '.join(rule['excluded_countries'])}`" + if rule.get("state_province"): + result = f"({result}) AND `stateProvince` in `{', '.join(rule['state_province'])}`" + for country, states in rule.get("country_state_restrictions", {}).items(): + result += f"; `{country}` records additionally require `stateProvince` in `{', '.join(states)}`" + for country, continents in rule.get("country_continent_restrictions", {}).items(): + result += f"; `{country}` records additionally require `continent` in `{', '.join(continents)}`" + return result + + +def build(metadata, evidence_root, write=False): + import pyarrow.parquet as pq + + construction = tomllib.loads((HERE / "construction.toml").read_text()) + source = construction["source"] + if metadata.stat().st_size != source["size"] or sha256(metadata) != source["sha256"]: + raise ValueError("Source Parquet differs from pinned metadata") + definitions_path = HERE / "preset-definitions.toml" + definitions = tomllib.loads(definitions_path.read_text()) + inventory = tomllib.loads((HERE / "inventory.toml").read_text()) + manifest_item = next(item for item in inventory["artifacts"] if item["path"].endswith("models/onnx-fp32/manifest.json")) + model_manifest = evidence_root / manifest_item["path"] + if sha256(model_manifest) != manifest_item["sha256"]: + raise ValueError("Model manifest differs from pinned source") + mapping = json.loads(model_manifest.read_text())["classifiers"][0]["metadata"]["cls2idx"]["0"] + if sorted(mapping.values()) != list(range(len(mapping))): + raise ValueError("Model species indices are not contiguous") + vocabulary = sorted(mapping, key=mapping.get) + table = pq.read_table(metadata, columns=["speciesKey", "countryCode", "continent", "stateProvince", "decimalLatitude"]) + if table.num_rows != source["rows"] or table["speciesKey"].null_count: + raise ValueError("Unexpected metadata rows or null species IDs") + regional_minimum = definitions["minimum_regional_rows"] + global_minimum = definitions["minimum_global_rows"] + global_counts = {row["values"]: row["counts"] for row in table["speciesKey"].value_counts().to_pylist()} + outputs = {} + manifest = [ + "schema_version = 2", + f'qualification_status = "{definitions["qualification_status"]}"', + f'source_sha256 = "{source["sha256"]}"', + f'model_manifest_sha256 = "{manifest_item["sha256"]}"', + f'definitions_sha256 = "{sha256(definitions_path)}"', + f"minimum_regional_rows = {regional_minimum}", + f"minimum_global_rows = {global_minimum}", + ] + documentation = [ + "# Model preset scope", + "", + "Generated release catalogue: edit `dev/releases/mambo_v3/preset-definitions.toml`, then use the build command below.", + "", + "These overlapping deployment presets aim to avoid most geographically nonsensical predictions while allowing species " + "that **can be found** in a region. They do not describe native or natural distributions, or where species should occur. " + "Recorded introduced species, migrants and vagrants are eligible: no native-status or establishment filter is applied. " + "Exclusion is not evidence that a species cannot occur there. Country codes are ISO alpha-2 metadata values.", + "", + "Each geographic preset applies the minimum row count shown below. " + "Counts use all existing splits, including held-out rows, without further deduplication. " + "Each row counts once even if it matches both a country and a continent predicate. " + "Full uses all model species without a regional threshold. Lists retain the model's species order.", + "", + f"**V3 qualification policy:** new presets require at least {regional_minimum} regional rows and " + f"at least {global_minimum} global rows for a species. These inclusive thresholds " + "reduce weak occurrence evidence but do not prove that records are independent " + "or correctly geolocated: multiple images may belong to one observation. The global count measures available examples, " + "not demonstrated model quality. Legacy presets retain their historical >25 regional-row rule with no new global gate.", + "", + f"In this pinned snapshot every model species has at least {min(global_counts.get(label, 0) for label in vocabulary)} " + f"global rows; {sum(global_counts.get(label, 0) < global_minimum for label in vocabulary)} model species fall below " + f"the global minimum of {global_minimum}. " + "V3 retains row counts to preserve the evaluated memberships. Counting distinct GBIF observations instead would " + "require a future preset revision and assessment of rare-species coverage. " + "The rule is reproducible, not a claim of ecological certainty.", + "", + "`europe` and `north_europe` preserve MAMBO_v2 membership while the V3 deployment default is global (`full`). " + "Choose `europe_v3` or `north_europe_v3` for the new occurrence thresholds with the same explicit geographic filters. " + "Parenthesized countries have ambiguous historical inclusion and leave the legacy list unchanged; " + "that equivalence does not establish equivalence at the lower threshold, so they are not silently added. " + "The deployment API discovers all lists from the bundle; Flemming evaluation favours legacy north_europe; " + "updated membership remains an explicit broader option.", + "", + "## Presets", + "", + "| ID | Species | Minimum regional rows | Minimum global rows | Selected rows | Geographic scope |", + "| --- | ---: | ---: | ---: | ---: | --- |", + f"| `full` | {len(vocabulary):,} | None | None | — | All species in the pinned model. |", + ] + summaries, memberships = {}, {} + for name, rule in definitions["presets"].items(): + region_minimum = rule.get("minimum_regional_rows", regional_minimum) + world_minimum = rule.get("minimum_global_rows", global_minimum) + selected = select_region(table, rule) + counts = {row["values"]: row["counts"] for row in selected["speciesKey"].value_counts().to_pylist()} + labels = ordered_membership(counts, region_minimum, vocabulary, global_counts, world_minimum) + regional_only = ordered_membership(counts, region_minimum, vocabulary) + if not labels: + raise ValueError(f"Empty preset: {name}") + data = ("\n".join(labels) + "\n").encode() + digest = hashlib.sha256(data).hexdigest() + if name in inventory["presets"] and digest != inventory["presets"][name]["sha256"]: + raise ValueError(f"Legacy preset changed: {name}") + outputs[HERE / "presets" / f"{name}.classes"] = data + manifest.extend( + [ + "", + f"[presets.{name}]", + f'path = "presets/{name}.classes"', + f"count = {len(labels)}", + f"minimum_regional_rows = {region_minimum}", + f"minimum_global_rows = {world_minimum}", + f"excluded_by_global_gate_after_regional = {len(regional_only) - len(labels)}", + f"selected_rows = {selected.num_rows}", + f"species_before_threshold = {len(counts)}", + f'sha256 = "{digest}"', + ] + ) + documentation.append( + f"| `{name}` | {len(labels):,} | {region_minimum} | {world_minimum or 'None'} | {selected.num_rows:,} | {rule['scope']} |" + ) + summaries[name] = len(labels) + memberships[name] = labels + changes = ["schema_version = 1", f'source_sha256 = "{source["sha256"]}"'] + documentation.extend( + [ + "", + "## Updated European presets", + "", + "| Updated ID | Legacy ID | Added species | Removed species |", + "| --- | --- | ---: | ---: |", + ] + ) + for legacy in ("europe", "north_europe"): + updated = f"{legacy}_v3" + old_set, new_set = set(memberships[legacy]), set(memberships[updated]) + added = [label for label in memberships[updated] if label not in old_set] + removed = [label for label in memberships[legacy] if label not in new_set] + changes.extend( + ["", f"[updates.{updated}]", f'legacy = "{legacy}"', f"added = {json.dumps(added)}", f"removed = {json.dumps(removed)}"] + ) + documentation.append(f"| `{updated}` | `{legacy}` | {len(added)} | {len(removed)} |") + documentation.extend( + [ + "", + "The [exact added/removed species IDs](../dev/releases/mambo_v3/preset-updates.toml) " + "retain model order. Geographic filters are unchanged; only qualification thresholds differ.", + ] + ) + outputs[HERE / "preset-updates.toml"] = ("\n".join(changes) + "\n").encode() + documentation.extend( + [ + "", + "## Species overlap", + "", + "![Pairwise species overlap and directional coverage](assets/preset-overlap.svg)", + "", + "Left: shared species divided by the union (Jaccard similarity). Right: the percentage of each row's species " + "also present in each column. Coverage reveals containment that Jaccard can hide for small lists. " + "These compare the qualified species lists, not geographic areas or prediction accuracy. Full is omitted because " + "it contains every preset. Labels show list sizes; both panels use percentages.", + "", + "Rebuild the figure and exact shared-count/percentage table with " + "`.venv/bin/python -m dev.releases.mambo_v3.plot_overlap`. " + "The companion [pairwise table](assets/preset-overlap.tsv) includes exact counts.", + "", + "## Exact metadata filters", + "", + ] + ) + for name, rule in definitions["presets"].items(): + documentation.extend([f"- **{name}** ({rule['label']}): {recipe(rule)}."]) + documentation.extend( + [ + "", + "## Interpretation and reproducibility", + "", + "Regional restrictions change score normalization; excluded truth labels must remain visible in evaluation.", + "", + "Blank geographic fields match no predicate unless another selected field matches.", + "", + "Run from the repository root with the existing PyArrow environment and the previously downloaded model manifest:", + "", + "```sh", + ".venv/bin/python -m dev.releases.mambo_v3.build_presets \\", + f" {source['path']} \\", + " --evidence-root local-evidence/mambo-v3", + "```", + "", + "The default checks committed assets, hashes, counts and this catalogue against fresh reconstruction. " + "Use `--write` after an intentional definition update to regenerate them. Legacy preset hashes must remain unchanged. " + "Published preset membership changes require a new release/revision and an added/removed-ID report.", + "", + "[Machine-readable definitions](../dev/releases/mambo_v3/preset-definitions.toml), " + "[generated hashes and counts](../dev/releases/mambo_v3/preset-manifest.toml), " + "[source provenance](../dev/releases/mambo_v3/construction.toml), " + "[legacy reconstruction details](../dev/releases/mambo_v3/README.md#regional-scope-and-construction).", + "", + ] + ) + outputs[HERE / "preset-manifest.toml"] = ("\n".join(manifest) + "\n").encode() + outputs[ROOT / "docs/model-presets.md"] = "\n".join(documentation).encode() + for path, data in outputs.items(): + if write: + path.write_bytes(data) + elif not path.exists() or path.read_bytes() != data: + raise ValueError(f"Preset output missing or stale: {path}") + return summaries + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("metadata", type=Path) + parser.add_argument("--evidence-root", type=Path, required=True) + parser.add_argument("--write", action="store_true") + args = parser.parse_args() + print(json.dumps(build(args.metadata, args.evidence_root, args.write), indent=2)) diff --git a/dev/releases/mambo_v3/check_download_install.py b/dev/releases/mambo_v3/check_download_install.py new file mode 100644 index 0000000..f9ee161 --- /dev/null +++ b/dev/releases/mambo_v3/check_download_install.py @@ -0,0 +1,61 @@ +"""Check the installed default model download, global scope, embeddings and offline reuse. + +Run with a fresh MAMBO_CACHE: python -I check_download_install.py IMAGE OUTPUT_JSON. +""" + +import hashlib +import importlib.metadata +import json +import os +import sys +from pathlib import Path + +import numpy as np +from mambo_deploy import Predictor, download + +image, output = map(Path, sys.argv[1:]) +cache = os.environ.get("MAMBO_CACHE") +if not cache or (Path(cache).exists() and any(Path(cache).iterdir())): + raise RuntimeError("Set MAMBO_CACHE to a new or empty directory to qualify actual downloads") +urls = [] +original = download.urlopen + + +def fetch(url, **kwargs): + urls.append(url) + return original(url, **kwargs) + + +download.urlopen = fetch +predictor = Predictor(batch_size=2) +assert predictor.preset == "full" +plain = predictor.predict(image) +embedded, vectors = predictor.predict_with_embeddings(image) +assert plain.labels == embedded.labels +assert vectors.shape == (1, 1280) and np.isfinite(vectors).all() +np.testing.assert_allclose(np.linalg.norm(vectors, axis=1), 1, atol=1e-4) +if not urls: + raise RuntimeError("No model assets were downloaded; automatic download was not qualified") +os.environ["MAMBO_OFFLINE"] = "1" + + +def deny(*args, **kwargs): + raise AssertionError("offline request attempted a download") + + +download.urlopen = deny +second = Predictor() +assert second.predict(image).labels == plain.labels +report = { + "automatic_download": True, + "urls": urls, + "offline_reuse": True, + "default_scope": predictor.preset, + "model_id": predictor.bundle.manifest["model_id"], + "bundle_sha256": predictor.bundle.manifest_sha256, + "image_sha256": hashlib.sha256(image.read_bytes()).hexdigest(), + "embeddings_shape": list(vectors.shape), + "packages": {n: importlib.metadata.version(n) for n in ("mambo-v3", "onnxruntime", "numpy", "pillow")}, +} +output.write_text(json.dumps(report, indent=2) + "\n") +print("PASS: actual public downloads, global defaults, embeddings and offline reuse") diff --git a/dev/releases/mambo_v3/check_legacy_fixture.py b/dev/releases/mambo_v3/check_legacy_fixture.py new file mode 100644 index 0000000..3da7ef3 --- /dev/null +++ b/dev/releases/mambo_v3/check_legacy_fixture.py @@ -0,0 +1,48 @@ +"""Exercise isolated prediction containers from the pinned legacy Git commit.""" + +import ast +import json +import subprocess +import tomllib +import warnings +from dataclasses import dataclass +from functools import lru_cache +from pathlib import Path + +import torch + +HERE = Path(__file__).resolve().parent + + +def check(): + fixture = tomllib.loads((HERE / "compatibility.toml").read_text()) + namespace = dict(torch=torch, dataclass=dataclass, lru_cache=lru_cache, json=json, warnings=warnings) + for path, names in ( + ("mini_trainer/classifier.py", {"PredictionItem", "BasePrediction"}), + ("mini_trainer/hierarchical/model.py", {"HierarchicalPredictionItem", "HierarchicalPrediction"}), + ): + source = subprocess.check_output(["git", "show", f"{fixture['legacy_commit']}:{path}"], cwd=HERE, text=True) + tree = ast.parse(source) + tree.body = [node for node in tree.body if isinstance(node, ast.ClassDef) and node.name in names] + if {node.name for node in tree.body} != names: + raise ValueError(f"Legacy container definitions missing: {path}") + exec(compile(tree, path, "exec"), namespace) + case = fixture["top1"] + prediction = namespace["HierarchicalPrediction"]( + [torch.tensor([rank]) for rank in case["logits"]], + cls2idx={str(rank): {label: index for index, label in enumerate(labels)} for rank, labels in enumerate(case["classes"])}, + ) + assert len(prediction) == 1 + assert list(prediction.indices.shape) == case["array_shape"] + assert list(prediction.confidence.shape) == case["array_shape"] + item = prediction[0] + assert item.label == tuple(case["labels"]) + assert item.index == tuple(case["indices"]) + assert isinstance(item.confidence, tuple) + torch.testing.assert_close(torch.tensor(item.confidence), torch.tensor(case["confidence"])) + assert prediction.to_dict() == [{"label": item.label, "confidence": item.confidence, "index": item.index}] + print("Pinned MAMBO_v2 top-1 container fixture passed (CPU; no model inference).") + + +if __name__ == "__main__": + check() diff --git a/dev/releases/mambo_v3/check_portable_install.py b/dev/releases/mambo_v3/check_portable_install.py new file mode 100644 index 0000000..0d057fb --- /dev/null +++ b/dev/releases/mambo_v3/check_portable_install.py @@ -0,0 +1,66 @@ +"""Qualify an installed ONNX-only runtime outside the checkout with a read-only bundle.""" + +import argparse +import hashlib +import importlib.util +import json +import os +import shutil +import socket +import sys +import tempfile +from pathlib import Path + + +def check(bundle, image, tta="none"): + if importlib.util.find_spec("torch") or importlib.util.find_spec("mini_trainer"): + raise AssertionError("Run this check in an ONNX-only environment without torch or mini_trainer") + from mambo_deploy import Predictor + from mambo_deploy.cli import run + + def deny_network(*args, **kwargs): + raise AssertionError("Inference attempted a Python network connection") + + socket.create_connection = deny_network + socket.socket.connect = deny_network + socket.socket.connect_ex = deny_network + original_cwd = Path.cwd() + original_argv = sys.argv + with tempfile.TemporaryDirectory(prefix="mambo-offline-") as directory: + root = Path(directory) + relocated = root / "read-only-bundle" + shutil.copytree(bundle, relocated) + files = [path for path in relocated.rglob("*") if path.is_file()] + before = {str(path.relative_to(relocated)): hashlib.sha256(path.read_bytes()).hexdigest() for path in files} + try: + for path in files: + path.chmod(0o444) + for path in [relocated, *[p for p in relocated.rglob("*") if p.is_dir()]]: + path.chmod(0o555) + os.chdir(root) + predictor = Predictor(relocated, model="europe", tta=tta) + plain = predictor.predict(image) + embedded, vectors = predictor.predict_with_embeddings(image) + assert plain.labels == embedded.labels and vectors.shape == (1, 1280) + sys.argv = ["mambo_predict", "-i", str(image), "--bundle", str(relocated), "--embeddings", "--tta", tta] + run() + assert (root / "results/mini_metric.csv").is_file() + assert (root / "results/embeddings.npy").is_file() + assert before == {str(path.relative_to(relocated)): hashlib.sha256(path.read_bytes()).hexdigest() for path in files} + return {"torch_absent": True, "relocated_read_only_bundle": True, "python_network_blocked": True, "cli": True, "tta": tta} + finally: + os.chdir(original_cwd) + sys.argv = original_argv + for path in [relocated, *[p for p in relocated.rglob("*") if p.is_dir()]]: + path.chmod(0o755) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("bundle", type=Path) + parser.add_argument("image", type=Path) + parser.add_argument("--tta", default="none") + parser.add_argument("--output", type=Path, required=True) + args = parser.parse_args() + report = check(args.bundle.resolve(), args.image.resolve(), args.tta) + args.output.write_text(json.dumps(report, indent=2) + "\n") diff --git a/dev/releases/mambo_v3/compact_tta.py b/dev/releases/mambo_v3/compact_tta.py new file mode 100644 index 0000000..a1837da --- /dev/null +++ b/dev/releases/mambo_v3/compact_tta.py @@ -0,0 +1,130 @@ +"""Bounded, compositional padding/rotation TTA qualification; no default changes.""" + +import argparse +import csv +import hashlib +import json +import time +from concurrent.futures import ThreadPoolExecutor +from functools import partial +from pathlib import Path + +import numpy as np +from PIL import Image + +from deployment.mambo_deploy import TTA, EdgePad, Predictor, View +from deployment.mambo_deploy.results import Prediction, hierarchy +from dev.releases.mambo_v3.evaluate import runtime_settings +from dev.releases.mambo_v3.evaluation_data import CSV_COLUMNS, canonical_rows, write_json + + +def rotate_pad(image, degrees, padding): + """Rotate on an expanded canvas once, then edge-pad before ordinary preprocessing.""" + rotated = Image.fromarray(image.transpose(1, 2, 0)).rotate( + degrees, resample=Image.Resampling.BILINEAR, expand=True, fillcolor=(124, 116, 104) + ) + return EdgePad(padding)(np.asarray(rotated).transpose(2, 0, 1)) + + +def policies(): + views = {"original": View(), "pad08": EdgePad(0.08), "pad15": EdgePad(0.15)} + parameters = {"original": {}, "pad08": {"padding": 0.08}, "pad15": {"padding": 0.15}} + for degrees, padding in [(d, p) for d in (-10, 10, -30, 30) for p in (0.08, 0.15)] + [(-30, 0.25), (30, 0.25)]: + name = f"rot{degrees}_pad{padding}" + parameters[name] = {"degrees": degrees, "padding": padding} + views[name] = partial(rotate_pad, **parameters[name]) + recipes = { + "none": ["original"], + "padded_scale": ["original", "pad08", "pad15"], + "wide_rotation_5": ["original", *[f"rot{d}_pad0.08" for d in (-10, 10, -30, 30)]], + "wide_rotation_pad15_5": ["original", *[f"rot{d}_pad0.15" for d in (-10, 10, -30, 30)]], + "wide_rotation_mixed_padding_5": ["original", "rot-10_pad0.15", "rot10_pad0.15", "rot-30_pad0.25", "rot30_pad0.25"], + "rotation10_3": ["original", "rot-10_pad0.08", "rot10_pad0.08"], + "rotation30_3": ["original", "rot-30_pad0.08", "rot30_pad0.08"], + "rotation10_pad15_3": ["original", "rot-10_pad0.15", "rot10_pad0.15"], + "rotation30_pad15_3": ["original", "rot-30_pad0.15", "rot30_pad0.15"], + "rotation30_pad25_3": ["original", "rot-30_pad0.25", "rot30_pad0.25"], + "mixed_3": ["original", "rot-10_pad0.08", "rot30_pad0.15"], + "mixed_mirrored_3": ["original", "rot10_pad0.08", "rot-30_pad0.15"], + } + return views, parameters, recipes + + +def run(args): + if args.output.exists(): + raise ValueError("Use a fresh output directory") + args.output.mkdir(parents=True) + samples = json.loads(args.samples.read_text()) + reporting = json.loads(args.reporting_ids.read_text()) + candidates = sorted(set(reporting) - set(samples["ids"])) + random_ids = sorted(map(int, np.random.default_rng(20260925).choice(candidates, args.count, replace=False))) + ids = samples["ids"] + random_ids + manifest = json.loads(args.manifest.read_text()) + records = [manifest["records"][i] for i in ids] + paths = [args.root / r["path"] for r in records] + for path, record in zip(paths, records, strict=True): + if hashlib.sha256(path.read_bytes()).hexdigest() != record["sha256"]: + raise ValueError(f"Changed image: {path}") + views, parameters, recipes = policies() + settings = runtime_settings(4, "torch") + predictor = Predictor(args.bundle, backend="torch", device="cuda:0", model="north_europe", batch_size=32, threads=4) + splits = { + "focus": [0, len(samples["focus"])], + "controls": [len(samples["focus"]), len(samples["ids"])], + "random": [len(samples["ids"]), len(ids)], + } + report = { + "inputs_sha256": { + str(path): hashlib.sha256(path.read_bytes()).hexdigest() for path in (args.samples, args.reporting_ids, args.manifest) + }, + "status": "running", + "ids": ids, + "records": records, + "splits": splits, + "seed": 20260925, + "runtime": settings, + "parameters": parameters, + "recipes": recipes, + "seconds_per_view": {}, + "selection": "Existing flagged cases and controls plus a disjoint uniform random reporting sample; exploratory only", + } + write_json(args.output / "report.json", report) + logits = {} + with ThreadPoolExecutor(max_workers=4) as pool: + for name, transform in views.items(): + predictor.tta = TTA((transform,), name) + start = time.monotonic() + logits[name] = np.concatenate([predictor._infer_batch(paths[i : i + 32], pool=pool)[0] for i in range(0, len(paths), 32)]) + report["seconds_per_view"][name] = time.monotonic() - start + print(name, round(report["seconds_per_view"][name], 2), flush=True) + report["effective_precision"] = predictor.effective_precision + for name, keys in recipes.items(): + raw = sum(logits[key] / np.float32(len(keys)) for key in keys) + folder = args.output / name + folder.mkdir() + for subset, (start, end) in splits.items(): + pred = Prediction(*hierarchy(raw[start:end], predictor.selected, predictor.bundle.classes)) + with (folder / f"{subset}.csv").open("w", newline="") as stream: + writer = csv.writer(stream) + writer.writerow(CSV_COLUMNS) + writer.writerows(canonical_rows(records[start:end], pred)) + if name == "rotation30_pad15_3": + predictor.tta = TTA(tuple(views[k] for k in keys), name) + actual = predictor._infer_batch(paths[:32], pool=pool)[0] + np.testing.assert_allclose(actual, raw[:32], rtol=0, atol=1e-6) + np.savez_compressed(args.output / "view_logits.npz", **logits) + report["aggregation_check"] = "Normal TTA API agrees at atol=1e-6 with identical batch shape" + report["status"] = "complete" + write_json(args.output / "report.json", report) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--bundle", type=Path, required=True) + parser.add_argument("--manifest", type=Path, required=True) + parser.add_argument("--root", type=Path, required=True) + parser.add_argument("--samples", type=Path, required=True) + parser.add_argument("--reporting-ids", type=Path, required=True) + parser.add_argument("--count", type=int, default=1024) + parser.add_argument("--output", type=Path, required=True) + run(parser.parse_args()) diff --git a/dev/releases/mambo_v3/compact_tta_metrics.py b/dev/releases/mambo_v3/compact_tta_metrics.py new file mode 100644 index 0000000..61d5db0 --- /dev/null +++ b/dev/releases/mambo_v3/compact_tta_metrics.py @@ -0,0 +1,82 @@ +"""Evaluate compact TTA qualification predictions using pinned mini_metrics.""" + +import argparse +import csv +import json +from pathlib import Path + +from dev.releases.mambo_v3.evaluation_data import write_json +from dev.releases.mambo_v3.metrics import REVISION, finite_json, require_pinned_metrics + + +def collect(root, study): + from mini_metrics.data import MetricDF + from mini_metrics.metrics import evaluate_file + + require_pinned_metrics() + report = json.loads((root / "report.json").read_text()) + if report["status"] != "complete": + raise ValueError("Incomplete inference") + thresholds = study["models"]["torch"]["thresholds"] + scores, transitions = {}, {} + for name in report["recipes"]: + scores[name], transitions[name] = {}, {} + for subset in report["splits"]: + path = root / name / f"{subset}.csv" + data = MetricDF.from_source(path) + scores[name][subset] = { + scope: finite_json( + evaluate_file( + data, + threshold=threshold, + simple=True, + hierarchical=False, + pattern=r"^(accuracy|micro_accuracy|precision|recall|f1|coverage)$", + verbose=0, + ) + ) + for scope, threshold in (("zero", 0), ("fixed", thresholds)) + } + with (root / "none" / f"{subset}.csv").open() as stream: + baseline = list(csv.DictReader(stream)) + with path.open() as stream: + candidate = list(csv.DictReader(stream)) + transitions[name][subset] = {} + for level, rank in enumerate(("species", "genus", "family")): + counts = dict.fromkeys( + ( + "correct", + "accepted_wrong", + "wrong_to_correct", + "correct_to_wrong", + "wrong_accepted_to_rejected", + "correct_accepted_to_rejected", + ), + 0, + ) + for a, b in zip(baseline, candidate, strict=True): + if a["level"] != str(level): + continue + assert (a["instance_id"], a["label"], a["level"]) == (b["instance_id"], b["label"], b["level"]) + ac, bc = a["prediction"] == a["label"], b["prediction"] == b["label"] + aa, ba = float(a["confidence"]) >= thresholds[level], float(b["confidence"]) >= thresholds[level] + for key, test in ( + ("correct", bc), + ("accepted_wrong", not bc and ba), + ("wrong_to_correct", not ac and bc), + ("correct_to_wrong", ac and not bc), + ("wrong_accepted_to_rejected", not ac and aa and not ba), + ("correct_accepted_to_rejected", ac and aa and not ba), + ): + counts[key] += int(test) + transitions[name][subset][rank] = counts + print(name, flush=True) + return {"revision": REVISION, "fixed_thresholds": thresholds, "scores": scores, "transitions": transitions} + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--root", type=Path, required=True) + parser.add_argument("--study", type=Path, default=Path("docs/assets/mambo-threshold-comparison.json")) + args = parser.parse_args() + write_json(args.root / "metrics.json", collect(args.root, json.loads(args.study.read_text()))) diff --git a/dev/releases/mambo_v3/compare_quality.py b/dev/releases/mambo_v3/compare_quality.py new file mode 100644 index 0000000..862d9db --- /dev/null +++ b/dev/releases/mambo_v3/compare_quality.py @@ -0,0 +1,60 @@ +"""Compare completed prediction runs by original image/rank identity, without score tolerances.""" + +import argparse +import csv +import json +from pathlib import Path + +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.releases.mambo_v3.evaluation_data import PRESETS, write_json + + +def read_rows(path): + with Path(path).open(newline="") as stream: + rows = {} + for row in csv.DictReader(stream): + key = (row["filename"], int(row["level"])) + if key in rows: + raise ValueError("Duplicate image/rank") + rows[key] = row + return rows + + +def compare(left, right, presets=PRESETS): + reports = [json.loads((path / "report.json").read_text()) for path in (left, right)] + if any(r["status"] != "complete" for r in reports) or reports[0]["sample_ids_sha256"] != reports[1]["sample_ids_sha256"]: + raise ValueError("Require completed runs with identical ordered sample hashes") + result = { + "left": str(left), + "right": str(right), + "reports_sha256": [file_hash(path / "report.json") for path in (left, right)], + "presets": {}, + } + for preset in presets: + a, b = [read_rows(path / preset / "mini_metric.csv") for path in (left, right)] + if set(a) != set(b): + raise ValueError("Sample identity mismatch") + for key in a: + if (a[key]["label"], a[key]["known_label"]) != (b[key]["label"], b[key]["known_label"]): + raise ValueError("Ground truth or class-list coverage mismatch") + result["presets"][preset] = {} + for rank in range(3): + keys = [key for key in a if key[1] == rank] + changes = sum(a[key]["prediction"] != b[key]["prediction"] for key in keys) + result["presets"][preset][str(rank)] = { + "images": len(keys), + "changed": changes, + "agreement": 1 - changes / len(keys), + } + return result + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("left", type=Path) + parser.add_argument("right", type=Path) + parser.add_argument("--output", type=Path, required=True) + args = parser.parse_args() + if args.output.exists(): + raise FileExistsError(args.output) + write_json(args.output, compare(args.left, args.right)) diff --git a/dev/releases/mambo_v3/comparison_charts.py b/dev/releases/mambo_v3/comparison_charts.py new file mode 100644 index 0000000..1bd315b --- /dev/null +++ b/dev/releases/mambo_v3/comparison_charts.py @@ -0,0 +1,417 @@ +"""Build readable release-comparison SVGs and their compact, auditable source data.""" + +import argparse +import csv +import hashlib +import json +import statistics +from collections import defaultdict +from pathlib import Path + +import numpy as np + +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.releases.mambo_v3.evaluation_data import write_json +from dev.releases.mambo_v3.metrics import METRIC_SCHEMA + +from .figure_export import save_figure + +REGIONS = ("north_europe", "europe", "full") +REGION_LABELS = ("Northern Europe", "Europe", "Global") +MODELS = ("v2", "v3-torch", "v3-onnx") +MODEL_LABELS = ("MAMBO v2 · PyTorch", "MAMBO v3 · PyTorch", "MAMBO v3 · ONNX") +COLORS = ("#7b629c", "#168b89", "#df8739") + + +def completed(path): + report = json.loads(path.read_text()) + if report["status"] != "complete": + raise ValueError(f"Incomplete evidence: {path}") + return report + + +def aggregate(args): + sources = {} + quality = [] + paired_path = args.v3_quality / "comparison.json" + paired = json.loads(paired_path.read_text()) + reports = [args.v3_quality / f"{backend}-cuda-0-prediction/report.json" for backend in ("torch", "onnx")] + if paired["reports_sha256"] != [file_hash(path) for path in reports]: + raise ValueError("V3 backend agreement evidence is stale") + if any(rank["changed"] for preset in paired["presets"].values() for rank in preset.values()): + raise ValueError("V3 backend labels differ; plot their quality separately") + sources[str(paired_path)] = file_hash(paired_path) + for model, directory, presets in ( + ("v2", args.v2_quality / "v2-full", REGIONS), + ("v3", args.v3_quality / "torch-cuda-0-prediction", (*REGIONS, "north_europe_v3", "europe_v3")), + ): + report = completed(directory / "report.json") + sources[str(directory / "report.json")] = file_hash(directory / "report.json") + for preset in presets: + path = directory / preset / "metrics.json" + metrics = json.loads(path.read_text()) + if file_hash(directory / preset / "mini_metric.csv") != metrics["source_sha256"]: + raise ValueError("Metric source has changed") + if metrics.get("metric_schema") != METRIC_SCHEMA: + raise ValueError("Recompute quality using the mini_metrics-only extractor") + sources[str(path)] = file_hash(path) + quality.append( + { + "model": model, + "preset": preset, + "ranks": metrics["ranks"], + "macro_f1_all": metrics["all"]["f1"]["0"], + "scores": {scope: metrics[scope] for scope in ("all", "known")}, + "metric_revision": metrics["mini_metrics_revision"], + "sample_ids_sha256": report["sample_ids_sha256"], + "list_sha256": report["lists"][preset]["sha256"], + } + ) + if len({r["sample_ids_sha256"] for r in quality}) != 1 or len({r["metric_revision"] for r in quality}) != 1: + raise ValueError("Quality populations or metric revisions differ") + for preset in REGIONS: + selected = [r for r in quality if r["preset"] == preset] + if len({r["list_sha256"] for r in selected}) != 1: + raise ValueError(f"Primary comparison lists differ: {preset}") + grouped = defaultdict(list) + resources = defaultdict(list) + components = defaultdict(list) + bank = None + for directory, added in ((args.v3_performance, False), (args.added_performance, True)): + plan = completed(directory / "plan.json") + for variant in plan["completed"]: + path = directory / variant / "report.json" + report = completed(path) + settings = report["settings"] + if settings.get("embeddings", False) or settings["threads"] != 4: + continue + old = report.get("release") == "MAMBO_v2" + model = "v2" if old else f"v3-{settings['backend']}" + device = settings["device"] + if old and device == "cpu" and not report.get("cpu_input_cast"): + raise ValueError("V2 CPU evidence must explicitly record the input adapter") + records = json.loads((path.parent / "samples.json").read_text()) if old else report["samples"] + if bank is None: + bank = records + if records != bank: + raise ValueError("Timing image banks differ") + if metrics.get("metric_schema") != METRIC_SCHEMA: + raise ValueError("Recompute quality using the mini_metrics-only extractor") + sources[str(path)] = file_hash(path) + for cell in report["cells"]: + grouped[(model, device, cell["preset"], cell["batch_size"])].append(cell["end_to_end"]) + if not old and device == "cuda:0" and cell["preset"] == "north_europe": + for stage in ("preprocessing", "prepared", "end_to_end"): + components[(model, cell["batch_size"], stage)].extend(cell[stage]["seconds"]) + # Use the full-list-containing sweep for comparable whole-process memory. + if old or not added: + resources[(model, device)].append( + { + "load_first_seconds": report["load_and_first_image_seconds"] + if old + else report["constructor_seconds"] + report["cold_first_image_seconds"], + "rss_mib": report["peak_rss_kib_linux"] / 1024, + "cuda_allocated_mib": report.get("torch_peak_allocated_bytes", 0) / 2**20 if model != "v3-onnx" else None, + "cuda_reserved_mib": report.get("torch_peak_reserved_bytes", 0) / 2**20 if model != "v3-onnx" else None, + } + ) + speed = [] + for (model, device, preset, batch), runs in sorted(grouped.items()): + if len(runs) != 3: + raise ValueError(f"Expected three timing trials: {(model, device, preset, batch)}") + values = [value for run in runs for value in run["seconds"]] + if len(values) != 21: + raise ValueError("Expected 21 timing observations") + medians = [run["median_seconds"] for run in runs] + speed.append( + { + "model": model, + "device": device, + "preset": preset, + "batch": batch, + "median_ms": statistics.median(values) * 1000, + "p95_ms": float(np.percentile(values, 95)) * 1000, + "trial_min_ms": min(medians) * 1000, + "trial_max_ms": max(medians) * 1000, + "images_per_second": batch / statistics.median(values), + } + ) + memory = [] + for (model, device), runs in sorted(resources.items()): + if len(runs) != 3: + raise ValueError("Expected three resource trials") + row = {"model": model, "device": device} + for key in runs[0]: + values = [r[key] for r in runs] + row[key] = None if values[0] is None else {"median": statistics.median(values), "min": min(values), "max": max(values)} + memory.append(row) + return { + "quality": quality, + "speed": speed, + "resources": memory, + "v3_gpu_components": [ + {"model": model, "batch": batch, "stage": stage, "observations": len(values), "median_ms": statistics.median(values) * 1000} + for (model, batch, stage), values in sorted(components.items()) + ], + "quality_policy": { + "accuracy": "Lead: mini_metrics accuracy (macro); micro_accuracy retained; all and known scopes at each rank", + "macro_f1": "mini_metrics all.f1.0; equal weight over union of truth and predicted species", + "threshold": 0, + "optimal": False, + "known_only": False, + "known_accuracy": "mini_metrics known.micro_accuracy; known_only=True; truth in active preset vocabulary", + }, + "sources_sha256": sources, + "timing_bank_sha256": hashlib.sha256(json.dumps(bank, sort_keys=True).encode()).hexdigest(), + "protocol": "Same laptop and image bank; original v2 preprocessing/CUDA autocast; " + "v2 CPU requires float32 input cast; v3 FP32; four threads; three trials; predictions only.", + } + + +def charts(data, output): + import matplotlib + + matplotlib.use("Agg") + import matplotlib.pyplot as plt + + plt.rcParams.update( + { + "font.family": "DejaVu Sans", + "font.size": 10, + "svg.fonttype": "none", + "svg.hashsalt": "mambo-release-comparison-v1", + "axes.spines.top": False, + "axes.spines.right": False, + "axes.titleweight": "bold", + "figure.facecolor": "white", + } + ) + output.mkdir(parents=True, exist_ok=True) + + def save(fig, name, note): + fig.text(0.02, 0.025, note, fontsize=9, color="#555555") + save_figure(fig, output, name) + + fig, axes = plt.subplots(2, 2, figsize=(12, 7.5)) + axes = axes.ravel() + x = np.arange(3) + for m, (model, label, color) in enumerate(zip(("v2", "v3"), ("MAMBO v2", "MAMBO v3 (both backends)"), COLORS, strict=False)): + rows = [next(r for r in data["quality"] if r["model"] == model and r["preset"] == region) for region in REGIONS] + values_by_rank = ( + [100 * r["ranks"]["species"]["macro_accuracy_all"] for r in rows], + [r["macro_f1_all"] for r in rows], + [100 * r["ranks"]["genus"]["macro_accuracy_all"] for r in rows], + [100 * r["ranks"]["family"]["macro_accuracy_all"] for r in rows], + ) + for index, (ax, values) in enumerate(zip(axes, values_by_rank, strict=True)): + bars = ax.bar(x + (m - 0.5) * 0.34, values, 0.34, label=label, color=color) + ax.bar_label(bars, fmt="%.3f" if index == 1 else "%.2f", padding=3, fontsize=9) + ax.set_xticks(x, REGION_LABELS) + ax.grid(axis="y", alpha=0.16) + ax.set_axisbelow(True) + axes[0].set(title="Species macro accuracy · all truth classes", ylabel="Mean class accuracy (%)", ylim=(0, 100)) + axes[1].set( + title="Species macro-F1 · truth ∪ predicted classes", + ylabel="Pinned mini_metrics macro-F1", + ylim=(0, max(r["macro_f1_all"] for r in data["quality"]) * 1.3), + ) + axes[2].set(title="Genus macro accuracy · all truth classes", ylabel="Mean class accuracy (%)", ylim=(0, 100)) + axes[3].set(title="Family macro accuracy · all truth classes", ylabel="Mean class accuracy (%)", ylim=(0, 100)) + axes[0].legend(loc="upper left", fontsize=9) + fig.suptitle("Flemming: MAMBO v2 versus v3", fontsize=16, fontweight="bold") + fig.tight_layout(rect=(0, 0.1, 1, 0.95)) + save( + fig, + "mambo-release-quality", + "58,640 images · threshold 0 (no abstention or optimization) · known_only=False · unknown truth included\n" + "V2: original CUDA autocast / BioCLIP recipe. V3: FP32 / release recipe. Real-world comparison of the two release pipelines.", + ) + + metric_panels = ( + ("accuracy", "Macro accuracy"), + ("precision", "Macro precision"), + ("recall", "Macro recall"), + ("f1", "Macro-F1"), + ("micro_accuracy", "Micro accuracy"), + ("theilU", "Theil U"), + ) + for scope in ("all", "known"): + fig, axes = plt.subplots(2, 3, figsize=(14, 7.5)) + for ax, (metric, title) in zip(axes.ravel(), metric_panels, strict=True): + for m, (model, label, color) in enumerate(zip(("v2", "v3"), ("MAMBO v2", "MAMBO v3 (both backends)"), COLORS, strict=False)): + rows = [next(r for r in data["quality"] if r["model"] == model and r["preset"] == region) for region in REGIONS] + values = [r["scores"][scope][metric]["0"] for r in rows] + bars = ax.bar(x + (m - 0.5) * 0.34, values, 0.34, label=label, color=color) + ax.bar_label(bars, fmt="%.3f", padding=3, fontsize=9) + ax.set(title=title, xticks=x, xticklabels=REGION_LABELS, ylim=(0, 1.1)) + ax.grid(axis="y", alpha=0.16) + ax.set_axisbelow(True) + fig.legend(*axes[0, 0].get_legend_handles_labels(), loc="upper center", bbox_to_anchor=(0.5, 0.94), ncol=2, frameon=False) + fig.suptitle("Species baseline · " + ("all Flemming truth" if scope == "all" else "truth within active vocabulary"), fontsize=16) + fig.tight_layout(rect=(0, 0.1, 1, 0.89)) + save( + fig, + f"mambo-release-species-{scope}", + "Pinned mini_metrics · threshold 0 · no optimization · " + ("58,640 images" if scope == "all" else "50,598 images") + "\n" + "Macro accuracy/recall: truth classes. Precision: predicted classes. F1: their union. " + "Coverage is 1.0; full rank tables supplied.", + ) + with (output / "mambo-release-metrics.csv").open("w", newline="") as stream: + writer = csv.writer(stream, lineterminator="\n") + writer.writerow( + [ + "model", + "preset", + "scope", + "rank", + "images", + "macro_accuracy", + "macro_precision", + "macro_recall", + "macro_f1", + "micro_accuracy", + "theilU", + "coverage", + ] + ) + for row in data["quality"]: + for scope in ("all", "known"): + for level, rank in enumerate(("species", "genus", "family")): + writer.writerow( + [ + row["model"], + row["preset"], + scope, + rank, + row["ranks"][rank]["images" if scope == "all" else "known_images"], + *[ + row["scores"][scope][key][str(level)] + for key in ("accuracy", "precision", "recall", "f1", "micro_accuracy", "theilU", "coverage") + ], + ] + ) + + fig, axes = plt.subplots(2, 2, figsize=(12, 7.8)) + axes = axes.ravel() + for ax, device, batch in zip(axes, ("cpu", "cuda:0", "cuda:0", "cuda:0"), (1, 1, 8, 32), strict=True): + for m, (model, label, color) in enumerate(zip(MODELS, MODEL_LABELS, COLORS, strict=True)): + rows = [ + next(r for r in data["speed"] if (r["model"], r["device"], r["preset"], r["batch"]) == (model, device, region, batch)) + for region in REGIONS + ] + values = [r["images_per_second"] for r in rows] + low = [batch * 1000 / r["trial_max_ms"] for r in rows] + high = [batch * 1000 / r["trial_min_ms"] for r in rows] + positions = x + (m - 1) * 0.25 + ax.bar(positions, values, 0.25, label=label, color=color) + ax.errorbar( + positions, (np.array(low) + high) / 2, yerr=(np.array(high) - low) / 2, fmt="none", ecolor="#333333", capsize=3, linewidth=1 + ) + for position, value, upper in zip(positions, values, high, strict=True): + ax.annotate( + f"{value:.1f}", + (position, max(value, upper)), + xytext=(0, 4), + textcoords="offset points", + ha="center", + va="bottom", + fontsize=8, + ) + ax.set_xticks(x, REGION_LABELS) + ax.grid(axis="y", alpha=0.16) + ax.set_axisbelow(True) + ax.margins(y=0.25) + axes[0].set(title="CPU · one image · v2 with input adapter", ylabel="End-to-end images / second") + axes[1].set(title="GPU · one image · higher is better", ylabel="End-to-end images / second") + axes[2].set(title="GPU · batch 8 · higher is better", ylabel="End-to-end images / second") + axes[3].set(title="GPU · batch 32 · higher is better", ylabel="End-to-end images / second") + gpu_limit = max(r["batch"] * 1000 / r["trial_min_ms"] for r in data["speed"] if r["device"] == "cuda:0") * 1.2 + for ax in axes[1:]: + ax.set_ylim(0, gpu_limit) + fig.legend(*axes[0].get_legend_handles_labels(), loc="upper center", bbox_to_anchor=(0.5, 0.95), ncol=3, frameon=False) + fig.suptitle("Laptop inference throughput · higher is better", fontsize=16, fontweight="bold") + fig.tight_layout(rect=(0, 0.1, 1, 0.90)) + save( + fig, + "mambo-release-speed", + "i7-12800H / RTX 3080 Ti Laptop · four CPU threads · three trials · decode, preprocessing and CPU results included\n" + "Whiskers: trial-median range. V2 CPU requires a float32 input cast; GPU uses published autocast. V3 uses FP32.", + ) + + fig, axes = plt.subplots(2, 2, figsize=(11, 7)) + for col, device in enumerate(("cpu", "cuda:0")): + for ax, key in zip(axes[:, col], ("rss_mib", "load_first_seconds"), strict=True): + rows = [next(r for r in data["resources"] if (r["model"], r["device"]) == (model, device))[key] for model in MODELS] + values = [r["median"] for r in rows] + bars = ax.bar( + np.arange(3), + values, + color=COLORS, + yerr=[[v - r["min"] for v, r in zip(values, rows, strict=True)], [r["max"] - v for v, r in zip(values, rows, strict=True)]], + capsize=4, + ) + ax.bar_label(bars, fmt="%.2f" if key == "load_first_seconds" else "%.0f", padding=6) + ax.set_xticks(np.arange(3), ("v2 + input cast" if device == "cpu" else "v2 PyTorch", "v3 PyTorch", "v3 ONNX")) + ax.grid(axis="y", alpha=0.16) + ax.set_axisbelow(True) + ax.margins(y=0.3) + if key == "load_first_seconds": + ax.set_yscale("log") + ax.set_ylabel("Seconds · logarithmic scale") + else: + ax.set_ylabel("Process peak RSS (MiB)") + axes[0, col].set_title(f"{'CPU' if device == 'cpu' else 'GPU'} execution · host memory") + axes[1, col].set_title("Local load + first completed prediction") + fig.suptitle("Memory and startup costs", fontsize=16, fontweight="bold") + fig.tight_layout(rect=(0, 0.1, 1, 0.95)) + save( + fig, + "mambo-release-resources", + "RSS includes loading and the batch sweep; host memory is not GPU VRAM. Whiskers: three-trial range.\n" + "Startup uses cached local files, excludes process/bootstrap setup and downloads; includes classifier initialization.", + ) + + fig, axes = plt.subplots(1, 2, figsize=(12, 3.8)) + for ax, field, title in zip( + axes, ("macro_accuracy_all", "micro_accuracy_all"), ("Macro species accuracy", "Micro species accuracy"), strict=True + ): + for i, region in enumerate(REGIONS[:2]): + rows = [next(r for r in data["quality"] if r["model"] == "v3" and r["preset"] == region + suffix) for suffix in ("", "_v3")] + old, new = [100 * r["ranks"]["species"][field] for r in rows] + delta = new - old + ax.barh(i, delta, height=0.5, color=COLORS[1]) + ax.text(0.02, i, f"{delta:+.2f} pp", va="center", fontsize=10) + ax.axvline(0, color="#555555", linewidth=1) + ax.set( + yticks=[0, 1], yticklabels=REGION_LABELS[:2], xlim=(-0.9, 0.25), xlabel="Updated minus legacy (percentage points)", title=title + ) + ax.invert_yaxis() + fig.tight_layout(rect=(0, 0.18, 1, 0.93)) + fig.suptitle("V3 updated lists: accuracy trade-offs on Flemming", fontweight="bold") + save( + fig, + "mambo-release-preset-delta", + "Northern Europe adds 222 candidate species; Europe adds 72. No removals. Choose lists by geographic scope.\n" + "All 58,640 images; threshold 0, no optimization. Both backends agree; filters were not tuned to Flemming.", + ) + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--data", type=Path, help="Render previously aggregated chart data without private raw predictions") + for name in ("v2-quality", "v3-quality", "v3-performance", "added-performance"): + parser.add_argument(f"--{name}", type=Path) + parser.add_argument("--output", type=Path, required=True) + args = parser.parse_args() + if args.data: + data = json.loads(args.data.read_text()) + else: + if any(getattr(args, name) is None for name in ("v2_quality", "v3_quality", "v3_performance", "added_performance")): + parser.error("Supply all four evidence directories or --data") + data = aggregate(args) + charts(data, args.output) + write_json(args.output / "mambo-release-comparison.json", data) + + +if __name__ == "__main__": + main() diff --git a/dev/releases/mambo_v3/compatibility.toml b/dev/releases/mambo_v3/compatibility.toml new file mode 100644 index 0000000..ff6c7f6 --- /dev/null +++ b/dev/releases/mambo_v3/compatibility.toml @@ -0,0 +1,17 @@ +legacy_commit = "32b3cd661778356b2e8c4cff5b10fa9061aa6f5d" +default_preset = "europe" +rank_order = ["species", "genus", "family"] + +# A small output contract for future adapters, captured from tagged classes. +[top1] +logits = [[0.0, 0.0, 0.6931471805599453], [1.0986122886681098, 0.0], [0.0]] +classes = [["s0", "s1", "s2"], ["g0", "g1"], ["f0"]] +labels = ["s2", "g0", "f0"] +indices = [2, 0, 0] +confidence = [0.5, 0.75, 1.0] +array_shape = [1, 1, 3] +item_container = "tuple" + +[csv] +columns = ["instance_id", "filename", "level", "label", "prediction", "confidence", "threshold", "known_label", "prediction_made", "correct"] +# Recorded archive schema; establish CLI adapter equivalence before certification. diff --git a/dev/releases/mambo_v3/composed_full.py b/dev/releases/mambo_v3/composed_full.py new file mode 100644 index 0000000..ca81947 --- /dev/null +++ b/dev/releases/mambo_v3/composed_full.py @@ -0,0 +1,111 @@ +"""Stream three composed TTA policies from seven shared views per image.""" + +import argparse +import csv +import time +from concurrent.futures import ThreadPoolExecutor +from contextlib import ExitStack +from functools import partial +from pathlib import Path + +import numpy as np + +from deployment.mambo_deploy import TTA, Predictor +from deployment.mambo_deploy.preprocessing import _rgb, preprocess +from deployment.mambo_deploy.results import Prediction, hierarchy +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.releases.mambo_v3.compact_tta import policies +from dev.releases.mambo_v3.evaluate import runtime_settings +from dev.releases.mambo_v3.evaluation_data import CSV_COLUMNS, canonical_rows, load_records, write_json + +SHORTLIST = ("rotation30_pad15_3", "rotation30_pad25_3", "wide_rotation_mixed_padding_5") + + +def prepare(image, transform): + return preprocess(transform(image.copy())) + + +def collect(args): + args.output.mkdir(parents=True, exist_ok=False) + _, records = load_records(args.manifest, args.root, args.count, 20260923) + views, parameters, all_recipes = policies() + recipes = {name: all_recipes[name] for name in SHORTLIST} + keys = list(dict.fromkeys(key for names in recipes.values() for key in names)) + report = { + "status": "running", + "backend": args.backend, + "samples": len(records), + "processed": 0, + "recipes": recipes, + "parameters": {key: parameters[key] for key in keys}, + "manifest_sha256": file_hash(args.manifest), + "bundle_sha256": file_hash(args.bundle / "release.json"), + "runner_sha256": file_hash(__file__), + "transforms_sha256": file_hash(Path(__file__).with_name("compact_tta.py")), + "runtime": runtime_settings(4, args.backend), + "batch_size": args.batch_size, + } + predictor = Predictor(args.bundle, backend=args.backend, device="cuda:0", model="north_europe", threads=4, batch_size=args.batch_size) + report["effective_precision"] = predictor.effective_precision + report["runtime"].update( + precision=predictor.effective_precision, + autocast=predictor.effective_precision in ("fp16", "bf16"), + tf32=predictor.effective_precision == "tf32", + ) + start = time.perf_counter() + write_json(args.output / "report.json", report) + try: + with ExitStack() as stack: + pool = stack.enter_context(ThreadPoolExecutor(max_workers=4)) + writers = {} + for name in recipes: + folder = args.output / name + folder.mkdir() + stream = stack.enter_context((folder / "mini_metric.csv").open("w", newline="")) + writers[name] = csv.writer(stream) + writers[name].writerow(CSV_COLUMNS) + for offset in range(0, len(records), args.batch_size): + batch = records[offset : offset + args.batch_size] + paths = [args.root / r["path"] for r in batch] + for path, record in zip(paths, batch, strict=True): + if file_hash(path) != record["sha256"]: + raise ValueError(f"Changed image: {path}") + decoded = list(pool.map(_rgb, paths)) + raw = {} + for key in keys: + prepared = np.stack(list(pool.map(partial(prepare, transform=views[key]), decoded))) + raw[key] = predictor._infer(prepared, False)[0].astype(np.float32) + if not np.isfinite(raw[key]).all(): + raise ValueError("Nonfinite logits") + for name, names in recipes.items(): + averaged = sum(raw[key] / np.float32(len(names)) for key in names) + prediction = Prediction(*hierarchy(averaged, predictor.selected, predictor.bundle.classes)) + writers[name].writerows(canonical_rows(batch, prediction, offset)) + if offset == 0: + predictor.tta = TTA(tuple(views[key] for key in names), name) + check = predictor._infer_batch(paths, pool=pool)[0] + np.testing.assert_allclose(check, averaged, rtol=0, atol=1e-6) + report["processed"] = offset + len(batch) + if offset % (args.batch_size * 25) == 0: + report["elapsed_seconds"] = time.perf_counter() - start + write_json(args.output / "report.json", report) + print(args.backend, report["processed"], len(records), round(report["elapsed_seconds"], 1), flush=True) + report.update(status="complete", csv_sha256={n: file_hash(args.output / n / "mini_metric.csv") for n in recipes}) + if args.backend == "onnx": + report["providers"] = {k: s.get_providers() for k, s in predictor._sessions.items()} + except Exception as error: + report.update(status="failed", error=f"{type(error).__name__}: {error}") + raise + finally: + report["elapsed_seconds"] = time.perf_counter() - start + write_json(args.output / "report.json", report) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + for name in ("bundle", "manifest", "root", "output"): + parser.add_argument(f"--{name}", type=Path, required=True) + parser.add_argument("--backend", choices=("torch", "onnx"), required=True) + parser.add_argument("--batch-size", type=int, default=32) + parser.add_argument("--count", type=int) + collect(parser.parse_args()) diff --git a/dev/releases/mambo_v3/composed_metrics.py b/dev/releases/mambo_v3/composed_metrics.py new file mode 100644 index 0000000..379e31f --- /dev/null +++ b/dev/releases/mambo_v3/composed_metrics.py @@ -0,0 +1,190 @@ +"""Full composed-TTA calibration, matched-coverage diagnostics and support truncation.""" + +import argparse +import csv +import json +from collections import Counter +from pathlib import Path + +import numpy as np + +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.releases.mambo_v3.composed_full import SHORTLIST +from dev.releases.mambo_v3.evaluation_data import write_json +from dev.releases.mambo_v3.metrics import REVISION, finite_json, require_pinned_metrics +from dev.releases.mambo_v3.tail_report import eligible_classes +from dev.releases.mambo_v3.threshold_report import identity + + +def matched_thresholds(data, coverage): + """Label-free reporting-score operating points; never used as deployment calibration.""" + return [float(np.quantile(data.confidence[data.level == level], 1 - coverage, method="higher")) for level in range(3)] + + +def collect(args): + from mini_metrics.data import MetricDF + from mini_metrics.metrics import MacroAccuracy, MacroF1, MacroPrecision, MacroRecall, OptimalConfidenceThreshold, evaluate_file + + require_pinned_metrics() + args.output.mkdir(parents=True, exist_ok=True) + baseline = json.loads(args.baseline.read_text()) + sources = {model: row["source"] for model, row in baseline["models"].items()} + for backend in args.backends: + folder = args.root / backend + report = json.loads((folder / "report.json").read_text()) + if report["status"] != "complete" or report["samples"] != 58640: + raise ValueError(f"Incomplete full run: {folder}") + for recipe in SHORTLIST: + source = folder / recipe / "mini_metric.csv" + if file_hash(source) != report["csv_sha256"][recipe]: + raise ValueError("Changed prediction source") + sources[f"{backend}:{recipe}"] = str(source) + class_metrics = {"accuracy": MacroAccuracy(), "precision": MacroPrecision(), "recall": MacroRecall(), "f1": MacroF1()} + groups, result = ( + {}, + { + "revision": REVISION, + "calibration": "MacroF1 eps=0.01 use_quantiles=True n_bootstraps=0; shared stratified seed42 90/10 report/calibration split", + "matched_coverage": ( + "Label-free quantiles of reporting confidences; realized coverage computed by mini_metrics, ties retained. " + "Diagnostic only, not deployable calibration." + ), + "support": ( + "Full per-model class domain; >5 common truth and accepted-prediction support " + "across all compared models separately per operating point" + ), + "models": {}, + }, + ) + expected = baseline["models"]["torch"]["identities"] + for model, source in sources.items(): + digest = file_hash(source) + if model in baseline["models"] and digest != baseline["models"][model]["source_sha256"]: + raise ValueError("Changed baseline predictions") + data = MetricDF.from_source(source) + reporting, calibration = data.split((0.9, 0.1), strata=("label",), seed=42) + identities = {"full": identity(data), "report": identity(reporting), "calibration": identity(calibration)} + if identities != expected: + raise ValueError(f"Changed evaluation populations: {model}") + if model in baseline["models"]: + thresholds = baseline["models"][model]["thresholds"] + else: + selected = OptimalConfidenceThreshold(crit=MacroF1, eps=0.01, use_quantiles=True, n_bootstraps=0)(calibration, verbose=0) + thresholds = [float(selected[k]) for k in range(3)] + row = { + "source": source, + "source_sha256": digest, + "identities": identities, + "report_images": len(set(reporting.instance_id)), + "calibration_images": len(set(calibration.instance_id)), + "thresholds": thresholds, + "operating_points": {}, + } + points = {"zero": [0.0] * 3, "optimized": thresholds} + points.update({f"coverage_{int(c * 100)}": matched_thresholds(reporting, c) for c in (0.7, 0.8, 0.9)}) + groups[model] = {} + for scope, vector in points.items(): + df = reporting.with_threshold(vector) + score = evaluate_file( + reporting, + threshold=vector, + simple=True, + hierarchical=False, + pattern=r"^(accuracy|micro_accuracy|precision|recall|f1|coverage|theilU)$", + verbose=0, + ) + if model in baseline["models"] and scope in ("zero", "optimized"): + previous = baseline["models"][model][f"report_{scope}"] + for metric, levels in score.items(): + for level, value in levels.items(): + if not np.isclose(value, previous[metric][str(level)], atol=1e-12, rtol=0, equal_nan=True): + raise ValueError(f"Baseline changed: {model}/{scope}/{metric}/{level}") + row["operating_points"][scope] = {"thresholds": vector, "full": finite_json(score), "tail": {}} + per_class = {name: metric(df, aggregate=False, verbose=0) for name, metric in class_metrics.items()} + groups[model][scope] = {} + for level in range(3): + part = df[df.level == level] + groups[model][scope][level] = { + "truth": Counter(map(str, part.label)), + "predicted": Counter(map(str, part.prediction[part.prediction_made])), + "metrics": {name: values[level] for name, values in per_class.items()}, + } + if model.startswith("onnx:"): + native = model.replace("onnx:", "torch:", 1) + if native in result["models"]: + vector = result["models"][native]["thresholds"] + row["native_threshold_alignment"] = { + "thresholds": vector, + "scores": finite_json( + evaluate_file( + reporting, + threshold=vector, + simple=True, + hierarchical=False, + pattern=r"^(accuracy|micro_accuracy|precision|recall|f1|coverage|theilU)$", + verbose=0, + ) + ), + } + result["models"][model] = row + write_json(args.output / f"{model.replace(':', '-')}.json", row) + print(model, thresholds, flush=True) + for scope in ("zero", "optimized", "coverage_70", "coverage_80", "coverage_90"): + for level in range(3): + domains = [eligible_classes(g[scope][level]["truth"], g[scope][level]["predicted"], 5) for g in groups.values()] + selected = set.intersection(*domains) + for model, g in groups.items(): + item = g[scope][level] + result["models"][model]["operating_points"][scope]["tail"][str(level)] = { + "classes": sorted(selected), + "class_count": len(selected), + "truth_images": sum(item["truth"][k] for k in selected), + "accepted_predictions": sum(item["predicted"][k] for k in selected), + "metrics": { + name: float(metric._aggregate_groups({k: v for k, v in item["metrics"][name].items() if str(k) in selected})) + if selected + else None + for name, metric in class_metrics.items() + }, + } + result = finite_json(result) + write_json(args.output / "composed-comparison.json", result) + export_csv(result, args.output / "composed-comparison.csv") + return result + + +def export_csv(data, path): + rows = [] + for model, result in data["models"].items(): + for scope, point in result["operating_points"].items(): + for k, rank in enumerate(("species", "genus", "family")): + level = str(k) + tail = point["tail"][level] + rows.append( + { + "model": model, + "scope": scope, + "rank": rank, + "threshold": point["thresholds"][k], + "report_images": result["report_images"], + "coverage": point["full"]["coverage"][level], + **{f"full_{name}": levels[level] for name, levels in point["full"].items() if name != "coverage"}, + **{f"tail_{name}": value for name, value in tail["metrics"].items()}, + "tail_classes": tail["class_count"], + "tail_truth_images": tail["truth_images"], + "tail_accepted_predictions": tail["accepted_predictions"], + } + ) + with path.open("w", newline="") as stream: + writer = csv.DictWriter(stream, fieldnames=list(rows[0]), lineterminator="\n") + writer.writeheader() + writer.writerows(rows) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--root", type=Path, required=True) + parser.add_argument("--baseline", type=Path, default=Path("docs/assets/mambo-threshold-comparison.json")) + parser.add_argument("--backends", nargs="+", choices=("torch", "onnx"), default=["torch", "onnx"]) + parser.add_argument("--output", type=Path, required=True) + collect(parser.parse_args()) diff --git a/dev/releases/mambo_v3/composed_report.py b/dev/releases/mambo_v3/composed_report.py new file mode 100644 index 0000000..578bf13 --- /dev/null +++ b/dev/releases/mambo_v3/composed_report.py @@ -0,0 +1,86 @@ +"""Exploratory composed-TTA figure from retained metric evidence.""" + +import argparse +import json +from pathlib import Path + +from .figure_export import save_figure + +SERIES = ( + ("v2", "MAMBO v2", "#8064a2"), + ("torch", "V3 single view", "#777777"), + ("torch-tta", "Previous padded scale", "#098e92"), + ("torch:rotation30_pad15_3", "±30° / pad15 · 3 views", "#2d6cc0"), + ("torch:rotation30_pad25_3", "±30° / pad25 · 3 views", "#e8872e"), + ("torch:wide_rotation_mixed_padding_5", "Mixed padding · 5 views", "#98440b"), +) + + +def render(data, output): + import matplotlib + + matplotlib.use("Agg") + import matplotlib.pyplot as plt + from matplotlib.lines import Line2D + + plt.rcParams.update({"svg.fonttype": "none", "svg.hashsalt": "composed-tta-full-v1"}) + output.mkdir(parents=True, exist_ok=True) + fig, axes = plt.subplots(3, 3, figsize=(16, 12)) + for level, rank in enumerate(("species", "genus", "family")): + k = str(level) + for i, (model, label, color) in enumerate(SERIES): + points = data["models"][model]["operating_points"] + for col, scope in enumerate(("zero", "optimized")): + point = points[scope] + a, b = point["full"]["f1"][k], point["tail"][k]["metrics"]["f1"] + axes[level, col].plot([a, b], [i, i], color=color, alpha=0.5) + axes[level, col].scatter(a, i, facecolors="white", edgecolors=color, s=45) + axes[level, col].scatter(b, i, color=color, s=45) + cov = [points[f"coverage_{c}"]["full"]["coverage"][k] * 100 for c in (70, 80, 90)] + score = [points[f"coverage_{c}"]["full"]["f1"][k] for c in (70, 80, 90)] + axes[level, 2].plot(cov, score, marker="o", color=color, label=label) + for col, setting in enumerate(("Unthresholded", "Calibrated")): + axes[level, col].set( + title=f"{rank.title()} · {setting} Macro-F1", + xlim=(0, 1), + ylim=(len(SERIES) - 0.4, -0.6), + yticks=range(len(SERIES)), + yticklabels=[s[1] for s in SERIES] if col == 0 else [], + ) + axes[level, 2].set(title=f"{rank.title()} · Matched-coverage full F1", xlabel="Realized coverage (%)", ylabel="Macro-F1") + for ax in axes[level]: + ax.grid(alpha=0.15) + ax.spines[["top", "right"]].set_visible(False) + fig.suptitle("Composed TTA · shared 52,788-image reporting partition · native PyTorch", fontsize=16) + fig.legend( + handles=[ + Line2D([], [], marker="o", color="gray", markerfacecolor="white", linestyle="none", label="Full support"), + Line2D([], [], marker="o", color="gray", linestyle="none", label="Support >5 in truth and accepted predictions"), + ], + loc="upper center", + bbox_to_anchor=(0.5, 0.96), + ncol=2, + title="Fill = averaging domain (left and middle columns)", + ) + fig.text( + 0.03, + 0.02, + "Calibration: 5,852 separate images, per-recipe/rank mini_metrics Macro-F1 thresholds. All truth; legacy northern Europe.\n" + "Matched-coverage points use label-free reporting confidences; actual coverage includes score ties. " + "Lines are guides, not fitted curves.\n" + "Support >5 classes are common across all compared native/ONNX pipelines within each operating point; no evaluation rows removed.\n" + "Recipe exploration used this dataset. These are descriptive comparisons, " + "not independent validation; CSV includes all metrics/backends.", + fontsize=10, + ) + fig.tight_layout(rect=(0, 0.11, 1, 0.91)) + save_figure(fig, output, "mambo-composed-tta", dpi=150) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--data", type=Path, required=True) + parser.add_argument("--output", type=Path, required=True) + args = parser.parse_args() + data = json.loads(args.data.read_text()) + render(data, args.output) diff --git a/dev/releases/mambo_v3/construction.toml b/dev/releases/mambo_v3/construction.toml new file mode 100644 index 0000000..2c3f6ac --- /dev/null +++ b/dev/releases/mambo_v3/construction.toml @@ -0,0 +1,31 @@ +schema_version = 1 + +[source] +path = "examples/global_lepi/0032836-250426092105405_processing_metadata_postprocessed_quality_filtered.parquet" +size = 1071961943 +sha256 = "094afa30bab25daad6583d33055bf7c61bcbade2f7f3c5e212d6b16fbf4429fe" +rows = 6329994 +species_column = "speciesKey" +counting_unit = "metadata row; no additional deduplication" +splits = "all existing set values (0 through 9), including held-out rows" + +[europe] +column = "continent" +values = ["EUROPE"] +exclusive_minimum_rows = 25 +selected_rows = 2079617 +species_before_threshold = 3132 +species_after_threshold = 3014 +status = "Exact membership and retained per-species count-table match" + +[north_europe] +column = "countryCode" +values = ["DE", "DK", "EE", "FI", "LT", "LV", "NL", "NO", "PL", "SE"] +exclusive_minimum_rows = 25 +selected_rows = 768497 +species_before_threshold = 2291 +species_after_threshold = 1977 +status = "Exact membership reconstruction; original country expression is not uniquely identifiable" +# Adding any subset of these codes, including all together, leaves membership unchanged. +membership_neutral_additions = ["IE", "IS", "AX", "FO", "GG", "IM", "JE", "SJ"] +# Adding GB to the reconstructed base introduces 29 species absent from the frozen preset. diff --git a/dev/releases/mambo_v3/defaults_report.py b/dev/releases/mambo_v3/defaults_report.py new file mode 100644 index 0000000..3a8cde1 --- /dev/null +++ b/dev/releases/mambo_v3/defaults_report.py @@ -0,0 +1,169 @@ +"""Historical padded-scale evidence: regional effect, complete metrics and provenance.""" + +import argparse +import csv +import json +from pathlib import Path + +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.releases.mambo_v3.acceleration_report import METRICS, aggregate +from dev.releases.mambo_v3.comparison_charts import completed +from dev.releases.mambo_v3.evaluation_data import write_json +from dev.releases.mambo_v3.metrics import REVISION + +from .figure_export import save_figure + +SERIES = ( + ("v2", "MAMBO v2", "#8064a2"), + ("torch", "V3 PyTorch", "#098e92"), + ("onnx", "V3 ONNX", "#e8872e"), + ("torch-tta", "V3 PyTorch + TTA", "#125351"), + ("onnx-tta", "V3 ONNX + TTA", "#98440b"), +) + + +def collect(args): + baseline = json.loads(args.baseline.read_text()) + reference = json.loads(args.reference.read_text()) + if baseline["reference"] != reference: + raise ValueError("Baseline uses a different V2/FP32 reference") + for backend in ("torch", "onnx"): + report = completed(args.quality / f"{backend}-cuda-0-prediction" / "report.json") + if report["arguments"].get("tta") != "padded_scale" or report["samples"] != 58640: + raise ValueError("Expected full-data padded-scale TTA") + for name in completed(args.performance / "plan.json")["completed"]: + report = completed(args.performance / name / "report.json") + if report["settings"].get("tta") != "padded_scale": + raise ValueError("Expected padded-scale TTA timings") + augmented = aggregate(args) + for key in ("bundle_sha256", "manifest_sha256"): + if baseline[key] != augmented[key]: + raise ValueError("Baseline and TTA artifacts differ") + data = { + "tta": "padded_scale: original + 8% / 15% edge padding; FP32 mean leaf logits", + "selection": "Chosen for highest subset macro accuracy and lower cost than D4/padded rotations; not optimal for every metric.", + "metric_revision": REVISION, + "policy": "threshold=0; optimal=False; simple=True; hierarchical=False", + "quality": [r for r in reference["quality"] if r["model"] == "v2"] + baseline["quality"], + "speed": [ + {**r, "trial_min_ips": r["batch"] * 1000 / r["trial_max_ms"], "trial_max_ips": r["batch"] * 1000 / r["trial_min_ms"]} + for r in reference["speed"] + if r["model"] == "v2" + ] + + baseline["speed"], + "resources": baseline["resources"].copy(), + "sources_sha256": { + str(args.baseline): file_hash(args.baseline), + **augmented["sources_sha256"], + }, + "bundle_sha256": baseline["bundle_sha256"], + "manifest_sha256": baseline["manifest_sha256"], + "timing_bank_sha256": reference["timing_bank_sha256"], + } + for row in reference["resources"]: + if row["model"] == "v2": + data["resources"].append( + { + "model": "v2", + "device": row["device"], + "rss_mib": row["rss_mib"]["median"], + "load_first_seconds": row["load_first_seconds"]["median"], + "allocated_mib": row["cuda_allocated_mib"]["median"] if row["device"] != "cpu" else None, + } + ) + for section in ("quality", "speed", "resources"): + data[section].extend({**r, "model": r["model"] + "-tta"} for r in augmented[section]) + return data + + +def render(data, output): + import matplotlib + + matplotlib.use("Agg") + import matplotlib.pyplot as plt + import numpy as np + + output.mkdir(parents=True, exist_ok=True) + plt.rcParams.update({"svg.fonttype": "none", "svg.hashsalt": "mambo-defaults-v1", "axes.spines.top": False, "axes.spines.right": False}) + + scores = {(r["model"], r["preset"]): r["scores"]["all"] for r in data["quality"]} + rank_metrics = (("accuracy", "Macro accuracy (%)", 100), ("f1", "Macro-F1", 1)) + fig, axes = plt.subplots(3, 2, figsize=(11, 9)) + steps = (("full", "europe"), ("europe", "north_europe")) + for level, rank in enumerate(("species", "genus", "family")): + for col, (metric, _, factor) in enumerate(rank_metrics): + ax = axes[level, col] + for step, (source, target) in enumerate(steps): + changes = np.array( + [ + (scores[model, target][metric][str(level)] - scores[model, source][metric][str(level)]) * factor + for model, _, _ in SERIES + ] + ) + median = float(np.median(changes)) + ax.hlines(step, changes.min(), changes.max(), color="0.55", linewidth=3) + for i, (_, label, color) in enumerate(SERIES): + ax.scatter(changes[i], step + (i - 2) * 0.055, color=color, s=35, label=label if step == 0 else None) + ax.scatter(median, step, marker="|", s=200, color="black", zorder=5) + ax.annotate( + f"median {median:+.2f}" if factor == 100 else f"median {median:+.4f}", + (median, step), + xytext=(0, 22), + textcoords="offset points", + ha="center", + fontsize=9, + ) + ax.axvline(0, color="0.7", linewidth=1, linestyle=":") + ax.set( + title=rank.title(), + yticks=(0, 1), + yticklabels=("Global → Europe", "Europe → N. Europe"), + ylim=(1.35, -0.5), + xlabel="Macro accuracy change (percentage points)" if factor == 100 else "Macro-F1 change", + ) + ax.margins(x=0.2) + ax.grid(axis="x", alpha=0.15) + ax.set_axisbelow(True) + fig.suptitle("Effect of regional filtering · paired changes within each pipeline", fontsize=15) + fig.legend(*axes[0, 0].get_legend_handles_labels(), loc="upper center", bbox_to_anchor=(0.5, 0.96), ncol=3, frameon=False) + fig.text( + 0.02, + 0.015, + "Black mark: median of five pipeline changes; grey line: min–max; coloured dots: individual pipelines.\n" + "Descriptive spread, not confidence intervals or independent replicates. " + "Legacy lists; same 58,640 images, all truth, threshold 0.\n" + "Differences summarize retained mini_metrics outputs; ranks and metric scales are never pooled.", + fontsize=9, + ) + fig.tight_layout(rect=(0, 0.10, 1, 0.89)) + save_figure(fig, output, "mambo-defaults-regional-effect") + + with (output / "mambo-defaults-metrics.csv").open("w", newline="") as stream: + writer = csv.writer(stream, lineterminator="\n") + writer.writerow(["variant", "preset", "scope", "rank", "images", *METRICS]) + for row in data["quality"]: + for scope in ("all", "known"): + for level, rank in enumerate(("species", "genus", "family")): + writer.writerow( + [ + row["model"], + row["preset"], + scope, + rank, + row["ranks"][rank]["images" if scope == "all" else "known_images"], + *[row["scores"][scope][key][str(level)] for key in METRICS], + ] + ) + write_json(output / "mambo-defaults-comparison.json", data) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--data", type=Path) + for name in ("baseline", "reference", "quality", "performance"): + parser.add_argument("--" + name, type=Path) + parser.add_argument("--output", type=Path, required=True) + args = parser.parse_args() + if not args.data and any(getattr(args, key) is None for key in ("baseline", "reference", "quality", "performance")): + parser.error("Supply --data or all four evidence inputs") + render(json.loads(args.data.read_text()) if args.data else collect(args), args.output) diff --git a/dev/releases/mambo_v3/deployment-freeze.md b/dev/releases/mambo_v3/deployment-freeze.md new file mode 100644 index 0000000..dce83ed --- /dev/null +++ b/dev/releases/mambo_v3/deployment-freeze.md @@ -0,0 +1,86 @@ +# MAMBO V3 deployment freeze + +26 September 2026. Publication preparation is implemented; installed-candidate +records and hashes gate the publisher handoff. Packages, artifacts and tags have +not been published. The selected weight license is **CC BY-NC-SA 4.0**; adapter code +remains MIT. Final artifact identities and installed checks are recorded in +[final qualification](final-qualification.md). + +## Current publication preparation + +- Integrated the `mt-trainer` distribution rename, retaining `mini_trainer` imports. + Both lockfiles preserve dependency versions. Isolated installed-wheel imports, + CLI, training, checkpoint reload and inference passed. +- Training publication now accepts `packages/mt-trainer/vVERSION` release events only; + manual dispatch prepares artifacts without publication. Model and demo publication + have separate workflows, per-product environment gates and verified upload inventories. + [Hierarchical branch/tag routing](../README.md) is shared across releases. +- The CPU Space uses the release API with runtime, scope, custom-list, TTA and + top-K controls and names for all 17,212 taxa. Runtime reuse is qualified on a + real image; final installed-candidate qualification is recorded with its artifacts. + Browser reuse is assessed separately below. +- Publication documentation, explicit model/Space staging and installed qualification + are implemented. Follow the ordered handoff for account setup and public release; + inspect the candidate records before approving its artifacts. + +## Browser scope + +The existing prototype at `b174426` packages a WASM embedding explorer, including +prototype coordinates, a separate worker and a different EXIF/alpha policy. It +does not already supply the release preset/TTA interface. Integrating it would +require another browser preprocessing and configuration qualification effort. +This release preparation therefore delivers the Python-backed Space; WebGPU +remains an explicitly unqualified follow-up, reusing that prototype where useful. + +## Release contract + +- Distribution `mambo-v3`, version `0.3.0`; Python import `mambo_deploy`. + Maintenance releases retain the V3 trained model; future generations use a + separate package. Pin the package version for reproducible application builds. +- PyTorch and standard ONNX; global (`full`) scope by default; legacy and updated + regional presets, custom class lists, independent rank predictions and optional + unit embeddings. Automatic precision and optional `rotation30_pad25_3` TTA. +- The deployment package alone owns `mambo_predict`. API/CLI global defaults, + bounded streaming and incremental CLI output are qualified. The native V2 + compatibility facade retains its native/CUDA defaults. +- All 25 geographic lists retain their evaluated membership. Updated lists use + at least 3 regional and 25 global metadata rows; legacy lists are unchanged. + Deduplication or membership changes require a future preset revision. +- No additional throughput campaign, retraining, quantization or exhaustive platform + qualification. Shared-core changes require a separate branch and reviewed merge. + +## Completion evidence + +| Requirement | Authoritative record | +| --- | --- | +| Installation, inputs/outputs, meaningful defaults, V2 migration and changelog | [Deployment README](../../../deployment/README.md), [integration details](../../../docs/mambo-integration.md) | +| Geographic filters, counts and reconstruction | [Preset catalogue](../../../docs/model-presets.md), `preset-definitions.toml`, `preset-manifest.toml`; pinned-Parquet reconstruction leaves all lists unchanged | +| Trained assets, preprocessing, vocabulary and notices | Bundle `release.json`, `MODEL_PROVENANCE.toml`, `NOTICES.md`, `MODEL_LICENSE.txt`, `CODE_LICENSE`; immutable per-file hashes | +| Installed runtime, offline/download and API/CLI checks | [Final qualification](final-qualification.md), candidate `qualification/validation.json` and linked retained reports | +| Flemming and complementary in-domain metrics | README figures and linked evidence; mini_metrics calibration/reporting separation, all ranks, both confidence settings and full/support >5 metrics | +| Laptop, CPU, B200 request/streaming comparisons | README figures, [current HPC evidence](../../../docs/mambo-hpc-evidence.md); only measured points updated, historical boundaries retained | +| Reusable protocols and evidence | [Evidence policy](evidence-policy.md), public tables/provenance and retained private prediction/confidence archives | +| Browser and other integration opportunities | README's Beyond Python section; described as integration paths, without claiming untested platform support | +| Distribution assets and publication procedure | Local candidate wheels, source distribution, bundle/archive, evidence, manifest and checksums; [publication and rollback handoff](publication.md) | + +## Provenance limits + +The trained checkpoint, original export files and best epoch 30 are verified. +The training Git revision and original `initial_seed42.pt` bytes/hash were not +retained. Preparation source reconstructs that file's role: torchvision DEFAULT +EfficientNetV2-S (ImageNet-1K) plus a new hierarchical head, seed 42, saved before +production training. It is not a second trained MAMBO model. The model card and +notices distinguish this source reconstruction from a verified starting-file +identity; no training revision or hash has been invented. + +## Validation and handoff + +Reuse qualified runtime execution when wheel runtime payloads, weights, +preprocessing and class lists are identical. Check rebuilt metadata and installed +payloads after notice-only changes; do not repeat model quality or speed campaigns. +Static/import-contract checks, focused deployment contracts and the minimal +installed training-wheel check are recorded in the qualification history. + +The publisher reviews the concrete artifacts, notices, limitations and source +commit using [publication.md](publication.md). Tagging, package upload, model-asset +upload and public-pointer promotion are separate actions and remain unauthorized. diff --git a/dev/releases/mambo_v3/deployment-qualification.md b/dev/releases/mambo_v3/deployment-qualification.md new file mode 100644 index 0000000..5f2abe1 --- /dev/null +++ b/dev/releases/mambo_v3/deployment-qualification.md @@ -0,0 +1,118 @@ +# Deployment qualification and report reproduction + +Current installed-package evidence is in [final qualification](final-qualification.md). +Use this page to reproduce runtime contracts and the promoted Flemming reports. +Consumer installation and configuration belong in +[deployment/README.md](../../../deployment/README.md). + +## Reproduce + +From the repository root, using the existing environment without syncing: + +```sh +.venv/bin/python -m dev.releases.mambo_v3.build_bundle local-evidence/mambo-v3 local-evidence/mambo-bundle-final +uv build --project deployment --wheel --out-dir local-evidence/deployment-wheels +uv build --wheel --out-dir local-evidence/deployment-wheels +``` + +The source directory must contain the production directory named in +`inventory.toml`; the builder verifies the pinned hashes and refuses to overwrite +an existing destination. Model files stay outside Git. The bundle includes both +ONNX graphs and their external data, native weights, one ordered vocabulary, +parent mappings, preprocessing, preset lists/scopes, provenance and hashes. + +Use disposable environments following the [runtime installation guide](../../../docs/mambo-integration.md#runtime-installation). +The default check below runs both backends, so install the matching training wheel +and chosen PyTorch backend too. Use `--backends onnx` for an ONNX-only check. +Do not install CPU and GPU ONNX Runtime packages together. + +```sh +python dev/releases/mambo_v3/qualify_bundle.py /path/to/bundle /path/to/flemming --device cpu --output cpu.json +python dev/releases/mambo_v3/qualify_bundle.py /path/to/bundle /path/to/flemming --device cuda:0 --output gpu.json +``` + +The runner selects the first JPEG in each of the first four sorted species +directories, records image hashes, and checks full/Europe/custom lists. It checks +prediction/embedding mode agreement, finite unit-length 1280-dimensional vectors, +and that class filtering does not change embeddings. Across backends it reports +label agreement, without imposing micro-numerical equivalence. + +In a separate ONNX-only environment with neither torch nor mini_trainer installed: + +```sh +python -I dev/releases/mambo_v3/check_portable_install.py /path/to/bundle /path/to/image.jpg --output portable.json +``` + +This copies the bundle to a temporary location, removes write permissions, changes +working directory, blocks Python socket connections, runs both API modes and the +CLI, and verifies bundle contents remain unchanged. This is not an OS-level +network isolation test; platform-native runtime networking is outside that guard. + +These four-image checks establish execution contracts, not representative accuracy, +embedding quality or broad platform support. Add `--tta rotation30_pad25_3` to +both runners to check the released enabled-TTA default; omission checks TTA off. +[Final qualification](final-qualification.md) owns installed artifact identities, +environments and results, including the promoted TTA checks. + +## Reproduce the promoted Flemming report + +Use the pinned [metric environment](evaluation.md#metrics) for quality processing +and a separately prepared runtime for timing. The commands below show the paths +used in the retained campaign; substitute your environment, dataset and bundle +paths. Run from the repository root, with fresh output directories. + +The five displayed pipelines need their own shared support intersection; do not +copy the eleven-pipeline exploratory tail scores. Both confidence settings use +the same 52,788 reporting images, with 5,852 separate calibration images. Full +metric semantics and results are in [deployment evidence](../../../docs/mambo-deployment-evidence.md). + +Reproduce the current quality tables and figure: + +```sh +/tmp/mambo-release-metrics/bin/python -m dev.releases.mambo_v3.promoted_report \ + --quality docs/assets/mambo-composed-tta.json --output /tmp/promoted-report +.venv/bin/python -m dev.releases.mambo_v3.tail_charts \ + --data /tmp/promoted-report/mambo-promoted-tail.json --output /tmp/promoted-report +``` + +The figure command writes `mambo-threshold-tail.svg`; publish it under the distinct +name `mambo-promoted-quality.svg` to preserve earlier studies. JSON/CSV outputs use +`mambo-promoted-*`. `quality-tables.md` supplies the README metric and support rows. +The JSON threshold artifact retains full macro/micro scores, coverage, recipe, +source hashes and exact reporting/calibration identities; thresholds are not +silently installed as runtime defaults. + +Measure the selected recipe independently, on the same bank as earlier timings: + +```sh +CUDA_VISIBLE_DEVICES=0 /tmp/mambo-deploy-qualification-gpu/bin/python \ + -m dev.releases.mambo_v3.benchmark_acceleration \ + --python /tmp/mambo-deploy-qualification-gpu/bin/python \ + --bundle local-evidence/mambo-bundle-presets-v2 \ + --manifest local-evidence/mambo-v3/flemming-manifest.json \ + --root /home/asger/data/flemming --output /tmp/promoted-speed \ + --presets north_europe --tta rotation30_pad25_3 +.venv/bin/python -m dev.releases.mambo_v3.promoted_report \ + --performance /tmp/promoted-speed --output /tmp/promoted-report +.venv/bin/python -m dev.releases.mambo_v3.promoted_report \ + --render-speed /tmp/promoted-report/mambo-promoted-speed.json --output /tmp/promoted-report +``` + +The timing runner uses three fresh processes per backend/device, seven observations, +CPU batches 1/8 and GPU batches 1/8/32. Do not overlap model workloads. The report +combines these northern-Europe TTA timings with retained V2 and single-view V3 +measurements; campaign conditions can differ. RSS is a process high-water mark, +not per-request memory. [Evaluation](evaluation.md#timing-and-summary) defines the +measurement boundaries; [HPC evidence](../../../docs/mambo-hpc-evidence.md) owns +the later B200 measurements. + +## CUDA compatibility boundary + +The [integration guide](../../../docs/mambo-integration.md#runtime-installation) +describes the synthetic first-use probe and checked retry without graph optimizations. +On the RTX 3080 Ti Laptop with ORT GPU 1.30.0, both optimized graphs ran; +injecting a compatibility error exercised real unoptimized CUDA recovery for both. +That verifies recovery mechanics, not every batch-dependent path or GPU runtime. +On B200, that wheel also failed an unfused standalone Sigmoid: disabling graph +optimizations cannot repair missing device kernels. The [UCloud runbook](ucloud-release.md) +records the separately qualified runtime build. diff --git a/dev/releases/mambo_v3/evaluate.py b/dev/releases/mambo_v3/evaluate.py new file mode 100644 index 0000000..dc84937 --- /dev/null +++ b/dev/releases/mambo_v3/evaluate.py @@ -0,0 +1,256 @@ +"""Stream release predictions once per model variant and reduce all declared presets.""" + +import argparse +import csv +import hashlib +import platform +import time +from contextlib import ExitStack +from pathlib import Path + +import numpy as np + +from deployment.mambo_deploy import Predictor +from deployment.mambo_deploy.augmentation import DEFAULT_TTA, PROFILES +from deployment.mambo_deploy.result_worker import ResultWorker +from deployment.mambo_deploy.results import Prediction +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.releases.mambo_v3.evaluation_data import CSV_COLUMNS, PRESETS, canonical_rows, load_records, prepare_flemming, write_json + + +def runtime_settings(threads, backend="torch"): + result = {"threads": threads, "tf32": False, "autocast": False, "precision": "float32", "platform": platform.platform()} + if backend == "torch": + import torch + + torch.set_num_threads(threads) + torch.backends.cuda.matmul.allow_tf32 = False + torch.backends.cudnn.allow_tf32 = False + torch.backends.cudnn.benchmark = False + result.update(torch=torch.__version__, cuda=torch.version.cuda) + else: + import onnxruntime as ort + + result["onnxruntime"] = ort.__version__ + return result + + +def collect(args): + output = args.output + output.mkdir(parents=True, exist_ok=False) + report = { + "status": "running", + "arguments": {k: str(v) if isinstance(v, Path) else v for k, v in vars(args).items()}, + "runner_sha256": file_hash(__file__), + "manifest_sha256": file_hash(args.manifest), + "bundle_sha256": file_hash(args.bundle / "release.json"), + "runtime": runtime_settings(args.threads, args.backend), + } + start = time.perf_counter() + try: + manifest, records = load_records(args.manifest, args.root, args.count, args.seed) + report.update(samples=len(records), species=len({r["labels"][0] for r in records}), dataset=manifest["dataset"]) + write_json(output / "samples.json", records) + report["sample_ids_sha256"] = file_hash(output / "samples.json") + predictor = Predictor( + args.bundle, + backend=args.backend, + device=args.device, + model="full", + threads=args.threads, + precision=args.precision, + tta=getattr(args, "tta", "none"), + ) + report["effective_precision"] = predictor.effective_precision + report["runtime"].update( + precision=predictor.effective_precision, + autocast=predictor.effective_precision in ("fp16", "bf16"), + tf32=predictor.effective_precision == "tf32", + ) + selectors = {name: Predictor(args.bundle, model=name).selected for name in args.presets} + # A preset supplied as a custom list must produce the same mask/order. + custom = Predictor(args.bundle, class_list=predictor.bundle.file(predictor.bundle.regions["europe_v3"]["path"])) + np.testing.assert_array_equal(custom.selected, Predictor(args.bundle, model="europe_v3").selected) + report["preset_as_custom_equivalent"] = True + report["lists"] = { + name: { + "count": len(selected), + "sha256": hashlib.sha256( + ("\n".join(predictor.bundle.classes["labels"][0][i] for i in selected) + "\n").encode() + ).hexdigest(), + } + for name, selected in selectors.items() + } + with ExitStack() as stack: + writers = {} + for name in selectors: + directory = output / name + directory.mkdir() + stream = stack.enter_context((directory / "mini_metric.csv").open("w", newline="")) + writers[name] = csv.writer(stream) + writers[name].writerow(CSV_COLUMNS) + embeddings = None + if args.embeddings: + embeddings = np.lib.format.open_memmap(output / "embeddings.npy", mode="w+", dtype=np.float32, shape=(len(records), 1280)) + timings = { + name: 0.0 + for name in ( + "input_wait_seconds", + "runtime_submit_seconds", + "output_wait_seconds", + "hierarchy_seconds", + "prediction_seconds", + "write_seconds", + "model_stream_seconds", + "d2h_device_seconds", + "output_completion_wait_seconds", + ) + } + + plans = {name: predictor.hierarchy_plan(selected) for name, selected in selectors.items()} + + def process(batch, resolve, offset): + leaf, vectors, ranks = resolve() + if leaf.shape != (len(batch), len(predictor.bundle.classes["labels"][0])) or not np.isfinite(leaf).all(): + raise ValueError("Invalid leaf scores") + if embeddings is not None: + if vectors.shape != (len(batch), 1280) or not np.isfinite(vectors).all(): + raise ValueError("Invalid embeddings") + np.testing.assert_allclose(np.linalg.norm(vectors, axis=1), 1, atol=1e-4) + embeddings[offset : offset + len(batch)] = vectors + phase = {name: 0.0 for name in ("hierarchy_seconds", "prediction_seconds", "write_seconds")} + for name, selected in selectors.items(): + t = time.perf_counter() + reduced = ranks[name] if ranks is not None else plans[name].numpy(leaf) + phase["hierarchy_seconds"] += time.perf_counter() - t + t = time.perf_counter() + result = Prediction(*reduced) + phase["prediction_seconds"] += time.perf_counter() - t + t = time.perf_counter() + writers[name].writerows(canonical_rows(batch, result, offset)) + phase["write_seconds"] += time.perf_counter() - t + return len(batch), phase + + worker = stack.enter_context(ResultWorker(process)) + + def finish_one(): + t = time.perf_counter() + count, phase = worker.pop() + timings["output_wait_seconds"] += time.perf_counter() - t + for name, value in phase.items(): + timings[name] += value + return count + + report["pipeline"] = {"decode_workers": args.decode_workers, "prefetch_batches": args.prefetch_batches, "read_once": True} + stream_stats = {} + report["streaming"] = stream_stats + batches = predictor.prepared_batches( + ((args.root / record["path"], record["sha256"]) for record in records), + args.batch_size, + read_workers=args.read_workers, + prepare_workers=max(1, args.decode_workers), + read_window=args.read_window, + prefetch_batches=args.prefetch_batches, + encoded_budget=args.encoded_budget_mib * 1024**2, + stats=stream_stats, + device_prefetch=not args.no_device_prefetch, + ) + stack.callback(batches.close) + completed = 0 + last_progress = time.perf_counter() + previous_completed = 0 + previous_timings = dict(timings) + previous_preparation = 0.0 + while True: + waiting = time.perf_counter() + try: + offset, views, batch_count = next(batches) + batch = records[offset : offset + batch_count] + except StopIteration: + while worker.pending: + completed += finish_one() + print(f"{args.backend} {args.device}: {completed}/{len(records)}", flush=True) + break + timings["input_wait_seconds"] += time.perf_counter() - waiting + t = time.perf_counter() + resolve = predictor._ranked_views(views, len(views), selectors, args.embeddings, defer=True) + timings["runtime_submit_seconds"] += time.perf_counter() - t + timings.update(predictor.runtime_timings) + worker.submit(batch, resolve, offset) + + if len(worker.pending) == 2: + completed += finish_one() + now = time.perf_counter() + if now - last_progress >= 5 or completed == len(records): + interval = now - last_progress + rate = (completed - previous_completed) / interval + phase_seconds = {name: round(value - previous_timings[name], 3) for name, value in timings.items()} + preparation = stream_stats.get("preparation_worker_seconds", 0.0) + phase_seconds["background_preparation_worker_seconds"] = round(preparation - previous_preparation, 3) + # Retain the existing machine-readable count line for live monitors. + print(f"{args.backend} {args.device}: {completed}/{len(records)}", flush=True) + eta = f"{(len(records) - completed) / rate / 60:.1f} min" if rate else "waiting for first written batch" + print(f"{rate:.1f} images/s; ETA {eta}; pipeline={stream_stats}", flush=True) + print(f"interval={interval:.3f}s; phases={phase_seconds}", flush=True) + previous_timings = dict(timings) + previous_completed = completed + previous_preparation = preparation + last_progress = now + timings.update(predictor.runtime_timings) + if embeddings is not None: + embeddings.flush() + if args.backend == "onnx": + import onnxruntime as ort + + report["runtime"]["onnxruntime"] = ort.__version__ + report["onnx_session_info"] = predictor.onnx_session_info + report["providers"] = {key: session.get_providers() for key, session in predictor._sessions.items()} + report["provider_options"] = {key: session.get_provider_options() for key, session in predictor._sessions.items()} + report.update(status="complete", timings=timings) + report["csv_sha256"] = {name: file_hash(output / name / "mini_metric.csv") for name in selectors} + except Exception as error: + report.update(status="failed", error=f"{type(error).__name__}: {error}") + raise + finally: + report["elapsed_seconds"] = time.perf_counter() - start + write_json(output / "report.json", report) + return report + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + commands = parser.add_subparsers(dest="command", required=True) + prep = commands.add_parser("prepare") + prep.add_argument("--root", type=Path, required=True) + prep.add_argument("--reference", type=Path, required=True) + prep.add_argument("--output", type=Path, required=True) + run = commands.add_parser("collect") + for name in ("bundle", "manifest", "root", "output"): + run.add_argument(f"--{name}", type=Path, required=True) + run.add_argument("--backend", choices=["torch", "onnx"], required=True) + run.add_argument("--device", default="cpu") + run.add_argument("--precision", choices=["auto", "fp32", "fp16", "bf16", "tf32"], default="fp32") + run.add_argument("--tta", nargs="?", const=DEFAULT_TTA, choices=PROFILES, default="none") + run.add_argument("--embeddings", action="store_true") + run.add_argument("--count", type=int) + run.add_argument("--seed", type=int, default=20260923) + run.add_argument("--batch-size", type=int, default=32) + run.add_argument("--threads", type=int, default=4) + run.add_argument("--decode-workers", type=int, default=4) + run.add_argument("--prefetch-batches", type=int, default=2, help="Prepared batches queued ahead; 0 disables overlap") + run.add_argument("--no-device-prefetch", action="store_true") + run.add_argument("--read-workers", type=int, default=32) + run.add_argument("--read-window", type=int, default=128) + run.add_argument("--encoded-budget-mib", type=int, default=256) + run.add_argument("--presets", nargs="+", default=list(PRESETS)) + args = parser.parse_args() + if args.command == "prepare": + prepare_flemming(args.root, args.reference, args.output) + else: + if args.batch_size < 1 or args.decode_workers < 0 or args.prefetch_batches < 0: + parser.error("batch-size must be positive; decode-workers and prefetch-batches must be nonnegative") + collect(args) + + +if __name__ == "__main__": + main() diff --git a/dev/releases/mambo_v3/evaluation.md b/dev/releases/mambo_v3/evaluation.md new file mode 100644 index 0000000..e07618e --- /dev/null +++ b/dev/releases/mambo_v3/evaluation.md @@ -0,0 +1,110 @@ +# Local release evaluation + +This runbook collects same-model PyTorch/ONNX evidence on Flemming. For the +five-pipeline V2/V3 in-domain campaign use [UCloud release evaluation](ucloud-release.md); +for current release results and qualification use [the deployment freeze](deployment-freeze.md). + +## Collect predictions + +Run from the repository root in the existing environment without synchronization, +or in a separately prepared runtime following the [deployment install guide](../../../deployment/README.md). +Use a fresh output for each phase; inspect qualification before starting full runs. + +```sh +python -m dev.releases.mambo_v3.evaluate prepare \ + --root /path/to/flemming \ + --reference /path/to/production/evaluation/expert/predictions/mini_metric.csv \ + --output /path/to/flemming-manifest.json +python -m dev.releases.mambo_v3.run_local qualification --precision auto \ + --python /path/to/runtime-env/bin/python \ + --bundle /path/to/bundle --manifest /path/to/flemming-manifest.json \ + --root /path/to/flemming --output /path/to/new-subset-run +``` + +Preparation joins all three archived truth ranks by original species/image identity, +hashes image bytes, and rejects missing/extra images or duplicate/incomplete truth. +It preserves out-of-vocabulary labels. Qualification selects 256 images from that +population; it does not redefine the full dataset or supplied training/test splits. + +The historical runner defaults to `--precision fp32`; explicit `auto` matches +deployment defaults. TTA is off unless requested; pin a recipe when reproducing +historical studies. Replace `qualification` with `full` for two full GPU +prediction runs, or `benchmark` for isolated timing trials, changing the output +directory each time. Jobs are sequential; do not overlap timing with other work. + +The collector checks hashes and applies full, legacy Europe/northern Europe and +updated European lists to each inference batch. It checks custom-list equivalence +to updated Europe and, when requested, finite 1280-dimensional unit embeddings, +written incrementally to NPY. Use the comparison command below to check label +agreement between prediction and embedding collections; this is not automatic. +Streaming controls and current ownership boundaries are described in the +[pipeline review](../../../docs/mambo-inference-pipeline-review.md). + +Retained outputs include ordered sample identities, artifact/list hashes, precision, +runtime versions, canonical prediction CSVs and completion/failure reports. Use only +`complete` reports. Paired comparison checks identity/truth and label agreement; +all predictive metrics come from `mini_metrics`: + +```sh +python -m dev.releases.mambo_v3.compare_quality /path/to/left /path/to/right \ + --output /path/to/comparison.json +``` + +## Metrics + +Use the campaign's pinned metric environment, independently of runtime dependencies: + +```sh +uv venv --python 3.13 /path/to/metrics-env +uv pip install --python /path/to/metrics-env/bin/python \ + 'mini_metrics @ git+https://github.com/GuillaumeMougeot/mini_metrics.git@70cc69adc05362863439277048e06386c1f885e1' +/path/to/metrics-env/bin/python -m dev.releases.mambo_v3.metrics \ + --collection /path/to/full-run +``` + +For one list, use `--source /path/to/mini_metric.csv --output /path/to/metrics.json` +instead. Existing reports are reused only when input hash and metric revision match. +Schema `mini-metrics-quality-v2` rejects the older direct-accuracy extractor. + +The report retains macro accuracy (`accuracy`), `micro_accuracy`, F1, recall, +precision, coverage and Theil U, plus per-class and known-only results at every rank. +Undefined values remain null. Truth-vocabulary coverage differs from abstention +coverage; the latter is 100% at this collector's zero threshold. +[Threshold calibration](../../../docs/mambo-confidence-thresholds.md) uses a +separate calibration partition, and [tail reporting](../../../docs/mambo-tail-metrics.md) +changes the macro averaging domain. Those later analyses reuse predictions. + +## Timing and summary + +`run_local benchmark` runs three alternating-order fresh-process trials per +PyTorch/ONNX × CPU/CUDA × predictions/embeddings setting. Four-thread CPU uses +batches 1/8; GPU adds 32; one-thread CPU adds batch-1 measurements. All cells use +a seeded 32-image bank, two warmups and seven observations for request timings. +Each largest-batch cell also retains three streaming passes over a separate seeded +1,024-image selection. The summary below displays request timings; streaming +observations remain in the source reports. This is a bounded sweep, not maximum throughput. + +End-to-end timing covers decoding through completed CPU results, including +hierarchy reduction and requested embeddings. Prepared-runtime timing omits image +preparation and hierarchy reduction but includes transfers; it is a single-view +diagnostic even when request timing uses TTA. Runtime import/setup, +predictor construction and lazy first call are separate; neither is cold-boot +latency. Nested startup components must not be summed. Reports retain resolved +precision, so FP32 reference runs and automatic-precision runs remain distinguishable. + +RSS is the process high-water mark across the sweep. PyTorch allocator peaks are +not total VRAM; `nvidia-smi` snapshots are not continuous ONNX peaks. Record power, +clocks, temperature and unavailable policy fields. A CUDA provider can place some +operators on CPU; placement needs a separate profiler, whose timing is excluded. + +```sh +python -m dev.releases.mambo_v3.summarize \ + --quality /path/to/full-run --benchmarks /path/to/benchmark-run \ + --output /path/to/new-summary +``` + +The summary rejects incomplete timing phases. Preserve its source CSVs, observations +and reports. [Initial FP32 results](../../../docs/mambo-v3-evaluation.md) retain the +original environment and installed-package checks; [accelerated results](../../../docs/mambo-accelerated-deployment.md) +record the later AMP comparison. In-domain collection and presentation have since +completed; cross-OS and additional hardware support must not be inferred from them. diff --git a/dev/releases/mambo_v3/evaluation_data.py b/dev/releases/mambo_v3/evaluation_data.py new file mode 100644 index 0000000..e5ae54b --- /dev/null +++ b/dev/releases/mambo_v3/evaluation_data.py @@ -0,0 +1,79 @@ +"""Release evaluation identities and canonical rows; no runtime or taxonomy downloads.""" + +import csv +import json +from pathlib import Path + +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.benchmarks.inference.prepare_inputs import select_records +from dev.benchmarks.inference.quality_compare import COLUMNS + +CSV_COLUMNS = (*COLUMNS, "known_label", "prediction_made", "correct") +PRESETS = ("full", "europe", "north_europe", "europe_v3", "north_europe_v3") + + +def write_json(path, value): + Path(path).write_text(json.dumps(value, indent=2, allow_nan=False) + "\n") + + +def prepare_flemming(root, reference, output): + """Join archived ground truth by relative species/image path, then hash local bytes.""" + records = {} + with Path(reference).open(newline="") as stream: + for row in csv.DictReader(stream): + relative = Path(*Path(row["filename"]).parts[-2:]).as_posix() + record = records.setdefault(relative, {"path": relative, "labels": [None] * 3, "split": "test"}) + rank = int(row["level"]) + if rank not in range(3) or record["labels"][rank] is not None: + raise ValueError("Duplicate or invalid truth rank") + record["labels"][rank] = row["label"] + observed = {p.relative_to(root).as_posix() for p in Path(root).rglob("*.jpg")} + if observed != set(records): + raise ValueError(f"Image identity mismatch: missing {len(set(records) - observed)}, extra {len(observed - set(records))}") + for record in records.values(): + if any(label is None for label in record["labels"]) or record["labels"][0] != Path(record["path"]).parent.name: + raise ValueError("Incomplete or conflicting ground truth") + record["sha256"] = file_hash(Path(root) / record["path"]) + result = { + "schema_version": 1, + "dataset": "flemming", + "records": sorted(records.values(), key=lambda r: r["path"]), + "provenance": {"truth_csv_sha256": file_hash(reference), "split": "original expert set; no resplitting"}, + } + output = Path(output) + if output.exists(): + raise FileExistsError(output) + write_json(output, result) + return result + + +def load_records(path, root, count=None, seed=20260923): + manifest = json.loads(Path(path).read_text()) + records = select_records(manifest, "test", count, seed) + for record in records: + candidate = (Path(root) / record["path"]).resolve() + if not candidate.is_relative_to(Path(root).resolve()) or not candidate.is_file(): + raise ValueError(f"Missing or unsafe image: {record['path']}") + if len(record.get("labels", [])) != 3 or not all(isinstance(label, str) and label for label in record["labels"]): + raise ValueError("Require explicit species/genus/family ground truth") + return manifest, records + + +def canonical_rows(records, prediction, offset=0): + if len(records) != len(prediction): + raise ValueError("Prediction/sample count mismatch") + for i, (record, item) in enumerate(zip(records, prediction, strict=True)): + for rank in range(3): + truth, predicted = record["labels"][rank], item.label[rank] + yield ( + offset + i, + record["path"], + rank, + truth, + predicted, + item.confidence[rank], + 0, + int(truth in prediction.cls2idx[str(rank)]), + 1, + 1 if truth == predicted else -1, + ) diff --git a/dev/releases/mambo_v3/evidence-policy.md b/dev/releases/mambo_v3/evidence-policy.md new file mode 100644 index 0000000..57a68ae --- /dev/null +++ b/dev/releases/mambo_v3/evidence-policy.md @@ -0,0 +1,54 @@ +# Reusable MAMBO release evidence + +This release establishes a retained baseline, not an immutable evaluation policy. +Future improvements must receive an evaluation revision and a short explanation in +that release's README/changelog. Never relabel old measurements as newly collected. + +## What each comparison must identify + +Record the trained checkpoint/graph hashes; adapter version/source commit; complete +bundle hash; ordered vocabulary and selected-list hash; preprocessing, score and +TTA recipe; effective precision/backend/provider; embeddings on/off; dataset and +ordered sample identities; reporting/calibration split identities; metric package +revision and options; rank and all/known-truth policy; support threshold and class +intersection rule. For timing also record hardware, runtime/dependency versions, +thread/worker counts, batch, image bank, warmup, repetition method, measurement +boundary and memory method. Keep failures and unqualified configurations visible. + +## Retention and reuse + +Retain per-image truth, prediction, confidence and sample identity at all ranks, +per-class metrics/support, calibrated thresholds, aggregate metrics, raw timing +observations and environment/provenance records. Keep restricted data and original +photographs out of public release assets. Hashes identify retained inputs; they do +not imply that another developer has permission or access to those inputs. + +Existing prediction/confidence files permit many metric, calibration and support +policy changes without running the old model again. A different class-list mask, +TTA recipe or preprocessing cannot generally be reconstructed from top-1 outputs; +those changes need retained richer scores or another inference run. Do not promise +that all future comparisons are possible from the current compact predictions. + +Maintain a fixed historical comparison alongside any improved policy, or recompute +old and new metrics from retained predictions under one new revision. Do not pool +incompatible reporting populations, class-support averages or timing protocols. +On a new hardware environment, one reference-model measurement can anchor a new +comparison without requiring every previous model to run again. Historical speed +numbers remain explicitly tied to their original environment. + +## Current baseline + +- `docs/assets/mambo-promoted-tail.json` and associated quality/threshold evidence: + Flemming, legacy northern Europe, reporting/calibration separation, both confidence + settings, all ranks and full/support >5 macro metrics. +- `docs/assets/mambo-indomain-support.json` and threshold/tail artifacts: + original global-lepi test population, global vocabulary, analogous metric policy. +- `docs/assets/mambo-promoted-speed.json`: laptop timing and environment evidence. +- `docs/assets/mambo-indomain-speed.csv` and campaign metadata: retained EPYC and + earlier B200 request comparisons, including V2. +- `docs/assets/mambo-hpc-current-speed.csv` and provenance: latest B200 request and + streaming observations. These replace only corresponding measured points. + +The public evidence pages link complete tables and reproducible report commands. +The publication preparation manifest inventories the linked asset bytes; restricted +per-image inputs remain in the retained local/UCloud archives and are not bundled. diff --git a/dev/releases/mambo_v3/family_precision_report.py b/dev/releases/mambo_v3/family_precision_report.py new file mode 100644 index 0000000..66210bc --- /dev/null +++ b/dev/releases/mambo_v3/family_precision_report.py @@ -0,0 +1,157 @@ +"""Audit predicted-only family contributions using pinned mini_metrics group outputs.""" + +import argparse +import csv +import json +from collections import Counter +from pathlib import Path + +import numpy as np + +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.releases.mambo_v3.evaluation_data import write_json +from dev.releases.mambo_v3.metrics import REVISION, finite_json, require_pinned_metrics +from dev.releases.mambo_v3.threshold_report import identity + + +def prepare_taxonomy(metadata, v2_path, v3_path): + """Read names and verify hierarchy identity without constructing a model.""" + import pyarrow.parquet as pq + import torch + + names = {} + for batch in pq.ParquetFile(metadata).iter_batches(columns=["familyKey", "family"], batch_size=500000): + columns = batch.to_pydict() + for key, name in zip(columns["familyKey"], columns["family"], strict=True): + if key is not None and name is not None: + key = str(int(key)) + if key in names and names[key] != name: + raise ValueError(f"Conflicting family name: {key}") + names[key] = name + state = torch.load(v2_path, map_location="cpu", weights_only=True) + classes = json.loads(v3_path.read_text()) + inverse = {k: {v: n for n, v in mapping.items()} for k, mapping in state["classifier._extra_state"]["cls2idx"].items()} + old = { + inverse["0"][i]: (inverse["1"][int(g)], inverse["2"][int(state["classifier.mask_1"][g])]) + for i, g in enumerate(state["classifier.mask_0"]) + } + new = { + n: (classes["labels"][1][g], classes["labels"][2][classes["parents"][1][g]]) + for n, g in zip(classes["labels"][0], classes["parents"][0], strict=True) + } + if old != new: + raise ValueError("V2/V3 taxonomy mappings differ") + active = [inverse["0"][i] for i in state["classifier.active_indices"].tolist()] + return { + "names": names, + "sources": {str(p): file_hash(p) for p in (metadata, v2_path, v3_path)}, + "taxonomy": { + "all_species_parent_mappings_identical": True, + "species": len(old), + "global_families": len(classes["labels"][2]), + "north_europe_families": sorted({old[n][1] for n in active}), + }, + } + + +def collect(study_path, taxonomy_path): + from mini_metrics.data import MetricDF + from mini_metrics.metrics import MacroF1, MacroPrecision, MacroRecall, evaluate_file + + require_pinned_metrics() + study = json.loads(study_path.read_text()) + taxonomy = json.loads(taxonomy_path.read_text()) + result = {"revision": REVISION, "study_sha256": file_hash(study_path), "taxonomy": taxonomy, "models": {}} + for model, source in study["models"].items(): + if file_hash(source["source"]) != source["source_sha256"]: + raise ValueError("Changed prediction source") + reporting, _ = MetricDF.from_source(source["source"]).split((0.9, 0.1), strata=("label",), seed=42) + if identity(reporting) != source["identities"]["report"]: + raise ValueError("Changed reporting partition") + family = reporting[reporting.level == 2] + rows = {} + for scope, threshold in (("zero", 0), ("optimized", source["thresholds"][2]), ("common_0.96", 0.96)): + data = family.with_threshold(threshold) + truth = Counter(map(str, data.label)) + accepted = np.asarray(data.prediction_made) + predicted = Counter(map(str, data.prediction[accepted])) + groups = {} + diagnostics = {} + for name, metric in (("precision", MacroPrecision()), ("recall", MacroRecall()), ("f1", MacroF1())): + values = metric(data, aggregate=False, verbose=0)[2] + groups[name] = finite_json(values) + # Reuse the package's aggregation, changing only which class groups enter it. + diagnostics[name] = float(metric._aggregate_groups({k: v for k, v in values.items() if str(k) in truth})) + official = finite_json( + evaluate_file(data, simple=True, hierarchical=False, pattern=r"^(precision|recall|f1|coverage|micro_accuracy)$", verbose=0) + ) + if scope != "common_0.96": + ref = source["report_zero" if scope == "zero" else "report_optimized"] + for metric, levels in official.items(): + if not np.isclose(levels["2"], ref[metric]["2"], atol=1e-12, rtol=0): + raise ValueError("Official metric changed") + pairs = Counter(zip(map(str, data.label[accepted]), map(str, data.prediction[accepted]), strict=True)) + rows[scope] = { + "threshold": threshold, + "images": len(data), + "accepted": int(accepted.sum()), + "truth_counts": dict(truth), + "predicted_counts": dict(predicted), + "official": official, + "truth_group_diagnostic": diagnostics, + "groups": groups, + "predicted_only": {k: v for k, v in predicted.items() if k not in truth}, + "truth_families_without_accepted_predictions": sorted(set(truth) - set(predicted)), + "false_positive_pairs": [{"truth": t, "prediction": p, "images": n} for (t, p), n in pairs.most_common() if t != p], + } + result["models"][model] = rows + return result + + +def export(data, output): + output.mkdir(parents=True, exist_ok=True) + write_json(output / "mambo-family-precision.json", data) + names = data["taxonomy"]["names"] + with (output / "mambo-family-precision.csv").open("w", newline="") as stream: + writer = csv.writer(stream, lineterminator="\n") + writer.writerow( + [ + "model", + "scope", + "threshold", + "family_id", + "family", + "truth_images", + "accepted_predictions", + "precision", + "precision_weight", + "recall", + "recall_weight", + "f1", + "f1_weight", + ] + ) + for model, scopes in data["models"].items(): + for scope, row in scopes.items(): + for family in sorted(row["groups"]["f1"]): + writer.writerow( + [ + model, + scope, + row["threshold"], + family, + names.get(family, family), + row["truth_counts"].get(family, 0), + row["predicted_counts"].get(family, 0), + *[v for metric in ("precision", "recall", "f1") for v in row["groups"][metric].get(family, (None, 0))], + ] + ) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--study", type=Path, default=Path("docs/assets/mambo-threshold-comparison.json")) + parser.add_argument("--taxonomy", type=Path, required=True, help="Verified family names and V2/V3 taxonomy provenance JSON") + parser.add_argument("--output", type=Path, required=True) + args = parser.parse_args() + export(collect(args.study, args.taxonomy), args.output) diff --git a/dev/releases/mambo_v3/figure_export.py b/dev/releases/mambo_v3/figure_export.py new file mode 100644 index 0000000..352e010 --- /dev/null +++ b/dev/releases/mambo_v3/figure_export.py @@ -0,0 +1,12 @@ +"""Shared SVG and PNG export for release reports.""" + + +def save_figure(fig, output, name, *, dpi=160): + """Save a figure without SVG timestamps or trailing whitespace, then close it.""" + import matplotlib.pyplot as plt + + svg = output / f"{name}.svg" + fig.savefig(svg, bbox_inches="tight", metadata={"Date": None}) + svg.write_text("\n".join(line.rstrip() for line in svg.read_text().splitlines()) + "\n") + fig.savefig(output / f"{name}.png", bbox_inches="tight", dpi=dpi) + plt.close(fig) diff --git a/dev/releases/mambo_v3/final-qualification.md b/dev/releases/mambo_v3/final-qualification.md new file mode 100644 index 0000000..0504b25 --- /dev/null +++ b/dev/releases/mambo_v3/final-qualification.md @@ -0,0 +1,51 @@ +# MAMBO V3 installed-artifact qualification + +Publication remains an owner action. The current preparation path builds the +candidate from a clean committed checkout, qualifies its installed wheels, and +only then stages public files. The authoritative source revision and artifact +hashes are the candidate's `release-candidate.json` and `SHA256SUMS`. + +## Current candidate records + +Local output: `local-evidence/mambo-v3-publication-candidate/`. The corresponding +Action output is `model-candidate`; the explicit upload set is +`model-publication`. A manifest with `qualification != "passed"` cannot be +staged. Inspect these retained records rather than treating this page as a +completion marker: + +| Record | What it establishes | +| --- | --- | +| `qualification/validation.json` | Exact installed wheel hashes, source identity, fixture type and completed contract checks | +| `qualification/download.json` | Actual pinned ERDA downloads through the installed ONNX-only package, global defaults, embeddings and offline cache reuse | +| `qualification/cpu-none.json` | PyTorch/ONNX global, regional/custom-list and embedding contracts on four images | +| `qualification/cpu-rotation30_pad25_3.json` | The same contracts with the default TTA recipe | +| `qualification/demo.json` | UI construction and real model calls through both backends, dynamic preset/custom/TTA controls, top-K and runtime reuse | +| `qualification/environment.txt` | Resolved runtime versions in the isolated qualification environment | +| `publication/*/publication.json` | Exact staged file inventory for GitHub, the Hub model or the Space | + +The CLI check writes JSON, evaluation CSV and unit embeddings using TTA and cached +offline weights. The ONNX-only installation is checked before installing Torch or +the training package. Dependency consistency is checked after installing both +backends. Qualification leaves the working development environment unchanged. + +## Evidence reuse and limits + +The prior September 25 candidate (`97521ac`) qualified offline/read-only bundle +use and laptop RTX 3080 Ti CUDA execution, including embeddings and TTA. Its +runtime execution reference was `0bfb5d7`. Those records remain historical and are +not relabelled as measurements of the newly built packages. The package identity +migration preserves `mini_trainer` imports; the new `configure()` interface changes +scope/TTA without replacing model sessions. Current installed CPU qualification +covers that interface. + +Trained weights, graphs, preprocessing, preset membership and evaluation policy +are unchanged. Existing Flemming/in-domain accuracy and laptop/B200 measurements +remain applicable within their documented boundaries; no full quality or speed +campaign is repeated. Synthetic CI images establish runtime contracts only; local +qualification can supply retained real images. Neither establishes new accuracy +or universal Windows/macOS/edge/CUDA compatibility. + +Training revision and original initialization-file identity remain unavailable; +see the model card's provenance limits. The Space is qualified locally; public +hosting, credentials, registry installation and live cross-links require the +owner's publication and post-publication checks in [the handoff](publication.md). diff --git a/dev/releases/mambo_v3/frequency_comparison.py b/dev/releases/mambo_v3/frequency_comparison.py new file mode 100644 index 0000000..90f2b6d --- /dev/null +++ b/dev/releases/mambo_v3/frequency_comparison.py @@ -0,0 +1,200 @@ +"""Compare pinned mini_metrics accuracy by training and evaluation class support.""" + +import argparse +import json +import tomllib +from collections import Counter +from pathlib import Path + +import numpy as np + +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.releases.mambo_v3.evaluation_data import write_json +from dev.releases.mambo_v3.metrics import REVISION, finite_json, require_pinned_metrics + +from .figure_export import save_figure + +BINS = { + "training": [(0, 1), (1, 25), (25, 100), (100, 500), (500, 2000), (2000, 10000), (10000, None)], + "flemming": [(1, 5), (5, 20), (20, 100), (100, 500), (500, None)], +} +PRESETS = ("north_europe", "europe", "full") + + +def counts(args): + import pyarrow as pa + import pyarrow.compute as pc + import pyarrow.parquet as pq + + source = tomllib.loads(Path("dev/releases/mambo_v3/construction.toml").read_text())["source"] + if file_hash(args.metadata) != source["sha256"]: + raise ValueError("Metadata differs from pinned release source") + table = pq.read_table(args.metadata, columns=["speciesKey", "set"]) + splits = pc.cast(table["set"], pa.int32()) + if splits.null_count or table["speciesKey"].null_count: + raise ValueError("Missing split or species") + if not pc.all(pc.and_(pc.greater_equal(splits, 0), pc.less_equal(splits, 9))).as_py(): + raise ValueError("Unexpected split codes") + train = table.filter(pc.greater_equal(splits, 2)) + frequencies = {str(row["values"]): row["counts"] for row in train["speciesKey"].value_counts().to_pylist()} + write_json( + args.output, + { + "metadata_sha256": source["sha256"], + "training_rows": train.num_rows, + "counts": frequencies, + "definition": "V3 source metadata rows with set 2..9; 0=test, 1=validation; no extra deduplication. " + "Common reference axis, not a claim about V2 effective training exposures.", + }, + ) + + +def measure(args): + from mini_metrics.data import MetricDF + from mini_metrics.metrics import evaluate_file + + require_pinned_metrics() + training = json.loads(args.counts.read_text()) + roots = {"v2": args.v2, "v3-torch": args.v3 / "torch-cuda-0-prediction", "v3-onnx": args.v3 / "onnx-cuda-0-prediction"} + result = { + "revision": REVISION, + "policy": "threshold=0; optimal=False; simple=True; hierarchical=False", + "training_definition": training["definition"], + "metadata_sha256": training["metadata_sha256"], + "training_rows": training["training_rows"], + "bins": BINS, + "cells": [], + "source_sha256": {}, + } + identity = None + for model, root in roots.items(): + report = json.loads((root / "report.json").read_text()) + if report["status"] != "complete": + raise ValueError("Incomplete quality run") + for preset in PRESETS: + source = root / preset / "mini_metric.csv" + digest = file_hash(source) + if digest != report["csv_sha256"][preset]: + raise ValueError("Changed prediction CSV") + data = MetricDF.from_source(source) + data = data[np.asarray(data.level) == 0] + if np.any(data.threshold != 0): + raise ValueError("Expected unthresholded predictions") + current = sorted(zip(data.filename.tolist(), data.label.tolist(), strict=True)) + if identity is None: + identity = current + support = Counter(data.label.tolist()) + result["species_support"] = { + label: {"flemming": n, "training": training["counts"].get(label, 0)} for label, n in sorted(support.items()) + } + if current != identity: + raise ValueError("Evaluation populations differ") + result["source_sha256"][str(source)] = digest + for axis, bins in BINS.items(): + values = np.array([result["species_support"][label][axis] for label in data.label]) + for lower, upper in bins: + selected = (values >= lower) & (values < upper if upper is not None else True) + subset = data[selected] + cell = { + "model": model, + "preset": preset, + "axis": axis, + "lower": lower, + "upper": upper, + "images": len(subset), + "species": len(set(subset.label)), + "known_images": int(np.asarray(subset.known_label).sum()), + } + for scope, known in (("all", False), ("known", True)): + cell[scope] = ( + finite_json( + evaluate_file( + subset, + threshold=0, + optimal=False, + known_only=known, + simple=True, + hierarchical=False, + pattern=r"^(accuracy|micro_accuracy)$", + verbose=0, + ) + ) + if (cell["known_images"] if known else cell["images"]) + else None + ) + result["cells"].append(cell) + print(model, preset, flush=True) + write_json(args.output, result) + + +def render(args): + import matplotlib + + matplotlib.use("Agg") + import matplotlib.pyplot as plt + + data = json.loads(args.data.read_text()) + plt.rcParams.update( + { + "svg.fonttype": "none", + "svg.hashsalt": "mambo-frequency-v1", + "axes.spines.top": False, + "axes.spines.right": False, + "font.size": 10, + } + ) + fig, axes = plt.subplots(2, 3, figsize=(15, 8), sharey=True) + for row, axis in enumerate(BINS): + bins = data["bins"][axis] + for col, preset in enumerate(PRESETS): + ax = axes[row, col] + for model, label, color in [("v2", "V2", "#8064a2"), ("v3-torch", "V3 PyTorch", "#098e92"), ("v3-onnx", "V3 ONNX", "#e8872e")]: + cells = [c for c in data["cells"] if c["model"] == model and c["preset"] == preset and c["axis"] == axis] + values = [c["all"]["accuracy"]["0"] if c["all"] else np.nan for c in cells] + ax.plot(range(len(bins)), values, marker="o", label=label, color=color, linestyle="--" if model == "v3-onnx" else "-") + counts = [str(c["species"]) for c in cells] + labels = [ + ("0" if lo == 0 else f"{lo}–{hi - 1}" if hi else f"{lo}+") + "\nn=" + n for (lo, hi), n in zip(bins, counts, strict=True) + ] + ax.set( + xticks=range(len(bins)), + xticklabels=labels, + ylim=(0, 1.05), + title={"north_europe": "Northern Europe", "europe": "Europe", "full": "Global"}[preset], + xlabel="V3 training metadata rows / species" if axis == "training" else "Flemming images / species", + ) + ax.tick_params(axis="x", labelsize=8) + ax.grid(axis="y", alpha=0.2) + if col == 0: + ax.set_ylabel("Macro species accuracy") + fig.legend(*axes[0, 0].get_legend_handles_labels(), loc="upper center", bbox_to_anchor=(0.5, 0.95), ncol=3, frameon=False) + fig.suptitle("Accuracy versus class frequency · all Flemming truth", fontsize=16) + fig.text( + 0.02, + 0.015, + "Pinned mini_metrics, no threshold optimization. n = species per bin; gaps = empty bins. " + "All 522 truth species retained.\nTraining axis uses the common V3 source split (set 2–9), not verified V2 training exposure. " + "Curves are descriptive; small bins are uncertain.", + fontsize=9, + ) + fig.tight_layout(rect=(0, 0.08, 1, 0.91)) + args.output.mkdir(parents=True, exist_ok=True) + save_figure(fig, args.output, "mambo-frequency-accuracy") + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + sub = parser.add_subparsers(dest="command", required=True) + prepare = sub.add_parser("counts") + prepare.add_argument("--metadata", type=Path, required=True) + compute = sub.add_parser("measure") + for name in ("counts", "v2", "v3"): + compute.add_argument("--" + name, type=Path, required=True) + plot = sub.add_parser("render") + plot.add_argument("--data", type=Path, required=True) + for command in (prepare, compute, plot): + command.add_argument("--output", type=Path, required=True) + args = parser.parse_args() + if args.command != "render" and args.output.exists(): + raise FileExistsError(args.output) + {"counts": counts, "measure": measure, "render": render}[args.command](args) diff --git a/dev/releases/mambo_v3/gpu_ceiling.py b/dev/releases/mambo_v3/gpu_ceiling.py new file mode 100644 index 0000000..9add36d --- /dev/null +++ b/dev/releases/mambo_v3/gpu_ceiling.py @@ -0,0 +1,187 @@ +"""Small Torch GPU-resident throughput reference, reusing a speed-smoke report.""" + +import argparse +import itertools +import json +import math +import os +import subprocess +import time +from concurrent.futures import ThreadPoolExecutor +from pathlib import Path + +import torch + +from deployment.mambo_deploy import Predictor +from deployment.mambo_deploy.preprocessing import prepare_batch +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.releases.mambo_v3.evaluation_data import write_json + + +def resident_call(predictor, bank, batch_size): + """Use the deployed CUDA preparation, backbone, head and global native ranks.""" + batches = itertools.cycle(bank.split(batch_size)) + plan = predictor.hierarchy_plan(predictor.selected) + + def call(): + output, _ = predictor._torch(next(batches), False, tensors=True) + predictor._model_events.clear() # Diagnostic events must not accumulate between calls. + return plan.torch_values(output[0].float(), output)[0] + + return call + + +def measure(call, batch_size, seconds, device): + # Warm lazy loading, kernels and allocator before calibrating the timed block. + for _ in range(5): + values = call() + torch.cuda.synchronize(device) + if not all(bool(torch.isfinite(value).all()) for value in values): + raise RuntimeError("Non-finite resident predictions") + start = time.perf_counter() + for _ in range(5): + call() + torch.cuda.synchronize(device) + iterations = max(5, math.ceil(seconds * 5 / (time.perf_counter() - start))) + torch.cuda.reset_peak_memory_stats(device) + started = time.time() + start = time.perf_counter() + for _ in range(iterations): + call() + torch.cuda.synchronize(device) + elapsed = time.perf_counter() - start + return { + "batch_size": batch_size, + "iterations": iterations, + "started_unix_seconds": started, + "finished_unix_seconds": time.time(), + "elapsed_seconds": elapsed, + "images_per_second": iterations * batch_size / elapsed, + "peak_allocated_gib": torch.cuda.max_memory_allocated(device) / 1024**3, + "peak_reserved_gib": torch.cuda.max_memory_reserved(device) / 1024**3, + } + + +def run(args): + if not torch.cuda.is_available(): + raise RuntimeError("This experiment requires CUDA") + baseline = json.loads(args.baseline.read_text()) + if baseline["settings"]["backend"] != "torch" or baseline["settings"]["tta"] != "none": + raise ValueError("Use the Torch, no-TTA smoke report") + args.output.mkdir(parents=True, exist_ok=False) + settings = baseline["settings"] + records = baseline["stream_samples"][: max(args.batches)] + if len(records) < max(args.batches): + raise ValueError("Baseline report has too few sample images") + paths = [Path(settings["root"]) / r["path"] for r in records] + print(f"Checking and preparing {len(paths)} existing sample images once.", flush=True) + with ThreadPoolExecutor(max_workers=4) as pool: + for record, digest in zip(records, pool.map(file_hash, paths), strict=True): + if digest != record["sha256"]: + raise ValueError("Sample image bytes changed") + host = prepare_batch(paths, pool, compact=True) + device = "cuda:0" + predictor = Predictor(settings["bundle"], backend="torch", device=device, precision=settings["precision"], model="full", threads=4) + if file_hash(predictor.bundle.root / "release.json") != baseline["bundle_sha256"]: + raise ValueError("Bundle manifest differs from the smoke run") + bank = torch.from_numpy(host).to(device) + del host + report = { + "status": "running", + "commit": subprocess.check_output(["git", "rev-parse", "HEAD"], text=True).strip(), + "baseline": str(args.baseline.resolve()), + "baseline_sha256": file_hash(args.baseline), + "bundle_sha256": baseline["bundle_sha256"], + "samples": records, + "torch": torch.__version__, + "cuda": torch.version.cuda, + "precision": predictor.effective_precision, + "gpu": subprocess.check_output(["nvidia-smi", "-L"], text=True), + "cuda_visible_devices": os.environ.get("CUDA_VISIBLE_DEVICES"), + "device": str(torch.cuda.get_device_properties(device)), + "boundary": ( + "Resident uint8 input through GPU preprocessing, backbone, head and global hierarchy logits; " + "no H2D/D2H, CPU prediction objects, TTA or embeddings." + ), + "cells": [], + } + write_json(args.output / "report.json", report) + with (args.output / "gpu.csv").open("w") as telemetry: + monitor = subprocess.Popen( + [ + "nvidia-smi", + "--query-gpu=timestamp,uuid,utilization.gpu,utilization.memory,power.draw,memory.used,clocks.sm", + "--format=csv", + "-lms", + "200", + ], + stdout=telemetry, + stderr=subprocess.STDOUT, + ) + try: + with torch.inference_mode(): + for size in args.batches: + print(f"Batch {size}: warming, then approximately {args.seconds:g}s sustained inference.", flush=True) + try: + cell = measure(resident_call(predictor, bank, size), size, args.seconds, device) + except torch.cuda.OutOfMemoryError: + report["cells"].append({"batch_size": size, "status": "out_of_memory"}) + write_json(args.output / "report.json", report) + torch.cuda.empty_cache() + print("Memory limit reached; retaining smaller-batch results.", flush=True) + break + report["cells"].append(cell) + write_json(args.output / "report.json", report) + print(f"{size}: {cell['images_per_second']:.1f} images/s; {cell['peak_allocated_gib']:.2f} GiB allocated", flush=True) + completed = [c for c in report["cells"] if "images_per_second" in c] + if not completed: + raise RuntimeError("No batch size fit; try smaller --batches") + best = max(completed, key=lambda c: c["images_per_second"]) + report["best_batch_size"] = best["batch_size"] + print(f"Capturing a short trace at batch {best['batch_size']} (excluded from throughput).", flush=True) + call = resident_call(predictor, bank, best["batch_size"]) + for _ in range(3): + call() + torch.cuda.synchronize(device) + try: + with torch.profiler.profile( + activities=[torch.profiler.ProfilerActivity.CPU, torch.profiler.ProfilerActivity.CUDA] + ) as profile: + for _ in range(8): + call() + torch.cuda.synchronize(device) + profile.export_chrome_trace(str(args.output / "trace.json.gz")) + report["trace"] = "trace.json.gz" + except RuntimeError as error: + report["trace_error"] = str(error) + print(f"Profiler unavailable; timing and telemetry retained: {error}", flush=True) + finally: + monitor.terminate() + monitor.wait() + report["status"] = "complete" + write_json(args.output / "report.json", report) + lines = ["batch_size,images_per_second,peak_allocated_gib,peak_reserved_gib"] + lines.extend( + f"{c['batch_size']},{c['images_per_second']:.1f},{c['peak_allocated_gib']:.2f},{c['peak_reserved_gib']:.2f}" for c in completed + ) + (args.output / "summary.csv").write_text("\n".join(lines) + "\n") + print(f"Done: {args.output}", flush=True) + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--baseline", type=Path, required=True, help="Existing speed-smoke torch/report.json") + parser.add_argument("--output", type=Path, required=True, help="New persistent output directory") + parser.add_argument("--batches", type=int, nargs="+", default=[256, 512, 1024]) + parser.add_argument("--seconds", type=float, default=20, help="Approximate sustained duration per batch size") + args = parser.parse_args() + if not math.isfinite(args.seconds) or args.seconds <= 0 or min(args.batches) < 1: + parser.error("Batch sizes and seconds must be positive and finite") + args.batches = sorted(set(args.batches)) + if any(max(args.batches) % b for b in args.batches): + parser.error("Every batch size must divide the largest batch size") + run(args) + + +if __name__ == "__main__": + main() diff --git a/dev/releases/mambo_v3/hash_images.py b/dev/releases/mambo_v3/hash_images.py new file mode 100644 index 0000000..e6637d3 --- /dev/null +++ b/dev/releases/mambo_v3/hash_images.py @@ -0,0 +1,91 @@ +"""Concurrent image reads for cache warmup, with resumable verified hashes.""" + +import hashlib +import json +import os +import sqlite3 +import time +from concurrent.futures import FIRST_COMPLETED, ThreadPoolExecutor, wait +from pathlib import Path + +from dev.benchmarks.inference.onnx_inference import file_hash + + +def default_workers(): + cpus = len(os.sched_getaffinity(0)) if hasattr(os, "sched_getaffinity") else os.cpu_count() or 1 + return min(256, max(8, 2 * cpus)) + + +def hash_images(records, root, checkpoint, provenance, workers=None): + """Preserve record ordering; overlap cold reads without queuing the whole dataset.""" + workers = default_workers() if workers is None else workers + if workers < 1: + raise ValueError("Hash workers must be positive") + root = Path(root).resolve() + identity = hashlib.sha256(json.dumps([str(root), provenance, records], sort_keys=True).encode()).hexdigest() + connection = sqlite3.connect(checkpoint) + try: + connection.execute("CREATE TABLE IF NOT EXISTS identity (value TEXT NOT NULL)") + previous = connection.execute("SELECT value FROM identity").fetchone() + if previous and previous[0] != identity: + raise ValueError("Hash checkpoint belongs to different inputs; use a fresh cache") + if not previous: + connection.execute("INSERT INTO identity VALUES (?)", (identity,)) + connection.execute("CREATE TABLE IF NOT EXISTS hashes (idx INTEGER PRIMARY KEY, digest TEXT, size INTEGER, mtime INTEGER)") + connection.commit() + cached = {i: (digest, size, mtime) for i, digest, size, mtime in connection.execute("SELECT * FROM hashes")} + + def read(index): + path = (root / records[index]["path"]).resolve() + if not path.is_relative_to(root): + raise ValueError(f"Unsafe image path: {records[index]['path']}") + before = path.stat() + stamp = (before.st_size, before.st_mtime_ns) + prior = cached.get(index) + if prior and prior[1:] == stamp: + return index, prior[0], *stamp, True + digest = file_hash(path) + after = path.stat() + if (after.st_size, after.st_mtime_ns) != stamp: + raise ValueError(f"Image changed while hashing: {path}") + return index, digest, *stamp, False + + done_count = reused = 0 + started = reported = time.monotonic() + print(f"Hashing {len(records):,} images with {workers} concurrent readers; checkpoint: {checkpoint}", flush=True) + indices = iter(range(len(records))) + pending = set() + with ThreadPoolExecutor(max_workers=workers) as pool: + try: + for index in indices: + pending.add(pool.submit(read, index)) + if len(pending) >= workers * 2: + break + while pending: + finished, pending = wait(pending, timeout=5, return_when=FIRST_COMPLETED) + for future in finished: + index, digest, size, mtime, was_cached = future.result() + records[index]["sha256"] = digest + if not was_cached: + connection.execute("INSERT OR REPLACE INTO hashes VALUES (?, ?, ?, ?)", (index, digest, size, mtime)) + done_count += 1 + reused += was_cached + following = next(indices, None) + if following is not None: + pending.add(pool.submit(read, following)) + now = time.monotonic() + if now - reported >= 5 or not pending: + connection.commit() + elapsed = max(now - started, 0.001) + print( + f"Hashed {done_count:,}/{len(records):,} ({reused:,} reused); " + f"{done_count / elapsed:.1f} images/s; {len(pending)} queued/running; {elapsed:.0f}s elapsed", + flush=True, + ) + reported = now + finally: + connection.commit() + for future in pending: + future.cancel() + finally: + connection.close() diff --git a/dev/releases/mambo_v3/hpc_speed_report.py b/dev/releases/mambo_v3/hpc_speed_report.py new file mode 100644 index 0000000..0139821 --- /dev/null +++ b/dev/releases/mambo_v3/hpc_speed_report.py @@ -0,0 +1,127 @@ +"""Publish the completed four-variant B200 smoke without mixing historical campaigns.""" + +import argparse +import csv +import hashlib +import json +import statistics +from pathlib import Path + +import matplotlib + +matplotlib.use("Agg") +import matplotlib.pyplot as plt +from matplotlib.ticker import NullFormatter + +from dev.releases.mambo_v3.defaults_report import SERIES + + +def publish(source, output, baseline): + output.mkdir(parents=True, exist_ok=True) + provenance = {"environment": json.loads((source / "environment.json").read_text()), "reports": {}} + observations = [] + baseline_rows = list(csv.DictReader(baseline.open())) + provenance["retained_request_baseline"] = { + "file": baseline.name, + "sha256": hashlib.sha256(baseline.read_bytes()).hexdigest(), + "scope": "CPU and smaller GPU batches; earlier campaign, not rerun", + } + plt.rcParams.update({"svg.fonttype": "none", "svg.hashsalt": "mambo-hpc-current-speed-v1"}) + fig, axes = plt.subplots(1, 3, figsize=(15, 5.2)) + for ax, device in zip(axes[:2], ("cpu", "cuda:0")): + all_batches = set() + for variant, label, color in SERIES: + rows = [ + r + for r in baseline_rows + if r["device"] == device + and r["preset"] == "full" + and r["variant"] == variant + and not (device == "cuda:0" and variant != "v2" and int(r["batch_size"]) == 256) + ] + batches = sorted({int(r["batch_size"]) for r in rows}) + all_batches.update(batches) + groups = [[float(r["images_per_second"]) for r in rows if int(r["batch_size"]) == b] for b in batches] + medians = [statistics.median(g) for g in groups] + ax.errorbar( + batches, + medians, + yerr=[[m - min(g) for m, g in zip(medians, groups)], [max(g) - m for m, g in zip(medians, groups)]], + color=color, + label=label, + marker="o", + markerfacecolor="white", + capsize=3, + ) + if device != "cpu": + all_batches.add(256) + ticks = sorted(all_batches) + ax.set(xscale="log", xlabel="Batch size", ylabel="Images/s", xticks=ticks) + ax.set_xticklabels(ticks) + ax.xaxis.set_minor_formatter(NullFormatter()) + for row, (variant, label, color) in enumerate(SERIES[1:]): + path = source / variant / "report.json" + report = json.loads(path.read_text()) + if report["status"] != "complete": + raise ValueError(f"Incomplete report: {variant}") + cell = report["cells"][0] + if cell["batch_size"] != 256 or cell["preset"] != "full": + raise ValueError("Expected global preset and batch 256") + provenance["reports"][variant] = { + "sha256": hashlib.sha256(path.read_bytes()).hexdigest(), + **{k: report[k] for k in ("runtime", "settings", "bundle_sha256", "manifest_sha256", "effective_precision")}, + "list_sha256": cell["list_sha256"], + "peak_host_gib": report["peak_rss_kib_linux"] / 1024**2, + } + for mode in ("end_to_end", "streaming"): + data = cell[mode] + images = cell["batch_size"] if mode == "end_to_end" else data["images"] + rates = [images / seconds for seconds in data["seconds"]] + rate = images / data["median_seconds"] + spread = [[rate - min(rates)], [max(rates) - rate]] + if mode == "end_to_end": + axes[1].errorbar(256, rate, yerr=spread, color=color, marker="D", capsize=3, linestyle="none") + else: + axes[2].barh(row, rate, color=color, height=0.58) + axes[2].errorbar(rate, row, xerr=spread, color="#333333", capsize=3) + axes[2].text(max(rates) + 28, row, f"{rate:,.0f}", va="center", fontsize=10) + observations.extend( + dict(variant=variant, mode=mode, repetition=i + 1, images=images, seconds=seconds, images_per_second=images / seconds) + for i, seconds in enumerate(data["seconds"]) + ) + for ax, title in zip(axes, ("EPYC CPU · request", "B200 · request", "B200 · streaming, batch 256")): + ax.set_title(title) + ax.grid(alpha=0.15) + ax.set_axisbelow(True) + ax.spines[["top", "right"]].set_visible(False) + axes[2].set(xlabel="Images/s", xlim=(0, 2400), yticks=range(4), yticklabels=[s[1] for s in SERIES[1:]]) + axes[2].invert_yaxis() + fig.legend(*axes[0].get_legend_handles_labels(), loc="upper center", ncol=5) + fig.text( + 0.02, + 0.025, + "Global vocabulary · circles/lines: retained earlier CPU and GPU request measurements; diamonds/bars: updated B200 batch 256.\n" + "Median and range; earlier: 3 process trials. Updated: 3 repetitions per variant; streaming: 4,096 warm images including startup.\n" + "Different campaigns are not joined as a scaling curve. Updated runtime: " + f"{provenance['environment']['commit'][:7]}. Settings and source observations: linked evidence.", + fontsize=9, + ) + fig.tight_layout(rect=(0, 0.15, 1, 0.91)) + path = output / "mambo-hpc-current-speed.svg" + fig.savefig(path, metadata={"Date": None}) + plt.close(fig) + path.write_text("\n".join(line.rstrip() for line in path.read_text().splitlines()) + "\n") + with (output / "mambo-hpc-current-speed.csv").open("w") as stream: + writer = csv.DictWriter(stream, fieldnames=list(observations[0])) + writer.writeheader() + writer.writerows(observations) + (output / "mambo-hpc-current-provenance.json").write_text(json.dumps(provenance, indent=2) + "\n") + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--source", type=Path, required=True) + parser.add_argument("--output", type=Path, required=True) + parser.add_argument("--baseline", type=Path, default=Path("docs/assets/mambo-indomain-speed.csv")) + args = parser.parse_args() + publish(args.source, args.output, args.baseline) diff --git a/dev/releases/mambo_v3/indomain_report.py b/dev/releases/mambo_v3/indomain_report.py new file mode 100644 index 0000000..2e12846 --- /dev/null +++ b/dev/releases/mambo_v3/indomain_report.py @@ -0,0 +1,199 @@ +"""Apply the Flemming calibration and support policy to the UCloud test predictions.""" + +import argparse +import csv +import json +from pathlib import Path + +import numpy as np + +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.releases.mambo_v3.defaults_report import SERIES +from dev.releases.mambo_v3.evaluation_data import write_json +from dev.releases.mambo_v3.metrics import REVISION, finite_json, require_pinned_metrics +from dev.releases.mambo_v3.tail_charts import render_paired +from dev.releases.mambo_v3.tail_report import collect as collect_tails +from dev.releases.mambo_v3.threshold_report import identity +from dev.releases.mambo_v3.ucloud_release import validated_report + + +def collect(root, output): + from mini_metrics.data import MetricDF + from mini_metrics.metrics import MacroF1, OptimalConfidenceThreshold, evaluate_file + + require_pinned_metrics() + plan = json.loads((root / "full/plan.json").read_text()) + if plan["status"] != "complete" or set(plan["completed"]) != {m for m, _, _ in SERIES}: + raise ValueError("Require five completed models") + output.mkdir(parents=True, exist_ok=True) + study = { + "revision": REVISION, + "plan_sha256": file_hash(root / "full/plan.json"), + "preset": "full", + "tta": "rotation30_pad25_3", + "split": "MetricDF.split((0.9, 0.1), strata=('label',), seed=42); reporting/calibration; grouped by instance_id", + "policy": "Per-rank MacroF1; eps=0.01; use_quantiles=True; n_bootstraps=0; all truth", + "models": {}, + } + expected = None + for model, _, _ in SERIES: + folder = root / "full" / model + report = validated_report(folder) + if file_hash(folder / "report.json") != plan["reports_sha256"][model] or report["samples"] != 632913: + raise ValueError("Changed or incomplete report") + source = folder / "full/mini_metric.csv" + data = MetricDF.from_source(source) + if np.any(data.threshold != 0) or not np.isfinite(data.confidence).all(): + raise ValueError("Require unthresholded finite predictions") + reporting, calibration = data.split((0.9, 0.1), strata=("label",), seed=42) + identities = {"full": identity(data), "report": identity(reporting), "calibration": identity(calibration)} + if expected is not None and expected != identities: + raise ValueError("Models differ in reporting/calibration populations") + expected = identities + if set(reporting.instance_id) & set(calibration.instance_id): + raise ValueError("Calibration leakage") + selected = OptimalConfidenceThreshold(crit=MacroF1, eps=0.01, use_quantiles=True, n_bootstraps=0)(calibration, verbose=0) + thresholds = [float(selected[k]) for k in range(3)] + row = { + "source": str(source), + "source_sha256": file_hash(source), + "identities": identities, + "report_images": len(set(reporting.instance_id)), + "calibration_images": len(set(calibration.instance_id)), + "thresholds": thresholds, + } + for scope, vector in (("zero", 0), ("optimized", thresholds)): + row[f"report_{scope}"] = finite_json( + evaluate_file( + reporting, + threshold=vector, + optimal=False, + known_only=False, + simple=True, + hierarchical=False, + pattern=r"^(accuracy|micro_accuracy|precision|recall|f1|coverage|theilU)$", + verbose=0, + ) + ) + study["models"][model] = row + write_json(output / "mambo-indomain-thresholds.json", study) + print(model, thresholds, row["report_images"], row["calibration_images"], flush=True) + tails = collect_tails(study) + first = next(iter(study["models"].values())) + tails.update( + tta=study["tta"], + report_images=first["report_images"], + calibration_images=first["calibration_images"], + dataset_title="In-domain global-lepi test · global vocabulary", + independent_recipe=True, + ) + write_json(output / "mambo-indomain-tail.json", tails) + rows = [{**{k: v for k, v in row.items() if k not in ("metrics", "classes")}, **row["metrics"]} for row in tails["rows"]] + with (output / "mambo-indomain-tail.csv").open("w") as stream: + writer = csv.DictWriter(stream, fieldnames=list(rows[0]), lineterminator="\n") + writer.writeheader() + writer.writerows(rows) + publish(output) + + +def publish(output): + tails = json.loads((output / "mambo-indomain-tail.json").read_text()) + study = json.loads((output / "mambo-indomain-thresholds.json").read_text()) + compact = {k: v for k, v in tails.items() if k != "rows"} + compact["rows"] = [ + {k: v for k, v in r.items() if k != "classes"} + for r in tails["rows"] + if r["cutoff"] == -1 or (r["cutoff"] == 5 and r["domain"] == "common") + ] + compact["shared_class_domains"] = { + f"{r['scope']}/{r['rank']}": r["classes"] + for r in tails["rows"] + if r["model"] == "torch" and r["cutoff"] == 5 and r["domain"] == "common" + } + write_json(output / "mambo-indomain-support.json", compact) + render_paired(tails, output) + for suffix in ("svg", "png"): + (output / f"mambo-threshold-tail.{suffix}").rename(output / f"mambo-indomain-quality.{suffix}") + + lookup = {(r["model"], r["scope"], r["rank"], r["cutoff"], r["domain"]): r for r in tails["rows"]} + text = "# In-domain deployment evidence\n\n" + text += ( + f"Global vocabulary; {tails['report_images']:,} reporting images and {tails['calibration_images']:,} " + "separate calibration images from the original 632,913-image test split. " + "All truth is in vocabulary. Shared label-stratified 90/10 split, seed 42, grouped by image ID; " + "per-rank mini_metrics Macro-F1 calibration, eps=0.01, quantiles, no bootstraps.\n\n" + "The recipe was selected on Flemming. These general photographs complement the more deployment-relevant " + "Flemming monitoring crops; their different TTA response does not invalidate that deployment evidence.\n\n" + "Full support / >5 values use the same reporting rows. >5 requires truth and accepted-prediction support " + "in every pipeline, separately per confidence setting. No rows are removed; per-class FP/FN remain intact.\n\n" + ) + for level, rank in enumerate(("species", "genus", "family")): + text += ( + f"## {rank.title()}\n\n| Pipeline | Confidence | Threshold | " + "Macro accuracy (full / >5) | Macro-F1 (full / >5) | Coverage |\n|---|---|---:|---:|---:|---:|\n" + ) + for model, label, _ in SERIES: + for scope, name in (("zero", "None"), ("optimized", "Calibrated")): + a = lookup[model, scope, rank, -1, "per_model"] + b = lookup[model, scope, rank, 5, "common"] + t = study["models"][model]["thresholds"][level] if scope == "optimized" else 0 + text += ( + f"| {label} | {name} | {t:.4f} | {a['metrics']['accuracy']:.2%} / {b['metrics']['accuracy']:.2%} | " + f"{a['metrics']['f1']:.4f} / {b['metrics']['f1']:.4f} | {a['overall_coverage']:.2%} |\n" + ) + text += "\n" + text += ( + "## Support outside the truncated average\n\n" + "| Confidence | Rank | Shared classes | Truth images outside | Proportion |\n|---|---|---:|---:|---:|\n" + ) + for scope in ("zero", "optimized"): + for rank in ("species", "genus", "family"): + row = lookup["torch", scope, rank, 5, "common"] + n = row["report_images"] - row["truth_images_in_retained_classes"] + text += f"| {scope} | {rank} | {row['class_count']} | {n:,} | {n / row['report_images']:.2%} |\n" + text += ( + "\nMachine-readable [metrics](assets/mambo-indomain-tail.csv), " + "[thresholds and split identities](assets/mambo-indomain-thresholds.json), and " + "[class domains](assets/mambo-indomain-support.json) retain provenance and supplementary metrics. " + "Thresholds are dataset-specific evidence, not new deployment defaults.\n" + ) + text += ( + "\n## Historical HPC timing boundaries\n\n" + "The latest V3 B200 timings are in the [current HPC evidence](mambo-hpc-evidence.md). " + "The observations below predate the pipeline improvements.\n\n" + "The EPYC 9655/B200 campaign retains 3 fresh-process trials per variant/device, 7 request observations " + "per cell and 3 streaming observations per cell. Global and northern-Europe timing presets are available. " + "CPU runtime threads: 4; streaming preparation workers: 48; readers: 256. " + "Request, streaming and prepared-input diagnostics have different boundaries; do not pool them. " + "The short streaming bank contains 1,024 images and includes pipeline startup. " + "Prepared-input diagnostics exclude decoding/hierarchy reduction but include transfers, and remain supplementary.\n\n" + "[Request observations](assets/mambo-indomain-speed.csv) and " + "[streaming observations](assets/mambo-indomain-streaming-speed.csv) retain all trials. " + "[Campaign provenance](assets/mambo-indomain-campaign.json) identifies source hashes and runtime environments. " + "Peak host memory spans each complete benchmark process and its tested batch sizes; it is not per-cell model memory. " + "V2 was tested through batch 32 on GPU, V3 through batch 256.\n\n" + "## Reproduce\n\n" + "Use the pinned mini_metrics environment described in the [UCloud workflow](../dev/releases/mambo_v3/ucloud-release.md). " + "From the repository root, with the extracted archive beneath `local-evidence/ucloud-2026-09-25/`:\n\n" + "```sh\npython -m dev.releases.mambo_v3.indomain_report \\\n" + " --root local-evidence/ucloud-2026-09-25/mambo-results/runs-transfers \\\n" + " --output local-evidence/ucloud-2026-09-25/presentation\n" + "python -m dev.releases.mambo_v3.indomain_speed \\\n" + " --source local-evidence/ucloud-2026-09-25/mambo-results/summary-transfers \\\n" + " --output local-evidence/ucloud-2026-09-25/presentation\n```\n" + ) + (output / "mambo-indomain-evidence.md").write_text(text) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--root", type=Path) + parser.add_argument("--render-only", action="store_true") + parser.add_argument("--output", type=Path, required=True) + args = parser.parse_args() + if args.render_only: + publish(args.output) + elif args.root is None: + parser.error("--root is required for collection") + else: + collect(args.root, args.output) diff --git a/dev/releases/mambo_v3/indomain_speed.py b/dev/releases/mambo_v3/indomain_speed.py new file mode 100644 index 0000000..78d8ec4 --- /dev/null +++ b/dev/releases/mambo_v3/indomain_speed.py @@ -0,0 +1,81 @@ +"""Render environment-specific throughput from the validated UCloud summary.""" + +import argparse +import csv +import hashlib +import json +import shutil +import statistics +from pathlib import Path + +import matplotlib + +matplotlib.use("Agg") +import matplotlib.pyplot as plt + +from dev.releases.mambo_v3.defaults_report import SERIES + +parser = argparse.ArgumentParser(description="Render HPC request and streaming throughput separately") +parser.add_argument("--source", type=Path, required=True) +parser.add_argument("--output", type=Path, required=True) +args = parser.parse_args() +root, out = args.source, args.output +out.mkdir(parents=True, exist_ok=True) +rows = list(csv.DictReader((root / "speed.csv").open())) +streams = list(csv.DictReader((root / "streaming_speed.csv").open())) +fig, axes = plt.subplots(1, 3, figsize=(15, 4.8)) +plt.rcParams.update({"svg.fonttype": "none", "svg.hashsalt": "mambo-indomain-speed-v1"}) +for ax, device in zip(axes[:2], ["cpu", "cuda:0"]): + for model, label, color in SERIES: + subset = [r for r in rows if r["device"] == device and r["preset"] == "full" and r["variant"] == model] + batches = sorted({int(r["batch_size"]) for r in subset}) + groups = [[float(r["images_per_second"]) for r in subset if int(r["batch_size"]) == b] for b in batches] + med = [statistics.median(g) for g in groups] + ax.errorbar( + batches, + med, + yerr=[[m - min(g) for m, g in zip(med, groups)], [max(g) - m for m, g in zip(med, groups)]], + label=label, + color=color, + marker="o", + capsize=3, + ) + ax.set( + xscale="log", + xlabel="Batch size", + ylabel="Images/s", + title="EPYC CPU · request" if device == "cpu" else "B200 · request", + xticks=batches, + ) + ax.set_xticklabels(batches) + ax.grid(alpha=0.15) +ax = axes[2] +for i, (model, label, color) in enumerate(SERIES[1:]): + vals = [float(r["images_per_second"]) for r in streams if r["device"] == "cuda:0" and r["preset"] == "full" and r["variant"] == model] + med = statistics.median(vals) + ax.barh(i, med, color=color) + ax.errorbar(med, i, xerr=[[med - min(vals)], [max(vals) - med]], color="black", capsize=3) +ax.set(yticks=range(4), yticklabels=[r[1] for r in SERIES[1:]], xlabel="Images/s", title="B200 · streaming, batch 256") +ax.invert_yaxis() +fig.legend(*axes[0].get_legend_handles_labels(), loc="upper center", ncol=5) +fig.text( + 0.02, + 0.02, + "Global vocabulary; median and range of 3 process trials. CPU runtime threads: 4. Streaming: 1,024 images, startup included.\n" + "Request and streaming are different execution modes; these are measured pipeline rates, not GPU throughput ceilings.", + fontsize=10, +) +fig.tight_layout(rect=(0, 0.1, 1, 0.91)) +fig.savefig(out / "mambo-indomain-speed.svg", metadata={"Date": None}) +path = out / "mambo-indomain-speed.svg" +path.write_text("\n".join(line.rstrip() for line in path.read_text().splitlines()) + "\n") + +# Retain the exact source observations and campaign identities alongside the figure. +for source, destination in (("speed.csv", "speed.csv"), ("streaming_speed.csv", "streaming-speed.csv")): + shutil.copy2(root / source, out / ("mambo-indomain-" + destination)) +data = json.loads((root / "ucloud-summary.json").read_text()) +provenance = {k: data[k] for k in ("environment_id", "fingerprint", "metric_revision", "policy", "sample_ids_sha256", "timing_bank_sha256")} +for name in ("ucloud-summary.json", "speed.csv", "streaming_speed.csv"): + with (root / name).open("rb") as stream: + provenance.setdefault("source_sha256", {})[name] = hashlib.file_digest(stream, "sha256").hexdigest() +(out / "mambo-indomain-campaign.json").write_text(json.dumps(provenance, indent=2) + "\n") diff --git a/dev/releases/mambo_v3/inventory.toml b/dev/releases/mambo_v3/inventory.toml new file mode 100644 index 0000000..da6f7a4 --- /dev/null +++ b/dev/releases/mambo_v3/inventory.toml @@ -0,0 +1,323 @@ +schema_version = 1 +production = "global-lepi-production-release-20260911T150236Z" +legacy_commit = "32b3cd661778356b2e8c4cff5b10fa9061aa6f5d" + +[[artifacts]] +path = "MAMBO/hierarchical_bioclip2_ft_eu_v1.pt" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/MAMBO/hierarchical_bioclip2_ft_eu_v1.pt" +size = 21151665 +sha256 = "da676e0389eedbfd9a798b6fc45b293905968313a46cf9be6ed53ea74f525df9" +status = "observed_unpinned_legacy" + +[[artifacts]] +path = "MAMBO/hierarchical_bioclip2_ft_neu_v1.pt" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/MAMBO/hierarchical_bioclip2_ft_neu_v1.pt" +size = 21143364 +sha256 = "34fe04302877de5540ed847859efb6b676876d5efc9401cd3336905e10ead568" +status = "observed_unpinned_legacy" + +[[artifacts]] +path = "MAMBO/hierarchical_bioclip2_ft_v1.pt" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/MAMBO/hierarchical_bioclip2_ft_v1.pt" +size = 21127207 +sha256 = "047cfdcb3162d09f2a32482b8e699de240095226400e90922866751d1b00d413" +status = "observed_unpinned_legacy" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/SHA256SUMS" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/SHA256SUMS" +size = 166421 +sha256 = "e608a584ec550df0bcdfc23df007a1d8fc42013756d1fa8bea5138933938586b" +status = "metadata_readback" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/expert/baseline/COMPLETED" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/expert/baseline/COMPLETED" +size = 0 +sha256 = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/expert/baseline/all_labels.csv" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/expert/baseline/all_labels.csv" +size = 578 +sha256 = "a19afb807c8d5e81800b6adaaaa1a19d99fd950ed6bf0fce408fc922a556cf07" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/expert/baseline/all_labels.json" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/expert/baseline/all_labels.json" +size = 1121 +sha256 = "921e665d5a7140688d657e1d5a981e5961aabb17c0b7a0bfccd60266c5cd667f" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/expert/baseline/commands.sh" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/expert/baseline/commands.sh" +size = 848 +sha256 = "8884f48277175f780b544d6cb429e9c39259616f22ef87064986402058b5c91b" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/expert/baseline/input.sha256" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/expert/baseline/input.sha256" +size = 114 +sha256 = "5806c384780dbbfcf86e9f9151548b08e914ef63d0aba86aaf5e57dd879f269e" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/expert/baseline/known_labels.csv" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/expert/baseline/known_labels.csv" +size = 577 +sha256 = "0befc063a4d475c29215160acdb2dc50594428273016b602a04dcce1ebca4868" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/expert/baseline/known_labels.json" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/expert/baseline/known_labels.json" +size = 1120 +sha256 = "84d250b7fc35d38e549e192c98c542e4432f90701ca6bc45a0406b7e9282cc28" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/expert/baseline/per_class.csv" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/expert/baseline/per_class.csv" +size = 82829 +sha256 = "e07abe5c7e64c1d47cb436d9c7d3199e0f1d1fffa074674554552de2ceab32f7" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/expert/baseline/provenance.txt" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/expert/baseline/provenance.txt" +size = 117 +sha256 = "ef5a9c5a9e9876646d5cdc6db3d0eb5f18ae16a0a127dbecb0e18a564f0ab8fb" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/expert/optimal-all-labels/all_labels.csv" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/expert/optimal-all-labels/all_labels.csv" +size = 471 +sha256 = "83498c86976160a83a0854cf2ea5aeef77456cf189e332b9978baf7529fdc6c9" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/expert/optimal-all-labels/all_labels.json" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/expert/optimal-all-labels/all_labels.json" +size = 1011 +sha256 = "0cc85fa7148b373bc1505d34502872367b94650000a6b9687f9116257a948642" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/expert/optimal-known-only/known.csv" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/expert/optimal-known-only/known.csv" +size = 468 +sha256 = "6f9821fe61afcfd314f5684e6c923d21eafce35ea48c21b3be114dc676fec207" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/expert/optimal-known-only/known.json" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/expert/optimal-known-only/known.json" +size = 1008 +sha256 = "e7b8839408bd75e9d00b75d17ea3255d75878e928170c86431bc78a92e936827" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/expert/predictions/mini_metric.csv" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/expert/predictions/mini_metric.csv" +size = 23694718 +sha256 = "7d7ecf27f82fb3aa048a63278072a81b428fcf5a1fd2cdefa136403b2b5a8d84" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/expert/provenance/inference.yaml" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/expert/provenance/inference.yaml" +size = 125 +sha256 = "7bf2573f5f179cdaf77cf20840f74cc5839c47b1fa123a2c20892677ef141afb" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/expert/provenance/predictions-config.yaml" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/expert/provenance/predictions-config.yaml" +size = 472 +sha256 = "896b5332946e207d076c0f06fe770bdc9445ce02597e797bbd090e0caa334b40" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/expert/provenance/staging.json" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/expert/provenance/staging.json" +size = 14986156 +sha256 = "e72de8fe8e67b51e9240e0f3533a23459bdc21b650b616e510331574c05ac53a" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/in-domain/all_labels_optimal/metrics.csv" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/in-domain/all_labels_optimal/metrics.csv" +size = 466 +sha256 = "7235ca63d8c31e76ebf881066008d9299575665b8781cbd05657d21a7ab87c77" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/in-domain/all_labels_optimal/metrics.json" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/in-domain/all_labels_optimal/metrics.json" +size = 1004 +sha256 = "c2a245e90cdbf8af8cef30cd48ea8a17540ddfa3efc9e713a0e492c2944c78ee" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/in-domain/all_labels_zero/metrics.csv" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/in-domain/all_labels_zero/metrics.csv" +size = 446 +sha256 = "93f92970467610669fe842ce75bdba2ed9f692f5ad0fed026196dac551888615" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/in-domain/all_labels_zero/metrics.json" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/in-domain/all_labels_zero/metrics.json" +size = 966 +sha256 = "cc1b8a96aba102040307f5aa1f51623e54a77b30898e61b95dd46406ff2a7072" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/in-domain/known_only_optimal/metrics.csv" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/in-domain/known_only_optimal/metrics.csv" +size = 466 +sha256 = "7235ca63d8c31e76ebf881066008d9299575665b8781cbd05657d21a7ab87c77" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/in-domain/known_only_optimal/metrics.json" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/in-domain/known_only_optimal/metrics.json" +size = 1004 +sha256 = "c2a245e90cdbf8af8cef30cd48ea8a17540ddfa3efc9e713a0e492c2944c78ee" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/in-domain/known_only_zero/metrics.csv" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/in-domain/known_only_zero/metrics.csv" +size = 446 +sha256 = "93f92970467610669fe842ce75bdba2ed9f692f5ad0fed026196dac551888615" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/in-domain/known_only_zero/metrics.json" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/in-domain/known_only_zero/metrics.json" +size = 966 +sha256 = "cc1b8a96aba102040307f5aa1f51623e54a77b30898e61b95dd46406ff2a7072" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/in-domain/predictions/mini_metric.csv" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/in-domain/predictions/mini_metric.csv" +size = 185880109 +sha256 = "9675f9f5a2f0a0e3f9f6b58fafe96af2fafb673dd1d8ee992ba34e984ccc7611" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/in-domain/provenance/inference.yaml" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/in-domain/provenance/inference.yaml" +size = 178 +sha256 = "19beb3fc39b75af3ee09c9c3de0bec1e918b49f1f171bd3d4ef9dbf5f70ab9fa" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/in-domain/provenance/predictions-config.yaml" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/in-domain/provenance/predictions-config.yaml" +size = 516 +sha256 = "6562cca001d7b183a2a6f5106dda05f9861c09396b2a158a0597692a1abf0fd7" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/in-domain/provenance/staging.json" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/in-domain/provenance/staging.json" +size = 123661500 +sha256 = "fa07a494006ef3eb95a7201a66f23dd615cca62e35d3213c5c3860c039fde6ed" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/export/preprocessing.json" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/export/preprocessing.json" +size = 459 +sha256 = "5381bfa42a975a731641182a8a3e78f12b24c4842fe129da5b391253e3079e2a" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/models/onnx-fp32/manifest.json" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/onnx-fp32/manifest.json" +size = 1787397 +sha256 = "a49e6ee862f24095cc2f66e309b5704c47011b54c11a7bfa56f432342e26b32b" +status = "metadata_readback" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/models/onnx-fp32/model.onnx" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/onnx-fp32/model.onnx" +size = 1527453 +sha256 = "aa02baa22765a04de03c5ba46029e2a66ca7e430bfddce0a001af5cec2e7c15d" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/models/onnx-fp32/model.onnx.data" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/onnx-fp32/model.onnx.data" +size = 151838720 +sha256 = "9ffb389ec4c6fe9864a4dfb16b167cf68950d7fa35b3fa39d84b1987b1845f4e" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/models/pytorch/best.pt" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/pytorch/best.pt" +size = 153951029 +sha256 = "174b9214bfea2df69e4f5c5d16afd841fec961db4274f3e6bf474cef9cab5e8a" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/provenance.json" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/provenance.json" +size = 270678 +sha256 = "bf61291b2271a02d14c9043dbf54d97f2475df7c8f1ec27e41e39bd1f040b2dc" +status = "metadata_readback" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/training/production-w32.yaml" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/training/production-w32.yaml" +size = 1435 +sha256 = "43a30581599230bc8482007eb2f7dbcff86c9c786e272539eb5b7c92450fa039" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/training/run-metadata/config.yaml" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/training/run-metadata/config.yaml" +size = 1906 +sha256 = "a10caf8c1abca6b1660c0ca4c6e3cc42687512f1db02501bf1a3e236165c960f" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/viewer/browser-model/manifest.json" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/viewer/browser-model/manifest.json" +size = 294850 +sha256 = "d84e148626581e568df76832f257c7e59db944b343fe5cbc1f0636467874cf8d" +status = "metadata_readback" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/viewer/browser-model/model.onnx" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/viewer/browser-model/model.onnx" +size = 1932003 +sha256 = "70130c3dbc2b8a6bc4610bb213a1aaf029816fb634faf104bbb27ffa997dfc44" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/viewer/browser-model/model.onnx.data" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/viewer/browser-model/model.onnx.data" +size = 151838720 +sha256 = "9ffb389ec4c6fe9864a4dfb16b167cf68950d7fa35b3fa39d84b1987b1845f4e" +status = "verified" + +[presets.europe] +path = "presets/europe.classes" +source = "MAMBO/hierarchical_bioclip2_ft_eu_v1.pt" +count = 3014 +sha256 = "df66152ba29ba979b32741db4a0dc7c85db18fa65eac5602ca4aab702343de90" + +[presets.north_europe] +path = "presets/north_europe.classes" +source = "MAMBO/hierarchical_bioclip2_ft_neu_v1.pt" +count = 1977 +sha256 = "065bb3ade45c970ca129c7507b56ed62fe16b84251961bf53352f5098b8b2be6" diff --git a/dev/releases/mambo_v3/legacy_evaluation.py b/dev/releases/mambo_v3/legacy_evaluation.py new file mode 100644 index 0000000..bfdddc1 --- /dev/null +++ b/dev/releases/mambo_v3/legacy_evaluation.py @@ -0,0 +1,234 @@ +"""Evaluate pinned MAMBO_v2 through its original source in an isolated process.""" + +import argparse +import csv +import hashlib +import importlib.metadata +import resource +import subprocess +import time +import tomllib +from concurrent.futures import ThreadPoolExecutor +from contextlib import ExitStack +from pathlib import Path + +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.releases.mambo_v3.benchmark import snapshot, timing +from dev.releases.mambo_v3.evaluation_data import CSV_COLUMNS, canonical_rows, load_records, write_json + +COMMIT = "32b3cd661778356b2e8c4cff5b10fa9061aa6f5d" +PRESETS = ("north_europe", "europe", "full") +FILENAMES = dict( + zip(PRESETS, ("hierarchical_bioclip2_ft_neu_v1.pt", "hierarchical_bioclip2_ft_eu_v1.pt", "hierarchical_bioclip2_ft_v1.pt"), strict=True) +) + + +def verify_source(source): + """Require byte-identical source for every Python file in the pinned release.""" + names = subprocess.check_output(["git", "ls-tree", "-r", "--name-only", COMMIT, "mini_trainer"], text=True).splitlines() + for name in names: + if name.endswith(".py"): + expected = subprocess.check_output(["git", "show", f"{COMMIT}:{name}"]) + if (source / name).read_bytes() != expected: + raise ValueError(f"Changed legacy source: {name}") + import mini_trainer + + if Path(mini_trainer.__file__).resolve() != (source / "mini_trainer/__init__.py").resolve(): + raise ValueError("Use python -P with PYTHONPATH=legacy-source:current-checkout") + + +def load_states(root): + """Validate all three published masks, and prove learned tensors are identical.""" + import torch + + inventory = tomllib.loads(Path(__file__).with_name("inventory.toml").read_text()) + hashes = {Path(a["path"]).name: a["sha256"] for a in inventory["artifacts"]} + states = {} + for preset, filename in FILENAMES.items(): + path = root / filename + if file_hash(path) != hashes[filename]: + raise ValueError(f"Changed legacy weights: {path}") + states[preset] = torch.load(path, map_location="cpu", weights_only=True) + full = states["full"] + for state in states.values(): + if state.keys() - {"classifier.active_indices"} != full.keys() - {"classifier.active_indices"}: + raise ValueError("Legacy state keys differ") + for key, value in state.items(): + if key == "classifier.active_indices": + continue + equal = torch.equal(value, full[key]) if isinstance(value, torch.Tensor) else value == full[key] + if not equal: + raise ValueError(f"Learned legacy parameters differ: {key}") + return states, {name: hashes[filename] for name, filename in FILENAMES.items()} + + +def verify_backbone(): + """Pin the external frozen backbone as well as the small release head files.""" + from huggingface_hub import hf_hub_download + + expected = { + "open_clip_config.json": "1bf947e96e943fe50efd5c3e26c37f843a2fa3c358967719a68c8a6d17ce68c8", + "open_clip_model.safetensors": "b7b2bf6fbc95799e42630e394cf95803892ab447c1a8ab629dbc82fbeaf7dfef", + } + for name, digest in expected.items(): + path = hf_hub_download("imageomics/bioclip-2", name, local_files_only=True) + if file_hash(path) != digest: + raise ValueError(f"Unexpected cached BioCLIP-2 file: {name}") + return expected + + +def run(args): + args.output.mkdir(parents=True, exist_ok=False) + report = {"status": "running", "release": "MAMBO_v2", "source_commit": COMMIT, "runner_sha256": file_hash(__file__)} + try: + verify_source(args.source) + import torch + from mini_trainer.classifier import bypass_submodule, classification_module + + from mini_trainer.deploy import Predictor + + torch.set_num_threads(args.threads) + torch.backends.cuda.matmul.allow_tf32 = False + torch.backends.cudnn.allow_tf32 = False + torch.backends.cudnn.benchmark = False + report["settings"] = {k: str(v) if isinstance(v, Path) else v for k, v in vars(args).items()} + report["runtime"] = { + name: importlib.metadata.version(name) for name in ("torch", "torchvision", "open_clip_torch", "timm", "huggingface_hub") + } + report["precision"] = "original API: CUDA float16 autocast; CPU without autocast; checkpoint preprocessing dtype retained; TF32 off" + report["backbone_sha256"] = verify_backbone() + states, report["weights_sha256"] = load_states(args.weights) + masks = { + name: state["classifier.active_indices"].tolist() + if "classifier.active_indices" in state + else list(range(len(state["classifier._extra_state"]["cls2idx"]["0"]))) + for name, state in states.items() + } + mapping = states["full"]["classifier._extra_state"]["cls2idx"]["0"] + inverse = {v: k for k, v in mapping.items()} + report["lists"] = { + name: {"count": len(mask), "sha256": hashlib.sha256(("\n".join(inverse[i] for i in mask) + "\n").encode()).hexdigest()} + for name, mask in masks.items() + } + del states + manifest, records = load_records( + args.manifest, args.root, max(args.bank_size, max(args.batches or [32])) if args.phase == "benchmark" else args.count + ) + write_json(args.output / "samples.json", records) + report.update( + samples=len(records), + dataset=manifest["dataset"], + manifest_sha256=file_hash(args.manifest), + sample_ids_sha256=file_hash(args.output / "samples.json"), + ) + report["before"] = snapshot() + start = time.perf_counter() + predictor = Predictor(device=args.device, model=str(args.weights / FILENAMES["full"])) + report["cpu_input_cast"] = args.cpu_float32 + if args.cpu_float32: + if args.device != "cpu": + raise ValueError("The ancillary float32 input adapter is CPU-only") + original_preproc = predictor.preproc + predictor.preproc = lambda image: original_preproc(image).float() + first = predictor.predict(str(args.root / records[0]["path"])) + list(first) # Complete CPU label/confidence materialization before stopping the clock. + report["load_and_first_image_seconds"] = time.perf_counter() - start + classifier = classification_module(predictor.model) + report["input"] = { + "reader_size": predictor.resize_size, + "preprocessed_shape": list(predictor.preproc(predictor.reader(str(args.root / records[0]["path"])).unsqueeze(0)).shape), + } + + def features(paths, pool): + with torch.inference_mode(), torch.autocast(device_type=predictor.device.type, enabled=predictor.device.type == "cuda"): + batch = torch.stack(list(pool.map(predictor.reader, paths))) + batch = predictor.preproc(batch).to(predictor.device) + with bypass_submodule(predictor.model, predictor.model._backbone_output_name): + return predictor.model(batch) + + if args.phase == "benchmark": + paths = [str(args.root / r["path"]) for r in records] + if any(file_hash(path) != r["sha256"] for path, r in zip(paths, records, strict=True)): + raise ValueError("Benchmark images changed") + report["cells"] = [] + for size in args.batches or ([1, 8] if args.device == "cpu" else [1, 8, 32]): + for preset in args.presets: + predictor._apply_class_mask(-1 if preset == "full" else masks[preset]) + + def call(): + prediction = predictor.predict(paths[:size]) + # Match v3's completed CPU results; no deferred GPU work. + prediction.indices.cpu() + prediction.confidence.cpu() + + for _ in range(2): + call() + observed = timing(call, 7) + report["cells"].append({"preset": preset, "batch_size": size, "end_to_end": observed, "resources": snapshot()}) + print(preset, size, round(size / observed["median_seconds"], 2), flush=True) + else: + report["qualification"] = {} + with ExitStack() as stack: + pool = stack.enter_context(ThreadPoolExecutor(max_workers=4)) + writers = {} + for preset in args.presets: + directory = args.output / preset + directory.mkdir() + writer = csv.writer(stack.enter_context((directory / "mini_metric.csv").open("w", newline=""))) + writer.writerow(CSV_COLUMNS) + writers[preset] = writer + for offset in range(0, len(records), args.batch_size): + selected = records[offset : offset + args.batch_size] + paths = [str(args.root / r["path"]) for r in selected] + if any(file_hash(path) != r["sha256"] for path, r in zip(paths, selected, strict=True)): + raise ValueError("Evaluation image changed") + encoded = features(paths, pool) + with torch.inference_mode(), torch.autocast(device_type=predictor.device.type, enabled=predictor.device.type == "cuda"): + for preset in args.presets: + predictor._apply_class_mask(-1 if preset == "full" else masks[preset]) + prediction = classifier.predict(encoded) + if args.phase == "qualification" or offset == 0: + direct = predictor.predict(paths) + if direct.labels != prediction.labels: + raise ValueError(f"Cached-feature predictions differ from original API: {preset}") + report["qualification"][preset] = "all sampled labels identical to original API" + writers[preset].writerows(canonical_rows(selected, prediction, offset)) + if offset % (args.batch_size * 50) == 0: + print(offset + len(selected), len(records), flush=True) + report["csv_sha256"] = {name: file_hash(args.output / name / "mini_metric.csv") for name in args.presets} + if args.device != "cpu": + report["torch_peak_allocated_bytes"] = torch.cuda.max_memory_allocated() + report["torch_peak_reserved_bytes"] = torch.cuda.max_memory_reserved() + report["status"] = "complete" + except Exception as error: + report.update(status="failed", error=f"{type(error).__name__}: {error}") + raise + finally: + report["peak_rss_kib_linux"] = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss + report["after"] = snapshot() + write_json(args.output / "report.json", report) + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("phase", choices=("qualification", "full", "benchmark")) + for name in ("source", "weights", "manifest", "root", "output"): + parser.add_argument(f"--{name}", type=Path, required=True) + parser.add_argument("--device", default="cuda:0") + parser.add_argument("--threads", type=int, default=4) + parser.add_argument("--batch-size", type=int, default=32) + parser.add_argument("--count", type=int) + parser.add_argument("--cpu-float32", action="store_true", help="Ancillary CPU run: cast original preprocessor output to float32") + parser.add_argument("--presets", nargs="+", choices=PRESETS, default=list(PRESETS)) + parser.add_argument("--batches", nargs="+", type=int) + parser.add_argument("--bank-size", type=int, default=32) + args = parser.parse_args() + if min(args.batches or [1]) < 1 or args.bank_size < 1 or args.threads < 1 or args.batch_size < 1: + parser.error("Batch sizes, bank size and threads must be positive") + if args.phase == "qualification" and args.count is None: + args.count = 256 + run(args) + + +if __name__ == "__main__": + main() diff --git a/dev/releases/mambo_v3/metrics.py b/dev/releases/mambo_v3/metrics.py new file mode 100644 index 0000000..ede4e88 --- /dev/null +++ b/dev/releases/mambo_v3/metrics.py @@ -0,0 +1,127 @@ +"""Evaluate canonical release CSVs at the campaign's pinned mini_metrics revision.""" + +import argparse +import importlib.metadata +import json +import math +from pathlib import Path + +import numpy as np + +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.releases.mambo_v3.evaluation_data import write_json + +REVISION = "70cc69adc05362863439277048e06386c1f885e1" +METRIC_SCHEMA = "mini-metrics-quality-v2" + + +def finite_json(value): + if isinstance(value, dict): + return {str(k): finite_json(v) for k, v in value.items()} + if isinstance(value, (list, tuple)): + return [finite_json(v) for v in value] + if isinstance(value, np.generic): + value = value.item() + if isinstance(value, float) and not math.isfinite(value): + return None + return value + + +def require_pinned_metrics(): + """Reject metric environments without the campaign's recorded Git revision.""" + distribution = importlib.metadata.distribution("mini_metrics") + provenance = json.loads(distribution.read_text("direct_url.json") or "{}") + if provenance.get("vcs_info", {}).get("commit_id") != REVISION: + raise ValueError(f"Require mini_metrics git revision {REVISION} in a separate environment") + + +def measure(source): + from mini_metrics.data import MetricDF + from mini_metrics.metrics import evaluate_file + + require_pinned_metrics() + data = MetricDF.from_source(source) + if np.any(data.threshold != 0) or not np.isfinite(data.confidence).all(): + raise ValueError("Evaluation requires finite, unthresholded predictions") + result = { + "metric_schema": METRIC_SCHEMA, + "source_sha256": file_hash(source), + "mini_metrics_revision": REVISION, + "policy": "threshold=0; no optimization; undefined metrics are null", + "ranks": {}, + } + for level, rank in enumerate(("species", "genus", "family")): + selected = np.asarray(data.level) == level + known = selected & np.asarray(data.known_label) + result["ranks"][rank] = { + "images": int(selected.sum()), + "known_images": int(known.sum()), + "list_coverage": float(known.sum() / selected.sum()), + "truth_species_or_taxa": len(set(data.label[selected])), + } + for scope, known_only, per_class in (("all", False, False), ("known", True, False), ("per_class", False, True)): + result[scope] = finite_json( + evaluate_file( + data, + threshold=0, + optimal=False, + known_only=known_only, + per_class=per_class, + simple=True, + hierarchical=False, + pattern=r"^(micro_accuracy|accuracy|f1|recall|precision|coverage|theilU)$", + verbose=0, + ) + ) + for level, rank in enumerate(("species", "genus", "family")): + row = result["ranks"][rank] + row["micro_accuracy_all"] = result["all"]["micro_accuracy"][str(level)] + row["micro_accuracy_known"] = result["known"]["micro_accuracy"][str(level)] if row["known_images"] else None + row["macro_accuracy_all"] = result["all"]["accuracy"][str(level)] + row["macro_accuracy_known"] = result["known"]["accuracy"][str(level)] if row["known_images"] else None + row["abstention_coverage"] = result["all"]["coverage"][str(level)] + return result + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + sources = parser.add_mutually_exclusive_group(required=True) + sources.add_argument("--source", type=Path) + sources.add_argument("--collection", type=Path, help="Completed run_local full directory") + parser.add_argument("--output", type=Path) + args = parser.parse_args() + if args.collection: + plan = json.loads((args.collection / "plan.json").read_text()) + if plan["status"] != "complete": + raise ValueError("Collection phase is not complete") + for variant in plan["completed"]: + root = args.collection / variant + report = json.loads((root / "report.json").read_text()) + if report["status"] != "complete": + raise ValueError("Incomplete variant") + for name, digest in report["csv_sha256"].items(): + source = root / name / "mini_metric.csv" + if file_hash(source) != digest: + raise ValueError("Prediction CSV changed since collection") + output = source.with_name("metrics.json") + if output.exists(): + prior = json.loads(output.read_text()) + if prior["source_sha256"] != digest or prior["mini_metrics_revision"] != REVISION: + raise ValueError("Existing metrics do not match this input or pinned revision") + if prior.get("metric_schema") == METRIC_SCHEMA: + continue + raise ValueError("Existing metrics use an older extractor; archive them before recomputing") + write_json(output, measure(source)) + print(variant, name, flush=True) + else: + if args.output is None: + parser.error("--output is required with --source") + if args.output.exists(): + raise FileExistsError(args.output) + report = measure(args.source) + write_json(args.output, report) + print(json.dumps(report["ranks"], indent=2)) + + +if __name__ == "__main__": + main() diff --git a/dev/releases/mambo_v3/model-provenance.toml b/dev/releases/mambo_v3/model-provenance.toml new file mode 100644 index 0000000..affbe2a --- /dev/null +++ b/dev/releases/mambo_v3/model-provenance.toml @@ -0,0 +1,46 @@ +schema = "mambo-model-provenance-v1" +model_id = "MAMBO_v3" +architecture = "EfficientNetV2-S with normalized hierarchical classifier" +training_run = "global_lepi_production_w32_1" +training_started = "2026-09-10" +training_finished = "2026-09-11" +best_epoch = 30 +best_epoch_source = "Checksum-verified training/console.log: Best model found at epoch 30" +seed = 42 +training_epochs = 30 +training_world_size = 4 +training_source_revision_status = "Not recorded in retained checkpoint, config, or console log; packaging checkout is not asserted as training source." +initialization_status = "Source-based reconstruction: torchvision DEFAULT EfficientNetV2-S backbone and a new normalized hierarchical head, seed 42; original initialization checkpoint/hash and run-specific preparation manifest not retained." +packaging_checkout = "52954edae5dae31a62ecb639533e6f8573d57055" +packaging_checkout_role = "Original September 11 export/package environment only" +weights_license = "CC-BY-NC-SA-4.0" +weights_license_status = "Prepared for release following owner preference for non-commercial share-alike weights; code remains MIT" + +[checkpoint] +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/pytorch/best.pt" +sha256 = "174b9214bfea2df69e4f5c5d16afd841fec961db4274f3e6bf474cef9cab5e8a" + +[training_log] +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/training/console.log" +sha256 = "d710f226651413ced619ff5e63da1e731a650959eaee4b86632358ea847e5e54" + +[epoch_summary] +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/training/logs/summary.csv" +sha256 = "be1bf9f00729e3c0afdd56c4b2209a2bfe79e92bb1b0a2aa6013c18798c095b2" + +[configuration] +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/training/run-metadata/config.yaml" +sha256 = "a10caf8c1abca6b1660c0ca4c6e3cc42687512f1db02501bf1a3e236165c960f" + +[initialization_recipe] +evidence_kind = "Source-based reconstruction, not a retained initial-checkpoint identity" +source_revision = "53599f5c3e70c8e6ae683a205168e55bca38ab59" +preparation_source = "dev/ucloud/worker.py:prepare" +production_source = "dev/ucloud/production.py:generate" +backbone_factory = "mini_trainer/modeling/architectures/torchvision.py:get_torchvision_model" +backbone_weights = "EfficientNet_V2_S_Weights.DEFAULT (IMAGENET1K_V1)" +upstream_weights_url = "https://download.pytorch.org/models/efficientnet_v2_s-dd5fe13b.pth" +upstream_documentation = "https://docs.pytorch.org/vision/stable/models/generated/torchvision.models.efficientnet_v2_s.html" +initial_checkpoint_name = "initial_seed42.pt" +initial_checkpoint_sha256_status = "Not retained" +seed = 42 diff --git a/dev/releases/mambo_v3/package_download_metadata.py b/dev/releases/mambo_v3/package_download_metadata.py new file mode 100644 index 0000000..fbfdd6a --- /dev/null +++ b/dev/releases/mambo_v3/package_download_metadata.py @@ -0,0 +1,52 @@ +"""Freeze a verified local bundle's small metadata for automatic ERDA bootstrap.""" + +import argparse +import hashlib +import json +import re +from pathlib import Path + +from deployment.mambo_deploy.bundle import Bundle + + +def distribution_readme(ref="MAMBO_v3"): + """Keep documentation links meaningful in PyPI metadata and extracted bundles.""" + root = Path(__file__).resolve().parents[3] + readme = root / "deployment/README.md" + + def link(match): + prefix, target = match.groups() + if "://" in target or target.startswith("#"): + return match.group(0) + filename, separator, anchor = target.partition("#") + relative = (readme.parent / filename).resolve().relative_to(root).as_posix() + base = ( + "https://raw.githubusercontent.com/asgersvenning/mini_trainer/" + if prefix.startswith("!") + else "https://github.com/asgersvenning/mini_trainer/blob/" + ) + return f"{prefix}({base}{ref}/{relative}{separator}{anchor})" + + return re.sub(r"(!?\[[^\]]*\])\(([^)]+)\)", link, readme.read_text()) + + +def package(source, output): + bundle = Bundle(source) + metadata = {} + for relative in bundle.manifest["files"]: + if relative not in bundle.manifest["origins"]: + metadata[relative] = bundle.file(relative).read_text() + # Ship current integration guidance, not the README frozen in the local bundle. + metadata["README.md"] = distribution_readme() + data = metadata["README.md"].encode() + bundle.manifest["files"]["README.md"] = {"size": len(data), "sha256": hashlib.sha256(data).hexdigest()} + metadata["release.json"] = json.dumps(bundle.manifest, indent=2) + "\n" + output.write_text(json.dumps({"metadata": metadata}, ensure_ascii=False, indent=2) + "\n") + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("source", type=Path) + parser.add_argument("output", type=Path) + args = parser.parse_args() + package(args.source, args.output) diff --git a/dev/releases/mambo_v3/pipeline-probe.md b/dev/releases/mambo_v3/pipeline-probe.md new file mode 100644 index 0000000..d6a94e0 --- /dev/null +++ b/dev/releases/mambo_v3/pipeline-probe.md @@ -0,0 +1,109 @@ +# Diagnose deployment pipeline costs + +These optional tools isolate costs before changing the pipeline. Use the existing +CUDA environment from the [repository setup](../../../README.md#local-installation) +or [UCloud speed workflow](speed-smoke.md), run from the repository root, and choose +fresh output directories. They do not require another quality evaluation. + +| Tool | Measured boundary | Use when | +| --- | --- | --- | +| `pipeline_probe` | Synthetic scores replace model execution; real preprocessing, transfers and public results remain | Locating non-model overhead and contention | +| `pipeline_stages` | Isolated preparation, result construction and CUDA operator trace | Inspecting a specific operation or allocation | +| `gpu_ceiling` | Resident inputs through the deployed Torch model; outputs stay on-device | Comparing streaming throughput with sustained model execution | + +Current decisions, failed approaches and remaining targets belong in the +[pipeline review](../../../docs/mambo-inference-pipeline-review.md); published +measurements and provenance belong in [HPC evidence](../../../docs/mambo-hpc-evidence.md). +Further throughput work is deferred for the release freeze. + +## Profile without model execution + +```sh +CUDA_VISIBLE_DEVICES=0 .venv/bin/python -m dev.releases.mambo_v3.pipeline_probe \ + --bundle local-evidence/mambo-bundle-presets-v2 \ + --manifest local-evidence/mambo-v3/flemming-manifest.json \ + --root /home/asger/data/flemming \ + --output local-evidence/pipeline-probe-new \ + --count 1025 --batch-size 64 --workers 4 +``` + +Substitute actual local paths. No weights are loaded. All modes use the same fixed +synthetic species/genus/family scores and vocabulary: + +- `resident`: a prepared uint8 batch is already on the GPU. +- `host`: the same batch starts in pinned host memory and uses two-slot H2D staging. +- `stream`: real image paths exercise the complete preparation pipeline. + +Each mode has one excluded warmup and one timed pass. The probe verifies result +count, including the partial tail, and that no model was instantiated. `report.json` +retains sample hashes, settings, GPU identity, throughput, transfer/input counters, +submission/result-worker durations and caller waits. + +Removing model latency changes overlap and backpressure. This is **not an HPC +emulator**: laptop crops and four workers do not reproduce large photos and 48 +workers. Durations overlap; do not sum them or interpret host waits as GPU idle time. +Use a profile to locate expensive work and an unprofiled run to measure it. + +## Isolate preparation and result stages + +```sh +CUDA_VISIBLE_DEVICES=0 .venv/bin/python -m dev.releases.mambo_v3.pipeline_stages \ + --output local-evidence/pipeline-stages-new +``` + +The probe uses decoded 256-square/2048-square RGB images and synthetic scores, +excluding filesystem, decoding and model execution. CPU stage timings go to +`report.json`; `trace.json` and `operators.txt` record CUDA operators, allocations +and strides. **CUDA trace timings are diagnostic, not unprofiled throughput.** + +Prior profiling justified native RGB gathering, reused interpolation/score scratch, +lazy vocabulary maps and fused normalization. Output-copy pooling did not justify +its added complexity. Native sampling perturbed execution and was used only to +locate costs. Detailed local evidence is ignored under +`local-evidence/pipeline-profile/` and `local-evidence/pipeline-stages/` (stage baseline +`c497a9d`, RTX 3080 Ti Laptop); these paths are not guaranteed on another checkout. +The linked HPC evidence qualifies the combined implementation. + +## Measure resident GPU throughput + +Reuse a completed Torch/no-TTA speed-smoke report and its working environment: + +```sh +.venv-mambo-runtime/bin/python -m dev.releases.mambo_v3.gpu_ceiling \ + --baseline /work/mambo-speed/b200-full-compact/torch/report.json \ + --output /work/mambo-speed/b200-resident +``` + +The probe verifies the bundle and first 1,024 sample images, prepares them once, +and keeps uint8 inputs on the GPU. Calls include deployed GPU preprocessing, +backbone, classifier and global hierarchy logits. Loading, H2D/D2H, CPU results, +embeddings and TTA are excluded; precision follows the baseline report. + +Batches 256, 512 and 1,024 each receive warmup and approximately 20 seconds of +sustained inference, synchronized at block boundaries. Smaller-batch results survive +an out-of-memory failure. Expect roughly 2–4 minutes plus cold-storage delays; +keep other GPU workloads idle. For a small local check, use `--batches 8 16 --seconds 1`. + +| Output | Interpretation | +| --- | --- | +| `summary.csv`, `report.json` | Throughput, timing windows, sample/bundle hashes, runtime/device and Torch allocated/reserved peaks, including the resident bank | +| `gpu.csv` | 200 ms utilization/power/memory/clock samples; match device identity because nvidia-smi may see other GPUs | +| `trace.json.gz` | Separate eight-call trace at the fastest batch; profiler failure is recorded without discarding timings | + +Return the complete folder. A throughput plateau plus continuously occupied kernels +supports a practical reference for this implementation, not a hardware maximum. +Compare matching batch sizes; the prepared-input smoke diagnostic has a different +boundary. Neither these timings nor the mocked modes are additive pipeline phases. + +## Qualify a change + +Inspect service demand and ownership before adding queues or workers. An owner +blocked in `events.get()` is waiting, not necessarily consuming CPU. Preserve +geometry, rounding, tie/NaN behavior, raw scores, custom transforms, ordering, +partial batches and buffer lifetimes. Cross-stream copies need completion and +lifetime handling as well as `non_blocking=True`. + +Use existing preprocessing/result/streaming tests for changed contracts, then the +[four-variant speed smoke](speed-smoke.md) when target throughput remains unresolved. +Do not infer HPC gains from isolated local timings or rerun a full evaluation +campaign for unchanged prediction behavior. diff --git a/dev/releases/mambo_v3/pipeline_probe.py b/dev/releases/mambo_v3/pipeline_probe.py new file mode 100644 index 0000000..3889c76 --- /dev/null +++ b/dev/releases/mambo_v3/pipeline_probe.py @@ -0,0 +1,159 @@ +"""Small pipeline diagnostic with synthetic device scores in place of model execution.""" + +import argparse +import json +import time +from concurrent.futures import ThreadPoolExecutor +from contextlib import contextmanager +from itertools import batched +from pathlib import Path +from unittest.mock import patch + +import torch + +from deployment.mambo_deploy import Predictor +from deployment.mambo_deploy import predictor as predictor_module +from deployment.mambo_deploy.preprocessing import prepare_batch +from deployment.mambo_deploy.result_worker import ResultWorker +from deployment.mambo_deploy.transfers import device_batches, pinned_factory +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.releases.mambo_v3.evaluation_data import load_records, write_json + + +@contextmanager +def measured_results(predictor, stats): + class MeasuredWorker(ResultWorker): + def __init__(self, function): + def process(*args): + start = time.perf_counter() + try: + return function(*args) + finally: + stats["result_worker_seconds"] += time.perf_counter() - start + + super().__init__(process) + + def pop(self): + start = time.perf_counter() + try: + return super().pop() + finally: + stats["result_wait_seconds"] += time.perf_counter() - start + + ranked = predictor._ranked_views + + def submit(*args, **kwargs): + start = time.perf_counter() + try: + return ranked(*args, **kwargs) + finally: + stats["submission_seconds"] += time.perf_counter() - start + + with patch.object(predictor_module, "ResultWorker", MeasuredWorker), patch.object(predictor, "_ranked_views", submit): + yield + + +def run(args): + if not torch.cuda.is_available(): + raise RuntimeError("CUDA is required to retain the deployed transfer and preprocessing path") + args.output.mkdir(parents=True, exist_ok=False) + torch.set_num_threads(4) + _, records = load_records(args.manifest, args.root, args.count) + paths = [args.root / record["path"] for record in records] + with ThreadPoolExecutor(max_workers=args.workers) as pool: + # Warm the selected files once, outside timings; retain their identity. + hashes = list(pool.map(file_hash, paths)) + p = Predictor(args.bundle, backend="torch", device="cuda:0", model="full", batch_size=args.batch_size, precision="auto") + plan = p.hierarchy_plan(p.selected) + generator = torch.Generator(device=p.device).manual_seed(20260925) + leaf = torch.randn((args.batch_size, len(plan.labels[0])), generator=generator, device=p.device) + scores = plan.torch_values(leaf)[0] + + def mock_model(images, embeddings, *, tensors=False): + assert tensors and not embeddings + p._device_preprocess(images) # Keep the actual batched uint8 -> FP32 preprocessing. + return [score[: len(images)] for score in scores], None + + # One real prepared batch is reused only in the modes that exclude input preparation. + with ThreadPoolExecutor(max_workers=args.workers) as pool: + prepared = prepare_batch(paths[: args.batch_size], pool, compact=True, decode=p._decode) + host = pinned_factory(p.device, compact=True)(prepared.shape) + host[...] = prepared + resident = torch.from_numpy(host).to(p.device) + report = { + "boundary": "Synthetic native rank logits replace backbone/head; GPU preprocessing, transfers and Prediction remain real.", + "limitations": "Zero model latency changes overlap/backpressure. Local diagnostic rates are not HPC deployment estimates.", + "settings": {k: str(v) if isinstance(v, Path) else v for k, v in vars(args).items()}, + "torch": torch.__version__, + "gpu": str(torch.cuda.get_device_properties(p.device)), + "samples": [{"path": str(path), "sha256": digest} for path, digest in zip(paths, hashes, strict=True)], + "cells": [], + } + with patch.object(p, "_torch", mock_model): + for mode in ("resident", "host", "stream"): + + def prepared_batches(items, batch_size, *, stats, **options): + def source(): + for index, batch in enumerate(batched(items, batch_size)): + yield index * batch_size, (host[: len(batch)],) + + if mode == "host": + yield from device_batches(source(), "torch", p.device, stats) + else: + for offset, views in source(): + count = len(views[0]) + yield offset, (resident[:count],), count + + def consume(selected, stats): + return sum( + len(result) + for result in p.predict_stream( + selected, + prepare_workers=args.workers, + read_workers=32, + read_window=max(args.batch_size, 128), + stats=stats, + ) + ) + + replacement = p.prepared_batches if mode == "stream" else prepared_batches + with patch.object(p, "prepared_batches", replacement): + # Warm kernels/result paths once; warmup is excluded from all counters. + consume(paths[: args.batch_size], {}) + torch.cuda.synchronize() + stats = dict(result_worker_seconds=0.0, result_wait_seconds=0.0, submission_seconds=0.0) + p.runtime_timings.clear() + with measured_results(p, stats): + start = time.perf_counter() + count = consume(paths, stats) + torch.cuda.synchronize() + elapsed = time.perf_counter() - start + assert count == len(paths) and p._torch_model is None + cell = dict( + mode=mode, + images=count, + seconds=elapsed, + images_per_second=count / elapsed, + pipeline=stats, + runtime=dict(p.runtime_timings), + ) + report["cells"].append(cell) + write_json(args.output / "report.json", report) + print(json.dumps(cell), flush=True) + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + for name in ("bundle", "manifest", "root", "output"): + parser.add_argument("--" + name, type=Path, required=True) + parser.add_argument("--count", type=int, default=1024) + parser.add_argument("--batch-size", type=int, default=64) + parser.add_argument("--workers", type=int, default=4) + args = parser.parse_args() + if min(args.count, args.batch_size, args.workers) < 1 or args.count < args.batch_size: + parser.error("Require count >= batch-size > 0 and workers > 0") + run(args) + + +if __name__ == "__main__": + main() diff --git a/dev/releases/mambo_v3/pipeline_stages.py b/dev/releases/mambo_v3/pipeline_stages.py new file mode 100644 index 0000000..48b250a --- /dev/null +++ b/dev/releases/mambo_v3/pipeline_stages.py @@ -0,0 +1,83 @@ +"""Bounded stage probe: synthetic images/scores, no filesystem latency or model execution.""" + +import argparse +import json +import time +from concurrent.futures import ThreadPoolExecutor +from pathlib import Path + +import numpy as np +import torch + +from deployment.mambo_deploy.preprocessing import TorchPreprocess, preprocess +from deployment.mambo_deploy.results import Prediction +from deployment.mambo_deploy.transfers import download_tensors + + +def timed(function, count): + function() + start = time.perf_counter() + for _ in range(count): + function() + return (time.perf_counter() - start) / count + + +def run(output): + output.mkdir(parents=True, exist_ok=False) + torch.set_num_threads(4) + torch.manual_seed(91025) + rng = np.random.default_rng(91025) + report = { + "boundary": "Synthetic decoded RGB images and rank logits; no storage, decoding, backbone or classifier.", + "limitations": "Stage timings exclude pipeline contention. Compare operation counts/storage as well as local elapsed time.", + "settings": {"seed": 91025, "workers": 4, "rank_sizes": [30000, 4000, 500]}, + "numpy": np.__version__, + "torch": torch.__version__, + "gpu": torch.cuda.get_device_name(), + } + for size in (256, 2048): + image = rng.integers(0, 256, (size, size, 3), dtype=np.uint8).transpose(2, 0, 1) + with ThreadPoolExecutor(4) as pool: + report[f"cpu_prepare_{size}_seconds_per_32"] = timed(lambda: list(pool.map(preprocess, [image] * 32)), 3) + for batch in (64, 256): + raw = [rng.standard_normal((batch, n), dtype=np.float32) for n in report["settings"]["rank_sizes"]] + labels = [[str(i) for i in range(v.shape[1])] for v in raw] + mappings = [np.arange(v.shape[1]) for v in raw] + report[f"results_{batch}_seconds"] = timed(lambda: Prediction(raw, labels, mappings), 5) + + preparation = TorchPreprocess(torch, "cuda:0") + images = torch.randint(0, 256, (64, 3, 384, 384), dtype=torch.uint8, device="cuda:0") + values = [torch.randn((64, n), device="cuda:0") for n in report["settings"]["rank_sizes"]] + stream = torch.cuda.Stream() + for _ in range(3): + preparation(images) + download_tensors(values, torch=torch, stream=stream) + torch.cuda.synchronize() + with torch.profiler.profile( + activities=[torch.profiler.ProfilerActivity.CPU, torch.profiler.ProfilerActivity.CUDA], + profile_memory=True, + record_shapes=True, + ) as prof: + with torch.profiler.record_function("GPU preprocessing"): + prepared = preparation(images) + with torch.profiler.record_function("Output transfer submission"): + finish = download_tensors(values, torch=torch, stream=stream, defer=True) + with torch.profiler.record_function("Output transfer completion"): + finish() + torch.cuda.synchronize() + prof.export_chrome_trace(str(output / "trace.json")) + (output / "operators.txt").write_text(prof.key_averages().table(sort_by="self_device_time_total", row_limit=40)) + report["prepared"] = {"shape": list(prepared.shape), "stride": list(prepared.stride()), "contiguous": prepared.is_contiguous()} + report["gpu_operators"] = [ + {"name": event.key, "calls": event.count, "self_device_us": event.self_device_time_total, "device_bytes": event.device_memory_usage} + for event in prof.key_averages() + if event.key.startswith("aten::") + ] + (output / "report.json").write_text(json.dumps(report, indent=2) + "\n") + print(json.dumps(report, indent=2)) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--output", type=Path, required=True) + run(parser.parse_args().output) diff --git a/dev/releases/mambo_v3/plot_overlap.py b/dev/releases/mambo_v3/plot_overlap.py new file mode 100644 index 0000000..4e90765 --- /dev/null +++ b/dev/releases/mambo_v3/plot_overlap.py @@ -0,0 +1,102 @@ +"""Render reproducible pairwise overlap for the pinned release preset lists.""" + +import argparse +import csv +import tomllib +from pathlib import Path + +from dev.releases.mambo_v3.audit import HERE, sha256 + +ASSETS = HERE.parents[2] / "docs/assets" +# Presentation groups, not mutually exclusive biogeographic classifications. +DISPLAY_GROUPS = ( + ("north_america", "central_america", "caribbean", "south_america"), + ("arctic", "europe", "europe_v3", "north_europe", "north_europe_v3"), + ("mediterranean", "middle_east"), + ("africa", "north_africa", "subsaharan_africa", "madagascar"), + ("asia", "south_asia", "southeast_asia", "east_asia", "japan"), + ("oceania", "australia", "tasmania", "new_zealand", "oceania_excluding_australia_nz"), +) + + +def overlap(left, right): + shared = len(left & right) + union = len(left | right) + return shared, shared / union if union else 0.0, shared / len(left) if left else 0.0 + + +def render(preview=None): + import matplotlib + + matplotlib.use("Agg") + import matplotlib.pyplot as plt + import numpy as np + + manifest = tomllib.loads((HERE / "preset-manifest.toml").read_text()) + if sha256(HERE / "preset-definitions.toml") != manifest["definitions_sha256"]: + raise ValueError("Rebuild presets before plotting modified definitions") + names = [name for group in DISPLAY_GROUPS for name in group] + if len(names) != len(set(names)) or set(names) != set(manifest["presets"]): + raise ValueError("Update display groups to include every preset exactly once") + sets = {} + for name, item in manifest["presets"].items(): + path = HERE / item["path"] + labels = path.read_text().splitlines() + if sha256(path) != item["sha256"] or len(labels) != len(set(labels)) or len(labels) != item["count"]: + raise ValueError(f"Preset integrity mismatch: {name}") + sets[name] = set(labels) + scores = [[overlap(sets[left], sets[right]) for right in names] for left in names] + ASSETS.mkdir(exist_ok=True) + with (ASSETS / "preset-overlap.tsv").open("w", newline="") as stream: + writer = csv.writer(stream, delimiter="\t", lineterminator="\n") + writer.writerow(["row_preset", "column_preset", "shared_species", "jaccard_percent", "row_coverage_percent"]) + for i, left in enumerate(names): + for j, right in enumerate(names): + shared, jaccard, coverage = scores[i][j] + writer.writerow([left, right, shared, f"{jaccard * 100:.6f}", f"{coverage * 100:.6f}"]) + plt.rcParams.update({"svg.hashsalt": "mambo-preset-overlap-v1", "font.size": 9}) + fig, axes = plt.subplots(1, 2, figsize=(27, 15), layout="constrained") + display_names = { + "oceania_excluding_australia_nz": "oceania excl. AU/NZ", + "europe": "Europe (legacy)", + "europe_v3": "Europe (updated)", + "north_europe": "N. Europe (legacy)", + "north_europe_v3": "N. Europe (updated)", + } + labels = [f"{display_names.get(name, name.replace('_', ' '))} ({len(sets[name]):,})" for name in names] + for ax, metric, title in zip(axes, (1, 2), ("Jaccard: shared / union (%)", "Coverage: row species also in column (%)")): + values = np.array([[cell[metric] * 100 for cell in row] for row in scores]) + im = ax.imshow(values, vmin=0, vmax=100, cmap="viridis") + ax.set_xticks(range(len(names)), labels, rotation=60, ha="right", rotation_mode="anchor") + ax.set_yticks(range(len(names)), labels) + ax.set_title(title, fontsize=15, pad=18) + boundary = 0 + for group in DISPLAY_GROUPS[:-1]: + boundary += len(group) + ax.axhline(boundary - 0.5, color="white", linewidth=1.4) + ax.axvline(boundary - 0.5, color="white", linewidth=1.4) + for i in range(len(names)): + for j in range(len(names)): + value = values[i, j] + label = "<1" if 0 < value < 1 else f"{value:.0f}" + ax.text(j, i, label, ha="center", va="center", fontsize=7, color="black" if value > 55 else "white") + fig.colorbar(im, ax=ax, shrink=0.65, pad=0.015) + fig.suptitle( + "MAMBO release presets — species overlap\n" + "Qualified lists; full omitted. Regional scope and evidence thresholds differ. Coverage is directional.", + fontsize=18, + ) + fig.savefig(ASSETS / "preset-overlap.svg", metadata={"Date": None}) + svg = ASSETS / "preset-overlap.svg" + svg.write_text("\n".join(line.rstrip() for line in svg.read_text().splitlines()) + "\n") + if preview: + fig.savefig(preview, dpi=110) + plt.close(fig) + print(f"Wrote {ASSETS / 'preset-overlap.svg'} and pairwise TSV for {len(names)} presets") + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--preview", type=Path) + args = parser.parse_args() + render(args.preview) diff --git a/dev/releases/mambo_v3/prepare_candidate.py b/dev/releases/mambo_v3/prepare_candidate.py new file mode 100644 index 0000000..8ac15ab --- /dev/null +++ b/dev/releases/mambo_v3/prepare_candidate.py @@ -0,0 +1,104 @@ +"""Prepare local release artifacts and an inventory. Never upload, tag or publish.""" + +import argparse +import hashlib +import json +import shutil +import subprocess +import tarfile +import tempfile +import tomllib +from pathlib import Path + +from deployment.mambo_deploy.download import fetch_file +from dev.releases.mambo_v3.build_bundle import INPUTS, build +from dev.releases.mambo_v3.package_download_metadata import distribution_readme, package + +ROOT = Path(__file__).resolve().parents[3] +HERE = Path(__file__).resolve().parent + + +def digest(path): + with path.open("rb") as stream: + return hashlib.file_digest(stream, "sha256").hexdigest() + + +def fetch_inputs(source): + inventory = tomllib.loads((HERE / "inventory.toml").read_text()) + needed = {f"{inventory['production']}/{name}" for name in INPUTS.values()} + for item in inventory["artifacts"]: + if item["path"] in needed: + fetch_file(item["url"], source / item["path"], size=item["size"], sha256=item["sha256"]) + + +def prepare(source, output): + if output.exists(): + raise FileExistsError(f"Choose a new output directory: {output}") + if subprocess.check_output(["git", "status", "--porcelain", "--untracked-files=no"], cwd=ROOT).strip(): + raise RuntimeError("Commit tracked release changes before preparing an identified candidate") + commit = subprocess.check_output(["git", "rev-parse", "HEAD"], cwd=ROOT, text=True).strip() + output.mkdir(parents=True) + bundle = output / "mambo-v3-bundle" + build(source, bundle) + dist = output / "dist" + dist.mkdir() + # Stage just the deployment project; no caches, experiments or training data. + with tempfile.TemporaryDirectory(prefix="mambo-wheel-") as directory: + stage = Path(directory) + for name in ("pyproject.toml", "LICENSE"): + shutil.copyfile(ROOT / "deployment" / name, stage / name) + shutil.copytree(ROOT / "deployment/mambo_deploy", stage / "mambo_deploy", ignore=shutil.ignore_patterns("__pycache__", "*.pyc")) + (stage / "README.md").write_text(distribution_readme()) + package(bundle, stage / "mambo_deploy/default_bundle.json") + subprocess.run(["uv", "build", "--project", str(stage), "--wheel", "--sdist", "--out-dir", str(dist)], check=True) + subprocess.run(["uv", "build", "--wheel", "--out-dir", str(dist)], cwd=ROOT, check=True) + (dist / ".gitignore").unlink(missing_ok=True) # Build sidecar, omitted by Actions artifact upload. + (output / "RELEASE_README.md").write_text(distribution_readme()) + for name in ("publication.md", "evidence-policy.md", "model-provenance.toml"): + shutil.copyfile(HERE / name, output / name) + evidence = output / "evidence" + evidence.mkdir() + # Public, compact evidence already committed; never sweep local-evidence inputs. + tracked = subprocess.check_output(["git", "ls-files", "docs/assets/mambo-*"], cwd=ROOT, text=True).splitlines() + for relative in tracked: + source_file = ROOT / relative + if source_file.suffix in {".json", ".csv", ".svg"}: + shutil.copyfile(source_file, evidence / source_file.name) + archive = output / "mambo-v3-bundle.tar.gz" + with tarfile.open(archive, "w:gz") as stream: + stream.add(bundle, arcname=bundle.name) + manifest = { + "schema": "mambo-prepared-release-v1", + "source_commit": commit, + "distribution": "mambo-v3", + "package_version": tomllib.loads((ROOT / "deployment/pyproject.toml").read_text())["project"]["version"], + "model_id": "MAMBO_v3", + "training_distribution": {key: tomllib.loads((ROOT / "pyproject.toml").read_text())["project"][key] for key in ("name", "version")}, + "publication_performed": False, + "qualification": "Pending final installed-artifact checks; see qualification records alongside this manifest", + "owner_decisions": [], + "provenance_limits": [ + "Initialization lineage reconstructed from source; starting file hash and training Git revision not retained" + ], + "files": {}, + } + for path in sorted(output.rglob("*")): + if path.is_file(): + manifest["files"][path.relative_to(output).as_posix()] = {"size": path.stat().st_size, "sha256": digest(path)} + (output / "release-candidate.json").write_text(json.dumps(manifest, indent=2) + "\n") + (output / "SHA256SUMS").write_text( + "".join(f"{entry['sha256']} {name}\n" for name, entry in manifest["files"].items()) + + f"{digest(output / 'release-candidate.json')} release-candidate.json\n" + ) + print(output / "release-candidate.json") + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--source", type=Path, required=True, help="Verified input inventory directory") + parser.add_argument("--output", type=Path, required=True, help="New local artifact directory") + parser.add_argument("--download", action="store_true", help="Fetch only pinned release inputs from ERDA") + args = parser.parse_args() + if args.download: + fetch_inputs(args.source.resolve()) + prepare(args.source.resolve(), args.output.resolve()) diff --git a/dev/releases/mambo_v3/prepare_names.py b/dev/releases/mambo_v3/prepare_names.py new file mode 100644 index 0000000..2f1e471 --- /dev/null +++ b/dev/releases/mambo_v3/prepare_names.py @@ -0,0 +1,42 @@ +"""Recover display-only taxon names from the pinned preset metadata; never change IDs.""" + +import argparse +import json +import tomllib +from collections import Counter, defaultdict +from pathlib import Path + +import pyarrow as pa +import pyarrow.parquet as pq + +from dev.releases.mambo_v3.prepare_candidate import HERE, ROOT, digest + + +def prepare(metadata, output): + expected = tomllib.loads((HERE / "construction.toml").read_text())["source"] + if digest(metadata) != expected["sha256"]: + raise ValueError("Metadata differs from pinned preset source") + descriptor = json.loads((ROOT / "deployment/mambo_deploy/default_bundle.json").read_text()) + classes = json.loads(descriptor["metadata"]["classes.json"])["labels"] + eligible = set().union(*map(set, classes)) + counts = defaultdict(Counter) + columns = ["speciesKey", "genusKey", "familyKey", "genus", "specificEpithet", "family"] + for batch in pq.ParquetFile(metadata).iter_batches(batch_size=262144, columns=columns): + grouped = pa.Table.from_batches([batch]).group_by(columns).aggregate([("speciesKey", "count")]).to_pylist() + for row in grouped: + species = " ".join(str(row[key]) for key in ("genus", "specificEpithet") if row[key]) + for key, name in (("speciesKey", species), ("genusKey", row["genus"]), ("familyKey", row["family"])): + label = str(row[key]) + if label in eligible and name: + counts[label][str(name)] += row["speciesKey_count"] + names = {label: sorted(options, key=lambda name: (-options[name], name))[0] for label, options in sorted(counts.items())} + output.write_text(json.dumps(names, ensure_ascii=False, indent=2) + "\n") + print(f"Display names: {len(names)}/{len(eligible)}; sha256={digest(output)}") + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("metadata", type=Path) + parser.add_argument("output", type=Path) + args = parser.parse_args() + prepare(args.metadata, args.output) diff --git a/dev/releases/mambo_v3/prepare_ucloud.py b/dev/releases/mambo_v3/prepare_ucloud.py new file mode 100644 index 0000000..d12ae44 --- /dev/null +++ b/dev/releases/mambo_v3/prepare_ucloud.py @@ -0,0 +1,50 @@ +"""Recover original test identities from archived staging and truth for UCloud setup.""" + +import csv +import json +import tomllib +from pathlib import Path + +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.releases.mambo_v3.audit import HERE + + +def recover(metadata, staging, reference, test_set="0"): + import pyarrow.compute as pc + import pyarrow.parquet as pq + + expected = tomllib.loads((HERE / "construction.toml").read_text())["source"] + if file_hash(metadata) != expected["sha256"]: + raise ValueError("Original metadata snapshot hash mismatch") + table = pq.read_table(metadata, columns=["filename", "set", "speciesKey", "genusKey", "familyKey"]) + table = table.filter(pc.equal(table["set"], test_set)) + truth = {} + for row in table.to_pylist(): + key = f"images/{row['speciesKey']}/{row['filename']}" + if key in truth: + raise ValueError("Duplicate original image identity") + truth[key] = [row[k] for k in ("speciesKey", "genusKey", "familyKey")] + files = json.loads(Path(staging).read_text())["files"] + mapping = {} + original = set() + for item in files: + source = Path(item["source"]) + # Preserve the archived suffix from the original global_lepi mount. + relative = source.relative_to("/work/global_lepi").as_posix() + if item["staged"] in mapping or relative in original: + raise ValueError("Duplicate staging identity") + mapping[item["staged"]] = relative + original.add(relative) + if original != set(truth): + raise ValueError("Staging membership differs from the original supplied split") + seen = set() + with Path(reference).open(newline="") as stream: + for row in csv.DictReader(stream): + name = mapping[row["filename"]] + rank = int(row["level"]) + if (name, rank) in seen or not 0 <= rank < 3 or row["label"] != truth[name][rank]: + raise ValueError("Archived truth differs from original taxonomy or has duplicate ranks") + seen.add((name, rank)) + if len(seen) != len(truth) * 3: + raise ValueError("Incomplete archived predictions") + return [{"path": name, "labels": labels, "split": "test"} for name, labels in sorted(truth.items())] diff --git a/dev/releases/mambo_v3/preset-definitions.toml b/dev/releases/mambo_v3/preset-definitions.toml new file mode 100644 index 0000000..09394c4 --- /dev/null +++ b/dev/releases/mambo_v3/preset-definitions.toml @@ -0,0 +1,147 @@ +schema_version = 2 +qualification_status = "selected for MAMBO_v3; metadata row-count policy" +minimum_regional_rows = 3 +minimum_global_rows = 25 +# Geographic predicates are OR-ed; state_province/excluded_countries then constrain that union. +# Counts include all metadata splits, without additional deduplication. + +[presets.europe] +minimum_regional_rows = 26 +minimum_global_rows = 0 +label = "Europe (legacy)" +continents = ["EUROPE"] +scope = "Records assigned EUROPE by the metadata, including European-labelled portions of transcontinental countries." + +[presets.north_europe] +minimum_regional_rows = 26 +minimum_global_rows = 0 +label = "Northern Europe (legacy)" +countries = ["DE", "DK", "EE", "FI", "LT", "LV", "NL", "NO", "PL", "SE"] +scope = "Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden (Ireland, Iceland, Åland, Faroe Islands, Guernsey, Isle of Man, Jersey, Svalbard/Jan Mayen: ambiguous historical inclusion; adding any or all leaves the species list unchanged)." + +[presets.europe_v3] +label = "Europe (updated)" +continents = ["EUROPE"] +scope = "Same EUROPE metadata filter as legacy europe, including European-labelled portions of transcontinental countries; updated occurrence thresholds only." + +[presets.north_europe_v3] +label = "Northern Europe (updated)" +countries = ["DE", "DK", "EE", "FI", "LT", "LV", "NL", "NO", "PL", "SE"] +scope = "Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden. Same explicit country filter as reconstructed legacy north_europe; updated occurrence thresholds only. The UK and historically ambiguous additions are not included in this definition." + +[presets.australia] +label = "Australia including Tasmania" +countries = ["AU"] +scope = "All Australian records, including Tasmania and other territories recorded under AU; not all Oceania." + +[presets.tasmania] +label = "Tasmania only" +countries = ["AU"] +state_province = ["Tasmania"] +scope = "Australian records explicitly assigned stateProvince Tasmania. Species recorded there, not only endemic species; blank/other state values are excluded." + +[presets.north_america] +label = "North America" +countries = ["CA", "US", "MX", "GL", "BM", "PM"] +scope = "Canada, United States, Mexico, Greenland, Bermuda, Saint Pierre and Miquelon. Whole countries, including US records outside the continental mainland." + +[presets.central_america] +label = "Central America" +countries = ["MX", "BZ", "GT", "HN", "SV", "NI", "CR", "PA"] +scope = "Mexico, Belize, Guatemala, Honduras, El Salvador, Nicaragua, Costa Rica, Panama. Mexico deliberately overlaps North America." + +[presets.south_america] +label = "South America" +continents = ["SOUTH_AMERICA"] +countries = ["AR", "BO", "BR", "CL", "CO", "EC", "FK", "GF", "GY", "PY", "PE", "SR", "UY", "VE", "CR", "PA"] +scope = "All SOUTH_AMERICA records or records from Argentina, Bolivia, Brazil, Chile, Colombia, Ecuador, Falklands, French Guiana, Guyana, Paraguay, Peru, Suriname, Uruguay, Venezuela, Costa Rica or Panama. Costa Rica and Panama deliberately overlap Central America." + +[presets.caribbean] +label = "Caribbean" +countries = ["AG", "AI", "AW", "BB", "BL", "BQ", "BS", "CU", "CW", "DM", "DO", "GD", "GP", "HT", "JM", "KN", "KY", "LC", "MF", "MQ", "MS", "PR", "SX", "TC", "TT", "VC", "VG", "VI", "BM", "BZ", "GY", "SR", "GF"] +scope = "Caribbean islands and territories, Bahamas, Bermuda, Belize and the Guianas (Guyana, Suriname, French Guiana). Does not include every mainland country with a Caribbean coast." + +[presets.south_asia] +label = "South Asia" +countries = ["AF", "BD", "BT", "IN", "MV", "NP", "PK", "LK", "MM", "IR"] +scope = "Afghanistan, Bangladesh, Bhutan, India, Maldives, Nepal, Pakistan, Sri Lanka, Myanmar and Iran; deliberately broad western/eastern overlap." + +[presets.asia] +label = "Asia" +continents = ["ASIA"] +countries = ["AF", "AM", "AZ", "BH", "BD", "BT", "BN", "KH", "CN", "GE", "HK", "IN", "ID", "IR", "IQ", "IL", "JP", "JO", "KZ", "KP", "KR", "KW", "KG", "LA", "LB", "MO", "MY", "MV", "MN", "MM", "NP", "OM", "PK", "PS", "PH", "QA", "RU", "SA", "SG", "LK", "SY", "TW", "TJ", "TH", "TL", "TR", "TM", "AE", "UZ", "VN", "YE"] +excluded_countries = ["CY"] +country_continent_restrictions = { RU = ["ASIA"] } +scope = "All ASIA records plus all records from the listed Asian countries and territories, including Turkey, Georgia, Armenia and Azerbaijan in full. Russian records require continent ASIA; European or unassigned Russian records are excluded. Cyprus is excluded even when its continent is ASIA." + +[presets.japan] +label = "Japan" +countries = ["JP"] +scope = "All records assigned countryCode JP, including islands." + +[presets.africa] +label = "Africa" +continents = ["AFRICA"] +countries = ["DZ", "AO", "BJ", "BW", "BF", "BI", "CV", "CM", "CF", "TD", "KM", "CG", "CD", "CI", "DJ", "EG", "GQ", "ER", "SZ", "ET", "GA", "GM", "GH", "GN", "GW", "KE", "LS", "LR", "LY", "MG", "MW", "ML", "MR", "MU", "YT", "MA", "MZ", "NA", "NE", "NG", "RE", "RW", "SH", "ST", "SN", "SC", "SL", "SO", "ZA", "SS", "SD", "TZ", "TG", "TN", "UG", "EH", "ZM", "ZW"] +scope = "All AFRICA records plus the listed African countries and island territories. AFRICA-labelled records from transcontinental/overseas countries remain included." + +[presets.north_africa] +label = "Northern Africa (broad)" +countries = ["DZ", "EG", "LY", "MA", "TN", "EH", "SD", "MR"] +scope = "Algeria, Egypt, Libya, Morocco, Tunisia, Western Sahara, Sudan and Mauritania. Sudan and Mauritania deliberately overlap the broad sub-Saharan preset." + +[presets.subsaharan_africa] +label = "Sub-Saharan Africa (broad)" +continents = ["AFRICA"] +countries = ["AO", "BJ", "BW", "BF", "BI", "CV", "CM", "CF", "TD", "KM", "CG", "CD", "CI", "DJ", "GQ", "ER", "SZ", "ET", "GA", "GM", "GH", "GN", "GW", "KE", "LS", "LR", "MG", "MW", "ML", "MR", "MU", "YT", "MZ", "NA", "NE", "NG", "RE", "RW", "SH", "ST", "SN", "SC", "SL", "SO", "ZA", "SS", "SD", "TZ", "TG", "UG", "ZM", "ZW"] +excluded_countries = ["DZ", "EG", "LY", "MA", "TN", "EH"] +scope = "Broad African selection excluding Algeria, Egypt, Libya, Morocco, Tunisia and Western Sahara. Includes Sudan, Mauritania, Mali, Niger, Chad, the Horn, Madagascar and island territories; this is not a Sahara boundary polygon." + +[presets.madagascar] +label = "Madagascar only" +countries = ["MG"] +scope = "All records assigned countryCode MG. Species recorded in Madagascar, not only endemic species; neighbouring island countries/territories are excluded." + +[presets.mediterranean] +label = "Mediterranean (broad)" +countries = ["AL", "DZ", "BA", "HR", "CY", "EG", "FR", "GR", "IL", "IT", "LB", "LY", "MT", "MC", "ME", "MA", "PS", "SI", "ES", "SY", "TN", "TR", "PT", "GI", "AD", "SM", "VA", "MK", "BG", "RS", "JO"] +scope = "Whole Mediterranean coastal countries/territories plus Portugal, Andorra, San Marino, Vatican City, North Macedonia, Bulgaria, Serbia and Jordan. Includes inland and overseas records of selected countries, not only Mediterranean climate zones." + +[presets.arctic] +label = "Arctic / north of 60°N" +minimum_latitude = 60 +scope = "Records at latitude 60°N or farther north, across all countries, including exactly 60°. Missing, malformed and out-of-range latitudes are excluded. A broad northern/subarctic scope, not the Arctic Circle boundary; no country or state-name proxy is used." + +[presets.oceania] +label = "Oceania" +continents = ["OCEANIA"] +countries = ["AU", "NZ", "PG", "FJ", "SB", "VU", "NC", "PF", "WS", "AS", "TO", "TV", "KI", "NR", "FM", "MH", "PW", "GU", "MP", "CK", "NU", "TK", "WF", "PN", "NF"] +scope = "All OCEANIA records plus Australia, New Zealand, Papua New Guinea and the listed Pacific countries/territories. Australia and Tasmania intentionally overlap." + +[presets.new_zealand] +label = "New Zealand" +countries = ["NZ"] +scope = "All records assigned countryCode NZ, including islands recorded under NZ. Separately coded Cook Islands, Niue and Tokelau remain in the other-Oceania preset." + +[presets.oceania_excluding_australia_nz] +label = "Oceania excluding Australia and New Zealand" +continents = ["OCEANIA"] +countries = ["AU", "NZ", "PG", "FJ", "SB", "VU", "NC", "PF", "WS", "AS", "TO", "TV", "KI", "NR", "FM", "MH", "PW", "GU", "MP", "CK", "NU", "TK", "WF", "PN", "NF"] +excluded_countries = ["AU", "NZ"] +scope = "The Oceania metadata selection with all AU and NZ records excluded, even when continent is OCEANIA. Species shared with Australia or New Zealand remain eligible if they qualify from records elsewhere in Oceania; this is not subtraction of their species lists." + +[presets.southeast_asia] +label = "Southeast Asia" +countries = ["BN", "KH", "ID", "LA", "MY", "MM", "PH", "SG", "TH", "TL", "VN", "PG"] +scope = "Brunei, Cambodia, Indonesia, Laos, Malaysia, Myanmar, Philippines, Singapore, Thailand, Timor-Leste, Vietnam and Papua New Guinea; whole-island-region overlap with Oceania is intentional." + +[presets.east_asia] +label = "East Asia" +countries = ["CN", "HK", "MO", "TW", "JP", "KP", "KR", "MN", "RU"] +country_continent_restrictions = { RU = ["ASIA"] } +scope = "China, Hong Kong, Macao, Taiwan, Japan, North Korea, South Korea, Mongolia and Russian records assigned continent ASIA. This includes all Asian Russia, not only the Russian Far East; European or unassigned Russian records are excluded." + +[presets.middle_east] +label = "Middle East" +countries = ["TR", "CY", "SY", "LB", "IL", "PS", "JO", "IQ", "IR", "KW", "SA", "BH", "QA", "AE", "OM", "YE", "EG", "AM", "AZ", "GE", "AF", "PK"] +scope = "Turkey, Cyprus, Syria, Lebanon, Israel, Palestine, Jordan, Iraq, Iran, Kuwait, Saudi Arabia, Bahrain, Qatar, UAE, Oman, Yemen, Egypt, Armenia, Azerbaijan, Georgia, Afghanistan and Pakistan. Deliberate overlap with Mediterranean, Africa and South Asia." diff --git a/dev/releases/mambo_v3/preset-manifest.toml b/dev/releases/mambo_v3/preset-manifest.toml new file mode 100644 index 0000000..775e60f --- /dev/null +++ b/dev/releases/mambo_v3/preset-manifest.toml @@ -0,0 +1,257 @@ +schema_version = 2 +qualification_status = "selected for MAMBO_v3; metadata row-count policy" +source_sha256 = "094afa30bab25daad6583d33055bf7c61bcbade2f7f3c5e212d6b16fbf4429fe" +model_manifest_sha256 = "a49e6ee862f24095cc2f66e309b5704c47011b54c11a7bfa56f432342e26b32b" +definitions_sha256 = "d89e62e5ee9d91aea0e46ccd60edbc49bd0378017cf6d8b8f70870e4f7673be6" +minimum_regional_rows = 3 +minimum_global_rows = 25 + +[presets.europe] +path = "presets/europe.classes" +count = 3014 +minimum_regional_rows = 26 +minimum_global_rows = 0 +excluded_by_global_gate_after_regional = 0 +selected_rows = 2079617 +species_before_threshold = 3132 +sha256 = "df66152ba29ba979b32741db4a0dc7c85db18fa65eac5602ca4aab702343de90" + +[presets.north_europe] +path = "presets/north_europe.classes" +count = 1977 +minimum_regional_rows = 26 +minimum_global_rows = 0 +excluded_by_global_gate_after_regional = 0 +selected_rows = 768497 +species_before_threshold = 2291 +sha256 = "065bb3ade45c970ca129c7507b56ed62fe16b84251961bf53352f5098b8b2be6" + +[presets.europe_v3] +path = "presets/europe_v3.classes" +count = 3086 +minimum_regional_rows = 3 +minimum_global_rows = 25 +excluded_by_global_gate_after_regional = 0 +selected_rows = 2079617 +species_before_threshold = 3132 +sha256 = "465e644095abe381b7b6a44f7ce05d5da0ba77bf75b76e1c53d0eba6c89f487a" + +[presets.north_europe_v3] +path = "presets/north_europe_v3.classes" +count = 2199 +minimum_regional_rows = 3 +minimum_global_rows = 25 +excluded_by_global_gate_after_regional = 0 +selected_rows = 768497 +species_before_threshold = 2291 +sha256 = "78ee7693c7352244cd8a99b7276196aa32de27e620ed66648c4087f826d47092" + +[presets.australia] +path = "presets/australia.classes" +count = 1874 +minimum_regional_rows = 3 +minimum_global_rows = 25 +excluded_by_global_gate_after_regional = 0 +selected_rows = 465726 +species_before_threshold = 1907 +sha256 = "04892d628263fa751c268693fccd9afd480a819b4896791ac5e0219b8467cb53" + +[presets.tasmania] +path = "presets/tasmania.classes" +count = 274 +minimum_regional_rows = 3 +minimum_global_rows = 25 +excluded_by_global_gate_after_regional = 0 +selected_rows = 4457 +species_before_threshold = 401 +sha256 = "21248a60d54592bc4db4e638e6565b07ee37ad1911c7e7f4e4a8fd0fc49d913f" + +[presets.north_america] +path = "presets/north_america.classes" +count = 4425 +minimum_regional_rows = 3 +minimum_global_rows = 25 +excluded_by_global_gate_after_regional = 0 +selected_rows = 2300391 +species_before_threshold = 4551 +sha256 = "2707b4956327c31e719331cc2c40cd457f3d1fa67896a831d26a3e7e9accb44f" + +[presets.central_america] +path = "presets/central_america.classes" +count = 1639 +minimum_regional_rows = 3 +minimum_global_rows = 25 +excluded_by_global_gate_after_regional = 0 +selected_rows = 210173 +species_before_threshold = 2022 +sha256 = "835b3447932cc142dd7c470617e0ce5f948ec2d6f6119be7d06b78e365f79885" + +[presets.south_america] +path = "presets/south_america.classes" +count = 1506 +minimum_regional_rows = 3 +minimum_global_rows = 25 +excluded_by_global_gate_after_regional = 0 +selected_rows = 257026 +species_before_threshold = 1683 +sha256 = "47ee75929656a4f66874861e54a05b8503aa7974ebb5eb3d1eef1a68dbf7b130" + +[presets.caribbean] +path = "presets/caribbean.classes" +count = 876 +minimum_regional_rows = 3 +minimum_global_rows = 25 +excluded_by_global_gate_after_regional = 0 +selected_rows = 28652 +species_before_threshold = 1092 +sha256 = "ebb9cfbb63a4ad434ae8fa49b2709e09de0df30f3d31a2f939846e41c9731dc3" + +[presets.south_asia] +path = "presets/south_asia.classes" +count = 1552 +minimum_regional_rows = 3 +minimum_global_rows = 25 +excluded_by_global_gate_after_regional = 0 +selected_rows = 177926 +species_before_threshold = 1929 +sha256 = "5d838de414acb5a4ca14a5098972bbd36c3078c44525584860f6e2e7a94f3849" + +[presets.asia] +path = "presets/asia.classes" +count = 4443 +minimum_regional_rows = 3 +minimum_global_rows = 25 +excluded_by_global_gate_after_regional = 0 +selected_rows = 920962 +species_before_threshold = 4937 +sha256 = "c54053282b739c7bfcfad6a69c9f9b2e613f4ff4986cf30e1cd0848fe5eb2daf" + +[presets.japan] +path = "presets/japan.classes" +count = 697 +minimum_regional_rows = 3 +minimum_global_rows = 25 +excluded_by_global_gate_after_regional = 0 +selected_rows = 30076 +species_before_threshold = 974 +sha256 = "8b3a9cd5874c26ecb5217e61f6402fb7e60082f3ebeea13273abe177c233a64b" + +[presets.africa] +path = "presets/africa.classes" +count = 924 +minimum_regional_rows = 3 +minimum_global_rows = 25 +excluded_by_global_gate_after_regional = 0 +selected_rows = 149267 +species_before_threshold = 1129 +sha256 = "471c14708f50d98e51b8513ec49e978fae360e1099b6f40491c008e9bd1d59c1" + +[presets.north_africa] +path = "presets/north_africa.classes" +count = 236 +minimum_regional_rows = 3 +minimum_global_rows = 25 +excluded_by_global_gate_after_regional = 0 +selected_rows = 4393 +species_before_threshold = 422 +sha256 = "015e6c49e7c220421fdd646743216d34464708e6bfeebfac408f912a87e4a62b" + +[presets.subsaharan_africa] +path = "presets/subsaharan_africa.classes" +count = 796 +minimum_regional_rows = 3 +minimum_global_rows = 25 +excluded_by_global_gate_after_regional = 0 +selected_rows = 144918 +species_before_threshold = 904 +sha256 = "1cc936061b0037c71d60d5cdb74fc8af1817dd567e54dcd6904a6901009d9184" + +[presets.madagascar] +path = "presets/madagascar.classes" +count = 107 +minimum_regional_rows = 3 +minimum_global_rows = 25 +excluded_by_global_gate_after_regional = 0 +selected_rows = 2584 +species_before_threshold = 169 +sha256 = "cda395b4bab28ffec49a698487cbb2aa6578a79107ce7a9885c8260e421b9c54" + +[presets.mediterranean] +path = "presets/mediterranean.classes" +count = 2680 +minimum_regional_rows = 3 +minimum_global_rows = 25 +excluded_by_global_gate_after_regional = 0 +selected_rows = 660065 +species_before_threshold = 2874 +sha256 = "f203302f8bfdcb92aec580fa3f11e6ebda8c3886f5fd691379860408e84fd4e3" + +[presets.arctic] +path = "presets/arctic.classes" +count = 1548 +minimum_regional_rows = 3 +minimum_global_rows = 25 +excluded_by_global_gate_after_regional = 0 +selected_rows = 115881 +species_before_threshold = 1832 +sha256 = "a9138c543b90e319296d2c0cd5dc3400c9045616633988755f8057450a19ae5f" + +[presets.oceania] +path = "presets/oceania.classes" +count = 2273 +minimum_regional_rows = 3 +minimum_global_rows = 25 +excluded_by_global_gate_after_regional = 0 +selected_rows = 584477 +species_before_threshold = 2337 +sha256 = "bf6f77aeb7700a0e1d46f7d51e5a45b842485a16d2f9777b3c5e61a899b84b47" + +[presets.new_zealand] +path = "presets/new_zealand.classes" +count = 425 +minimum_regional_rows = 3 +minimum_global_rows = 25 +excluded_by_global_gate_after_regional = 0 +selected_rows = 110030 +species_before_threshold = 441 +sha256 = "81b4facb4283f0e0e867fa7219f8bc5f33418e68cde61fc18df212b2a085887b" + +[presets.oceania_excluding_australia_nz] +path = "presets/oceania_excluding_australia_nz.classes" +count = 352 +minimum_regional_rows = 3 +minimum_global_rows = 25 +excluded_by_global_gate_after_regional = 0 +selected_rows = 8721 +species_before_threshold = 533 +sha256 = "5a38ae5ba587577b7dcad4a8850089f1b8036abc6f1e676436968f97e34f322d" + +[presets.southeast_asia] +path = "presets/southeast_asia.classes" +count = 1672 +minimum_regional_rows = 3 +minimum_global_rows = 25 +excluded_by_global_gate_after_regional = 0 +selected_rows = 172424 +species_before_threshold = 2031 +sha256 = "ad2f4d1ed1f78abd66594f59d9550383f37f96b9bdcda81138c11f64c3907ccd" + +[presets.east_asia] +path = "presets/east_asia.classes" +count = 3430 +minimum_regional_rows = 3 +minimum_global_rows = 25 +excluded_by_global_gate_after_regional = 0 +selected_rows = 549482 +species_before_threshold = 3912 +sha256 = "4a3e8635e06c7c86c0b08cfbc6acfa13ceb484d708f771312afc874e47ac0085" + +[presets.middle_east] +path = "presets/middle_east.classes" +count = 846 +minimum_regional_rows = 3 +minimum_global_rows = 25 +excluded_by_global_gate_after_regional = 0 +selected_rows = 24805 +species_before_threshold = 1330 +sha256 = "2f74a654f035774373e25b9518b1d3d0724a456389647be6584dab4ab85261a9" diff --git a/dev/releases/mambo_v3/preset-updates.toml b/dev/releases/mambo_v3/preset-updates.toml new file mode 100644 index 0000000..edecb64 --- /dev/null +++ b/dev/releases/mambo_v3/preset-updates.toml @@ -0,0 +1,12 @@ +schema_version = 1 +source_sha256 = "094afa30bab25daad6583d33055bf7c61bcbade2f7f3c5e212d6b16fbf4429fe" + +[updates.europe_v3] +legacy = "europe" +added = ["1830284", "1831458", "1797344", "8355390", "1808348", "4532549", "1872873", "1873890", "1878370", "1736499", "1741747", "10442031", "1926550", "1926722", "1929402", "1931561", "1933647", "4535280", "1920247", "5805036", "5137908", "1960484", "1967324", "5146894", "1982533", "1986623", "4524223", "6133619", "7657419", "4524998", "5149664", "1945589", "5977247", "5142042", "1771997", "1772977", "1779633", "1784349", "1787438", "9803522", "1894164", "4535630", "5128353", "9804158", "4299370", "1905396", "1911633", "4535596", "4299565", "5134693", "1918627", "1918688", "4535539", "5133088", "5120577", "1843602", "5127521", "1890346", "1890487", "6133232", "9137965", "5127656", "4526094", "1858930", "1860026", "1866556", "5124716", "1862692", "8254441", "1833500", "4534796", "1803108"] +removed = [] + +[updates.north_europe_v3] +legacy = "north_europe" +added = ["1732521", "1845607", "1847061", "4528547", "1848378", "1850497", "1850570", "4528529", "1852159", "7908344", "1777631", "1797374", "8355390", "4532351", "1803163", "1803824", "1816881", "8326103", "7657803", "4532565", "8148822", "8165185", "6097254", "5113030", "4522890", "4522896", "1860765", "1852787", "5125104", "1872848", "1872904", "1873215", "1873890", "1874295", "1875376", "1875429", "1875682", "1876357", "1876512", "1877038", "1878471", "1890065", "4525803", "5102642", "1738373", "1739471", "1740155", "1740762", "10838422", "1741747", "5103613", "1744526", "5103227", "7387466", "1926054", "5140214", "5140244", "7664111", "1933583", "1920237", "5137708", "1748922", "1750131", "1750166", "1955694", "1957706", "1957746", "1961037", "1962972", "1964437", "1965197", "1965640", "1967006", "1967265", "1967452", "1968990", "1969339", "5144782", "5145729", "8014296", "9627567", "1971847", "5146599", "5146842", "5147441", "7973517", "8414310", "1977967", "10712554", "4524902", "1982770", "1982867", "1986623", "1987737", "1988064", "1988642", "7555991", "1990582", "7657419", "9563355", "4524914", "4524955", "9220953", "5149569", "8851663", "5149717", "5149784", "1949929", "5142394", "7683096", "1869467", "1759097", "5109670", "1764673", "8352161", "1766718", "1766721", "1767511", "1767608", "8045644", "1768308", "1769543", "1770353", "1770416", "1770530", "1770573", "8393221", "1771997", "1772977", "1773062", "1773484", "1774347", "1775172", "5110593", "1776067", "5772222", "1780954", "1782319", "1782579", "1782872", "5112160", "1785887", "1786360", "1786515", "1786619", "1787213", "1787631", "4534086", "4533882", "4534162", "1790671", "1792431", "1794599", "1795068", "1774283", "4534681", "4534685", "8108800", "1770773", "1771169", "1773901", "1773904", "4532203", "4532206", "1894164", "5882039", "6231906", "9804158", "1897852", "1911093", "4299565", "5134569", "5134693", "5134837", "7700512", "8047165", "8167638", "8233062", "1918669", "8035998", "8001799", "1902143", "1941864", "5120577", "1731263", "4525641", "1878798", "1879408", "1881126", "9819403", "1881208", "1883067", "1883634", "1885937", "1886951", "1888484", "1890540", "1890679", "1890701", "1890823", "1890898", "1891013", "1891167", "1891453", "1884240", "1884365", "1854824", "4526094", "1841460", "1841989", "1861510", "1862765", "1860108", "5119506", "1754183", "8254441", "1857068", "1857143", "1858100", "1833500", "1834589", "5114311"] +removed = [] diff --git a/dev/releases/mambo_v3/presets/africa.classes b/dev/releases/mambo_v3/presets/africa.classes new file mode 100644 index 0000000..13dac8a --- /dev/null +++ b/dev/releases/mambo_v3/presets/africa.classes @@ -0,0 +1,924 @@ +1992315 +6113873 +1732087 +5101590 +1732660 +1732955 +1733755 +1734704 +6113959 +11529292 +1845270 +1845574 +1845616 +4528100 +1847111 +9546514 +9868978 +1850640 +1850781 +5119338 +1845952 +1839146 +1831458 +11513018 +1763976 +1766612 +1767883 +1769739 +1771455 +1772352 +1772447 +1772689 +4532500 +5110546 +8979264 +1776265 +1776268 +4687991 +1778430 +5111054 +1783882 +1786190 +1786980 +1786984 +1786985 +1787009 +1788553 +6116754 +1789057 +1789498 +1789805 +1790287 +1790692 +1791715 +1792210 +1795074 +1796984 +1797542 +4532473 +5884245 +6117055 +6117124 +1798481 +1798504 +6115283 +1798802 +4301310 +4532352 +6115437 +8793873 +1803148 +1803163 +1803197 +1804337 +8865876 +1805110 +1806871 +1806913 +1808172 +1808359 +1809158 +1809159 +5117189 +1814552 +8916247 +5117776 +5117791 +5117805 +6122301 +9331464 +1819928 +6121912 +1820802 +1820948 +1821012 +1821436 +6122103 +10503495 +8881513 +4532549 +8148822 +12017078 +6112547 +6112472 +5115381 +1774826 +5116504 +8723161 +5108808 +1781413 +1780869 +1780897 +1794268 +1803590 +1803593 +1819320 +1772374 +6115388 +1816685 +1774600 +1803544 +1803545 +1817973 +1804532 +1813460 +1807634 +1782645 +1768459 +5113036 +1821547 +1821581 +1821684 +1768212 +5118223 +1820573 +6116073 +1816775 +1803306 +4687933 +6116659 +6116661 +6116669 +6116674 +4532453 +1814877 +11754729 +1781503 +6115504 +1785072 +1785105 +1765997 +4687389 +5884188 +1809585 +1807924 +1782310 +1777517 +6115973 +1860857 +5123339 +5123474 +1869595 +1870450 +1870988 +1871252 +1871407 +8766638 +4531365 +1871754 +1871783 +7673242 +1872850 +1872873 +1872901 +1873051 +1873079 +1873215 +4531237 +1873890 +1875409 +1875687 +1876542 +1876922 +9111961 +5126052 +1877788 +4531417 +1890024 +5884888 +1877035 +5125780 +1871504 +1941330 +10309794 +12231385 +1736623 +1737131 +1737509 +4530608 +1739833 +1740762 +1740797 +11846897 +1745781 +1921064 +10581870 +1921650 +10858809 +11374171 +11378618 +1922063 +1922064 +1922244 +1922291 +1922468 +1922572 +1922679 +1922689 +1922694 +1922701 +1923465 +1923473 +1924082 +10656713 +1924392 +1924429 +8023645 +8951523 +1924713 +5138701 +1925410 +1925609 +1925615 +1925676 +1925693 +1925694 +1925801 +1925918 +1926324 +1926385 +1926530 +1926531 +1926539 +1926546 +1926550 +1926817 +1927313 +1927633 +11667997 +1927943 +1927955 +1927979 +1928070 +1928076 +5139040 +1928389 +5139188 +5139201 +1928746 +1929059 +1929697 +1930904 +1930916 +1930923 +1930931 +4535106 +1931046 +1931403 +1931437 +1931788 +1932177 +1932302 +1932332 +1932354 +8833509 +1932393 +1932411 +7346444 +8177775 +1932580 +1932629 +5139954 +5140006 +1932751 +1932752 +1932753 +1932882 +1932976 +9954885 +1933583 +1933647 +1933649 +1926166 +5138841 +5138921 +7964910 +1933204 +1752327 +1752805 +5105584 +1919181 +1919194 +1919210 +1919213 +1919214 +1919223 +1919333 +4535280 +4535285 +7981372 +1919346 +1919660 +1919663 +1919665 +1919703 +1919924 +1919929 +1919930 +1919966 +1920181 +1920258 +5137790 +5137799 +5137827 +5137828 +5137849 +1920348 +1920353 +1920359 +1920362 +1920363 +1920369 +1920370 +1920374 +1920377 +1920378 +1920379 +1920381 +1920390 +1920395 +1920401 +1920404 +1920405 +4699245 +5137863 +1920496 +1920506 +1920509 +1920709 +4535271 +5137988 +5137996 +5137998 +1920795 +1920815 +1920816 +5137612 +5137663 +1920218 +1750326 +1868884 +1869043 +1869238 +1869278 +1869286 +1955694 +1956897 +1957266 +1957286 +8172949 +1959839 +1960105 +1961013 +1961025 +4302252 +1963168 +1964076 +1964195 +1964836 +1966255 +1967025 +1967209 +1967265 +1967324 +1967438 +1967606 +1969958 +5144691 +5144805 +5144900 +5145075 +5145396 +5145468 +5145502 +5145842 +8014296 +1973171 +7996464 +5146510 +5146611 +5146774 +5146837 +5147039 +5147043 +5147058 +5147354 +5147395 +5147415 +5147437 +5147441 +5147478 +5147560 +1978017 +5148264 +1980521 +1980525 +1980533 +1982267 +1983039 +1983062 +1983525 +1983528 +1985742 +4525093 +4525097 +6118530 +6214843 +4524223 +1988019 +1988064 +1992066 +11654024 +7507369 +1989594 +4525034 +4524541 +4523519 +6119299 +6119323 +6119359 +6119488 +9220953 +5149664 +5149787 +1987602 +1954382 +11794114 +1942762 +1942790 +1942793 +1943236 +8277078 +8073674 +1944234 +1944910 +1945535 +1945571 +1945587 +1945786 +1945877 +1945878 +1945980 +1946037 +1946660 +1946661 +1947112 +1947113 +1947117 +5142130 +5142160 +1948371 +1948994 +5142338 +5142352 +1949954 +1950156 +1950877 +1948916 +1758839 +5108619 +1761439 +1762383 +5109646 +1764174 +4534245 +4534250 +4534275 +11797244 +5109843 +5109848 +5109855 +5109931 +8352161 +1766072 +9105656 +5772171 +5772172 +5772206 +1768042 +1768048 +1770416 +1774470 +1774797 +6115946 +1775329 +5110858 +5772222 +1780049 +1783777 +1784349 +1784591 +1785181 +1785185 +1785329 +1785361 +1786360 +1787264 +1787438 +1787770 +4534166 +4534194 +1789957 +1790364 +1791758 +1792418 +1792996 +1794507 +1795068 +4532908 +1795483 +9803522 +1796451 +4532811 +4532269 +6116341 +6116368 +6116899 +1763072 +5109259 +5109345 +5109407 +4534675 +4534681 +4534686 +6116440 +8108800 +1770821 +1771040 +1771245 +4533714 +1765751 +5108660 +5108671 +11714235 +11819666 +1797793 +1797864 +1797942 +1797965 +4532203 +4532206 +4532216 +4532266 +6115772 +6115793 +6115822 +1782267 +1767302 +8363507 +10458175 +1824131 +5118892 +5119183 +1827775 +10023821 +1892544 +1892554 +1892555 +1892621 +11688586 +5806166 +10587253 +1892811 +1892814 +5127822 +1893558 +1893562 +1893901 +4535632 +8049830 +4535809 +4535819 +1895956 +1896547 +1896600 +1896603 +5128545 +1897904 +1897946 +1897965 +1897970 +1897972 +1898002 +1898017 +10114575 +1898286 +1898290 +4299368 +4299370 +1899071 +1899144 +1899164 +1899198 +1900053 +1900055 +1901781 +1901782 +1901850 +11546465 +11623814 +11726907 +11841763 +5130335 +5130347 +5130392 +5130393 +5130396 +5130448 +5130464 +5130467 +5130487 +5130502 +5130542 +1903009 +1903661 +1904206 +1906006 +1906014 +1906030 +1906063 +1906117 +5132523 +5132529 +5132540 +5132545 +5132550 +5132591 +5132713 +1906604 +1906621 +1906679 +10569879 +11378273 +5132839 +1907399 +4535754 +1908356 +8727750 +1909818 +1911461 +5133610 +10203260 +1912506 +8964866 +5134098 +5134301 +1915499 +11372793 +11375508 +12301192 +12357826 +12358748 +1909736 +5135573 +5135944 +5136059 +5136113 +5136200 +5136306 +1916352 +1916554 +1918207 +1918212 +1918632 +1918688 +1918776 +4535539 +5137397 +7988274 +8404037 +9902073 +7762841 +10717680 +5131347 +5131442 +5131540 +5133088 +7642610 +5135513 +10873137 +1896957 +5128597 +5128825 +5128984 +5129091 +5129190 +9087922 +1910496 +1910501 +1910628 +1910629 +1910663 +1899737 +7934873 +8393082 +1842097 +4301036 +4529738 +6122527 +1878656 +1878804 +1878951 +1879001 +1879227 +1879340 +1879408 +1879427 +1879452 +5126204 +1879471 +1879490 +1879655 +1879691 +1880011 +5126637 +1880408 +1880865 +1881126 +1881147 +1881151 +5126668 +9819403 +1881303 +1881362 +1882110 +1882884 +1882905 +1882941 +1882960 +1882965 +1883067 +1883124 +1883386 +1883458 +5127094 +1884051 +1884437 +1884449 +1884479 +6120980 +1884774 +1884844 +1884909 +4532146 +1885024 +1885262 +1885745 +1885764 +6120861 +1885836 +1885931 +1886015 +1886088 +1886104 +1886251 +1886648 +1886729 +7562564 +1887054 +8955839 +4531670 +1887694 +1888346 +1888484 +1888915 +1889071 +1889272 +1889277 +1889543 +9228024 +1890287 +1890335 +7543006 +1890346 +1890410 +1890534 +1890670 +1890898 +1891167 +1891171 +1891217 +4532022 +4532024 +1891583 +8986756 +1892456 +1892476 +5771877 +6133232 +6121010 +6121218 +6133158 +8876855 +1886374 +1889833 +5127644 +5127669 +5127675 +5802339 +6121184 +8218441 +1886207 +1883885 +4532150 +4532160 +1831136 +1858674 +1858930 +1859285 +1859932 +1866249 +1866252 +1866262 +1866421 +5124813 +1866980 +1867009 +1867014 +1867295 +1867312 +1867673 +1867744 +1867749 +1867750 +1867751 +1868014 +1868049 +1868060 +11414590 +11464362 +5120278 +1861433 +1861494 +1861510 +1861522 +1861544 +1861584 +1861592 +1861644 +1862293 +1862311 +1862401 +1862433 +1862692 +1862719 +1862765 +1862989 +1863034 +1863282 +1863544 +1863640 +9178932 +5124071 +5124088 +5124093 +5124109 +1864576 +1864652 +5124352 +1992634 +1992956 +1992969 +6132725 +1830437 +1830459 +7761138 +10055273 +1857068 +1857143 +1857577 +1857581 +1857626 +1858283 +1937643 +1937667 +1937702 +1937711 +1937849 +1937959 +1938069 +1938125 +1938166 +8225376 +5141170 +5141195 +5141216 +5141234 +5141248 +5141250 +4690079 +5141297 +1939314 +5770913 +1800642 +5114409 +4534796 +4534757 +6112634 +1802662 +1802850 +1802868 +1803022 +1803025 +1803060 diff --git a/dev/releases/mambo_v3/presets/arctic.classes b/dev/releases/mambo_v3/presets/arctic.classes new file mode 100644 index 0000000..ad9f42d --- /dev/null +++ b/dev/releases/mambo_v3/presets/arctic.classes @@ -0,0 +1,1548 @@ +1860621 +1860628 +1860659 +1860664 +1860668 +1860688 +1860709 +1860711 +1732063 +1732416 +1732452 +1732521 +1732565 +1732662 +1732717 +1733258 +1733484 +4525266 +4525273 +1734453 +1734826 +1845270 +1845368 +1845607 +1846604 +1846657 +1846729 +1846916 +1847572 +1848150 +10450501 +1848219 +1848273 +1848312 +1848356 +1848378 +1848596 +1848636 +1848669 +1848690 +1848713 +1848714 +1848730 +1848753 +1848864 +1848868 +1849267 +1849273 +1849284 +1849294 +1849477 +11052757 +11080751 +1849630 +1849856 +1850008 +1850042 +1850045 +1850076 +1850106 +1850238 +11576787 +1850302 +1850335 +1850386 +1850394 +1850450 +4527903 +1850522 +1850538 +1850971 +1851000 +1851010 +1851011 +5122037 +5122131 +1851203 +1851220 +1851337 +1851347 +1851555 +5122206 +1852177 +1852311 +11287091 +1848920 +1829533 +1829776 +1829785 +1829799 +1829823 +1829974 +1828637 +1829021 +6097236 +5769272 +10176413 +5879654 +7448174 +4525610 +1861395 +1845962 +1830843 +1830122 +1830125 +1830144 +1830147 +1830152 +1830186 +1830191 +1830207 +1830241 +1830243 +1830262 +1830266 +1830271 +4525476 +1831643 +8271010 +1853723 +5880147 +9734171 +11418741 +1761111 +1764531 +1769103 +1769897 +9564612 +9607447 +1772793 +1777631 +1780150 +5113078 +5113084 +5113234 +1797178 +1797258 +1797367 +1797373 +1797374 +1797436 +1797479 +4532471 +8355390 +1798346 +1798408 +1798449 +1798594 +1798807 +4532351 +4532357 +9621113 +1799708 +1804071 +1804906 +7874258 +1808752 +5115771 +1810099 +5116416 +1813114 +5117189 +5117400 +1817729 +1819145 +4532293 +4532297 +1819268 +1819873 +7657803 +1820372 +10551407 +12253343 +5884571 +7596232 +5771982 +6097214 +4532544 +4532516 +12089608 +11962292 +12135372 +5115872 +5115874 +9530200 +5116475 +4532405 +4532408 +4532412 +8000103 +4532534 +1760246 +5113036 +1812394 +8237987 +1820039 +1771772 +1860979 +1860983 +4522916 +4522919 +4522922 +12318291 +4522886 +4522891 +1860768 +7767114 +7961640 +1992504 +1852956 +1852978 +1835432 +1835433 +1835456 +1835457 +9724183 +1837343 +1837420 +1837429 +1837464 +1837515 +4529064 +7958169 +1839293 +1839296 +1840297 +1840301 +1840345 +1840346 +1840360 +1840380 +1840408 +1840485 +1840555 +1840566 +1840581 +1840596 +5119808 +4529630 +1751236 +1751290 +1751298 +1751368 +1751457 +4535884 +1860408 +4525177 +5123394 +5769164 +5123461 +1751216 +1869803 +1869852 +1869976 +1870202 +1870250 +1870988 +1871407 +4531402 +1871698 +10787705 +1872901 +1872904 +1873079 +1873776 +1873780 +4531264 +1874204 +4531147 +1875120 +8219149 +1875376 +4531242 +1875631 +4531284 +1875827 +1875869 +1875918 +1875940 +1875952 +1876329 +1876409 +1876854 +1877310 +1877341 +1877368 +4531246 +1877941 +1878470 +1878490 +1872315 +1748805 +1939964 +11667300 +5141493 +5141501 +1940510 +1940575 +1940639 +1940744 +1940768 +1940807 +1940838 +1939879 +1736377 +1736511 +1736528 +1736560 +1736601 +5102666 +1736800 +1736898 +4530406 +4529931 +1737342 +1737403 +1737491 +1737497 +7350238 +1737526 +1737533 +1737542 +1737552 +1737650 +1737753 +1737775 +1737847 +1737893 +1737924 +4530002 +1738218 +1738222 +1738245 +1738317 +1738322 +1738337 +1738422 +1738514 +8420632 +8869900 +5102931 +5102951 +1738687 +1738700 +1738722 +1738777 +1738794 +1738839 +1738883 +1739042 +1739043 +8086347 +1739128 +1739272 +1739284 +1739337 +1739377 +1739381 +5102982 +1739451 +1739461 +1739471 +1739748 +1739797 +1739816 +1739819 +1739833 +1739919 +1739922 +1739980 +1739999 +1740005 +1740053 +1740069 +1740116 +1740120 +1740174 +1740183 +1740185 +1740305 +1740392 +7797515 +8215326 +1740482 +1740518 +1740533 +1740567 +1740570 +1741253 +1741341 +1741368 +4530151 +8345820 +5103066 +5771357 +1741551 +1741615 +1741633 +1741634 +1741747 +1741752 +10807169 +11093909 +1742106 +1742142 +1742185 +1742263 +1742346 +1742402 +5103451 +5103502 +5103736 +5103948 +5771350 +7975250 +8313553 +5103998 +7661023 +1743475 +7877231 +1743532 +1743588 +1743604 +5104056 +6097235 +1743643 +1743714 +4530214 +1743768 +1743775 +4529908 +4529915 +1743828 +1743855 +1743856 +1743862 +1743867 +1743898 +1744071 +1744136 +1744180 +1744224 +1744416 +1744498 +1744588 +1744593 +1744699 +1744709 +1744714 +1744728 +1744731 +1744739 +1744742 +1744748 +1744763 +1744777 +1744789 +1744810 +7964262 +1745079 +10844862 +1745131 +1745558 +1745561 +1745579 +1745600 +1745606 +1745630 +1745634 +1745636 +1745643 +1745659 +1745676 +1745678 +1745705 +1745724 +1745737 +1745756 +1745762 +1745771 +1745787 +1745816 +1745830 +8162538 +8369868 +1745925 +1746027 +1746413 +1746440 +1746613 +1746644 +1746666 +1746689 +1746775 +1746831 +1746832 +1746856 +1747141 +4530138 +5104558 +6097234 +7588222 +9242559 +1748456 +5104641 +8691947 +10580256 +5103121 +5103176 +5103185 +5103227 +5771230 +5771232 +5771236 +5771239 +5771241 +5771249 +5771256 +5771259 +4525500 +4525503 +4525510 +4525530 +4525540 +4525547 +4525562 +1920851 +1920889 +1921239 +1921247 +1922937 +5138387 +5138543 +5138561 +1923796 +1924097 +1924106 +12185456 +1925918 +4300000 +1925962 +1926054 +1926324 +1926861 +5882965 +1928248 +5139156 +1928945 +11720834 +1929270 +1929659 +1929697 +1930110 +8643155 +1931553 +1931779 +10570752 +1932411 +1932417 +1932960 +5140244 +1933793 +1926260 +1933138 +1919327 +1919328 +1919712 +1919719 +1920237 +1920259 +5137791 +5137803 +1920494 +1920496 +1920506 +5137882 +5137894 +5137903 +5137908 +5804895 +1920712 +5714914 +5137582 +5137595 +5137636 +5137672 +5137689 +5137693 +5137700 +5137706 +5137711 +5137714 +1920218 +1748890 +1749050 +1749070 +1749164 +1749713 +1749744 +1749846 +1749959 +1750097 +1750166 +1750288 +5104772 +5104781 +5104797 +5104891 +5104940 +5105054 +5105088 +5105158 +5976947 +1751051 +5104759 +1749591 +1749608 +1735532 +4527339 +1731826 +1731837 +1731860 +1954563 +5143380 +5143453 +5143477 +1955497 +5143651 +5143675 +5143697 +1956440 +1956524 +1956599 +1956710 +1957266 +1957300 +1957570 +1957816 +1957845 +1957854 +4524421 +4524426 +5143964 +1959735 +1959914 +1959919 +1960617 +1961040 +1961190 +1962204 +1962265 +1962434 +1962516 +9812211 +1962860 +1963011 +1963306 +1963446 +1963463 +1964191 +1964195 +1964653 +1964657 +8361848 +5144424 +5144426 +1965078 +1965166 +1965763 +1965777 +1965795 +1965807 +1965810 +1965823 +1965825 +1965841 +1965865 +1965913 +1965996 +1966017 +5144534 +5144543 +1967245 +1967273 +1967597 +1967815 +1967873 +7681733 +1968867 +1969291 +1969954 +1970213 +5144721 +5145009 +5145136 +5145260 +5145409 +1971888 +1972120 +1972185 +1972187 +1972234 +1972250 +1972278 +1972342 +1972377 +5145965 +7541913 +7960566 +1972434 +1972447 +1972449 +1972454 +1973414 +1973487 +5146496 +5146559 +5146659 +5146677 +5146883 +5146946 +5146961 +5147039 +5147062 +5147208 +5147245 +5147608 +5147638 +1975546 +1975553 +1975571 +1975733 +1975741 +8329661 +1975793 +5715277 +5715278 +8160782 +1975897 +1975903 +1976163 +5147681 +5147713 +7973517 +1976993 +1977003 +1977007 +1977068 +5147827 +5147834 +5769028 +1978056 +1978065 +1978114 +1978375 +1978445 +1978493 +4524636 +4524638 +4524890 +1978751 +1978776 +1978821 +1978977 +5148286 +1979308 +1979430 +1979473 +1979781 +5148436 +5148462 +5148486 +5148487 +8421569 +1982406 +1982500 +1982529 +1982541 +1982542 +1982592 +1982636 +1982671 +1982746 +1982770 +1982791 +1982867 +1982885 +1983000 +1983052 +1983170 +1983260 +1983288 +1983441 +1983442 +1983525 +1983558 +1983648 +1983705 +1983755 +1983896 +1983922 +1983997 +1983999 +7752082 +7993353 +8015895 +8026858 +8262357 +1984734 +1984942 +1984949 +1985522 +1986052 +1986056 +1986157 +1986166 +1986171 +1986191 +1986220 +1986367 +1986452 +1986522 +1986575 +1986623 +5149307 +5149315 +5768880 +1987744 +1988593 +1988684 +8388883 +5149414 +5149438 +1988881 +1989428 +1990066 +1990150 +1990551 +1991371 +5149836 +1992066 +5880533 +5880545 +5880550 +5880552 +5880559 +5880563 +7657419 +8237343 +8632989 +9261296 +9272461 +5769068 +5769072 +4524740 +4523556 +4523560 +4523564 +4524054 +4524376 +4524822 +4524070 +4524072 +4524951 +4525078 +5144190 +5146412 +5715275 +5149499 +7769543 +4523880 +4523883 +4523885 +5149665 +5149704 +5149746 +5149819 +5146342 +5146379 +1972942 +4302268 +5141677 +1943954 +8133678 +7389824 +1947282 +1947306 +1947335 +1949794 +1949852 +1950006 +8109173 +5977179 +5977250 +7633472 +1869478 +1869489 +1869512 +9359597 +9400895 +10963226 +10982815 +5109821 +1758878 +1759055 +1759069 +1759083 +4533952 +1759407 +1759620 +1759661 +1759667 +1759668 +1759686 +1760104 +1760593 +1794361 +4534225 +8708745 +1760887 +1761041 +1761438 +1762608 +1762615 +5109506 +5109523 +5109599 +5109722 +1763610 +1765011 +1765044 +4534245 +4534257 +1765767 +1766128 +1766131 +1766137 +1766210 +1766410 +7895336 +1766646 +1766650 +1766741 +1767597 +1767625 +5772176 +5772196 +5772199 +5772205 +5772210 +1768117 +5110200 +1768341 +1768702 +1768749 +1768771 +1768815 +1769057 +1769505 +1769566 +1769947 +1769958 +1770132 +1770150 +1770477 +4532696 +1771385 +1771391 +7725644 +1771509 +1771531 +1771997 +1772013 +1772169 +1772179 +1772940 +1772956 +1772977 +1773163 +1773328 +1774314 +4534052 +4534057 +5772269 +4534719 +1776067 +1776330 +1776371 +5110756 +5772446 +1776459 +1776462 +1776619 +1776862 +4534463 +5110871 +5110885 +4534299 +1778517 +1778596 +5111574 +8253467 +1779435 +1779641 +1779690 +1779959 +1780378 +1781694 +1782560 +1782615 +1782622 +1782627 +1782672 +1782726 +1782727 +1782763 +1782777 +1782841 +1782927 +1782948 +1782978 +1783037 +1783043 +1783045 +5112155 +5112191 +5112283 +5112291 +5112336 +5112345 +5112377 +5714951 +5714973 +5715004 +5772349 +5772351 +7921916 +8043500 +1783855 +1783861 +1784826 +4534290 +1785286 +4532886 +4532890 +1785888 +1785895 +1785951 +1785955 +1785964 +1785992 +1786007 +8292872 +1786308 +1786902 +1786936 +1787112 +1787213 +1787504 +1787506 +1787590 +1787610 +1787697 +1787770 +1787841 +1787859 +1788425 +1788522 +4534011 +1788917 +1788929 +1789086 +1789267 +1789481 +1789505 +1789553 +1789580 +4534166 +1789695 +1789745 +1789753 +10068024 +10113008 +10312073 +1789982 +1790002 +1790072 +1790084 +1790160 +11693171 +1790359 +1790361 +9174377 +1790625 +1791422 +1791784 +1792292 +1792377 +1792379 +1792383 +1792411 +1792414 +1792418 +1792426 +1792442 +1792449 +1792475 +1793369 +1793877 +1793983 +1793986 +1794102 +1794590 +1795215 +1795854 +1795871 +1795930 +1795946 +1795983 +1796007 +1796032 +1796117 +1796145 +1796169 +1796181 +1796188 +4534485 +7438067 +1796217 +7780930 +1796463 +8105817 +1796678 +4533431 +4533433 +4533442 +4533444 +4533446 +1798372 +1798916 +1798931 +1798971 +1798974 +1798984 +1799135 +1799701 +1799799 +1799957 +1800032 +8742426 +4534389 +4534207 +10638451 +4533273 +4534540 +8890502 +9135821 +4534038 +4533202 +4534538 +4533128 +4533136 +4533661 +4533671 +4534408 +4534533 +11478679 +5110644 +1779334 +5114198 +1771678 +1771698 +8581601 +9623131 +1770880 +1771169 +1771214 +7940536 +4533347 +4533360 +1822587 +1822610 +1822613 +5118524 +1822787 +1822796 +1822819 +1822830 +7875265 +1825064 +1825077 +1825083 +4534909 +4534914 +1825156 +1825176 +1825539 +1825967 +1825971 +1825983 +1826022 +1826033 +5118996 +1827125 +5119245 +1828162 +1894102 +1894164 +1894268 +1894298 +5882039 +7712938 +1894714 +4535614 +4535630 +4535636 +8049830 +1894840 +1894896 +4535827 +4535817 +5128250 +5128266 +5128323 +5128326 +5128357 +9804158 +1895875 +1896841 +1898286 +4299368 +1898544 +5129374 +5129378 +5129405 +5129432 +1902533 +1902749 +1905187 +1905299 +6221746 +1905383 +1905396 +1908044 +1909398 +1911112 +1911168 +1911278 +1911461 +7809779 +8078362 +1912325 +1912372 +1912428 +1912470 +4299535 +4299565 +4299576 +4299597 +4299599 +7428726 +8810143 +1913328 +5134469 +5134517 +5134559 +5134661 +5134667 +5134682 +5134693 +5134759 +5135355 +5714507 +7738295 +8314088 +9967126 +8176911 +1918988 +5130587 +5130682 +5131096 +5132084 +5132183 +5131910 +8138711 +1902143 +1902182 +1899433 +7768674 +5142870 +1951649 +1952014 +5142903 +1952229 +5143048 +1952532 +5143129 +5143147 +1952806 +1832819 +1832853 +1832915 +1832927 +1832936 +1833159 +5880257 +5880258 +6097224 +6097225 +6097228 +1853064 +5120668 +5120675 +5121046 +5121177 +5121517 +5121613 +5121737 +8273859 +5120396 +5101394 +4525641 +1731598 +1872368 +1878782 +1878862 +1878879 +1878895 +1878939 +1879452 +5126212 +1879534 +1879630 +1879703 +1879731 +10915497 +1879939 +1879970 +1880040 +1880062 +1880064 +1880088 +1880094 +1880104 +1880138 +1880139 +1880140 +1880143 +4531687 +1881603 +4531713 +1881834 +4531975 +1882195 +1882210 +1882437 +1882459 +1882729 +5126834 +8325294 +1883161 +4531690 +1884212 +4531708 +1884465 +1884970 +8223165 +1886587 +1887290 +1887701 +1888743 +1888759 +1888823 +1889942 +5127521 +1890187 +1890534 +1890576 +1890679 +1890699 +1890772 +1890802 +7431428 +1891059 +1891167 +1891426 +1891473 +1891493 +1891494 +4532022 +9674732 +1884255 +1884273 +1884332 +1884337 +1884370 +1884403 +5884851 +5126675 +7446048 +8532380 +8537359 +8823068 +8858121 +9100030 +1887108 +1887177 +1887178 +4532050 +4532088 +4532095 +4532097 +1846107 +1846111 +1846133 +1846141 +1846210 +1846219 +1846236 +4528818 +1830879 +1830937 +1830962 +1831002 +1831009 +1831128 +1831136 +1831168 +4525443 +4525448 +5122439 +1854849 +4526050 +1858637 +1858775 +1858778 +1858873 +1859046 +1859100 +1859177 +1859285 +1859287 +1859305 +1859471 +1859480 +1859488 +4536472 +4536483 +7642240 +8200050 +1973467 +5123221 +5123042 +5124911 +1867820 +7734292 +1841813 +1861644 +1861797 +1861851 +1861862 +1862572 +1862580 +1862624 +1862837 +5123922 +5124007 +5124029 +1864165 +1864358 +1864377 +5124121 +5124143 +5124233 +1864652 +1993419 +4525189 +5119513 +1830361 +1830374 +1830380 +1830407 +1830457 +4525420 +7976145 +1830537 +1830802 +4525364 +1754332 +5107219 +5107644 +7778368 +7955974 +8426357 +4522753 +1939658 +1939677 +1939680 +1939688 +7646066 +1829322 +1829363 +1856005 +1856384 +1856620 +1856658 +1856668 +1856686 +1856691 +1856768 +1856867 +1857626 +9790007 +1857856 +1857863 +1857924 +1857978 +1858074 +1858100 +1858113 +1858163 +1937739 +8225376 +1938520 +1938810 +1938955 +1938975 +1939056 +12253844 +1858531 +1838691 +1838905 +1838911 +4528692 +1835396 +1837172 +1839893 +5770922 +5770942 +1801051 +1801896 +4534779 +4534782 +1802280 +1803073 +4534762 +5114311 +8244266 diff --git a/dev/releases/mambo_v3/presets/asia.classes b/dev/releases/mambo_v3/presets/asia.classes new file mode 100644 index 0000000..476e002 --- /dev/null +++ b/dev/releases/mambo_v3/presets/asia.classes @@ -0,0 +1,4443 @@ +1837646 +1934693 +1935614 +1935838 +1935849 +1992277 +1992283 +1992315 +1860668 +1732063 +1732114 +1732115 +1732416 +1732452 +1732508 +1732521 +1732525 +1732565 +1732662 +1732685 +1732763 +1732830 +1732842 +5101640 +1733154 +1733155 +1733243 +1733258 +1733394 +1733412 +1733484 +4525266 +5734897 +5101745 +5769191 +1734453 +5102207 +5102242 +1734496 +1734519 +1734690 +1734704 +1734826 +5734891 +5102287 +5102300 +1831890 +1832143 +5734640 +11453841 +1832235 +1832248 +1832254 +5734645 +1832612 +11505614 +8825467 +1845270 +1845547 +1845548 +1845607 +4529566 +4528100 +1846604 +10785815 +11730078 +1847062 +1847097 +1847157 +1847260 +1847392 +4528547 +1847641 +9546514 +1848219 +9868978 +1848273 +1848356 +1848378 +4528539 +1848864 +5122013 +1849284 +9007213 +1849656 +4527903 +1850570 +1850633 +1850781 +1851337 +1851543 +1851555 +1852165 +1852177 +6133343 +11287091 +1829533 +1829659 +1829776 +1828637 +6097236 +8871600 +7448174 +4525610 +10835385 +10855556 +5125130 +1861395 +1868428 +1868527 +5734146 +1845866 +1845962 +1834980 +8503184 +1839094 +1841261 +1830152 +1830191 +1830241 +1831458 +1831631 +1831643 +9379855 +8834672 +1839625 +5880147 +9734171 +10679326 +10746289 +11382064 +10698858 +11570545 +10701190 +11807833 +12199936 +11095591 +11418741 +7908344 +12259113 +12208733 +12235234 +12217030 +1758625 +1759150 +1759775 +1760140 +6132868 +6132869 +1760201 +1760927 +10889719 +1760970 +1761111 +1761213 +1761353 +1761387 +9257793 +1762151 +11562374 +1762219 +1762226 +1762298 +1763589 +5109766 +1763650 +1763782 +1763812 +1763976 +1764021 +1764032 +1764043 +1764060 +9278311 +1764531 +1764640 +1764880 +1764886 +1765653 +1765863 +1766260 +1766558 +1766560 +1766570 +1766584 +1766601 +1766618 +3257809 +6116699 +1766888 +1767044 +1767755 +1767758 +1767779 +1767780 +5110190 +11097510 +1767883 +1768440 +5110232 +1768898 +10820762 +1769103 +1769168 +11467034 +10848620 +1769410 +1769425 +1769465 +1769737 +1769772 +10881384 +12148290 +1769823 +1769827 +1769840 +1769852 +1769897 +1769901 +6132966 +6132967 +7701550 +8837162 +1771839 +1771975 +1771977 +1772352 +1772793 +4532500 +5110397 +5110417 +5110447 +5110490 +1774575 +1774576 +1775148 +5110546 +5110765 +5110769 +1777166 +1777631 +5110837 +1777695 +9372988 +6132953 +4687991 +6133029 +5110981 +5110986 +5110993 +5111007 +5111044 +6133058 +9610080 +1779399 +1779456 +6132938 +1780150 +5111830 +10203499 +1780705 +1780716 +1782115 +1783302 +1783652 +1783882 +1784804 +10208792 +1785744 +1785832 +1786317 +1786711 +11368766 +5112500 +6132971 +6132974 +1786980 +1786985 +1787009 +10860091 +6132805 +1788045 +5112531 +1788553 +6132936 +7346446 +6132826 +1788953 +1789225 +1789604 +1789794 +1790331 +1790692 +1790816 +10749137 +10766319 +1790876 +1790888 +1791010 +1791094 +1791097 +10743044 +6132950 +1791514 +1791698 +1791715 +11016336 +11725043 +11971514 +5113078 +5113082 +5113084 +5113148 +5113330 +5113352 +1792541 +1792695 +5113385 +5884243 +9504222 +1793429 +1793610 +1793613 +1793631 +1793635 +1793646 +1793656 +1793892 +5113925 +1796984 +10108671 +6132979 +10600368 +1797178 +1797258 +1797259 +1797276 +1797299 +1797333 +1797344 +1797349 +1797374 +1797429 +1797454 +1797479 +1797527 +4532461 +4532471 +4532473 +8355390 +8756768 +9332506 +1797727 +1798014 +1798101 +5113950 +5884247 +1798346 +1798408 +1798449 +1798481 +1798488 +1798504 +6132841 +6132850 +11732472 +11976273 +1787072 +1787079 +1798523 +1798529 +1798580 +1798594 +1798700 +1798794 +1798802 +1798807 +1798823 +1798863 +1798868 +4301310 +4532351 +4532352 +6115426 +6115437 +6133046 +6133051 +8793873 +1799417 +1799708 +1799743 +1799751 +1799757 +6132824 +6132825 +10722110 +1803148 +1803163 +1803197 +1803302 +1803824 +1804071 +1804477 +9343385 +1804906 +1805044 +1805111 +11494627 +12229237 +1805580 +5115166 +5115167 +5115198 +9663271 +1806814 +1806871 +1806936 +7874258 +1807969 +11453492 +1808140 +1808145 +1808161 +1808166 +1808180 +1808195 +1808221 +1808236 +1808286 +1808340 +1808348 +1808381 +1808440 +1808450 +1808559 +6198302 +9219266 +1808752 +5115701 +5115771 +1809019 +5115777 +1809115 +1809210 +1809308 +10189965 +1809387 +5116095 +10183056 +12006709 +1810099 +1810464 +10882244 +5116395 +5116412 +12176559 +12182061 +1811686 +1812500 +10671425 +10821201 +11736162 +12209759 +1813010 +1813036 +1813114 +1813263 +5117189 +7656811 +1814538 +1814653 +1814913 +1814928 +1814971 +5117399 +5117400 +1815260 +1815680 +10826443 +12249986 +1816029 +1816065 +1816138 +1816246 +1816276 +1816292 +1816299 +1816362 +1816881 +5117779 +1817797 +5734900 +11461056 +11860565 +1818413 +8326103 +1818659 +1818991 +1819050 +10822185 +1819128 +1819145 +4532293 +4532297 +6134023 +6134027 +6197200 +7346382 +7346384 +1819268 +1819270 +1819280 +11656384 +1819421 +8407461 +1819668 +6134035 +1819873 +5118348 +6122092 +7657803 +5118422 +10546538 +1820275 +1820282 +1820291 +1820318 +1820352 +1820372 +1820393 +1820401 +1820406 +1820414 +1820429 +1820440 +1820450 +1820451 +1820458 +1820477 +1820478 +5734655 +5734657 +7346381 +9420824 +1820565 +1820753 +1820888 +1821105 +1821260 +1822141 +1822142 +11731502 +12253343 +12037602 +9276279 +9347308 +5884571 +10503495 +8897869 +7596232 +12176367 +7346231 +12183285 +6097214 +4532544 +4532516 +6133081 +6133083 +4532532 +4532565 +10864524 +12021153 +12021649 +12089608 +9673208 +10270464 +8741750 +9473918 +9400545 +9559336 +6133292 +11332355 +6133340 +10062933 +10717837 +8148822 +12216332 +12242422 +9852545 +10806460 +6133252 +10072380 +6133325 +9754232 +10972780 +11142432 +10629533 +10309234 +12171522 +9493317 +9315833 +11962292 +10399906 +6133266 +6133269 +6133270 +6133271 +10754772 +10812069 +11232431 +6112449 +6133311 +6133312 +6133313 +6133315 +6133317 +8452092 +8526388 +8543494 +8624848 +9927378 +5734901 +6133262 +12257250 +10166724 +8831819 +12135372 +5115872 +5115874 +5116475 +8038357 +6133264 +6097254 +1774829 +5116698 +5116843 +12171068 +9266866 +10178326 +10282389 +10400868 +10469564 +10813849 +10907635 +10982648 +8874633 +9508913 +1783898 +1783906 +6133033 +5116504 +1788635 +9336001 +1781413 +1781421 +1803461 +4532405 +4532408 +4532412 +10866411 +6133241 +6133242 +6133244 +6133248 +7346227 +8000103 +9478424 +1781598 +1794273 +4532534 +1763761 +6115388 +6133297 +1774583 +1774598 +1774604 +1774618 +1774626 +1774635 +1774640 +1774654 +1774661 +1774682 +1774702 +1768626 +6132809 +1819852 +1780287 +1813174 +4532508 +1793515 +1793533 +5111643 +1804532 +1768461 +1760246 +5113036 +5109796 +1821455 +1821464 +1821478 +1821479 +1821505 +1821547 +1821651 +1821863 +1821920 +1821934 +1821940 +1822017 +1819337 +1819362 +1804182 +1774997 +6122364 +1815315 +1781446 +1781473 +6116076 +1783713 +1783725 +1812394 +8237987 +4532366 +4687933 +4687935 +6116646 +10926224 +11088003 +1820118 +1820137 +1819057 +4532453 +6116413 +1820039 +5118396 +1781531 +1798329 +1798331 +1798335 +1784947 +1785072 +1785105 +1765996 +1765999 +1766022 +6133069 +10272611 +10330198 +10598038 +11513188 +11612469 +1786597 +4687389 +5884188 +6132915 +6132916 +6132917 +5110012 +1772822 +12185656 +1809594 +1781350 +1781353 +6133013 +1796943 +1819685 +10098436 +11717028 +1771772 +1782310 +10094256 +6197138 +10765884 +9792270 +5108435 +5108440 +1771903 +1788813 +4301309 +10506164 +1777500 +1777517 +5112440 +1795542 +1860979 +1860983 +1860987 +1860994 +4522890 +4522891 +1860765 +1860768 +1992504 +1852956 +1835432 +1835433 +1835457 +9724183 +1837420 +4529064 +1839293 +1839296 +1840301 +1840346 +1840566 +1840581 +1840596 +1831752 +5125075 +10371735 +1869359 +1869363 +9883856 +1939510 +1939520 +5141344 +1860259 +1860261 +1860274 +4525177 +5123339 +5123394 +5123419 +5769164 +5880040 +5880041 +6132546 +5123449 +5123461 +5123474 +5123485 +5123489 +1869595 +1869706 +1869803 +1869976 +1870202 +1870237 +1870249 +1870250 +1870450 +1870650 +5125306 +1871212 +1871407 +4531402 +4531409 +8766638 +1871451 +1871630 +1871683 +1871698 +1871783 +1871988 +1872094 +1872169 +4531427 +7673242 +10787705 +1872848 +1872850 +1872873 +1872901 +1873051 +1873079 +1873215 +1873417 +1873776 +1873780 +1873783 +4531237 +4531264 +1873843 +1873890 +5125569 +5125596 +5125602 +5125633 +5125635 +5125689 +1874269 +1874274 +4531147 +1874743 +1874937 +1875120 +8219149 +1875327 +1875376 +1875827 +1875830 +1875865 +1875869 +1875918 +1875958 +1876168 +1876329 +1876409 +1876542 +1876592 +1876854 +1876922 +1877038 +1877345 +1877368 +9111961 +1877498 +5126052 +1877788 +1877941 +1877988 +4531417 +1878406 +1878470 +9835867 +1883045 +1888454 +5884888 +6133441 +4525884 +5141493 +1940510 +1940575 +1940639 +1940644 +1940717 +1940744 +4525777 +4525803 +1940807 +12211069 +1939879 +1736358 +1736377 +1736499 +1736560 +1736601 +1736623 +1736727 +1736905 +1736993 +1737015 +4529931 +10842267 +1737313 +1737342 +1737368 +1737491 +1737497 +1737524 +1737526 +1737533 +1737542 +1737650 +1737753 +1737776 +1737847 +8186212 +1738192 +1738222 +1738373 +1738422 +5102931 +5102951 +1738700 +8086347 +1739151 +1739337 +5102982 +1739471 +1739605 +1739833 +1739919 +1739922 +1739980 +1739999 +1740183 +1740185 +1740392 +7797515 +1740469 +1740482 +1740524 +1740623 +8094357 +1740797 +1740828 +1741056 +1741341 +1741368 +4530151 +5103061 +1741633 +1741752 +1742185 +1742263 +1742346 +5103613 +5103736 +5103948 +5771350 +8313553 +5103998 +11846897 +1743475 +7877231 +1743532 +1743604 +5104056 +1743768 +1743775 +1743782 +4529908 +1743828 +1743856 +1743862 +1743867 +1743898 +1743998 +1744071 +1744136 +1744180 +4530632 +1744526 +1744588 +1744593 +1744699 +1744728 +1744731 +1744739 +1744896 +1745013 +10844862 +1745561 +1745579 +1745600 +1745630 +1745634 +1745771 +1745781 +1745816 +1745895 +1745947 +1745952 +1745957 +1746027 +1746174 +1746327 +1746413 +1746440 +1746613 +1746644 +1746666 +1746714 +1746775 +1746832 +1746856 +1746876 +1747141 +5104442 +1747738 +5104597 +6097234 +1748605 +8691947 +5103121 +5103176 +5103227 +5771229 +5771232 +5771236 +5771239 +5771249 +5771258 +4525510 +4525530 +4525540 +1920851 +1920864 +10159697 +10707501 +9916153 +1920957 +1920991 +1920996 +1921009 +1921010 +1921021 +1921040 +1921044 +7346426 +1921055 +10581870 +10825466 +1921092 +1921093 +1921150 +1921163 +1921262 +1921263 +1921300 +10556522 +1921466 +7387466 +1921633 +7346430 +5138069 +1921897 +1922057 +1922085 +1922111 +1922143 +1922163 +1922244 +1922285 +1922288 +10384044 +10442031 +9904499 +1922311 +1922343 +8016522 +5138200 +1922572 +1922584 +4535092 +1922689 +8782891 +1922745 +1922771 +1922937 +5138257 +1922994 +1923019 +5138298 +5138543 +5138561 +5714680 +1923458 +1923491 +1923525 +1923649 +1923650 +1923651 +1923668 +4708977 +1923796 +1923809 +1923883 +1923917 +1924044 +1924057 +1924097 +1924193 +5138681 +1924298 +1924323 +10656713 +1924390 +1924417 +1924458 +1924558 +1924713 +1925233 +4535172 +1925381 +1925454 +1925543 +1925609 +1925628 +1925679 +1925711 +1925731 +1925743 +1925877 +1925918 +1925962 +1926054 +9816676 +1926324 +1926436 +1926437 +1926446 +1926448 +1926456 +1926546 +1926550 +1926574 +5883255 +7390086 +1926593 +1926611 +10116946 +10361239 +10606547 +1926722 +1926800 +1926861 +10087308 +11008182 +11508257 +11543078 +1926972 +1927025 +1927034 +1927217 +1927219 +1927242 +1927272 +1927274 +1927284 +4709111 +5883052 +7408690 +8322165 +9994384 +10517500 +1927348 +1927393 +1927439 +1927445 +1927707 +1927717 +5882965 +7680748 +1927897 +1928248 +5139040 +5139050 +1928349 +1928361 +1928376 +1928382 +1928419 +5139156 +1928628 +5139201 +1928754 +1928849 +1928908 +1928915 +9856663 +1928960 +1929270 +1929402 +1929659 +1929697 +5139309 +5139339 +8356768 +1930110 +1930832 +1930904 +1930916 +1930935 +4535106 +1930954 +1930968 +1931109 +1931132 +8643155 +1931148 +1931179 +1931509 +1931561 +5734268 +7346434 +1931655 +1931656 +1931706 +1931729 +1931735 +1931779 +5139915 +1931889 +1931906 +1931908 +1931943 +1931956 +1931958 +1931979 +1931997 +1932020 +4709051 +1932043 +1932159 +1932166 +1932172 +1932189 +1932206 +1932246 +1932273 +1932287 +4709095 +4708995 +1932411 +1932551 +7346444 +1932607 +5139990 +6132685 +1932752 +1932812 +1932814 +1932863 +1932960 +1932976 +5806412 +1933028 +1933044 +1933084 +4535162 +5140214 +5140244 +5140436 +5140443 +7634721 +7664111 +1933583 +1933647 +1933649 +7346407 +1933679 +1933793 +1933844 +1933845 +5140534 +5140561 +1934187 +1934188 +1934192 +1934211 +1934213 +1934221 +1935363 +1935372 +1935377 +1935405 +1935408 +1935410 +1935454 +1935459 +1926260 +5138929 +7346417 +10879371 +11874998 +4709102 +1933095 +1933138 +1924494 +11055981 +9623220 +1752161 +5734556 +1752373 +1752483 +1752492 +1752494 +1752603 +1752651 +1752749 +1752758 +1752849 +1752903 +1753081 +1753215 +1753395 +5105458 +5105467 +5105547 +5105560 +5105570 +1753432 +1753435 +11014495 +1753636 +5734560 +1753759 +5105588 +10955682 +10932946 +7345843 +6133481 +10017342 +5105339 +5105259 +10795141 +11673056 +1919151 +1919160 +1919161 +1919176 +1919181 +1919221 +1919223 +1919320 +1919328 +1919333 +1919340 +1919344 +1919346 +1919348 +1919407 +1919412 +1919438 +1919444 +1919534 +1919551 +1919564 +1919581 +1919589 +1919635 +1919697 +1919706 +1919712 +1919716 +1919720 +1919728 +1919731 +1919741 +1919744 +1919756 +1919758 +1919762 +1919951 +1919966 +5137747 +5137748 +1920181 +1920237 +1920247 +1920258 +1920259 +5137790 +5137808 +5137823 +5137828 +5137832 +5137833 +5137847 +5137849 +5137854 +5137858 +5805954 +1920349 +1920356 +1920357 +1920362 +1920369 +1920374 +1920395 +5137861 +1920454 +1920467 +1920469 +1920472 +1920491 +1920494 +1920496 +1920502 +1920506 +1920512 +4535307 +5137889 +5137891 +5804932 +5805036 +5805407 +1920515 +5137902 +5137903 +5137908 +5137912 +5137920 +5137926 +5137932 +5137935 +5137938 +5137945 +5137946 +5137949 +5137955 +1920707 +1920709 +1920711 +1920712 +1920718 +1920786 +5804166 +5714914 +5137573 +5137578 +5137582 +5137595 +5137605 +5137612 +5137636 +5137663 +5137677 +5137682 +5137689 +5137706 +5137708 +5803588 +8203812 +1920218 +5137763 +7207679 +1749070 +1750166 +5104891 +5104759 +1758003 +1758440 +1758441 +1758461 +1855241 +1868837 +1868952 +1869057 +1869178 +1869187 +11794362 +1963095 +1963096 +1973530 +11826016 +5143303 +5143311 +5143315 +1954496 +1954563 +5143338 +5143354 +5143368 +5143380 +5143384 +5143437 +5143453 +5143506 +5143511 +5143525 +5143575 +5734335 +1954891 +1954911 +6133648 +1955389 +5143651 +1955552 +1955581 +6133676 +1955694 +1955725 +1955806 +1955856 +5143675 +5143697 +1956309 +1956384 +5734542 +5734543 +1956440 +1956496 +1956524 +1956536 +1956629 +1956710 +6133593 +4525068 +1957161 +1957174 +1957266 +1957300 +1957333 +1957368 +1957413 +1957460 +1957523 +1957572 +1957579 +1957583 +1957611 +1957718 +1957746 +1957791 +1957816 +1957852 +1957854 +5143947 +1958024 +1958045 +1958152 +1958158 +1958163 +1958241 +1958252 +1958255 +1958259 +1958260 +1958275 +1958282 +1958290 +1958305 +1958307 +1958323 +1958324 +6544637 +1958422 +1958454 +1958463 +1958483 +5144027 +1959395 +1959461 +1959494 +1959645 +1959652 +1959666 +1959667 +1959682 +1959735 +6133552 +1959876 +1959914 +1959919 +1959948 +1960002 +10694777 +1960023 +1960181 +1960182 +6133509 +1960484 +5144092 +5144093 +1960571 +1960595 +1960617 +6133518 +1960686 +1960854 +1960963 +1961013 +1961037 +1961040 +5734344 +1961052 +1961126 +1961162 +7346236 +1961190 +1961252 +1961647 +1962204 +1962265 +1962268 +1962434 +1962447 +1962516 +9812211 +1962636 +1962678 +1962839 +1962860 +1963011 +4302252 +5734349 +1963168 +1963306 +5144345 +1963446 +1963629 +1963709 +1963710 +1963733 +1963827 +11644349 +1964024 +1964025 +1964029 +6133500 +1964113 +1964116 +1964195 +1964247 +1964316 +1964331 +1964437 +1964471 +6133502 +1964637 +1964653 +8361848 +1964738 +5144426 +1965166 +1965197 +1965763 +1965777 +1965795 +1965810 +1965825 +1965841 +1965913 +1966017 +5144431 +5144438 +5144472 +9919915 +9370070 +5144499 +1966286 +1966302 +1966310 +5734448 +10670854 +1966362 +1966367 +5144534 +1967003 +1967006 +1967011 +1967039 +5144543 +1967245 +1967265 +1967273 +1967445 +1967590 +1967595 +1967597 +1967672 +1967688 +7346240 +1967815 +1967873 +1968147 +1968182 +1968193 +7681733 +1968304 +1968363 +1968730 +1968746 +1968837 +1968867 +1968951 +11598540 +1968990 +1969357 +1969463 +1969491 +1969581 +6133643 +1969621 +1970034 +1970136 +1970213 +1970284 +1970322 +1970436 +5734405 +6133513 +7346252 +5144677 +5144721 +5144782 +5144787 +5144805 +5144806 +5144864 +5144880 +5144900 +5144936 +5145009 +5145075 +5145136 +5145186 +5145255 +5145260 +5145269 +5145396 +5145409 +5145495 +5145502 +5145522 +5145560 +5145624 +5145729 +5145735 +8014296 +9194811 +1971847 +1971858 +1971888 +6133516 +1972094 +1972185 +1972187 +1972234 +1972250 +5145870 +5145965 +5146038 +5146062 +7541913 +1972443 +1972613 +1972614 +1972616 +1972620 +1972631 +10732353 +1972754 +5146282 +1973242 +1973338 +1973358 +1973393 +1973397 +1973414 +5146434 +5146476 +5146483 +5146496 +5146508 +5146559 +5146566 +5146567 +5146599 +5146601 +5146608 +5146611 +5146659 +5146677 +5146746 +5146752 +5146762 +5146763 +5146833 +5146837 +5146883 +5146894 +5146946 +5146961 +5147030 +5147039 +5147043 +5147058 +5147062 +5147150 +5147171 +5147208 +5147214 +5147232 +5147245 +5147306 +5147354 +5147415 +5147441 +5147478 +5147492 +5147498 +5147516 +8366158 +1975164 +1975198 +6133559 +9875420 +5147608 +5147638 +11856219 +1975546 +1975553 +1975571 +1975583 +1975597 +1975711 +1975733 +8329661 +1975793 +8160782 +1975805 +1975806 +10835542 +1975892 +1975897 +1975903 +1975964 +1975979 +5734539 +9356491 +9410573 +9548993 +1976163 +1976212 +1976213 +1976224 +1976228 +1976311 +1976462 +1976463 +1976469 +1976470 +1976483 +5147681 +6097233 +7973517 +1976928 +1977003 +1977007 +1977068 +5147819 +5147827 +5147834 +1977182 +1977184 +1977297 +5734420 +6133548 +5147917 +5147968 +5148043 +5148055 +5148115 +5148214 +5769028 +1977813 +1977833 +1977863 +6133582 +1977962 +1977967 +1978010 +1978034 +1978045 +1978056 +1978065 +1978114 +1978375 +1978385 +1978398 +1978405 +1978407 +1978422 +1978424 +1978445 +5734388 +1978499 +1978524 +1978529 +4524636 +4524638 +5734519 +6133560 +5148252 +10738407 +1978789 +1978821 +5734396 +1978977 +1978996 +1978999 +6133546 +1979021 +5148286 +1979222 +1979229 +1979308 +1979473 +1979521 +1979561 +1979562 +1979758 +1979781 +1979787 +1979801 +1979806 +1979822 +1980269 +5148436 +5148487 +1980521 +1980532 +11449815 +1980694 +1980811 +1980827 +1980917 +8421569 +1981063 +6133585 +1981357 +1981457 +1981696 +11173690 +10592969 +7345811 +7345813 +1981937 +1981938 +1981998 +1982007 +1982203 +1982221 +1982267 +1982291 +1982406 +1982500 +1982529 +1982541 +1982636 +1982865 +1982885 +1983052 +1983393 +1983442 +1983525 +1983528 +1983648 +1983755 +1983922 +1983999 +1984033 +11121180 +5149012 +1984734 +5149081 +5149136 +5149174 +5149203 +1984942 +1984949 +1985061 +1985152 +1985158 +1985167 +1985181 +1985191 +1985192 +1985228 +1985230 +1985573 +1985707 +6133659 +1985926 +1985993 +1986009 +1986032 +1986052 +1986054 +1986056 +1986061 +5734345 +1986157 +1986166 +1986171 +1986191 +1986220 +1986452 +1986508 +1986522 +1986575 +1986623 +1986650 +1986779 +1986787 +1986936 +5149308 +5149315 +6133614 +1987203 +1987204 +5768880 +1987362 +1987377 +1987527 +9137631 +1987629 +1987665 +1987740 +1987744 +1987766 +1987767 +1987775 +1987776 +1987786 +1987787 +6133591 +4524221 +11650277 +6133534 +11190148 +1988002 +5734451 +1988225 +1988257 +1988306 +1988420 +1988487 +1988593 +1988642 +8388883 +5149414 +5149438 +5734528 +6133644 +1989355 +1989393 +1989428 +1989942 +1990043 +1990050 +1990066 +1990088 +1990105 +1990150 +5734390 +1990551 +1990582 +5149474 +1991123 +1991179 +6133501 +5149609 +1991277 +1991310 +1991371 +1991378 +1991394 +1991779 +1991783 +5149836 +5149843 +10155932 +11098546 +11869776 +1991945 +5734515 +11635419 +1992066 +5149929 +5149986 +6133619 +5734398 +5880533 +5880539 +5880545 +5880550 +5880552 +5880559 +5880563 +8237343 +8632989 +7429212 +9442902 +9414984 +1989594 +4524740 +7990739 +4523560 +4524054 +4523461 +4524998 +4525034 +4524376 +4524822 +11828714 +4524712 +10422582 +10574156 +10632124 +4523522 +5880392 +6133595 +6133596 +6133597 +4523519 +4524070 +4524072 +4524955 +4524962 +10530208 +11555221 +4525078 +6133667 +6133670 +6133673 +6133674 +6133675 +7346249 +9220953 +9249651 +6133637 +6133620 +6133519 +11780161 +6133604 +6133607 +10629052 +7346237 +6133520 +6133562 +10864093 +5734379 +11548960 +7345819 +6133523 +6133525 +6133528 +6133542 +6133497 +6133498 +10477629 +6133575 +9962269 +6133517 +6133586 +6133635 +10175639 +9617411 +9932090 +7346256 +7345829 +11652557 +5734535 +7345801 +5734362 +11477039 +5880478 +6133540 +10755716 +5144190 +5146412 +5734482 +5149499 +5149659 +5149665 +5149704 +5149746 +5149768 +5149787 +5734422 +7443518 +5146303 +5146335 +5146342 +5146379 +1991462 +1991466 +4302268 +4524393 +1942522 +1942060 +1942067 +1942244 +1942251 +5141643 +10773498 +1942378 +1942383 +1942618 +1942621 +1942636 +1942697 +1942715 +1942769 +1942808 +1942836 +4689929 +5141677 +1942878 +1943212 +1943223 +1943236 +1943308 +1943397 +8178854 +8277078 +5141795 +1943505 +1943519 +1943619 +1943625 +1943757 +8073674 +8133678 +8273661 +1944462 +1944483 +1944503 +1944504 +1944521 +1944591 +1944778 +5141924 +1945066 +9050611 +1945088 +1945122 +1945137 +1945143 +1945173 +1945225 +1945227 +1945270 +1945274 +1945286 +1945569 +1945589 +1945605 +1945694 +1945710 +1945715 +1945738 +1945742 +1945748 +1945814 +1945837 +1945856 +1945863 +1945874 +1945877 +1945878 +5142001 +1946019 +1946051 +1946058 +1946067 +1946145 +5142067 +1946432 +1946486 +7346354 +1946695 +1946731 +1946737 +1946738 +7389824 +1946916 +1946917 +1947117 +1947306 +1947335 +1947385 +1947409 +1947446 +1947449 +1947456 +1947491 +1947492 +1947496 +1947626 +1947661 +1947673 +1947703 +1947727 +1947740 +1947745 +1947753 +1947765 +1947775 +5734665 +1947805 +1947846 +1948061 +1948062 +1948073 +1948088 +5142213 +1948464 +1948465 +1948941 +1949008 +1949015 +1949336 +1949366 +1949404 +1949419 +7346351 +8828146 +9068968 +5142338 +5142352 +1949784 +1949794 +1949850 +1949877 +1949929 +5142499 +5142599 +8109173 +1950013 +7346356 +1950156 +1950169 +1950171 +1950302 +1950362 +1950521 +1950533 +1950879 +1950936 +1951157 +5977247 +5977257 +8270406 +7633472 +5142725 +5142729 +5142730 +4535396 +5142006 +5142032 +5142042 +1869512 +1952878 +1952883 +1952909 +10744228 +1800191 +5109821 +1758613 +9355953 +1758874 +1758878 +1759055 +1759069 +1759079 +1759083 +4533952 +7972792 +1759153 +1759177 +1759620 +1759667 +1759686 +5108636 +10329023 +1760104 +7444489 +1760593 +1760620 +1794361 +4534225 +1760857 +1760891 +4533255 +1760939 +1760943 +1761041 +1761438 +1761735 +1761778 +1762244 +6132749 +1762608 +1762657 +6132957 +1762680 +5109506 +5109523 +5109554 +5109599 +5109614 +5109646 +5109661 +5109670 +5109722 +1763610 +1763727 +1763741 +1764174 +1764553 +1764791 +1765010 +1765011 +1765017 +1765038 +1765044 +4534245 +4534252 +5109830 +5109843 +5109848 +5109855 +5109872 +5109882 +5109898 +5109931 +5109943 +8352161 +1765508 +1765658 +1765767 +1765954 +1766130 +1766131 +1766137 +1766210 +1766410 +7895336 +1766646 +1766741 +1766910 +11034779 +1767134 +1767368 +1767393 +1767511 +1767597 +1767625 +10575632 +1767655 +1767674 +5110120 +5734744 +5772169 +5772171 +5772172 +5772176 +5772178 +5772186 +5772196 +5772199 +5772202 +5772206 +5772210 +5802396 +5883914 +5883925 +6132943 +7345742 +7388922 +8045644 +1768117 +5110200 +1768341 +5110213 +1768568 +1768698 +1768702 +1768771 +1768815 +1768819 +5110256 +5110258 +1769057 +1769095 +1769194 +1769209 +1769505 +1769519 +1769566 +1769958 +1769978 +1770150 +1770172 +1770353 +1770477 +1770530 +4532696 +8393221 +1771385 +7725644 +1771509 +1771531 +1771555 +1772013 +1772094 +6133806 +1772169 +1772179 +5772129 +1772977 +1773163 +8222049 +1774272 +1774347 +1774470 +1774797 +4301304 +6115946 +4534046 +4534052 +4534057 +5772269 +4534719 +1775962 +1775963 +1776067 +1776330 +1776371 +1776619 +1776862 +6132861 +4534463 +1777253 +5110818 +5110871 +5110885 +1778074 +4534299 +1778109 +1778143 +5111481 +5111501 +5111535 +5111574 +5772222 +1779258 +1779435 +1779633 +1779641 +1779690 +1780378 +4533325 +1781233 +1781234 +5111974 +5111980 +1781803 +1781841 +1782168 +1782177 +1782341 +1782354 +1782457 +11763567 +1782543 +1782560 +1782579 +1782615 +1782627 +1782672 +1782726 +1782757 +1782763 +1782777 +1782803 +1782841 +1782872 +1782927 +1782948 +1783043 +6133026 +5112283 +5112291 +5714973 +5715004 +5734845 +5772349 +5772351 +1783855 +1783861 +1783971 +1784349 +1784359 +1784513 +1784761 +1784853 +4534290 +1785145 +1785162 +1785181 +1785185 +1785286 +4532886 +4532888 +4532890 +1785314 +1785322 +1785329 +1785361 +1785367 +1785883 +1785887 +1785888 +1785895 +1786007 +1786017 +8292872 +1786360 +1786448 +1786452 +1786515 +1786573 +1786619 +1786664 +1786902 +1787064 +1787112 +1787213 +1787267 +1787279 +1787367 +1787373 +1787381 +4687681 +9268082 +1787400 +1787504 +1787506 +1787590 +1787610 +1787631 +1787751 +1787770 +1787825 +1787841 +4534086 +1788522 +4534011 +1788846 +1788856 +1788917 +1789071 +1789076 +1789086 +4533924 +1789553 +4534166 +1789695 +1789730 +1789745 +1789753 +1789755 +1789957 +1790002 +1790072 +1790084 +1790153 +4533115 +1790361 +1790364 +1790376 +9174377 +1790625 +1791384 +1791422 +1791660 +1791784 +1792061 +1792292 +1792300 +1792335 +1792377 +1792411 +1792414 +1792418 +1792426 +1792431 +1792449 +1792475 +10684776 +1792768 +5113370 +1792996 +1793238 +1793243 +1793246 +7918000 +1793689 +1793877 +1793986 +1795065 +1795068 +4532908 +6133011 +1795215 +7869346 +7922810 +1795597 +1795854 +1795900 +1795957 +1796007 +1796117 +1796145 +1796169 +1796217 +4532700 +4688166 +4688169 +4688172 +1796423 +1796451 +1796463 +8105817 +1796678 +1797030 +1797735 +1798060 +4533431 +4533433 +4533444 +6133001 +6133002 +6133006 +6133007 +6133010 +1798090 +1798372 +11992983 +1798916 +1798922 +1798931 +1798971 +1798974 +1799135 +5113951 +1799695 +1799701 +1800004 +1800032 +1800149 +9536457 +6097260 +8742426 +4534389 +4534207 +10638451 +4532811 +4533273 +8890502 +4533202 +4534398 +6544687 +4534538 +4532269 +4533123 +4533125 +4534408 +4534533 +6132989 +6132762 +6133075 +5883985 +6132781 +8021109 +11478679 +10121804 +11311045 +5110644 +7654770 +6116899 +6132797 +1779334 +5114198 +1763072 +5109385 +5772063 +9038042 +8491927 +4534675 +4534681 +4534683 +4534685 +4534686 +1792555 +8108800 +1771634 +1771650 +1771675 +1771678 +1771698 +1770772 +1770821 +1770880 +1771040 +1771214 +1771245 +4533714 +6132931 +7940536 +1765751 +10841562 +5113847 +5113853 +5772309 +5108660 +5108671 +5108705 +5108724 +5108737 +5108752 +5108761 +5108787 +5108794 +5108796 +5734817 +6132880 +9243764 +1773904 +1759394 +1789512 +1789530 +4533360 +10933525 +5110282 +11566649 +11615549 +11731155 +4532203 +4532206 +4532208 +4532239 +4532253 +4532260 +4532266 +6115772 +6115820 +6115822 +6115830 +1782249 +1782273 +1782279 +1782289 +10063383 +1767293 +8363507 +9325654 +10458175 +10683012 +10702885 +1822487 +1822490 +1822493 +1822587 +1822610 +1822613 +1822787 +1822796 +1822819 +1822830 +1822848 +1822852 +1823294 +1823444 +6133742 +1823573 +5118565 +7346263 +6133720 +1823706 +10996761 +1823726 +5118582 +1824113 +1824117 +1824242 +5734235 +6133692 +7875265 +1824330 +1824338 +1824354 +1824390 +1824666 +1824751 +1824766 +1824845 +1824997 +1825064 +5118859 +1825077 +1825082 +1825083 +4534909 +4534914 +1825156 +1825176 +1825336 +7346284 +5118904 +7624468 +1825539 +5118974 +5118978 +1825786 +7345777 +1825920 +1825956 +1825967 +1825971 +1825983 +1826022 +1826033 +1826108 +1826129 +11322712 +5118996 +5119000 +6133700 +10510959 +11059353 +6133750 +1827125 +1827349 +1827408 +1827414 +1827484 +4534869 +6133691 +9883140 +5119181 +5119211 +5119223 +5119239 +5119245 +1827649 +1827650 +1827687 +1827711 +11435704 +1828162 +1828180 +4534872 +6201790 +7346286 +6133680 +6133681 +6133684 +6133687 +6133688 +7346276 +9921001 +5118837 +5118841 +7346271 +7346273 +9486293 +1822502 +1892554 +1892555 +5127748 +5806166 +11464595 +1892821 +5127835 +5127867 +5127893 +5127916 +5127932 +5127955 +5127971 +5127992 +5127998 +7346346 +9963153 +1893137 +1893177 +1893204 +1893241 +1893266 +5792081 +5128034 +1893329 +1893341 +10055104 +10477747 +12106975 +1893526 +1893538 +1893546 +1893551 +1893558 +1893612 +1893645 +1893660 +1893663 +1893787 +1893793 +1893921 +1893923 +1893951 +4704279 +8832485 +8982591 +9136904 +10333787 +1893989 +1893993 +1893998 +1894002 +1894012 +1894057 +1894060 +1894164 +1894268 +5882039 +5128161 +5128169 +5128182 +7712938 +10398658 +1894714 +4535614 +4535630 +4535632 +4535636 +8049830 +10639484 +1894840 +4535827 +1895037 +4535809 +4535817 +1895159 +5128323 +5128326 +5128353 +5128357 +9804158 +1895448 +1895499 +1895527 +1895609 +1895667 +1895670 +1895867 +1895875 +1895956 +1895984 +1895992 +1896061 +1896063 +1896073 +1896105 +1896141 +1896142 +1896152 +1896304 +5128519 +1896841 +1896915 +1896922 +1897664 +1897677 +1897685 +1897692 +1897722 +1897747 +1897770 +5129266 +1897808 +1897814 +1897817 +1897834 +1897873 +10383968 +1898234 +1898250 +1898286 +4299368 +5129293 +7346344 +1898434 +1898441 +1898521 +1898544 +5129378 +5129417 +1898946 +1898958 +1898970 +1898988 +1899071 +1899187 +1900093 +1900890 +1900897 +1900939 +1901213 +5130277 +1901372 +1901399 +1901404 +1901411 +1901427 +1901428 +1901429 +1901435 +1901463 +1901832 +1901850 +5130369 +5130392 +5130439 +5130444 +5130456 +5130464 +5130471 +5130476 +5130521 +5130542 +1902533 +1902543 +1902560 +1902568 +1902572 +1902586 +1902749 +8140883 +8189761 +4535689 +10394962 +10577473 +5130748 +5130775 +5130813 +5130814 +5130851 +5130904 +5130908 +5130944 +5130971 +5131058 +9968404 +9999965 +1904272 +1904281 +1904282 +1904283 +1904701 +1904719 +1904728 +1904760 +1904764 +1904798 +1904884 +1904887 +1904888 +1904916 +1904921 +1904922 +1904932 +1904938 +1904943 +1904948 +1904996 +1905079 +1905142 +6221746 +1905383 +1905396 +1906552 +8208583 +1907430 +1907432 +1907436 +1907475 +1907498 +1907511 +1907534 +1907541 +1907547 +1907576 +1907580 +1907620 +1907625 +1907637 +1907666 +1907672 +1907687 +4535754 +5881946 +7976131 +1908352 +1908367 +1908660 +1908700 +1908702 +1908707 +1908713 +1908775 +5133051 +11608942 +1908818 +1908840 +1908863 +1908871 +1908897 +1908929 +1908953 +1908962 +1909123 +1909216 +7346301 +8978362 +1909281 +1909319 +10656625 +1909398 +1909607 +1909649 +1909659 +1909810 +1909818 +1909838 +1909854 +1909865 +1909879 +1909884 +1910371 +1910706 +1910753 +6133858 +1910809 +1910812 +1911093 +1911112 +1911168 +1911198 +1911278 +1911298 +1911300 +1911461 +1911503 +7728366 +5133687 +5133689 +1911633 +4535592 +4535596 +1911736 +1911755 +7809779 +8078362 +5133693 +5133695 +1912325 +1912372 +1912395 +1912428 +1912470 +4299535 +4299565 +4299576 +4299597 +4299599 +5133920 +5133990 +5772890 +7428726 +10097687 +10137350 +4535581 +5134098 +5134301 +8312017 +1913091 +1913105 +1913175 +1913178 +1913328 +5134469 +5134517 +5134559 +5134661 +5134667 +5134682 +5134693 +5134810 +5135026 +5135191 +5135355 +5714507 +7738295 +8233062 +8314088 +9915028 +9967126 +1915031 +1915079 +1915080 +1915110 +1915140 +1915144 +1915154 +1915160 +1915262 +1915270 +1915275 +1915325 +1915332 +8669164 +11372793 +11516142 +11535847 +5135643 +5136306 +1916376 +1916410 +1916412 +1916509 +7854318 +1916758 +5136514 +5136594 +5136681 +5136713 +5136752 +5136790 +5136866 +5136868 +5136939 +5137022 +5137085 +5137086 +5137156 +5137166 +5137291 +5137330 +5137388 +1918026 +1918321 +1918394 +1918406 +1918408 +1918411 +1918416 +1918467 +1918495 +1918497 +1918509 +1918517 +1918532 +1918533 +1918547 +1918553 +1918554 +1918627 +1918667 +1918669 +1918736 +1918776 +1918843 +1918854 +8035998 +11645316 +4535618 +4535620 +4535510 +10595994 +10000384 +10043827 +11419137 +11760688 +11840957 +4704316 +5130587 +5130682 +7762841 +10376507 +5131096 +5131142 +5131192 +5131256 +5131293 +5131339 +5131372 +5131407 +5131443 +5131467 +5131493 +5131495 +5131520 +5131555 +5131565 +5131585 +5131593 +10228568 +10277877 +10508423 +11425145 +5132154 +5132183 +5132191 +5132238 +5132479 +7346328 +7346335 +8001799 +5806167 +5881397 +6100725 +6100726 +7642610 +5135513 +5135546 +11525418 +1896957 +5128569 +5128587 +5128644 +5128663 +5129000 +5129025 +5129091 +9087922 +10201273 +5131910 +5881551 +8138711 +8549720 +1910576 +1910628 +1910629 +1910648 +1910662 +1902143 +1902182 +1899349 +1899433 +1899818 +5129913 +7768674 +7934873 +8168644 +8393082 +1914701 +1914708 +1914734 +1914749 +7346340 +1918584 +1951370 +1951412 +1951462 +1951505 +1951507 +1951522 +1951529 +1951542 +1951557 +5142870 +1951631 +9512631 +1951649 +1951671 +1951675 +1951747 +9156165 +1951791 +5734305 +1951818 +1951840 +1951844 +1951859 +1951874 +1951881 +5734326 +1951919 +1952014 +1952034 +1952052 +1952062 +1952147 +1952175 +1952177 +1952229 +5142948 +1952281 +5143007 +5143048 +5143049 +5143076 +5143080 +1952449 +1952481 +1952532 +10782264 +1952551 +1952611 +1952685 +1952704 +5143116 +5143129 +5143147 +1952816 +1952857 +9502606 +5885428 +8604089 +6097228 +1868211 +1868409 +4702564 +1868499 +6544581 +1868470 +5141581 +5141590 +1735121 +1941864 +5121613 +1842097 +1842485 +4301036 +1842695 +9755262 +1843564 +1843602 +1730519 +1730543 +8292351 +5101394 +1730948 +1730978 +1731263 +4525641 +1731598 +10450446 +8008237 +8130866 +8402212 +1872359 +1872361 +1872368 +1878626 +6133117 +1878744 +1878782 +1878862 +1878879 +1878895 +1878904 +1878939 +1879001 +1879125 +1879141 +1879227 +1879337 +1879339 +1879340 +1879379 +5734212 +1879408 +1879452 +1879471 +1879490 +5126212 +5126217 +1879630 +1879691 +1879731 +1879735 +1879765 +10915497 +1879970 +1880062 +1880064 +1880138 +1880140 +1880143 +5126635 +5126637 +1880353 +1880451 +1880464 +1880465 +9524458 +6133225 +1880852 +1880858 +1880907 +1880931 +1880968 +1881089 +1881121 +1881126 +1881151 +1881170 +9819403 +4531687 +1881293 +1881320 +1881329 +1881336 +1881340 +1881362 +1881515 +4531713 +1881834 +1881964 +1882021 +1882210 +1882253 +1882266 +1882272 +1882310 +5126834 +1882753 +1882767 +1882771 +1882884 +1882901 +1882905 +10156181 +1882930 +1882941 +1882960 +1882965 +1883067 +1883161 +1883386 +1883394 +5127097 +1883873 +1883943 +1883951 +1884051 +1884061 +4531690 +1884212 +4531708 +1884228 +1884229 +9294363 +1884434 +1884437 +1884449 +1884461 +1884465 +1884479 +1884671 +6120980 +1884774 +1884816 +1884835 +1884844 +1884858 +1884877 +1884890 +4532122 +1884908 +1884909 +4532146 +1884970 +1885012 +1885262 +1885263 +1885569 +1885623 +1885630 +6133181 +1885745 +1885763 +1885826 +1885836 +1885919 +1885937 +1885945 +1885994 +1886015 +1886084 +1886088 +1886241 +1886251 +1886320 +1886362 +8223165 +1886526 +1886587 +1886700 +1886720 +1886726 +1886729 +7562564 +1886929 +1887054 +1887290 +1887509 +1887586 +4531670 +1887691 +1887701 +1888027 +1888040 +1888092 +4531968 +1888324 +1888346 +10922411 +1888484 +1888537 +1888579 +1888619 +1888733 +1888743 +1888759 +1888891 +1888893 +1888906 +1888911 +1888913 +9535420 +1889039 +1889043 +1889053 +1889071 +1889074 +1889239 +1889249 +1889270 +1889272 +1889277 +1889287 +1889356 +1889358 +1889370 +1889531 +1889552 +1889563 +1889942 +1890012 +1890031 +5127521 +1890097 +1890187 +9519191 +1890287 +1890320 +1890335 +1890343 +7543006 +10180624 +1890410 +1890487 +1890512 +1890522 +1890534 +1890576 +1890656 +1890670 +1890699 +1890724 +1890772 +1890776 +1890898 +1891059 +1891129 +1891167 +1891177 +1891190 +1891217 +1891326 +1891339 +1891366 +1891386 +1891426 +1891473 +1891493 +1891494 +4532022 +4532024 +1891533 +1891583 +1891636 +1891758 +1891889 +1891936 +1892153 +1892242 +1892245 +1892476 +10141437 +11056379 +9674732 +1884255 +1884370 +1884403 +5884851 +6133139 +6133140 +6133141 +5771877 +10227418 +4532125 +9967529 +10145421 +6120803 +6133232 +6121010 +10513366 +10502505 +10397209 +6133154 +10959264 +6133158 +10375403 +5126675 +5126680 +7446048 +8532380 +8537359 +8823068 +8858121 +9100030 +9137965 +1886374 +1889716 +1889765 +1889833 +5127592 +5127609 +5127629 +5127644 +5127656 +5127669 +5127675 +5127683 +5127688 +5127698 +5802339 +1887108 +4532050 +4532088 +4532095 +6121184 +1888638 +1888639 +1883885 +4532150 +4532160 +5771880 +10410699 +1846111 +1846133 +1939597 +1830879 +1831009 +1831136 +4708183 +1854202 +5122430 +5122439 +1854615 +1854824 +1854849 +4526050 +1858637 +1858674 +1858698 +1858775 +1858930 +1859046 +1859177 +1859305 +1859453 +9749806 +6133397 +1859932 +1860026 +4536472 +4536483 +1973467 +5123180 +5123221 +1864897 +1865593 +10014340 +1865650 +1865659 +1865660 +1865666 +1865671 +9914882 +9972403 +1865930 +1866237 +5734291 +1866356 +6106943 +1866491 +1866530 +1866549 +1866556 +1866568 +1866573 +9906979 +5124880 +5124911 +10047346 +1867820 +1867928 +8439879 +9983244 +1867991 +1867993 +11643393 +11670751 +11729388 +5124673 +5124716 +5120278 +1841813 +1841946 +10019169 +10005133 +1861451 +1861456 +1861457 +1861488 +1861494 +1861510 +1861644 +1861663 +1861665 +1861673 +1861697 +1861705 +1861714 +1861721 +1861797 +1861842 +1861862 +5123674 +1861933 +1861936 +1861937 +1861938 +1861949 +1861951 +6106744 +1861975 +1862008 +1862026 +1862061 +1862066 +1862072 +5123676 +5123685 +1862293 +1862363 +1862370 +1862394 +1862401 +1862403 +1862414 +9836014 +10374414 +11907754 +1862430 +1862434 +1862449 +1862454 +1862468 +1862475 +1862481 +1862516 +1862517 +1862521 +1862526 +6106708 +5123707 +5123709 +1862572 +1862578 +1862580 +1862692 +1862719 +1862765 +1862774 +1862837 +1863034 +5123922 +5734719 +1863354 +1863388 +1863394 +1863467 +1863646 +5124007 +5124029 +9310369 +1863829 +1863848 +1863880 +1863907 +1863909 +1863910 +1863924 +1863944 +9578319 +1864126 +1864135 +1864161 +8133328 +1864358 +1864377 +5124121 +5124143 +5124233 +11738734 +11954157 +1864652 +5124300 +5124304 +5124305 +5124332 +5124348 +5124374 +5124415 +5124433 +1864793 +1864796 +5734713 +5885399 +6099041 +6106759 +7346401 +10193618 +6106647 +5123815 +5123824 +5123837 +5123852 +5123870 +5123876 +5123884 +5123889 +5123890 +8810912 +10189661 +10191275 +10436020 +1992634 +1992883 +10842838 +10994020 +1993036 +1993043 +1993419 +1993496 +6133769 +1993637 +1953192 +1953196 +1953217 +1953326 +1953356 +6132711 +6132712 +6132715 +1953407 +1953423 +1953729 +11467944 +6132725 +6132726 +6132723 +6132729 +1954037 +5143241 +5143249 +5143266 +1954120 +6132728 +1830099 +1830380 +1830407 +1754135 +1754263 +5105642 +1754332 +1754368 +1754380 +1754400 +1754465 +1754511 +1754516 +1754535 +11737872 +12075408 +11175615 +1754902 +1754919 +1754933 +1755131 +5734138 +1755237 +1755248 +1755253 +1755276 +5106115 +5106160 +5106249 +5107076 +5107219 +5107644 +7410701 +7674502 +7778368 +7903078 +7955974 +8201251 +8426357 +1757652 +5108318 +5108334 +5108335 +11140464 +11860016 +1757853 +5108346 +5108349 +4522753 +9004359 +1939688 +1829322 +1855630 +1855747 +8734090 +1856105 +1856289 +5122798 +1856384 +1856620 +1856668 +1856768 +1856867 +1856971 +1857258 +1857267 +1857380 +1857581 +1857626 +1857828 +1857829 +1857924 +1857938 +1857978 +1858163 +1858283 +8178453 +1858557 +1937665 +1937699 +1937707 +1937712 +1937723 +1937754 +1937769 +1937792 +1937819 +1937826 +1937847 +1937856 +1937892 +1937911 +1937931 +1937937 +1937966 +1937975 +1937988 +1938007 +1938029 +1938052 +1938058 +1938069 +1938074 +1938088 +1938114 +1938122 +1938125 +1938129 +1938131 +1938147 +1938156 +1938162 +1938168 +1938174 +4692485 +4692504 +4693382 +5734569 +8225376 +9017206 +1936969 +1936988 +1936993 +1937011 +1937037 +1937055 +5141144 +5141154 +5141163 +5141172 +5141177 +5141179 +5141185 +5141187 +5141188 +5141195 +5141197 +5141198 +5141199 +5141202 +5141207 +5141212 +5141215 +5141226 +5141229 +5141230 +5141233 +5141236 +5141242 +5141252 +5141254 +1937444 +1937490 +1937514 +1937530 +10761559 +1937556 +1937566 +1937570 +1937580 +1937582 +1937594 +1937613 +1938214 +1938226 +1938230 +1938233 +1938300 +1938520 +1938612 +1938796 +1938810 +1938955 +1939056 +1939086 +1939156 +1939168 +1939180 +1939215 +1939225 +5141311 +5141317 +5141262 +5141291 +5141305 +8546322 +8574752 +1835031 +5770913 +1835098 +1837172 +1839560 +1841159 +5770922 +5770942 +4529032 +12188993 +1800238 +10213314 +1800441 +6133777 +1800528 +1800539 +10737993 +1800562 +1800572 +1800686 +1800691 +1800696 +1800821 +5114394 +5114400 +5114409 +11873966 +4534796 +4534798 +9544823 +1800881 +5114425 +1800934 +6133780 +1801000 +1801001 +1801051 +1801073 +1801080 +1801084 +1801170 +1801196 +5114465 +1801461 +1801490 +1801503 +1801519 +10066605 +10510325 +4534773 +4534776 +4534778 +4534779 +4534782 +6112606 +6112613 +6112661 +6133809 +6133811 +6133813 +6133814 +9894093 +1801993 +1802090 +8883183 +1802113 +1802120 +1802229 +1802244 +1802280 +1802337 +1802702 +1802783 +1802827 +1802833 +1802919 +1802939 +1803022 +1803035 +1803039 +1803060 +1803065 +1803073 +1803078 +1803108 +10942408 +4534767 +4534769 +6133803 +5114303 +5114311 +8244266 +10987178 diff --git a/dev/releases/mambo_v3/presets/australia.classes b/dev/releases/mambo_v3/presets/australia.classes new file mode 100644 index 0000000..0488b21 --- /dev/null +++ b/dev/releases/mambo_v3/presets/australia.classes @@ -0,0 +1,1874 @@ +1992268 +1992283 +1992301 +1992315 +10648791 +1758114 +1758146 +10083877 +9840570 +9960252 +10190647 +10341307 +10435406 +1732978 +1733504 +1733507 +1733511 +1733535 +10155026 +1734851 +10730270 +1831974 +1831999 +1832023 +1832518 +1832533 +1832553 +1832569 +1832649 +1845271 +1845503 +1845586 +1846858 +1847066 +1847111 +1847622 +1847639 +8797017 +5122013 +1850156 +1850633 +1850764 +1850798 +1851039 +1851543 +1852292 +10023115 +10498365 +11706893 +1850463 +9977181 +1829703 +1829866 +1828424 +1828455 +1828456 +6196939 +1828471 +1828491 +1828540 +1828543 +1828544 +10707366 +10833593 +10882997 +5119346 +5119349 +5119350 +5119353 +5119354 +5119361 +10288636 +10639943 +4695709 +1828976 +1837706 +1834428 +4684910 +4686897 +4686905 +4686907 +4686913 +1835848 +1835862 +1835874 +1835886 +1835897 +1835908 +1835928 +1838084 +1838978 +4685802 +1839600 +1839604 +4685468 +4684220 +4685557 +4685946 +1830812 +1830814 +1831458 +1831499 +1831508 +1831655 +5119868 +1839396 +10042504 +10094594 +10379915 +10531480 +10548275 +11919216 +9851221 +9985020 +6132868 +1761572 +1761573 +1761751 +1761752 +1761820 +5109196 +1762849 +1762852 +10256550 +1762887 +1763957 +1763976 +1763994 +1764060 +5109782 +5109784 +5109786 +5109787 +5109788 +1764886 +1765653 +10099906 +10647358 +1766558 +1766560 +1767215 +10340332 +1772543 +5110490 +1774069 +5110546 +1777165 +1777166 +5110837 +11457930 +11609422 +4687991 +5110981 +10403441 +9610080 +1779671 +1780716 +1780856 +1780860 +1780862 +10154280 +1782185 +1782326 +1782328 +1783173 +1783991 +10157400 +5112407 +5112410 +1784646 +1786317 +5112500 +1786958 +1786990 +1787003 +1787010 +5112531 +1788553 +6132936 +7346446 +9494526 +1788881 +6132826 +1788986 +1789225 +10090168 +1789794 +1790450 +10598407 +1790900 +1790910 +9967251 +9983957 +5112940 +1791379 +1791514 +1791715 +9504222 +9860902 +10267570 +1795657 +10573746 +1796984 +10108671 +1797039 +6132979 +1798014 +1798018 +1798023 +1798025 +1798101 +5113950 +5884247 +11636323 +9440183 +9635978 +9923283 +10657151 +1798511 +10096855 +1787090 +1798529 +1798687 +1798768 +1798868 +4532352 +6115437 +8793873 +1799165 +1799167 +1799743 +1799757 +1803148 +1803197 +11909090 +1803781 +1803788 +1804246 +1804429 +1804430 +1804610 +10053130 +1804721 +1804727 +1804742 +10156470 +1805043 +1805505 +1805524 +1805806 +1806704 +1807473 +1807477 +1807478 +1807479 +1807480 +1807483 +1807485 +1807488 +1807490 +1807491 +1807503 +11900897 +1808232 +6198302 +12214821 +1809244 +1809248 +1809381 +10010700 +1810752 +1810851 +5116397 +1812437 +1812453 +1812465 +1812658 +1814913 +10074808 +1815338 +1816029 +1816110 +1816434 +1817065 +11703980 +1817160 +1817171 +1817217 +1817810 +1818413 +5118171 +10556853 +5118291 +1819970 +1820383 +1820401 +1820435 +10274769 +1821448 +10503495 +10106475 +9956017 +10270464 +9473918 +9559336 +12180031 +12203022 +12216332 +9852545 +10496181 +10629533 +10004820 +10248689 +10454874 +10443878 +10637588 +10643533 +10166724 +10480609 +8363709 +10178326 +10469564 +9621271 +5116504 +1818216 +9336001 +1781413 +1781428 +1781598 +1763761 +6115388 +1816634 +1816648 +1816673 +1774598 +1774604 +1774654 +1774691 +1774712 +1768630 +5111643 +1766892 +10164453 +1768190 +9400916 +1768462 +9989156 +5113001 +5109796 +1821464 +1821468 +1821542 +1822003 +1804120 +1804148 +6116076 +1782507 +1783715 +9918092 +4687933 +4687934 +4687935 +1820137 +1799821 +1781531 +1798331 +1798335 +1784936 +1785072 +1765999 +1766007 +10330198 +10598038 +1786597 +4687389 +5884188 +9935660 +5110013 +10196956 +10392889 +1811455 +1811462 +1811465 +1796941 +1782310 +12266659 +5108421 +1771903 +10097776 +4301309 +5112440 +1795542 +1860849 +1992434 +1992489 +1731886 +1731890 +1731906 +1731923 +1731926 +1731927 +1731980 +1732001 +1732005 +1732031 +1732033 +1732044 +1732052 +10640865 +9950697 +1833779 +1833782 +1833794 +1834524 +1834547 +4685588 +4685595 +1834793 +1835086 +1835348 +1835814 +1837968 +1838058 +1838065 +1838071 +1839658 +1839721 +4684986 +1840346 +1831752 +1852832 +1852859 +1860259 +1860260 +5123339 +10361029 +10625116 +5123419 +5880040 +5880041 +10208422 +1853222 +10005632 +10433914 +11756119 +1869707 +1869714 +1870237 +1870450 +1870452 +1870459 +1870506 +1870509 +1870703 +1870988 +1871171 +1871333 +1872169 +9969513 +1872255 +1872470 +1872735 +1872812 +1872827 +1872850 +1872873 +1872901 +1873049 +1873079 +1873222 +1873285 +1873290 +1873291 +1873373 +1873620 +9858922 +1873773 +1873843 +5125591 +5125600 +5125602 +5125629 +1874146 +1875534 +1875554 +1875584 +1875844 +1876479 +1876542 +10356445 +1876876 +10442332 +1876922 +1876955 +1877406 +1877453 +5125943 +1877988 +1878173 +1878406 +1878470 +9835867 +1890056 +1890065 +10211808 +5884888 +10526954 +10065676 +10129011 +10279983 +11591775 +9857679 +10423263 +1748780 +1836906 +1940575 +1736623 +5102683 +1737015 +10146436 +10469532 +1737115 +1737131 +1737182 +1737187 +1737847 +1738045 +1738192 +1739051 +1739316 +1740586 +1740797 +1740828 +12259151 +1741074 +9826405 +1741084 +11906255 +10250474 +1741593 +1743319 +4707896 +4707900 +10073044 +1743680 +9867379 +1745019 +9586705 +1745957 +4707848 +6219423 +10021059 +10023049 +10080502 +10358334 +10476233 +1747639 +1747672 +1747914 +1747924 +10355898 +1748425 +1748442 +1748473 +1748486 +1748751 +10185271 +9952043 +10302660 +10530383 +9909775 +10606887 +10624577 +10153630 +10549715 +12057008 +10462612 +11688440 +5138967 +5138984 +1921010 +1921262 +1921263 +1921300 +5138069 +1922244 +1922745 +1923744 +1923782 +4708972 +4708973 +4708977 +1924362 +1924390 +1924558 +1924713 +1925555 +4708984 +1925628 +1925711 +5138732 +5138743 +5806391 +1926436 +1926448 +1926460 +1927274 +4709107 +1927707 +1927894 +1927895 +1927897 +1927900 +1928018 +4708927 +5139050 +1928382 +1928829 +4709030 +1928923 +1931189 +5139914 +1931889 +1931956 +1931958 +4709051 +1932159 +1932246 +4709095 +4708995 +1932563 +7346444 +1932908 +4709133 +5806412 +1933647 +5138929 +4709102 +4709147 +1752534 +1752536 +1752537 +1752539 +1752545 +1752547 +1752903 +1752946 +1752947 +1753461 +1753902 +1753906 +10368234 +9880359 +10203493 +9959898 +10560849 +10988070 +1919176 +1919340 +1919342 +1919344 +1919348 +1919381 +1919419 +1919421 +1919432 +1919444 +1919540 +1919626 +1919744 +5137828 +5137832 +5137833 +5137842 +5137849 +5137850 +5137854 +1920496 +1920534 +1920535 +1920538 +1920541 +5137929 +5137949 +1749124 +1749529 +1750131 +1750326 +5104822 +5104903 +5105081 +1750934 +1751024 +1828310 +1828317 +9882683 +9451208 +1758596 +1758602 +9943941 +10118678 +1962159 +1962162 +9875141 +1970460 +1970463 +1970473 +1970485 +1964995 +1964996 +10295646 +1954236 +1954522 +1954911 +10634980 +9213204 +10217455 +1955039 +1955093 +1955153 +1955199 +1955202 +1955318 +1955736 +1955737 +1955743 +1955745 +10560674 +11720357 +9593393 +10003902 +10048667 +10062202 +10075732 +10132475 +10177276 +10341059 +10363151 +10398979 +10434798 +10456933 +10457796 +10471477 +10528420 +10623003 +11451126 +11468089 +11638437 +1955899 +10078526 +10360329 +11690145 +1956384 +9234402 +10257899 +1956416 +1956955 +1956958 +1956963 +1956978 +1956983 +10167252 +1957058 +1957062 +1957333 +1957413 +1957523 +1958454 +1959341 +1959500 +1959595 +1959782 +1960106 +1960128 +1960201 +1960411 +5144115 +5144129 +1960521 +1960524 +1960940 +1960941 +1961180 +5144204 +1962829 +1962841 +1962842 +1962934 +1963297 +5144353 +1963782 +1964066 +1964305 +1964331 +1964565 +1964702 +10184940 +10523304 +1965643 +1965649 +1965650 +9952367 +9976926 +5144505 +1966977 +5144553 +1967703 +10174909 +10268303 +10379201 +1967716 +9833933 +1968115 +1968131 +5144633 +1969104 +1969568 +11858774 +1969581 +6133643 +1970093 +1970094 +1970108 +1970159 +1970265 +9939530 +10085335 +10109201 +10505033 +10054019 +5144806 +5144937 +5144942 +5144976 +5145079 +5145422 +5145495 +5145503 +1972407 +1972606 +9119710 +5146262 +11533770 +1972903 +5146294 +1973719 +5146426 +5146456 +5146472 +5146578 +5146719 +5146805 +5146880 +5146937 +5147046 +5147109 +5147121 +5147150 +5147160 +5147225 +5147522 +1975164 +1975212 +1975248 +1975249 +9975134 +10018221 +10572729 +9875420 +1975704 +1975722 +1976123 +1976142 +1976213 +1976243 +1976303 +1976341 +1976342 +1976345 +10118849 +9183738 +10089194 +1976890 +1976891 +1977350 +5147917 +5147923 +5147930 +5148066 +5148097 +5148214 +5148223 +10188228 +1978082 +10058263 +10626099 +10530515 +1978904 +1978915 +1978919 +1978937 +1979041 +1980035 +1980041 +1980044 +1980063 +1980491 +1980659 +10378314 +10571987 +1980821 +1980827 +10860751 +11660632 +1982024 +1982033 +1982043 +1982047 +1982055 +1982071 +1982072 +1982085 +1982100 +1982102 +1982103 +1982120 +1982148 +1982221 +12116722 +5149182 +10199372 +1984913 +1985167 +1985181 +1985228 +1985267 +1985490 +6133659 +1985809 +1985816 +1985826 +1985931 +1986223 +1986650 +1986693 +1986720 +1986774 +1986846 +1986942 +1987203 +1987747 +1987766 +1987775 +1987785 +6133591 +10533589 +5149369 +5149370 +5149371 +5149387 +9987116 +1988302 +1988354 +1988360 +1988361 +1988362 +1988370 +1988376 +1988382 +1988384 +1988820 +1988894 +1989170 +1989181 +1989282 +1989283 +1989377 +1989522 +1989538 +9906229 +1990164 +1990165 +1990167 +1990178 +11465014 +1990255 +1990256 +1990371 +1991394 +1991468 +10155932 +5149873 +5149880 +5149940 +5149941 +1992167 +5880539 +9577234 +10224300 +9830270 +11799357 +10864093 +4702878 +10078800 +8501203 +9629450 +6133635 +10175639 +9617411 +10438474 +10411202 +10146771 +10210935 +10263383 +1963532 +1942060 +1942067 +1942618 +1942621 +1942623 +1942636 +1942641 +5141650 +1942674 +1943089 +1943090 +1943096 +1943101 +4689912 +1943236 +1943250 +1944106 +1944113 +4689963 +1944456 +1944462 +1944520 +1944523 +1944618 +1944619 +1944627 +1944629 +1944631 +1944635 +1944638 +4689905 +1945122 +1945225 +1945715 +1945863 +1945893 +5142067 +1946720 +1946763 +1947446 +1947449 +1947459 +1947491 +1947492 +1950272 +1950591 +1951157 +1951170 +5142749 +1758839 +1758850 +1760172 +1760175 +1761788 +1761789 +1762657 +1762900 +1762902 +1764178 +1764553 +5109848 +5109870 +5109872 +5109882 +8352161 +1765508 +4687817 +4687827 +7800469 +1765898 +11034779 +1767368 +1767381 +1767430 +10575632 +10597823 +5883925 +9356770 +1768972 +1769095 +1769114 +1769209 +1769225 +1769245 +1769250 +1769260 +1769271 +1769272 +1769283 +1769293 +1769294 +1769298 +1769308 +1769310 +4688049 +4688075 +4688092 +4688098 +1771357 +1772668 +4687565 +1774797 +4301304 +6115946 +1774918 +10032003 +1775279 +1775631 +1777120 +5111064 +5111195 +5111214 +5111249 +5111535 +5111600 +1779269 +1779276 +1779382 +1780072 +5111967 +1782354 +1782466 +4687661 +1784513 +1784761 +1785145 +1785149 +1785166 +1785181 +1785217 +1785220 +1785314 +1785329 +1785725 +1787165 +1787185 +1787226 +4687681 +10161728 +1789637 +1789957 +4687906 +1791793 +1791837 +4687930 +1791862 +5113394 +1793661 +1795068 +1795110 +4688166 +4688169 +4688172 +1798084 +1802776 +4532269 +10659737 +10378302 +9890366 +9910243 +10967713 +11054256 +10121804 +5109270 +5109349 +5109418 +5109437 +4688142 +1792555 +1792560 +8108800 +1770849 +1771203 +1771245 +1771296 +1771308 +1765752 +5113853 +5108671 +5108724 +5108737 +5108787 +1759351 +1789530 +10370112 +11437060 +11615549 +4532266 +6115772 +6115820 +6115822 +6115830 +9893740 +1782277 +1781248 +1767259 +1792814 +9325654 +10458175 +10683012 +10658576 +1822257 +1822916 +1822917 +1823493 +5118798 +1824280 +1826020 +1825238 +1825950 +1825956 +1826017 +1826823 +1827429 +1827507 +11905965 +1827802 +1827810 +1827826 +1827829 +10194663 +10551923 +5806166 +1892821 +1893699 +1893787 +4704279 +5128224 +5128225 +1895448 +1895956 +5806175 +5806177 +4704400 +4704401 +4704404 +4704407 +1899931 +1899932 +1899940 +1899943 +1899947 +1899950 +1899956 +1900939 +1901669 +5130456 +5130464 +5130476 +1902233 +1902244 +1902248 +1904728 +1904798 +1904996 +1907683 +1909216 +1909436 +1909453 +1909457 +4704352 +4704356 +1910753 +1910809 +1911755 +1913091 +1915031 +1915144 +11535847 +5135839 +5136594 +5136713 +5136868 +5136939 +5137128 +5137257 +4704500 +4704501 +5131493 +5133088 +5806167 +6100725 +7642610 +1910629 +1910648 +1951492 +1951874 +10548683 +5102423 +1735273 +5102432 +1941683 +1941702 +1941713 +5121177 +1843313 +1843326 +1843331 +1843362 +1843370 +1843379 +5120341 +5120343 +5120357 +5120368 +5120379 +11854390 +9755262 +1843429 +1843485 +1843590 +1731097 +1731221 +11431507 +10535684 +11563728 +11904618 +5101502 +10049887 +10134558 +10307487 +5806352 +5806353 +10629470 +1878744 +1878826 +1879227 +1879339 +1879340 +1879405 +1879408 +1879465 +1879471 +12231152 +5126376 +10489219 +5126635 +5126637 +1880352 +1880353 +1880858 +1880982 +1880986 +1881018 +1881019 +1881031 +1881041 +1881089 +1881132 +1881157 +9819403 +1881228 +1881320 +1881329 +1881336 +1881340 +10046436 +10348110 +10441857 +1881424 +1881485 +1881504 +1881515 +10751438 +1882215 +1882266 +1882272 +1882355 +5126798 +5126843 +5126922 +5127020 +5127039 +5127044 +1882753 +1882767 +1882771 +1882773 +1882884 +1882905 +10156181 +10643403 +1882965 +10464411 +1883024 +1883028 +1883067 +4687288 +1883394 +5127097 +10069243 +1883775 +1883881 +1883943 +1883968 +1884228 +9294363 +10171108 +10209845 +1884434 +1884437 +1884449 +1884461 +1884479 +9837762 +1884531 +6120980 +1884816 +1884890 +1884909 +1885263 +1885569 +1885572 +1885605 +1885630 +6133182 +9957790 +1885702 +1885763 +1885836 +1885919 +1885945 +1886088 +1886251 +1886362 +1886526 +10610809 +1886720 +1886729 +10613467 +1887036 +1887052 +1887054 +1887462 +1887580 +1887585 +1887691 +1887894 +1888123 +1888537 +5127394 +1888906 +1888913 +1888926 +1889043 +1889050 +1889071 +1889074 +1889239 +1889242 +1889249 +1889272 +1889277 +1889356 +1889381 +1889552 +1889563 +1890031 +1890187 +10058481 +1890320 +1890335 +5127530 +10180624 +1890410 +1890670 +1891236 +1891299 +10071588 +1891308 +1891533 +1891583 +10072800 +1892458 +1892462 +10446295 +6133140 +5771877 +10117959 +10227418 +4532125 +9967529 +9900218 +10145421 +10348945 +10521368 +10579230 +10594210 +6120803 +6133232 +6121010 +10257673 +10556366 +6121218 +10502505 +10397209 +6133154 +10462708 +6133158 +10063575 +10375403 +1886374 +1889769 +1889875 +5127592 +5127595 +5127629 +5127638 +5127644 +5127669 +5127675 +5127698 +5802339 +1888638 +1888639 +1883885 +1831136 +4708183 +1731292 +5122307 +1853578 +10222583 +1853855 +1854019 +1854021 +10452421 +10546013 +11428453 +1854249 +5122430 +5122455 +5806333 +1858674 +1858718 +1858762 +1858930 +1858973 +1859061 +4536292 +9768621 +1859453 +9675743 +9749806 +6133397 +1859932 +1860026 +6097269 +9759340 +1864897 +1867788 +10883659 +1868025 +1861457 +1861458 +1861644 +5123663 +1861951 +1861953 +1861958 +1862026 +1862293 +1862331 +1862363 +1862370 +1862403 +9836014 +1862434 +1862441 +1862449 +1862455 +1862475 +1862516 +1862521 +1862526 +6106708 +1862757 +1863034 +1863051 +1863384 +9899724 +1863880 +1863955 +4703479 +5124080 +8133328 +11954157 +5124423 +5123852 +1992634 +9893936 +1992889 +1992907 +1992936 +1992938 +1993021 +1993045 +6133769 +10022517 +1953217 +10132811 +10644798 +11503857 +1954025 +5143279 +1954120 +1830419 +1830435 +1754619 +1754803 +1754806 +1754814 +4689394 +1830669 +8254441 +1855804 +1855807 +1855813 +1856005 +5122779 +1857020 +1857033 +1857097 +1857143 +1857180 +1857258 +1857315 +1857380 +1857626 +1857828 +1857829 +1857840 +1857882 +1857900 +1857935 +1857948 +1858100 +1858163 +1858283 +1858404 +1858411 +1858488 +1937698 +1937712 +1937745 +1937769 +1937988 +1938069 +1938074 +5141177 +5141187 +5141254 +5803065 +1937444 +1937474 +4693675 +1937618 +1939131 +1939156 +1838251 +1838255 +1838276 +1838289 +1838297 +1838304 +1838308 +1838331 +4685893 +4685097 +1833477 +4685485 +1833562 +4686368 +1833600 +1833653 +1833834 +1834019 +1834078 +4685138 +4685219 +4685271 +1834497 +1834850 +1835082 +1835121 +1835123 +1835128 +1835345 +1835555 +1835609 +1835612 +1835635 +1835644 +4685116 +1835790 +1835821 +1835828 +4686483 +1836873 +1836899 +4685431 +4685448 +1837053 +1837057 +1837150 +1837159 +1837172 +1837569 +4686743 +1838034 +4685065 +1838218 +1838224 +4685299 +4685306 +1838333 +4686617 +4686620 +4686621 +4686628 +1838958 +1838960 +4528702 +4685566 +4685576 +1839317 +1839323 +1839325 +1839333 +1839494 +5120053 +5120058 +5120063 +4685645 +4685650 +4685653 +4685655 +4685662 +4685669 +4685678 +4685683 +1840258 +1840260 +1840726 +1840774 +1840776 +1840796 +1840812 +1840844 +1840974 +4686042 +4686055 +4686111 +4686133 +4686164 +4686190 +4686214 +4686264 +4686266 +1841101 +1841221 +1841302 +4685972 +5802248 +5802256 +5802257 +5802259 +4686039 +4686015 +4686016 +4686018 +4686022 +4686027 +4686029 +4684521 +4684591 +4684789 +4684888 +4684893 +4684925 +4684958 +4685629 +4685631 +4685778 +4685810 +4685980 +4685981 +4686355 +4686385 +4686386 +4686531 +4686532 +4686656 +4686697 +4686702 +4686844 +4686956 +10213314 +10225227 +1800441 +1800473 +1800522 +1800562 +10010361 +9859868 +9883274 +1800691 +1800843 +1800844 +5114394 +5114409 +9267364 +10240592 +1801170 +5114515 +1801303 +1801305 +1801316 +1801432 +1801461 +1801519 +10026605 +10066605 +10088502 +10372377 +10448500 +10573425 +11496990 +11508472 +11594541 +11596898 +11698552 +11836409 +11871044 +1801787 +1801903 +1801922 +1802978 +4534792 +6112610 +6112661 +6133811 +9960072 +1802090 +1802702 +1802830 +1802833 +1802888 +1802998 +1803014 +1803021 +1803035 +1803039 +1803078 +1803091 +9485481 +10942408 +10264193 +5114303 +5114353 diff --git a/dev/releases/mambo_v3/presets/caribbean.classes b/dev/releases/mambo_v3/presets/caribbean.classes new file mode 100644 index 0000000..ce2e173 --- /dev/null +++ b/dev/releases/mambo_v3/presets/caribbean.classes @@ -0,0 +1,876 @@ +12170988 +1921992 +1921993 +1922015 +5140627 +1934570 +1935078 +1935295 +1935301 +1935343 +5140969 +5140980 +1936161 +1936378 +1936388 +1936565 +1936566 +1936649 +10331171 +9620499 +1868575 +1992315 +1846849 +1846860 +1850798 +5110390 +5108951 +8331687 +1763156 +1763163 +1763184 +1763199 +1763223 +1763256 +8028211 +1767307 +1767499 +1768283 +1769000 +1770038 +1771859 +5110326 +5110327 +5110533 +1776163 +1777179 +1777737 +1777942 +1781029 +1782211 +8384839 +1786217 +1786219 +1786247 +7480993 +1787464 +11495556 +5112542 +11890681 +10295290 +1790240 +1790246 +1790248 +1790308 +7785540 +5112843 +1792827 +1794637 +1795049 +1796338 +1798427 +4532352 +1803163 +1803218 +1803266 +1804331 +5115046 +1804759 +1804760 +1805691 +1805717 +1806702 +1806871 +1806872 +1806887 +1807553 +1807569 +1809066 +1809135 +1809491 +1809499 +1810145 +5116145 +5116198 +5116252 +1810846 +7535515 +5116423 +1814182 +1814692 +1815373 +5117414 +1816570 +5117685 +1817940 +1818252 +10395440 +10214972 +10830546 +10851228 +12194283 +8429622 +1781420 +1793538 +8177591 +1775796 +5884258 +7716829 +8299504 +8968321 +1784959 +1785072 +6117485 +7611914 +1780646 +1780668 +1777463 +5123542 +8766638 +1872514 +1872873 +1873051 +1873079 +1873398 +7372375 +1876542 +1877002 +5125525 +5143284 +5143285 +5131957 +1736623 +1739617 +1741823 +1741826 +1935498 +4299071 +9457324 +9622955 +1936026 +1920844 +1920900 +1920923 +1921123 +1922455 +10278292 +1922637 +1922868 +1923678 +1923679 +1923997 +8992718 +9157410 +4300393 +4300399 +8389961 +8904480 +1927301 +1927302 +1927988 +1927996 +1928009 +4300406 +1928589 +1929046 +1929129 +1929966 +1930079 +1930146 +1930167 +1930178 +1930179 +1930181 +1930263 +1930270 +1930361 +1930391 +1930410 +1930422 +1930563 +1930581 +1930621 +1930653 +1930654 +1930728 +1930772 +1930779 +1930830 +1931119 +5139864 +1931310 +5139897 +5139908 +5139909 +1932172 +1932175 +5140033 +5140054 +1933260 +5140534 +1935853 +1935872 +1935888 +1935912 +1935916 +1935935 +5139928 +4300268 +9469139 +9156458 +1751980 +1752034 +1752109 +1752477 +1752775 +5105379 +5105447 +5105491 +5105553 +1753603 +1753604 +1753661 +1753833 +1753871 +1919128 +1919130 +1919149 +1919239 +1919282 +1919287 +1919289 +5137540 +1919646 +1919652 +1919653 +1919656 +4701298 +7661785 +5137553 +1919937 +1919939 +1919943 +1919945 +1919947 +1919949 +5137819 +5137851 +5714819 +1920463 +1920552 +1920571 +1920574 +1920581 +1920691 +1920803 +12234544 +12236627 +1920621 +1956099 +1956215 +1959637 +10650351 +1962051 +1962086 +1962118 +1962120 +1963433 +5144363 +1966088 +1966185 +1968313 +1968315 +1968324 +1968942 +5145560 +1973665 +9590066 +1975287 +1976073 +1976255 +1976651 +1978464 +9243264 +1981160 +1981973 +5148593 +5149237 +1985647 +1985952 +1989582 +1990594 +1990998 +5880539 +5150002 +5150027 +12252926 +11423843 +12239491 +1942141 +1942170 +12286003 +1942416 +1942455 +1942509 +1942558 +5141662 +5141763 +1943571 +1943588 +1943823 +1943824 +1943830 +1943832 +1943901 +1943936 +12198522 +1943942 +1943962 +1944004 +1944273 +1944275 +1944283 +1944286 +1944314 +1944324 +1944329 +1944335 +1944343 +1944361 +1944421 +1944574 +1944769 +4301934 +1944815 +1944832 +5141913 +9551544 +1945302 +1945312 +1945462 +1945477 +1946074 +1946097 +4301426 +1946167 +1946177 +1946333 +1946469 +1946520 +1946544 +1946550 +1946577 +1946582 +1947021 +1947037 +1947048 +1947147 +5142176 +1947577 +1947587 +1947597 +12208168 +1947973 +1947979 +1947980 +1948042 +1948046 +1948158 +7603634 +1948446 +1948521 +1948630 +4301945 +1948823 +1948858 +1948890 +1948947 +1949049 +1949105 +1949322 +1949451 +1949515 +1949592 +1949621 +7726809 +9395000 +5142436 +1950017 +1950019 +1950044 +1950052 +1950153 +1950197 +1950654 +1951097 +1951121 +1951125 +5715127 +5142829 +5977203 +1945374 +12175154 +9366762 +1761892 +1764686 +1764693 +1765155 +5109850 +5109855 +5109881 +5109954 +5109958 +1767571 +1767719 +1777727 +1777730 +1780330 +1780390 +1780440 +1782424 +1783811 +5112414 +1785168 +1785331 +7400814 +1791331 +5113365 +1796274 +1796276 +7383338 +7689966 +7882824 +8405656 +1798288 +10118643 +11615055 +9307254 +1770955 +5108665 +1797903 +1824189 +1825373 +1825391 +1826772 +10043566 +1903598 +1892509 +1892729 +1892770 +4299095 +1892851 +5127805 +5127814 +5128005 +5128007 +5128011 +5128034 +1894076 +1894329 +1895250 +1895709 +1895768 +1895789 +9016382 +1895886 +1896087 +5128433 +5128475 +5128488 +5128491 +1896628 +1896749 +10353400 +1896756 +1896774 +1896932 +5129251 +9590057 +11701883 +5925238 +1897977 +1897990 +1898143 +1898174 +1898348 +1898350 +1898367 +1898374 +1898391 +1898424 +6228464 +5129473 +5129480 +5129481 +5129489 +5129496 +5129524 +5129535 +9255328 +1898686 +1899048 +4299211 +4299213 +1899893 +9446281 +1900024 +1900026 +1900172 +1900175 +1900195 +1900197 +1900199 +1900233 +1900249 +1900303 +1900408 +1900485 +1900618 +1900632 +1900787 +1900830 +1900872 +9072828 +1901261 +8247566 +5130314 +5130322 +5130326 +5130330 +1901744 +1901801 +5130514 +5130528 +5130548 +9357385 +1902378 +1902406 +1902451 +1902458 +1902479 +1902620 +1902623 +1902642 +1902670 +1902676 +1902699 +1902880 +1903607 +5131608 +1904382 +5131951 +1905451 +1907190 +1907272 +1907395 +1908168 +1908199 +1908203 +1908204 +1908256 +1908262 +1908299 +1908302 +1908577 +1908995 +1909019 +1909128 +1909170 +1909185 +1909191 +8727750 +5133255 +5133265 +5133451 +5133523 +5133565 +1910773 +5133581 +1911076 +5133591 +5133595 +5133621 +5133622 +8548427 +12322536 +1911966 +1912003 +1912036 +1912119 +5133736 +5133786 +1914416 +1914424 +1914465 +1914501 +1914697 +1915193 +1915339 +1915396 +1915401 +5136372 +1916701 +1917827 +1917830 +1917834 +1918077 +1918078 +1918082 +1918086 +1918094 +1918097 +1918149 +1918268 +1918269 +1918280 +1918596 +5137408 +1918972 +1918984 +1919010 +5128045 +5128067 +5128118 +5131982 +5132137 +5132221 +5132347 +5132360 +5132374 +5132429 +5132483 +5714312 +9541133 +5133088 +5714299 +5714302 +5130557 +1910628 +5132917 +5132940 +5133008 +9964857 +5125118 +1941570 +1941717 +5101371 +5101527 +7628188 +1879052 +1879160 +1879253 +1879413 +5126494 +5126585 +5126637 +1880505 +1880623 +5126663 +10861282 +11968849 +1881079 +5126721 +5126751 +1881917 +5126756 +1882786 +10107015 +1882819 +1882941 +1882960 +1883067 +10807787 +8981028 +5127090 +1883968 +8324720 +1884479 +1884774 +1884923 +1885099 +1885158 +1885950 +1886251 +1886729 +10510138 +1887634 +1888047 +1888292 +1888306 +1888336 +1888646 +1888955 +1889536 +1890089 +1890247 +11044778 +7543006 +1890368 +1890876 +1891035 +1891932 +1892131 +1892311 +1892477 +5771877 +7864212 +8146570 +8425580 +6120803 +6121010 +6121218 +1886374 +1889721 +1889850 +5127631 +1886123 +1853242 +7946946 +1858930 +9760511 +6133397 +9547681 +1864905 +1865107 +1865132 +5124557 +5124595 +5124598 +1865547 +1865557 +1865709 +1865764 +1865837 +1866105 +1866220 +1866311 +1866902 +1867218 +1867224 +5124873 +1867773 +10591617 +9634178 +5123615 +1861479 +1861559 +5123636 +1861773 +1861783 +1861784 +1862033 +1862044 +1862049 +1862078 +1862087 +1862088 +1862094 +1862096 +1862123 +1862139 +1862163 +1862181 +1862198 +1862207 +5123701 +5123704 +1862547 +1862551 +1862658 +1862928 +1863109 +1863151 +5123784 +5123801 +7803585 +1863366 +1863412 +1863416 +1863426 +1863699 +1863701 +1863706 +1863714 +1863724 +1863732 +1863734 +1863742 +1863757 +1863856 +1863858 +1863864 +11468731 +1864316 +1864320 +1864321 +1864328 +1864329 +1864352 +5124249 +5124250 +5124268 +5124442 +5124448 +5124452 +5123954 +5123956 +5123961 +5123971 +5123979 +5123983 +5123991 +5123996 +1863978 +1863982 +1864004 +1864021 +1864058 +1864068 +1864084 +1864098 +1864103 +1992634 +5150053 +1953499 +5143232 +5143234 +1953998 +1954084 +1830681 +1953166 +1751497 +1751524 +1751588 +1751590 +1751625 +5105217 +5105227 +5122556 +5122581 +1857068 +1858283 +10038125 +1937655 +1937793 +1937885 +1938069 +1938112 +1938159 +4299871 +10600208 +12200213 +1937064 +1937090 +1937110 +1937136 +1937144 +1937162 +1937167 +1937530 +1939130 +1939136 +5141324 +1856555 +4534796 +9385576 +8924506 diff --git a/dev/releases/mambo_v3/presets/central_america.classes b/dev/releases/mambo_v3/presets/central_america.classes new file mode 100644 index 0000000..c8cbc4c --- /dev/null +++ b/dev/releases/mambo_v3/presets/central_america.classes @@ -0,0 +1,1639 @@ +12170988 +1934715 +1934991 +1935301 +5140969 +5140980 +1936161 +1936378 +1936388 +1936391 +1936566 +5141085 +10331171 +1868535 +10100176 +10517417 +1868575 +1992315 +1732901 +1734384 +5102324 +1845314 +1845385 +1845455 +1846439 +1846849 +1846860 +1850729 +1850771 +1850798 +5122062 +5122121 +5122131 +1851845 +10508467 +5119890 +5110390 +1760385 +1760397 +1760400 +5108951 +1761101 +1761838 +8331687 +8379616 +9354496 +9546910 +1763156 +1763163 +1763184 +1763199 +1763223 +1763256 +8028211 +5110044 +1766839 +1766880 +1767320 +1767499 +9384861 +1768283 +1769000 +1770038 +1770044 +1770263 +1771859 +5110326 +5110327 +5110533 +1776163 +1777052 +1777179 +1777737 +1777942 +5110891 +9610080 +1779740 +1781029 +9305011 +9630748 +1781944 +1781946 +5112060 +1782214 +8384839 +1786217 +1786219 +1786247 +7480993 +1787464 +11495556 +5112542 +11890681 +10295290 +1788891 +5112626 +1790230 +1790240 +1790246 +1790248 +1790257 +1790258 +1790268 +1790274 +1790281 +1790287 +1790308 +1790787 +1790945 +7785540 +5112843 +1791151 +1791372 +9382044 +1792827 +1792831 +1794637 +1795042 +1795049 +9622322 +1797121 +1797521 +9410076 +7598729 +1798427 +4532352 +8150450 +1799183 +1803218 +10033898 +1804404 +1804409 +1804522 +5115046 +1804759 +11907485 +1804974 +1805197 +1805271 +1805537 +1805691 +1805717 +1805938 +1805955 +1806687 +1806690 +1806702 +9394138 +9491341 +1806872 +5115500 +1807514 +1808592 +8929537 +1809066 +1809127 +1809135 +1809294 +1809299 +1809348 +1809491 +1809499 +1810121 +1810172 +5116128 +5116134 +5116145 +5116198 +5116252 +5116293 +9350900 +1810743 +1810824 +1810846 +1810866 +9389851 +7535515 +1811019 +1811079 +1811439 +5116332 +5116358 +5116423 +1814182 +1814336 +1814359 +1814365 +5117348 +1814665 +1814692 +1814863 +5117414 +9434954 +5117430 +5117462 +1816570 +5117685 +1817086 +1817734 +1817749 +1817797 +11725616 +1817864 +1818252 +5118046 +11758730 +1818454 +1819310 +9391467 +1820940 +10395440 +9290866 +9315577 +9406984 +9599150 +10214972 +10830546 +10851228 +12194283 +8429622 +1781420 +1793538 +1813413 +1813415 +8177591 +1775796 +5884258 +7716829 +8299504 +8968321 +1784959 +1785024 +5884188 +6117485 +7611914 +7924383 +1780646 +1777463 +1777471 +1838360 +1860184 +10308365 +5123419 +1870037 +1870308 +1870727 +1870988 +1871175 +10336328 +1872452 +1872514 +1872873 +1873079 +5125545 +1873398 +7372375 +1873753 +10143814 +1875478 +1876542 +1876665 +5125916 +5125917 +1877282 +1877443 +5976937 +5125525 +5143284 +5143285 +12018158 +5131957 +1941294 +1736623 +10274976 +1736860 +4530608 +1737904 +1737929 +1741820 +1741823 +1741826 +11923027 +10073044 +9948031 +1935498 +4299071 +9457324 +1936026 +1920844 +1920889 +1920900 +1920923 +1921053 +10657453 +1921123 +8825450 +1922039 +1922041 +1922219 +1922455 +10278292 +1922637 +1922865 +1922868 +1922889 +1922890 +1923505 +8913017 +1923678 +1923679 +1923997 +1924106 +1924176 +1924518 +1924521 +8840017 +8992718 +9157410 +9478718 +10120854 +1925429 +1925498 +1925515 +4300384 +4300393 +8904480 +1925922 +1926834 +1927988 +1927996 +1928009 +4300406 +1928214 +1928215 +8846776 +1928584 +1928589 +1929046 +1929129 +5139578 +1929962 +1929966 +1930079 +1930146 +1930167 +1930178 +1930179 +1930181 +1930270 +1930288 +1930289 +1930331 +1930361 +1930410 +1930422 +1930451 +1930563 +1930653 +1930728 +1930772 +1930830 +1931119 +1931122 +1931126 +5139864 +1931310 +5139897 +5139898 +5139908 +10113190 +11417741 +1932056 +1932172 +1932386 +1932576 +1932879 +5140033 +5140054 +5140063 +1933260 +1935853 +1935872 +1935878 +1935888 +1935901 +1935912 +1935916 +1935925 +1935931 +1935935 +9867272 +5139928 +4300268 +9469139 +9975698 +9156458 +1751980 +1751986 +1752034 +1752109 +1752111 +9776414 +9941073 +1752775 +1752825 +1752832 +11507608 +5105367 +5105369 +5105379 +5105380 +5105447 +5105491 +5105508 +1753603 +1753604 +1753661 +1753833 +1753864 +1753871 +10514620 +5137512 +12181811 +12226416 +12251247 +1919125 +1919128 +1919130 +1919145 +1919146 +1919149 +1919173 +1919235 +1919239 +1919245 +1919282 +1919289 +5137540 +1919646 +1919649 +1919652 +1919653 +1919656 +4701298 +4701336 +7661785 +5137553 +1919700 +1919705 +10703948 +1919937 +1919939 +1919943 +1919945 +1919947 +1919949 +1920192 +5137800 +4701136 +5137817 +5137819 +5137851 +5714819 +1920426 +1920437 +1920461 +1920463 +1920496 +1920552 +1920571 +1920581 +1920691 +1920803 +1920809 +5137672 +5137694 +12191141 +12206386 +12234544 +12236627 +1920621 +1956098 +1956099 +1958049 +5143964 +1958121 +1959637 +1960090 +1960166 +1960255 +1960268 +1960315 +1960503 +1961155 +1961361 +10650351 +1962051 +1962086 +1962118 +1962120 +9592714 +9264326 +4302252 +1963433 +1963633 +5144363 +1964698 +1965586 +1965697 +1965887 +1966088 +1966185 +1967226 +1967346 +1968313 +1968321 +1968324 +1968538 +5144583 +1968942 +10088253 +5144953 +5145078 +5145466 +5145560 +1972101 +5146179 +1973245 +1973665 +10404426 +5146820 +5147018 +5147139 +5147179 +5147211 +9469300 +9590066 +1975287 +1976073 +1976651 +1976746 +9617496 +1978464 +1978671 +9243264 +5148277 +5806132 +1978958 +1978959 +1980245 +1980247 +1981144 +1981160 +1981252 +1981277 +1981959 +1981973 +5148531 +5148593 +9307713 +9544337 +5148743 +5148952 +1985485 +5149222 +1985647 +1985952 +1986192 +1986906 +1987330 +1989582 +1990270 +1990331 +1990335 +1990357 +1990594 +1990998 +5880539 +9392058 +9438677 +4302221 +9621086 +9281181 +9403481 +9448761 +9545331 +9497623 +9619088 +9237031 +9299326 +10221195 +10288719 +9363893 +9391442 +5149753 +5149811 +1980462 +9256786 +5150002 +5150027 +12200261 +11470872 +11654707 +11776315 +11892494 +12252926 +11423843 +11670842 +12173621 +12247340 +12252340 +12239491 +1942098 +1942141 +1942170 +1942171 +12286003 +1942341 +1942416 +1942455 +1942509 +4301744 +1942558 +1942670 +5141662 +1942854 +5141697 +1943054 +4302008 +5141743 +5141763 +1943563 +1943571 +1943588 +4301355 +1943631 +1943823 +1943824 +1943830 +1943832 +1943901 +1943936 +12198522 +1943954 +1943962 +1944004 +1944273 +1944275 +1944283 +1944286 +1944314 +1944324 +1944329 +1944335 +1944343 +1944361 +1944574 +1944769 +4301934 +1944798 +1944815 +1944832 +5141913 +9551544 +1945081 +1945302 +1945312 +1945462 +1945476 +1945477 +4301942 +1945957 +1946074 +1946078 +1946079 +1946097 +1946163 +1946177 +1946310 +1946327 +1946333 +1946469 +12233838 +1946500 +1946509 +4302101 +1946520 +1946544 +1946550 +1946577 +1946582 +5142086 +1946853 +1946865 +1946901 +1946981 +1946983 +1946989 +1946992 +1947021 +1947037 +1947048 +1947147 +5142166 +5142175 +5142176 +1947402 +1947507 +1947568 +1947587 +1947588 +1947597 +1947842 +1947894 +12208168 +1947973 +1947976 +1947979 +1947980 +1948042 +1948046 +1948158 +7603634 +1948439 +1948446 +1948521 +1948826 +1948865 +1948890 +1948947 +1949049 +1949105 +12353663 +1949285 +1949322 +1949449 +1949451 +1949466 +1949492 +10574663 +1949512 +1949515 +1949592 +1949621 +7726809 +9395000 +1949687 +5142424 +5142436 +5142583 +1950017 +1950019 +4301876 +1950044 +1950052 +1950133 +1950153 +1950197 +1950578 +1950654 +1950767 +1950856 +1951062 +1951097 +1951116 +1951121 +1951125 +1951133 +1951217 +4301897 +5715127 +12180041 +12206694 +1951340 +5142829 +5977259 +5977260 +1948771 +1948779 +1948789 +1948799 +1948800 +1948802 +1948803 +1948810 +1945374 +1945378 +12175154 +12263736 +1758767 +1758771 +1758781 +1758783 +7911151 +9366762 +1759799 +1759881 +1760309 +1761143 +1761892 +1764686 +1764693 +1764917 +1765155 +5109845 +5109850 +5109855 +5109881 +5109954 +8352161 +1766237 +1766287 +1767052 +1767571 +1767584 +9511345 +5772169 +1767719 +1770659 +1773783 +1774243 +9550265 +6115953 +1775509 +1776467 +1777727 +1777728 +9310286 +5111141 +5111568 +1780309 +1780390 +1780407 +1780437 +1780440 +9374443 +9289753 +9457757 +9500945 +1783811 +9348210 +9465978 +9492640 +1784422 +1784461 +5112414 +4534290 +1785168 +1785331 +9636267 +7400814 +1786360 +1786733 +1786808 +1787438 +1788485 +1791331 +1792430 +5113365 +9240216 +1792817 +1792996 +11781335 +1796276 +7383338 +7882824 +1798288 +1799433 +1799675 +1799774 +9388726 +9571514 +1799900 +1799925 +10446574 +8729319 +8562506 +9241105 +9452702 +9484411 +9363692 +9556427 +7779226 +8818378 +8928353 +9538684 +10118643 +9342344 +11452421 +11615055 +11626773 +11627464 +11660145 +11713256 +11753804 +5109299 +5109369 +5109413 +8943174 +9038042 +9307254 +9404919 +5112130 +7398419 +1792564 +1774929 +1770955 +1765751 +5108665 +11783188 +1797903 +1776094 +9354669 +5118509 +1824259 +1825373 +1825391 +1825428 +5118944 +1826156 +1826169 +1826181 +1826222 +5119046 +1826772 +1827716 +1828105 +1828268 +10043566 +1903598 +1892509 +1892729 +1892736 +1892742 +1892759 +4299095 +1892851 +1892858 +1892863 +5127805 +5128005 +5128007 +5128034 +1893337 +1893480 +9113409 +10653980 +1894074 +1894087 +1894088 +1894329 +1894342 +1895176 +1895185 +1895203 +1895733 +1895768 +1895820 +8763986 +9016382 +1895886 +1895904 +1896087 +5128433 +5128438 +5128475 +5128488 +5128491 +1896614 +1896628 +1896658 +1896749 +1896754 +10353400 +1896763 +1896774 +1896876 +1896932 +5129251 +9590057 +11701883 +5925238 +8367663 +1897985 +1897990 +10073321 +10365587 +1898143 +1898174 +1898203 +10321900 +1898286 +4299368 +4299370 +5714369 +1898358 +1898367 +1898391 +1898402 +1898414 +1898416 +1898424 +1898431 +5129387 +5129451 +6228464 +5129473 +5129481 +5129489 +5129496 +5129515 +5129517 +5129520 +5129524 +5129531 +5129535 +9208233 +9255328 +1898686 +1898841 +1898865 +1899048 +4299211 +4299213 +1899873 +1899893 +1899994 +1900024 +1900026 +8847500 +9208918 +9925669 +1900131 +1900134 +1900175 +1900197 +1900199 +1900233 +1900249 +1900295 +1900303 +1900345 +1900485 +1900578 +1900618 +1900626 +1900787 +1900825 +1900830 +1900872 +9190731 +1901001 +1901189 +1901261 +1901268 +8247566 +1901735 +1901744 +1901794 +1901801 +1901804 +1901810 +11135155 +11219489 +12258652 +5130400 +5130514 +5130528 +5130548 +9357385 +1902211 +1902300 +1902378 +1902406 +1902430 +1902458 +1902479 +1902502 +5130559 +1902620 +1902642 +1902670 +1902676 +1902680 +1902692 +1902702 +1902703 +1902704 +4299218 +1902880 +1902885 +1903028 +1903607 +1903658 +1903683 +5131597 +5131608 +5131637 +1904382 +7776011 +5131951 +1905242 +1905451 +1907153 +1907235 +1907250 +1908011 +1908055 +1908123 +1908144 +1908146 +1908148 +1908150 +1908199 +1908203 +1908204 +1908207 +1908256 +1908258 +1908302 +1908577 +5133035 +10542548 +1908995 +1909019 +1909064 +10046510 +1909070 +1909128 +1909170 +1909185 +1909211 +9851867 +8727750 +5133142 +5133251 +5133265 +5133523 +10558140 +5133565 +5133568 +1910773 +5133581 +1911076 +5133595 +5133609 +5133621 +5133623 +5133634 +5133635 +5133637 +9219529 +1911577 +1911939 +12322536 +12335869 +1911966 +1912003 +1912036 +1912119 +5133736 +10638244 +9277330 +1914410 +1914416 +1914420 +1914424 +1914433 +1914435 +1914440 +1914442 +1914465 +1914477 +1914496 +1914498 +1914500 +1914501 +1914511 +4299201 +1914697 +1915193 +9185656 +9988287 +1915339 +1915396 +1915401 +1915417 +1915427 +1915430 +1915456 +1915506 +10487080 +1916700 +1917827 +1917830 +1917834 +1918077 +1918078 +1918082 +1918094 +1918097 +1918133 +10250149 +1918220 +1918269 +1918280 +1918293 +1918596 +1918968 +1918972 +1918984 +1918988 +1919007 +5128045 +10415847 +5130682 +10259880 +5131982 +5132003 +5132079 +5132084 +5132137 +5132225 +5132246 +5132254 +5132317 +5132346 +5132347 +5132360 +5132398 +5132429 +5132446 +5714312 +9541133 +5133088 +5714299 +5714302 +5130557 +10662329 +12045866 +4299778 +5132917 +5132940 +5132956 +5133008 +9964857 +5142842 +1868334 +1868360 +5125118 +1941570 +1941717 +1941719 +5101371 +9114044 +5101527 +1731812 +7628188 +1878688 +1878705 +1879052 +1879160 +1879253 +1879348 +1879398 +1879413 +10366679 +10874932 +1879452 +1879471 +5126494 +5126517 +5126533 +5126585 +5126637 +1880505 +10056494 +1880537 +1880623 +5126663 +10861282 +11968849 +1881079 +1881111 +1881139 +1881166 +5126721 +1881767 +1881822 +5126751 +1881917 +1882089 +1882190 +1882195 +5126963 +10107015 +1882812 +1882816 +1882818 +1882941 +1882960 +1883067 +10807787 +8981028 +5127089 +1883968 +1883975 +8324720 +9864281 +1884001 +1884479 +1884685 +9308930 +1884774 +1884923 +1885099 +1885158 +1885642 +1885950 +1886251 +5127209 +1886501 +1886729 +10510138 +1887004 +1887024 +1887341 +1887459 +5127339 +5127355 +1887565 +1887634 +1888009 +1888047 +1888292 +1888306 +1888338 +1888435 +5127378 +1888646 +1888695 +1888823 +12106417 +1888955 +1889028 +1889267 +1889536 +1890089 +1890247 +1890368 +1890374 +1890417 +1890487 +1890512 +1890599 +1890730 +1890737 +1890794 +1890876 +1890885 +6207059 +1891035 +1891074 +1891167 +1891488 +10310835 +1891755 +1891932 +1892131 +1892230 +1892311 +1892355 +1892420 +1892427 +1892477 +1892488 +5771877 +7864212 +8146570 +8425580 +6121010 +6121218 +8876855 +1886374 +1889721 +1889745 +1889850 +5127562 +5127631 +5127680 +5802339 +1886123 +1886207 +1831136 +1853242 +1853312 +1854143 +7946946 +1858615 +9777614 +1858674 +1858930 +1859046 +1859161 +8790054 +9700261 +10103570 +1864905 +8877458 +9240588 +9355107 +9531432 +9606779 +1865102 +1865107 +1865108 +1865132 +1865299 +1865333 +1865353 +5124557 +5124589 +5124595 +5806244 +1865572 +1865590 +1865709 +1865764 +1865837 +1865842 +1865853 +1865963 +1866003 +1866085 +1866100 +1866105 +1866123 +1866201 +1866214 +1866311 +1866330 +1866496 +1866550 +1866570 +1866601 +1866902 +5124873 +1867515 +1867525 +1867535 +1867773 +10247309 +10591617 +9634178 +10248521 +5123615 +1861479 +1861559 +5123636 +1861773 +1861783 +1861784 +1861823 +1861887 +1862033 +1862044 +1862047 +1862049 +1862078 +1862083 +1862087 +1862088 +1862091 +1862094 +1862096 +1862123 +1862129 +1862139 +1862163 +1862181 +1862198 +1862207 +1862225 +5123701 +5123704 +1862547 +1862551 +1862595 +1862624 +1862658 +1862841 +1862923 +1862928 +1863021 +1863088 +5123775 +1863109 +1863151 +5123784 +5123801 +7803585 +1863366 +1863407 +1863412 +1863416 +1863426 +1863699 +1863701 +1863706 +1863714 +1863732 +1863734 +1863742 +1863757 +1863856 +1863858 +1863864 +1864164 +11468731 +1864316 +1864320 +1864321 +1864328 +1864329 +1864352 +5124172 +5124200 +5124249 +5124250 +5124268 +5124442 +5124443 +5124450 +5124452 +5123954 +5123956 +5123961 +5123968 +5123971 +5123979 +5123983 +5123991 +5123996 +5124000 +8849480 +1863978 +1864004 +1864008 +1864021 +1864046 +1864058 +1864068 +1864070 +1864084 +1864098 +1864103 +1864106 +1993643 +1992817 +1953499 +5143232 +9053308 +9424853 +1953970 +1953998 +1954084 +5105649 +5105656 +5105671 +10322104 +1830681 +1953166 +1751497 +1751524 +1751572 +1751588 +1751590 +1751609 +1751625 +1751626 +9332550 +1751670 +1751684 +1751785 +5105193 +5105217 +5105218 +5105227 +1854920 +5122526 +5122538 +5122581 +5122646 +5122647 +5122696 +1855358 +1856581 +1857143 +1857380 +1858283 +10038125 +1937642 +1937655 +1937688 +1937722 +1937751 +1937758 +1937793 +1937803 +1937816 +1937846 +1937885 +1938016 +1938059 +1938112 +4299871 +10600208 +12211009 +1937090 +1937109 +1937110 +1937124 +1937136 +1937144 +1937162 +1937167 +1937527 +1939130 +1939136 +5141321 +5141324 +5141333 +5141342 +4694313 +1856555 +4534796 +1800963 +8924506 +9426252 diff --git a/dev/releases/mambo_v3/presets/east_asia.classes b/dev/releases/mambo_v3/presets/east_asia.classes new file mode 100644 index 0000000..c935eed --- /dev/null +++ b/dev/releases/mambo_v3/presets/east_asia.classes @@ -0,0 +1,3430 @@ +1837646 +1935849 +1992277 +1992283 +1992315 +1860668 +1732063 +1732114 +1732115 +1732416 +1732452 +1732508 +1732521 +1732525 +1732565 +1732662 +1732685 +1732763 +1732830 +1732842 +5101640 +1733154 +1733155 +1733243 +1733258 +1733394 +1733412 +1733484 +4525266 +5734897 +5101745 +5769191 +1734453 +5102207 +5102242 +1734496 +1734519 +1734704 +1734826 +5734891 +5102287 +5102300 +1832143 +5734640 +11453841 +1832235 +1832248 +1832254 +5734645 +1832612 +11505614 +8825467 +1845270 +1845547 +1845607 +4529566 +1846604 +10785815 +11730078 +1847062 +1847157 +1847260 +1847392 +4528547 +1847641 +1848273 +1848356 +1848378 +4528539 +1848864 +5122013 +1849284 +9007213 +4527903 +1850570 +1850633 +1851337 +1851543 +1851555 +1852177 +6133343 +11287091 +1829533 +1829659 +1829776 +1828637 +6097236 +7448174 +4525610 +10835385 +10855556 +5125130 +1861395 +1868428 +1868527 +5734146 +1834980 +8503184 +1839094 +1830152 +1830241 +1831458 +1831631 +1831643 +9379855 +8834672 +1839625 +5880147 +9734171 +10679326 +10746289 +11382064 +10698858 +11570545 +10701190 +11807833 +12199936 +11095591 +11418741 +7908344 +12235234 +12217030 +1758625 +1759150 +1759775 +1760140 +6132868 +6132869 +1760201 +1760927 +10889719 +1760970 +1761111 +1761213 +1761353 +1761387 +9257793 +1762151 +11562374 +1762219 +1762226 +1762298 +1763589 +5109766 +1763650 +1763782 +1763812 +1763976 +1764021 +1764032 +1764043 +1764060 +9278311 +1764531 +1764880 +1764886 +1765653 +1765863 +1766260 +1766560 +1766570 +1766584 +1766601 +1766618 +3257809 +6116699 +1766888 +1767044 +1767755 +5110190 +11097510 +1768440 +5110232 +1768898 +10820762 +1769103 +1769168 +11467034 +10848620 +1769410 +1769425 +1769465 +1769737 +1769772 +10881384 +12148290 +1769823 +1769827 +1769840 +1769852 +1769897 +1769901 +6132966 +6132967 +1771839 +1771975 +1771977 +1772793 +4532500 +5110397 +5110417 +5110447 +5110490 +1774575 +1774576 +1775148 +5110546 +5110765 +5110769 +1777166 +1777631 +5110837 +1777695 +9372988 +6132953 +4687991 +6133029 +5110986 +5110993 +5111007 +5111044 +6133058 +9610080 +1779456 +6132938 +1780150 +5111830 +1780705 +1780716 +1782115 +1783302 +1783652 +1784804 +10208792 +1785744 +1785832 +1786317 +1786711 +5112500 +6132971 +6132974 +1786980 +1787009 +10860091 +6132805 +1788045 +5112531 +1788553 +6132936 +7346446 +6132826 +1788953 +1789225 +1789604 +1789794 +1790331 +1790692 +10749137 +10766319 +1790876 +1790888 +1791010 +1791094 +1791097 +10743044 +6132950 +1791514 +1791698 +1791715 +11016336 +11725043 +11971514 +5113078 +5113082 +5113084 +5113148 +5113330 +5113352 +1792541 +1792695 +5113385 +5884243 +9504222 +1793429 +1793610 +1793613 +1793631 +1793635 +1793646 +1793656 +1793892 +5113925 +1796984 +10600368 +1797258 +1797259 +1797299 +1797344 +1797374 +1797454 +1797479 +4532471 +8355390 +8756768 +9332506 +1797727 +1798014 +1798101 +5113950 +5884247 +1798346 +1798408 +1798449 +1798488 +1798504 +6132841 +6132850 +11976273 +1787072 +1787079 +1798523 +1798580 +1798594 +1798700 +1798794 +1798802 +1798807 +1798823 +1798863 +1798868 +4301310 +4532351 +4532352 +6115426 +6115437 +6133046 +6133051 +8793873 +1799417 +1799708 +1799743 +1799751 +1799757 +6132824 +6132825 +10722110 +1803148 +1803163 +1803197 +1803824 +1804071 +1804477 +9343385 +1804906 +1805044 +11494627 +12229237 +1805580 +5115166 +5115167 +5115198 +9663271 +1806936 +7874258 +11453492 +1808140 +1808145 +1808161 +1808195 +1808221 +1808236 +1808286 +1808348 +1808559 +6198302 +9219266 +1808752 +5115701 +5115771 +1809019 +5115777 +1809115 +1809210 +1809308 +5116095 +10183056 +12006709 +1810099 +1810464 +10882244 +5116395 +5116412 +12176559 +1811686 +1812500 +10671425 +10821201 +1813010 +1813114 +1813263 +5117189 +7656811 +1814653 +1814913 +1814928 +1814971 +5117399 +5117400 +1815260 +10826443 +12249986 +1816065 +1816138 +1816246 +1816276 +1816292 +1816299 +1816362 +1816881 +5117779 +1817797 +5734900 +11461056 +11860565 +1818413 +8326103 +1818659 +1818991 +10822185 +1819128 +1819145 +4532293 +4532297 +6134023 +6134027 +7346382 +7346384 +1819268 +1819270 +1819280 +11656384 +8407461 +6134035 +1819873 +5118348 +7657803 +5118422 +1820352 +1820372 +1820406 +1820414 +1820450 +1820451 +1820477 +5734655 +5734657 +7346381 +9420824 +1820565 +1820753 +1820888 +1821105 +1821260 +1822141 +1822142 +11731502 +12253343 +12037602 +9276279 +9347308 +5884571 +10503495 +8897869 +7596232 +12176367 +7346231 +6097214 +4532544 +4532516 +6133081 +6133083 +4532565 +10864524 +12021153 +12021649 +12089608 +9673208 +10270464 +8741750 +9473918 +9400545 +9559336 +6133292 +11332355 +6133340 +10062933 +10717837 +8148822 +10806460 +6133252 +10072380 +6133325 +10972780 +11142432 +10309234 +12171522 +9493317 +9315833 +11962292 +10399906 +6133266 +6133269 +6133270 +6133271 +11232431 +6133311 +6133312 +6133313 +6133315 +6133317 +8526388 +8624848 +5734901 +6133262 +12257250 +8831819 +5115872 +5115874 +5116475 +8038357 +6133264 +1774829 +5116843 +12171068 +9266866 +10178326 +10282389 +10400868 +10469564 +10813849 +10907635 +10982648 +8874633 +9508913 +1783898 +1783906 +6133033 +5116504 +9336001 +1781413 +1781421 +1803461 +4532405 +4532408 +4532412 +10866411 +6133241 +6133242 +6133244 +6133248 +7346227 +8000103 +9478424 +1794273 +6115388 +6133297 +1774583 +1774598 +1774618 +1774626 +1774635 +1774640 +1774654 +1774661 +6132809 +1819852 +1780287 +4532508 +1793515 +1793533 +5111643 +1768461 +1760246 +5113036 +5109796 +1821455 +1821478 +1821479 +1821505 +1821651 +1821863 +1821920 +1821934 +1821940 +1822017 +1819337 +1819362 +1804182 +1774997 +6122364 +1781473 +1783713 +1783725 +1812394 +8237987 +4532366 +4687933 +6116646 +10926224 +11088003 +1820118 +1820137 +1819057 +1820039 +5118396 +1781531 +1798329 +1798335 +1784947 +1785072 +1765996 +1765999 +1766022 +6133069 +11513188 +1786597 +5884188 +6132915 +6132916 +6132917 +5110012 +12185656 +1809594 +1781350 +1781353 +6133013 +1796943 +1819685 +10098436 +11717028 +1771772 +1782310 +10094256 +10765884 +9792270 +5108435 +5108440 +1771903 +1788813 +4301309 +10506164 +1777500 +1777517 +5112440 +1795542 +1860979 +1860983 +1860987 +4522891 +1860768 +1852956 +1835432 +1835433 +1835457 +9724183 +1837420 +4529064 +1839293 +1839296 +1840301 +1840346 +1840566 +1840581 +1840596 +1831752 +10371735 +1869359 +1869363 +9883856 +1939510 +1939520 +5141344 +1860261 +1860274 +4525177 +5123339 +5123394 +5123419 +5769164 +5880040 +5880041 +6132546 +5123449 +5123461 +5123474 +5123485 +5123489 +1869706 +1869803 +1870202 +1870237 +1870249 +1870250 +1870450 +1871407 +4531402 +1871630 +1871683 +1871698 +1871783 +1871988 +1872169 +10787705 +1872848 +1872850 +1872873 +1872901 +1873079 +1873215 +1873417 +1873776 +1873780 +1873783 +4531264 +1873843 +1873890 +5125569 +5125596 +5125602 +5125633 +5125635 +5125689 +1874274 +4531147 +1874743 +1874937 +1875120 +8219149 +1875376 +1875827 +1875830 +1875865 +1875869 +1875918 +1875958 +1876168 +1876329 +1876409 +1876542 +1876592 +1876854 +1876922 +1877038 +1877368 +1877498 +5126052 +1877788 +1877941 +1877988 +4531417 +1878406 +1878470 +9835867 +1883045 +1888454 +5884888 +6133441 +5141493 +1940510 +1940575 +1940639 +1940807 +1939879 +1736358 +1736377 +1736499 +1736560 +1736601 +1736623 +1736727 +1736905 +1736993 +1737015 +4529931 +10842267 +1737313 +1737342 +1737368 +1737491 +1737497 +1737524 +1737526 +1737533 +1737542 +1737650 +1737753 +1737847 +1738192 +1738222 +1738373 +1738422 +5102951 +1738700 +8086347 +1739337 +5102982 +1739471 +1739605 +1739833 +1739919 +1739980 +1739999 +1740183 +1740185 +1740392 +7797515 +1740469 +1740482 +1740524 +1740797 +1740828 +1741341 +1741368 +4530151 +5103061 +1741633 +1741752 +1742185 +1742263 +1742346 +5103736 +5103948 +5771350 +8313553 +5103998 +1743475 +7877231 +1743532 +1743604 +5104056 +1743768 +1743775 +1743782 +4529908 +1743828 +1743856 +1743862 +1743867 +1743898 +1743998 +1744071 +1744136 +1744180 +1744526 +1744588 +1744593 +1744699 +1744728 +1744731 +1744739 +1744896 +10844862 +1745561 +1745579 +1745600 +1745630 +1745634 +1745771 +1745816 +1745895 +1745947 +1745952 +1745957 +1746027 +1746174 +1746327 +1746613 +1746644 +1746666 +1746714 +1746775 +1746832 +1746856 +1746876 +1747141 +6097234 +1748605 +8691947 +5103121 +5103176 +5103227 +5771229 +5771232 +5771236 +5771239 +5771249 +5771258 +4525510 +4525530 +4525540 +1920851 +1920864 +10159697 +9916153 +1920957 +1920996 +1921009 +1921010 +1921040 +7346426 +10581870 +1921092 +1921150 +1921163 +1921263 +7387466 +1921633 +7346430 +1921897 +1922111 +1922143 +1922244 +1922285 +1922311 +1922343 +8016522 +5138200 +1922584 +8782891 +1922937 +5138543 +5138561 +5714680 +1923491 +1923649 +1923651 +1923668 +1923796 +1923809 +1923917 +1924044 +1924057 +1924097 +1924193 +5138681 +1924298 +1924390 +1924458 +1924713 +4535172 +1925381 +1925543 +1925731 +1925877 +1925918 +1925962 +1926054 +1926436 +1926448 +1926574 +5883255 +1926593 +1926611 +10116946 +10361239 +1926800 +1926861 +1927034 +1927217 +4709111 +5883052 +1927393 +1927439 +1927717 +5882965 +1928248 +5139050 +1928349 +1928361 +1928419 +5139156 +1928849 +1928908 +1928915 +1929270 +1929659 +1929697 +8356768 +1930110 +1930832 +1930968 +1931132 +8643155 +1931148 +1931561 +5734268 +7346434 +1931706 +1931735 +1931779 +5139915 +1931956 +1931958 +1931997 +1932020 +1932043 +1932159 +1932166 +1932273 +4708995 +1932411 +1932551 +7346444 +1932607 +6132685 +1932814 +1932960 +5806412 +1933028 +1933044 +5140214 +5140244 +5140436 +7634721 +7664111 +1933583 +1933647 +7346407 +1933793 +1933844 +1933845 +1934187 +1934188 +1934192 +1934211 +1934213 +1934221 +1935377 +1935410 +1935454 +1935459 +1926260 +5138929 +7346417 +11874998 +4709102 +1933138 +1924494 +11055981 +9623220 +5734556 +1752373 +1752483 +1752494 +1752603 +1752651 +1752749 +1752758 +1752849 +1753081 +1753215 +1753395 +5105458 +5105467 +5105547 +5105560 +1753432 +1753435 +11014495 +1753636 +5734560 +1753759 +5105588 +10955682 +10932946 +7345843 +6133481 +10017342 +5105339 +5105259 +10795141 +11673056 +1919151 +1919320 +1919328 +1919340 +1919344 +1919348 +1919438 +1919534 +1919551 +1919581 +1919589 +1919635 +1919697 +1919712 +1919720 +1919728 +1919731 +1919741 +1919951 +5137748 +1920237 +1920247 +1920259 +5137808 +5137823 +5137828 +5137832 +5137833 +5137849 +5805954 +5137861 +1920454 +1920467 +1920469 +1920494 +1920496 +1920506 +5137889 +5137891 +5804932 +5805407 +1920515 +5137903 +5137908 +5137912 +5137920 +5137926 +5137932 +5137938 +5137945 +5137946 +5137949 +1920711 +1920712 +1920718 +5804166 +5714914 +5137573 +5137578 +5137582 +5137595 +5137605 +5137612 +5137636 +5137677 +5137689 +5137706 +5137708 +5803588 +1920218 +5137763 +1749070 +1750166 +5104891 +5104759 +1758003 +1758440 +1758441 +1758461 +1855241 +1868837 +1869057 +1869178 +1869187 +1963096 +1973530 +11826016 +5143303 +5143311 +5143315 +1954496 +1954563 +5143338 +5143354 +5143368 +5143380 +5143384 +5143437 +5143453 +5143506 +5143511 +5143525 +5143575 +5734335 +1954891 +1954911 +6133648 +1955389 +5143651 +1955552 +1955581 +6133676 +1955725 +1955806 +5143675 +5143697 +1956309 +1956384 +5734542 +5734543 +1956440 +1956524 +1956536 +1956629 +1956710 +6133593 +4525068 +1957161 +1957174 +1957266 +1957300 +1957333 +1957368 +1957460 +1957572 +1957583 +1957791 +1957816 +1957854 +5143947 +1958024 +1958045 +1958152 +1958158 +1958163 +1958241 +1958252 +1958255 +1958259 +1958260 +1958275 +1958282 +1958290 +1958305 +1958323 +6544637 +1958454 +1958463 +1958483 +5144027 +1959494 +1959645 +1959652 +1959666 +1959667 +1959682 +1959735 +6133552 +1959876 +1959914 +1959919 +1959948 +10694777 +1960023 +1960181 +1960182 +6133509 +5144092 +5144093 +1960571 +1960595 +1960617 +6133518 +1960686 +1960854 +1960963 +1961013 +1961040 +5734344 +1961052 +1961126 +1961162 +7346236 +1961190 +1961252 +1961647 +1962204 +1962265 +1962268 +1962434 +1962447 +1962516 +9812211 +1962678 +1962839 +1962860 +1963011 +4302252 +5734349 +1963306 +5144345 +1963446 +1963709 +1963733 +1963827 +11644349 +1964024 +1964025 +1964029 +6133500 +1964113 +1964116 +1964195 +1964247 +1964316 +1964437 +6133502 +1964653 +8361848 +1964738 +5144426 +1965166 +1965763 +1965777 +1965795 +1965810 +1965825 +1965841 +1965913 +1966017 +5144431 +5144438 +9919915 +9370070 +5144499 +1966286 +1966302 +1966310 +5734448 +10670854 +1966362 +5144534 +1967011 +1967039 +5144543 +1967245 +1967265 +1967273 +1967445 +1967590 +1967595 +1967597 +1967672 +1967688 +7346240 +1967815 +1967873 +1968147 +1968182 +1968193 +7681733 +1968304 +1968363 +1968730 +1968746 +1968867 +1968951 +11598540 +1968990 +1969357 +1969491 +6133643 +1969621 +1970034 +1970136 +1970213 +1970322 +1970436 +5734405 +6133513 +7346252 +5144677 +5144721 +5144782 +5144787 +5144805 +5144806 +5144864 +5144900 +5144936 +5145009 +5145136 +5145186 +5145260 +5145269 +5145409 +5145522 +5145624 +5145729 +5145735 +9194811 +1971888 +6133516 +1972094 +1972185 +1972234 +1972250 +5145870 +5145965 +5146038 +5146062 +7541913 +1972443 +1972613 +1972614 +1972616 +1972620 +1972631 +10732353 +1972754 +5146282 +1973242 +1973338 +1973358 +1973393 +1973397 +1973414 +5146434 +5146483 +5146496 +5146508 +5146559 +5146566 +5146567 +5146599 +5146601 +5146611 +5146659 +5146677 +5146746 +5146752 +5146762 +5146763 +5146833 +5146837 +5146883 +5146946 +5146961 +5147039 +5147062 +5147150 +5147171 +5147208 +5147214 +5147232 +5147245 +5147306 +5147354 +5147441 +5147478 +5147498 +5147516 +1975198 +6133559 +5147608 +5147638 +11856219 +1975546 +1975553 +1975571 +1975583 +1975597 +1975711 +1975733 +8329661 +1975793 +8160782 +1975805 +1975806 +1975892 +1975897 +1975903 +1975964 +1975979 +5734539 +9356491 +9410573 +9548993 +1976163 +1976212 +1976213 +1976224 +1976228 +1976311 +1976462 +1976463 +1976469 +1976470 +1976483 +5147681 +6097233 +7973517 +1976928 +1977003 +1977007 +1977068 +5147819 +5147827 +5147834 +1977182 +1977184 +1977297 +5734420 +6133548 +5147917 +5147968 +5148043 +5148055 +5148115 +5769028 +1977813 +1977833 +1977863 +6133582 +1977962 +1977967 +1978010 +1978034 +1978045 +1978056 +1978065 +1978114 +1978375 +1978385 +1978398 +1978405 +1978407 +1978422 +1978424 +1978445 +5734388 +1978499 +1978524 +1978529 +4524636 +4524638 +5734519 +6133560 +5148252 +10738407 +1978789 +1978821 +5734396 +1978977 +1978996 +1978999 +6133546 +1979021 +5148286 +1979222 +1979229 +1979308 +1979473 +1979521 +1979561 +1979562 +1979758 +1979781 +1979787 +1979801 +1979806 +1979822 +1980269 +5148436 +5148487 +1980521 +1980532 +11449815 +1980694 +1980811 +1980827 +1980917 +8421569 +1981063 +6133585 +1981357 +1981457 +1981696 +11173690 +10592969 +7345811 +7345813 +1981937 +1981938 +1981998 +1982007 +1982203 +1982267 +1982291 +1982406 +1982500 +1982529 +1982541 +1982636 +1982865 +1982885 +1983052 +1983525 +1983648 +1983755 +1983922 +1983999 +11121180 +5149012 +1984734 +5149174 +1984949 +1985061 +1985152 +1985158 +1985167 +1985191 +1985192 +1985230 +1985707 +6133659 +1985926 +1985993 +1986009 +1986032 +1986052 +1986054 +1986056 +1986061 +5734345 +1986157 +1986166 +1986171 +1986191 +1986220 +1986452 +1986508 +1986522 +1986575 +1986623 +1986779 +1986787 +1986936 +5149308 +5149315 +6133614 +1987204 +5768880 +1987362 +1987377 +1987527 +1987629 +1987665 +1987740 +1987744 +1987766 +1987767 +1987775 +1987776 +1987786 +1987787 +6133591 +4524221 +11650277 +6133534 +11190148 +1988002 +5734451 +1988225 +1988257 +1988306 +1988420 +1988487 +1988593 +8388883 +5149414 +5149438 +5734528 +6133644 +1989355 +1989393 +1989428 +1989942 +1990043 +1990050 +1990066 +1990088 +1990105 +1990150 +5734390 +1990551 +1990582 +1991123 +1991179 +6133501 +5149609 +1991277 +1991310 +1991371 +1991378 +1991779 +1991783 +5149836 +5149843 +10155932 +11098546 +11869776 +1991945 +5734515 +11635419 +1992066 +5149929 +5149986 +6133619 +5734398 +5880533 +5880539 +5880545 +5880550 +5880552 +5880559 +5880563 +8237343 +8632989 +7429212 +9442902 +4524740 +4523560 +4524054 +4524998 +4524376 +4524822 +11828714 +10422582 +10574156 +5880392 +6133595 +6133596 +6133597 +4524070 +4524072 +4524955 +10530208 +11555221 +4525078 +6133667 +6133670 +6133673 +6133674 +6133675 +7346249 +6133637 +6133620 +6133519 +11780161 +6133604 +6133607 +7346237 +6133520 +6133562 +5734379 +11548960 +7345819 +6133523 +6133525 +6133528 +6133542 +6133497 +6133498 +6133575 +6133517 +6133586 +6133635 +10175639 +9932090 +7346256 +7345829 +11652557 +5734535 +7345801 +5734362 +5880478 +6133540 +10755716 +5144190 +5146412 +5734482 +5149499 +5149704 +5149746 +5149768 +5734422 +7443518 +5146303 +5146342 +5146379 +1991462 +1991466 +4302268 +4524393 +10773498 +1942378 +1942383 +1942697 +1942808 +4689929 +5141677 +1943212 +1943223 +1943236 +1943397 +8277078 +5141795 +1943505 +1943619 +8133678 +1944503 +1944504 +1944591 +1944778 +5141924 +1945066 +9050611 +1945088 +1945137 +1945143 +1945173 +1945225 +1945227 +1945569 +1945605 +1945694 +1945710 +1945738 +1945742 +1945748 +1945814 +1945837 +1945856 +1945863 +1945874 +1945878 +1946051 +1946058 +5142067 +1946432 +7346354 +1946695 +1946738 +7389824 +1946917 +1947306 +1947335 +1947385 +1947409 +1947449 +1947456 +1947492 +1947626 +1947673 +1947703 +1947727 +1947740 +1947753 +1947765 +5734665 +1948062 +1948073 +1948464 +1948465 +1948941 +1949008 +1949015 +1949336 +1949366 +7346351 +8828146 +1949794 +1949929 +5142499 +5142599 +8109173 +1950013 +7346356 +1950171 +1950362 +1950521 +1950879 +5977257 +8270406 +7633472 +5142725 +5142729 +5142730 +5142006 +5142032 +5142042 +1869512 +1952878 +1952883 +1952909 +10744228 +1800191 +5109821 +1758613 +9355953 +1758874 +1758878 +1759055 +1759069 +1759083 +4533952 +7972792 +1759153 +1759177 +1759620 +1759667 +1759686 +10329023 +1760104 +1760593 +1760620 +1794361 +4534225 +1760891 +4533255 +1760939 +1760943 +1761041 +1761438 +1761778 +1762244 +6132749 +1762608 +1762657 +6132957 +1762680 +5109506 +5109523 +5109599 +5109670 +5109722 +1763610 +1763727 +1763741 +1764791 +1765010 +1765011 +1765038 +4534245 +5109830 +5109843 +5109848 +5109872 +5109882 +5109898 +5109943 +8352161 +1765658 +1765767 +1766130 +1766131 +1766137 +1766210 +1766410 +7895336 +1766646 +1766741 +1766910 +11034779 +1767134 +1767368 +1767393 +1767511 +1767597 +1767625 +10575632 +1767655 +5110120 +5734744 +5772176 +5772196 +5772199 +5772202 +5772206 +5772210 +5802396 +5883914 +5883925 +6132943 +7345742 +7388922 +8045644 +1768117 +5110200 +1768341 +5110213 +1768568 +1768698 +1768702 +1768771 +1768819 +5110256 +5110258 +1769057 +1769095 +1769194 +1769505 +1769519 +1769566 +1769958 +1769978 +1770150 +1770172 +1770477 +1770530 +4532696 +8393221 +1771385 +7725644 +1771509 +1771531 +1771555 +1772013 +1772094 +6133806 +1772169 +1772179 +5772129 +1772977 +1773163 +1774272 +1774347 +1774797 +4301304 +6115946 +4534046 +4534052 +4534057 +4534719 +1775962 +1775963 +1776067 +1776330 +1776371 +1776619 +1776862 +6132861 +4534463 +5110871 +5110885 +4534299 +1778109 +1778143 +5111535 +5111574 +5772222 +1779435 +1779633 +1779641 +1779690 +1780378 +1781233 +1781234 +5111974 +5111980 +1781803 +1781841 +1782168 +1782177 +1782341 +1782354 +1782457 +11763567 +1782543 +1782560 +1782615 +1782627 +1782672 +1782726 +1782757 +1782763 +1782777 +1782803 +1782841 +1782872 +1782927 +1782948 +1783043 +6133026 +5112291 +5714973 +5715004 +5734845 +5772349 +5772351 +1783855 +1783861 +1784359 +1784513 +1784761 +1784853 +4534290 +1785145 +1785162 +1785181 +1785185 +1785286 +4532886 +4532888 +4532890 +1785314 +1785322 +1785329 +1785367 +1785883 +1785887 +1785888 +1785895 +1786007 +1786017 +8292872 +1786360 +1786448 +1786452 +1786515 +1786573 +1786619 +1786902 +1787112 +1787213 +1787267 +1787367 +1787373 +1787381 +4687681 +9268082 +1787400 +1787504 +1787506 +1787590 +1787610 +1787631 +1787841 +1788522 +4534011 +1788846 +1788856 +1788917 +1789071 +1789076 +1789086 +4533924 +1789553 +4534166 +1789753 +1789957 +1790002 +1790084 +4533115 +1790361 +1790364 +1790376 +9174377 +1791384 +1791422 +1791784 +1792061 +1792292 +1792377 +1792411 +1792414 +1792418 +1792426 +1792431 +1792449 +1792475 +10684776 +5113370 +1792996 +1793243 +1793246 +1793689 +1793877 +1793986 +1795065 +1795068 +4532908 +6133011 +7869346 +1795854 +1795957 +1796007 +1796117 +1796145 +1796169 +1796217 +4688172 +1796423 +1796463 +8105817 +1796678 +1797030 +1797735 +1798060 +4533431 +4533433 +4533444 +6133001 +6133002 +6133006 +6133007 +6133010 +1798090 +1798372 +1798916 +1798931 +1798971 +1798974 +1799135 +5113951 +1799695 +1799701 +1800004 +1800032 +1800149 +9536457 +4534389 +4534207 +10638451 +4532811 +4533273 +8890502 +4534398 +6544687 +4532269 +4533123 +4534408 +4534533 +6132989 +6132762 +6133075 +6132781 +11311045 +5110644 +6132797 +5114198 +1763072 +5109385 +5772063 +9038042 +8491927 +4534681 +4534685 +4534686 +1792555 +8108800 +1771634 +1771650 +1771678 +1771698 +1770880 +1771040 +1771214 +1771245 +6132931 +7940536 +10841562 +5113847 +5113853 +5772309 +5108671 +5108705 +5108724 +5108737 +5108752 +5108761 +5108787 +5108794 +5108796 +5734817 +6132880 +9243764 +1759394 +1789512 +4533360 +10933525 +5110282 +11566649 +11615549 +11731155 +4532208 +4532239 +4532253 +4532266 +6115772 +6115820 +6115822 +6115830 +1782249 +1782273 +1782279 +1782289 +10063383 +1767293 +9325654 +10458175 +10683012 +10702885 +1822487 +1822490 +1822493 +1822587 +1822610 +1822613 +1822787 +1822796 +1822819 +1822830 +1822848 +1822852 +1823294 +1823444 +6133742 +1823573 +5118565 +7346263 +6133720 +1823706 +10996761 +5118582 +1824242 +5734235 +6133692 +7875265 +1824330 +1824338 +1824354 +1824390 +1824666 +1824751 +1824766 +1824845 +1824997 +1825064 +5118859 +1825077 +1825082 +1825083 +4534909 +4534914 +1825156 +1825176 +1825336 +7346284 +1825539 +5118974 +5118978 +1825786 +7345777 +1825967 +1825971 +1825983 +1826022 +1826033 +1826108 +1826129 +11322712 +5118996 +5119000 +6133700 +10510959 +11059353 +6133750 +1827125 +1827349 +1827408 +1827414 +1827484 +4534869 +6133691 +9883140 +5119181 +5119211 +5119223 +5119239 +5119245 +1827649 +1827650 +1827687 +1827711 +11435704 +1828162 +1828180 +6201790 +7346286 +6133680 +6133681 +6133684 +6133687 +6133688 +7346276 +9921001 +5118837 +5118841 +7346271 +7346273 +9486293 +1822502 +5806166 +11464595 +1892821 +5127867 +5127893 +5127932 +5127955 +7346346 +1893137 +1893266 +1893329 +12106975 +1893546 +1893612 +1893793 +1893923 +1893951 +4704279 +8832485 +8982591 +1894002 +1894012 +1894164 +1894268 +5882039 +5128161 +5128182 +7712938 +1894714 +4535614 +4535630 +4535636 +8049830 +10639484 +1894840 +4535827 +1895037 +4535809 +4535817 +1895159 +5128323 +5128326 +5128353 +5128357 +9804158 +1895499 +1895609 +1895667 +1895867 +1895875 +1895956 +1895992 +1896105 +1896304 +5128519 +1896841 +1896922 +1897664 +1897685 +1897747 +1897817 +1898250 +1898286 +4299368 +5129293 +7346344 +1898434 +1898441 +1898544 +5129378 +5129417 +1898946 +1898970 +1898988 +1900890 +1900897 +1901213 +1901399 +1901404 +1901411 +1901427 +1901428 +1901429 +1901435 +1901463 +1901832 +1901850 +5130369 +5130444 +5130464 +5130471 +5130476 +5130521 +5130542 +1902533 +1902543 +1902560 +1902568 +1902572 +1902586 +1902749 +8140883 +8189761 +4535689 +10577473 +5130775 +5130813 +5130814 +5130851 +5130904 +5130908 +5130944 +1904272 +1904701 +1904719 +1904887 +1904938 +1904943 +1904948 +1904996 +1905079 +6221746 +1905383 +1905396 +1906552 +8208583 +1907436 +1907498 +1907511 +1907534 +1907541 +1907547 +1907580 +1907620 +1907625 +1907687 +4535754 +1908352 +1908367 +1908660 +1908702 +1908840 +1908871 +1908929 +1909123 +7346301 +8978362 +1909319 +10656625 +1909398 +1909607 +1909659 +1909810 +1909865 +1910706 +1910809 +1911093 +1911112 +1911168 +1911278 +1911298 +1911461 +1911503 +7728366 +5133687 +5133689 +4535592 +1911736 +7809779 +8078362 +5133693 +5133695 +1912325 +1912372 +1912428 +4299535 +4299565 +4299576 +4299597 +4299599 +5772890 +7428726 +4535581 +5134098 +8312017 +1913105 +1913175 +1913178 +1913328 +5134469 +5134517 +5134559 +5134661 +5134667 +5134682 +5134693 +5134810 +5135026 +5135191 +5135355 +5714507 +7738295 +8233062 +8314088 +9915028 +9967126 +1915079 +1915080 +1915140 +1915154 +1915325 +11516142 +11535847 +1916410 +1916509 +1916758 +5136594 +5136681 +5136713 +5136939 +5137085 +5137166 +1918321 +1918394 +1918406 +1918408 +1918411 +1918416 +1918467 +1918495 +1918497 +1918509 +1918533 +1918553 +1918554 +1918627 +1918669 +1918843 +4535510 +10000384 +10043827 +5130587 +5130682 +5131096 +5131142 +5131192 +5131293 +5131339 +5131443 +5131467 +5131495 +5131520 +5131555 +5131585 +5131593 +10228568 +10277877 +10508423 +11425145 +5132154 +5132183 +5132191 +5132238 +5132479 +7346328 +7346335 +8001799 +5806167 +7642610 +11525418 +5128644 +5129000 +10201273 +5131910 +5881551 +8138711 +8549720 +1910628 +1910629 +1910662 +1902143 +1902182 +1899433 +1899818 +5129913 +7768674 +7934873 +8168644 +8393082 +1914701 +1914708 +1914734 +1914749 +7346340 +1918584 +1951370 +1951412 +1951462 +1951505 +1951507 +1951522 +1951529 +1951542 +1951557 +5142870 +1951631 +9512631 +1951649 +1951671 +1951675 +1951747 +9156165 +1951791 +5734305 +1951818 +1951840 +1951844 +1951859 +1951881 +5734326 +1951919 +1952014 +1952034 +1952052 +1952062 +1952147 +1952175 +1952177 +1952229 +5142948 +1952281 +5143007 +5143048 +5143049 +5143076 +5143080 +1952449 +1952481 +1952532 +10782264 +1952551 +1952611 +1952685 +5143116 +5143129 +5143147 +1952857 +9502606 +5885428 +8604089 +6097228 +1868211 +1868409 +4702564 +6544581 +1868470 +5141581 +5141590 +1735121 +1941864 +5121613 +1842097 +1842695 +9755262 +1843564 +1843602 +1730519 +1730543 +8292351 +5101394 +1730948 +1730978 +4525641 +1731598 +10450446 +8402212 +1872359 +1872361 +1872368 +1878626 +6133117 +1878744 +1878782 +1878862 +1878879 +1878895 +1878904 +1878939 +1879125 +1879141 +1879227 +1879337 +1879339 +1879340 +1879379 +5734212 +1879408 +1879452 +1879471 +5126212 +5126217 +1879630 +1879731 +1879735 +10915497 +1879970 +1880062 +1880064 +1880138 +1880140 +5126635 +5126637 +1880353 +1880451 +1880464 +1880465 +9524458 +6133225 +1880852 +1880858 +1880968 +1881089 +1881121 +1881151 +9819403 +4531687 +1881329 +1881336 +1881515 +4531713 +1881834 +1881964 +1882021 +1882210 +1882253 +1882266 +1882272 +5126834 +1882753 +1882767 +1882884 +1882901 +1882905 +10156181 +1882930 +1882965 +1883067 +1883161 +5127097 +1883873 +1883943 +1883951 +1884051 +1884061 +4531690 +1884212 +4531708 +1884229 +9294363 +1884434 +1884437 +1884449 +1884461 +1884465 +1884479 +6120980 +1884816 +1884835 +1884844 +1884858 +1884877 +4532122 +1884908 +1884909 +4532146 +1884970 +1885012 +1885262 +1885263 +1885569 +1885623 +1885630 +6133181 +1885745 +1885826 +1885919 +1885945 +1885994 +1886251 +1886320 +1886362 +8223165 +1886526 +1886587 +1886700 +1886720 +1886726 +1886729 +7562564 +1886929 +1887054 +1887290 +1887509 +1887586 +1887691 +1887701 +1888027 +1888092 +4531968 +1888324 +1888346 +1888484 +1888537 +1888619 +1888733 +1888743 +1888759 +1888891 +1888893 +1888906 +1888911 +1888913 +9535420 +1889039 +1889043 +1889053 +1889071 +1889074 +1889239 +1889249 +1889270 +1889272 +1889277 +1889287 +1889356 +1889358 +1889370 +1889552 +1889563 +1889942 +1890012 +1890031 +5127521 +1890097 +1890187 +9519191 +1890287 +1890320 +1890335 +1890343 +10180624 +1890410 +1890487 +1890534 +1890576 +1890670 +1890699 +1890772 +1890898 +1891059 +1891167 +1891190 +1891326 +1891339 +1891386 +1891426 +1891473 +1891493 +4532022 +1891533 +1891583 +1891636 +1891758 +1891889 +1892153 +1892242 +10141437 +11056379 +9674732 +1884255 +1884370 +5884851 +6133139 +6133141 +5771877 +4532125 +9967529 +10145421 +6120803 +6133232 +6121010 +10513366 +10397209 +6133154 +10959264 +6133158 +5126675 +5126680 +7446048 +8532380 +8537359 +8823068 +8858121 +9100030 +9137965 +1886374 +1889716 +1889765 +1889833 +5127592 +5127609 +5127629 +5127644 +5127656 +5127669 +5127675 +5127683 +5127688 +5127698 +5802339 +1887108 +4532050 +4532088 +4532095 +6121184 +1888638 +1883885 +4532150 +4532160 +5771880 +10410699 +1846111 +1846133 +1939597 +1830879 +1831009 +1831136 +4708183 +5122430 +5122439 +1854824 +1854849 +1858637 +1858674 +1858698 +1858775 +1859046 +1859177 +1859305 +1859453 +9749806 +6133397 +1859932 +1860026 +4536472 +4536483 +1973467 +5123221 +1865593 +10014340 +1865650 +1865659 +1865660 +1865666 +1865671 +9914882 +9972403 +1866237 +5734291 +1866356 +6106943 +1866491 +1866530 +1866549 +1866556 +1866568 +5124880 +5124911 +10047346 +1867820 +1867928 +8439879 +9983244 +1867991 +1867993 +11643393 +11670751 +11729388 +5124716 +5120278 +1841946 +10019169 +10005133 +1861451 +1861456 +1861457 +1861488 +1861494 +1861644 +1861663 +1861665 +1861673 +1861697 +1861705 +1861714 +1861721 +1861797 +1861862 +5123674 +1861933 +1861936 +1861937 +1861938 +1861949 +1861951 +6106744 +1861975 +1862008 +1862061 +1862066 +1862072 +5123676 +5123685 +1862293 +1862363 +1862370 +1862394 +1862401 +1862403 +10374414 +11907754 +1862430 +1862449 +1862454 +1862468 +1862475 +1862481 +1862516 +1862517 +5123707 +5123709 +1862572 +1862578 +1862580 +1862719 +1862765 +1862774 +1862837 +1863034 +5123922 +5734719 +1863354 +1863394 +1863467 +1863646 +5124007 +5124029 +9310369 +1863829 +1863848 +1863909 +1863910 +1863944 +9578319 +1864126 +1864135 +1864161 +1864358 +1864377 +5124121 +5124143 +5124233 +11738734 +11954157 +1864652 +5124300 +5124304 +5124305 +5124332 +5124348 +5124374 +5124415 +5124433 +1864793 +1864796 +5734713 +5885399 +6099041 +6106759 +7346401 +10193618 +6106647 +5123815 +5123876 +5123889 +5123890 +8810912 +10189661 +10191275 +10436020 +1992634 +1992883 +10842838 +10994020 +1993036 +1993043 +1993419 +1993637 +1953196 +1953326 +1953356 +6132711 +6132712 +6132715 +1953407 +1953423 +1953729 +11467944 +6132725 +6132726 +6132723 +6132729 +1954037 +5143241 +5143249 +5143266 +1954120 +6132728 +1830099 +1830380 +1830407 +1754135 +5105642 +1754368 +1754380 +1754400 +1754465 +1754511 +1754516 +1754535 +11737872 +12075408 +11175615 +1754902 +1754919 +1754933 +1755131 +5734138 +1755237 +1755248 +1755253 +1755276 +5106160 +5107644 +7410701 +7674502 +7778368 +7903078 +7955974 +8426357 +1757652 +5108318 +5108334 +11140464 +11860016 +1757853 +5108346 +5108349 +4522753 +9004359 +1939688 +1855630 +1855747 +8734090 +1856384 +1856620 +1856668 +1856768 +1856867 +1856971 +1857258 +1857267 +1857380 +1857626 +1857828 +1857829 +1857924 +1857938 +1857978 +1858283 +8178453 +1858557 +1937707 +1937723 +1937754 +1937819 +1937826 +1937892 +1937911 +1938007 +1938052 +1938058 +1938069 +1938088 +1938114 +1938162 +1938168 +1938174 +4692485 +4692504 +4693382 +5734569 +8225376 +1936988 +1936993 +5141144 +5141177 +5141179 +5141185 +5141187 +5141199 +5141212 +5141215 +5141226 +5141229 +5141233 +5141242 +1937490 +10761559 +1937556 +1937566 +1937570 +1937580 +1937582 +1937594 +1937613 +1938214 +1938226 +1938230 +1938233 +1938300 +1938612 +1938796 +1938810 +1938955 +1939056 +1939086 +1939168 +5141311 +5141317 +8546322 +8574752 +1835098 +1837172 +1839560 +5770922 +5770942 +12188993 +1800238 +10213314 +6133777 +1800528 +1800539 +10737993 +1800572 +1800686 +1800696 +1800821 +5114394 +5114400 +11873966 +4534798 +9544823 +1800881 +5114425 +1800934 +6133780 +1801000 +1801001 +1801073 +1801080 +1801084 +1801170 +1801196 +5114465 +1801461 +1801490 +10066605 +10510325 +4534779 +4534782 +6112606 +6112613 +6112661 +6133809 +6133811 +6133813 +6133814 +1801993 +1802090 +8883183 +1802113 +1802120 +1802229 +1802244 +1802280 +1802337 +1802702 +1802783 +1802827 +1802919 +1802939 +1803022 +1803035 +1803039 +1803065 +1803073 +1803108 +10942408 +4534767 +6133803 +5114311 +8244266 +10987178 diff --git a/dev/releases/mambo_v3/presets/europe.classes b/dev/releases/mambo_v3/presets/europe.classes new file mode 100644 index 0000000..44d827b --- /dev/null +++ b/dev/releases/mambo_v3/presets/europe.classes @@ -0,0 +1,3014 @@ +1934693 +1860621 +1860628 +4522795 +1860659 +1860664 +1860668 +1860671 +1860688 +1860709 +1860711 +4522933 +5123582 +1732063 +1732072 +1732416 +1732419 +1732452 +1732457 +1732521 +1732565 +1732662 +1732680 +1732685 +1732697 +1733258 +1733484 +4525266 +4525268 +4525270 +4525273 +1733620 +1733755 +5101678 +5101717 +5101745 +5769191 +1734453 +1734704 +1734794 +1734826 +5102287 +11529292 +1831861 +1831863 +1831890 +1845270 +1845368 +1845548 +1845565 +1845607 +4529566 +4528100 +1846374 +1846604 +1846657 +1846715 +1846729 +1846916 +1847061 +1847097 +1847111 +1847407 +4528547 +1847572 +9262981 +1847956 +9546514 +1848150 +1848202 +10450501 +1848219 +9868978 +1848273 +1848356 +1848378 +1848426 +4528539 +1848596 +1848610 +1848636 +1848657 +1848669 +1848690 +1848713 +1848714 +1848717 +1848730 +1848741 +1848753 +1848864 +1848868 +1849104 +1849267 +1849273 +1849284 +1849294 +1849477 +11052757 +11080751 +1849531 +1849539 +1849552 +1849630 +1849856 +1849897 +1849924 +1850008 +1850042 +1850045 +1850076 +1850077 +1850106 +1850238 +1850246 +11576787 +1850279 +1850302 +1850335 +1850386 +1850394 +1850450 +1850497 +1850506 +4527903 +1850522 +1850533 +1850538 +1850570 +1850640 +4528529 +1850781 +1850971 +1851000 +1851010 +1851011 +5122037 +5122113 +1851203 +1851220 +1851337 +1851347 +1851555 +5122206 +4527972 +1852150 +1852159 +1852165 +1852177 +1852311 +1852430 +11287091 +4527957 +1848920 +1829533 +1829588 +1829776 +1829785 +1829799 +1829823 +1829974 +4525354 +1828637 +6097236 +8871600 +9182336 +5769272 +7623903 +8912441 +5879654 +7448174 +4525610 +1751852 +1861395 +1845866 +1845952 +1845962 +1845965 +1845982 +1839094 +1841261 +1830838 +1830843 +1830122 +1830125 +1830131 +1830144 +1830147 +1830152 +1830186 +1830191 +1830207 +1830221 +1830241 +1830243 +1830262 +1830266 +1830271 +4525476 +4525487 +1831643 +1841296 +4528593 +8271010 +1853723 +5880147 +9734171 +11418741 +11513018 +11571523 +12151997 +12160125 +12022449 +7908344 +1761111 +1764531 +1769103 +1769897 +7701550 +8837162 +1772793 +4532500 +1777289 +8141741 +1777631 +1777695 +1779399 +1780149 +1780150 +8193562 +1783882 +1786980 +1786985 +1788553 +1790692 +1790816 +5113078 +5113084 +5113234 +9310626 +1792210 +1797178 +1797258 +1797276 +1797333 +1797349 +1797367 +1797374 +1797429 +1797454 +1797479 +1797527 +1797542 +4532461 +4532471 +4532473 +8016905 +8756768 +1798346 +1798408 +4532493 +1798449 +1798481 +1798504 +1798594 +1798802 +1798807 +4532351 +4532352 +4532357 +1799708 +1803163 +1803824 +1804071 +1804906 +1805110 +1805155 +4532608 +7874258 +1807969 +1808195 +1808440 +1808450 +1808752 +5115701 +5115771 +5115777 +1809210 +1810099 +5116416 +1813114 +5117189 +5117200 +7656811 +1814552 +1814630 +1814653 +5117399 +5117400 +1816881 +1817797 +8326103 +1819050 +1819145 +4532293 +4532297 +1819268 +8407461 +1819699 +9331464 +1819873 +1819928 +6122092 +7657803 +8361973 +1820372 +1820406 +12253343 +5884571 +7596232 +5771982 +6097214 +4532544 +4532614 +4532516 +4532532 +4532565 +12089608 +8148822 +11962292 +12135372 +11033463 +11812181 +5115854 +5115872 +5115874 +5116475 +8038357 +8165185 +6097254 +5116698 +1805535 +9198767 +1788635 +4532395 +4532405 +4532408 +4532412 +1780869 +8000103 +4532534 +1768626 +4532508 +4532510 +1760244 +1760246 +5113030 +5113036 +1821856 +1821911 +1819170 +1812394 +8237987 +4532366 +4532453 +1820039 +1772822 +1771772 +1771779 +1777517 +1860979 +1860983 +1860987 +1860994 +1861011 +1861031 +4522911 +4522916 +4522919 +4522922 +12318291 +4522886 +4522890 +4522891 +4522896 +1860765 +1860768 +1860852 +1860857 +7767114 +7851302 +7961640 +1992378 +1992504 +1852956 +1852978 +1835432 +1835433 +1835456 +1835457 +9724183 +1837343 +1837420 +1837429 +1837464 +1837515 +4529064 +7958169 +8015612 +1839293 +1839296 +1840297 +1840301 +1840345 +1840346 +1840360 +1840371 +1840380 +1840408 +1840478 +1840483 +1840485 +1840555 +1840566 +1840570 +1840581 +1840596 +1840621 +4529186 +5119808 +1831752 +1852751 +1852787 +1852831 +9473121 +4529630 +5125075 +5125104 +8416348 +1751236 +1751290 +1751298 +1751299 +1751368 +1751457 +4535884 +4535904 +1860408 +4525177 +5123339 +5123394 +5769164 +5123461 +5123474 +1751207 +1751216 +1869595 +1869656 +1869803 +1869852 +1869858 +1869976 +1870202 +1870249 +1870250 +1870450 +1870650 +1870988 +5125306 +1871160 +1871212 +1871217 +1871252 +1871264 +1871407 +4531402 +4531409 +1871451 +4531365 +4531376 +1871683 +1871698 +1871783 +1871826 +4531427 +7673242 +10787705 +1872848 +1872901 +1872904 +1873048 +1873051 +1873079 +1873215 +1873411 +4530947 +4530951 +1873776 +1873780 +1873783 +4531237 +4531264 +5125689 +1874168 +1874192 +1874204 +1874211 +1874229 +1874269 +1874280 +1874295 +4531145 +4531147 +4531158 +1874375 +1874743 +9782192 +1875008 +1875120 +8219149 +1875327 +1875376 +1875409 +1875429 +4531242 +1875631 +1875633 +1875680 +1875682 +1875687 +4531284 +1875827 +1875830 +1875865 +1875869 +1875918 +1875940 +1875952 +1875958 +1876063 +1876329 +1876357 +1876409 +1876512 +1876542 +1876623 +1876854 +1877038 +1877310 +1877341 +1877345 +1877368 +4531246 +9111961 +5126052 +1877941 +1877986 +1877988 +1878067 +4531417 +4531425 +4531429 +1878197 +1878350 +1878470 +1878471 +1878490 +1878500 +1878586 +1890065 +5884888 +11728049 +1877035 +1872315 +1748805 +1940158 +4525859 +4525884 +5141493 +5141501 +1940504 +1940510 +1940575 +1940639 +1940644 +1940717 +1940744 +1940768 +4525777 +4525803 +1940807 +1940838 +4525846 +1941330 +1941348 +1941377 +1941437 +10309794 +12211069 +1939879 +1736377 +1736412 +1736425 +1736447 +1736484 +1736511 +1736528 +1736560 +1736565 +1736601 +1736623 +5102628 +5102642 +1736727 +1736800 +1736898 +1736904 +1736905 +1736906 +1736945 +4530406 +4529931 +1737131 +1737342 +1737368 +1737413 +1737437 +1737491 +1737497 +1737509 +4530608 +7466487 +1737524 +1737526 +1737533 +1737542 +1737552 +1737650 +1737753 +1737775 +1737776 +1737783 +1737847 +1737893 +1737924 +4530002 +8186212 +1738050 +1738163 +1738222 +1738245 +1738317 +1738322 +1738337 +1738373 +1738422 +1738429 +1738514 +8420632 +8869900 +5102931 +5102951 +1738687 +1738700 +1738722 +1738777 +1738794 +1738839 +1738883 +1739042 +1739043 +8086347 +1739128 +1739151 +1739272 +1739284 +1739290 +1739337 +1739377 +1739381 +5102982 +1739449 +1739451 +1739461 +1739471 +1739605 +1739748 +1739797 +1739816 +1739819 +1739833 +1739919 +1739922 +1739931 +1739980 +1739999 +1740005 +1740053 +1740069 +1740116 +1740120 +1740155 +1740174 +1740183 +1740185 +1740305 +1740374 +1740392 +7797515 +8215326 +1740482 +1740518 +1740533 +1740567 +1740570 +1740623 +8094357 +1740762 +1741056 +1741147 +1741253 +1741258 +1741340 +1741341 +1741368 +4530151 +8345820 +5103066 +5771357 +1741545 +1741551 +10838422 +1741590 +1741593 +1741615 +1741633 +1741634 +1741667 +1741752 +1741756 +1741765 +4530424 +1741820 +10807169 +11093909 +1742106 +1742142 +1742185 +1742263 +1742346 +1742402 +5103451 +5103502 +5103613 +5103736 +5103948 +5771350 +7975250 +1743196 +8313553 +5103998 +7661023 +11846897 +1743453 +1743475 +7877231 +1743532 +1743588 +1743604 +1743613 +5104056 +6097235 +1743641 +1743643 +1743710 +1743714 +4530214 +1743730 +1743768 +1743775 +1743782 +4529900 +4529908 +4529915 +1743828 +1743856 +1743862 +1743867 +1743898 +1744071 +1744136 +1744180 +1744224 +4530632 +1744416 +1744498 +1744526 +1744542 +1744588 +1744593 +1744693 +1744699 +1744709 +1744714 +1744728 +1744731 +1744739 +1744742 +1744748 +1744763 +1744777 +1744782 +1744789 +1744808 +1744810 +1744860 +1744896 +1744901 +7964262 +1745013 +1745079 +10844862 +1745131 +1745558 +1745561 +1745579 +1745600 +1745630 +1745634 +1745636 +1745643 +1745659 +1745676 +1745678 +1745705 +1745724 +1745725 +1745737 +1745756 +1745762 +1745771 +1745781 +1745787 +1745788 +1745816 +1745827 +1745830 +8162538 +8369868 +1745925 +1746027 +8424972 +1746174 +1746413 +1746440 +1746613 +1746644 +1746666 +1746689 +1746775 +1746832 +1746856 +1746876 +1746910 +1747050 +1747141 +5104442 +1747738 +4530138 +5104558 +1748203 +1748321 +5104597 +6097234 +7588222 +9242559 +1748456 +1748720 +5104641 +8691947 +10580256 +5103121 +5103176 +5103181 +5103185 +5103227 +5771227 +5771229 +5771230 +5771232 +5771236 +5771239 +5771241 +5771243 +5771249 +5771255 +5771256 +5771258 +5771259 +1831780 +4525500 +4525503 +4525505 +4525510 +4525530 +4525540 +4525547 +4525557 +4525562 +1920851 +1920864 +1920892 +10556522 +1921466 +1921521 +1921590 +7387466 +1922197 +10854079 +1922311 +1922343 +8016522 +1922572 +1922584 +4535092 +1922937 +1923019 +1923037 +12165672 +5138298 +5138492 +5138543 +5138561 +5714680 +1923796 +1924077 +1924082 +1924097 +5138681 +1924713 +11470119 +1924867 +1925221 +1925233 +7354189 +4535172 +1925381 +1925410 +1925454 +1925918 +1925962 +1926054 +9816676 +1926324 +1926385 +1926861 +5882965 +1928248 +5139040 +5139156 +1928945 +1928960 +1929270 +1929659 +1929697 +5792092 +8356768 +1930110 +1930904 +4535106 +1931179 +1931509 +1931779 +1931788 +1932393 +1932411 +1932473 +1932517 +1932551 +1932752 +1932960 +1932976 +5140214 +5140244 +5140436 +5140443 +5772702 +5772749 +7634721 +7664111 +9954885 +1933583 +1933649 +1933793 +1926166 +1926260 +11874998 +1933095 +1933126 +1933138 +1933163 +1933204 +1924494 +1752383 +4522322 +5105339 +1919221 +1919223 +1919317 +1919320 +1919330 +1919333 +4535285 +7981372 +1919698 +1919706 +1919712 +1919716 +1919966 +1920237 +1920258 +1920259 +1920395 +1920491 +1920494 +1920496 +1920498 +1920502 +1920506 +1920509 +1920512 +4535307 +5137902 +5137903 +5804895 +1920707 +1920709 +1920712 +4535271 +5137578 +5137582 +5137595 +5137612 +5137636 +5137677 +5137682 +5137695 +5137706 +5137708 +8203812 +1920218 +1748890 +1748922 +1748942 +1749050 +1749070 +1749164 +1749449 +1749661 +1749713 +1749744 +1749846 +1749869 +1749908 +1749921 +1749929 +1749936 +1749948 +1749954 +1749959 +1749975 +1750051 +1750076 +1750097 +1750131 +1750143 +1750159 +1750166 +1750288 +1750326 +5104772 +5104781 +5104797 +5104829 +5104882 +5104891 +5104903 +5104927 +5104940 +5105054 +5105088 +5105106 +5105158 +5976947 +1751051 +5104759 +1749596 +1749608 +1749635 +8741260 +1735532 +4527339 +4527342 +1731826 +1731837 +1731860 +1855235 +1855241 +1954490 +1954563 +5143380 +5143453 +5143477 +1955479 +1955484 +5143651 +1955694 +1955856 +4524588 +5143675 +5143697 +1956440 +1956524 +1956599 +1956639 +1956710 +4525068 +1957266 +1957286 +1957300 +1957556 +1957565 +1957570 +1957572 +1957579 +1957583 +1957611 +1957632 +1957673 +1957706 +1957718 +1957746 +1957791 +1957816 +1957822 +4524320 +8172949 +1957845 +1957852 +1957854 +4524421 +4524424 +4524426 +5143944 +5143947 +1958024 +11554842 +1958065 +1958323 +1958515 +1959383 +1959395 +1959423 +1959436 +1959461 +1959467 +1959473 +1959682 +1959735 +1959799 +1959876 +1959914 +1959919 +1960617 +1961013 +1961037 +1961040 +1961068 +1961190 +7741315 +1962204 +1962265 +1962268 +1962434 +1962516 +9812211 +10004969 +1962584 +4524568 +1962636 +1962860 +1962961 +1962972 +1962990 +1963011 +4302252 +1963168 +1963306 +1963446 +1963463 +1963587 +1963709 +1963710 +1963755 +1964189 +1964191 +1964195 +1964401 +1964437 +1964471 +1964637 +1964653 +1964657 +8361848 +1964836 +5144426 +1965166 +1965197 +1965208 +1965345 +1965640 +1965763 +1965777 +1965795 +1965810 +1965825 +1965841 +1965913 +1965996 +1966017 +1966351 +1966358 +1966854 +1966886 +5144534 +1967003 +1967006 +1967011 +1967025 +5144543 +1967245 +1967265 +1967273 +1967452 +1967597 +1967803 +1967815 +1967873 +7681733 +1968678 +1968686 +1968837 +1968867 +11598540 +1968990 +1969291 +1969339 +1969463 +1969954 +1969958 +4523707 +1970213 +1970227 +1970243 +1970259 +1970284 +5144677 +5144721 +5144782 +5144787 +5144805 +5144880 +5144900 +5145009 +5145136 +5145186 +5145255 +5145260 +5145269 +5145409 +5145502 +5145522 +5145729 +7753668 +8014296 +9627567 +1971847 +1971852 +1971858 +1971888 +1971986 +1972120 +1972185 +1972187 +1972234 +1972250 +1972278 +1972342 +1972374 +1972377 +5145870 +5145965 +7541913 +7624494 +7960566 +1972434 +1972449 +1973300 +1973323 +1973327 +1973414 +7996464 +5146420 +5146440 +5146476 +5146496 +5146510 +5146525 +5146528 +5146559 +5146599 +5146601 +5146611 +5146651 +5146659 +5146677 +5146693 +5146720 +5146762 +5146774 +5146786 +5146815 +5146833 +5146837 +5146842 +5146852 +5146862 +5146883 +5146899 +5146908 +5146920 +5146927 +5146946 +5146961 +5147002 +5147030 +5147038 +5147039 +5147041 +5147043 +5147058 +5147062 +5147071 +5147099 +5147145 +5147150 +5147155 +5147165 +5147171 +5147193 +5147208 +5147212 +5147232 +5147245 +5147259 +5147287 +5147319 +5147354 +5147395 +5147415 +5147437 +5147441 +5147478 +5147492 +5147513 +5147516 +5147534 +5147560 +7919880 +7988195 +8067894 +8366158 +1975198 +5147608 +5147638 +1975341 +1975546 +1975553 +1975571 +1975733 +8329661 +1975793 +8160782 +1975897 +1975903 +1976163 +5147681 +6097233 +7973517 +8414310 +8955497 +5147794 +1976993 +1977003 +1977007 +1977068 +4523725 +5147827 +5147834 +1977300 +5769028 +5148247 +5148248 +1977962 +1977967 +1977971 +1978056 +1978065 +1978114 +1978375 +1978445 +4524636 +4524638 +10712554 +4524890 +4524902 +5148264 +1978770 +1978776 +1978821 +1978977 +5148286 +1979308 +1979430 +1979473 +1979781 +5148394 +5148424 +5148436 +5148462 +5148475 +5148486 +5148487 +1980521 +1980525 +8421569 +1981696 +1981998 +1982406 +1982458 +1982500 +1982525 +1982529 +1982541 +1982542 +1982592 +1982636 +1982671 +1982746 +1982770 +1982779 +1982790 +1982791 +1982838 +1982867 +1982885 +1982918 +1982924 +1983000 +1983034 +1983039 +1983052 +1983062 +1983101 +1983111 +1983170 +1983260 +1983288 +1983387 +1983393 +1983441 +1983442 +1983525 +1983528 +1983548 +1983558 +1983648 +1983705 +1983755 +1983756 +1983888 +1983896 +1983922 +1983967 +1983997 +1983999 +1984033 +1984117 +7752082 +7993353 +8015895 +8026858 +8262357 +8394261 +1984734 +1984942 +1984949 +1984954 +7905361 +1985522 +1985573 +1985734 +1985742 +1985760 +1986052 +1986056 +1986157 +1986166 +1986171 +1986191 +1986220 +1986367 +1986452 +1986522 +1986575 +1986604 +1986877 +5149315 +5768880 +1987527 +9137631 +1987578 +4525091 +4525093 +4525097 +4525103 +6118530 +1987650 +1987737 +1987744 +4524221 +1988007 +1988019 +1988064 +4524513 +1988390 +1988506 +1988593 +1988602 +1988642 +1988684 +7555991 +8388883 +1988762 +5149414 +5149438 +1988881 +1989428 +1990066 +1990150 +1990533 +1990551 +1990582 +5149474 +1991179 +1991371 +1991532 +5149836 +5149839 +5149843 +1991846 +1992066 +8180900 +5880512 +5880533 +5880545 +5880550 +5880552 +5880559 +5880563 +8237343 +8632989 +5769062 +5769068 +5769072 +7429212 +11654024 +7507369 +9414984 +9563355 +1989594 +4524740 +7990739 +4523556 +4523560 +4523564 +4524052 +4524054 +4523486 +4523461 +4525034 +4524376 +4524822 +4524712 +4523522 +4522974 +4524541 +4523519 +4524070 +4524072 +4524403 +4524793 +4524914 +4524922 +4524929 +4524951 +4524955 +4524961 +4524962 +4525078 +9220953 +9249651 +5144190 +5146412 +5768597 +5149499 +5149569 +7769543 +8851663 +4523880 +4523883 +4523885 +5149659 +5149665 +5149667 +5149704 +5149717 +5149746 +5149768 +5149780 +5149784 +5149787 +5149820 +7443518 +5146342 +5146379 +4302268 +4524393 +5141677 +1943397 +4535386 +8178854 +8277078 +8073674 +8133678 +8273661 +1945569 +1945877 +1946661 +7389824 +1947306 +1947335 +5142338 +5142352 +1949715 +1949784 +1949794 +1949850 +1949852 +1949877 +1949929 +1949938 +1949954 +1950006 +5142394 +5142599 +7683096 +8109173 +8270406 +7633472 +10715410 +4535396 +5142006 +5142032 +1869467 +1869478 +1869489 +1869512 +9359597 +5769709 +1735844 +1735855 +9400895 +9530977 +10963226 +10982815 +5109821 +1758878 +1759055 +1759069 +1759079 +1759083 +1759097 +4533952 +7972792 +1759153 +1759159 +4533211 +1759407 +1759597 +1759620 +1759661 +1759667 +1759668 +1759673 +1759686 +1760104 +7444489 +9060267 +1760593 +1794361 +4533957 +4534225 +8708745 +1760857 +1760867 +1760887 +1760891 +1760893 +4533255 +5108958 +1761041 +1761392 +1761438 +1761735 +1761865 +1762244 +1762271 +1762383 +1762608 +1762680 +5109498 +5109506 +5109523 +5109554 +5109599 +5109614 +5109646 +5109661 +5109670 +5109722 +1763610 +1763697 +8167743 +1764174 +1764673 +1764716 +1764986 +1764987 +1765010 +1765011 +1765017 +1765038 +1765044 +1765069 +1765073 +4534245 +4534252 +4534257 +4534275 +5109843 +5109931 +8352161 +1765604 +1765767 +1765954 +1766086 +1766128 +1766130 +1766131 +1766137 +1766210 +4534691 +1766274 +1766410 +1766418 +1766510 +7895336 +1766646 +1766718 +1766721 +1766741 +1766773 +1766784 +1766814 +1767511 +1767597 +1767608 +1767625 +1767655 +1767674 +5772169 +5772171 +5772172 +5772176 +5772178 +5772180 +5772186 +5772196 +5772199 +5772202 +5772205 +5772206 +5772210 +7388922 +7768584 +8045644 +1768117 +1768150 +5110200 +1768308 +1768341 +5110211 +5110213 +1768702 +1768727 +1768729 +1768735 +1768741 +1768749 +1768771 +1768815 +1768819 +8150836 +1769029 +1769057 +1769505 +1769519 +1769543 +1769566 +1769944 +1769958 +1770150 +1770307 +1770353 +1770416 +1770477 +1770530 +1770573 +4532696 +8393221 +1771385 +1771391 +7725644 +1771509 +1771531 +4532986 +1772013 +1772169 +1772179 +1772255 +5772129 +1772940 +1772956 +1773062 +1773163 +1773231 +1773309 +1773328 +1773377 +1773484 +1773572 +8222049 +1774272 +1774347 +1774859 +1774873 +1774878 +1774959 +1775112 +4534046 +4534052 +4534057 +1775172 +1775299 +1775301 +1775329 +5110593 +5772269 +5883881 +1775891 +1775913 +4534719 +1776067 +5110670 +1776207 +1776330 +1776371 +5772446 +1776619 +1776862 +4534463 +1777253 +5110818 +5110858 +5110871 +5110885 +1778074 +4534299 +1778127 +1778143 +1778517 +1778524 +1778596 +5111147 +5111481 +5111501 +5111513 +5111574 +5772222 +8253467 +1779258 +1779435 +1779641 +1779690 +1780378 +4533937 +1780926 +1780928 +1780954 +1781008 +1781016 +4533285 +4533325 +7664771 +1781694 +1782319 +1782560 +1782579 +1782615 +1782627 +1782672 +1782726 +1782727 +1782763 +1782777 +1782841 +1782872 +1782927 +1782948 +1783016 +1783037 +1783043 +1783045 +1783090 +5112155 +5112160 +5112254 +5112283 +5112291 +5112336 +5112345 +5112388 +5714973 +5715004 +5772349 +5772351 +7921916 +8043500 +1783777 +1783855 +1783971 +1784359 +1784812 +1784824 +1784826 +1784853 +4534290 +1785185 +1785286 +4532886 +4532888 +4532890 +1785329 +1785361 +1785883 +1785887 +1785888 +1785895 +1786007 +1786017 +8292872 +1786360 +1786515 +1786619 +1786651 +1786658 +1786664 +1786902 +1786936 +1787064 +1787112 +1787213 +1787267 +1787279 +1787381 +1787400 +1787417 +1787504 +1787590 +1787610 +1787631 +1787697 +1787751 +1787770 +1787825 +1787841 +1787859 +1787905 +4534086 +7917033 +1788425 +1788522 +1788734 +9216200 +4534011 +4534017 +1788917 +1789071 +1789073 +1789076 +1789086 +1789250 +1789255 +1789267 +9805848 +1789403 +4533882 +4533924 +1789481 +1789491 +1789553 +1789580 +4534162 +4534166 +4534170 +4534194 +1789694 +1789695 +1789730 +1789745 +1789753 +1789755 +1789783 +1789785 +1789840 +1789849 +1789957 +10068024 +10113008 +10290084 +10312073 +10904813 +1789982 +1789984 +1790002 +1790023 +1790059 +1790062 +1790072 +1790084 +1790153 +1790160 +4533115 +8047343 +9092175 +1790361 +1790364 +9174377 +1790625 +1790671 +1791384 +1791422 +1791784 +1791846 +1792061 +1792292 +1792300 +1792335 +1792377 +1792379 +1792383 +1792411 +1792414 +1792418 +1792426 +1792431 +1792449 +1792475 +1792645 +1792768 +5113370 +1792996 +1793212 +7918000 +1793877 +1793986 +1794102 +1794351 +1794532 +1794534 +1794590 +1794599 +1794609 +1795068 +4532908 +1795180 +1795215 +1795282 +7869346 +1795483 +7922810 +1795854 +1795862 +1795896 +1795900 +1795930 +1795946 +1795957 +1796007 +1796032 +1796117 +1796139 +1796145 +1796169 +1796188 +4534485 +4534486 +7438067 +8007222 +1796217 +7780930 +4532700 +1796423 +1796451 +1796463 +8105817 +1796678 +4533431 +4533433 +4533442 +4533444 +4533446 +1798372 +11992983 +1798916 +1798922 +1798931 +1798971 +1798974 +1798984 +1799132 +1799135 +1799701 +1799799 +1800004 +1800032 +6097260 +7712384 +7981386 +8304206 +8742426 +9069966 +4534389 +4534207 +10638451 +4532273 +4532283 +4532811 +4534663 +4534669 +4533273 +4534540 +8890502 +9135821 +4534038 +4533202 +4534398 +6544687 +4534538 +4534360 +4533123 +4533125 +4533128 +4533136 +4533661 +4533663 +4533671 +4534408 +4534458 +4534533 +5883985 +8021109 +11478679 +5110644 +7654770 +1774283 +1774285 +1779334 +5114198 +1763072 +5772063 +9038042 +4534675 +4534681 +4534683 +4534685 +4534686 +8108800 +1771634 +1771650 +1771678 +1771698 +8581601 +9549172 +1770772 +1770773 +1770821 +1770869 +1770880 +1771040 +1771143 +1771169 +1771204 +1771214 +1771245 +4533695 +4533714 +4533720 +7940536 +1765751 +5113847 +5113853 +5772309 +5108660 +5108761 +4534525 +1773901 +1773904 +4533344 +4533345 +4533347 +4533360 +4533362 +4532203 +4532206 +4532216 +4532236 +4532239 +4532253 +4532260 +4532264 +4532266 +8103163 +8363507 +1822346 +1822587 +1822610 +1822613 +1822787 +1822796 +1822819 +1822830 +1823604 +1823726 +1824113 +1824121 +1824131 +7875265 +1825064 +1825077 +1825083 +4534909 +4534914 +1825156 +1825176 +4534826 +5118892 +5118904 +7624468 +7937573 +8397564 +1825539 +1825971 +1825983 +1826022 +1826033 +5118996 +1827125 +5119143 +5119193 +5119245 +1827645 +1828162 +4534872 +6201790 +1893137 +1894268 +5882039 +7712938 +1894714 +4535614 +4535627 +4535632 +4535636 +8049830 +1894840 +4535827 +4535809 +4535817 +4535819 +9519321 +5128323 +5128357 +6231906 +1895875 +1896841 +1897852 +1898286 +1898290 +4299368 +1898521 +1898544 +5129378 +1901850 +1902533 +1902749 +8140883 +8189761 +4535689 +6221746 +1905383 +1906552 +8208583 +1909398 +1909838 +1911093 +1911112 +1911122 +1911168 +1911182 +1911278 +1911298 +1911461 +7728366 +8396242 +4535592 +7809779 +8078362 +1912325 +1912372 +1912395 +1912470 +4299535 +4299576 +4299597 +4299599 +5133990 +5772890 +7428726 +7799370 +8810143 +4535581 +5134098 +5134301 +8312017 +1913175 +1913178 +1913328 +1913351 +1913371 +11046092 +5134469 +5134543 +5134569 +5134583 +5134607 +5134621 +5134659 +5134667 +5134682 +5134686 +5134815 +5134837 +5134884 +5135191 +5772948 +7509928 +7700512 +7738295 +7791190 +7791558 +7798382 +7940299 +8047165 +8137978 +8167638 +8214814 +8233062 +8262258 +8295666 +8298764 +8314088 +1916347 +1916352 +1916410 +1916412 +1916458 +1916554 +7854318 +1918632 +1918669 +1918694 +1918733 +1918736 +1918776 +1918789 +1918795 +1918843 +1918854 +1918859 +1918868 +8035998 +8176911 +7622059 +7988274 +8404037 +4535618 +4535620 +4535510 +5130587 +5130682 +7762841 +5131096 +5131142 +5132183 +8001799 +7642610 +5135513 +5135546 +1896957 +5131910 +8138711 +1902143 +1902169 +1902182 +1899349 +1899433 +1899737 +1899818 +6229058 +7768674 +7867379 +7934873 +8168644 +8393082 +1951557 +4527355 +5142870 +1951649 +1952014 +1952062 +1952130 +1952229 +5143048 +1952449 +1952532 +5143129 +5143147 +1952806 +1952812 +1952816 +1951713 +1951725 +1832819 +1832853 +1832862 +1832915 +1832927 +1832936 +1833096 +1833159 +5880257 +5880258 +6097224 +6097225 +6097228 +1853064 +1853079 +4529248 +5976910 +1735193 +1941864 +5120465 +5120668 +5120675 +5120767 +5121040 +5121046 +5121177 +5121244 +5121517 +5121613 +5121737 +8273859 +1842097 +1842196 +5120396 +1842485 +1842542 +4301036 +1842690 +1842695 +4529738 +8292351 +5101394 +1730978 +1731263 +4525641 +1731598 +1872368 +1878782 +1878798 +1878804 +1878845 +1878862 +1878879 +1878895 +1878904 +1878907 +1878939 +1878951 +4531506 +4531517 +1879001 +1879227 +1879252 +1879408 +1879427 +1879452 +1879471 +5126212 +5126217 +1879534 +1879630 +1879655 +1879691 +1879703 +1879731 +1879735 +1879765 +10915497 +1879970 +1880040 +1880062 +1880064 +1880094 +1880104 +1880138 +1880139 +1880140 +1880143 +1880818 +1880907 +1880931 +4531643 +1881122 +1881126 +1881151 +9819403 +4531687 +1881208 +1881362 +1881393 +1881404 +1881418 +1881603 +4531713 +1881834 +4531975 +1882158 +1882165 +1882210 +1882437 +1882459 +1882557 +1882729 +5126834 +8325294 +1882905 +1882965 +1883067 +1883161 +1883168 +1883386 +1883634 +4531690 +1884212 +4531708 +1884465 +4532122 +1884970 +1885931 +1885937 +1886084 +1886251 +1886320 +8223165 +1886579 +1886587 +1886648 +7562564 +1886951 +1887290 +4531670 +1887701 +4531968 +10922411 +1888463 +1888484 +1888491 +1888579 +1888619 +1888623 +1888733 +1888736 +1888743 +1888759 +1888826 +1889287 +9228024 +1889905 +1889942 +1890187 +1890522 +1890534 +1890540 +1890576 +1890656 +1890670 +1890679 +1890699 +1890701 +1890703 +1890724 +1890772 +1890776 +1890823 +1890898 +1890957 +1890975 +1891013 +1891059 +1891167 +1891171 +1891177 +1891186 +1891190 +1891217 +1891326 +1891366 +1891386 +1891426 +1891453 +1891473 +1891493 +1891494 +4532022 +4532024 +8411753 +1892242 +1892245 +1892476 +9674732 +1884240 +1884254 +1884255 +1884273 +1884274 +1884280 +1884312 +1884332 +1884365 +1884370 +1884403 +5884851 +11761541 +5126675 +5126680 +7446048 +8532380 +8537359 +8823068 +8856895 +8858121 +9100030 +9101339 +1889833 +1887108 +1887173 +1887177 +1887178 +4532050 +4532057 +4532088 +4532095 +4532097 +6121184 +8218441 +4532150 +4532155 +4532160 +5771880 +1846107 +1846111 +1846112 +1846133 +1846141 +1846149 +1846159 +1846210 +1846219 +1846236 +4528813 +4528818 +1830879 +1830937 +1830962 +1831002 +1831009 +1831128 +1831136 +1831168 +4525443 +4525448 +5122293 +1853587 +4526048 +1854202 +1854259 +1854287 +1854347 +5122439 +1854615 +1854792 +1854824 +1854849 +1854237 +4526050 +7717983 +1858637 +1858674 +1858698 +1858762 +1858775 +1858778 +1858873 +1859046 +1859100 +1859177 +4536292 +1859285 +1859305 +1859471 +1859480 +1859488 +1859534 +1859952 +1860063 +1860076 +4536472 +4536483 +7642240 +8200050 +12046692 +1973467 +4525132 +5123221 +6097269 +5123042 +5124512 +1866356 +1866568 +5124911 +1867820 +1867928 +7764232 +7734292 +1841460 +1841476 +1841616 +1841675 +1841706 +1841813 +1841821 +1841946 +1841989 +1861510 +1861644 +1861673 +1861797 +1861842 +1861862 +1862293 +1862401 +1862517 +1862572 +1862578 +1862580 +1862701 +1862719 +1862765 +1862774 +1862837 +1862894 +5123922 +5124007 +5124029 +1864161 +1864358 +1864377 +5124143 +5124151 +5124233 +1864652 +1993419 +1939432 +4525189 +1860108 +5119506 +5119513 +1830361 +1830372 +1830374 +1830380 +1830407 +1830408 +1830410 +1830457 +4525369 +1830498 +4525420 +4525425 +7976145 +1830534 +1830537 +1830584 +1830632 +1830802 +4525364 +1754183 +1754332 +5105929 +5106115 +5106160 +5106249 +5106539 +5106894 +5107128 +5107219 +5107640 +5107644 +5107829 +7410701 +7586742 +7674502 +7761138 +7778368 +7870336 +7903078 +7909858 +7955974 +8048904 +8102790 +8111395 +8158342 +8201251 +8348761 +8426357 +8964772 +4522753 +1939647 +1939658 +1939677 +1939680 +1939688 +1939717 +7646066 +1829322 +1829363 +10055273 +1855452 +1855799 +1856005 +1856105 +1856289 +5122798 +1856384 +1856595 +1856620 +1856658 +1856663 +1856668 +1856686 +1856691 +1856701 +1856730 +1856768 +1856772 +1856867 +1857068 +1857143 +1857577 +1857581 +1857626 +9790007 +1857785 +1857828 +1857829 +1857856 +1857863 +1857878 +1857924 +1857978 +1858074 +1858100 +1858113 +1858163 +1858321 +1938050 +1938131 +8225376 +1936969 +1938214 +4690079 +1938520 +1938810 +1938955 +5141262 +5141288 +5141291 +5141297 +5802625 +1856503 +1858531 +1838691 +1838811 +1838838 +1838905 +1838911 +4528692 +4528694 +1833626 +1833627 +4528658 +1834589 +1834775 +1835031 +5770913 +1835156 +1835393 +1835396 +1835407 +1835422 +1836899 +1837172 +4528702 +1838969 +1839770 +1839851 +1839878 +1839893 +1841158 +1841159 +5770922 +5770942 +4529032 +5119893 +5114409 +4534798 +4534757 +1801051 +1801896 +4534773 +4534776 +4534778 +4534779 +4534782 +4534787 +4534788 +4534792 +9894093 +1802280 +1803012 +1803060 +1803073 +4534762 +4534766 +4534767 +4534769 +5114311 +5114316 +5114327 +8244266 diff --git a/dev/releases/mambo_v3/presets/europe_v3.classes b/dev/releases/mambo_v3/presets/europe_v3.classes new file mode 100644 index 0000000..4d553b2 --- /dev/null +++ b/dev/releases/mambo_v3/presets/europe_v3.classes @@ -0,0 +1,3086 @@ +1934693 +1860621 +1860628 +4522795 +1860659 +1860664 +1860668 +1860671 +1860688 +1860709 +1860711 +4522933 +5123582 +1732063 +1732072 +1732416 +1732419 +1732452 +1732457 +1732521 +1732565 +1732662 +1732680 +1732685 +1732697 +1733258 +1733484 +4525266 +4525268 +4525270 +4525273 +1733620 +1733755 +5101678 +5101717 +5101745 +5769191 +1734453 +1734704 +1734794 +1734826 +5102287 +11529292 +1831861 +1831863 +1831890 +1845270 +1845368 +1845548 +1845565 +1845607 +4529566 +4528100 +1846374 +1846604 +1846657 +1846715 +1846729 +1846916 +1847061 +1847097 +1847111 +1847407 +4528547 +1847572 +9262981 +1847956 +9546514 +1848150 +1848202 +10450501 +1848219 +9868978 +1848273 +1848356 +1848378 +1848426 +4528539 +1848596 +1848610 +1848636 +1848657 +1848669 +1848690 +1848713 +1848714 +1848717 +1848730 +1848741 +1848753 +1848864 +1848868 +1849104 +1849267 +1849273 +1849284 +1849294 +1849477 +11052757 +11080751 +1849531 +1849539 +1849552 +1849630 +1849856 +1849897 +1849924 +1850008 +1850042 +1850045 +1850076 +1850077 +1850106 +1850238 +1850246 +11576787 +1850279 +1850302 +1850335 +1850386 +1850394 +1850450 +1850497 +1850506 +4527903 +1850522 +1850533 +1850538 +1850570 +1850640 +4528529 +1850781 +1850971 +1851000 +1851010 +1851011 +5122037 +5122113 +1851203 +1851220 +1851337 +1851347 +1851555 +5122206 +4527972 +1852150 +1852159 +1852165 +1852177 +1852311 +1852430 +11287091 +4527957 +1848920 +1829533 +1829588 +1829776 +1829785 +1829799 +1829823 +1829974 +4525354 +1828637 +6097236 +8871600 +9182336 +5769272 +7623903 +8912441 +5879654 +7448174 +4525610 +1751852 +1861395 +1845866 +1845952 +1845962 +1845965 +1845982 +1839094 +1841261 +1830838 +1830843 +1830122 +1830125 +1830131 +1830144 +1830147 +1830152 +1830186 +1830191 +1830207 +1830221 +1830241 +1830243 +1830262 +1830266 +1830271 +1830284 +4525476 +4525487 +1831458 +1831643 +1841296 +4528593 +8271010 +1853723 +5880147 +9734171 +11418741 +11513018 +11571523 +12151997 +12160125 +12022449 +7908344 +1761111 +1764531 +1769103 +1769897 +7701550 +8837162 +1772793 +4532500 +1777289 +8141741 +1777631 +1777695 +1779399 +1780149 +1780150 +8193562 +1783882 +1786980 +1786985 +1788553 +1790692 +1790816 +5113078 +5113084 +5113234 +9310626 +1792210 +1797178 +1797258 +1797276 +1797333 +1797344 +1797349 +1797367 +1797374 +1797429 +1797454 +1797479 +1797527 +1797542 +4532461 +4532471 +4532473 +8016905 +8355390 +8756768 +1798346 +1798408 +4532493 +1798449 +1798481 +1798504 +1798594 +1798802 +1798807 +4532351 +4532352 +4532357 +1799708 +1803163 +1803824 +1804071 +1804906 +1805110 +1805155 +4532608 +7874258 +1807969 +1808195 +1808348 +1808440 +1808450 +1808752 +5115701 +5115771 +5115777 +1809210 +1810099 +5116416 +1813114 +5117189 +5117200 +7656811 +1814552 +1814630 +1814653 +5117399 +5117400 +1816881 +1817797 +8326103 +1819050 +1819145 +4532293 +4532297 +1819268 +8407461 +1819699 +9331464 +1819873 +1819928 +6122092 +7657803 +8361973 +1820372 +1820406 +12253343 +5884571 +7596232 +5771982 +6097214 +4532544 +4532614 +4532549 +4532516 +4532532 +4532565 +12089608 +8148822 +11962292 +12135372 +11033463 +11812181 +5115854 +5115872 +5115874 +5116475 +8038357 +8165185 +6097254 +5116698 +1805535 +9198767 +1788635 +4532395 +4532405 +4532408 +4532412 +1780869 +8000103 +4532534 +1768626 +4532508 +4532510 +1760244 +1760246 +5113030 +5113036 +1821856 +1821911 +1819170 +1812394 +8237987 +4532366 +4532453 +1820039 +1772822 +1771772 +1771779 +1777517 +1860979 +1860983 +1860987 +1860994 +1861011 +1861031 +4522911 +4522916 +4522919 +4522922 +12318291 +4522886 +4522890 +4522891 +4522896 +1860765 +1860768 +1860852 +1860857 +7767114 +7851302 +7961640 +1992378 +1992504 +1852956 +1852978 +1835432 +1835433 +1835456 +1835457 +9724183 +1837343 +1837420 +1837429 +1837464 +1837515 +4529064 +7958169 +8015612 +1839293 +1839296 +1840297 +1840301 +1840345 +1840346 +1840360 +1840371 +1840380 +1840408 +1840478 +1840483 +1840485 +1840555 +1840566 +1840570 +1840581 +1840596 +1840621 +4529186 +5119808 +1831752 +1852751 +1852787 +1852831 +9473121 +4529630 +5125075 +5125104 +8416348 +1751236 +1751290 +1751298 +1751299 +1751368 +1751457 +4535884 +4535904 +1860408 +4525177 +5123339 +5123394 +5769164 +5123461 +5123474 +1751207 +1751216 +1869595 +1869656 +1869803 +1869852 +1869858 +1869976 +1870202 +1870249 +1870250 +1870450 +1870650 +1870988 +5125306 +1871160 +1871212 +1871217 +1871252 +1871264 +1871407 +4531402 +4531409 +1871451 +4531365 +4531376 +1871683 +1871698 +1871783 +1871826 +4531427 +7673242 +10787705 +1872848 +1872873 +1872901 +1872904 +1873048 +1873051 +1873079 +1873215 +1873411 +4530947 +4530951 +1873776 +1873780 +1873783 +4531237 +4531264 +1873890 +5125689 +1874168 +1874192 +1874204 +1874211 +1874229 +1874269 +1874280 +1874295 +4531145 +4531147 +4531158 +1874375 +1874743 +9782192 +1875008 +1875120 +8219149 +1875327 +1875376 +1875409 +1875429 +4531242 +1875631 +1875633 +1875680 +1875682 +1875687 +4531284 +1875827 +1875830 +1875865 +1875869 +1875918 +1875940 +1875952 +1875958 +1876063 +1876329 +1876357 +1876409 +1876512 +1876542 +1876623 +1876854 +1877038 +1877310 +1877341 +1877345 +1877368 +4531246 +9111961 +5126052 +1877941 +1877986 +1877988 +1878067 +4531417 +4531425 +4531429 +1878197 +1878350 +1878370 +1878470 +1878471 +1878490 +1878500 +1878586 +1890065 +5884888 +11728049 +1877035 +1872315 +1748805 +1940158 +4525859 +4525884 +5141493 +5141501 +1940504 +1940510 +1940575 +1940639 +1940644 +1940717 +1940744 +1940768 +4525777 +4525803 +1940807 +1940838 +4525846 +1941330 +1941348 +1941377 +1941437 +10309794 +12211069 +1939879 +1736377 +1736412 +1736425 +1736447 +1736484 +1736499 +1736511 +1736528 +1736560 +1736565 +1736601 +1736623 +5102628 +5102642 +1736727 +1736800 +1736898 +1736904 +1736905 +1736906 +1736945 +4530406 +4529931 +1737131 +1737342 +1737368 +1737413 +1737437 +1737491 +1737497 +1737509 +4530608 +7466487 +1737524 +1737526 +1737533 +1737542 +1737552 +1737650 +1737753 +1737775 +1737776 +1737783 +1737847 +1737893 +1737924 +4530002 +8186212 +1738050 +1738163 +1738222 +1738245 +1738317 +1738322 +1738337 +1738373 +1738422 +1738429 +1738514 +8420632 +8869900 +5102931 +5102951 +1738687 +1738700 +1738722 +1738777 +1738794 +1738839 +1738883 +1739042 +1739043 +8086347 +1739128 +1739151 +1739272 +1739284 +1739290 +1739337 +1739377 +1739381 +5102982 +1739449 +1739451 +1739461 +1739471 +1739605 +1739748 +1739797 +1739816 +1739819 +1739833 +1739919 +1739922 +1739931 +1739980 +1739999 +1740005 +1740053 +1740069 +1740116 +1740120 +1740155 +1740174 +1740183 +1740185 +1740305 +1740374 +1740392 +7797515 +8215326 +1740482 +1740518 +1740533 +1740567 +1740570 +1740623 +8094357 +1740762 +1741056 +1741147 +1741253 +1741258 +1741340 +1741341 +1741368 +4530151 +8345820 +5103066 +5771357 +1741545 +1741551 +10838422 +1741590 +1741593 +1741615 +1741633 +1741634 +1741667 +1741747 +1741752 +1741756 +1741765 +4530424 +1741820 +10807169 +11093909 +1742106 +1742142 +1742185 +1742263 +1742346 +1742402 +5103451 +5103502 +5103613 +5103736 +5103948 +5771350 +7975250 +1743196 +8313553 +5103998 +7661023 +11846897 +1743453 +1743475 +7877231 +1743532 +1743588 +1743604 +1743613 +5104056 +6097235 +1743641 +1743643 +1743710 +1743714 +4530214 +1743730 +1743768 +1743775 +1743782 +4529900 +4529908 +4529915 +1743828 +1743856 +1743862 +1743867 +1743898 +1744071 +1744136 +1744180 +1744224 +4530632 +1744416 +1744498 +1744526 +1744542 +1744588 +1744593 +1744693 +1744699 +1744709 +1744714 +1744728 +1744731 +1744739 +1744742 +1744748 +1744763 +1744777 +1744782 +1744789 +1744808 +1744810 +1744860 +1744896 +1744901 +7964262 +1745013 +1745079 +10844862 +1745131 +1745558 +1745561 +1745579 +1745600 +1745630 +1745634 +1745636 +1745643 +1745659 +1745676 +1745678 +1745705 +1745724 +1745725 +1745737 +1745756 +1745762 +1745771 +1745781 +1745787 +1745788 +1745816 +1745827 +1745830 +8162538 +8369868 +1745925 +1746027 +8424972 +1746174 +1746413 +1746440 +1746613 +1746644 +1746666 +1746689 +1746775 +1746832 +1746856 +1746876 +1746910 +1747050 +1747141 +5104442 +1747738 +4530138 +5104558 +1748203 +1748321 +5104597 +6097234 +7588222 +9242559 +1748456 +1748720 +5104641 +8691947 +10580256 +5103121 +5103176 +5103181 +5103185 +5103227 +5771227 +5771229 +5771230 +5771232 +5771236 +5771239 +5771241 +5771243 +5771249 +5771255 +5771256 +5771258 +5771259 +1831780 +4525500 +4525503 +4525505 +4525510 +4525530 +4525540 +4525547 +4525557 +4525562 +1920851 +1920864 +1920892 +10556522 +1921466 +1921521 +1921590 +7387466 +1922197 +10442031 +10854079 +1922311 +1922343 +8016522 +1922572 +1922584 +4535092 +1922937 +1923019 +1923037 +12165672 +5138298 +5138492 +5138543 +5138561 +5714680 +1923796 +1924077 +1924082 +1924097 +5138681 +1924713 +11470119 +1924867 +1925221 +1925233 +7354189 +4535172 +1925381 +1925410 +1925454 +1925918 +1925962 +1926054 +9816676 +1926324 +1926385 +1926550 +1926722 +1926861 +5882965 +1928248 +5139040 +5139156 +1928945 +1928960 +1929270 +1929402 +1929659 +1929697 +5792092 +8356768 +1930110 +1930904 +4535106 +1931179 +1931509 +1931561 +1931779 +1931788 +1932393 +1932411 +1932473 +1932517 +1932551 +1932752 +1932960 +1932976 +5140214 +5140244 +5140436 +5140443 +5772702 +5772749 +7634721 +7664111 +9954885 +1933583 +1933647 +1933649 +1933793 +1926166 +1926260 +11874998 +1933095 +1933126 +1933138 +1933163 +1933204 +1924494 +1752383 +4522322 +5105339 +1919221 +1919223 +1919317 +1919320 +1919330 +1919333 +4535280 +4535285 +7981372 +1919698 +1919706 +1919712 +1919716 +1919966 +1920237 +1920247 +1920258 +1920259 +1920395 +1920491 +1920494 +1920496 +1920498 +1920502 +1920506 +1920509 +1920512 +4535307 +5805036 +5137902 +5137903 +5137908 +5804895 +1920707 +1920709 +1920712 +4535271 +5137578 +5137582 +5137595 +5137612 +5137636 +5137677 +5137682 +5137695 +5137706 +5137708 +8203812 +1920218 +1748890 +1748922 +1748942 +1749050 +1749070 +1749164 +1749449 +1749661 +1749713 +1749744 +1749846 +1749869 +1749908 +1749921 +1749929 +1749936 +1749948 +1749954 +1749959 +1749975 +1750051 +1750076 +1750097 +1750131 +1750143 +1750159 +1750166 +1750288 +1750326 +5104772 +5104781 +5104797 +5104829 +5104882 +5104891 +5104903 +5104927 +5104940 +5105054 +5105088 +5105106 +5105158 +5976947 +1751051 +5104759 +1749596 +1749608 +1749635 +8741260 +1735532 +4527339 +4527342 +1731826 +1731837 +1731860 +1855235 +1855241 +1954490 +1954563 +5143380 +5143453 +5143477 +1955479 +1955484 +5143651 +1955694 +1955856 +4524588 +5143675 +5143697 +1956440 +1956524 +1956599 +1956639 +1956710 +4525068 +1957266 +1957286 +1957300 +1957556 +1957565 +1957570 +1957572 +1957579 +1957583 +1957611 +1957632 +1957673 +1957706 +1957718 +1957746 +1957791 +1957816 +1957822 +4524320 +8172949 +1957845 +1957852 +1957854 +4524421 +4524424 +4524426 +5143944 +5143947 +1958024 +11554842 +1958065 +1958323 +1958515 +1959383 +1959395 +1959423 +1959436 +1959461 +1959467 +1959473 +1959682 +1959735 +1959799 +1959876 +1959914 +1959919 +1960484 +1960617 +1961013 +1961037 +1961040 +1961068 +1961190 +7741315 +1962204 +1962265 +1962268 +1962434 +1962516 +9812211 +10004969 +1962584 +4524568 +1962636 +1962860 +1962961 +1962972 +1962990 +1963011 +4302252 +1963168 +1963306 +1963446 +1963463 +1963587 +1963709 +1963710 +1963755 +1964189 +1964191 +1964195 +1964401 +1964437 +1964471 +1964637 +1964653 +1964657 +8361848 +1964836 +5144426 +1965166 +1965197 +1965208 +1965345 +1965640 +1965763 +1965777 +1965795 +1965810 +1965825 +1965841 +1965913 +1965996 +1966017 +1966351 +1966358 +1966854 +1966886 +5144534 +1967003 +1967006 +1967011 +1967025 +5144543 +1967245 +1967265 +1967273 +1967324 +1967452 +1967597 +1967803 +1967815 +1967873 +7681733 +1968678 +1968686 +1968837 +1968867 +11598540 +1968990 +1969291 +1969339 +1969463 +1969954 +1969958 +4523707 +1970213 +1970227 +1970243 +1970259 +1970284 +5144677 +5144721 +5144782 +5144787 +5144805 +5144880 +5144900 +5145009 +5145136 +5145186 +5145255 +5145260 +5145269 +5145409 +5145502 +5145522 +5145729 +7753668 +8014296 +9627567 +1971847 +1971852 +1971858 +1971888 +1971986 +1972120 +1972185 +1972187 +1972234 +1972250 +1972278 +1972342 +1972374 +1972377 +5145870 +5145965 +7541913 +7624494 +7960566 +1972434 +1972449 +1973300 +1973323 +1973327 +1973414 +7996464 +5146420 +5146440 +5146476 +5146496 +5146510 +5146525 +5146528 +5146559 +5146599 +5146601 +5146611 +5146651 +5146659 +5146677 +5146693 +5146720 +5146762 +5146774 +5146786 +5146815 +5146833 +5146837 +5146842 +5146852 +5146862 +5146883 +5146894 +5146899 +5146908 +5146920 +5146927 +5146946 +5146961 +5147002 +5147030 +5147038 +5147039 +5147041 +5147043 +5147058 +5147062 +5147071 +5147099 +5147145 +5147150 +5147155 +5147165 +5147171 +5147193 +5147208 +5147212 +5147232 +5147245 +5147259 +5147287 +5147319 +5147354 +5147395 +5147415 +5147437 +5147441 +5147478 +5147492 +5147513 +5147516 +5147534 +5147560 +7919880 +7988195 +8067894 +8366158 +1975198 +5147608 +5147638 +1975341 +1975546 +1975553 +1975571 +1975733 +8329661 +1975793 +8160782 +1975897 +1975903 +1976163 +5147681 +6097233 +7973517 +8414310 +8955497 +5147794 +1976993 +1977003 +1977007 +1977068 +4523725 +5147827 +5147834 +1977300 +5769028 +5148247 +5148248 +1977962 +1977967 +1977971 +1978056 +1978065 +1978114 +1978375 +1978445 +4524636 +4524638 +10712554 +4524890 +4524902 +5148264 +1978770 +1978776 +1978821 +1978977 +5148286 +1979308 +1979430 +1979473 +1979781 +5148394 +5148424 +5148436 +5148462 +5148475 +5148486 +5148487 +1980521 +1980525 +8421569 +1981696 +1981998 +1982406 +1982458 +1982500 +1982525 +1982529 +1982533 +1982541 +1982542 +1982592 +1982636 +1982671 +1982746 +1982770 +1982779 +1982790 +1982791 +1982838 +1982867 +1982885 +1982918 +1982924 +1983000 +1983034 +1983039 +1983052 +1983062 +1983101 +1983111 +1983170 +1983260 +1983288 +1983387 +1983393 +1983441 +1983442 +1983525 +1983528 +1983548 +1983558 +1983648 +1983705 +1983755 +1983756 +1983888 +1983896 +1983922 +1983967 +1983997 +1983999 +1984033 +1984117 +7752082 +7993353 +8015895 +8026858 +8262357 +8394261 +1984734 +1984942 +1984949 +1984954 +7905361 +1985522 +1985573 +1985734 +1985742 +1985760 +1986052 +1986056 +1986157 +1986166 +1986171 +1986191 +1986220 +1986367 +1986452 +1986522 +1986575 +1986604 +1986623 +1986877 +5149315 +5768880 +1987527 +9137631 +1987578 +4525091 +4525093 +4525097 +4525103 +6118530 +1987650 +1987737 +1987744 +4524221 +4524223 +1988007 +1988019 +1988064 +4524513 +1988390 +1988506 +1988593 +1988602 +1988642 +1988684 +7555991 +8388883 +1988762 +5149414 +5149438 +1988881 +1989428 +1990066 +1990150 +1990533 +1990551 +1990582 +5149474 +1991179 +1991371 +1991532 +5149836 +5149839 +5149843 +1991846 +1992066 +8180900 +6133619 +5880512 +5880533 +5880545 +5880550 +5880552 +5880559 +5880563 +7657419 +8237343 +8632989 +5769062 +5769068 +5769072 +7429212 +11654024 +7507369 +9414984 +9563355 +1989594 +4524740 +7990739 +4523556 +4523560 +4523564 +4524052 +4524054 +4523486 +4523461 +4524998 +4525034 +4524376 +4524822 +4524712 +4523522 +4522974 +4524541 +4523519 +4524070 +4524072 +4524403 +4524793 +4524914 +4524922 +4524929 +4524951 +4524955 +4524961 +4524962 +4525078 +9220953 +9249651 +5144190 +5146412 +5768597 +5149499 +5149569 +7769543 +8851663 +4523880 +4523883 +4523885 +5149659 +5149664 +5149665 +5149667 +5149704 +5149717 +5149746 +5149768 +5149780 +5149784 +5149787 +5149820 +7443518 +5146342 +5146379 +4302268 +4524393 +5141677 +1943397 +4535386 +8178854 +8277078 +8073674 +8133678 +8273661 +1945569 +1945589 +1945877 +1946661 +7389824 +1947306 +1947335 +5142338 +5142352 +1949715 +1949784 +1949794 +1949850 +1949852 +1949877 +1949929 +1949938 +1949954 +1950006 +5142394 +5142599 +7683096 +8109173 +5977247 +8270406 +7633472 +10715410 +4535396 +5142006 +5142032 +5142042 +1869467 +1869478 +1869489 +1869512 +9359597 +5769709 +1735844 +1735855 +9400895 +9530977 +10963226 +10982815 +5109821 +1758878 +1759055 +1759069 +1759079 +1759083 +1759097 +4533952 +7972792 +1759153 +1759159 +4533211 +1759407 +1759597 +1759620 +1759661 +1759667 +1759668 +1759673 +1759686 +1760104 +7444489 +9060267 +1760593 +1794361 +4533957 +4534225 +8708745 +1760857 +1760867 +1760887 +1760891 +1760893 +4533255 +5108958 +1761041 +1761392 +1761438 +1761735 +1761865 +1762244 +1762271 +1762383 +1762608 +1762680 +5109498 +5109506 +5109523 +5109554 +5109599 +5109614 +5109646 +5109661 +5109670 +5109722 +1763610 +1763697 +8167743 +1764174 +1764673 +1764716 +1764986 +1764987 +1765010 +1765011 +1765017 +1765038 +1765044 +1765069 +1765073 +4534245 +4534252 +4534257 +4534275 +5109843 +5109931 +8352161 +1765604 +1765767 +1765954 +1766086 +1766128 +1766130 +1766131 +1766137 +1766210 +4534691 +1766274 +1766410 +1766418 +1766510 +7895336 +1766646 +1766718 +1766721 +1766741 +1766773 +1766784 +1766814 +1767511 +1767597 +1767608 +1767625 +1767655 +1767674 +5772169 +5772171 +5772172 +5772176 +5772178 +5772180 +5772186 +5772196 +5772199 +5772202 +5772205 +5772206 +5772210 +7388922 +7768584 +8045644 +1768117 +1768150 +5110200 +1768308 +1768341 +5110211 +5110213 +1768702 +1768727 +1768729 +1768735 +1768741 +1768749 +1768771 +1768815 +1768819 +8150836 +1769029 +1769057 +1769505 +1769519 +1769543 +1769566 +1769944 +1769958 +1770150 +1770307 +1770353 +1770416 +1770477 +1770530 +1770573 +4532696 +8393221 +1771385 +1771391 +7725644 +1771509 +1771531 +4532986 +1771997 +1772013 +1772169 +1772179 +1772255 +5772129 +1772940 +1772956 +1772977 +1773062 +1773163 +1773231 +1773309 +1773328 +1773377 +1773484 +1773572 +8222049 +1774272 +1774347 +1774859 +1774873 +1774878 +1774959 +1775112 +4534046 +4534052 +4534057 +1775172 +1775299 +1775301 +1775329 +5110593 +5772269 +5883881 +1775891 +1775913 +4534719 +1776067 +5110670 +1776207 +1776330 +1776371 +5772446 +1776619 +1776862 +4534463 +1777253 +5110818 +5110858 +5110871 +5110885 +1778074 +4534299 +1778127 +1778143 +1778517 +1778524 +1778596 +5111147 +5111481 +5111501 +5111513 +5111574 +5772222 +8253467 +1779258 +1779435 +1779633 +1779641 +1779690 +1780378 +4533937 +1780926 +1780928 +1780954 +1781008 +1781016 +4533285 +4533325 +7664771 +1781694 +1782319 +1782560 +1782579 +1782615 +1782627 +1782672 +1782726 +1782727 +1782763 +1782777 +1782841 +1782872 +1782927 +1782948 +1783016 +1783037 +1783043 +1783045 +1783090 +5112155 +5112160 +5112254 +5112283 +5112291 +5112336 +5112345 +5112388 +5714973 +5715004 +5772349 +5772351 +7921916 +8043500 +1783777 +1783855 +1783971 +1784349 +1784359 +1784812 +1784824 +1784826 +1784853 +4534290 +1785185 +1785286 +4532886 +4532888 +4532890 +1785329 +1785361 +1785883 +1785887 +1785888 +1785895 +1786007 +1786017 +8292872 +1786360 +1786515 +1786619 +1786651 +1786658 +1786664 +1786902 +1786936 +1787064 +1787112 +1787213 +1787267 +1787279 +1787381 +1787400 +1787417 +1787438 +1787504 +1787590 +1787610 +1787631 +1787697 +1787751 +1787770 +1787825 +1787841 +1787859 +1787905 +4534086 +7917033 +1788425 +1788522 +1788734 +9216200 +4534011 +4534017 +1788917 +1789071 +1789073 +1789076 +1789086 +1789250 +1789255 +1789267 +9805848 +1789403 +4533882 +4533924 +1789481 +1789491 +1789553 +1789580 +4534162 +4534166 +4534170 +4534194 +1789694 +1789695 +1789730 +1789745 +1789753 +1789755 +1789783 +1789785 +1789840 +1789849 +1789957 +10068024 +10113008 +10290084 +10312073 +10904813 +1789982 +1789984 +1790002 +1790023 +1790059 +1790062 +1790072 +1790084 +1790153 +1790160 +4533115 +8047343 +9092175 +1790361 +1790364 +9174377 +1790625 +1790671 +1791384 +1791422 +1791784 +1791846 +1792061 +1792292 +1792300 +1792335 +1792377 +1792379 +1792383 +1792411 +1792414 +1792418 +1792426 +1792431 +1792449 +1792475 +1792645 +1792768 +5113370 +1792996 +1793212 +7918000 +1793877 +1793986 +1794102 +1794351 +1794532 +1794534 +1794590 +1794599 +1794609 +1795068 +4532908 +1795180 +1795215 +1795282 +7869346 +1795483 +7922810 +1795854 +1795862 +1795896 +1795900 +1795930 +1795946 +1795957 +1796007 +1796032 +1796117 +1796139 +1796145 +1796169 +1796188 +4534485 +4534486 +7438067 +8007222 +1796217 +7780930 +4532700 +9803522 +1796423 +1796451 +1796463 +8105817 +1796678 +4533431 +4533433 +4533442 +4533444 +4533446 +1798372 +11992983 +1798916 +1798922 +1798931 +1798971 +1798974 +1798984 +1799132 +1799135 +1799701 +1799799 +1800004 +1800032 +6097260 +7712384 +7981386 +8304206 +8742426 +9069966 +4534389 +4534207 +10638451 +4532273 +4532283 +4532811 +4534663 +4534669 +4533273 +4534540 +8890502 +9135821 +4534038 +4533202 +4534398 +6544687 +4534538 +4534360 +4533123 +4533125 +4533128 +4533136 +4533661 +4533663 +4533671 +4534408 +4534458 +4534533 +5883985 +8021109 +11478679 +5110644 +7654770 +1774283 +1774285 +1779334 +5114198 +1763072 +5772063 +9038042 +4534675 +4534681 +4534683 +4534685 +4534686 +8108800 +1771634 +1771650 +1771678 +1771698 +8581601 +9549172 +1770772 +1770773 +1770821 +1770869 +1770880 +1771040 +1771143 +1771169 +1771204 +1771214 +1771245 +4533695 +4533714 +4533720 +7940536 +1765751 +5113847 +5113853 +5772309 +5108660 +5108761 +4534525 +1773901 +1773904 +4533344 +4533345 +4533347 +4533360 +4533362 +4532203 +4532206 +4532216 +4532236 +4532239 +4532253 +4532260 +4532264 +4532266 +8103163 +8363507 +1822346 +1822587 +1822610 +1822613 +1822787 +1822796 +1822819 +1822830 +1823604 +1823726 +1824113 +1824121 +1824131 +7875265 +1825064 +1825077 +1825083 +4534909 +4534914 +1825156 +1825176 +4534826 +5118892 +5118904 +7624468 +7937573 +8397564 +1825539 +1825971 +1825983 +1826022 +1826033 +5118996 +1827125 +5119143 +5119193 +5119245 +1827645 +1828162 +4534872 +6201790 +1893137 +1894164 +1894268 +5882039 +7712938 +1894714 +4535614 +4535627 +4535630 +4535632 +4535636 +8049830 +1894840 +4535827 +4535809 +4535817 +4535819 +9519321 +5128323 +5128353 +5128357 +6231906 +9804158 +1895875 +1896841 +1897852 +1898286 +1898290 +4299368 +4299370 +1898521 +1898544 +5129378 +1901850 +1902533 +1902749 +8140883 +8189761 +4535689 +6221746 +1905383 +1905396 +1906552 +8208583 +1909398 +1909838 +1911093 +1911112 +1911122 +1911168 +1911182 +1911278 +1911298 +1911461 +7728366 +8396242 +1911633 +4535592 +4535596 +7809779 +8078362 +1912325 +1912372 +1912395 +1912470 +4299535 +4299565 +4299576 +4299597 +4299599 +5133990 +5772890 +7428726 +7799370 +8810143 +4535581 +5134098 +5134301 +8312017 +1913175 +1913178 +1913328 +1913351 +1913371 +11046092 +5134469 +5134543 +5134569 +5134583 +5134607 +5134621 +5134659 +5134667 +5134682 +5134686 +5134693 +5134815 +5134837 +5134884 +5135191 +5772948 +7509928 +7700512 +7738295 +7791190 +7791558 +7798382 +7940299 +8047165 +8137978 +8167638 +8214814 +8233062 +8262258 +8295666 +8298764 +8314088 +1916347 +1916352 +1916410 +1916412 +1916458 +1916554 +7854318 +1918627 +1918632 +1918669 +1918688 +1918694 +1918733 +1918736 +1918776 +1918789 +1918795 +1918843 +1918854 +1918859 +1918868 +4535539 +8035998 +8176911 +7622059 +7988274 +8404037 +4535618 +4535620 +4535510 +5130587 +5130682 +7762841 +5131096 +5131142 +5132183 +8001799 +5133088 +7642610 +5135513 +5135546 +1896957 +5131910 +8138711 +1902143 +1902169 +1902182 +1899349 +1899433 +1899737 +1899818 +6229058 +7768674 +7867379 +7934873 +8168644 +8393082 +1951557 +4527355 +5142870 +1951649 +1952014 +1952062 +1952130 +1952229 +5143048 +1952449 +1952532 +5143129 +5143147 +1952806 +1952812 +1952816 +1951713 +1951725 +1832819 +1832853 +1832862 +1832915 +1832927 +1832936 +1833096 +1833159 +5880257 +5880258 +6097224 +6097225 +6097228 +1853064 +1853079 +4529248 +5976910 +1735193 +1941864 +5120465 +5120577 +5120668 +5120675 +5120767 +5121040 +5121046 +5121177 +5121244 +5121517 +5121613 +5121737 +8273859 +1842097 +1842196 +5120396 +1842485 +1842542 +4301036 +1842690 +1842695 +4529738 +1843602 +8292351 +5101394 +1730978 +1731263 +4525641 +1731598 +1872368 +1878782 +1878798 +1878804 +1878845 +1878862 +1878879 +1878895 +1878904 +1878907 +1878939 +1878951 +4531506 +4531517 +1879001 +1879227 +1879252 +1879408 +1879427 +1879452 +1879471 +5126212 +5126217 +1879534 +1879630 +1879655 +1879691 +1879703 +1879731 +1879735 +1879765 +10915497 +1879970 +1880040 +1880062 +1880064 +1880094 +1880104 +1880138 +1880139 +1880140 +1880143 +1880818 +1880907 +1880931 +4531643 +1881122 +1881126 +1881151 +9819403 +4531687 +1881208 +1881362 +1881393 +1881404 +1881418 +1881603 +4531713 +1881834 +4531975 +1882158 +1882165 +1882210 +1882437 +1882459 +1882557 +1882729 +5126834 +8325294 +1882905 +1882965 +1883067 +1883161 +1883168 +1883386 +1883634 +4531690 +1884212 +4531708 +1884465 +4532122 +1884970 +1885931 +1885937 +1886084 +1886251 +1886320 +8223165 +1886579 +1886587 +1886648 +7562564 +1886951 +1887290 +4531670 +1887701 +4531968 +10922411 +1888463 +1888484 +1888491 +1888579 +1888619 +1888623 +1888733 +1888736 +1888743 +1888759 +1888826 +1889287 +9228024 +1889905 +1889942 +5127521 +1890187 +1890346 +1890487 +1890522 +1890534 +1890540 +1890576 +1890656 +1890670 +1890679 +1890699 +1890701 +1890703 +1890724 +1890772 +1890776 +1890823 +1890898 +1890957 +1890975 +1891013 +1891059 +1891167 +1891171 +1891177 +1891186 +1891190 +1891217 +1891326 +1891366 +1891386 +1891426 +1891453 +1891473 +1891493 +1891494 +4532022 +4532024 +8411753 +1892242 +1892245 +1892476 +9674732 +1884240 +1884254 +1884255 +1884273 +1884274 +1884280 +1884312 +1884332 +1884365 +1884370 +1884403 +5884851 +6133232 +11761541 +5126675 +5126680 +7446048 +8532380 +8537359 +8823068 +8856895 +8858121 +9100030 +9101339 +9137965 +1889833 +5127656 +1887108 +1887173 +1887177 +1887178 +4532050 +4532057 +4532088 +4532095 +4532097 +6121184 +8218441 +4532150 +4532155 +4532160 +5771880 +1846107 +1846111 +1846112 +1846133 +1846141 +1846149 +1846159 +1846210 +1846219 +1846236 +4528813 +4528818 +1830879 +1830937 +1830962 +1831002 +1831009 +1831128 +1831136 +1831168 +4525443 +4525448 +5122293 +1853587 +4526048 +1854202 +1854259 +1854287 +1854347 +5122439 +1854615 +1854792 +1854824 +1854849 +1854237 +4526094 +4526050 +7717983 +1858637 +1858674 +1858698 +1858762 +1858775 +1858778 +1858873 +1858930 +1859046 +1859100 +1859177 +4536292 +1859285 +1859305 +1859471 +1859480 +1859488 +1859534 +1859952 +1860026 +1860063 +1860076 +4536472 +4536483 +7642240 +8200050 +12046692 +1973467 +4525132 +5123221 +6097269 +5123042 +5124512 +1866356 +1866556 +1866568 +5124911 +1867820 +1867928 +7764232 +5124716 +7734292 +1841460 +1841476 +1841616 +1841675 +1841706 +1841813 +1841821 +1841946 +1841989 +1861510 +1861644 +1861673 +1861797 +1861842 +1861862 +1862293 +1862401 +1862517 +1862572 +1862578 +1862580 +1862692 +1862701 +1862719 +1862765 +1862774 +1862837 +1862894 +5123922 +5124007 +5124029 +1864161 +1864358 +1864377 +5124143 +5124151 +5124233 +1864652 +1993419 +1939432 +4525189 +1860108 +5119506 +5119513 +1830361 +1830372 +1830374 +1830380 +1830407 +1830408 +1830410 +1830457 +4525369 +1830498 +4525420 +4525425 +7976145 +1830534 +1830537 +1830584 +1830632 +1830802 +4525364 +1754183 +1754332 +5105929 +5106115 +5106160 +5106249 +5106539 +5106894 +5107128 +5107219 +5107640 +5107644 +5107829 +7410701 +7586742 +7674502 +7761138 +7778368 +7870336 +7903078 +7909858 +7955974 +8048904 +8102790 +8111395 +8158342 +8201251 +8348761 +8426357 +8964772 +4522753 +1939647 +1939658 +1939677 +1939680 +1939688 +1939717 +7646066 +1829322 +1829363 +8254441 +10055273 +1855452 +1855799 +1856005 +1856105 +1856289 +5122798 +1856384 +1856595 +1856620 +1856658 +1856663 +1856668 +1856686 +1856691 +1856701 +1856730 +1856768 +1856772 +1856867 +1857068 +1857143 +1857577 +1857581 +1857626 +9790007 +1857785 +1857828 +1857829 +1857856 +1857863 +1857878 +1857924 +1857978 +1858074 +1858100 +1858113 +1858163 +1858321 +1938050 +1938131 +8225376 +1936969 +1938214 +4690079 +1938520 +1938810 +1938955 +5141262 +5141288 +5141291 +5141297 +5802625 +1856503 +1858531 +1838691 +1838811 +1838838 +1838905 +1838911 +4528692 +4528694 +1833500 +1833626 +1833627 +4528658 +1834589 +1834775 +1835031 +5770913 +1835156 +1835393 +1835396 +1835407 +1835422 +1836899 +1837172 +4528702 +1838969 +1839770 +1839851 +1839878 +1839893 +1841158 +1841159 +5770922 +5770942 +4529032 +5119893 +5114409 +4534796 +4534798 +4534757 +1801051 +1801896 +4534773 +4534776 +4534778 +4534779 +4534782 +4534787 +4534788 +4534792 +9894093 +1802280 +1803012 +1803060 +1803073 +1803108 +4534762 +4534766 +4534767 +4534769 +5114311 +5114316 +5114327 +8244266 diff --git a/dev/releases/mambo_v3/presets/japan.classes b/dev/releases/mambo_v3/presets/japan.classes new file mode 100644 index 0000000..b13bd10 --- /dev/null +++ b/dev/releases/mambo_v3/presets/japan.classes @@ -0,0 +1,697 @@ +1992315 +1733154 +1733412 +5101745 +5102287 +1832235 +1847392 +1829659 +8503184 +1831458 +1831631 +9379855 +10679326 +12199936 +1759775 +1760927 +1761353 +1762151 +1764021 +1764032 +1764060 +1764531 +1766260 +1766570 +11097510 +5110232 +1769410 +1769772 +1769901 +6132967 +1775148 +5110765 +1777695 +6132953 +1780705 +1780716 +1783652 +5112500 +6132974 +1787009 +10860091 +1788553 +1788953 +1789225 +1791698 +1791715 +5113082 +5113352 +5884243 +5113925 +1796984 +10600368 +1797259 +1797299 +1797479 +8756768 +9332506 +5113950 +5884247 +1798449 +1787072 +1798700 +1798868 +4301310 +4532352 +6133046 +10722110 +1803148 +1803824 +1805044 +5115167 +1808286 +9219266 +1808752 +5115771 +5116412 +12176559 +1813114 +1813263 +1814913 +1814928 +1815260 +1816299 +1816362 +8326103 +1818991 +4532293 +6134023 +7346384 +1819268 +8407461 +5118348 +1820372 +1820406 +1820450 +9420824 +12037602 +5884571 +8897869 +6133083 +6133292 +11142432 +10399906 +6133271 +11232431 +8831819 +5115874 +10178326 +10907635 +10982648 +8874633 +9508913 +1783898 +1783906 +9478424 +6115388 +1774583 +1774598 +1774618 +1774626 +1774654 +1768461 +5113036 +5109796 +1821934 +1821940 +6122364 +8237987 +4687933 +6116646 +1798329 +1785072 +1765999 +1786597 +5884188 +6132915 +6132916 +1782310 +5112440 +1860987 +9883856 +1939510 +1939520 +1860261 +1860274 +1869706 +4531402 +1872848 +1873079 +5125569 +5125633 +1874274 +1874937 +1875120 +1875830 +1877038 +6133441 +1736499 +1736993 +5102982 +1740482 +1740797 +1743532 +1745952 +1746775 +1920851 +1920996 +10581870 +1921150 +1921163 +8782891 +5714680 +1924044 +1924193 +1924713 +4535172 +1925918 +1926448 +5883255 +1927034 +5883052 +1927393 +5882965 +5139050 +1928849 +1928908 +1929697 +1931132 +1931561 +7346434 +1931706 +1931956 +1932043 +1933844 +1752849 +5105547 +5105560 +1753636 +5105588 +6133481 +1919720 +1919951 +5137832 +5805954 +1920496 +5137889 +5137908 +5137912 +5137949 +1920711 +5803588 +1920218 +11826016 +1954496 +1956524 +1956629 +6133593 +1957854 +1958252 +1958454 +5144027 +1959645 +1959876 +1959914 +1959919 +1960023 +1960181 +5144093 +1960686 +1960854 +1961052 +1961162 +7346236 +1961252 +1961647 +1962265 +1964024 +6133500 +1964247 +1964316 +1965913 +5144431 +1967595 +1967815 +1967873 +1968147 +1968193 +7681733 +1968304 +1968363 +1968867 +6133643 +1970136 +5144677 +5145409 +9194811 +1972443 +1973338 +5146434 +5147062 +1975198 +1975805 +1975806 +1975892 +1975964 +1975979 +9548993 +1976212 +1976213 +1976311 +5148115 +1977833 +1978422 +4524636 +4524638 +1979781 +1980521 +1980811 +8421569 +11173690 +1981937 +1981938 +1982267 +1985061 +1985152 +1985158 +1985167 +1985191 +1986052 +1986056 +1986508 +5149308 +1987377 +1987665 +1987776 +11650277 +1988225 +1988306 +5149414 +1989428 +1990050 +1991123 +1991277 +1991378 +1991783 +5149986 +6133619 +5880539 +9442902 +11828714 +10574156 +5880392 +4524070 +7345819 +6133542 +7345829 +5880478 +6133540 +5146379 +1942697 +4689929 +1943212 +5141924 +1945066 +1945225 +1945227 +1945694 +1945878 +1946695 +7389824 +1947492 +1947626 +1947740 +1949336 +5142499 +5977257 +5142725 +1952883 +1952909 +1758874 +1758878 +7972792 +1759620 +1759667 +1760593 +1760939 +1761438 +1762680 +1764791 +5109830 +5109882 +8352161 +1766130 +1767368 +1767655 +5802396 +1768698 +1769519 +1769566 +1770172 +4532696 +1772179 +6115946 +1775962 +1776067 +5772222 +1781233 +1781234 +1782168 +1782177 +1782457 +1782543 +1782672 +1782726 +1782757 +5715004 +1784513 +1784761 +1785145 +1785314 +1785367 +1786360 +1786448 +1788522 +1788856 +1788917 +1789957 +1790376 +9174377 +1791422 +1795065 +4532908 +1795957 +4688172 +1797030 +6133007 +5113951 +1800004 +1800032 +1800149 +6544687 +4532269 +4533123 +4534533 +6132989 +6132781 +4534685 +1771678 +1771698 +1771040 +1771245 +5113853 +5108737 +5108761 +5108787 +5108794 +9243764 +1759394 +4532266 +1767293 +9325654 +10458175 +1822610 +1822613 +1822787 +1822830 +1822848 +1823294 +1824242 +1824390 +1824666 +5118859 +1825176 +1825539 +5118978 +1825786 +7345777 +1825967 +1826108 +5118996 +1827125 +1827408 +4534869 +9883140 +5119181 +5119223 +1827649 +1827650 +11435704 +6133687 +6133688 +9921001 +5118841 +9486293 +1893266 +1893546 +1893923 +7712938 +4535614 +4535630 +4535827 +1895499 +1895867 +1895875 +1895956 +1895992 +5128519 +1897664 +1897685 +4299368 +5129293 +7346344 +1898434 +1898441 +1898544 +5129378 +5129417 +1901399 +1901832 +5130464 +5130471 +5130476 +1902543 +1902749 +8140883 +1904948 +1905079 +6221746 +1907436 +1907498 +1907625 +1908702 +10656625 +1909398 +1909607 +1909865 +1911093 +7428726 +1913105 +5134682 +5135026 +5136681 +5137085 +1918411 +1918467 +4535510 +5130587 +5131096 +5131142 +5131293 +5131339 +5131585 +5806167 +7642610 +8138711 +1910629 +1910662 +1914701 +1951412 +1951462 +1951507 +5142870 +1951791 +1952062 +1952175 +1952177 +5143007 +5143080 +1952449 +5143147 +5885428 +4702564 +6544581 +5141590 +1730948 +1879379 +1879408 +1879471 +5126635 +1880852 +1880858 +1880968 +1881151 +1881329 +1881336 +1882253 +1882767 +1882884 +1882905 +1882930 +1884051 +9294363 +4532122 +1884908 +1885919 +1886251 +1886320 +1886726 +1886729 +1886929 +1887509 +1887691 +1887701 +1888027 +1888092 +1888891 +1888913 +1889039 +1889074 +1889277 +1889370 +1890320 +1890410 +1890487 +1891326 +1891758 +1892153 +11056379 +6133141 +5771877 +4532125 +6120803 +6133232 +5126680 +1889765 +5127592 +5127669 +5127688 +6121184 +1831136 +5122430 +9749806 +1865659 +1866356 +1866568 +5124880 +8439879 +9983244 +1867993 +5124716 +10005133 +1861456 +1861488 +1861494 +1861644 +1861665 +1861697 +5123674 +1861938 +1861949 +1862072 +5123685 +1862293 +1862363 +1862370 +1862401 +11907754 +1862430 +1862449 +1862475 +1862517 +1862578 +1863034 +5124029 +1863829 +1863848 +1863944 +1864126 +1864377 +5124121 +11954157 +5124304 +5124332 +5124348 +5124415 +5124433 +1864793 +5885399 +7346401 +5123815 +5123890 +1992883 +6132711 +6132726 +5143249 +5105642 +1754368 +1754535 +1754933 +1755237 +1757853 +5108349 +1858557 +1937723 +1937819 +1937892 +1938058 +1938088 +1938114 +1938162 +1938168 +4693382 +8225376 +5141212 +5141226 +1937490 +1937556 +1938230 +1938233 +1938612 +1938796 +1939168 +8546322 +1839560 +1800238 +10213314 +1800528 +1800572 +1800696 +5114394 +9544823 +5114425 +1800934 +1801080 +1801084 +1801490 +6112661 +1802090 +1802113 +1802244 +1802280 +1802783 +1803022 +1803065 +1803108 +10942408 +6133803 diff --git a/dev/releases/mambo_v3/presets/madagascar.classes b/dev/releases/mambo_v3/presets/madagascar.classes new file mode 100644 index 0000000..8940550 --- /dev/null +++ b/dev/releases/mambo_v3/presets/madagascar.classes @@ -0,0 +1,107 @@ +1766612 +1776265 +1776268 +1786980 +1788553 +1790287 +5884245 +6117055 +6115437 +1803163 +5117776 +5116504 +8723161 +1780897 +6115388 +6116661 +1765997 +4687389 +1922063 +1922244 +1923465 +8023645 +1924713 +1932302 +1932332 +8177775 +1933649 +5138841 +1919181 +1919213 +1919346 +5137827 +1920374 +5137863 +1943236 +1946661 +1947113 +5109848 +6116899 +1892554 +5806166 +1895956 +1897972 +1898017 +5130392 +5130464 +5130487 +5130502 +5130542 +1906621 +11378273 +5133610 +1915499 +11372793 +11375508 +5131347 +7642610 +5128597 +1910628 +1910629 +1879452 +1879490 +5126637 +1883067 +1883124 +1884051 +1884437 +1884449 +6120980 +1884774 +1885262 +1886104 +1886729 +1887054 +8955839 +4531670 +1889272 +1889277 +1889543 +7543006 +1890410 +1890670 +1892456 +5771877 +6121010 +5127644 +1867014 +1868049 +1868060 +1861433 +1861510 +1861544 +1861644 +1862293 +1862311 +1862401 +1862765 +1863034 +1863282 +9178932 +5124088 +5124352 +1938125 +1938166 +1939314 +1802662 +1802868 diff --git a/dev/releases/mambo_v3/presets/mediterranean.classes b/dev/releases/mambo_v3/presets/mediterranean.classes new file mode 100644 index 0000000..f379d7c --- /dev/null +++ b/dev/releases/mambo_v3/presets/mediterranean.classes @@ -0,0 +1,2680 @@ +1934693 +1860628 +1860659 +1860664 +1860671 +1860711 +4522933 +1732063 +1732072 +1732416 +1732419 +1732452 +1732457 +1732521 +1732565 +1732662 +1732680 +1732685 +1732697 +1733258 +1733484 +4525266 +4525268 +4525270 +4525273 +1733620 +1733755 +5101678 +5101717 +5101745 +5769191 +1734453 +1734690 +1734704 +1734794 +1734826 +5102287 +11529292 +1831861 +1831863 +1831890 +1845270 +1845368 +1845548 +1845565 +1845607 +4529566 +4528100 +1846374 +1846604 +1846657 +1847061 +1847097 +1847111 +1847407 +4528547 +9262981 +1847956 +9546514 +1848150 +1848202 +1848219 +9868978 +1848273 +4528539 +1848596 +1848610 +1848636 +1848657 +1848690 +1848741 +1848864 +1849104 +1849477 +11080751 +1849531 +1849539 +1849552 +1849630 +1849856 +1849924 +1850008 +1850238 +1850246 +1850335 +1850497 +1850506 +4527903 +1850522 +1850533 +1850538 +1850570 +1850640 +1850781 +1851010 +5122037 +5122113 +1851220 +1851337 +1851347 +5122206 +4527972 +1852150 +1852159 +1852165 +1852177 +1852311 +11287091 +4527957 +1848920 +1829533 +1829776 +1829785 +1829823 +4525354 +1828637 +6097236 +8871600 +9182336 +5769272 +7623903 +8912441 +5879654 +7448174 +4525610 +1751852 +1861395 +1845866 +1845952 +1845962 +1845965 +1845982 +1839094 +1841261 +1830838 +1830843 +1830125 +1830131 +1830152 +1830191 +1830241 +1830271 +4525476 +4525487 +1831458 +1831643 +1841296 +4528593 +5880147 +11418741 +11513018 +11571523 +12151997 +12160125 +12022449 +7908344 +1761111 +1764531 +1769103 +1769897 +7701550 +1772793 +4532500 +5110490 +1777289 +8141741 +1777631 +1779399 +1780149 +1780150 +8193562 +1783882 +1786980 +1786985 +1788553 +1790692 +1790816 +5113078 +5113084 +5113234 +1792210 +1797178 +1797258 +1797276 +1797333 +1797349 +1797367 +1797429 +1797454 +1797479 +1797527 +1797542 +4532461 +4532471 +4532473 +8016905 +8756768 +1798346 +1798408 +4532493 +1798449 +1798481 +1798504 +1798594 +1798802 +1798807 +4532351 +4532352 +4532357 +1799708 +1803148 +1803163 +1804071 +1804906 +1805110 +1805111 +1805155 +4532608 +7874258 +1807969 +1808166 +1808440 +1808450 +1808752 +5115701 +5115771 +5115777 +1809210 +1810099 +5116416 +1813114 +5117189 +5117200 +7656811 +1814538 +1814552 +1814630 +1814653 +5117399 +5117400 +1816881 +1817797 +8326103 +1819050 +1819145 +4532297 +1819268 +8407461 +1819699 +9331464 +1819873 +1819928 +6122092 +7657803 +1820372 +1820406 +12253343 +5884571 +7596232 +5771982 +6097214 +4532544 +4532614 +4532549 +4532516 +4532532 +4532565 +12089608 +10062933 +8148822 +11962292 +12135372 +11033463 +11812181 +5115854 +5115872 +5115874 +5116475 +8165185 +6097254 +5116698 +1805535 +9198767 +1788635 +4532395 +4532405 +4532408 +4532412 +1780869 +8000103 +4532534 +1768626 +4532508 +4532510 +1760244 +1760246 +5113030 +5113036 +1821547 +1821856 +1821911 +1819170 +1812394 +8237987 +4532366 +4532453 +1820039 +1772822 +1771772 +1771779 +1777517 +1860979 +1860983 +1860987 +1860994 +1861011 +1861031 +4522911 +4522916 +4522919 +4522886 +4522890 +4522891 +1860765 +1860768 +1860852 +1860857 +7767114 +7961640 +1992378 +1992504 +1852956 +1852978 +1835432 +1835457 +1837420 +1837429 +8015612 +1840297 +1840301 +1840346 +1840360 +1840380 +1840478 +1840483 +1840555 +1840570 +1840581 +1840596 +1840621 +4529186 +1831752 +1852751 +1852831 +9473121 +5125075 +5125104 +8416348 +1751236 +1751298 +1751457 +1860408 +5123339 +5123419 +5769164 +5123461 +5123474 +1869595 +1869656 +1869803 +1869852 +1869858 +1869976 +1870202 +1870249 +1870250 +1870450 +1870650 +1870988 +5125306 +1871160 +1871212 +1871217 +1871252 +1871264 +1871407 +4531402 +4531409 +1871451 +4531365 +4531376 +1871683 +1871698 +1871783 +1871826 +4531427 +7673242 +1872848 +1872873 +1872901 +1872904 +1873048 +1873051 +1873079 +1873215 +1873411 +4530947 +4530951 +1873776 +1873783 +4531237 +1873890 +5125689 +1874168 +1874192 +1874204 +1874211 +1874229 +1874269 +1874280 +1874295 +4531145 +4531147 +4531158 +1874375 +1874743 +9782192 +1875008 +1875120 +8219149 +1875327 +1875376 +1875409 +1875429 +1875633 +1875680 +1875682 +1875687 +4531284 +1875827 +1875830 +1875865 +1875869 +1875918 +1875940 +1875952 +1875958 +1876329 +1876357 +1876512 +1876542 +1876623 +1876854 +1877038 +1877310 +1877341 +1877345 +1877368 +9111961 +5126052 +1877941 +1877986 +1877988 +1878067 +4531417 +4531425 +4531429 +1878197 +1878350 +1878370 +1878470 +1878471 +1878490 +1878500 +1878586 +5884888 +11728049 +1877035 +1872315 +1940158 +4525859 +4525884 +5141493 +5141501 +1940504 +1940510 +1940575 +1940644 +1940717 +1940744 +1940768 +4525777 +4525803 +1940807 +1940838 +4525846 +1941330 +1941348 +1941377 +1941437 +10309794 +12211069 +1939879 +1736377 +1736425 +1736447 +1736499 +1736560 +1736601 +1736623 +5102628 +1736727 +1736800 +1736898 +1736904 +1736905 +1736906 +4529931 +1737131 +1737342 +1737368 +1737413 +1737437 +1737491 +1737497 +1737509 +4530608 +7466487 +1737524 +1737526 +1737542 +1737552 +1737650 +1737753 +1737775 +1737776 +1737847 +1737893 +4530002 +8186212 +1738163 +1738222 +1738245 +1738337 +1738373 +1738422 +1738429 +1738514 +8420632 +8869900 +5102931 +5102951 +1738700 +1738722 +1738794 +1738839 +1738883 +1739151 +1739272 +1739290 +1739337 +1739377 +1739381 +5102982 +1739461 +1739605 +1739748 +1739797 +1739819 +1739833 +1739919 +1739922 +1739931 +1739980 +1740069 +1740120 +1740174 +1740185 +1740392 +1740482 +1740533 +1740567 +1740623 +8094357 +1740762 +1741056 +1741147 +1741258 +1741341 +1741368 +4530151 +8345820 +5103066 +5771357 +1741545 +10838422 +1741590 +1741593 +1741615 +1741633 +1741667 +1741752 +1741756 +4530424 +1741820 +1742185 +1742346 +5103451 +5103502 +5103613 +5103948 +5771350 +7975250 +1743196 +5103998 +7661023 +11846897 +7877231 +1743532 +1743588 +1743604 +5104056 +6097235 +1743643 +1743710 +1743768 +1743775 +1743782 +4529900 +4529908 +4529915 +1743828 +1743856 +1743862 +1743867 +1743898 +1744071 +1744136 +1744180 +4530632 +1744416 +1744498 +1744526 +1744588 +1744593 +1744728 +1744731 +1744739 +1744763 +1744782 +1744789 +1744808 +1744810 +1744896 +1745013 +1745079 +10844862 +1745558 +1745561 +1745600 +1745634 +1745643 +1745659 +1745678 +1745705 +1745737 +1745762 +1745781 +1745827 +1745830 +1745925 +1746027 +8424972 +1746174 +1746413 +1746440 +1746613 +1746666 +1746689 +1746775 +1746832 +1746856 +1746876 +1746910 +1747050 +1747141 +5104442 +4530138 +5104558 +1748203 +1748321 +5104597 +6097234 +1748456 +1748720 +5104641 +10580256 +5103121 +5103176 +5103181 +5103185 +5103227 +5771227 +5771229 +5771232 +5771239 +5771243 +5771249 +5771255 +5771259 +1831780 +4525503 +4525505 +4525510 +4525530 +4525540 +4525557 +4525562 +1920851 +1920864 +1920892 +10581870 +10825466 +10556522 +1921466 +1921521 +1921590 +7387466 +1922197 +10384044 +10442031 +10854079 +9904499 +1922311 +1922343 +8016522 +1922572 +1922584 +4535092 +1922937 +1923019 +1923037 +5138298 +5138492 +5138543 +5138561 +5714680 +1923796 +1924077 +1924082 +1924097 +5138681 +10656713 +1924713 +11470119 +1924867 +1925221 +1925233 +7354189 +4535172 +1925381 +1925410 +1925454 +1925918 +1925962 +1926054 +9816676 +1926324 +1926385 +1926546 +1926550 +1926722 +1926861 +5882965 +7680748 +1928248 +5139040 +5139156 +1928754 +1928945 +1928960 +1929270 +1929402 +1929659 +1929697 +5139339 +5792092 +8356768 +1930110 +1930904 +1930916 +4535106 +1931179 +1931509 +1931779 +1931788 +1932393 +1932411 +1932473 +1932517 +1932551 +1932752 +1932960 +1932976 +4535162 +5140214 +5140244 +5140436 +5140443 +5772702 +5772749 +7634721 +7664111 +9954885 +1933583 +1933647 +1933649 +1933793 +1926166 +1926260 +10879371 +11874998 +1933095 +1933126 +1933138 +1933163 +1933204 +1924494 +1752383 +4522322 +5105339 +1919181 +1919221 +1919223 +1919317 +1919320 +1919330 +1919333 +4535280 +4535285 +7981372 +1919346 +1919698 +1919703 +1919706 +1919712 +1919716 +1919966 +1920237 +1920247 +1920258 +1920259 +5137790 +1920357 +1920359 +1920369 +1920395 +1920491 +1920494 +1920496 +1920498 +1920502 +1920506 +1920509 +1920512 +4535307 +5805036 +5137902 +5137903 +5804895 +1920707 +1920709 +1920712 +4535271 +5137578 +5137582 +5137612 +5137682 +5137695 +5137706 +8203812 +1920218 +1748890 +1748922 +1748942 +1749070 +1749449 +1749713 +1749869 +1749921 +1749929 +1749936 +1750051 +1750131 +1750159 +1750326 +5104891 +5104940 +5105106 +1751051 +5104759 +1749635 +8741260 +1735532 +4527339 +1731860 +1855235 +1954490 +1954563 +5143380 +5143477 +1955479 +1955484 +5143651 +1955694 +1955856 +4524588 +5143675 +5143697 +1956440 +1956524 +1956599 +1956639 +1956897 +4525068 +1957266 +1957286 +1957300 +1957556 +1957565 +1957570 +1957572 +1957579 +1957583 +1957611 +1957632 +1957673 +1957706 +1957718 +1957746 +1957791 +1957816 +1957822 +4524320 +8172949 +1957845 +1957852 +1957854 +4524421 +4524424 +4524426 +5143944 +5143947 +1958024 +11554842 +1958065 +1958323 +1958515 +1959383 +1959395 +1959423 +1959436 +1959461 +1959467 +1959473 +1959682 +1959735 +1959799 +1959876 +1959914 +1959919 +1960002 +1960484 +1960617 +1961013 +1961037 +1961040 +1961068 +7741315 +1962204 +1962265 +1962268 +1962434 +1962516 +10004969 +1962584 +4524568 +1962636 +1962860 +1962961 +1962972 +1962990 +4302252 +1963168 +1963306 +1963446 +1963463 +1963587 +1963709 +1963710 +1963755 +1964189 +1964191 +1964195 +1964401 +1964471 +1964637 +1964653 +1964657 +8361848 +1964836 +5144426 +1965166 +1965197 +1965208 +1965345 +1965640 +1965763 +1965795 +1965825 +1965841 +1965913 +1966017 +1966351 +1966358 +1966854 +1966886 +5144534 +1967003 +1967006 +1967011 +1967025 +5144543 +1967245 +1967265 +1967273 +1967324 +1967452 +1967597 +1967803 +1967815 +1967873 +7681733 +1968678 +1968686 +1968837 +1968867 +11598540 +1968990 +1969291 +1969339 +1969463 +1969954 +1969958 +4523707 +1970213 +1970227 +1970243 +1970259 +1970284 +5144677 +5144721 +5144782 +5144787 +5144805 +5144880 +5144900 +5145009 +5145136 +5145186 +5145255 +5145260 +5145269 +5145409 +5145502 +5145522 +5145729 +5145842 +7753668 +8014296 +9627567 +1971847 +1971852 +1971858 +1971888 +1971986 +1972120 +1972185 +1972187 +1972234 +1972250 +1972278 +1972342 +1972374 +1972377 +5145870 +5145965 +7541913 +7624494 +7960566 +1972434 +1972449 +1973300 +1973323 +1973327 +1973414 +7996464 +5146420 +5146440 +5146476 +5146496 +5146510 +5146525 +5146559 +5146599 +5146601 +5146611 +5146651 +5146659 +5146677 +5146693 +5146720 +5146762 +5146774 +5146786 +5146815 +5146833 +5146837 +5146842 +5146852 +5146862 +5146883 +5146894 +5146899 +5146908 +5146920 +5146927 +5146946 +5146961 +5147002 +5147030 +5147038 +5147039 +5147041 +5147043 +5147058 +5147062 +5147071 +5147099 +5147145 +5147150 +5147155 +5147165 +5147171 +5147193 +5147208 +5147212 +5147232 +5147245 +5147259 +5147287 +5147319 +5147354 +5147395 +5147415 +5147437 +5147441 +5147478 +5147492 +5147513 +5147516 +5147534 +5147560 +7919880 +7988195 +8067894 +8366158 +5147608 +5147638 +1975341 +1975546 +1975553 +1975571 +1975733 +8329661 +1975793 +8160782 +1975897 +1975903 +1976163 +5147681 +6097233 +7973517 +8414310 +8955497 +5147794 +1977003 +1977068 +4523725 +5147827 +5147834 +1977300 +5769028 +5148247 +5148248 +1977962 +1977967 +1977971 +1978056 +1978065 +1978114 +1978375 +1978445 +4524636 +4524638 +10712554 +4524890 +4524902 +5148264 +1978770 +1978776 +1978821 +5148286 +1979308 +1979430 +1979473 +5148394 +5148424 +5148436 +5148462 +5148475 +5148486 +5148487 +1980521 +1980525 +8421569 +1981696 +1981998 +1982406 +1982458 +1982500 +1982525 +1982529 +1982533 +1982541 +1982542 +1982592 +1982636 +1982671 +1982746 +1982770 +1982779 +1982790 +1982838 +1982867 +1982885 +1982918 +1982924 +1983000 +1983034 +1983039 +1983052 +1983062 +1983101 +1983170 +1983260 +1983288 +1983387 +1983393 +1983442 +1983525 +1983528 +1983548 +1983648 +1983705 +1983755 +1983756 +1983888 +1983896 +1983922 +1983967 +1983997 +1983999 +1984033 +1984117 +7752082 +8015895 +8262357 +8394261 +1984734 +1984942 +1984949 +1984954 +7905361 +1985522 +1985573 +1985734 +1985742 +1985760 +1986052 +1986056 +1986157 +1986166 +1986171 +1986220 +1986367 +1986452 +1986522 +1986575 +1986604 +1986877 +5149315 +5768880 +1987527 +9137631 +1987578 +4525091 +4525093 +4525097 +4525103 +6118530 +1987650 +1987737 +1987744 +4524221 +4524223 +1988007 +1988019 +1988064 +4524513 +1988390 +1988506 +1988593 +1988602 +1988642 +1988684 +7555991 +8388883 +1988762 +5149438 +1988881 +1989428 +1990066 +1990150 +1990533 +1990551 +1990582 +5149474 +1991179 +1991371 +1991532 +5149836 +5149839 +5149843 +1991846 +1992066 +8180900 +5880512 +5880533 +5880545 +5880550 +5880552 +5880559 +5880563 +8237343 +8632989 +5769062 +5769068 +5769072 +7429212 +11654024 +7507369 +9414984 +9563355 +1989594 +4524740 +7990739 +4523556 +4523560 +4523564 +4524052 +4524054 +4523486 +4523461 +4525034 +4524376 +4524822 +4524712 +4523522 +4524541 +4523519 +4524072 +4524403 +4524793 +4524914 +4524922 +4524929 +4524951 +4524955 +4524961 +4524962 +4525078 +9220953 +9249651 +5144190 +5146412 +5768597 +5149499 +5149569 +7769543 +8851663 +4523880 +4523883 +4523885 +5149659 +5149664 +5149665 +5149667 +5149704 +5149717 +5149746 +5149768 +5149780 +5149784 +5149787 +5149820 +7443518 +5146342 +5146379 +4302268 +4524393 +5141677 +1943397 +4535386 +8178854 +8277078 +8073674 +8133678 +8273661 +1945569 +1945589 +1945877 +1946661 +7389824 +1947335 +5142338 +5142352 +1949715 +1949784 +1949794 +1949850 +1949852 +1949877 +1949929 +1949938 +1949954 +5142394 +5142599 +7683096 +8109173 +5977247 +8270406 +7633472 +10715410 +4535396 +5142006 +5142032 +5142042 +1869467 +1869512 +5769709 +9530977 +5109821 +1758878 +1759055 +1759069 +1759079 +1759083 +1759097 +4533952 +7972792 +1759153 +1759159 +4533211 +1759407 +1759597 +1759661 +1759667 +1759668 +1759673 +1760104 +7444489 +9060267 +1760593 +1794361 +4533957 +4534225 +8708745 +1760857 +1760867 +1760887 +1760891 +1760893 +4533255 +5108958 +1761041 +1761392 +1761438 +1761735 +1761865 +1762244 +1762383 +1762680 +5109498 +5109506 +5109523 +5109599 +5109614 +5109646 +5109661 +5109722 +1763610 +1763697 +8167743 +1764174 +1764673 +1764986 +1764987 +1765011 +1765017 +1765038 +1765044 +1765069 +1765073 +4534245 +4534250 +4534252 +4534257 +4534275 +5109843 +5109855 +5109931 +8352161 +1765604 +1765767 +1765954 +1766086 +1766128 +1766130 +1766131 +1766137 +1766210 +4534691 +1766274 +1766410 +1766418 +1766510 +7895336 +1766646 +1766718 +1766721 +1766741 +1766773 +1766784 +1766814 +1767511 +1767597 +1767608 +1767625 +1767655 +1767674 +5772169 +5772171 +5772172 +5772176 +5772178 +5772180 +5772186 +5772196 +5772199 +5772202 +5772205 +5772206 +5772210 +7388922 +7768584 +8045644 +1768117 +1768150 +5110200 +1768308 +1768341 +5110211 +5110213 +1768702 +1768727 +1768729 +1768735 +1768741 +1768749 +1768771 +1768815 +1768819 +1769029 +1769057 +1769505 +1769519 +1769543 +1769566 +1769944 +1769958 +1770150 +1770307 +1770353 +1770416 +1770477 +1770530 +4532696 +8393221 +1771385 +7725644 +1771509 +1771531 +4532986 +1772169 +1772179 +1772255 +5772129 +1772940 +1772956 +1773062 +1773163 +1773328 +1773484 +1773572 +8222049 +1774272 +1774859 +1774873 +1774878 +1774959 +1775112 +4534046 +4534052 +4534057 +1775172 +1775299 +1775301 +1775329 +5110593 +5772269 +5883881 +1775891 +1775913 +4534719 +5110670 +1776207 +1776330 +1776371 +5772446 +1776619 +1776862 +1777253 +5110818 +5110858 +5110871 +5110885 +1778074 +4534299 +1778127 +1778143 +1778517 +1778596 +5111147 +5111481 +5111501 +5111513 +5111574 +5772222 +8253467 +1779258 +1779435 +1779641 +1779690 +1780378 +4533937 +1780926 +1780928 +1780954 +1781008 +1781016 +4533285 +4533325 +7664771 +1782319 +1782560 +1782579 +1782615 +1782627 +1782672 +1782726 +1782727 +1782763 +1782777 +1782841 +1782872 +1782927 +1782948 +1783016 +1783043 +1783090 +5112155 +5112160 +5112254 +5112283 +5112291 +5112336 +5112345 +5112388 +5714973 +5715004 +5772349 +5772351 +7921916 +8043500 +1783777 +1783855 +1783971 +1784349 +1784359 +1784812 +1784824 +1784826 +1784853 +4534290 +1785185 +1785286 +4532886 +4532888 +4532890 +1785329 +1785361 +1785883 +1785887 +1785888 +1785895 +1786017 +8292872 +1786360 +1786619 +1786651 +1786658 +1786664 +1786902 +1786936 +1787064 +1787112 +1787213 +1787267 +1787279 +1787400 +1787417 +1787438 +1787504 +1787590 +1787610 +1787631 +1787697 +1787751 +1787770 +1787825 +1787859 +1787905 +4534086 +7917033 +1788425 +1788522 +1788734 +9216200 +4534011 +4534017 +1788917 +1789071 +1789073 +1789076 +1789086 +1789250 +1789255 +1789267 +9805848 +1789403 +4533882 +4533924 +1789481 +1789491 +1789553 +1789580 +4534162 +4534166 +4534170 +4534194 +1789694 +1789695 +1789730 +1789745 +1789753 +1789755 +1789783 +1789785 +1789840 +1789849 +1789957 +10904813 +1789982 +1789984 +1790002 +1790023 +1790059 +1790062 +1790072 +1790084 +1790153 +4533115 +8047343 +9092175 +1790364 +1790625 +1790671 +1791384 +1791422 +1791784 +1791846 +1792061 +1792292 +1792300 +1792335 +1792379 +1792383 +1792411 +1792414 +1792418 +1792426 +1792645 +1792768 +1792996 +1793212 +7918000 +1793877 +1794351 +1794532 +1794534 +1794590 +1794599 +1794609 +1795068 +4532908 +1795180 +1795215 +1795282 +7869346 +1795483 +7922810 +1795854 +1795862 +1795896 +1795900 +1795930 +1795946 +1795957 +1796007 +1796032 +1796117 +1796139 +1796145 +1796169 +4534485 +4534486 +7438067 +8007222 +1796217 +7780930 +4532700 +9803522 +1796423 +1796451 +1796463 +8105817 +1796678 +4533431 +4533433 +4533446 +1798372 +11992983 +1798916 +1798922 +1798931 +1798971 +1798974 +1798984 +1799132 +1799135 +1799701 +1799799 +1800004 +1800032 +6097260 +7712384 +7981386 +8304206 +8742426 +9069966 +4534389 +4534207 +10638451 +4532273 +4532283 +4532811 +4534663 +4533273 +4534540 +8890502 +9135821 +4534038 +4533202 +6544687 +4534538 +4534360 +4533125 +4533128 +4533136 +4533661 +4533663 +4533671 +4534408 +4534458 +4534533 +5883985 +8021109 +11478679 +5110644 +7654770 +6116899 +1774283 +1774285 +5114198 +1763072 +5772063 +9038042 +4534675 +4534681 +4534683 +4534685 +4534686 +8108800 +1771634 +1771650 +1771678 +1771698 +1770772 +1770773 +1770821 +1770869 +1770880 +1771040 +1771143 +1771169 +1771204 +1771214 +1771245 +4533695 +4533714 +4533720 +7940536 +1765751 +5113847 +5113853 +5772309 +5108660 +5108761 +4534525 +1773901 +1773904 +4533344 +4533345 +4533347 +4533360 +4533362 +11819666 +4532203 +4532206 +4532216 +4532236 +4532239 +4532260 +4532264 +4532266 +8103163 +8363507 +1822346 +1822587 +1822610 +1822613 +1822787 +1822796 +1822819 +1822830 +1823604 +1823726 +1824113 +1824117 +1824121 +1824131 +1825064 +1825077 +1825083 +4534909 +4534914 +1825156 +1825176 +4534826 +5118892 +5118904 +7624468 +7937573 +8397564 +1825539 +1825971 +1825983 +1826022 +5118996 +1827125 +5119143 +5119193 +5119245 +1827645 +1828162 +4534872 +6201790 +1893137 +1894268 +7712938 +1894714 +4535614 +4535627 +4535632 +4535636 +8049830 +1894840 +4535827 +4535809 +4535817 +4535819 +9519321 +6231906 +1896841 +1896915 +1897852 +1898286 +1898290 +4299368 +4299370 +1898521 +1898544 +5129378 +1901850 +5130464 +5130542 +1902533 +1902749 +8140883 +8189761 +4535689 +6221746 +1905383 +1906552 +8208583 +4535754 +1909398 +1909838 +1911093 +1911112 +1911122 +1911168 +1911182 +1911278 +1911298 +1911300 +1911461 +7728366 +8396242 +1911633 +4535592 +4535596 +7809779 +8078362 +1912325 +1912372 +1912395 +1912470 +4299535 +4299597 +5133990 +5772890 +7428726 +7799370 +4535581 +5134098 +5134301 +8312017 +1913175 +1913178 +1913328 +1913351 +1913371 +11046092 +5134469 +5134543 +5134569 +5134583 +5134607 +5134621 +5134659 +5134682 +5134686 +5134815 +5134837 +5135191 +5772948 +7509928 +7700512 +7738295 +7791190 +7791558 +7798382 +7940299 +8047165 +8137978 +8167638 +8214814 +8233062 +8262258 +8295666 +8298764 +8314088 +1916347 +1916352 +1916376 +1916410 +1916412 +1916458 +1916554 +7854318 +1918632 +1918667 +1918669 +1918688 +1918694 +1918733 +1918736 +1918776 +1918789 +1918795 +1918843 +1918854 +1918859 +1918868 +4535539 +8035998 +8176911 +7622059 +7988274 +8404037 +4535618 +4535620 +4535510 +5130587 +5130682 +7762841 +5131096 +5131142 +5132183 +8001799 +5133088 +7642610 +5135513 +5135546 +1896957 +5131910 +8138711 +1902169 +1902182 +1899349 +1899433 +1899737 +1899818 +5129913 +6229058 +7768674 +7867379 +7934873 +8168644 +8393082 +1951557 +4527355 +5142870 +1951649 +1952014 +1952062 +1952130 +1952229 +5143048 +1952449 +1952532 +5143129 +5143147 +1952806 +1952812 +1952816 +1951713 +1951725 +1832853 +1833096 +1853064 +4529248 +5976910 +1735193 +1941864 +5120465 +5120577 +5120675 +5121040 +5121177 +5121613 +1842097 +5120396 +1842485 +1842508 +1842542 +4301036 +1842690 +1842695 +4529738 +1843602 +8292351 +5101394 +1730978 +1731263 +4525641 +1731598 +1872368 +1878782 +1878798 +1878804 +1878845 +1878862 +1878879 +1878895 +1878904 +1878907 +1878939 +1878951 +4531506 +4531517 +1879001 +1879227 +1879252 +1879408 +1879427 +1879452 +1879471 +5126212 +5126217 +1879534 +1879630 +1879655 +1879691 +1879703 +1879731 +1879735 +1879765 +1879970 +1880064 +1880094 +1880104 +1880139 +1880140 +1880143 +1880818 +1880907 +1880931 +4531643 +1881122 +1881126 +1881151 +9819403 +4531687 +1881208 +1881362 +1881393 +1881404 +1881418 +1881603 +4531713 +1881834 +4531975 +1882158 +1882165 +1882210 +1882437 +1882459 +1882557 +5126834 +1882905 +1882965 +1883067 +1883161 +1883168 +1883386 +1883634 +4531690 +4531708 +1884465 +1884774 +4532122 +4532146 +1884970 +1885931 +1885937 +1886084 +1886251 +8223165 +1886579 +1886587 +1886648 +7562564 +1886951 +1887290 +4531670 +1887701 +4531968 +1888346 +10922411 +1888463 +1888484 +1888491 +1888579 +1888619 +1888623 +1888733 +1888736 +1888759 +1888826 +1889287 +9228024 +1889905 +1889942 +1890187 +1890346 +1890487 +1890522 +1890534 +1890540 +1890576 +1890656 +1890670 +1890679 +1890699 +1890701 +1890703 +1890724 +1890772 +1890776 +1890823 +1890898 +1890957 +1890975 +1891013 +1891059 +1891129 +1891167 +1891171 +1891177 +1891186 +1891190 +1891217 +1891326 +1891366 +1891386 +1891426 +1891453 +1891473 +1891493 +1891494 +4532022 +4532024 +8411753 +1892242 +1892245 +1892476 +9674732 +1884240 +1884254 +1884255 +1884273 +1884274 +1884280 +1884312 +1884332 +1884365 +1884370 +1884403 +5884851 +5771877 +11761541 +5126675 +5126680 +7446048 +8537359 +8823068 +8856895 +8858121 +9100030 +9101339 +1889833 +1887108 +1887173 +1887177 +4532088 +4532095 +4532097 +6121184 +8218441 +4532150 +4532155 +4532160 +5771880 +1846107 +1846111 +1846112 +1846133 +1846159 +1830879 +1830937 +1831002 +1831009 +1831128 +1831136 +5122293 +4526048 +1854202 +1854259 +1854347 +5122439 +1854615 +1854824 +1854849 +1854237 +4526050 +7717983 +1858637 +1858674 +1858698 +1858762 +1858775 +1858930 +1859046 +1859177 +1859285 +1860026 +1860063 +4536472 +8200050 +12046692 +1973467 +4525132 +5123221 +6097269 +5124512 +1866356 +1866556 +1866568 +5124911 +1867820 +1867928 +7764232 +7734292 +1841460 +1841616 +1841706 +1841813 +1841946 +1841989 +1861494 +1861510 +1861644 +1861673 +1861797 +1861842 +1861862 +1862293 +1862401 +1862517 +1862578 +1862580 +1862692 +1862701 +1862719 +1862765 +1862774 +1862837 +1862894 +5123922 +5124007 +1864161 +1864358 +1864377 +5124143 +5124151 +5124233 +1864652 +1993419 +1939432 +4525189 +5119506 +5119513 +1830380 +1830407 +1830408 +1830410 +1830457 +4525369 +1830498 +4525425 +7976145 +1830534 +1830632 +1830802 +4525364 +1754183 +1754332 +5105929 +5106115 +5106249 +5106539 +5106894 +5107076 +5107128 +5107219 +5107640 +5107644 +5107829 +7410701 +7586742 +7674502 +7761138 +7778368 +7870336 +7903078 +7909858 +7955974 +8048904 +8102790 +8111395 +8158342 +8201251 +8348761 +8426357 +8964772 +4522753 +1939647 +1939658 +1939677 +1939680 +1939688 +1939717 +7646066 +1829322 +1829363 +10055273 +1855452 +1855799 +1856005 +1856105 +1856289 +5122798 +1856595 +1856663 +1856686 +1856701 +1856730 +1856772 +1856867 +1857068 +1857143 +1857577 +1857581 +1857626 +1857785 +1857828 +1857829 +1857878 +1858074 +1858113 +1858163 +1858283 +1858321 +1938050 +1938069 +1938131 +8225376 +1936969 +1938214 +4690079 +1938520 +1938810 +1938955 +5141262 +5141288 +5141291 +5141297 +5141305 +5802625 +1856503 +1858531 +1838691 +1838811 +1838838 +1838905 +1838911 +4528692 +4528694 +1833626 +1833627 +4528658 +1834589 +1834775 +1835031 +5770913 +1835156 +1835393 +1835396 +1835422 +1836899 +1837172 +1838969 +1839770 +1839851 +1839878 +1839893 +1841158 +1841159 +4529032 +5119893 +5114409 +4534796 +4534798 +4534757 +1801051 +1801896 +4534773 +4534776 +4534778 +4534779 +4534782 +4534787 +4534788 +4534792 +9894093 +1802280 +1803012 +1803060 +1803073 +1803108 +4534762 +4534767 +4534769 +5114311 +5114316 +5114327 +8244266 diff --git a/dev/releases/mambo_v3/presets/middle_east.classes b/dev/releases/mambo_v3/presets/middle_east.classes new file mode 100644 index 0000000..0b54d16 --- /dev/null +++ b/dev/releases/mambo_v3/presets/middle_east.classes @@ -0,0 +1,846 @@ +1934693 +1732115 +1733484 +5101745 +5769191 +1734690 +1734704 +1831890 +1845270 +1845548 +4528100 +9546514 +1848219 +9868978 +1850781 +1852165 +11287091 +6097236 +8871600 +1845866 +1845962 +1839094 +1841261 +1831458 +1764531 +1769103 +1769897 +7701550 +4532500 +5110490 +1779399 +1783882 +1786980 +1786985 +1788553 +1790692 +1790816 +5113084 +1797178 +1797258 +1797276 +1797333 +1797349 +1797429 +1797454 +1797479 +1797527 +4532461 +4532473 +8016905 +1798346 +1798408 +1798481 +1798504 +1798802 +4532352 +1803148 +1803163 +1804071 +1805111 +1807969 +1808166 +1808195 +1808440 +1808450 +1808752 +5115701 +5115771 +1810099 +7656811 +1814538 +1814653 +5117400 +1819050 +1819145 +8407461 +6122092 +1820372 +1820406 +12253343 +5884571 +6097214 +4532544 +4532516 +4532532 +12089608 +10062933 +8148822 +6112449 +5115874 +5116698 +1788635 +4532412 +8000103 +4532534 +4532508 +1760246 +1821547 +1804182 +1812394 +8237987 +4532453 +1820039 +4687389 +1772822 +1777517 +1860987 +4522890 +1860765 +1831752 +5125075 +5123339 +5123419 +5123474 +1870450 +5125306 +1871212 +1871407 +4531402 +4531409 +1871451 +1871783 +4531427 +1872848 +1872901 +1873051 +1873079 +1873215 +4531237 +5125689 +1874280 +1875120 +1875827 +1875918 +1875958 +1876329 +1876542 +1877345 +9111961 +5126052 +1877941 +1877988 +1878067 +4531417 +1878470 +5884888 +4525884 +1940644 +1940717 +1940744 +4525777 +4525803 +12211069 +1939879 +1736623 +1737368 +1737526 +1737776 +1737847 +8186212 +1739833 +1740623 +8094357 +1741341 +1742185 +11846897 +1743898 +1744526 +1746832 +5104442 +5104597 +1920851 +1920864 +1921044 +10581870 +10825466 +1921150 +10556522 +1921466 +7387466 +1922244 +1922288 +10384044 +10442031 +9904499 +1922311 +1922343 +8016522 +1922572 +1922584 +4535092 +1922689 +1923019 +5138298 +5138543 +5714680 +1923650 +1924077 +1924097 +5138681 +10656713 +1924713 +1925233 +1925381 +1925454 +1925609 +1925918 +1925962 +9816676 +1926324 +1926448 +1926546 +1926550 +1926722 +1926861 +5882965 +7680748 +1928248 +5139040 +5139050 +5139156 +5139201 +1928754 +1928960 +1929270 +1929402 +1929659 +1929697 +5139339 +8356768 +1930110 +1930904 +1930916 +4535106 +1931179 +1931509 +1931779 +1932166 +1932172 +1932411 +1932752 +1932976 +5806412 +4535162 +5140214 +5140244 +5140436 +5140443 +7634721 +7664111 +1933583 +1933647 +1933649 +1933793 +1934192 +1926260 +10879371 +11874998 +1933095 +1933138 +1924494 +5105339 +1919181 +1919221 +1919223 +1919320 +1919333 +1919346 +1919348 +1919706 +1919712 +1919716 +1919966 +5137748 +1920181 +1920237 +1920247 +1920258 +1920259 +5137790 +5137849 +1920349 +1920356 +1920357 +1920362 +1920369 +1920374 +1920395 +1920491 +1920496 +1920502 +1920506 +1920512 +4535307 +5137891 +5805036 +5137902 +5137903 +1920707 +1920709 +1920712 +5137578 +5137605 +5137612 +5137663 +5137682 +5137706 +8203812 +1920218 +7207679 +1954490 +1954563 +5143380 +5143651 +1955694 +1955856 +1956440 +4525068 +1957266 +1957300 +1957572 +1957579 +1957583 +1957611 +1957718 +1957852 +1959395 +1959461 +1959682 +1960002 +1960484 +1960617 +1961013 +1962268 +1962636 +4302252 +1963168 +1963306 +1963710 +1964471 +1964637 +1965197 +1965913 +1967003 +1967006 +1967011 +1967265 +1967873 +11598540 +1968990 +1969463 +5144677 +5144782 +5144805 +5144880 +5144900 +5145186 +5145255 +5145502 +5145522 +8014296 +1971847 +5146476 +5146599 +5146601 +5146677 +5146762 +5146833 +5146837 +5146894 +5147030 +5147043 +5147062 +5147150 +5147171 +5147232 +5147354 +5147415 +5147441 +5147516 +8366158 +5147681 +1977068 +1977962 +4524638 +1980521 +1981998 +1983525 +1984033 +1984734 +1984942 +1985573 +1985760 +1986157 +9137631 +1987744 +4524221 +1989428 +1990582 +5149474 +1991371 +1992066 +5880550 +7429212 +9414984 +1989594 +4524998 +4525034 +4524376 +4524712 +4523522 +4523519 +4525078 +9220953 +9249651 +5149659 +5149768 +5149787 +7443518 +1942769 +4689929 +5141677 +1943236 +1943397 +8178854 +8277078 +8073674 +8273661 +1944504 +1945569 +1945589 +1945605 +1945877 +1945878 +1946661 +1946695 +7389824 +1947117 +1948941 +5142338 +5142352 +1949784 +1949794 +1949850 +1949877 +1949929 +5142599 +8109173 +1950156 +5977247 +8270406 +7633472 +4535396 +5142032 +1759079 +1759083 +1759153 +1760593 +1794361 +1760857 +1760891 +4533255 +1761438 +1761735 +1762680 +5109646 +5109661 +1764174 +1765017 +4534245 +4534252 +5109843 +5109855 +5109931 +8352161 +1765767 +1765954 +1766137 +1766210 +1766646 +1767511 +1767625 +1767674 +5772169 +5772171 +5772172 +5772176 +5772178 +5772186 +5772199 +5772206 +1768117 +5110213 +1769057 +1770353 +1770477 +4532696 +1772013 +8222049 +1776619 +1777253 +5110818 +1778074 +5111481 +5111513 +5772222 +1779641 +1780378 +4533325 +1782560 +1782672 +1782726 +1782948 +1783043 +5112283 +5714973 +5772349 +1783971 +1784349 +1784853 +1785185 +4532890 +1785361 +1786360 +1786619 +1786664 +1787064 +1787279 +1787610 +1787825 +1788522 +4534011 +1789071 +1789076 +1789086 +4534166 +1789695 +1789730 +1789745 +1789753 +1789755 +1790153 +4533115 +1792061 +1792418 +1792768 +1792996 +7918000 +1795068 +1795215 +7922810 +1795900 +1796169 +4532700 +1796451 +6097260 +4532811 +4534538 +4533125 +5883985 +8021109 +7654770 +6116899 +5114198 +1763072 +5772063 +9038042 +4534675 +4534681 +4534683 +8108800 +1771650 +1770772 +1770821 +1771040 +1771245 +4533714 +1765751 +5113847 +5113853 +5772309 +5108660 +5108761 +4532203 +4532206 +4532236 +4532260 +4532266 +8363507 +1822610 +1822796 +1823726 +1824113 +1824117 +1825077 +4534909 +4534914 +1825156 +5118904 +5118996 +5119245 +1892554 +1892555 +5806166 +1893137 +1893558 +1894268 +10398658 +1894714 +4535632 +4535636 +8049830 +10639484 +1894840 +4535809 +1896915 +1898286 +4299368 +5129293 +7346344 +1898521 +1898544 +1899071 +1901850 +5130392 +5130464 +5130471 +5130542 +8140883 +8189761 +4535689 +6221746 +1905383 +1906552 +8208583 +4535754 +5881946 +10656625 +1909398 +1909838 +1911298 +1911300 +1911461 +7728366 +5133687 +1911633 +4535596 +7809779 +8078362 +5133693 +1912395 +4299535 +5133990 +5772890 +4535581 +5134098 +5134301 +8312017 +1913175 +1913178 +1913328 +5135191 +8233062 +8314088 +11372793 +5136306 +1916376 +1916410 +1916412 +1918497 +1918667 +1918736 +1918776 +1918789 +1918843 +1918854 +8035998 +11645316 +4535618 +4535620 +4535510 +5130587 +7762841 +5131096 +8001799 +7642610 +5135513 +5135546 +1896957 +5129091 +9087922 +8138711 +1910628 +1899349 +1899433 +1899818 +5129913 +7934873 +8168644 +8393082 +5142870 +1952062 +1952816 +1941864 +1842097 +4301036 +8292351 +5101394 +1730978 +1731263 +1731598 +1878862 +1878895 +1878904 +1879001 +1879227 +1879408 +1879452 +1879471 +1879765 +1880907 +1880931 +1881126 +1881151 +9819403 +1881362 +1882210 +1882965 +1883067 +1883386 +1884465 +1884774 +1885937 +1886084 +1886088 +1886251 +1886587 +7562564 +4531670 +1888346 +10922411 +1888484 +1888579 +1888619 +1888759 +1889287 +1890187 +1890320 +1890534 +1890576 +1890670 +1890772 +1890776 +1890898 +1891129 +1891167 +1891177 +1891190 +1891217 +1891326 +1891386 +1891494 +4532022 +4532024 +1892242 +1892245 +1892476 +9674732 +1884255 +1884403 +5771877 +6133232 +5126680 +1889833 +5127656 +6121184 +4532150 +4532160 +5771880 +1831136 +1854615 +1858674 +1859046 +1973467 +5123221 +1867928 +1861494 +1861510 +1861644 +1861673 +1861797 +1861842 +1862293 +1862401 +1862517 +1862580 +1862692 +1862719 +1862765 +1862774 +5123922 +5124007 +1864161 +1864358 +1864652 +1993419 +5106115 +5106249 +5107076 +5107219 +7410701 +7674502 +7903078 +8201251 +8426357 +4522753 +1856289 +5122798 +1857581 +1857626 +1857829 +1858283 +1938069 +1938125 +1938131 +8225376 +1936969 +1938214 +1938520 +1938810 +5141262 +5141291 +5141305 +1835031 +5770913 +1841159 +5114409 +4534796 +1801051 +4534776 +4534779 +4534788 +9894093 +1802280 +1803060 +4534769 diff --git a/dev/releases/mambo_v3/presets/new_zealand.classes b/dev/releases/mambo_v3/presets/new_zealand.classes new file mode 100644 index 0000000..dc4c509 --- /dev/null +++ b/dev/releases/mambo_v3/presets/new_zealand.classes @@ -0,0 +1,425 @@ +1831999 +1832649 +1849007 +1849010 +1850156 +1850184 +1850781 +5806361 +11528968 +1851347 +1829776 +1829814 +4705103 +4695719 +1828395 +1828400 +1828402 +8150089 +1828426 +1828826 +1845965 +1830812 +1831473 +1831499 +1831565 +1831667 +4708342 +1761751 +1761752 +1762849 +1780857 +1798023 +5113950 +1803197 +5115777 +1816110 +1816264 +1781413 +9400916 +5113036 +4687389 +4529064 +1837724 +1837726 +1837727 +1839714 +1840346 +1841095 +1831752 +1852832 +5123339 +1870703 +1870988 +1872735 +1872827 +1872901 +1873079 +1874146 +1875534 +1876542 +10142569 +1877453 +1877988 +1878470 +1878490 +1890056 +1890065 +1836907 +1940575 +1736623 +1737131 +1737847 +1737893 +1738045 +1738081 +1739128 +1739220 +1739553 +1739567 +1743182 +1743184 +1743319 +4707896 +4707900 +1744998 +1745307 +1746462 +1746512 +1747068 +1747215 +1747222 +1747814 +1748103 +1748425 +1748518 +1748648 +1748661 +1738196 +1924713 +5139357 +5139524 +5139673 +11636481 +1932563 +7346444 +1920496 +1749531 +1749664 +1750131 +1750326 +5104903 +1954236 +1954514 +5143586 +1955271 +1955272 +1955413 +1955416 +1955422 +1955753 +1955755 +1955763 +1955899 +1956416 +1959379 +1960004 +4702961 +1962656 +1962657 +1962659 +1962689 +1964137 +1964141 +1964143 +1964144 +1964151 +1964153 +1964155 +1964158 +1964174 +1966978 +5144554 +5144558 +1970145 +1970148 +1970150 +5144937 +4702783 +4702784 +1972797 +1972800 +1972806 +5146856 +1976933 +1976934 +1976939 +1976941 +5148096 +1977759 +1977764 +1977767 +1977773 +1978274 +1978281 +1978282 +1978283 +4702599 +4702603 +4702609 +1980055 +1980063 +1980068 +1986101 +4702731 +1987855 +4702892 +4702893 +4702911 +4702912 +1988894 +1989282 +1989377 +1992167 +1954338 +1954344 +1954346 +1954351 +1954353 +1954356 +1954359 +10263383 +1758727 +1760173 +1762902 +5109882 +5802396 +1768546 +1768554 +1768557 +1768560 +1769302 +4688049 +9493016 +1776182 +5111195 +1785145 +1785149 +1785314 +1785329 +5112457 +5112460 +5112461 +5112464 +5112465 +5112467 +5112469 +5112474 +5112475 +5112480 +5112481 +1787165 +1791793 +1791862 +1794425 +1795068 +10690739 +10700540 +10706419 +10716234 +10732033 +10741837 +10747908 +10799294 +10814936 +10824750 +10840540 +10840565 +10850393 +10850415 +10866199 +10891794 +11539735 +11858666 +1796791 +1798084 +1792560 +8108800 +1770849 +1771245 +1771296 +1894054 +7712938 +5806175 +5806176 +5806177 +1902106 +1902108 +1909216 +1908108 +5133088 +7642610 +1910629 +1853190 +1735168 +1735391 +1735398 +5102432 +5120675 +5121177 +5121613 +8273859 +1842119 +1842124 +5120396 +1842508 +1879405 +10851840 +10857326 +5126231 +5126240 +5126241 +5126259 +5126284 +5126287 +5126292 +5126315 +5126332 +5126344 +5126357 +5126381 +5126396 +5126397 +5126398 +5126434 +5126445 +5126449 +5126454 +5126458 +5802331 +5802333 +1880353 +1880439 +1881122 +1881132 +1881157 +1881504 +1882297 +1882355 +5126866 +5126870 +5126889 +5126905 +5126916 +5126946 +5127024 +5127045 +5127054 +1882905 +1882965 +1884503 +1884539 +1884595 +1884607 +1884610 +4687228 +1884936 +1886251 +1887580 +1887686 +1888958 +1892462 +6133232 +5802339 +10245924 +10769553 +1887126 +1880275 +1880286 +1880293 +1880305 +1880310 +1880316 +1880318 +1880321 +1880350 +1831097 +1831136 +4708183 +10546013 +11428453 +1854028 +1854249 +1854906 +1858674 +1858762 +1859061 +4536292 +9590272 +9801765 +5123118 +5123137 +5123276 +1861644 +1992976 +1757853 +8254441 +1856005 +5122779 +1856348 +1856374 +1856516 +1857143 +1857180 +1857213 +1857233 +1857241 +1857295 +1857385 +1857410 +1857626 +1857829 +1857882 +1857900 +1857935 +1858100 +1858523 +1858526 +1856893 +1838289 +1838304 +1838308 +1838331 +1833518 +1833523 +1833525 +1833531 +1833532 +1833535 +1833539 +1833600 +1833664 +1835082 +1836871 +1836899 +1837172 +1837572 +1837857 +1837870 +1837894 +1838626 +1838629 +1838633 +1838635 +1838641 +1838649 +8958353 +1838960 +4528702 +1839370 +1841180 +1841183 +1841188 +1841215 +1841219 +1801432 diff --git a/dev/releases/mambo_v3/presets/north_africa.classes b/dev/releases/mambo_v3/presets/north_africa.classes new file mode 100644 index 0000000..7160bb9 --- /dev/null +++ b/dev/releases/mambo_v3/presets/north_africa.classes @@ -0,0 +1,236 @@ +1733755 +1734704 +11529292 +1845270 +9868978 +1850640 +1850781 +1845952 +4532500 +1783882 +1786980 +1786985 +1788553 +1790692 +1792210 +1797542 +4532473 +1798481 +1798504 +1798802 +4532352 +1803148 +1803163 +1805110 +5117189 +1814552 +9331464 +1819928 +8148822 +1780869 +4532453 +1777517 +1860857 +1871252 +1871783 +7673242 +1872901 +1873079 +1873215 +1875409 +1875687 +1876542 +9111961 +5126052 +4531417 +5884888 +1941330 +10309794 +1736623 +1739833 +10581870 +1922572 +1924082 +10656713 +1924713 +1925918 +1926324 +1926385 +1926546 +1926550 +1929697 +1930904 +1930916 +4535106 +1931788 +1932393 +1932411 +1932752 +1932976 +9954885 +1933647 +1933649 +1926166 +1933204 +1919223 +1919333 +7981372 +1919346 +1919703 +1919966 +1920258 +5137790 +1920359 +1920369 +1920395 +1920496 +1920506 +1920709 +5137612 +1920218 +1955694 +1957266 +1957286 +8172949 +1961013 +1964195 +1964836 +1967025 +1967265 +1969958 +5144805 +5144900 +5145502 +5145842 +8014296 +7996464 +5146611 +5146774 +5146837 +5147039 +5147043 +5147354 +5147395 +5147415 +5147437 +5147441 +5147478 +5147560 +5148264 +1983039 +1983062 +1983525 +1983528 +1985742 +4525093 +6118530 +1988019 +1988064 +1992066 +11654024 +7507369 +1989594 +4525034 +4524541 +9220953 +5149787 +8277078 +8073674 +1946661 +5142338 +1949954 +4534275 +5109843 +5109931 +8352161 +5772171 +5772172 +1775329 +5110858 +5772222 +1785185 +1786360 +1787770 +4534166 +4534194 +1792418 +1795068 +4532908 +1795483 +4532811 +1763072 +4534675 +4534681 +8108800 +1770821 +1771040 +4533714 +1765751 +4532203 +4532206 +4532266 +1824131 +5118892 +4535632 +8049830 +4535809 +4535819 +4299368 +1901850 +5130542 +1911461 +5134098 +5134301 +1916352 +1916554 +1918632 +1918776 +7988274 +8404037 +7762841 +7642610 +1896957 +1899737 +7934873 +8393082 +1879001 +1879408 +1879427 +1879452 +1879471 +1879691 +1881126 +1881151 +9819403 +1881362 +1882905 +1882965 +1885931 +1886251 +7562564 +1888484 +1890534 +1890898 +1891171 +1891217 +1892476 +1889833 +6121184 +8218441 +4532150 +4532160 +1831136 +1861494 +1861510 +1862293 +1862401 +1862692 +1862765 +1864652 +7761138 +1857581 +8225376 +4690079 +5141297 +4534796 +1803060 diff --git a/dev/releases/mambo_v3/presets/north_america.classes b/dev/releases/mambo_v3/presets/north_america.classes new file mode 100644 index 0000000..51167da --- /dev/null +++ b/dev/releases/mambo_v3/presets/north_america.classes @@ -0,0 +1,4425 @@ +12170988 +1934991 +1935301 +5140969 +5140980 +1936378 +1936388 +10331171 +1868535 +10100176 +10517417 +1992315 +1860664 +1860736 +5101556 +5101559 +1732717 +1732901 +1733525 +5101763 +5101811 +5715280 +5715281 +1734384 +5102304 +5102324 +5102335 +5102365 +5102396 +1833475 +4302388 +1845270 +1845279 +1845314 +1845329 +1845335 +1845385 +1845442 +1845448 +1845455 +1845502 +1845513 +1845604 +1845605 +1846313 +1846351 +1846439 +5121847 +5121850 +1846849 +1846860 +1846914 +1846941 +1846945 +1846971 +1846992 +1847013 +1847059 +1847064 +1847068 +1847111 +1847149 +1847225 +1847249 +1847274 +1847308 +1847343 +1847392 +1847407 +1847426 +1847457 +1847484 +1847498 +1847568 +1847572 +8559137 +1847919 +1847930 +1847944 +10427568 +1848114 +1848259 +1848272 +1848274 +1848295 +1848312 +1848322 +1848325 +1848490 +1848505 +1848610 +1848639 +1848730 +1848864 +9973217 +1849294 +1849457 +1849470 +1850045 +1850156 +1850184 +1850225 +1850321 +1850575 +1850585 +1850589 +1850597 +1850673 +1850690 +1850722 +1850729 +1850771 +1850773 +1850774 +1850781 +1850798 +1850868 +1850884 +1850908 +1850922 +1850923 +1850962 +1850971 +1851002 +1851011 +8986624 +5122062 +5122086 +5122121 +5122131 +1851213 +1851237 +1851243 +1851300 +1851337 +1851347 +1851453 +1851462 +1851670 +1851714 +1851750 +5122206 +1851828 +1851845 +1852165 +1852320 +1852382 +9123440 +1848212 +1848213 +1848920 +1849498 +11430021 +1829533 +1829659 +1829612 +1829799 +8779506 +10508467 +12031071 +11642411 +1829021 +1829029 +10053809 +10176413 +10067382 +5879654 +1835460 +1845793 +1845866 +1845962 +1846035 +1846052 +9159662 +1846505 +10594478 +8503184 +1834710 +1841261 +5119890 +1830843 +1830125 +1830137 +1830191 +1830194 +1830202 +1830203 +1830229 +1830241 +1830243 +1830284 +1830293 +9998920 +5110390 +1758860 +1758861 +1758866 +1760384 +1760385 +1760396 +1760397 +1760398 +1760400 +5108951 +1760927 +1761101 +1761102 +1761110 +1761838 +1762151 +1762286 +9553692 +1762474 +8331687 +8379616 +9354496 +9546910 +1763163 +1763184 +1763199 +1763223 +1763256 +1764525 +1765097 +1765182 +5110044 +1766839 +1766845 +1766880 +1767031 +1767320 +1767499 +1767508 +9384861 +1768283 +1769000 +1769336 +1769841 +1770038 +1770044 +1770263 +1770380 +1770383 +1770384 +1770385 +11728240 +7396517 +5110297 +5110299 +5110305 +8963926 +9256436 +9279670 +9283228 +9323382 +9327042 +9395422 +9399145 +9440644 +9560782 +9564612 +9607447 +9636442 +1771846 +1771848 +1771859 +5110326 +5110327 +1772260 +1772427 +1772428 +1772716 +9237599 +9424441 +9534690 +5110492 +5110533 +1774907 +9287097 +1775980 +1777024 +1777034 +1777052 +1777075 +8345991 +1777179 +9257908 +1777737 +1777942 +5110891 +1778548 +1778549 +1778551 +1778555 +9423248 +9610080 +1779740 +1780150 +1781029 +1781038 +7672864 +9305011 +9390065 +9630748 +1781944 +1781946 +5112051 +5112053 +5112060 +5112068 +5112078 +5112080 +9008379 +1782208 +1782214 +8384839 +1783365 +1785913 +1785916 +9520799 +1786219 +1786247 +7480993 +1786912 +1786913 +1787106 +1787464 +11495556 +5112542 +1788278 +11890681 +10295290 +7346446 +1788891 +1789190 +1789191 +1789193 +5112626 +1789794 +1790230 +1790240 +1790246 +1790248 +1790257 +1790258 +1790268 +1790274 +1790281 +1790287 +1790308 +5112798 +1790692 +1790787 +1790832 +1790937 +1790945 +7785540 +9345545 +5112843 +1791151 +5112892 +5112900 +5112908 +5112911 +5112915 +5112917 +5112923 +5112927 +5112940 +5112944 +5112947 +5112959 +5112960 +5112961 +5112963 +5112968 +5112990 +1791372 +1792276 +9382044 +1792831 +1793566 +1794518 +10850929 +1795042 +1795045 +1795049 +9340452 +9622322 +1796257 +1796288 +1796338 +1797111 +1797121 +1797122 +1797135 +1797137 +1797146 +1797194 +1797198 +1797206 +1797210 +1797218 +1797252 +1797257 +1797275 +1797285 +1797290 +1797296 +1797300 +1797339 +1797365 +1797373 +1797375 +1797379 +1797394 +1797409 +1797432 +1797433 +1797436 +1797440 +1797445 +1797464 +1797474 +1797475 +1797478 +1797488 +1797507 +1797521 +1797556 +8874140 +9022399 +9236138 +9240357 +9252524 +9273409 +9289908 +9310510 +9312545 +9340070 +9344456 +9350484 +9367471 +9406020 +9410076 +9416645 +9455404 +9468297 +9483647 +9547311 +9549475 +9554074 +9560404 +9604825 +9607036 +9611624 +9618068 +9622725 +5113950 +7598729 +1798393 +1798402 +1798427 +1798449 +4532352 +8150450 +8793873 +9238900 +9243875 +9292394 +9314022 +9353360 +9358521 +9425857 +9499599 +9527919 +9533271 +9545713 +9579730 +9608673 +9621113 +9626500 +1799183 +1799703 +9249036 +1803127 +1803218 +10033898 +5114892 +5114903 +11713970 +5114923 +5114930 +5114934 +5114946 +1804071 +1804074 +1804331 +1804394 +1804398 +1804401 +1804404 +1804407 +1804409 +1804512 +1804513 +5115046 +1804759 +11508076 +11907485 +1804963 +1804969 +1804971 +1804974 +1805197 +1805537 +1805540 +1805542 +1805549 +1805682 +1805691 +1805938 +1805955 +1806145 +1806170 +1806176 +1806687 +1806690 +1806702 +1806737 +1806740 +9235225 +9278398 +9394138 +9417594 +9491341 +9541734 +9565980 +9588105 +1806872 +1807271 +1807273 +5115500 +1807514 +1807881 +1808088 +1808590 +1808592 +1808752 +8929537 +1809066 +5115777 +1809127 +1809135 +9463067 +1809294 +1809299 +1809305 +1809348 +1809499 +1810025 +1810121 +1810469 +5116128 +5116134 +5116145 +5116293 +1810743 +1810846 +9389851 +7535515 +1811019 +1811079 +1811122 +1811439 +5116332 +5116338 +5116353 +5116358 +5116423 +1813248 +1814182 +1814336 +1814338 +1814357 +1814359 +1814365 +1814800 +1814827 +1814838 +1814843 +1814863 +5117414 +9434954 +5117430 +5117462 +1816570 +5117685 +1817086 +1817690 +1817693 +1817696 +1817727 +1817729 +1817732 +1817734 +1817749 +1817797 +11725616 +1817864 +1817940 +5118046 +11758730 +1818454 +1818463 +1819310 +1819873 +5118327 +5925317 +8720118 +9391467 +9568710 +1820406 +1820711 +1820714 +1820722 +1820764 +1820791 +1820940 +1821051 +1821113 +8178238 +10551407 +11873825 +8872165 +9288386 +9291075 +9362560 +9480768 +9601788 +9400545 +10395440 +8774985 +8908724 +9135886 +9247563 +9288596 +9290866 +9315577 +9334851 +9406984 +9432644 +9452274 +9526331 +9552703 +9555094 +9599150 +10214972 +10851228 +12194283 +5115854 +5115874 +9530200 +9359871 +9379595 +9387353 +9407200 +9432438 +9452497 +9460510 +9498206 +9552466 +9627917 +5114949 +5114950 +5114956 +8429622 +1788711 +1788717 +7560807 +9301336 +5114912 +5114915 +5114921 +1781413 +1781420 +9446902 +1796523 +8805966 +8905759 +9051758 +9254017 +9298735 +9324570 +9368974 +9443159 +9469928 +9488783 +9637664 +1793538 +1793542 +1813468 +1813413 +1813415 +1760233 +1760257 +9235027 +9522383 +8177591 +5109796 +1821856 +1775796 +1811814 +1811948 +1812026 +1812105 +1812207 +1812262 +1812339 +5884258 +7716829 +8299504 +8968321 +9451320 +1820039 +1784959 +1785024 +1785072 +5884188 +6117485 +7611914 +7924383 +1780617 +1780646 +1780668 +1780676 +1777463 +1777471 +5112440 +1791735 +1791736 +1860974 +1860989 +1860993 +1860996 +1861030 +7472845 +1852956 +1852978 +1835430 +1835436 +1835438 +1835449 +1835451 +1835467 +1835819 +10610041 +1837360 +1837420 +4529064 +10017792 +1838360 +1838465 +1838512 +1838584 +1839296 +1840311 +1840346 +1840360 +1840379 +1840441 +1840448 +1840485 +1840520 +1840543 +1840553 +1840592 +1840656 +1841081 +1841084 +1841091 +10187154 +1831752 +9473121 +1852901 +9851261 +1751299 +1751336 +1751400 +1860184 +10165831 +1860443 +10308365 +9913863 +5123394 +5123419 +5769164 +5123461 +1735408 +4302389 +8797666 +1869666 +1869825 +1869852 +1870017 +1870037 +1870202 +1870250 +1870267 +1870308 +1870415 +1870426 +1870450 +1870607 +1870721 +1870727 +1870733 +1870751 +1870777 +1870988 +1871175 +1871379 +10246305 +10588642 +10817208 +1871407 +8766638 +9944922 +1871414 +1871419 +1871457 +1871509 +1871560 +1871597 +1871698 +1871763 +1871890 +1871923 +1871940 +1872200 +1872210 +10336328 +1872452 +1872456 +1872466 +1872514 +1872515 +1872873 +1872901 +1873051 +1873079 +1873267 +1873319 +5125545 +10807383 +1873376 +1873381 +1873383 +1873384 +1873398 +1873585 +7372375 +1873753 +10143814 +10165457 +10366580 +10410048 +10518163 +10561589 +9971850 +1874158 +1874160 +1874179 +1874248 +1874257 +1874274 +1874279 +4531145 +1874317 +1874513 +1874552 +10244305 +1874901 +1875196 +1875319 +1875407 +1875451 +1875478 +1875483 +1875485 +1875606 +1875607 +1875631 +1875914 +1876409 +1876542 +1876548 +1876549 +1876665 +1876987 +10142569 +1877002 +5125916 +5125917 +1877282 +1877321 +1877338 +1877353 +1877364 +1877365 +1877372 +1877443 +1877492 +1877537 +5125939 +1877643 +5126000 +5126013 +1877940 +1877941 +1877975 +1877988 +1877995 +1878158 +1878370 +1878392 +1878490 +5976937 +5884888 +1875885 +1873697 +5143284 +5143285 +11950325 +12018158 +12060941 +12087490 +1939962 +1939964 +1940110 +11667300 +5131957 +5141493 +5714558 +5714572 +5714575 +5714600 +10267561 +10286565 +10451589 +10509408 +1940517 +1940546 +1940575 +1940580 +1940601 +1940604 +1940609 +1940612 +1940694 +1940744 +1940757 +4525777 +8956729 +9930604 +10402067 +1941310 +1941437 +10495733 +10584071 +12252570 +1941266 +1941294 +1941299 +1939833 +1939879 +9146244 +1736315 +1736390 +10132596 +11645405 +1736499 +1736623 +10274976 +5102635 +5102637 +5102651 +5102666 +5102668 +5102671 +5102678 +1736760 +10355428 +1736803 +1736807 +1736809 +1736811 +1736821 +1736826 +1736836 +1736860 +10638589 +1736915 +1736918 +1736937 +1736939 +1736995 +1737015 +1737072 +1737131 +1737231 +1737374 +1737403 +1737417 +1737491 +4530608 +7350238 +7466487 +1737526 +1737542 +1737544 +1737551 +1737552 +1737753 +1737768 +1737847 +1737904 +1737929 +1737964 +1737968 +1737973 +1737978 +8485254 +1738218 +10090105 +10370026 +1738422 +5102693 +5102735 +5102773 +5102782 +5102807 +5102809 +5102830 +8420632 +9953996 +5102931 +1738700 +1738791 +1738794 +1738809 +1738839 +1738888 +1739034 +8086347 +1739272 +1739284 +1739290 +1739362 +1739364 +1739381 +1739400 +10596756 +1739612 +1739617 +1739629 +1739646 +1739656 +1739668 +1739677 +10229731 +1739727 +1739767 +1739770 +1739833 +1739867 +1739884 +1739922 +1739924 +1739927 +1739954 +1739956 +1739964 +1739973 +1739983 +1740003 +1740037 +1740060 +1740069 +1740116 +1740120 +1740133 +1740148 +1740155 +1740163 +1740225 +1740246 +1740305 +1740370 +1740389 +1740392 +1740400 +1740449 +1740533 +8094357 +1741056 +1741130 +1741131 +1741324 +1741361 +1741368 +4530151 +1741398 +1741400 +5103066 +5771357 +10709446 +10776625 +10869347 +1741633 +1741719 +1741747 +1741812 +1741818 +1741820 +1741823 +1741824 +1741826 +9880932 +1742081 +1742089 +1742091 +1742106 +1742121 +1742150 +1742168 +1742178 +1742180 +1742198 +1742203 +1742214 +1742239 +1742241 +1742260 +1742263 +1742268 +1742272 +1742273 +1742287 +1742293 +1742304 +1742310 +1742335 +10000103 +10044107 +10137001 +10194727 +10395101 +10695966 +11508404 +11899754 +5103394 +5103451 +9849625 +9885192 +10534945 +1743323 +10095278 +10134865 +11923027 +1743461 +10073044 +10295171 +10365884 +10388627 +10446580 +10539598 +12197284 +5104063 +5104088 +5104093 +5104116 +9051888 +9958147 +9971153 +1743653 +1743657 +1743658 +1743663 +1743694 +1743768 +1743825 +1743828 +1743838 +1743855 +1743898 +10205587 +10450442 +1744071 +10271464 +1744130 +1744136 +5104157 +1744212 +1744416 +12276630 +9860684 +9953708 +1744700 +1744709 +1744724 +1744731 +1744949 +1744953 +1745022 +10483734 +1745558 +1745606 +1745634 +1745666 +1745669 +1745675 +1745724 +1745729 +1745746 +1745756 +1745761 +1745787 +1745814 +1745830 +9991710 +1746000 +10593489 +1746068 +1746586 +1746666 +1746695 +1746751 +1746754 +1746763 +1746774 +1746775 +1746831 +1746856 +1746859 +1746876 +1746881 +1746898 +1746927 +1746949 +4302199 +4302202 +1747024 +1747140 +1747147 +1747150 +1747155 +1747160 +1747161 +1747163 +1747166 +1747171 +1747188 +1747189 +10046698 +10442122 +12066849 +12107129 +12126779 +1747196 +9040133 +9896144 +10380465 +10445629 +10446898 +10481441 +10503464 +10547716 +10776919 +12223349 +1747523 +1747738 +1747740 +1748109 +1748148 +1748149 +1748151 +1748152 +9176043 +10580256 +9911298 +9948031 +10002059 +8734154 +8843927 +10236521 +5103083 +5103100 +5103118 +5103154 +5103166 +5103183 +5103201 +5103227 +5771230 +5771232 +5771256 +9023222 +1743651 +10545267 +1831775 +10310599 +10346267 +4525540 +1935498 +4299071 +1920844 +1920889 +1920900 +1920923 +1921053 +10657453 +1921123 +1921239 +1921240 +1921247 +1921248 +1921255 +1921910 +8825450 +1922038 +1922039 +1922041 +1922044 +1922049 +1922219 +1922223 +1922455 +10278292 +1922676 +1922851 +1922865 +1922868 +1922889 +1922890 +1922937 +5138387 +5138602 +5714679 +5714689 +9002107 +1923498 +1923505 +8913017 +1923678 +1923679 +1924050 +1924106 +1924176 +12174634 +12185456 +12188086 +12205404 +12212066 +12222885 +12229400 +12233602 +12250854 +12257418 +12258984 +12265590 +1924223 +1924232 +1924513 +1924518 +1924521 +1924713 +8992718 +9157410 +1924770 +10120854 +1925429 +1925458 +1925498 +1925500 +1925501 +1925509 +1925515 +4300384 +4300393 +4300399 +8904480 +12195040 +1925918 +1925922 +4300000 +4300011 +4300012 +12219036 +1926001 +1926009 +11797637 +1926054 +4300259 +1926823 +1926834 +1926861 +1927301 +1927302 +5139026 +5139029 +5714747 +5714755 +5714788 +5139034 +1927909 +1927988 +1928009 +4300406 +1928214 +1928215 +8846776 +5139064 +1928584 +1928589 +1929046 +1929129 +11720834 +5139346 +5139540 +5139578 +5139700 +5714618 +1929772 +1929962 +1930079 +1930146 +1930167 +1930178 +1930179 +1930181 +1930183 +1930263 +1930270 +1930288 +1930289 +1930331 +1930361 +1930391 +1930410 +1930422 +1930481 +1930563 +1930581 +1930653 +1930660 +1930678 +1930728 +1930772 +1930830 +1931116 +1931119 +1931122 +1931126 +5139864 +1931310 +1931553 +1931784 +1931787 +5139897 +5139908 +5139909 +10113190 +10357476 +10570752 +11417741 +11802190 +1932056 +1932172 +1932175 +1932386 +1932406 +1932409 +1932414 +1932417 +1932428 +4300277 +4300363 +7346444 +1932576 +1932879 +5140033 +5140054 +5140063 +1933260 +1933998 +1935853 +1935872 +1935878 +1935884 +1935888 +1935899 +1935904 +1935912 +1935931 +1935935 +5139928 +4300268 +9469139 +9975698 +1752109 +1752111 +9776414 +1752281 +1752285 +1752286 +1752825 +1752832 +1752894 +1752923 +10376685 +1753105 +1753106 +1753111 +11507608 +5105365 +5105367 +5105369 +5105376 +5105447 +5105469 +5105491 +5105508 +11014495 +1753604 +1753668 +5105588 +1753833 +1753922 +1753929 +5105603 +10515719 +10413588 +10514620 +5105336 +5105344 +5105352 +5806127 +5137511 +5137512 +12181811 +12226416 +12251247 +1919125 +1919128 +1919130 +1919145 +1919149 +1919173 +1919235 +1919245 +1919282 +1919289 +5137540 +1919316 +1919326 +1919327 +1919328 +1919338 +1919646 +1919652 +1919653 +1919656 +4701298 +4701336 +7661785 +1919700 +1919701 +1919702 +1919705 +1919711 +1919719 +10703948 +1919939 +1919943 +1919947 +1919949 +1920192 +5137791 +5137800 +5137802 +5137803 +4701136 +5137817 +5137819 +5714819 +1920426 +1920461 +1920463 +1920496 +5137882 +5137890 +5137894 +1920552 +1920571 +1920574 +1920581 +1920691 +1920803 +1920809 +1920810 +5714914 +5137582 +5137595 +5137601 +5137615 +5137626 +5137636 +5137659 +5137664 +5137672 +5137674 +5137679 +5137689 +5137693 +5137694 +5137700 +5137711 +5137714 +12191141 +12206386 +12234544 +12236627 +1920621 +1748922 +1749050 +1749287 +1749713 +1749760 +1749929 +1749936 +5104815 +5104891 +5104903 +5104948 +5104986 +5105031 +5105057 +5105068 +5105120 +5105124 +9942354 +1750924 +1751146 +1751163 +1749591 +1749656 +8741260 +11840028 +1758461 +1731826 +1731862 +1992547 +1954930 +1954933 +1954992 +1954993 +1955497 +1955498 +5143657 +5143703 +1956098 +1956099 +1956215 +1956462 +1956505 +1956510 +1956597 +1956626 +1956716 +8793973 +1956904 +1957441 +1957845 +1957870 +8775810 +5143952 +1958049 +5143960 +5143964 +1958121 +1958528 +1959543 +1959637 +1959858 +1959890 +1959898 +1959917 +1959919 +1959934 +9320916 +1960090 +1960166 +1960255 +1960503 +1960632 +1960951 +4302240 +9468667 +1961361 +1961388 +1961718 +10650351 +1962051 +1962076 +1962118 +9368382 +9592714 +5144227 +5144318 +1962432 +1962434 +1962479 +1962490 +1962516 +1962722 +1962727 +9264326 +1962895 +1962900 +1962925 +4302252 +1963052 +1963201 +1963207 +1963212 +12214993 +1963433 +1963619 +1963633 +1963848 +1963854 +1963874 +1963879 +1963892 +1964041 +1964585 +8361848 +1964715 +5144424 +1965024 +1965038 +1965058 +1965069 +1965078 +1965100 +5880367 +6214734 +1965586 +1965671 +1965697 +1965699 +1965763 +1965794 +1965797 +1965805 +1965807 +1965823 +1965825 +1965831 +1965838 +1965861 +1965865 +1965887 +5144457 +1966088 +1966185 +1966195 +1966198 +1967127 +1967128 +1967212 +1967226 +1967240 +9277294 +9492499 +1967433 +1968205 +5144564 +5144575 +8793278 +1968313 +1968315 +1968321 +1968324 +1968538 +5144583 +5144588 +5144593 +5144596 +5144597 +1968942 +1969961 +1969978 +1970119 +5144729 +5144870 +5144935 +5144953 +5145078 +5145139 +5145238 +5145466 +5145521 +5145547 +5145560 +5145713 +7700568 +1971835 +1971995 +1971998 +1971999 +1972010 +1972101 +1972250 +5145998 +5146030 +5146082 +5146091 +1972447 +1972449 +1972454 +9558845 +5146179 +1972691 +1973146 +1973147 +1973164 +1973165 +1973245 +1973487 +1973493 +1973665 +10404426 +5146497 +5146598 +5146677 +5146820 +5146832 +5147018 +5147039 +5147114 +5147139 +5147179 +5147211 +9370933 +9469300 +9590066 +1975365 +1975607 +9477531 +1975741 +5715277 +5715278 +1975897 +1975914 +1976073 +8793324 +1976248 +1976333 +8820198 +5147703 +5147713 +1976651 +1977003 +1977007 +1977054 +1977068 +5147827 +5147838 +5147858 +5147868 +5147871 +5147879 +5147883 +5147894 +5147898 +5147899 +5147909 +8951618 +5148184 +9617496 +1978445 +9308082 +1978464 +1978493 +1978494 +1978526 +1978671 +9243264 +1978751 +5148277 +5148280 +5806132 +1978958 +1978959 +1978977 +1979255 +1979289 +1979344 +1979358 +1979380 +1979427 +1979430 +1979473 +1979475 +1979501 +1979721 +1979726 +1980025 +1980245 +1980247 +1980250 +1980290 +5148379 +5148462 +1980505 +1980509 +1980559 +8421569 +1981144 +1981160 +1981161 +1981162 +1981191 +1981202 +1981209 +1981210 +1981222 +1981252 +1981258 +1981277 +1981280 +1981281 +1981284 +1981312 +1981718 +10247981 +1981951 +1981959 +1981973 +5148520 +1982406 +1982447 +1982533 +1982613 +1982746 +1982780 +1982824 +1982898 +1982951 +1983260 +1983263 +1983434 +1983441 +1983491 +1983705 +1983709 +1983799 +1983896 +1984073 +1984110 +9577547 +5148531 +5148544 +5148576 +9237621 +9307713 +9370312 +9424464 +9488754 +9544337 +9610059 +5148719 +5148743 +5148753 +5148766 +5148850 +5148934 +5148952 +5148954 +1984654 +9382415 +1984942 +1985405 +1985406 +1985409 +1985421 +1985423 +9332369 +1985485 +1985487 +5149222 +5149237 +1985945 +1985952 +1985956 +1986004 +1986020 +1986040 +1986091 +1986113 +1986171 +1986192 +1986367 +1986497 +1986623 +1986807 +1986906 +5149307 +1986998 +4302274 +5149317 +1987145 +1987146 +1987301 +1987330 +9538525 +1987633 +4524223 +1988495 +1989083 +1989084 +1989538 +1989582 +1989903 +1990155 +1990198 +1990200 +1990270 +1990331 +1990335 +1990357 +1990594 +1990998 +1991012 +1991280 +1991281 +1991289 +1991294 +1991295 +1991298 +1991299 +1991303 +5149630 +5149631 +1991371 +1991429 +1992172 +12010643 +12225687 +5880539 +5880552 +5880559 +5880563 +7657419 +8941993 +9110918 +9243319 +9251088 +9259786 +9261296 +9272461 +9311081 +9330467 +9339487 +9366016 +9368398 +9392058 +9392076 +9400977 +9402536 +9413168 +9419734 +9428900 +9438677 +9454444 +9456004 +9474405 +9489399 +9502724 +9530135 +9532702 +9558873 +9574939 +9616438 +9624918 +9632824 +5144381 +5144386 +5144407 +9533293 +4302221 +9621086 +4302230 +4523560 +9281181 +9352348 +9352978 +9403481 +9436173 +9448761 +9453490 +9494431 +9516038 +9516680 +9523379 +9534291 +9545331 +4524072 +9288979 +9307098 +9423863 +9497623 +9581695 +9619088 +9273963 +9479525 +9237031 +9274899 +9321500 +9299326 +9309575 +9415669 +5144196 +5715276 +5715275 +10221195 +1978197 +9363893 +9391442 +4523885 +5149713 +5149753 +5149777 +5149782 +5149811 +5149819 +5146305 +5146326 +5146389 +1980462 +1972942 +4302268 +9256786 +9291092 +5150027 +12200261 +11470872 +11654707 +11776315 +11834445 +11892494 +12252926 +11423843 +11670842 +12173621 +12247340 +12252340 +12239491 +12258146 +1942141 +1942170 +1942171 +12286003 +1942341 +1942416 +1942455 +1942509 +4301744 +4301749 +1942558 +1942670 +5141662 +1942945 +1942947 +1942964 +1942967 +1942971 +1942980 +1942982 +1942994 +5141697 +1943054 +1943066 +4302008 +5141743 +5141763 +1943563 +1943571 +1943573 +1943588 +4301355 +1943631 +1943655 +1943673 +1943823 +1943824 +1943830 +1943832 +1943901 +12198522 +12233808 +1943942 +1943953 +1943954 +1943960 +1943962 +1943964 +1943990 +1944004 +8133678 +1944273 +1944275 +1944283 +1944286 +1944314 +1944324 +1944329 +1944335 +1944343 +1944361 +1944574 +1944769 +4301934 +1944798 +1944815 +1944832 +5141913 +9551544 +1945081 +1945302 +1945312 +1945462 +1945476 +1945477 +1945605 +4301942 +1945957 +1946074 +1946078 +1946079 +1946163 +1946177 +5142061 +5142062 +1946310 +1946327 +1946333 +1946469 +12223105 +12233838 +1946495 +1946500 +1946509 +4302101 +1946544 +1946550 +1946577 +1946582 +1946610 +1946612 +1946618 +1946628 +1946737 +5142086 +1946810 +1946853 +1946865 +1946901 +11753578 +1946980 +1946981 +1946983 +1946989 +1946991 +1946992 +1946995 +1946999 +1947037 +1947055 +1947147 +1947282 +1947333 +1947335 +5142166 +5142175 +1947402 +1947507 +1947568 +1947577 +1947587 +1947588 +1947597 +1947842 +1947894 +1947915 +12208168 +1947973 +1947976 +1947979 +1947980 +1948042 +1948054 +1948158 +7603634 +1948439 +1948446 +1948521 +4301945 +1948826 +1948865 +1948890 +1948947 +1949049 +12353663 +1949285 +1949322 +1949331 +1949449 +1949451 +1949466 +1949492 +10574663 +1949512 +1949515 +1949520 +1949544 +1949545 +1949549 +1949592 +1949621 +7726809 +9395000 +1949687 +1949697 +1950006 +5142372 +5142424 +5142436 +5142583 +1950017 +1950019 +4301876 +1950044 +1950047 +1950052 +1950133 +1950153 +1950197 +11967675 +1950384 +1950396 +1950408 +1950409 +1950567 +1950578 +1950654 +1950767 +1950856 +1951062 +1951097 +1951116 +1951121 +1951125 +1951133 +1951217 +1951218 +4301897 +5715127 +12180041 +12206694 +1951340 +5142829 +5977179 +5977185 +5977197 +5977203 +5977207 +5977208 +5977214 +5977216 +5977220 +5977235 +5977250 +5977251 +5977259 +5977260 +5977261 +5977262 +5142249 +5142254 +5142267 +5142269 +5142273 +5142278 +5142283 +5142298 +5142300 +5142314 +5142317 +5142319 +5142322 +5142328 +7633472 +1948771 +1948774 +1948779 +1948789 +1948799 +1948800 +1948802 +1948803 +1948804 +1948808 +1948809 +1948810 +1945374 +1945378 +12175154 +9400895 +9245604 +1758767 +1758771 +1758781 +1758783 +7911151 +9366762 +9445489 +5108416 +5108417 +5108419 +1758879 +1758898 +1758906 +1758916 +1759037 +1759040 +1759041 +1759092 +9447614 +1759338 +1759553 +1759563 +1759573 +1759585 +1759605 +1759610 +1759611 +1759621 +1759624 +1759631 +1759632 +1759633 +1759634 +1759671 +1759677 +1759678 +1759688 +1759691 +1759694 +1759719 +1759799 +1759881 +9306367 +1760261 +1760309 +1760361 +1760454 +1760455 +1760682 +5108957 +1761143 +1761498 +1761553 +1761563 +1761798 +1761892 +9418549 +9616055 +1762609 +1762615 +5109523 +5109535 +5109566 +5109596 +5109651 +9337858 +1763610 +9328683 +9438913 +1764238 +1764691 +1764693 +1764917 +1764929 +1765011 +1765044 +4534245 +1765172 +5109829 +5109845 +5109848 +5109850 +5109852 +5109855 +5109881 +5109954 +5109958 +8352161 +1765733 +11487320 +1765769 +1765779 +1765798 +1765962 +1766193 +1766205 +1766210 +1766237 +1766287 +1766392 +1766410 +1766489 +1766509 +4301071 +4301081 +7895336 +9362190 +1766646 +1766650 +1766917 +1766919 +1766921 +1767052 +1767140 +1767142 +1767335 +1767336 +1767337 +1767338 +1767347 +7598945 +9062262 +1767484 +9471709 +1767571 +1767579 +1767584 +9511345 +1767602 +1767612 +1767628 +5772169 +9381852 +1767719 +1768132 +1768172 +1768174 +1769592 +9373686 +1769814 +1769934 +1769947 +1769958 +1770132 +1770144 +9148810 +1770461 +1770659 +1771441 +1771872 +1771997 +1772013 +9242609 +9244973 +9254157 +9396755 +9463442 +9476708 +9495306 +9562175 +9616658 +9625112 +9630930 +9633562 +1772043 +1772169 +5110333 +5110341 +5110356 +9539128 +1772422 +1772462 +9605631 +1772954 +1772977 +1773002 +1773069 +1773081 +1773248 +1773313 +1773315 +1773510 +1773577 +1773662 +1773677 +1773728 +4301148 +9369576 +1773742 +1773743 +1773744 +1773746 +9367674 +9399288 +9593475 +1773783 +1773784 +9283948 +9560018 +1774092 +1774095 +9322646 +1774243 +1774253 +1774254 +1774262 +1774268 +9243117 +9409309 +9550265 +1774314 +1774358 +1774792 +4301304 +6115953 +1775046 +1775055 +9547676 +1775089 +1775118 +1775290 +1775291 +1775508 +1775509 +1775672 +1775680 +1775791 +1775866 +1775970 +1776167 +5110723 +5110728 +5110752 +5110754 +5110756 +1776397 +1776406 +1776415 +1776459 +1776462 +1776467 +1776470 +1776472 +1776473 +1776476 +1776618 +1776861 +1776871 +1776880 +1777139 +1777261 +1777728 +1777730 +9310286 +5110863 +5715009 +5715010 +5715013 +1777974 +1777976 +1777980 +1777982 +1777994 +1777996 +1778000 +1778006 +1778007 +1778013 +1778015 +1778024 +1778031 +1778033 +1778034 +1778037 +1778045 +1778049 +9456735 +1778337 +1778534 +1778688 +5111076 +5111139 +5111141 +5111343 +5111360 +5111372 +5111397 +5111521 +5111528 +5111546 +5111568 +7593392 +9175037 +9596498 +1779430 +1779633 +1779643 +1779709 +1779713 +1779959 +1780209 +1780213 +1780214 +1780215 +1780272 +1780309 +1780313 +1780326 +1780330 +1780344 +1780390 +1780407 +1780414 +1780437 +1780440 +1780450 +8802610 +9284849 +1780852 +7825945 +9374443 +9392614 +5111956 +1781692 +1781819 +1782031 +1782422 +1782424 +1782523 +1782542 +1782585 +1782595 +9289753 +9433772 +9525172 +1782622 +10441062 +1782682 +1782689 +1782700 +1782705 +1782706 +1782707 +1782708 +1782709 +1782743 +1782744 +1782745 +1782747 +1782762 +1782776 +1782803 +1782808 +1782809 +1782819 +1782822 +1782826 +1782833 +1782837 +1782840 +1782853 +1782870 +1782871 +1782878 +1782921 +1782928 +1782934 +1782961 +1782972 +1782978 +1782993 +1783002 +1783008 +1783013 +1783035 +1783055 +1783059 +4301044 +9581976 +1783313 +9457757 +9500945 +1783371 +1783372 +1783373 +1783376 +1783378 +5112153 +5112191 +5112199 +5112229 +5112233 +5112283 +5112302 +5112377 +5714951 +5714973 +5714984 +5714994 +5715004 +1783811 +9348210 +9465978 +9492640 +1783841 +1783842 +1783861 +1783940 +1784276 +1784278 +1784281 +1784282 +1784283 +1784422 +1784461 +1784582 +1784610 +9320776 +1784688 +5112414 +4534290 +1784893 +1785145 +1785168 +1785185 +1785280 +9633615 +1785331 +1785399 +1785403 +9636267 +1785728 +1785730 +1785732 +1785733 +7400814 +9250744 +9329292 +1785875 +1785886 +1785951 +1785955 +1785964 +1785982 +1785992 +1785997 +1786007 +1786035 +1786036 +1786308 +1786360 +1786455 +1786514 +1786565 +1786566 +1786567 +1786691 +1786733 +1786808 +1786918 +4687681 +9305798 +1787438 +1787506 +1788034 +1788037 +1788063 +1788070 +1788139 +9547140 +1788425 +9282469 +1788485 +1788673 +1788677 +1788679 +1788680 +1788681 +1788720 +4301312 +1788917 +1788929 +1789076 +1789155 +9612009 +1789212 +9248329 +9449132 +1789505 +4534166 +4534198 +1789695 +1789730 +1790013 +1790084 +1790151 +9092175 +9410414 +1790339 +1790343 +11693171 +1790359 +1790362 +1790369 +1790371 +1790737 +9297059 +1791331 +1791590 +1791593 +1791680 +1791784 +1791862 +1792072 +1792073 +1792087 +1792091 +1792095 +1792096 +1792097 +1792099 +9426771 +9622117 +1792318 +9241669 +9338769 +9530319 +9548726 +1792430 +1792442 +1792449 +1792456 +1792465 +1792478 +1792485 +1792497 +1792517 +5113365 +9240216 +1792817 +9233420 +9539292 +1792996 +1793189 +1793192 +1793368 +1793369 +1793419 +1793453 +1793455 +4301052 +4301055 +1793589 +1793699 +1793983 +1794102 +1794510 +4301238 +11781335 +1795788 +1795802 +1795812 +1795871 +1795983 +1796032 +1796035 +1796040 +1796051 +1796100 +1796117 +1796154 +1796180 +1796181 +1796188 +4534486 +9377268 +9541908 +1796217 +1796274 +1796276 +7689966 +7882824 +8405656 +9256638 +9327259 +9589234 +1796310 +1796312 +1796463 +8105817 +1796678 +1796686 +1796842 +1796958 +1797587 +1797592 +1797593 +1797595 +1797601 +4301242 +4301249 +4301255 +1798288 +1798371 +1798375 +1798419 +5113985 +5114011 +5114021 +5114039 +5114043 +5114081 +5114083 +5114096 +5114107 +5114128 +5114151 +5114159 +9500553 +1799433 +1799675 +1799680 +9368026 +9593098 +1799774 +9388726 +9571514 +1799870 +1799877 +1799880 +1799884 +1799894 +1799900 +1799901 +1799911 +1799917 +1799925 +1799938 +1799944 +1799956 +1799957 +1799958 +1799967 +1799977 +1800017 +1800024 +1800028 +10446574 +9496311 +8729319 +4301068 +4301282 +4301283 +4301306 +4301307 +8751100 +9395261 +9564779 +12103087 +7558165 +8050639 +8440999 +8551997 +8562506 +8647523 +8761810 +8781370 +8998296 +9042018 +9163659 +9241105 +9247947 +9255102 +9261458 +9281907 +9288185 +9291297 +9362785 +9373309 +9390293 +9424681 +9452702 +9474256 +9481002 +9484411 +9485070 +9488551 +9530271 +9530928 +9533506 +9534429 +9544558 +9545480 +9552253 +9573163 +9577379 +9590907 +9591877 +9594509 +9595155 +9602019 +9634575 +11922580 +9406822 +9432810 +4534533 +9248830 +9363692 +9556427 +9597741 +9503548 +9415435 +9424082 +9610447 +7589577 +7779226 +8818378 +8928353 +9538684 +9486411 +7717385 +8424964 +9511749 +6132781 +10118643 +9875111 +9342344 +9496896 +9629365 +9478331 +5108640 +5110377 +5114189 +5114192 +11452421 +11466090 +11470672 +11590674 +11615055 +11619030 +11626773 +11627464 +11660145 +11713256 +11749278 +11753804 +11781300 +11859640 +11887065 +5109299 +5109369 +5109413 +8755207 +8943174 +9038042 +9307254 +9334639 +9387782 +9404919 +9506719 +5112130 +5112131 +9244066 +9551316 +7398419 +1792564 +1800130 +1800140 +9623131 +1774929 +1770828 +1770918 +1770955 +1771019 +1771055 +1771067 +1771245 +1765751 +5108665 +5108670 +9374637 +9586329 +1768196 +1768199 +1768201 +11783188 +4533347 +9490756 +1797903 +6115793 +6115822 +11501104 +1776094 +9354669 +10714961 +10867462 +9253819 +9517291 +9561820 +11562243 +5118459 +5118474 +5118509 +5118524 +1822667 +9778438 +1822784 +1822788 +1822805 +1822848 +1823637 +1824080 +1824259 +1824442 +1824449 +1824571 +5118828 +1825083 +9426054 +1825218 +1825373 +1825428 +1825430 +5118934 +5118944 +5118949 +1825967 +1826048 +1826058 +1826084 +1826156 +1826163 +1826164 +1826167 +1826169 +1826172 +1826173 +1826175 +1826181 +1826222 +5119009 +5119011 +5119013 +5119016 +5119026 +5119039 +5119046 +5119050 +10115073 +1826772 +9807789 +1827103 +1827112 +1827113 +1827132 +1827133 +1827161 +1827716 +1828105 +1828268 +9454052 +9255512 +1892509 +1892729 +1892736 +1892742 +4299095 +1892851 +1892858 +1892863 +5127805 +5128005 +5128007 +5128034 +9113409 +10653980 +1894074 +1894087 +1894088 +1894102 +1894164 +1894293 +1894298 +5882039 +1894329 +1894342 +1894896 +4535827 +1895138 +1895185 +1895203 +5128232 +5128250 +5128266 +5128326 +5128357 +5128363 +5128380 +9804158 +1895768 +1895820 +8763986 +1895886 +1895904 +5128475 +5128488 +5128491 +1896614 +1896658 +1896749 +10353400 +1896774 +1896932 +5129251 +11701883 +5925238 +8367663 +1897990 +10073321 +10365587 +1898143 +1898174 +1898203 +10321900 +1898286 +4299368 +4299370 +5714367 +5714369 +1898391 +1898402 +1898414 +1898416 +1898424 +1898431 +5129374 +5129378 +5129387 +5129405 +5129430 +5129432 +5129451 +5714356 +5714361 +6228464 +5129473 +5129481 +5129489 +5129496 +5129515 +5129517 +5129520 +5129531 +5129535 +9208233 +9255328 +5129544 +1898686 +1898841 +1899048 +4299211 +4299213 +1899873 +1899893 +1900024 +8847500 +9208918 +1900131 +1900175 +1900199 +1900233 +1900249 +1900485 +1900618 +1900830 +1900872 +9190731 +1901001 +1901189 +1901261 +1901268 +8247566 +1901735 +1901744 +1901794 +1901801 +1901810 +11135155 +11219489 +12258652 +5130400 +5130514 +5130528 +5130548 +9357385 +1902378 +1902406 +1902430 +1902458 +1902479 +1902502 +5130559 +1902620 +1902642 +1902670 +1902676 +1902680 +1902692 +1902699 +1902702 +1902703 +1902704 +4299218 +1902880 +1903607 +1903658 +1903683 +5131608 +1904382 +7776011 +5131951 +1905161 +1905162 +1905172 +1905187 +1905189 +1905242 +1905257 +1905267 +1905281 +1905297 +1905299 +1905301 +1905310 +1905317 +1905451 +1907153 +1907235 +1907250 +1907272 +1908011 +1908044 +1908052 +1908055 +1908148 +1908199 +1908203 +1908204 +1908207 +1908256 +1908302 +5133035 +10542548 +1908995 +1909064 +10046510 +1909128 +1909170 +1909185 +9851867 +8727750 +12234977 +1909800 +5133251 +5133265 +10558140 +5133565 +5133568 +1910773 +5133581 +1911112 +1911178 +1911246 +5133595 +5133621 +5133637 +8548427 +9219529 +1911577 +1911939 +12322536 +12335869 +1911966 +1912003 +1912036 +1912119 +1912428 +4299535 +4299565 +4299576 +4299599 +5133864 +5714410 +10638244 +9277330 +5134517 +5134559 +5134661 +5134687 +5134693 +5134759 +5135355 +5714507 +8233062 +1914410 +1914416 +1914421 +1914424 +1914435 +1914439 +1914440 +1914442 +1914458 +1914464 +1914465 +1914477 +1914484 +1914496 +1914498 +1914500 +1914501 +1914511 +4299191 +4299201 +8918036 +1915193 +9185656 +9988287 +1915339 +1915396 +1915401 +1915417 +1915427 +1915430 +1915469 +1915470 +1915487 +1915492 +1915506 +10487080 +1916700 +1917827 +1917830 +1918082 +1918094 +10250149 +1918269 +1918280 +1918293 +1918395 +4299802 +4299804 +1918964 +1918968 +1918972 +1918984 +1918986 +1918988 +1919007 +5128045 +5130682 +5130696 +5131982 +5132003 +5132079 +5132084 +5132246 +5132254 +5132317 +5132347 +5132360 +5132398 +5132446 +5132461 +5132505 +5714312 +5714333 +9541133 +5133088 +5714299 +5714302 +5130557 +1910628 +1902175 +10662329 +12045866 +4299778 +5132917 +5132940 +5132956 +5132973 +5133009 +9964857 +1951448 +5142842 +1951657 +1951660 +1951784 +5142903 +1952032 +1952043 +1952093 +1952730 +5143107 +6097225 +10045595 +1853064 +4529248 +1868334 +10597291 +5102424 +1941717 +1843888 +1843889 +5120577 +5120675 +5120767 +5121517 +5121613 +1842043 +5120396 +1842446 +1842508 +4301036 +4529738 +5120453 +1843444 +10327658 +10619048 +5101371 +10304313 +10607329 +11484123 +9114044 +1730978 +10458960 +10469497 +5101527 +1731750 +1731811 +1731812 +7628188 +1878688 +1878705 +1878751 +1878753 +1878789 +1878810 +1878837 +1878879 +1878937 +1878958 +1879052 +1879253 +1879272 +1879274 +1879348 +1879398 +1879408 +1879413 +10366679 +10874932 +1879443 +1879452 +1879471 +10177508 +5126229 +5126352 +5126365 +5126404 +5126494 +5126517 +5126533 +10915497 +10922201 +1879939 +1879970 +1879975 +1880013 +1880019 +1880025 +1880044 +1880049 +1880062 +1880064 +1880078 +1880083 +1880088 +1880123 +1880132 +1880133 +1880156 +5126585 +5126637 +1880379 +1880381 +1880411 +4302319 +1880505 +5126663 +10861282 +11968849 +1881079 +1881094 +1881111 +1881139 +1881151 +1881166 +9819403 +4531687 +5126697 +5126718 +5126721 +5126726 +5126729 +1881767 +1881822 +5126751 +1881917 +1881955 +1882089 +1882190 +1882195 +1882218 +1882253 +1882316 +5126785 +5126892 +5126958 +5126963 +1882785 +1882786 +10107015 +1882812 +1882816 +1882818 +1882819 +10191785 +11891668 +1882927 +1882941 +1882958 +1882959 +1882960 +1882965 +1882977 +1882979 +8725248 +1883020 +1883038 +1883067 +5127089 +5127107 +5127116 +5127118 +5127130 +5127132 +1883829 +1883897 +1883968 +1883975 +8324720 +9864281 +1883993 +1884001 +1884213 +1884428 +1884435 +1884439 +1884453 +1884464 +1884479 +1884685 +9308930 +1884703 +1884774 +1884790 +4532122 +1884923 +1884997 +1885001 +1885158 +1885202 +1885229 +1885642 +5127170 +1885950 +1886251 +1886262 +5127203 +1886292 +8223165 +1886378 +1886398 +1886400 +1886419 +4302333 +5127209 +1886490 +1886501 +1886579 +1886583 +1886650 +1886729 +10510138 +1886868 +1886906 +1886929 +1886935 +5127222 +1887004 +1887024 +1887031 +1887285 +1887309 +1887341 +1887459 +10437872 +5127325 +5127335 +5127336 +5127337 +5127339 +5127350 +5127353 +5127354 +5127355 +5127357 +1887565 +1887634 +1888009 +1888047 +4531968 +1888306 +1888307 +1888336 +1888338 +1888410 +1888435 +5127378 +5127380 +1888579 +1888646 +1888695 +1888823 +12106417 +1888946 +1888955 +1889028 +1889267 +1889327 +1889536 +1889939 +5127521 +1890089 +1890187 +1890247 +11044778 +7543006 +1890368 +1890374 +1890404 +1890410 +1890417 +1890487 +1890491 +1890508 +1890512 +1890520 +1890560 +1890599 +1890622 +1890629 +1890654 +1890730 +1890737 +1890783 +1890794 +1890800 +1890802 +1890854 +1890876 +1890885 +1890917 +1890934 +1890936 +6207059 +7431428 +1891035 +10034831 +1891048 +1891074 +1891167 +1891438 +1891473 +1891484 +1891488 +1891493 +10310835 +1891755 +9884308 +1891932 +1892131 +1892193 +1892301 +1892302 +1892311 +1892320 +1892355 +1892420 +1892427 +1892433 +9059564 +1892477 +1892488 +1884326 +1884337 +10179389 +10259280 +10330376 +10482025 +10655790 +9181627 +9935837 +5771877 +7864212 +8146570 +8425580 +6120803 +6121218 +8876855 +10106345 +10432184 +10444331 +5126675 +8858121 +9530406 +1886374 +1889717 +1889721 +1889745 +1889760 +1889828 +1889838 +1889850 +1889870 +5127631 +5127656 +5802339 +1887119 +1887122 +1887125 +1887178 +1886123 +1886207 +1846099 +1846103 +1846111 +1846112 +1846133 +1846141 +1846190 +1846229 +1846236 +1846240 +1846259 +1846261 +1831136 +1831168 +4525443 +9958241 +1853312 +1854143 +1854202 +7946946 +5880063 +12239445 +4526094 +1858615 +1858637 +9777614 +1858659 +1858660 +1858674 +1858706 +9689122 +1858930 +1859046 +1859161 +1859287 +9760511 +8790054 +9675743 +9686431 +9746673 +9748079 +6133397 +1859929 +1859932 +9752950 +1860026 +4536472 +9700261 +1973458 +1973466 +5123046 +5124468 +1864905 +8877458 +9240588 +9355107 +9531432 +9547535 +9606779 +1865102 +1865107 +1865108 +11754954 +1865295 +1865299 +1865313 +1865319 +1865328 +1865333 +1865341 +1865345 +1865347 +1865348 +1865353 +5124557 +5124589 +5124595 +5806244 +1865555 +1865571 +1865590 +1865668 +1865709 +1865837 +1865839 +1865842 +1865853 +1865856 +1865862 +1865963 +1866003 +1866085 +1866123 +1866214 +1866311 +1866330 +1866336 +1866338 +1866341 +1866496 +1866550 +1866570 +1866601 +1866902 +1867021 +1867022 +1867029 +1867032 +1867037 +1867525 +1867535 +1867773 +10247309 +10591617 +1736271 +7734292 +1841764 +1841782 +1841813 +1841946 +10309331 +5123615 +1861456 +1861559 +1861604 +5123636 +1861759 +1861773 +1861783 +1861784 +1861823 +1861834 +1861836 +1861851 +11529603 +1861887 +1861892 +1861893 +1862044 +1862047 +1862049 +1862078 +1862087 +1862088 +1862123 +1862129 +1862139 +1862181 +1862198 +1862207 +1862363 +1862401 +1862475 +1862547 +1862569 +1862595 +1862624 +1862719 +1862757 +1862837 +1862841 +1862916 +1862917 +1862923 +1862928 +1863021 +1863025 +1863075 +1863080 +1863088 +5123775 +7803585 +1863366 +1863405 +1863407 +4301348 +1863412 +1863416 +1863584 +5124049 +1863699 +1863706 +1863714 +1863732 +1863734 +1863742 +1863757 +5124050 +1863856 +1863864 +1864156 +1864164 +1864165 +8956567 +1864204 +11468731 +1864316 +1864320 +1864321 +1864328 +1864329 +1864352 +1864377 +11141784 +5124118 +5124119 +5124136 +5124147 +5124172 +5124199 +5124200 +5124208 +5124219 +5124232 +5124249 +5124250 +5124268 +1864652 +5124332 +5124442 +5124443 +5124448 +5124450 +5123954 +5123956 +5123968 +5123971 +5123979 +5123983 +5123991 +5123999 +5124000 +8849480 +9513830 +1863978 +1863982 +1864004 +1864008 +1864021 +1864046 +1864070 +1864090 +1864098 +1992573 +1992634 +5150053 +5150092 +1993643 +1992817 +1939460 +1953499 +5143232 +9053308 +9424853 +1953970 +1953998 +1954084 +1860108 +1860118 +1830031 +10650211 +5119482 +1830442 +1830457 +4525369 +1754270 +5105642 +5105649 +5105656 +5105671 +1757839 +10174151 +10322104 +1830681 +10604375 +1953124 +1751497 +1751557 +1751572 +1751575 +1751588 +1751590 +1751609 +1751625 +1751626 +1751670 +1751684 +1751690 +5105217 +5105218 +1829287 +1829363 +1854920 +5122526 +5122538 +5122556 +5122571 +5122574 +5122581 +5122620 +5122646 +5122647 +5122668 +5122683 +5122691 +5122696 +5122702 +9015218 +1855358 +10055273 +1856005 +1856581 +1856686 +1856701 +1856720 +1856730 +1857068 +1857143 +1857258 +1857380 +1857626 +1857809 +1857828 +1857829 +1857856 +1857863 +1857918 +1857924 +1857938 +1857945 +1857973 +1858163 +5122876 +5122969 +1858283 +1856891 +10038125 +1937642 +1937655 +1937688 +1937691 +1937722 +1937739 +1937751 +1937758 +1937793 +1937803 +1937816 +1937819 +1937846 +1937885 +1937974 +1938016 +1938022 +1938059 +1938081 +1938104 +1938112 +1938159 +4299870 +4299871 +8225376 +10600208 +12200213 +12211009 +1937110 +1937124 +1937136 +1937144 +1937162 +1937167 +1937527 +1938446 +1938955 +1938975 +1939056 +1939130 +1939134 +1939136 +5141321 +5141324 +5141333 +5141342 +4694313 +11561676 +12219250 +12229940 +12247359 +12253844 +12262562 +1856368 +1856394 +1856555 +1857690 +5123018 +1838811 +1838838 +1838911 +1833497 +1833499 +1833500 +1833626 +8546322 +5770913 +1835500 +5119905 +5119961 +5119969 +10304283 +1836899 +1837172 +1837900 +1838666 +1838960 +9895629 +1841159 +10511237 +5119893 +5119895 +4534796 +1800963 +5114431 +5114435 +5114436 +5114439 +9313634 +9385576 +9454291 +9574801 +9579309 +9626037 +8924506 +10942408 +9239301 +9426252 +5114295 +5114317 +5114340 diff --git a/dev/releases/mambo_v3/presets/north_europe.classes b/dev/releases/mambo_v3/presets/north_europe.classes new file mode 100644 index 0000000..b6b931b --- /dev/null +++ b/dev/releases/mambo_v3/presets/north_europe.classes @@ -0,0 +1,1977 @@ +1934693 +1860621 +1860628 +4522795 +1860659 +1860664 +1860668 +1860671 +1860688 +1860709 +1860711 +4522933 +5123582 +1732063 +1732416 +1732452 +1732565 +1732662 +1732685 +1733258 +1733484 +4525266 +4525273 +5101678 +5101745 +5769191 +1734453 +1734704 +1734826 +5102287 +1845270 +1845368 +1845565 +4529566 +4528100 +1846604 +1846657 +1846715 +1846729 +1846916 +1847097 +1847407 +1847572 +9262981 +1847956 +1848150 +1848202 +10450501 +1848219 +1848273 +1848356 +1848426 +4528539 +1848596 +1848610 +1848636 +1848657 +1848669 +1848690 +1848713 +1848714 +1848717 +1848730 +1848753 +1848864 +1848868 +1849104 +1849267 +1849273 +1849284 +1849294 +1849477 +11052757 +11080751 +1849630 +1849856 +1849897 +1849924 +1850008 +1850042 +1850045 +1850076 +1850077 +1850106 +1850238 +1850246 +11576787 +1850279 +1850302 +1850335 +1850386 +1850394 +1850450 +1850506 +4527903 +1850522 +1850533 +1850538 +1850781 +1850971 +1851000 +1851010 +1851011 +5122037 +5122113 +1851203 +1851220 +1851337 +1851347 +1851555 +5122206 +4527972 +1852150 +1852177 +1852311 +1852430 +11287091 +4527957 +1848920 +1829533 +1829588 +1829776 +1829785 +1829799 +1829823 +1829974 +4525354 +1828637 +6097236 +5769272 +5879654 +7448174 +4525610 +1861395 +1845866 +1845962 +1845965 +1841261 +1830838 +1830843 +1830122 +1830125 +1830131 +1830144 +1830147 +1830152 +1830186 +1830191 +1830207 +1830241 +1830243 +1830262 +1830266 +1830271 +4525476 +4525487 +1831643 +1841296 +4528593 +8271010 +1853723 +5880147 +9734171 +11418741 +11571523 +1761111 +1764531 +1769103 +1769897 +1772793 +4532500 +1780150 +1790692 +1790816 +5113078 +5113084 +5113234 +1797178 +1797258 +1797276 +1797367 +1797479 +4532471 +8756768 +1798346 +1798408 +4532493 +1798449 +1798504 +1798594 +1798802 +1798807 +4532357 +1799708 +1804071 +1804906 +7874258 +1807969 +1808450 +1808752 +5115771 +5115777 +1810099 +5116416 +1813114 +5117189 +5117200 +7656811 +1814630 +5117399 +5117400 +1819145 +4532293 +4532297 +1819268 +8407461 +1819873 +8361973 +1820372 +1820406 +12253343 +5884571 +7596232 +5771982 +6097214 +4532544 +4532516 +4532532 +12089608 +11962292 +12135372 +5115874 +5116475 +5116698 +1788635 +4532405 +4532408 +4532412 +8000103 +4532534 +4532508 +1760246 +5113036 +1821856 +1821911 +1812394 +8237987 +1820039 +1771772 +1860979 +1860983 +1860987 +1861031 +4522911 +4522916 +4522919 +4522922 +12318291 +4522886 +4522891 +1860768 +1860852 +7767114 +7851302 +7961640 +1992504 +1852956 +1852978 +1835432 +1835433 +1835456 +1835457 +9724183 +1837343 +1837420 +1837429 +1837464 +1837515 +4529064 +7958169 +8015612 +1839293 +1839296 +1840297 +1840301 +1840345 +1840346 +1840360 +1840371 +1840380 +1840408 +1840478 +1840483 +1840485 +1840555 +1840566 +1840570 +1840581 +1840596 +1840621 +4529186 +5119808 +1831752 +1852751 +9473121 +4529630 +1751236 +1751290 +1751298 +1751299 +1751368 +1751457 +4535884 +4535904 +1860408 +4525177 +5123339 +5123394 +5769164 +5123461 +5123474 +1751207 +1751216 +1869803 +1869852 +1869976 +1870202 +1870249 +1870250 +1870450 +1870988 +1871160 +1871252 +1871407 +4531402 +1871698 +1871826 +10787705 +1872901 +1873048 +1873079 +1873411 +1873776 +1873780 +1873783 +4531264 +5125689 +1874192 +1874204 +1874211 +4531145 +4531147 +4531158 +1874375 +1874743 +9782192 +1875008 +1875120 +8219149 +1875327 +4531242 +1875631 +1875633 +4531284 +1875827 +1875865 +1875869 +1875918 +1875940 +1875952 +1876329 +1876409 +1876542 +1876623 +1876854 +1877310 +1877341 +1877368 +4531246 +5126052 +1877941 +1877988 +1878470 +1878490 +1878586 +11728049 +1872315 +1748805 +1940158 +4525859 +4525884 +5141493 +5141501 +1940504 +1940510 +1940575 +1940639 +1940644 +1940717 +1940744 +1940768 +4525777 +1940807 +1940838 +1941377 +1941437 +1939879 +1736377 +1736412 +1736425 +1736447 +1736484 +1736511 +1736528 +1736560 +1736565 +1736601 +5102628 +1736727 +1736800 +1736898 +1736904 +1736905 +1736906 +1736945 +4530406 +4529931 +1737342 +1737368 +1737437 +1737491 +1737497 +7466487 +1737524 +1737526 +1737533 +1737542 +1737552 +1737650 +1737753 +1737775 +1737776 +1737783 +1737847 +1737893 +1737924 +4530002 +8186212 +1738050 +1738163 +1738222 +1738245 +1738317 +1738322 +1738337 +1738422 +1738429 +1738514 +8420632 +8869900 +5102931 +5102951 +1738687 +1738700 +1738722 +1738777 +1738794 +1738839 +1738883 +1739042 +1739043 +8086347 +1739128 +1739272 +1739284 +1739290 +1739337 +1739377 +1739381 +5102982 +1739449 +1739451 +1739461 +1739605 +1739748 +1739797 +1739816 +1739819 +1739833 +1739919 +1739922 +1739931 +1739980 +1739999 +1740005 +1740053 +1740069 +1740116 +1740120 +1740174 +1740183 +1740185 +1740305 +1740374 +1740392 +7797515 +8215326 +1740482 +1740518 +1740533 +1740567 +1740570 +1740623 +8094357 +1741056 +1741147 +1741253 +1741340 +1741341 +1741368 +4530151 +8345820 +5103066 +5771357 +1741545 +1741551 +1741590 +1741593 +1741615 +1741633 +1741634 +1741667 +1741752 +1741756 +1741765 +4530424 +10807169 +11093909 +1742106 +1742142 +1742185 +1742263 +1742346 +1742402 +5103451 +5103502 +5103736 +5103948 +5771350 +7975250 +1743196 +8313553 +5103998 +7661023 +1743453 +1743475 +7877231 +1743532 +1743588 +1743604 +1743613 +5104056 +6097235 +1743641 +1743643 +1743710 +1743714 +4530214 +1743730 +1743768 +1743775 +4529900 +4529908 +4529915 +1743828 +1743856 +1743862 +1743867 +1743898 +1744071 +1744136 +1744180 +1744224 +4530632 +1744416 +1744498 +1744542 +1744588 +1744593 +1744693 +1744699 +1744709 +1744714 +1744728 +1744731 +1744739 +1744742 +1744748 +1744763 +1744777 +1744782 +1744789 +1744808 +1744810 +1744860 +1744896 +1744901 +7964262 +1745079 +10844862 +1745131 +1745558 +1745561 +1745579 +1745600 +1745630 +1745634 +1745636 +1745643 +1745659 +1745676 +1745678 +1745705 +1745724 +1745725 +1745737 +1745756 +1745762 +1745771 +1745787 +1745788 +1745816 +1745830 +8162538 +8369868 +1745925 +1746027 +8424972 +1746174 +1746413 +1746440 +1746613 +1746644 +1746666 +1746689 +1746775 +1746832 +1746856 +1746876 +1746910 +1747050 +1747141 +5104442 +1747738 +4530138 +5104558 +1748203 +1748321 +6097234 +7588222 +9242559 +1748456 +5104641 +8691947 +10580256 +5103121 +5103176 +5103181 +5103185 +5771227 +5771230 +5771232 +5771236 +5771239 +5771241 +5771243 +5771249 +5771256 +5771258 +5771259 +1831780 +4525500 +4525503 +4525505 +4525510 +4525530 +4525540 +4525547 +4525557 +4525562 +1920851 +1922311 +1922343 +8016522 +1922584 +1922937 +5138543 +5138561 +5714680 +1923796 +1924097 +5138681 +1925221 +1925233 +4535172 +1925454 +1925918 +1925962 +1926324 +1926861 +5882965 +1928248 +5139156 +1928945 +1929270 +1929659 +1929697 +8356768 +1930110 +1931179 +1931779 +1932411 +1932960 +5140436 +7634721 +1933793 +1926260 +1933095 +1933138 +1924494 +4522322 +5105339 +1919712 +1920259 +1920491 +1920494 +1920496 +1920506 +4535307 +5137903 +5804895 +1920712 +5137582 +5137595 +5137612 +5137636 +5137695 +5137706 +8203812 +1920218 +1748890 +1748942 +1749050 +1749070 +1749164 +1749449 +1749661 +1749713 +1749744 +1749846 +1749869 +1749908 +1749921 +1749929 +1749936 +1749948 +1749954 +1749959 +1749975 +1750051 +1750076 +1750097 +1750143 +1750159 +1750288 +5104772 +5104781 +5104797 +5104829 +5104882 +5104891 +5104903 +5104927 +5104940 +5105054 +5105088 +5105106 +5105158 +5976947 +1751051 +5104759 +1749596 +1749608 +1749635 +8741260 +1735532 +4527339 +4527342 +1731826 +1731837 +1731860 +1954563 +5143380 +5143453 +5143477 +5143651 +5143675 +5143697 +1956440 +1956524 +1956599 +1956710 +4525068 +1957266 +1957300 +1957570 +1957572 +1957632 +1957718 +1957816 +1957845 +1957852 +1957854 +4524421 +4524426 +5143944 +5143947 +1958024 +1958323 +1959383 +1959395 +1959467 +1959682 +1959735 +1959914 +1959919 +1960617 +1961040 +1961068 +1961190 +1962204 +1962265 +1962268 +1962434 +1962516 +9812211 +1962636 +1962860 +1962990 +1963011 +4302252 +1963306 +1963446 +1963463 +1964191 +1964195 +1964471 +1964637 +1964653 +1964657 +8361848 +5144426 +1965166 +1965208 +1965345 +1965763 +1965777 +1965795 +1965810 +1965825 +1965841 +1965913 +1965996 +1966017 +1966351 +1966886 +5144534 +1967011 +5144543 +1967245 +1967273 +1967597 +1967815 +1967873 +7681733 +1968678 +1968867 +11598540 +1969291 +1969954 +1970213 +1970227 +1970284 +5144677 +5144721 +5144805 +5144900 +5145009 +5145136 +5145186 +5145260 +5145269 +5145409 +7753668 +1971858 +1971888 +1971986 +1972120 +1972185 +1972187 +1972234 +1972250 +1972278 +1972342 +1972377 +5145870 +5145965 +7541913 +7624494 +7960566 +1972434 +1972449 +1973414 +5146496 +5146510 +5146559 +5146611 +5146659 +5146677 +5146762 +5146837 +5146883 +5146946 +5146961 +5147038 +5147039 +5147062 +5147150 +5147171 +5147193 +5147208 +5147232 +5147245 +5147354 +5147478 +7988195 +5147608 +5147638 +1975341 +1975546 +1975553 +1975571 +1975733 +8329661 +1975793 +8160782 +1975897 +1975903 +1976163 +5147681 +6097233 +1976993 +1977003 +1977007 +1977068 +4523725 +5147827 +5147834 +5769028 +5148247 +5148248 +1978056 +1978065 +1978114 +1978375 +1978445 +4524636 +4524638 +4524890 +1978776 +1978821 +1978977 +5148286 +1979308 +1979430 +1979473 +1979781 +5148394 +5148424 +5148436 +5148462 +5148475 +5148486 +5148487 +1980521 +8421569 +1981696 +1982406 +1982500 +1982525 +1982529 +1982541 +1982542 +1982592 +1982636 +1982671 +1982746 +1982791 +1982838 +1982885 +1983000 +1983052 +1983111 +1983170 +1983260 +1983288 +1983387 +1983441 +1983442 +1983525 +1983548 +1983558 +1983648 +1983705 +1983755 +1983888 +1983896 +1983922 +1983997 +1983999 +1984117 +7752082 +7993353 +8015895 +8026858 +8262357 +8394261 +1984734 +1984942 +1984949 +1984954 +1985522 +1986052 +1986056 +1986157 +1986166 +1986171 +1986191 +1986220 +1986367 +1986452 +1986522 +1986575 +5149315 +5768880 +1987527 +1987578 +1987744 +4524221 +1988593 +1988602 +1988684 +8388883 +5149414 +5149438 +1988881 +1989428 +1990066 +1990150 +1990551 +5149474 +1991179 +1991371 +5149836 +5149839 +1992066 +5880512 +5880533 +5880545 +5880550 +5880552 +5880559 +5880563 +8237343 +8632989 +5769062 +5769068 +5769072 +7429212 +9414984 +4524740 +4523556 +4523560 +4523564 +4524054 +4524376 +4524822 +4523522 +4524070 +4524072 +4524403 +4524793 +4524951 +4525078 +5144190 +5146412 +5149499 +7769543 +4523880 +4523883 +4523885 +5149659 +5149665 +5149704 +5149746 +5149768 +5149820 +7443518 +5146342 +5146379 +4302268 +4524393 +5141677 +1943397 +8277078 +8073674 +8133678 +8273661 +1945569 +7389824 +1947306 +1947335 +1949784 +1949794 +1949852 +1949938 +1950006 +8109173 +8270406 +7633472 +1869478 +1869489 +1869512 +9359597 +5769709 +1735844 +1735855 +9400895 +9530977 +10963226 +10982815 +5109821 +1758878 +1759055 +1759069 +1759079 +1759083 +4533952 +7972792 +1759153 +1759407 +1759597 +1759620 +1759661 +1759667 +1759668 +1759673 +1759686 +1760104 +1760593 +1794361 +4534225 +8708745 +1760857 +1760887 +1760891 +1761041 +1761438 +1761735 +1761865 +1762244 +1762608 +5109498 +5109506 +5109523 +5109599 +5109614 +5109661 +5109722 +1763610 +1764987 +1765011 +1765017 +1765044 +4534245 +4534257 +1765767 +1765954 +1766128 +1766130 +1766131 +1766137 +1766210 +1766274 +1766410 +1766418 +1766510 +7895336 +1766646 +1766741 +1766814 +1767597 +1767625 +1767655 +5772172 +5772176 +5772178 +5772180 +5772186 +5772196 +5772199 +5772202 +5772205 +5772206 +5772210 +1768117 +1768150 +5110200 +1768341 +5110213 +1768702 +1768729 +1768749 +1768771 +1768815 +1769057 +1769505 +1769519 +1769566 +1769958 +1770150 +1770307 +1770477 +4532696 +1771385 +1771391 +7725644 +1771509 +1771531 +1772013 +1772169 +1772179 +5772129 +1772940 +1772956 +1773163 +1773309 +1773328 +4534046 +4534052 +4534057 +5772269 +1775891 +4534719 +5110670 +1776330 +1776371 +5772446 +1776619 +1776862 +4534463 +1777253 +5110871 +5110885 +1778074 +4534299 +1778127 +1778143 +1778517 +1778596 +5111574 +8253467 +1779435 +1779641 +1779690 +1780378 +1780926 +1781008 +4533285 +1781694 +1782560 +1782615 +1782627 +1782672 +1782726 +1782727 +1782763 +1782777 +1782841 +1782927 +1782948 +1783016 +1783037 +1783043 +1783045 +5112155 +5112254 +5112283 +5112291 +5112336 +5112345 +5714973 +5715004 +5772349 +5772351 +7921916 +8043500 +1783855 +1784359 +1784812 +1784826 +1784853 +4534290 +1785185 +1785286 +4532886 +4532888 +4532890 +1785888 +1785895 +1786007 +8292872 +1786902 +1786936 +1787064 +1787112 +1787267 +1787400 +1787504 +1787590 +1787610 +1787697 +1787751 +1787770 +1787841 +1787859 +1788425 +1788522 +4534011 +1788917 +1789076 +1789086 +1789267 +1789481 +1789553 +1789580 +4534166 +1789694 +1789695 +1789730 +1789745 +1789753 +1789755 +1789783 +1789785 +1789840 +1789849 +10068024 +10113008 +10312073 +10904813 +1789982 +1790002 +1790062 +1790072 +1790084 +1790160 +4533115 +8047343 +9092175 +1790361 +1790364 +9174377 +1790625 +1791422 +1791784 +1792061 +1792292 +1792335 +1792377 +1792379 +1792383 +1792411 +1792414 +1792418 +1792426 +1792449 +1792475 +1793877 +1793986 +1794102 +1794590 +1795215 +1795282 +7869346 +1795854 +1795930 +1795946 +1795957 +1796007 +1796117 +1796139 +1796145 +1796169 +1796188 +4534485 +4534486 +7438067 +8007222 +1796217 +7780930 +1796463 +8105817 +1796678 +4533431 +4533433 +4533442 +4533444 +4533446 +1798372 +11992983 +1798916 +1798931 +1798971 +1798974 +1798984 +1799132 +1799135 +1799701 +1799799 +1800004 +1800032 +7981386 +8742426 +4534389 +4534207 +10638451 +4532811 +4533273 +4534540 +8890502 +9135821 +4534038 +4533202 +4534398 +6544687 +4534538 +4533128 +4533136 +4533661 +4533671 +4534408 +4534458 +4534533 +5883985 +11478679 +5110644 +1774285 +1779334 +5114198 +1763072 +5772063 +4534686 +1771634 +1771650 +1771678 +1771698 +8581601 +1770772 +1770869 +1770880 +1771040 +1771204 +1771214 +1771245 +4533714 +7940536 +5113847 +5772309 +5108761 +4534525 +4533347 +4533360 +4532239 +4532253 +1822346 +1822587 +1822610 +1822613 +1822787 +1822796 +1822819 +1822830 +1823726 +1824113 +7875265 +1825064 +1825077 +1825083 +4534909 +4534914 +1825156 +1825176 +5118892 +5118904 +7624468 +7937573 +8397564 +1825539 +1825971 +1825983 +1826022 +1826033 +5118996 +1827125 +5119143 +5119245 +1827645 +1828162 +4534872 +1894268 +7712938 +1894714 +4535614 +4535632 +4535636 +8049830 +1894840 +4535827 +4535809 +4535817 +5128323 +5128357 +1895875 +1896841 +1898286 +4299368 +1898544 +1902533 +1902749 +8140883 +6221746 +1905383 +8208583 +1909398 +1911112 +1911168 +1911278 +1911461 +7728366 +7809779 +8078362 +1912325 +1912372 +1912470 +4299535 +4299576 +4299597 +4299599 +5772890 +7428726 +7799370 +8810143 +5134098 +1913175 +1913178 +1913328 +1913351 +5134469 +5134667 +5134682 +5134815 +5135191 +7738295 +7791190 +7791558 +7798382 +8298764 +8314088 +7854318 +1918868 +8176911 +7622059 +4535510 +5130587 +5130682 +7762841 +5132183 +5135513 +5131910 +8138711 +1902169 +1899433 +7768674 +7934873 +8168644 +8393082 +1951557 +5142870 +1951649 +1952014 +1952062 +1952130 +1952229 +5143048 +1952449 +1952532 +5143129 +5143147 +1952806 +1952812 +1951713 +1832819 +1832853 +1832862 +1832915 +1832927 +1832936 +1833096 +1833159 +5880257 +5880258 +6097224 +6097225 +6097228 +1853064 +1853079 +4529248 +5120465 +5120668 +5120675 +5120767 +5121040 +5121046 +5121177 +5121244 +5121517 +5121613 +5121737 +8273859 +1842196 +5120396 +1842485 +1842542 +1842690 +1842695 +5101394 +1730978 +1731598 +1872368 +1878782 +1878862 +1878879 +1878895 +1878907 +1878939 +4531506 +4531517 +1879252 +1879452 +5126212 +5126217 +1879534 +1879630 +1879655 +1879703 +1879731 +1879735 +1879765 +10915497 +1879970 +1880040 +1880062 +1880064 +1880094 +1880104 +1880138 +1880139 +1880140 +1880143 +1881151 +4531687 +1881603 +4531713 +1881834 +4531975 +1882158 +1882210 +1882437 +1882459 +1882557 +1882729 +5126834 +8325294 +1882905 +1883161 +1883386 +4531690 +1884212 +4531708 +1884465 +4532122 +1884970 +1886084 +1886320 +8223165 +1886579 +1886587 +1887290 +1887701 +4531968 +10922411 +1888579 +1888733 +1888743 +1888759 +1888826 +1889287 +1889942 +1890187 +1890522 +1890534 +1890576 +1890656 +1890699 +1890703 +1890772 +1891059 +1891326 +1891386 +1891426 +1891473 +1891493 +1891494 +4532022 +1892242 +9674732 +1884255 +1884273 +1884280 +1884312 +1884332 +1884370 +1884403 +5884851 +5126675 +5126680 +7446048 +8532380 +8537359 +8823068 +8856895 +8858121 +9100030 +9101339 +1889833 +1887108 +1887173 +1887177 +1887178 +4532050 +4532057 +4532088 +4532095 +4532097 +6121184 +4532160 +1846107 +1846111 +1846112 +1846133 +1846141 +1846149 +1846159 +1846210 +1846219 +1846236 +4528813 +4528818 +1830879 +1830937 +1830962 +1831002 +1831009 +1831128 +1831136 +1831168 +4525443 +4525448 +5122293 +1853587 +4526048 +1854202 +1854287 +1854347 +5122439 +1854792 +1854849 +1854237 +4526050 +7717983 +1858637 +1858698 +1858762 +1858775 +1858778 +1858873 +1859046 +1859100 +1859177 +4536292 +1859285 +1859305 +1859471 +1859480 +1859488 +1859534 +1859952 +1860063 +1860076 +4536472 +4536483 +7642240 +8200050 +1973467 +5123221 +5123042 +1866568 +5124911 +1867820 +7734292 +1841616 +1841675 +1841813 +1841821 +1861644 +1861797 +1861862 +1862578 +1862580 +1862719 +1862837 +5123922 +5124007 +5124029 +1864161 +1864358 +1864377 +5124143 +5124233 +1864652 +1993419 +1939432 +4525189 +5119513 +1830361 +1830372 +1830374 +1830380 +1830407 +1830408 +1830410 +1830457 +4525369 +1830498 +4525420 +4525425 +7976145 +1830537 +1830584 +1830632 +1830802 +4525364 +1754332 +5107128 +5107219 +5107644 +5107829 +7410701 +7674502 +7761138 +7778368 +7903078 +7955974 +8158342 +8201251 +8348761 +8426357 +4522753 +1939658 +1939677 +1939680 +1939688 +1939717 +7646066 +1829322 +1829363 +10055273 +1856005 +1856289 +1856384 +1856595 +1856620 +1856658 +1856668 +1856686 +1856691 +1856701 +1856730 +1856768 +1856772 +1856867 +1857577 +1857626 +9790007 +1857828 +1857829 +1857856 +1857863 +1857878 +1857924 +1857978 +1858074 +1858113 +1858163 +8225376 +1938214 +1938520 +1938810 +1858531 +1838691 +1838811 +1838838 +1838905 +1838911 +4528692 +4528694 +1833626 +4528658 +1835031 +5770913 +1835156 +1835393 +1835396 +1835407 +1836899 +1837172 +1838969 +1839851 +1839893 +1841158 +1841159 +5770922 +5770942 +4529032 +5119893 +1801051 +1801896 +4534779 +4534782 +1802280 +1803012 +1803073 +4534762 +4534767 +5114327 +8244266 diff --git a/dev/releases/mambo_v3/presets/north_europe_v3.classes b/dev/releases/mambo_v3/presets/north_europe_v3.classes new file mode 100644 index 0000000..bdd9e14 --- /dev/null +++ b/dev/releases/mambo_v3/presets/north_europe_v3.classes @@ -0,0 +1,2199 @@ +1934693 +1860621 +1860628 +4522795 +1860659 +1860664 +1860668 +1860671 +1860688 +1860709 +1860711 +4522933 +5123582 +1732063 +1732416 +1732452 +1732521 +1732565 +1732662 +1732685 +1733258 +1733484 +4525266 +4525273 +5101678 +5101745 +5769191 +1734453 +1734704 +1734826 +5102287 +1845270 +1845368 +1845565 +1845607 +4529566 +4528100 +1846604 +1846657 +1846715 +1846729 +1846916 +1847061 +1847097 +1847407 +4528547 +1847572 +9262981 +1847956 +1848150 +1848202 +10450501 +1848219 +1848273 +1848356 +1848378 +1848426 +4528539 +1848596 +1848610 +1848636 +1848657 +1848669 +1848690 +1848713 +1848714 +1848717 +1848730 +1848753 +1848864 +1848868 +1849104 +1849267 +1849273 +1849284 +1849294 +1849477 +11052757 +11080751 +1849630 +1849856 +1849897 +1849924 +1850008 +1850042 +1850045 +1850076 +1850077 +1850106 +1850238 +1850246 +11576787 +1850279 +1850302 +1850335 +1850386 +1850394 +1850450 +1850497 +1850506 +4527903 +1850522 +1850533 +1850538 +1850570 +4528529 +1850781 +1850971 +1851000 +1851010 +1851011 +5122037 +5122113 +1851203 +1851220 +1851337 +1851347 +1851555 +5122206 +4527972 +1852150 +1852159 +1852177 +1852311 +1852430 +11287091 +4527957 +1848920 +1829533 +1829588 +1829776 +1829785 +1829799 +1829823 +1829974 +4525354 +1828637 +6097236 +5769272 +5879654 +7448174 +4525610 +1861395 +1845866 +1845962 +1845965 +1841261 +1830838 +1830843 +1830122 +1830125 +1830131 +1830144 +1830147 +1830152 +1830186 +1830191 +1830207 +1830241 +1830243 +1830262 +1830266 +1830271 +4525476 +4525487 +1831643 +1841296 +4528593 +8271010 +1853723 +5880147 +9734171 +11418741 +11571523 +7908344 +1761111 +1764531 +1769103 +1769897 +1772793 +4532500 +1777631 +1780150 +1790692 +1790816 +5113078 +5113084 +5113234 +1797178 +1797258 +1797276 +1797367 +1797374 +1797479 +4532471 +8355390 +8756768 +1798346 +1798408 +4532493 +1798449 +1798504 +1798594 +1798802 +1798807 +4532351 +4532357 +1799708 +1803163 +1803824 +1804071 +1804906 +7874258 +1807969 +1808450 +1808752 +5115771 +5115777 +1810099 +5116416 +1813114 +5117189 +5117200 +7656811 +1814630 +5117399 +5117400 +1816881 +8326103 +1819145 +4532293 +4532297 +1819268 +8407461 +1819873 +7657803 +8361973 +1820372 +1820406 +12253343 +5884571 +7596232 +5771982 +6097214 +4532544 +4532516 +4532532 +4532565 +12089608 +8148822 +11962292 +12135372 +5115874 +5116475 +8165185 +6097254 +5116698 +1788635 +4532405 +4532408 +4532412 +8000103 +4532534 +4532508 +1760246 +5113030 +5113036 +1821856 +1821911 +1812394 +8237987 +1820039 +1771772 +1860979 +1860983 +1860987 +1861031 +4522911 +4522916 +4522919 +4522922 +12318291 +4522886 +4522890 +4522891 +4522896 +1860765 +1860768 +1860852 +7767114 +7851302 +7961640 +1992504 +1852956 +1852978 +1835432 +1835433 +1835456 +1835457 +9724183 +1837343 +1837420 +1837429 +1837464 +1837515 +4529064 +7958169 +8015612 +1839293 +1839296 +1840297 +1840301 +1840345 +1840346 +1840360 +1840371 +1840380 +1840408 +1840478 +1840483 +1840485 +1840555 +1840566 +1840570 +1840581 +1840596 +1840621 +4529186 +5119808 +1831752 +1852751 +1852787 +9473121 +4529630 +5125104 +1751236 +1751290 +1751298 +1751299 +1751368 +1751457 +4535884 +4535904 +1860408 +4525177 +5123339 +5123394 +5769164 +5123461 +5123474 +1751207 +1751216 +1869803 +1869852 +1869976 +1870202 +1870249 +1870250 +1870450 +1870988 +1871160 +1871252 +1871407 +4531402 +1871698 +1871826 +10787705 +1872848 +1872901 +1872904 +1873048 +1873079 +1873215 +1873411 +1873776 +1873780 +1873783 +4531264 +1873890 +5125689 +1874192 +1874204 +1874211 +1874295 +4531145 +4531147 +4531158 +1874375 +1874743 +9782192 +1875008 +1875120 +8219149 +1875327 +1875376 +1875429 +4531242 +1875631 +1875633 +1875682 +4531284 +1875827 +1875865 +1875869 +1875918 +1875940 +1875952 +1876329 +1876357 +1876409 +1876512 +1876542 +1876623 +1876854 +1877038 +1877310 +1877341 +1877368 +4531246 +5126052 +1877941 +1877988 +1878470 +1878471 +1878490 +1878586 +1890065 +11728049 +1872315 +1748805 +1940158 +4525859 +4525884 +5141493 +5141501 +1940504 +1940510 +1940575 +1940639 +1940644 +1940717 +1940744 +1940768 +4525777 +4525803 +1940807 +1940838 +1941377 +1941437 +1939879 +1736377 +1736412 +1736425 +1736447 +1736484 +1736511 +1736528 +1736560 +1736565 +1736601 +5102628 +5102642 +1736727 +1736800 +1736898 +1736904 +1736905 +1736906 +1736945 +4530406 +4529931 +1737342 +1737368 +1737437 +1737491 +1737497 +7466487 +1737524 +1737526 +1737533 +1737542 +1737552 +1737650 +1737753 +1737775 +1737776 +1737783 +1737847 +1737893 +1737924 +4530002 +8186212 +1738050 +1738163 +1738222 +1738245 +1738317 +1738322 +1738337 +1738373 +1738422 +1738429 +1738514 +8420632 +8869900 +5102931 +5102951 +1738687 +1738700 +1738722 +1738777 +1738794 +1738839 +1738883 +1739042 +1739043 +8086347 +1739128 +1739272 +1739284 +1739290 +1739337 +1739377 +1739381 +5102982 +1739449 +1739451 +1739461 +1739471 +1739605 +1739748 +1739797 +1739816 +1739819 +1739833 +1739919 +1739922 +1739931 +1739980 +1739999 +1740005 +1740053 +1740069 +1740116 +1740120 +1740155 +1740174 +1740183 +1740185 +1740305 +1740374 +1740392 +7797515 +8215326 +1740482 +1740518 +1740533 +1740567 +1740570 +1740623 +8094357 +1740762 +1741056 +1741147 +1741253 +1741340 +1741341 +1741368 +4530151 +8345820 +5103066 +5771357 +1741545 +1741551 +10838422 +1741590 +1741593 +1741615 +1741633 +1741634 +1741667 +1741747 +1741752 +1741756 +1741765 +4530424 +10807169 +11093909 +1742106 +1742142 +1742185 +1742263 +1742346 +1742402 +5103451 +5103502 +5103613 +5103736 +5103948 +5771350 +7975250 +1743196 +8313553 +5103998 +7661023 +1743453 +1743475 +7877231 +1743532 +1743588 +1743604 +1743613 +5104056 +6097235 +1743641 +1743643 +1743710 +1743714 +4530214 +1743730 +1743768 +1743775 +4529900 +4529908 +4529915 +1743828 +1743856 +1743862 +1743867 +1743898 +1744071 +1744136 +1744180 +1744224 +4530632 +1744416 +1744498 +1744526 +1744542 +1744588 +1744593 +1744693 +1744699 +1744709 +1744714 +1744728 +1744731 +1744739 +1744742 +1744748 +1744763 +1744777 +1744782 +1744789 +1744808 +1744810 +1744860 +1744896 +1744901 +7964262 +1745079 +10844862 +1745131 +1745558 +1745561 +1745579 +1745600 +1745630 +1745634 +1745636 +1745643 +1745659 +1745676 +1745678 +1745705 +1745724 +1745725 +1745737 +1745756 +1745762 +1745771 +1745787 +1745788 +1745816 +1745830 +8162538 +8369868 +1745925 +1746027 +8424972 +1746174 +1746413 +1746440 +1746613 +1746644 +1746666 +1746689 +1746775 +1746832 +1746856 +1746876 +1746910 +1747050 +1747141 +5104442 +1747738 +4530138 +5104558 +1748203 +1748321 +6097234 +7588222 +9242559 +1748456 +5104641 +8691947 +10580256 +5103121 +5103176 +5103181 +5103185 +5103227 +5771227 +5771230 +5771232 +5771236 +5771239 +5771241 +5771243 +5771249 +5771256 +5771258 +5771259 +1831780 +4525500 +4525503 +4525505 +4525510 +4525530 +4525540 +4525547 +4525557 +4525562 +1920851 +7387466 +1922311 +1922343 +8016522 +1922584 +1922937 +5138543 +5138561 +5714680 +1923796 +1924097 +5138681 +1925221 +1925233 +4535172 +1925454 +1925918 +1925962 +1926054 +1926324 +1926861 +5882965 +1928248 +5139156 +1928945 +1929270 +1929659 +1929697 +8356768 +1930110 +1931179 +1931779 +1932411 +1932960 +5140214 +5140244 +5140436 +7634721 +7664111 +1933583 +1933793 +1926260 +1933095 +1933138 +1924494 +4522322 +5105339 +1919712 +1920237 +1920259 +1920491 +1920494 +1920496 +1920506 +4535307 +5137903 +5804895 +1920712 +5137582 +5137595 +5137612 +5137636 +5137695 +5137706 +5137708 +8203812 +1920218 +1748890 +1748922 +1748942 +1749050 +1749070 +1749164 +1749449 +1749661 +1749713 +1749744 +1749846 +1749869 +1749908 +1749921 +1749929 +1749936 +1749948 +1749954 +1749959 +1749975 +1750051 +1750076 +1750097 +1750131 +1750143 +1750159 +1750166 +1750288 +5104772 +5104781 +5104797 +5104829 +5104882 +5104891 +5104903 +5104927 +5104940 +5105054 +5105088 +5105106 +5105158 +5976947 +1751051 +5104759 +1749596 +1749608 +1749635 +8741260 +1735532 +4527339 +4527342 +1731826 +1731837 +1731860 +1954563 +5143380 +5143453 +5143477 +5143651 +1955694 +5143675 +5143697 +1956440 +1956524 +1956599 +1956710 +4525068 +1957266 +1957300 +1957570 +1957572 +1957632 +1957706 +1957718 +1957746 +1957816 +1957845 +1957852 +1957854 +4524421 +4524426 +5143944 +5143947 +1958024 +1958323 +1959383 +1959395 +1959467 +1959682 +1959735 +1959914 +1959919 +1960617 +1961037 +1961040 +1961068 +1961190 +1962204 +1962265 +1962268 +1962434 +1962516 +9812211 +1962636 +1962860 +1962972 +1962990 +1963011 +4302252 +1963306 +1963446 +1963463 +1964191 +1964195 +1964437 +1964471 +1964637 +1964653 +1964657 +8361848 +5144426 +1965166 +1965197 +1965208 +1965345 +1965640 +1965763 +1965777 +1965795 +1965810 +1965825 +1965841 +1965913 +1965996 +1966017 +1966351 +1966886 +5144534 +1967006 +1967011 +5144543 +1967245 +1967265 +1967273 +1967452 +1967597 +1967815 +1967873 +7681733 +1968678 +1968867 +11598540 +1968990 +1969291 +1969339 +1969954 +1970213 +1970227 +1970284 +5144677 +5144721 +5144782 +5144805 +5144900 +5145009 +5145136 +5145186 +5145260 +5145269 +5145409 +5145729 +7753668 +8014296 +9627567 +1971847 +1971858 +1971888 +1971986 +1972120 +1972185 +1972187 +1972234 +1972250 +1972278 +1972342 +1972377 +5145870 +5145965 +7541913 +7624494 +7960566 +1972434 +1972449 +1973414 +5146496 +5146510 +5146559 +5146599 +5146611 +5146659 +5146677 +5146762 +5146837 +5146842 +5146883 +5146946 +5146961 +5147038 +5147039 +5147062 +5147150 +5147171 +5147193 +5147208 +5147232 +5147245 +5147354 +5147441 +5147478 +7988195 +5147608 +5147638 +1975341 +1975546 +1975553 +1975571 +1975733 +8329661 +1975793 +8160782 +1975897 +1975903 +1976163 +5147681 +6097233 +7973517 +8414310 +1976993 +1977003 +1977007 +1977068 +4523725 +5147827 +5147834 +5769028 +5148247 +5148248 +1977967 +1978056 +1978065 +1978114 +1978375 +1978445 +4524636 +4524638 +10712554 +4524890 +4524902 +1978776 +1978821 +1978977 +5148286 +1979308 +1979430 +1979473 +1979781 +5148394 +5148424 +5148436 +5148462 +5148475 +5148486 +5148487 +1980521 +8421569 +1981696 +1982406 +1982500 +1982525 +1982529 +1982541 +1982542 +1982592 +1982636 +1982671 +1982746 +1982770 +1982791 +1982838 +1982867 +1982885 +1983000 +1983052 +1983111 +1983170 +1983260 +1983288 +1983387 +1983441 +1983442 +1983525 +1983548 +1983558 +1983648 +1983705 +1983755 +1983888 +1983896 +1983922 +1983997 +1983999 +1984117 +7752082 +7993353 +8015895 +8026858 +8262357 +8394261 +1984734 +1984942 +1984949 +1984954 +1985522 +1986052 +1986056 +1986157 +1986166 +1986171 +1986191 +1986220 +1986367 +1986452 +1986522 +1986575 +1986623 +5149315 +5768880 +1987527 +1987578 +1987737 +1987744 +4524221 +1988064 +1988593 +1988602 +1988642 +1988684 +7555991 +8388883 +5149414 +5149438 +1988881 +1989428 +1990066 +1990150 +1990551 +1990582 +5149474 +1991179 +1991371 +5149836 +5149839 +1992066 +5880512 +5880533 +5880545 +5880550 +5880552 +5880559 +5880563 +7657419 +8237343 +8632989 +5769062 +5769068 +5769072 +7429212 +9414984 +9563355 +4524740 +4523556 +4523560 +4523564 +4524054 +4524376 +4524822 +4523522 +4524070 +4524072 +4524403 +4524793 +4524914 +4524951 +4524955 +4525078 +9220953 +5144190 +5146412 +5149499 +5149569 +7769543 +8851663 +4523880 +4523883 +4523885 +5149659 +5149665 +5149704 +5149717 +5149746 +5149768 +5149784 +5149820 +7443518 +5146342 +5146379 +4302268 +4524393 +5141677 +1943397 +8277078 +8073674 +8133678 +8273661 +1945569 +7389824 +1947306 +1947335 +1949784 +1949794 +1949852 +1949929 +1949938 +1950006 +5142394 +7683096 +8109173 +8270406 +7633472 +1869467 +1869478 +1869489 +1869512 +9359597 +5769709 +1735844 +1735855 +9400895 +9530977 +10963226 +10982815 +5109821 +1758878 +1759055 +1759069 +1759079 +1759083 +1759097 +4533952 +7972792 +1759153 +1759407 +1759597 +1759620 +1759661 +1759667 +1759668 +1759673 +1759686 +1760104 +1760593 +1794361 +4534225 +8708745 +1760857 +1760887 +1760891 +1761041 +1761438 +1761735 +1761865 +1762244 +1762608 +5109498 +5109506 +5109523 +5109599 +5109614 +5109661 +5109670 +5109722 +1763610 +1764673 +1764987 +1765011 +1765017 +1765044 +4534245 +4534257 +8352161 +1765767 +1765954 +1766128 +1766130 +1766131 +1766137 +1766210 +1766274 +1766410 +1766418 +1766510 +7895336 +1766646 +1766718 +1766721 +1766741 +1766814 +1767511 +1767597 +1767608 +1767625 +1767655 +5772172 +5772176 +5772178 +5772180 +5772186 +5772196 +5772199 +5772202 +5772205 +5772206 +5772210 +8045644 +1768117 +1768150 +5110200 +1768308 +1768341 +5110213 +1768702 +1768729 +1768749 +1768771 +1768815 +1769057 +1769505 +1769519 +1769543 +1769566 +1769958 +1770150 +1770307 +1770353 +1770416 +1770477 +1770530 +1770573 +4532696 +8393221 +1771385 +1771391 +7725644 +1771509 +1771531 +1771997 +1772013 +1772169 +1772179 +5772129 +1772940 +1772956 +1772977 +1773062 +1773163 +1773309 +1773328 +1773484 +1774347 +4534046 +4534052 +4534057 +1775172 +5110593 +5772269 +1775891 +4534719 +1776067 +5110670 +1776330 +1776371 +5772446 +1776619 +1776862 +4534463 +1777253 +5110871 +5110885 +1778074 +4534299 +1778127 +1778143 +1778517 +1778596 +5111574 +5772222 +8253467 +1779435 +1779641 +1779690 +1780378 +1780926 +1780954 +1781008 +4533285 +1781694 +1782319 +1782560 +1782579 +1782615 +1782627 +1782672 +1782726 +1782727 +1782763 +1782777 +1782841 +1782872 +1782927 +1782948 +1783016 +1783037 +1783043 +1783045 +5112155 +5112160 +5112254 +5112283 +5112291 +5112336 +5112345 +5714973 +5715004 +5772349 +5772351 +7921916 +8043500 +1783855 +1784359 +1784812 +1784826 +1784853 +4534290 +1785185 +1785286 +4532886 +4532888 +4532890 +1785887 +1785888 +1785895 +1786007 +8292872 +1786360 +1786515 +1786619 +1786902 +1786936 +1787064 +1787112 +1787213 +1787267 +1787400 +1787504 +1787590 +1787610 +1787631 +1787697 +1787751 +1787770 +1787841 +1787859 +4534086 +1788425 +1788522 +4534011 +1788917 +1789076 +1789086 +1789267 +4533882 +1789481 +1789553 +1789580 +4534162 +4534166 +1789694 +1789695 +1789730 +1789745 +1789753 +1789755 +1789783 +1789785 +1789840 +1789849 +10068024 +10113008 +10312073 +10904813 +1789982 +1790002 +1790062 +1790072 +1790084 +1790160 +4533115 +8047343 +9092175 +1790361 +1790364 +9174377 +1790625 +1790671 +1791422 +1791784 +1792061 +1792292 +1792335 +1792377 +1792379 +1792383 +1792411 +1792414 +1792418 +1792426 +1792431 +1792449 +1792475 +1793877 +1793986 +1794102 +1794590 +1794599 +1795068 +1795215 +1795282 +7869346 +1795854 +1795930 +1795946 +1795957 +1796007 +1796117 +1796139 +1796145 +1796169 +1796188 +4534485 +4534486 +7438067 +8007222 +1796217 +7780930 +1796463 +8105817 +1796678 +4533431 +4533433 +4533442 +4533444 +4533446 +1798372 +11992983 +1798916 +1798931 +1798971 +1798974 +1798984 +1799132 +1799135 +1799701 +1799799 +1800004 +1800032 +7981386 +8742426 +4534389 +4534207 +10638451 +4532811 +4533273 +4534540 +8890502 +9135821 +4534038 +4533202 +4534398 +6544687 +4534538 +4533128 +4533136 +4533661 +4533671 +4534408 +4534458 +4534533 +5883985 +11478679 +5110644 +1774283 +1774285 +1779334 +5114198 +1763072 +5772063 +4534681 +4534685 +4534686 +8108800 +1771634 +1771650 +1771678 +1771698 +8581601 +1770772 +1770773 +1770869 +1770880 +1771040 +1771169 +1771204 +1771214 +1771245 +4533714 +7940536 +5113847 +5772309 +5108761 +4534525 +1773901 +1773904 +4533347 +4533360 +4532203 +4532206 +4532239 +4532253 +1822346 +1822587 +1822610 +1822613 +1822787 +1822796 +1822819 +1822830 +1823726 +1824113 +7875265 +1825064 +1825077 +1825083 +4534909 +4534914 +1825156 +1825176 +5118892 +5118904 +7624468 +7937573 +8397564 +1825539 +1825971 +1825983 +1826022 +1826033 +5118996 +1827125 +5119143 +5119245 +1827645 +1828162 +4534872 +1894164 +1894268 +5882039 +7712938 +1894714 +4535614 +4535632 +4535636 +8049830 +1894840 +4535827 +4535809 +4535817 +5128323 +5128357 +6231906 +9804158 +1895875 +1896841 +1897852 +1898286 +4299368 +1898544 +1902533 +1902749 +8140883 +6221746 +1905383 +8208583 +1909398 +1911093 +1911112 +1911168 +1911278 +1911461 +7728366 +7809779 +8078362 +1912325 +1912372 +1912470 +4299535 +4299565 +4299576 +4299597 +4299599 +5772890 +7428726 +7799370 +8810143 +5134098 +1913175 +1913178 +1913328 +1913351 +5134469 +5134569 +5134667 +5134682 +5134693 +5134815 +5134837 +5135191 +7700512 +7738295 +7791190 +7791558 +7798382 +8047165 +8167638 +8233062 +8298764 +8314088 +7854318 +1918669 +1918868 +8035998 +8176911 +7622059 +4535510 +5130587 +5130682 +7762841 +5132183 +8001799 +5135513 +5131910 +8138711 +1902143 +1902169 +1899433 +7768674 +7934873 +8168644 +8393082 +1951557 +5142870 +1951649 +1952014 +1952062 +1952130 +1952229 +5143048 +1952449 +1952532 +5143129 +5143147 +1952806 +1952812 +1951713 +1832819 +1832853 +1832862 +1832915 +1832927 +1832936 +1833096 +1833159 +5880257 +5880258 +6097224 +6097225 +6097228 +1853064 +1853079 +4529248 +1941864 +5120465 +5120577 +5120668 +5120675 +5120767 +5121040 +5121046 +5121177 +5121244 +5121517 +5121613 +5121737 +8273859 +1842196 +5120396 +1842485 +1842542 +1842690 +1842695 +5101394 +1730978 +1731263 +4525641 +1731598 +1872368 +1878782 +1878798 +1878862 +1878879 +1878895 +1878907 +1878939 +4531506 +4531517 +1879252 +1879408 +1879452 +5126212 +5126217 +1879534 +1879630 +1879655 +1879703 +1879731 +1879735 +1879765 +10915497 +1879970 +1880040 +1880062 +1880064 +1880094 +1880104 +1880138 +1880139 +1880140 +1880143 +1881126 +1881151 +9819403 +4531687 +1881208 +1881603 +4531713 +1881834 +4531975 +1882158 +1882210 +1882437 +1882459 +1882557 +1882729 +5126834 +8325294 +1882905 +1883067 +1883161 +1883386 +1883634 +4531690 +1884212 +4531708 +1884465 +4532122 +1884970 +1885937 +1886084 +1886320 +8223165 +1886579 +1886587 +1886951 +1887290 +1887701 +4531968 +10922411 +1888484 +1888579 +1888733 +1888743 +1888759 +1888826 +1889287 +1889942 +1890187 +1890522 +1890534 +1890540 +1890576 +1890656 +1890679 +1890699 +1890701 +1890703 +1890772 +1890823 +1890898 +1891013 +1891059 +1891167 +1891326 +1891386 +1891426 +1891453 +1891473 +1891493 +1891494 +4532022 +1892242 +9674732 +1884240 +1884255 +1884273 +1884280 +1884312 +1884332 +1884365 +1884370 +1884403 +5884851 +5126675 +5126680 +7446048 +8532380 +8537359 +8823068 +8856895 +8858121 +9100030 +9101339 +1889833 +1887108 +1887173 +1887177 +1887178 +4532050 +4532057 +4532088 +4532095 +4532097 +6121184 +4532160 +1846107 +1846111 +1846112 +1846133 +1846141 +1846149 +1846159 +1846210 +1846219 +1846236 +4528813 +4528818 +1830879 +1830937 +1830962 +1831002 +1831009 +1831128 +1831136 +1831168 +4525443 +4525448 +5122293 +1853587 +4526048 +1854202 +1854287 +1854347 +5122439 +1854792 +1854824 +1854849 +1854237 +4526094 +4526050 +7717983 +1858637 +1858698 +1858762 +1858775 +1858778 +1858873 +1859046 +1859100 +1859177 +4536292 +1859285 +1859305 +1859471 +1859480 +1859488 +1859534 +1859952 +1860063 +1860076 +4536472 +4536483 +7642240 +8200050 +1973467 +5123221 +5123042 +1866568 +5124911 +1867820 +7734292 +1841460 +1841616 +1841675 +1841813 +1841821 +1841989 +1861510 +1861644 +1861797 +1861862 +1862578 +1862580 +1862719 +1862765 +1862837 +5123922 +5124007 +5124029 +1864161 +1864358 +1864377 +5124143 +5124233 +1864652 +1993419 +1939432 +4525189 +1860108 +5119506 +5119513 +1830361 +1830372 +1830374 +1830380 +1830407 +1830408 +1830410 +1830457 +4525369 +1830498 +4525420 +4525425 +7976145 +1830537 +1830584 +1830632 +1830802 +4525364 +1754183 +1754332 +5107128 +5107219 +5107644 +5107829 +7410701 +7674502 +7761138 +7778368 +7903078 +7955974 +8158342 +8201251 +8348761 +8426357 +4522753 +1939658 +1939677 +1939680 +1939688 +1939717 +7646066 +1829322 +1829363 +8254441 +10055273 +1856005 +1856289 +1856384 +1856595 +1856620 +1856658 +1856668 +1856686 +1856691 +1856701 +1856730 +1856768 +1856772 +1856867 +1857068 +1857143 +1857577 +1857626 +9790007 +1857828 +1857829 +1857856 +1857863 +1857878 +1857924 +1857978 +1858074 +1858100 +1858113 +1858163 +8225376 +1938214 +1938520 +1938810 +1858531 +1838691 +1838811 +1838838 +1838905 +1838911 +4528692 +4528694 +1833500 +1833626 +4528658 +1834589 +1835031 +5770913 +1835156 +1835393 +1835396 +1835407 +1836899 +1837172 +1838969 +1839851 +1839893 +1841158 +1841159 +5770922 +5770942 +4529032 +5119893 +1801051 +1801896 +4534779 +4534782 +1802280 +1803012 +1803073 +4534762 +4534767 +5114311 +5114327 +8244266 diff --git a/dev/releases/mambo_v3/presets/oceania.classes b/dev/releases/mambo_v3/presets/oceania.classes new file mode 100644 index 0000000..0f5256a --- /dev/null +++ b/dev/releases/mambo_v3/presets/oceania.classes @@ -0,0 +1,2273 @@ +1992268 +1992283 +1992301 +1992315 +10648791 +1758114 +1758146 +10083877 +9840570 +9960252 +10190647 +10341307 +10435406 +1732978 +1733504 +1733507 +1733511 +1733535 +10155026 +1734851 +10730270 +1831974 +1831999 +1832023 +1832518 +1832533 +1832553 +1832569 +1832649 +1845271 +1845503 +1845586 +1846858 +1847066 +1847111 +1847622 +1847639 +8797017 +1849007 +1849010 +5122013 +1850156 +1850184 +1850633 +1850764 +1850781 +1850798 +1851039 +5806361 +11528968 +1851347 +1851543 +1852292 +10023115 +10498365 +11706893 +1850463 +9977181 +1829703 +1829776 +1829814 +1829866 +4705103 +4695719 +1828395 +1828400 +1828402 +8150089 +1828424 +1828426 +1828455 +1828456 +6196939 +1828471 +1828491 +1828540 +1828543 +1828544 +10707366 +10833593 +10882997 +5119346 +5119349 +5119350 +5119353 +5119354 +5119361 +10288636 +10639943 +1828826 +4695709 +1828976 +1837706 +1834428 +4684910 +4686897 +4686905 +4686907 +4686913 +1835848 +1835862 +1835874 +1835886 +1835897 +1835908 +1835928 +1838084 +1838978 +4685802 +1839600 +1839604 +4685468 +4684220 +4685557 +4685946 +1835460 +1845965 +1830812 +1830814 +1831458 +1831473 +1831499 +1831508 +1831565 +1831655 +1831667 +4708342 +5119868 +1839396 +10042504 +10094594 +10379915 +10531480 +10548275 +11919216 +9851221 +9985020 +6132868 +1761572 +1761573 +1761751 +1761752 +1761820 +1762151 +5109196 +1762849 +1762852 +10256550 +1762887 +1763957 +1763976 +1763994 +1764060 +5109782 +5109784 +5109786 +5109787 +5109788 +1764886 +1765653 +10099906 +10647358 +1766558 +1766560 +1767215 +10340332 +1772543 +5110490 +1774069 +5110546 +1777165 +1777166 +5110837 +11457930 +11609422 +4687991 +5110981 +10403441 +9610080 +1779671 +1780716 +1780856 +1780857 +1780860 +1780862 +10154280 +1782185 +1782326 +1782328 +1783173 +1783991 +10157400 +5112407 +5112410 +1784646 +1785832 +1786317 +5112500 +1786958 +1786990 +1787003 +1787009 +1787010 +5112531 +1788553 +6132936 +7346446 +9494526 +1788881 +6132826 +1788986 +1789225 +10090168 +1789794 +1790257 +1790450 +10598407 +1790900 +1790910 +9967251 +9983957 +5112940 +1791379 +1791514 +1791715 +9504222 +9860902 +10267570 +1795657 +10573746 +1796984 +10108671 +1797039 +6132979 +1798014 +1798018 +1798023 +1798025 +1798101 +5113950 +5884247 +11636323 +9440183 +9635978 +9923283 +10657151 +1798511 +10096855 +1787090 +1798529 +1798687 +1798768 +1798868 +4532352 +6115437 +8793873 +1799165 +1799167 +1799743 +1799757 +1803148 +1803197 +11909090 +1803781 +1803788 +1804246 +1804429 +1804430 +1804610 +10053130 +1804721 +1804727 +1804742 +10156470 +1805043 +1805505 +1805524 +1805806 +1806704 +1806871 +1807473 +1807477 +1807478 +1807479 +1807480 +1807483 +1807485 +1807488 +1807490 +1807491 +1807503 +11900897 +1808232 +6198302 +5115777 +12214821 +1809244 +1809248 +10189965 +1809381 +10010700 +1810752 +1810851 +5116397 +1812437 +1812453 +1812465 +1812658 +1814913 +10074808 +1815338 +1816029 +1816110 +1816264 +1816434 +1817065 +11703980 +1817160 +1817171 +1817217 +1817810 +1818413 +5118171 +10556853 +5118291 +1819970 +1820383 +1820401 +1820435 +10274769 +1821448 +10503495 +10106475 +9956017 +10270464 +9473918 +9559336 +12180031 +12203022 +12216332 +9852545 +10496181 +10629533 +10004820 +10248689 +10454874 +10443878 +10637588 +10643533 +10166724 +10480609 +8363709 +10178326 +10469564 +9621271 +5116504 +1818216 +9336001 +1781413 +1781428 +1781598 +1763761 +6115388 +1816634 +1816648 +1816673 +1774598 +1774604 +1774654 +1774691 +1774712 +1768630 +5111643 +1766892 +1813468 +10164453 +1768190 +9400916 +1768462 +9989156 +5113001 +5113036 +5109796 +1821464 +1821468 +1821542 +1822003 +1804120 +1804148 +6116076 +1782507 +1783715 +9918092 +1775796 +4687933 +4687934 +4687935 +1820137 +1799821 +1781531 +1798331 +1798335 +1784936 +1785072 +1765999 +1766007 +10330198 +10598038 +11612469 +1786597 +4687389 +5884188 +9935660 +5110013 +10196956 +10392889 +1811455 +1811462 +1811465 +1796941 +1782310 +12266659 +5108421 +1771903 +10097776 +4301309 +5112440 +1795542 +1860849 +1992434 +1992489 +1731886 +1731890 +1731906 +1731923 +1731926 +1731927 +1731980 +1732001 +1732005 +1732031 +1732033 +1732044 +1732052 +10640865 +9950697 +1833779 +1833782 +1833794 +1834524 +1834547 +4685588 +4685595 +1834793 +1835086 +1835348 +1835814 +4529064 +1837724 +1837726 +1837727 +1837968 +1838058 +1838065 +1838071 +1839658 +1839714 +1839721 +4684986 +1840346 +1841095 +1831752 +1852832 +1852859 +1860259 +1860260 +5123339 +10361029 +10625116 +5123419 +5880040 +5880041 +6132546 +10208422 +1853222 +10005632 +10433914 +11756119 +1869707 +1869714 +1870237 +1870450 +1870452 +1870459 +1870506 +1870509 +1870703 +1870988 +1871171 +1871333 +1872169 +9969513 +1872255 +1872470 +1872735 +1872812 +1872827 +1872850 +1872873 +1872901 +1873049 +1873079 +1873222 +1873285 +1873290 +1873291 +1873373 +1873620 +9858922 +1873773 +1873843 +5125591 +5125600 +5125602 +5125629 +1874146 +1875478 +1875534 +1875554 +1875584 +1875844 +1876479 +1876542 +10356445 +1876876 +10442332 +1876922 +1876955 +10142569 +1877406 +1877453 +5125943 +1877988 +1878173 +1878406 +1878470 +1878490 +9835867 +1888454 +1890056 +1890065 +10211808 +5884888 +10526954 +10065676 +10129011 +10279983 +11591775 +9857679 +10423263 +1748780 +1836906 +1836907 +1940575 +1736623 +5102683 +1736995 +1737015 +10146436 +10469532 +1737115 +1737131 +1737182 +1737187 +1737847 +1737893 +1738045 +1738081 +1738192 +1739051 +1739128 +1739220 +1739316 +1739553 +1739567 +1740586 +1740797 +1740828 +12259151 +1741074 +9826405 +1741084 +11906255 +10250474 +1741593 +1741820 +1741826 +1743182 +1743184 +1743319 +4707896 +4707900 +10073044 +1743680 +9867379 +1744998 +1745019 +1745307 +9586705 +1745957 +1746000 +1746462 +1746512 +4707848 +1747068 +1747215 +1747222 +6219423 +10021059 +10023049 +10080502 +10358334 +10476233 +1747639 +1747672 +1747814 +1747914 +1747924 +10355898 +1748103 +1748425 +1748442 +1748473 +1748486 +1748518 +1748648 +1748661 +1748751 +10185271 +9952043 +10302660 +10530383 +9909775 +10606887 +10624577 +10153630 +10549715 +12057008 +10462612 +11688440 +1738196 +5138967 +5138984 +1921010 +10581870 +1921123 +1921262 +1921263 +1921300 +5138069 +1922244 +1922745 +1923744 +1923782 +4708972 +4708973 +4708977 +1924362 +1924390 +1924558 +1924713 +4300393 +1925555 +4708984 +1925628 +1925711 +5138732 +5138743 +5806391 +1925877 +1926436 +1926448 +1926460 +1926574 +4300259 +1927274 +4709107 +1927707 +1927894 +1927895 +1927897 +1927900 +1928018 +4708927 +5139050 +1928382 +1928829 +1928915 +4709030 +1928923 +5139357 +5139524 +5139673 +1931189 +5139914 +1931889 +1931943 +1931956 +1931958 +4709051 +1932159 +1932172 +1932206 +1932246 +1932273 +4709095 +4708995 +11636481 +1932563 +7346444 +1932908 +4709133 +5806412 +1933647 +5138929 +4709102 +4709147 +1752534 +1752536 +1752537 +1752539 +1752545 +1752547 +1752903 +1752946 +1752947 +1753461 +11014495 +1753902 +1753906 +10368234 +9880359 +10203493 +9959898 +10560849 +10988070 +1919176 +1919340 +1919342 +1919344 +1919348 +1919381 +1919419 +1919421 +1919432 +1919444 +1919540 +1919626 +1919652 +1919744 +1919758 +5137808 +5137828 +5137832 +5137833 +5137842 +5137849 +5137850 +5137854 +1920496 +1920534 +1920535 +1920538 +1920541 +5137929 +5137949 +1920621 +1749124 +1749529 +1749531 +1749664 +1750131 +1750326 +5104822 +5104903 +5105081 +1750934 +1751024 +1828310 +1828317 +9882683 +9451208 +1758461 +1758596 +1758602 +9943941 +10118678 +1962159 +1962162 +9875141 +1970460 +1970463 +1970473 +1970485 +1964995 +1964996 +10295646 +1954236 +1954514 +1954522 +1954911 +10634980 +5143586 +9213204 +10217455 +1955039 +1955093 +1955153 +1955199 +1955202 +1955271 +1955272 +1955318 +1955413 +1955416 +1955422 +1955736 +1955737 +1955743 +1955745 +10560674 +11720357 +1955753 +1955755 +9593393 +1955763 +10003902 +10048667 +10062202 +10075732 +10132475 +10177276 +10341059 +10363151 +10398979 +10434798 +10456933 +10457796 +10471477 +10528420 +10623003 +11451126 +11468089 +11638437 +1955899 +10078526 +10360329 +11690145 +1956384 +9234402 +10257899 +1956416 +1956955 +1956958 +1956963 +1956978 +1956983 +10167252 +1957058 +1957062 +1957333 +1957413 +1957523 +1958454 +1959341 +1959379 +1959500 +1959595 +1959782 +1960004 +4702961 +1960106 +1960128 +1960201 +1960411 +5144115 +5144129 +1960521 +1960524 +1960940 +1960941 +1961180 +5144204 +1962656 +1962657 +1962659 +1962689 +1962829 +1962841 +1962842 +1962934 +1963297 +5144353 +1963782 +1964066 +1964137 +1964141 +1964143 +1964144 +1964151 +1964153 +1964155 +1964158 +1964174 +1964305 +1964331 +1964565 +1964702 +10184940 +10523304 +1965643 +1965649 +1965650 +9952367 +9976926 +1966185 +5144505 +1966977 +1966978 +5144553 +1967703 +10174909 +10268303 +10379201 +1967716 +9833933 +1968115 +1968131 +5144554 +5144558 +5144633 +1969104 +1969568 +11858774 +1969581 +6133643 +1970093 +1970094 +1970108 +1970145 +1970148 +1970150 +1970159 +1970265 +9939530 +10085335 +10109201 +10505033 +10054019 +5144806 +5144937 +5144942 +5144976 +5145079 +5145422 +5145495 +5145503 +1972407 +4702783 +4702784 +1972606 +9119710 +5146262 +11533770 +1972797 +1972800 +1972806 +1972903 +5146294 +1973719 +5146426 +5146456 +5146472 +5146578 +5146719 +5146805 +5146856 +5146880 +5146937 +5147046 +5147109 +5147121 +5147150 +5147160 +5147225 +5147522 +1975164 +1975212 +1975248 +1975249 +9975134 +10018221 +10572729 +9875420 +1975704 +1975722 +1976123 +1976142 +1976213 +1976243 +1976303 +1976341 +1976342 +1976345 +10118849 +9183738 +10089194 +1976890 +1976891 +1976933 +1976934 +1976939 +1976941 +1977350 +5147917 +5147923 +5147930 +5148066 +5148096 +5148097 +5148214 +5148223 +1977759 +1977764 +1977767 +1977773 +10188228 +1978082 +1978274 +1978281 +1978282 +1978283 +10058263 +10626099 +10530515 +1978904 +1978915 +1978919 +1978937 +1979041 +4702599 +4702603 +4702609 +1980035 +1980041 +1980044 +1980055 +1980063 +1980068 +1980491 +1980659 +1980694 +10378314 +10571987 +1980821 +1980827 +10860751 +11660632 +1982024 +1982033 +1982043 +1982047 +1982055 +1982071 +1982072 +1982085 +1982100 +1982102 +1982103 +1982120 +1982148 +1982221 +12116722 +9488754 +5149182 +10199372 +1984913 +1985167 +1985181 +1985228 +1985267 +1985490 +6133659 +1985809 +1985816 +1985826 +1985931 +1986101 +1986223 +4702731 +1986650 +1986693 +1986720 +1986774 +1986846 +1986942 +1987203 +1987747 +1987766 +1987775 +1987785 +6133591 +10533589 +5149369 +5149370 +5149371 +5149387 +9987116 +1987855 +4702892 +4702893 +4702911 +4702912 +1988302 +1988354 +1988360 +1988361 +1988362 +1988370 +1988376 +1988382 +1988384 +1988820 +1988894 +1989170 +1989181 +1989282 +1989283 +1989377 +1989522 +1989538 +9906229 +1990164 +1990165 +1990167 +1990178 +11465014 +1990255 +1990256 +1990371 +1991394 +1991468 +10155932 +5149873 +5149880 +5149940 +5149941 +1992167 +5880539 +9577234 +10224300 +9830270 +11799357 +10864093 +4702878 +10078800 +8501203 +9629450 +6133635 +10175639 +9617411 +10438474 +10411202 +10146771 +1954338 +1954344 +1954346 +1954351 +1954353 +1954356 +1954359 +10210935 +10263383 +5149753 +1963532 +1942060 +1942067 +1942618 +1942621 +1942623 +1942636 +1942641 +5141650 +1942674 +1943089 +1943090 +1943096 +1943101 +4689912 +1943236 +1943250 +1944106 +1944113 +4689963 +1944456 +1944462 +1944520 +1944523 +1944618 +1944619 +1944627 +1944629 +1944631 +1944635 +1944638 +4689905 +1945122 +1945225 +1945694 +1945715 +1945863 +1945893 +5142067 +1946720 +1946737 +1946763 +1947446 +1947449 +1947459 +1947491 +1947492 +1950272 +1950591 +1951157 +1951170 +5715127 +5142749 +1758727 +1758839 +1758850 +1760172 +1760173 +1760175 +1761788 +1761789 +1762657 +1762900 +1762902 +1764178 +1764553 +5109848 +5109855 +5109870 +5109872 +5109882 +8352161 +1765508 +4687817 +4687827 +7800469 +1765898 +11034779 +1767368 +1767381 +1767430 +10575632 +10597823 +5802396 +5883925 +9356770 +1768546 +1768554 +1768557 +1768560 +1768972 +1769095 +1769114 +1769209 +1769225 +1769245 +1769250 +1769260 +1769271 +1769272 +1769283 +1769293 +1769294 +1769298 +1769302 +1769308 +1769310 +4688049 +4688075 +4688092 +4688098 +9493016 +1771357 +1772668 +4687565 +1774797 +4301304 +6115946 +1774918 +10032003 +1775279 +1775631 +1776182 +1777120 +5111064 +5111195 +5111214 +5111249 +5111535 +5111600 +1779269 +1779276 +1779382 +1780072 +1780330 +5111967 +1782354 +1782466 +4687661 +1784513 +5112414 +1784761 +1785145 +1785149 +1785166 +1785181 +1785217 +1785220 +1785314 +1785329 +1785725 +7400814 +5112457 +5112460 +5112461 +5112464 +5112465 +5112467 +5112469 +5112474 +5112475 +5112480 +5112481 +1787165 +1787185 +1787226 +4687681 +10161728 +1789637 +1789957 +4687906 +1791793 +1791837 +4687930 +1791862 +1792996 +5113394 +1793661 +1794425 +1795068 +1795110 +1795597 +4688166 +4688169 +4688172 +10690739 +10700540 +10706419 +10716234 +10732033 +10741837 +10747908 +10799294 +10814936 +10824750 +10840540 +10840565 +10850393 +10850415 +10866199 +10891794 +11539735 +11858666 +1796791 +1798084 +1802776 +8729319 +4532269 +10659737 +6132989 +10378302 +9890366 +9910243 +10967713 +11054256 +10121804 +5109270 +5109349 +5109418 +5109437 +4688142 +1792555 +1792560 +8108800 +1770849 +1771203 +1771245 +1771296 +1771308 +1765752 +5113853 +5108665 +5108671 +5108724 +5108737 +5108787 +1759351 +1789530 +10370112 +11437060 +11615549 +4532208 +4532266 +6115772 +6115820 +6115822 +6115830 +9893740 +1782277 +1781248 +1767259 +1792814 +9325654 +10458175 +10683012 +10658576 +1822257 +1822916 +1822917 +1823493 +5118798 +1824280 +1826020 +1825238 +1825950 +1825956 +1826017 +1826823 +1827429 +1827507 +11905965 +1827802 +1827810 +1827826 +1827829 +10194663 +10551923 +5127748 +5806166 +1892821 +1893660 +1893699 +1893787 +4704279 +1894054 +7712938 +5128224 +5128225 +1895448 +1895956 +1896304 +11701883 +5129266 +5714367 +5806175 +5806176 +5806177 +1898970 +4704400 +4704401 +4704404 +4704407 +1899931 +1899932 +1899940 +1899943 +1899947 +1899950 +1899956 +1900872 +1900939 +1901669 +5130439 +5130456 +5130464 +5130476 +1902106 +1902108 +1902233 +1902244 +1902248 +1904728 +1904798 +1904884 +1904996 +1907569 +1907683 +1908700 +1908713 +1909216 +10656625 +1909436 +1909453 +1909457 +4704352 +4704356 +1909659 +1909854 +1910753 +1910809 +1910812 +1911755 +1913091 +1908108 +1915031 +1915144 +11535847 +5135839 +5136594 +5136713 +5136790 +5136868 +5136939 +5137085 +5137128 +5137257 +9251096 +4704316 +4704500 +4704501 +5131493 +5133088 +5806167 +6100725 +7642610 +1910576 +1910628 +1910629 +1910648 +1910662 +1951492 +1951874 +1853190 +10548683 +1735168 +1735391 +1735398 +5102423 +1735273 +5102432 +1941683 +1941702 +1941713 +5120675 +5121177 +5121613 +8273859 +1843313 +1843326 +1843331 +1843362 +1843370 +1843379 +1842119 +1842124 +5120341 +5120343 +5120357 +5120368 +5120379 +5120396 +1842508 +11854390 +9755262 +1843429 +1843485 +1843590 +1730519 +1730543 +1731097 +1731221 +11431507 +10535684 +11563728 +11904618 +5101502 +10049887 +10134558 +10307487 +5806352 +5806353 +10629470 +8008237 +1878744 +1878826 +1879227 +1879339 +1879340 +1879405 +1879408 +1879465 +1879471 +10851840 +10857326 +12231152 +5126231 +5126240 +5126241 +5126259 +5126284 +5126287 +5126292 +5126315 +5126332 +5126344 +5126357 +5126376 +5126381 +5126396 +5126397 +5126398 +5126434 +5126445 +5126449 +5126454 +5126458 +5802331 +5802333 +10489219 +5126635 +5126637 +1880352 +1880353 +1880439 +1880852 +1880858 +1880982 +1880986 +1881018 +1881019 +1881031 +1881041 +1881089 +1881122 +1881132 +1881151 +1881157 +9819403 +1881228 +1881320 +1881329 +1881336 +1881340 +10046436 +10348110 +10441857 +1881424 +1881485 +1881504 +1881515 +10751438 +1882297 +1882215 +1882253 +1882266 +1882272 +1882355 +5126798 +5126843 +5126866 +5126870 +5126889 +5126905 +5126916 +5126922 +5126946 +5127020 +5127024 +5127039 +5127044 +5127045 +5127054 +1882753 +1882767 +1882771 +1882773 +1882884 +1882905 +10156181 +10643403 +1882965 +10464411 +1883024 +1883028 +1883067 +4687288 +1883394 +5127097 +10069243 +1883775 +1883881 +1883943 +1883968 +1884228 +9294363 +10171108 +10209845 +1884434 +1884437 +1884449 +1884461 +1884479 +9837762 +1884503 +1884531 +1884539 +1884595 +1884607 +1884610 +4687228 +6120980 +1884816 +1884890 +1884909 +1884936 +1885263 +1885569 +1885572 +1885605 +1885630 +6133182 +9957790 +1885702 +1885763 +1885836 +1885919 +1885945 +1886088 +1886251 +1886362 +1886526 +10610809 +1886720 +1886729 +10613467 +1887036 +1887052 +1887054 +1887462 +1887580 +1887585 +1887686 +1887691 +1887894 +1888123 +1888537 +5127394 +1888906 +1888913 +1888926 +1888958 +1889043 +1889050 +1889071 +1889074 +1889239 +1889242 +1889249 +1889272 +1889277 +1889356 +1889381 +1889552 +1889563 +1890031 +1890187 +1890247 +10058481 +1890320 +1890335 +7543006 +5127530 +10180624 +1890410 +1890670 +1891236 +1891299 +10071588 +1891308 +1891533 +1891583 +10072800 +1892458 +1892462 +10446295 +6133140 +5771877 +10117959 +10227418 +4532125 +9967529 +9900218 +10145421 +10348945 +10521368 +10579230 +10594210 +6120803 +6133232 +6121010 +10257673 +10556366 +6121218 +10502505 +10397209 +6133154 +10462708 +6133158 +10063575 +10375403 +1886374 +1889769 +1889833 +1889875 +5127592 +5127595 +5127629 +5127638 +5127644 +5127669 +5127675 +5127698 +5802339 +10245924 +10769553 +1887126 +1888638 +1888639 +1886123 +1883885 +1880275 +1880286 +1880293 +1880305 +1880310 +1880316 +1880318 +1880321 +1880350 +1831097 +1831136 +4708183 +1731292 +5122307 +1853578 +10222583 +1853855 +1854019 +1854021 +10452421 +10546013 +11428453 +1854028 +1854249 +5122430 +5122455 +5806333 +1854906 +1858674 +1858718 +1858762 +1858930 +1858973 +1859061 +4536292 +9768621 +9590272 +9801765 +1859453 +9675743 +9749806 +6133397 +1859932 +1860026 +5123118 +5123137 +5123276 +6097269 +9759340 +1864897 +1867788 +10883659 +1868025 +7734292 +10019169 +1861451 +1861456 +1861457 +1861458 +1861488 +1861644 +5123636 +5123663 +1861951 +1861953 +1861958 +1862026 +1862293 +1862331 +1862363 +1862370 +1862401 +1862403 +1862414 +9836014 +1862434 +1862441 +1862449 +1862455 +1862475 +1862516 +1862521 +1862526 +6106708 +1862757 +1863034 +1863051 +1863384 +9899724 +1863467 +1863880 +1863955 +1864135 +4703479 +5124080 +8133328 +11954157 +5124332 +5124423 +5123852 +1992634 +9893936 +1992889 +1992907 +1992936 +1992938 +1992976 +1993021 +1993045 +6133769 +10022517 +1953217 +10132811 +10644798 +11503857 +1954025 +5143279 +1954120 +1830419 +1830435 +1754619 +1754803 +1754806 +1754814 +1757853 +4689394 +1830669 +8254441 +1855804 +1855807 +1855813 +1856005 +5122779 +1856348 +1856374 +1856516 +1857020 +1857033 +1857068 +1857097 +1857143 +1857180 +1857213 +1857233 +1857241 +1857258 +1857295 +1857315 +1857380 +1857385 +1857410 +1857626 +1857828 +1857829 +1857840 +1857882 +1857900 +1857935 +1857948 +1858100 +1858163 +1858283 +1858404 +1858411 +1858488 +1858523 +1858526 +1856891 +1856893 +1937698 +1937712 +1937745 +1937769 +1937819 +1937856 +1937988 +1938069 +1938074 +1938088 +1938129 +5141177 +5141187 +5141252 +5141254 +5803065 +1937444 +1937474 +4693675 +1937618 +1939131 +1939156 +1838251 +1838255 +1838276 +1838289 +1838297 +1838304 +1838308 +1838331 +4685893 +1833518 +1833523 +1833525 +1833531 +1833532 +1833535 +1833539 +4685097 +1833477 +4685485 +1833562 +4686368 +1833600 +1833653 +1833664 +1833834 +1834019 +1834078 +4685138 +4685219 +4685271 +1834497 +1834850 +1835082 +1835121 +1835123 +1835128 +1835345 +1835555 +1835609 +1835612 +1835635 +1835644 +4685116 +1835790 +1835821 +1835828 +4686483 +1836871 +1836873 +1836899 +4685431 +4685448 +1837053 +1837057 +1837150 +1837159 +1837172 +1837569 +1837572 +4686743 +1837857 +1837870 +1837894 +1838034 +4685065 +1838218 +1838224 +4685299 +4685306 +1838333 +4686617 +4686620 +4686621 +4686628 +1838626 +1838629 +1838633 +1838635 +1838641 +1838649 +8958353 +1838958 +1838960 +4528702 +4685566 +4685576 +1839317 +1839323 +1839325 +1839333 +1839370 +1839494 +5120053 +5120058 +5120063 +4685645 +4685650 +4685653 +4685655 +4685662 +4685669 +4685678 +4685683 +1840258 +1840260 +1840726 +1840774 +1840776 +1840796 +1840812 +1840844 +1840974 +4686042 +4686055 +4686111 +4686133 +4686164 +4686190 +4686214 +4686264 +4686266 +1841101 +1841180 +1841183 +1841188 +1841215 +1841219 +1841221 +1841302 +4685972 +5802248 +5802256 +5802257 +5802259 +4686039 +4686015 +4686016 +4686018 +4686022 +4686027 +4686029 +4684521 +4684591 +4684789 +4684888 +4684893 +4684925 +4684958 +4685629 +4685631 +4685778 +4685810 +4685980 +4685981 +4686355 +4686385 +4686386 +4686531 +4686532 +4686656 +4686697 +4686702 +4686844 +4686956 +10213314 +10225227 +1800441 +1800473 +1800522 +1800562 +10010361 +9859868 +9883274 +1800691 +1800843 +1800844 +5114394 +5114409 +9267364 +10240592 +1801170 +5114515 +1801303 +1801305 +1801316 +1801432 +1801461 +1801490 +1801519 +10026605 +10066605 +10088502 +10372377 +10448500 +10573425 +11496990 +11508472 +11594541 +11596898 +11698552 +11836409 +11871044 +1801787 +1801903 +1801922 +1802978 +4534792 +6112610 +6112661 +6133811 +9960072 +1802090 +1802702 +1802830 +1802833 +1802888 +1802998 +1803014 +1803021 +1803035 +1803039 +1803078 +1803091 +9485481 +10942408 +10264193 +5114303 +5114353 diff --git a/dev/releases/mambo_v3/presets/oceania_excluding_australia_nz.classes b/dev/releases/mambo_v3/presets/oceania_excluding_australia_nz.classes new file mode 100644 index 0000000..94ba964 --- /dev/null +++ b/dev/releases/mambo_v3/presets/oceania_excluding_australia_nz.classes @@ -0,0 +1,352 @@ +1849007 +1850798 +1835460 +1831655 +1762151 +1763976 +1764060 +1765653 +1766560 +1777166 +4687991 +5110981 +9610080 +1780716 +1785832 +1786990 +7346446 +1789794 +1790257 +1791514 +9504222 +1796984 +10108671 +6132979 +1798023 +1798101 +5113950 +5884247 +1787090 +4532352 +6115437 +8793873 +1803148 +1803197 +1806871 +10189965 +1809381 +1816029 +1820401 +10270464 +12216332 +9852545 +10178326 +5116504 +1781413 +1763761 +6115388 +1816648 +1774598 +1774604 +1774654 +1813468 +9400916 +5109796 +1775796 +4687933 +4687935 +1781531 +10330198 +10598038 +11612469 +1786597 +4687389 +5884188 +9935660 +4301309 +5112440 +5880040 +6132546 +1872873 +5125602 +1875478 +1736623 +1736995 +1737015 +1740828 +1741820 +1741826 +1746000 +10581870 +1921123 +1921263 +1921300 +5138069 +1922244 +1922745 +4708972 +4708977 +1924558 +1924713 +4300393 +1925628 +1925877 +1926436 +1926448 +1926574 +4300259 +1927274 +4709107 +1928382 +1928915 +1931889 +1931943 +1931956 +1931958 +4709051 +1932159 +1932172 +1932206 +1932246 +1932273 +4709095 +4708995 +1932563 +7346444 +4709102 +11014495 +1919176 +1919340 +1919348 +1919444 +1919652 +1919744 +1919758 +5137808 +5137849 +5137854 +1920496 +5137949 +1920621 +1758461 +9593393 +1956384 +1957523 +1958454 +1964305 +1964331 +1966185 +11858774 +6133643 +9875420 +1976213 +5148214 +1980694 +1982221 +9488754 +1985181 +1985228 +1986774 +1987775 +6133591 +1989538 +10155932 +5880539 +9617411 +5149753 +1942060 +1942621 +1942636 +1944462 +1945225 +1945694 +1945715 +5142067 +1946737 +5715127 +1758839 +1762657 +5109848 +5109872 +5109882 +1765508 +1767430 +4301304 +5111195 +1780330 +5112414 +1785145 +1785725 +7400814 +4687681 +1791862 +1792996 +1795068 +1795597 +4688169 +8729319 +6132989 +10121804 +1771245 +5108665 +4532208 +6115822 +1825956 +5127748 +1892821 +1893660 +1893787 +4704279 +1895448 +1895956 +1896304 +11701883 +5129266 +5714367 +1898970 +1900872 +1900939 +5130439 +5130456 +5130476 +1904798 +1904884 +1904996 +1907569 +1907683 +1908700 +1908713 +1909216 +10656625 +1909659 +1909854 +1910753 +1910809 +1910812 +1911755 +1913091 +1915031 +1915144 +5135839 +5136713 +5136790 +5136939 +5137085 +5137128 +9251096 +4704316 +5131493 +5133088 +6100725 +7642610 +1910576 +1910629 +1910648 +1910662 +1951492 +1951874 +5102432 +1730519 +1730543 +8008237 +1879408 +1879471 +5126635 +1880852 +1880858 +1881151 +1881320 +1881329 +1881504 +1882253 +1882771 +1882884 +1882965 +1883067 +1884228 +9294363 +6120980 +1884890 +1884909 +1886251 +1886720 +1886729 +1887054 +1888913 +1889272 +1889277 +1890247 +1890335 +7543006 +5771877 +10145421 +6121218 +10502505 +5127698 +5802339 +1888638 +1888639 +1886123 +1858930 +1859932 +1864897 +7734292 +10019169 +1861451 +1861456 +1861457 +1861488 +1861644 +5123636 +1861951 +1862026 +1862293 +1862331 +1862363 +1862370 +1862401 +1862403 +1862414 +9836014 +1862475 +1862516 +1862526 +6106708 +1863467 +1863880 +1864135 +11954157 +5124332 +5123852 +1953217 +1954120 +1856348 +1857068 +1857143 +1857258 +1857380 +1856891 +1937698 +1937712 +1937819 +1937856 +1937988 +1938069 +1938074 +1938088 +1938129 +5141177 +5141187 +5141252 +5141254 +1937444 +1937618 +1939156 +10213314 +1800441 +1800691 +1801490 +1802090 +1802702 +1803035 +10942408 diff --git a/dev/releases/mambo_v3/presets/south_america.classes b/dev/releases/mambo_v3/presets/south_america.classes new file mode 100644 index 0000000..2d90d1d --- /dev/null +++ b/dev/releases/mambo_v3/presets/south_america.classes @@ -0,0 +1,1506 @@ +12170988 +11871190 +1921992 +1921993 +1922015 +1922024 +5140603 +5140627 +1934331 +1934447 +1934570 +1934715 +1934991 +1935078 +1935295 +1935301 +1935343 +1935346 +1935350 +5140969 +5140980 +1936161 +1936233 +1936312 +1936378 +1936388 +1936391 +1936565 +1936566 +5141085 +1936649 +10132775 +10331171 +9620499 +10075196 +1868575 +1732901 +1845385 +1850798 +5110390 +5108951 +8331687 +1763156 +1763163 +1763184 +1763199 +1763223 +1763256 +8028211 +1767307 +1767499 +1768283 +1770038 +1770044 +1770263 +5110326 +5110327 +5110533 +1776163 +1777052 +1777179 +1777737 +1777942 +5110891 +9610080 +1781029 +9630748 +1782211 +8384839 +1786217 +1786219 +1786247 +7480993 +1787464 +11495556 +5112542 +11890681 +10295290 +1788372 +5112626 +1790230 +1790240 +1790246 +1790248 +1790257 +1790281 +1790287 +1790308 +1790787 +1790945 +5112843 +5112990 +1792827 +1794637 +1795042 +1795049 +7598729 +1798427 +4532352 +8150450 +1803163 +1803218 +1803266 +1803628 +1804522 +5115046 +1805184 +1805271 +1805691 +1805717 +1805955 +1805976 +1805982 +1806064 +1806075 +5115406 +1806702 +1806871 +1806872 +1806878 +1806887 +1807353 +1807355 +1807514 +1807553 +1807569 +1807787 +1808648 +1809066 +1809127 +1809294 +1809348 +1809491 +1809499 +1810145 +1810172 +1810318 +5116145 +5116198 +5116238 +5116252 +9350900 +1810824 +1810846 +1810866 +1810867 +7535515 +1811019 +1811026 +1811081 +5116423 +1812573 +1812881 +1814182 +1814323 +1814336 +1814359 +5117245 +5117347 +5117348 +5117361 +1814658 +1814665 +1814692 +1814823 +1814863 +8933773 +1815373 +5117413 +5117414 +5117430 +5117462 +5117463 +5117553 +1815856 +1816570 +5117685 +5117687 +1817086 +1817734 +11725616 +1817808 +1817852 +1817854 +1818252 +1819310 +1819873 +11904675 +10395440 +10214972 +10830546 +10851228 +12194283 +8429622 +1781420 +1793538 +1813413 +8177591 +1775796 +5117941 +5884258 +7716829 +8299504 +1784959 +1785024 +1785072 +5884188 +6117485 +7611914 +7924383 +1780646 +1780668 +1860184 +5123542 +1870308 +1870450 +1870988 +1871407 +8766638 +1872514 +1872873 +1872901 +1873079 +1873398 +7372375 +1876542 +1876665 +5125916 +1877282 +1877988 +5125525 +5143284 +5143285 +5131957 +4525777 +1740623 +8094357 +1741826 +10407953 +1935498 +4299071 +8345567 +9457324 +9622955 +1936026 +1936810 +1936859 +1934172 +1920844 +1920900 +1920923 +10657453 +1921123 +8825450 +1922455 +10278292 +1922637 +1922739 +1922849 +1922865 +1922867 +1922868 +8913017 +1923678 +1923679 +1923997 +10436850 +1924754 +8837974 +8840017 +8992718 +9157410 +9478718 +1924759 +10120854 +10307383 +10411472 +4300384 +4300393 +8389961 +8904480 +1925922 +1927988 +1927992 +1927996 +1928009 +4300406 +1928584 +1928589 +1929046 +1929049 +1929129 +5139578 +1929966 +1930079 +1930146 +1930167 +1930178 +1930179 +1930181 +1930270 +1930289 +1930361 +1930410 +1930422 +1930451 +1930466 +1930539 +1930563 +1930621 +1930653 +1930654 +1930728 +1930772 +1930779 +1930830 +1931119 +1931122 +5139864 +1931310 +5139898 +1932172 +1932576 +5140033 +5140054 +5140056 +1933260 +5140534 +1935869 +1935872 +1935888 +1935901 +1935912 +1935916 +1935925 +1935935 +10176954 +10573187 +9867272 +9960318 +5139928 +4300268 +9469139 +10068544 +9975698 +9156458 +11554226 +1751980 +1751986 +1752034 +1752109 +9941073 +1752477 +1752775 +1752825 +11507608 +5105367 +5105379 +5105380 +5105447 +5105491 +5105553 +1753603 +1753604 +1753661 +1753833 +1753864 +1753871 +12181811 +12226416 +12251247 +1919125 +1919128 +1919129 +1919130 +1919146 +1919149 +1919173 +1919233 +1919235 +1919239 +1919245 +1919267 +1919277 +1919282 +1919289 +5137540 +1919646 +1919649 +1919652 +1919653 +1919656 +4701298 +7661785 +5137553 +10703948 +1919937 +1919939 +1919943 +1919945 +1919947 +1919949 +1920266 +1920275 +5137819 +5137851 +1920426 +1920431 +1920437 +1920461 +1920463 +1920506 +1920552 +1920571 +1920581 +1920586 +1920691 +5137969 +1920803 +1920809 +5137588 +5137593 +5137608 +12191141 +12206386 +12234544 +12236627 +1955694 +1956099 +1959637 +1960090 +1960255 +1960268 +1960315 +1961155 +1961361 +10650351 +1962051 +1962086 +1962118 +1962120 +4302252 +10084195 +1963425 +1963433 +1963633 +5144363 +1964698 +1965887 +1966088 +1966185 +1967346 +1968313 +1968315 +1968321 +1968324 +1968538 +1968942 +10088253 +5145466 +5145560 +1972101 +5146179 +5146253 +1973665 +10404426 +9590066 +1975287 +1976073 +1976255 +1976651 +1976746 +1978268 +1978464 +9243264 +1978958 +1978959 +1981160 +1981252 +1981951 +1981973 +5148593 +1985485 +5149222 +1985647 +1987330 +1989582 +1990594 +1990998 +1991405 +1991410 +5880539 +9438677 +9497623 +9619088 +9237031 +10464824 +10221195 +10288719 +9391442 +5149753 +5149811 +5150002 +5150027 +5142358 +12200261 +11654707 +10713577 +12252926 +11423843 +11729494 +12239491 +1942098 +1942141 +1942170 +1942206 +12286003 +1942327 +1942370 +1942372 +1942416 +1942455 +1942509 +1942558 +5141662 +1942854 +5141763 +1943475 +1943563 +1943571 +1943588 +1943823 +1943824 +1943830 +1943832 +1943901 +1943936 +12198522 +12243973 +1943962 +1944004 +1944273 +1944275 +1944283 +1944286 +1944314 +1944324 +1944329 +1944335 +1944343 +1944361 +1944374 +1944421 +1944574 +1944580 +1944744 +1944769 +1944815 +1944832 +5141913 +6205994 +9551544 +1944977 +1945302 +1945312 +1945396 +1945462 +1945476 +1945477 +4301942 +1946074 +1946097 +1946163 +1946167 +1946174 +1946177 +1946290 +1946310 +1946327 +1946333 +1946469 +1946520 +1946544 +1946550 +1946577 +1946582 +1946756 +5142086 +1947021 +1947037 +1947048 +1947049 +5142176 +1947402 +1947506 +1947568 +1947587 +1947588 +1947597 +1947890 +1947894 +1947973 +1947979 +1947980 +1948046 +1948158 +7603634 +1948439 +1948446 +1948521 +1948630 +1948826 +1948858 +1948861 +1948883 +1948890 +8792353 +1948947 +1949049 +1949068 +1949105 +1949219 +1949322 +1949451 +1949492 +10574663 +1949515 +1949592 +1949621 +7726809 +9395000 +10202439 +1949687 +5142424 +5142436 +1950017 +1950019 +1950024 +1950044 +1950052 +1950133 +1950153 +1950197 +1950243 +1950654 +1950767 +1951062 +1951072 +12231344 +1951097 +1951103 +1951121 +1951125 +1951133 +5142822 +5142825 +5715127 +12180041 +5142829 +5977260 +1945374 +12175154 +12263736 +7911151 +1760309 +1761892 +1764686 +1764690 +1764693 +1765155 +5109845 +5109850 +5109855 +5109881 +5109954 +5109958 +1766285 +1767052 +1767571 +9511345 +1767719 +1770659 +6115953 +1777727 +5111546 +1780309 +1780390 +1780407 +1780437 +1780440 +1782031 +1782424 +1783811 +5112414 +1785168 +1785331 +1785462 +7400814 +1786360 +1786733 +1791331 +1791870 +5113365 +1792817 +1792996 +1796276 +7383338 +7689966 +7882824 +8405656 +1799900 +10446574 +8729319 +10118643 +9342344 +11615055 +11626773 +1792564 +1774929 +5108665 +1797903 +1824189 +1825373 +1825391 +1826772 +1827145 +10043566 +10266782 +1896863 +1903598 +1892915 +1908317 +1908337 +1908339 +1892509 +1892634 +1892729 +1892736 +1892742 +1892746 +1892759 +1892761 +1892770 +4299095 +8941801 +1892837 +1892851 +1892855 +1892856 +1892858 +1892863 +5127814 +1892944 +5128005 +5128007 +5128011 +5128034 +1893337 +1893377 +1893381 +1893480 +10653980 +1894074 +1894082 +1894085 +1894087 +1894088 +1894329 +1894342 +1894349 +10412261 +1895176 +1895185 +1895203 +1895250 +1895709 +9192882 +1895733 +1895745 +1895768 +1895773 +1895789 +1895809 +1895818 +1895820 +1895829 +9016382 +1895838 +1895886 +1896087 +1896126 +5128398 +5128423 +5128432 +5128433 +5128438 +5128446 +5128475 +5128488 +5128491 +9981187 +1896316 +1896614 +1896628 +10465059 +1896658 +1896749 +1896754 +10353400 +1896756 +1896763 +1896774 +1896876 +9361954 +1896932 +5129251 +9590057 +11701883 +5129257 +5925238 +8367663 +1897977 +1897980 +1897985 +10073321 +10365587 +10375186 +10401396 +1898077 +1898133 +1898143 +1898174 +1898200 +1898203 +10321900 +10208801 +10265559 +4299370 +8961830 +9396180 +9563837 +1898348 +1898350 +1898352 +1898358 +1898367 +1898368 +1898370 +1898374 +1898391 +1898402 +6228464 +5129473 +5129479 +5129480 +5129481 +5129489 +5129496 +5129502 +5129524 +5129531 +5129535 +9208233 +9255328 +1898686 +1898789 +1898841 +1898848 +1898858 +1898865 +1899048 +5129636 +4299211 +4299213 +10474236 +1899835 +1899873 +1899893 +1899922 +9028122 +9446281 +1899989 +8445010 +1899994 +1900014 +1900024 +1900026 +9925669 +1900112 +1900121 +1900131 +1900134 +1900172 +1900175 +1900195 +1900197 +1900199 +1900233 +1900249 +1900295 +1900303 +1900345 +1900408 +1900485 +1900523 +1900565 +1900578 +1900618 +1900626 +1900632 +1900768 +1900787 +1900825 +1900830 +1900872 +1900918 +9392084 +11701991 +1901001 +1901153 +1901189 +9072828 +1901257 +1901261 +8247566 +5130296 +1901533 +1901580 +1901744 +1901794 +1901801 +1901804 +1901810 +11832697 +5130528 +5130548 +9357385 +1902110 +1902111 +1902114 +1902117 +1902118 +1902211 +1902300 +1902346 +1902378 +1902384 +1902388 +1902406 +1902410 +1902451 +1902458 +1902479 +1902502 +5130559 +1902615 +1902623 +1902642 +1902660 +1902676 +1902680 +1902692 +1902702 +1902704 +10512675 +1902814 +1902880 +1902882 +1902885 +5130562 +5130574 +1903028 +1903607 +1903634 +1903636 +1903646 +10114865 +5131597 +5131608 +5131637 +1904382 +1905321 +10312760 +10615631 +1905451 +1906715 +1907190 +1907250 +1907272 +1907727 +1908123 +1908138 +1908144 +1908146 +1908148 +1908150 +1908168 +1908174 +1908199 +1908203 +1908204 +1908217 +1908256 +1908258 +1908262 +1908299 +1908302 +1908309 +1908577 +5133035 +10542548 +1908995 +1909004 +1909019 +1909025 +1909039 +1909064 +10046510 +1909070 +1909108 +1909128 +1909135 +1909155 +1909185 +1909191 +1909209 +1909211 +1909213 +9851867 +8727750 +1909241 +1909489 +1909532 +1909573 +5133142 +5133255 +5133265 +5133366 +5133451 +5133503 +5133523 +1910378 +10558140 +5133565 +5133568 +1910773 +5133581 +5133589 +1911076 +1911077 +5133591 +5133595 +5133609 +5133615 +5133621 +5133622 +5133623 +5133634 +5133635 +9086331 +9219529 +1911577 +1911939 +12322536 +12335869 +1911966 +1912003 +1912036 +1912119 +5133736 +5133786 +9277330 +1914416 +1914420 +1914424 +1914433 +1914440 +1914465 +1914500 +1914501 +1914511 +1914693 +1914697 +1915193 +9988287 +1915339 +1915368 +1915369 +1915396 +1915401 +1915415 +1915417 +1915427 +1915456 +10078453 +10196441 +10487080 +11572120 +5136372 +1916700 +1916701 +1916772 +1916790 +1917830 +1917834 +1917840 +1917911 +1918076 +1918077 +1918078 +1918086 +1918094 +1918097 +1918133 +1918149 +10250149 +1918220 +1918263 +1918268 +1918269 +1918280 +1918596 +1918601 +5137408 +1919007 +1919010 +5128045 +5128067 +5128118 +10059034 +10415847 +10454590 +10455658 +11573394 +5881748 +10259880 +5131982 +5132003 +5132008 +5132078 +5132137 +5132225 +5132239 +5132252 +5132283 +5132289 +5132317 +5132346 +5132347 +5132360 +5132374 +5132429 +5132440 +5132446 +5132483 +5714312 +9541133 +5133088 +5714299 +5714302 +5881400 +5130557 +1910628 +8643309 +10265841 +10511167 +12045866 +5132917 +5133008 +9964857 +9745549 +5142842 +1868334 +1868360 +5125118 +1941570 +1941717 +1941719 +1941864 +5101371 +5101374 +5101527 +7628188 +1879052 +1879160 +1879253 +1879413 +1879471 +5126494 +5126517 +5126533 +5126585 +5126637 +1880411 +1880505 +10056494 +1880537 +1880623 +5126663 +10861282 +11968849 +1881079 +1881151 +5126721 +5126751 +5126756 +1882786 +10107015 +1882812 +1882818 +1882819 +1882941 +1882960 +1883067 +10807787 +8981028 +5127090 +1883968 +8324720 +1884428 +1884437 +1884449 +1884479 +1884685 +1884774 +1884923 +1885099 +1885158 +1885950 +1886251 +1886729 +10510138 +1887004 +1887634 +1888047 +1888292 +1888646 +1888955 +1889267 +1889536 +1890089 +1890247 +11044778 +7543006 +1890368 +1890410 +1890512 +1890737 +1890876 +1891035 +10310835 +1891932 +1892131 +1892230 +1892311 +1892355 +1892477 +1892488 +5771877 +7864212 +8146570 +8425580 +6121010 +6121218 +8876855 +1886374 +1889721 +1889850 +5127562 +5127631 +5127680 +1886123 +1886207 +1831136 +1853242 +11773446 +7946946 +1858674 +1858930 +9645309 +9700261 +10103570 +9547681 +10129812 +1864905 +1865107 +1865108 +1865120 +1865132 +5124542 +5124557 +5124595 +5124597 +5124598 +5124607 +5806244 +10534664 +1865547 +1865557 +1865572 +1865578 +1865709 +1865711 +1865764 +1865827 +1865837 +1865869 +1865963 +1866003 +1866006 +1866100 +1866105 +1866162 +1866164 +1866201 +1866220 +1866311 +1866496 +1866838 +1866902 +1867108 +1867171 +1867218 +1867224 +1867231 +5124873 +1867426 +1867515 +1867535 +1867547 +1867552 +1867709 +1867722 +1867773 +10108753 +10591617 +9634178 +10248521 +10302305 +10547404 +5123615 +1861479 +1861559 +5123636 +1861773 +1861783 +1861784 +1861967 +1862033 +1862044 +1862046 +1862047 +1862049 +1862078 +1862083 +1862087 +1862088 +1862091 +1862094 +1862096 +1862123 +1862139 +1862163 +1862181 +1862198 +1862207 +1862225 +9559671 +5123701 +5123704 +1862547 +1862551 +1862658 +1862805 +1862874 +1862923 +1863109 +1863143 +1863151 +5123784 +5123801 +7803585 +1863366 +1863412 +1863416 +1863426 +1863699 +1863701 +1863706 +1863714 +1863724 +1863732 +1863734 +1863735 +1863742 +1863750 +1863757 +1863856 +1863858 +1863864 +11468731 +1864316 +1864320 +1864321 +1864329 +1864352 +5124249 +5124250 +5124268 +5124442 +5124443 +5124448 +5124450 +5124452 +5123954 +5123956 +5123961 +5123971 +5123979 +5123980 +5123983 +5123991 +5123996 +1864004 +1864021 +1864046 +1864058 +1864068 +1864070 +1864084 +1864098 +1864103 +1864106 +1992634 +1992817 +1953499 +5143232 +5143234 +9424853 +1953970 +1953998 +1830681 +1953166 +1751497 +1751507 +1751509 +1751524 +1751572 +1751588 +1751590 +1751606 +1751625 +1751626 +9332550 +1751670 +1751785 +5105193 +5105194 +5105212 +5105217 +5105218 +5105227 +5122556 +10055273 +1857380 +1857829 +1858163 +1858283 +10038125 +1937655 +1937793 +1937816 +1937885 +1938022 +1938059 +1938112 +1938148 +10600208 +11716362 +1937064 +1937090 +1937109 +1937110 +1937124 +1937129 +1937136 +1937144 +1937155 +1937162 +1937165 +1937167 +1937530 +1937540 +1939130 +1939136 +1939143 +5141321 +5141324 +5141331 +5141340 +1939336 +1836899 +1837172 +4534796 +9385576 +8924506 diff --git a/dev/releases/mambo_v3/presets/south_asia.classes b/dev/releases/mambo_v3/presets/south_asia.classes new file mode 100644 index 0000000..efd078f --- /dev/null +++ b/dev/releases/mambo_v3/presets/south_asia.classes @@ -0,0 +1,1552 @@ +1935849 +1992277 +1992315 +1732115 +1732525 +1732830 +5101640 +1733154 +5102242 +1734519 +5102300 +1845547 +1849656 +1850633 +1831458 +11095591 +12208733 +1758625 +1759775 +1760140 +6132868 +1760201 +1760927 +1761213 +1761387 +1762151 +11562374 +1762219 +1762226 +5109766 +1763650 +1763976 +1764032 +1764043 +1764640 +1764886 +1765653 +1765863 +1766570 +1766584 +1766601 +1766618 +3257809 +6116699 +1766888 +1767758 +1767779 +1767780 +5110190 +11097510 +1767883 +5110232 +1768898 +10820762 +11467034 +10848620 +1769465 +1769772 +10881384 +1769827 +1769840 +1771977 +1772352 +5110417 +5110447 +5110490 +1775148 +5110546 +5110769 +1777166 +5110837 +9372988 +4687991 +5110986 +5110993 +6133058 +9610080 +5111830 +10203499 +1780716 +1782115 +1783302 +1785744 +1785832 +1786317 +1786711 +5112500 +1786980 +1786985 +1787009 +5112531 +1788553 +6132936 +7346446 +6132826 +1788953 +1789794 +1790876 +1790888 +1791010 +10743044 +1791514 +1791715 +11725043 +5113148 +5113330 +5113352 +5113385 +5884243 +9504222 +1793631 +5113925 +1796984 +10108671 +6132979 +9332506 +1797727 +1798014 +1798101 +5113950 +5884247 +1798481 +1798488 +1798504 +6132841 +6132850 +11732472 +1787079 +1798529 +1798700 +1798794 +1798807 +4532352 +6115437 +6133046 +8793873 +1799743 +1799751 +6132825 +1803148 +1803163 +1803197 +1803302 +1805044 +1805580 +1806814 +1806871 +1808180 +1808236 +1808381 +5115701 +5115771 +1809115 +10189965 +1809387 +12006709 +10882244 +5116395 +12182061 +1811686 +11736162 +12209759 +1813036 +1814653 +1814913 +1814928 +1814971 +1815260 +1815680 +1816065 +1816138 +1816292 +1816299 +1816362 +5117779 +1818413 +1818659 +1818991 +1819128 +6197200 +7346382 +1819280 +8407461 +6134035 +5118348 +5118422 +10546538 +1820275 +1820282 +1820318 +1820352 +1820393 +1820414 +1820440 +1820450 +1820458 +1820477 +1820478 +1820888 +1821105 +1822141 +10503495 +8897869 +12176367 +12183285 +10864524 +10270464 +9473918 +9559336 +6133292 +10062933 +10717837 +8148822 +12242422 +6133325 +9754232 +10972780 +11142432 +10309234 +12171522 +10399906 +10754772 +10812069 +6112449 +8452092 +8526388 +8543494 +8624848 +12257250 +10166724 +8831819 +1774829 +10178326 +10282389 +10400868 +10813849 +10907635 +10982648 +8874633 +9508913 +1783906 +5116504 +9336001 +1781413 +1781421 +8000103 +9478424 +1781598 +1794273 +1763761 +6115388 +6133297 +1774583 +1774598 +1774618 +1774626 +1774635 +1774640 +1774654 +1774661 +1774682 +1819852 +1804532 +1768461 +5109796 +1821920 +1822017 +1819337 +1819362 +1804182 +6122364 +1815315 +1781446 +6116076 +1783713 +1812394 +4687933 +6116646 +1820118 +1820137 +4532453 +6116413 +1781531 +1798329 +1798331 +1798335 +1784947 +1785072 +1785105 +1765999 +6133069 +10272611 +10598038 +11513188 +1786597 +4687389 +5884188 +6132915 +6132916 +5110012 +1819685 +10098436 +11717028 +1782310 +10094256 +6197138 +5108435 +1771903 +5112440 +10371735 +1869363 +1939510 +5141344 +6132546 +1870237 +1870450 +8766638 +1871988 +1872094 +1872850 +1872873 +1873079 +5125602 +5125635 +1874937 +1876168 +1876542 +1876592 +1876922 +1877788 +1878406 +1883045 +1888454 +6133441 +1736623 +1740469 +1740797 +1740828 +1743998 +1745947 +1746714 +1920851 +10159697 +10707501 +9916153 +1920957 +1920991 +1921009 +1921010 +1921021 +1921044 +7346426 +1921055 +10581870 +10825466 +1921092 +1921150 +1921163 +1921633 +7346430 +1922085 +1922111 +1922143 +1922244 +1922285 +1922288 +5138200 +1922584 +1922745 +1923019 +1923458 +1923491 +1923525 +1923649 +1923650 +1923651 +1923668 +1923809 +1923917 +1924193 +1924298 +1924323 +1924390 +1924458 +1924713 +1925381 +1925543 +1925731 +1925743 +1925877 +1926436 +1926437 +1926446 +1926448 +1926456 +1926546 +1926550 +1926574 +5883255 +7390086 +1926593 +1926611 +10116946 +10361239 +10606547 +1926800 +11008182 +1927034 +1927219 +1927242 +1927284 +4709111 +7408690 +1927348 +1927393 +1927445 +1927707 +1927717 +7680748 +5139040 +5139050 +1928349 +1928361 +1928376 +1928419 +1928628 +1928849 +1928908 +1928915 +9856663 +1929697 +5139309 +5139339 +8356768 +1930904 +1930935 +4535106 +1930954 +1930968 +1931109 +1931148 +1931509 +1931655 +1931656 +1931706 +1931735 +1931908 +1931943 +1931956 +1931958 +1931979 +1931997 +1932020 +1932043 +1932159 +1932166 +1932273 +4708995 +1932551 +7346444 +1932607 +5139990 +1932814 +1932863 +5806412 +1933028 +1933044 +1933084 +5140436 +1933583 +1933647 +1933679 +1933845 +1934187 +1934188 +1934192 +1934211 +1934221 +1935377 +1935405 +1935410 +1935454 +7346417 +10879371 +4709102 +1933095 +1752161 +1752483 +1752492 +1753215 +5105458 +5105547 +1753759 +6133481 +11673056 +1919151 +1919161 +1919181 +1919340 +1919344 +1919348 +1919412 +1919438 +1919534 +1919551 +1919581 +1919589 +1919635 +1919716 +1919728 +1919731 +1919741 +1919951 +5137747 +5137748 +1920237 +1920247 +1920259 +5137790 +5137808 +5137823 +5137828 +5137832 +5137849 +5137858 +1920349 +1920356 +1920357 +1920362 +1920369 +1920374 +5137861 +1920454 +1920467 +1920469 +1920472 +1920502 +1920506 +1920512 +4535307 +5137889 +5137891 +1920515 +5137920 +5137926 +5137932 +5137935 +5137938 +5137945 +5137946 +5137578 +5137605 +5137612 +1920218 +5137763 +7207679 +1758003 +1868952 +1869057 +1963095 +5143311 +5143315 +5143354 +5143384 +1954911 +6133648 +1955552 +1955694 +1955725 +1956384 +1956496 +1956536 +6133593 +1957161 +1957333 +1957368 +1957413 +1957611 +1958152 +1958158 +1958290 +1958305 +1958307 +1958454 +1958463 +1958483 +1959645 +1959667 +6133552 +1959948 +1960181 +6133509 +5144092 +5144093 +1960617 +6133518 +1960686 +1961647 +1962678 +1962839 +4302252 +1963168 +1963629 +1963733 +11644349 +1964024 +1964025 +1964029 +1964116 +1964316 +5144431 +5144472 +1966367 +1967590 +7346240 +1968147 +7681733 +1968363 +1968730 +1968746 +1969581 +6133643 +1970322 +7346252 +5144806 +5145075 +5145396 +5145502 +5145560 +5145624 +9194811 +6133516 +5146062 +1972614 +1972620 +10732353 +1972754 +1973242 +1973338 +1973358 +5146508 +5146566 +5146608 +5146677 +5146752 +5146763 +5147306 +1975164 +6133559 +11856219 +1975805 +1975806 +1975892 +9356491 +9410573 +9548993 +1976212 +1976213 +1976224 +1976228 +1976311 +1976469 +1976928 +1977182 +1977184 +5147917 +5147968 +5148043 +5148055 +1977813 +1977833 +1977863 +6133582 +1977962 +1978385 +1978405 +1978499 +1978524 +5148252 +1978789 +1978999 +6133546 +1979787 +1980521 +11449815 +1980827 +1981063 +7345811 +1982007 +1982221 +1982267 +1982865 +5149081 +5149136 +5149174 +1985152 +1985158 +1985167 +1985192 +6133659 +1985926 +1986032 +1986054 +1986508 +1986650 +1986779 +1986936 +1987203 +1987362 +1987377 +1987766 +1987767 +1987775 +1987776 +6133591 +1988257 +1988306 +1988420 +1988487 +1989355 +1989942 +1990043 +1991123 +5149609 +1991310 +1991378 +1991779 +10155932 +11098546 +11869776 +5734515 +10422582 +10632124 +6133595 +6133596 +10530208 +11555221 +6133670 +6133673 +6133674 +6133519 +11780161 +6133604 +10629052 +7346237 +6133562 +5734379 +6133523 +6133525 +6133542 +6133498 +10477629 +6133517 +10175639 +9617411 +9932090 +7345829 +11477039 +6133540 +10755716 +5149768 +5146303 +5146335 +1942522 +1942244 +1942251 +10773498 +1942378 +1942769 +1942808 +4689929 +1943212 +1943223 +1943236 +8277078 +5141795 +1943505 +1943519 +1943619 +1944503 +1944504 +1944521 +1944778 +5141924 +9050611 +1945088 +1945137 +1945173 +1945225 +1945227 +1945274 +1945286 +1945569 +1945605 +1945715 +1945738 +1945742 +1945748 +1945814 +1945856 +1945863 +1945874 +1945877 +1945878 +5142001 +1946051 +1946058 +1946067 +5142067 +1946432 +1946695 +1946737 +1946738 +1946917 +1947385 +1947409 +1947446 +1947492 +1947496 +1947661 +1947673 +1947727 +1947745 +1947753 +1947765 +1947805 +1947846 +1948062 +1948088 +5142213 +1948464 +1948465 +1948941 +1949008 +1949015 +1949336 +1949366 +1949404 +7346351 +8828146 +9068968 +5142338 +1950013 +7346356 +1950156 +1950171 +1950521 +1950533 +1950879 +1950936 +1951157 +5977247 +7633472 +5142725 +5142729 +5142730 +1758613 +5108636 +10329023 +1760620 +1761438 +1762657 +6132957 +1764174 +1764553 +5109843 +5109848 +5109882 +5109898 +5109931 +8352161 +1765658 +1766910 +1767368 +1767393 +5772171 +5802396 +5883925 +1769095 +1769978 +1771555 +1774797 +6115946 +5111535 +5772222 +1779641 +1782341 +1782354 +1782543 +5714973 +1784513 +1784761 +1785145 +1785181 +1785185 +1785314 +1786452 +1786573 +1787373 +4687681 +1789957 +1791660 +1793246 +7918000 +1793689 +1795068 +6133011 +4688169 +4688172 +1798090 +1800149 +6132989 +6132797 +5109385 +4534681 +1792555 +8108800 +1771675 +1771245 +5113853 +5108671 +5108724 +5108787 +5108794 +1789530 +10933525 +11615549 +4532206 +4532208 +4532266 +6115820 +6115822 +6115830 +1782273 +10063383 +9325654 +10458175 +1822490 +1822493 +5118565 +1824338 +1824751 +1824766 +1824997 +1825336 +7346284 +1825920 +5118996 +5119000 +6133700 +1827484 +5119239 +1827711 +6133680 +6133684 +7346276 +9921001 +5118841 +1892555 +5127748 +5806166 +11464595 +1892821 +5127835 +5127867 +5127893 +5127932 +5127971 +5127992 +9963153 +1893177 +5792081 +1893329 +1893341 +10477747 +1893538 +1893546 +1893612 +1893793 +1893923 +1893951 +4704279 +8832485 +9136904 +10333787 +1894002 +1894012 +5128161 +5128169 +5128182 +10398658 +10639484 +1895037 +1895159 +1895499 +1895527 +1895609 +1895667 +1895956 +1895984 +1895992 +1896061 +1896105 +1896304 +1896922 +1897664 +1897677 +1897685 +1897692 +1897747 +1897808 +1897814 +1897817 +1897834 +1897873 +4299368 +5129293 +7346344 +1898434 +1898521 +1898946 +1898958 +1898988 +1899187 +5130277 +1901399 +1901404 +1901411 +1901427 +1901428 +1901429 +1901435 +1901463 +1901850 +5130369 +5130444 +5130464 +5130471 +5130521 +5130542 +8189761 +4535689 +10577473 +5130775 +5130813 +5130814 +5130851 +5130904 +5130944 +5130971 +9968404 +9999965 +1904272 +1904701 +1904719 +1904943 +1904948 +1904996 +1905079 +1905142 +6221746 +1905383 +1906552 +1907576 +1907620 +1907637 +1907672 +1907687 +4535754 +5881946 +7976131 +1908352 +1908702 +1908775 +1908840 +1908871 +1908929 +7346301 +8978362 +10656625 +1909607 +1909649 +1909659 +1909810 +1909818 +1909838 +1909865 +1910706 +1911298 +1911300 +5133687 +5133689 +1911633 +1911736 +8078362 +5133693 +5133695 +10097687 +4535581 +5134098 +5134301 +8312017 +1913105 +1915079 +1915080 +1915110 +1915140 +1915154 +1915160 +1915262 +1915275 +1915325 +11516142 +11535847 +5135643 +1916410 +1916412 +1916758 +5136594 +5136681 +5136713 +5136752 +5136790 +5137156 +5137166 +5137291 +5137330 +1918026 +1918321 +1918394 +1918406 +1918408 +1918495 +1918497 +1918517 +1918533 +1918547 +1918554 +1918667 +1918736 +11645316 +4535618 +10595994 +10000384 +10043827 +5130587 +7762841 +5131142 +5131339 +5131372 +5131407 +5131443 +5131467 +5131495 +5131520 +5131555 +5131565 +10228568 +10277877 +10508423 +7346335 +8001799 +5806167 +6100726 +7642610 +5135546 +5128587 +5128644 +5129000 +5129025 +10201273 +1910628 +1910629 +1899818 +5129913 +1914708 +1914749 +1918584 +1951505 +1951507 +5142870 +1951675 +1951747 +1951859 +1952034 +1952177 +1952281 +5143080 +1952481 +1952551 +1952685 +1952704 +5143116 +1952857 +5885428 +1868409 +4702564 +1868499 +5141581 +1730519 +1730543 +1730948 +8008237 +8130866 +8402212 +1872361 +1878744 +1879125 +1879141 +1879227 +1879340 +1879379 +1879408 +1879471 +1879490 +5126635 +5126637 +1880451 +1880852 +1880858 +1880968 +1881089 +1881121 +1881126 +1881151 +1881170 +9819403 +1881293 +1881329 +1881336 +1881340 +1881515 +1881964 +1882253 +1882266 +1882310 +1882753 +1882767 +1882884 +1882901 +10156181 +1882930 +1882941 +1882960 +1882965 +1883067 +5127097 +1883943 +1884051 +1884229 +1884434 +1884437 +1884449 +1884461 +1884479 +1884671 +6120980 +1884774 +1884835 +1884844 +1884890 +1884908 +1884909 +4532146 +1885012 +1885262 +1885263 +1885630 +6133181 +1885745 +1885763 +1885826 +1885836 +1885919 +1885945 +1885994 +1886015 +1886241 +1886251 +1886362 +1886526 +1886720 +1886726 +1886729 +1887054 +1887586 +1887691 +1888324 +1888346 +1888537 +1888906 +1888911 +1888913 +1889043 +1889071 +1889074 +1889249 +1889272 +1889277 +1889356 +1889552 +1889563 +1890031 +1890287 +1890320 +1890335 +7543006 +10180624 +1890410 +1890512 +1890670 +1891167 +1891339 +1891583 +1891636 +1891758 +1891936 +1892153 +1892476 +10141437 +11056379 +9674732 +6133140 +5771877 +10227418 +4532125 +10145421 +6120803 +6133232 +6121010 +10397209 +6133154 +10959264 +6133158 +10375403 +5126680 +1886374 +1889833 +5127592 +5127629 +5127644 +5127656 +5127669 +5127675 +5127698 +5802339 +1888638 +1883885 +10410699 +1831136 +5122430 +1858674 +1858930 +1859453 +1859932 +1860026 +1865593 +1865660 +9914882 +1865930 +1866356 +6106943 +1866530 +1866556 +1866573 +11729388 +5124673 +5124716 +5120278 +10005133 +1861451 +1861456 +1861457 +1861488 +1861494 +1861644 +1861714 +1861721 +5123674 +1861933 +1861936 +1861937 +1861949 +1861951 +1862008 +1862061 +5123676 +5123685 +1862293 +1862363 +1862370 +1862394 +1862401 +1862430 +1862449 +1862454 +1862468 +1862475 +1862481 +1862516 +1862517 +1862526 +5123707 +1862765 +1862774 +1863034 +1863354 +1863394 +1863467 +1863646 +1863829 +1863909 +1863910 +1863944 +9578319 +1864126 +1864135 +8133328 +11738734 +11954157 +1864652 +5124305 +5124332 +5124348 +5124374 +5124415 +1864796 +6099041 +6106759 +7346401 +10193618 +5123837 +5123876 +5123884 +5123890 +8810912 +10191275 +10436020 +1992634 +1993496 +6133769 +1993637 +1953196 +1953326 +6132712 +1953407 +1953423 +11467944 +6132725 +6132729 +1954037 +5143241 +5143249 +1954120 +1754135 +1754368 +1754535 +1754919 +1754933 +1755248 +1757652 +5108318 +5108334 +11860016 +5108346 +1857380 +1857828 +1857938 +1858283 +8178453 +1858557 +1937707 +1937723 +1937792 +1937826 +1937892 +1937911 +1937931 +1938029 +1938052 +1938069 +1938088 +1938114 +1938147 +1938156 +1938174 +4692504 +8225376 +1936988 +1936993 +1937055 +5141144 +5141163 +5141177 +5141179 +5141185 +5141187 +5141199 +5141212 +5141215 +5141226 +5141233 +5141242 +5141254 +1937570 +1937580 +1937613 +1938520 +1939086 +1939168 +1939180 +1939215 +5141311 +5141317 +8546322 +10213314 +1800528 +1800539 +1800562 +1800572 +1800686 +1800821 +5114394 +5114400 +5114409 +11873966 +9544823 +5114425 +1801073 +1801080 +1801461 +1801503 +1801519 +10510325 +6112606 +6112661 +6133809 +6133811 +1801993 +1802090 +1802229 +1802337 +1802702 +1802827 +1802833 +1802939 +1803022 +1803035 +1803039 +1803060 +1803078 +10942408 diff --git a/dev/releases/mambo_v3/presets/southeast_asia.classes b/dev/releases/mambo_v3/presets/southeast_asia.classes new file mode 100644 index 0000000..6278806 --- /dev/null +++ b/dev/releases/mambo_v3/presets/southeast_asia.classes @@ -0,0 +1,1672 @@ +1935614 +1935838 +1935849 +1992277 +1992283 +1992315 +1732114 +1732115 +1732830 +1733155 +5102207 +5102242 +1734519 +11453841 +1832235 +1847062 +1847641 +1849656 +8503184 +1831458 +1831631 +1831655 +11095591 +12259113 +12208733 +1759775 +1760140 +6132868 +6132869 +1760201 +1760927 +1760970 +1761213 +1761387 +1762151 +11562374 +1762219 +1762226 +1762298 +5109766 +1763782 +1763812 +1763976 +1764043 +1764060 +1764640 +1765653 +1765863 +1766558 +1766560 +1766570 +1766584 +1766601 +1766618 +3257809 +6116699 +1766888 +1767758 +1767779 +1767780 +5110190 +11097510 +1767883 +1768440 +5110232 +1768898 +10820762 +1769168 +11467034 +10848620 +1769425 +1769465 +1769772 +6132967 +1771975 +1771977 +1772352 +5110417 +5110447 +1775148 +5110546 +5110765 +5110769 +1777166 +9372988 +4687991 +5110981 +5110986 +5110993 +5111044 +6133058 +9610080 +1779456 +6132938 +10203499 +1780705 +1780716 +1782115 +1783302 +10208792 +1785744 +1785832 +1786317 +1786711 +11368766 +5112500 +6132971 +1786958 +1787009 +1788553 +6132936 +7346446 +6132826 +1788953 +1789225 +1789604 +1789794 +10766319 +1790888 +1791010 +1791514 +11725043 +5113148 +5113330 +5113352 +1792695 +5113385 +5884243 +9504222 +1793631 +5113925 +1796984 +10108671 +6132979 +9332506 +1797727 +1798101 +5113950 +5884247 +1798488 +6132850 +11732472 +1787079 +1798700 +1798868 +4301310 +4532352 +6115437 +8793873 +1799743 +1799751 +1799757 +1803148 +1803197 +1805044 +9663271 +1806814 +1806871 +11453492 +1808161 +1808236 +1808340 +6198302 +1809115 +10189965 +1809381 +12006709 +12176559 +1811686 +10671425 +11736162 +12209759 +1813036 +1814913 +1814928 +1814971 +1815260 +10826443 +1816029 +1816065 +1816138 +1816246 +1816292 +1816299 +1816362 +5117779 +1818413 +1818659 +1818991 +1819128 +6197200 +7346382 +1819270 +1819280 +1819421 +1819668 +5118348 +5118422 +10546538 +1820282 +1820291 +1820352 +1820393 +1820401 +1820414 +1820429 +1820440 +1820450 +1820451 +1820478 +7346381 +1820565 +1820888 +1821105 +1822141 +10503495 +8897869 +12176367 +10270464 +9559336 +6133292 +10062933 +10717837 +12216332 +12242422 +9852545 +6133325 +9754232 +10972780 +11142432 +10309234 +12171522 +10399906 +10754772 +8452092 +8526388 +8624848 +9927378 +6133262 +12257250 +1774829 +10282389 +10400868 +10469564 +10813849 +10907635 +10982648 +8874633 +9508913 +1783906 +5116504 +9336001 +1781413 +1781421 +1803461 +9478424 +1794273 +1763761 +6115388 +1816648 +6133297 +1774583 +1774598 +1774604 +1774618 +1774626 +1774635 +1774654 +1774661 +1774702 +1819852 +1780287 +1813174 +5111643 +1768461 +5109796 +1821464 +1821651 +1821920 +1822017 +1819337 +1819362 +1804182 +1815315 +1781446 +1781473 +6116076 +1783713 +4687933 +4687935 +6116646 +1820118 +1820137 +1819057 +6116413 +1781531 +1798329 +1798331 +1798335 +1785072 +1765999 +6133069 +10272611 +10330198 +10598038 +11513188 +11612469 +1786597 +4687389 +5884188 +6132915 +6132917 +9935660 +5110012 +1781350 +1796943 +1819685 +10098436 +11717028 +1782310 +5108435 +5108440 +4301309 +5112440 +10371735 +5141344 +1860259 +1860261 +1860274 +5123419 +5880040 +5880041 +6132546 +5123485 +5123489 +1870237 +1871988 +1872094 +1872848 +1872850 +1872873 +1873417 +5125602 +5125633 +5125635 +1874937 +1876168 +1876542 +1876592 +1877788 +1878406 +9835867 +1888454 +6133441 +1737313 +1740469 +1740524 +1740797 +1740828 +1743998 +1745947 +1746714 +1748605 +10159697 +10707501 +9916153 +1920957 +1920991 +1921009 +1921010 +1921021 +1921044 +7346426 +1921055 +10581870 +1921092 +1921093 +1921150 +1921163 +1921262 +1921263 +1921300 +7346430 +5138069 +1922057 +1922143 +1922163 +1922244 +1922285 +5138200 +1922745 +1922771 +5138257 +1922994 +1923458 +1923491 +1923525 +1923649 +1923651 +1923668 +4708972 +4708977 +1923883 +1923917 +1924193 +1924298 +1924323 +1924390 +1924417 +1924458 +1924558 +1924713 +1925543 +1925628 +1925679 +1925731 +1925743 +1925877 +1926436 +1926437 +1926446 +1926448 +1926456 +1926574 +5883255 +7390086 +1926593 +1926611 +10116946 +10361239 +10606547 +1926800 +10087308 +11008182 +11508257 +11543078 +1926972 +1927025 +1927034 +1927217 +1927219 +1927242 +1927272 +1927274 +1927284 +4709107 +4709111 +7408690 +8322165 +9994384 +10517500 +1927348 +1927393 +1927707 +1927717 +1927897 +5139040 +5139050 +1928349 +1928361 +1928376 +1928382 +1928419 +1928849 +1928908 +1928915 +9856663 +1930954 +1930968 +1931109 +1931148 +1931655 +1931706 +1931729 +1931735 +1931889 +1931906 +1931908 +1931943 +1931956 +1931958 +1931979 +1931997 +1932020 +4709051 +1932043 +1932159 +1932166 +1932189 +1932206 +1932246 +1932273 +1932287 +4709095 +4708995 +1932551 +7346444 +1932607 +1932812 +1932814 +1932863 +5806412 +1933028 +1933044 +1933583 +1933647 +1933679 +1933845 +5140534 +5140561 +1934187 +1934188 +1934211 +1934213 +1934221 +1935363 +1935372 +1935377 +1935405 +1935408 +1935410 +1935454 +5138929 +7346417 +4709102 +1752161 +1752373 +1752483 +1752492 +1752603 +1752651 +1752749 +1752903 +5105458 +5105547 +5105570 +11014495 +10932946 +7345843 +6133481 +10017342 +11673056 +1919151 +1919160 +1919176 +1919340 +1919344 +1919348 +1919407 +1919438 +1919444 +1919534 +1919551 +1919564 +1919581 +1919589 +1919635 +1919728 +1919731 +1919741 +1919744 +1919756 +1919758 +1919762 +1919951 +5137748 +5137808 +5137823 +5137832 +5137833 +5137847 +5137849 +5137854 +5137858 +5137861 +1920454 +1920467 +1920469 +5137889 +5137891 +5804932 +1920515 +5137920 +5137926 +5137932 +5137935 +5137938 +5137945 +5137946 +5137949 +5137955 +1920786 +1758003 +1758461 +1868952 +1869057 +1869178 +11794362 +1963095 +5143384 +6133648 +1955389 +1955552 +1955725 +1956384 +1957161 +1957333 +1957368 +1957413 +1957523 +1958152 +1958158 +1958163 +1958305 +1958324 +1958422 +1958454 +1958463 +1958483 +1959645 +6133509 +5144092 +1961162 +1961647 +1962678 +5734349 +5144345 +1963629 +11644349 +1964024 +1964025 +1964029 +6133500 +1964116 +1964331 +1964738 +5144431 +9370070 +7346240 +1968147 +1968363 +1968746 +1969581 +6133643 +1970034 +1970136 +1970322 +1970436 +7346252 +5144806 +5145075 +5145396 +5145495 +5145624 +9194811 +1972620 +10732353 +1972754 +1973242 +5146434 +5146483 +5146508 +5146566 +5146608 +5146752 +5146763 +5147306 +5147498 +1975164 +6133559 +9875420 +11856219 +1975711 +1975805 +1975806 +10835542 +1975892 +9356491 +9410573 +9548993 +1976212 +1976213 +1976228 +1976311 +1976469 +1977184 +6133548 +5147917 +5147968 +5148043 +5148055 +5148214 +1977813 +1977833 +1977863 +1978385 +1978499 +1978524 +6133560 +1978996 +1978999 +1979521 +1980694 +1980827 +1981063 +7345813 +1982221 +1982267 +1982865 +11121180 +5149136 +5149174 +5149203 +1985152 +1985158 +1985167 +1985181 +1985192 +1985228 +6133659 +1986054 +1986508 +1986774 +1986779 +1986787 +1986936 +1987203 +1987204 +1987362 +1987377 +1987766 +1987767 +1987775 +1987776 +6133591 +1988257 +1988420 +1988487 +1989942 +1991123 +5149609 +1991310 +1991378 +1991394 +10155932 +11869776 +5734515 +5880539 +10422582 +10632124 +6133596 +10530208 +11555221 +6133670 +6133673 +6133674 +7346249 +6133637 +11780161 +6133604 +6133607 +10629052 +6133562 +10864093 +6133523 +6133525 +6133498 +10477629 +6133575 +9962269 +6133517 +10175639 +9617411 +9932090 +7345829 +1942522 +1942060 +1942067 +1942251 +5141643 +10773498 +1942378 +1942618 +1942621 +1942636 +1942715 +1942808 +1942836 +4689929 +1942878 +1943212 +1943223 +1943236 +1943308 +5141795 +1943505 +1943619 +1943625 +1943757 +1944462 +1944483 +1944504 +1944521 +1944778 +5141924 +9050611 +1945088 +1945122 +1945137 +1945143 +1945173 +1945225 +1945227 +1945270 +1945274 +1945605 +1945694 +1945710 +1945715 +1945738 +1945742 +1945748 +1945814 +1945837 +1945856 +1945863 +1945874 +1945878 +1946019 +1946051 +1946058 +1946067 +1946145 +5142067 +1946432 +1946486 +1946695 +1946731 +1946737 +1946738 +1946916 +1946917 +1947385 +1947409 +1947449 +1947456 +1947491 +1947492 +1947496 +1947661 +1947673 +1947703 +1947727 +1947745 +1947753 +1947765 +1947775 +1947805 +1947846 +1948061 +1948062 +1948073 +5142213 +1948464 +1948465 +1949008 +1949015 +1949336 +1949366 +1949404 +1949419 +7346351 +8828146 +9068968 +1950013 +7346356 +1950169 +1950171 +1950302 +1950521 +1950879 +1951157 +5142725 +5142729 +5142730 +1758613 +10329023 +1762657 +6132957 +1763741 +1764553 +5109843 +5109848 +5109872 +5109882 +5109898 +1765508 +1766910 +1767368 +1767393 +10575632 +5802396 +5883925 +1769095 +1769209 +1769978 +1771555 +1774797 +6115946 +5111535 +1782341 +1782354 +1782757 +1785145 +1785314 +1785329 +1785725 +1786573 +1787367 +1787373 +4687681 +1788856 +1793238 +1793246 +1793689 +1795068 +1795597 +4688166 +4688169 +4688172 +6132989 +10121804 +6132797 +5109385 +8491927 +1792555 +5113853 +5108671 +5108752 +5108794 +1789512 +1789530 +10933525 +11615549 +4532266 +6115822 +6115830 +1782273 +1782289 +9325654 +10458175 +10683012 +1822487 +1822493 +1822852 +6133742 +5118565 +6133720 +5118582 +6133692 +1824766 +1824997 +1825336 +1825920 +1825956 +6133700 +1827484 +5119239 +1827711 +6133680 +6133681 +6133684 +9921001 +5118841 +5127748 +5806166 +11464595 +1892821 +5127867 +5127893 +5127916 +5127932 +5127955 +5127971 +5127992 +5127998 +9963153 +1893204 +1893241 +1893266 +5128034 +1893329 +10055104 +1893526 +1893546 +1893551 +1893612 +1893645 +1893660 +1893663 +1893787 +1893793 +1893921 +1893923 +1893951 +4704279 +8832485 +8982591 +10333787 +1893989 +1893993 +1893998 +1894002 +1894012 +1894057 +1894060 +5128161 +5128182 +1895037 +1895159 +1895448 +1895499 +1895609 +1895667 +1895670 +1895956 +1895984 +1895992 +1896061 +1896063 +1896073 +1896141 +1896142 +1896152 +1896304 +1896922 +1897664 +1897685 +1897692 +1897722 +1897747 +1897770 +5129266 +1897808 +1897814 +1897817 +10383968 +1898234 +4299368 +5129293 +7346344 +1898434 +5129417 +1898958 +1898970 +1898988 +1900093 +1900939 +1901213 +5130277 +1901372 +1901399 +1901404 +1901411 +1901427 +1901428 +1901429 +1901435 +1901463 +1901669 +5130369 +5130439 +5130444 +5130456 +5130464 +5130471 +5130476 +5130521 +5130542 +1902568 +10394962 +10577473 +5130748 +5130775 +5130813 +5130814 +5130851 +5130904 +5130944 +5130971 +5131058 +9999965 +1904272 +1904281 +1904282 +1904283 +1904701 +1904719 +1904728 +1904760 +1904764 +1904798 +1904884 +1904887 +1904888 +1904916 +1904921 +1904922 +1904932 +1904938 +1904943 +1904948 +1904996 +1905079 +1905142 +1907430 +1907432 +1907475 +1907534 +1907637 +1907666 +1907683 +1907687 +4535754 +5881946 +7976131 +1908352 +1908660 +1908700 +1908702 +1908707 +1908713 +1908775 +5133051 +11608942 +1908818 +1908840 +1908863 +1908871 +1908897 +1908929 +1908953 +1908962 +1909123 +1909216 +7346301 +8978362 +1909281 +1909319 +10656625 +1909607 +1909659 +1909810 +1909854 +1909879 +1909884 +1910371 +1910706 +1910753 +6133858 +1910809 +1910812 +5133687 +5133689 +1911736 +1911755 +5133695 +1913091 +1913105 +1915031 +1915079 +1915080 +1915110 +1915140 +1915144 +1915160 +1915262 +1915270 +1915325 +1915332 +8669164 +11516142 +11535847 +1916758 +5136514 +5136594 +5136681 +5136713 +5136752 +5136790 +5136866 +5136868 +5136939 +5137022 +5137085 +5137086 +5137128 +5137156 +5137166 +5137291 +5137330 +5137388 +1918321 +1918394 +1918406 +1918495 +1918497 +1918532 +1918533 +1918554 +10595994 +10000384 +10043827 +11419137 +11760688 +11840957 +4704316 +10376507 +5131142 +5131256 +5131339 +5131372 +5131407 +5131443 +5131467 +5131493 +5131495 +5131520 +5131555 +5131565 +10228568 +10277877 +10508423 +7346335 +5806167 +5881397 +6100725 +6100726 +7642610 +5128569 +5128644 +5128663 +5129000 +10201273 +1910576 +1910628 +1910629 +1910648 +1910662 +1914708 +1914749 +7346340 +1918584 +1951492 +1951505 +5142870 +1951675 +1951859 +1951874 +1951881 +1952147 +1952175 +1952281 +5143007 +5143076 +5143080 +1952685 +1952704 +5143116 +1952857 +1868409 +4702564 +1868499 +1868470 +5141581 +1730519 +1730543 +8008237 +8130866 +8402212 +1872361 +6133117 +1878744 +1879125 +1879141 +1879227 +1879340 +1879379 +1879408 +1879471 +5126635 +5126637 +1880353 +1880451 +1880852 +1880858 +1881121 +1881170 +1881293 +1881320 +1881329 +1881336 +1881340 +1881515 +1881964 +1882253 +1882266 +1882310 +1882753 +1882767 +1882771 +1882884 +10156181 +1882930 +1882960 +1882965 +1883067 +1883394 +5127097 +1883873 +1883943 +1883951 +1884051 +1884228 +1884229 +9294363 +1884434 +1884437 +1884449 +1884479 +1884671 +6120980 +1884774 +1884816 +1884844 +1884890 +1884909 +4532146 +1885012 +1885263 +1885569 +1885630 +1885745 +1885826 +1885836 +1885919 +1885945 +1886015 +1886241 +1886251 +1886526 +1886700 +1886720 +1886726 +1886729 +1887054 +1887586 +1887691 +1888027 +1888040 +1888092 +1888324 +1888891 +1888906 +1888911 +1888913 +1889043 +1889053 +1889071 +1889074 +1889249 +1889270 +1889272 +1889277 +1889356 +1889358 +1889531 +1889552 +1890031 +1890287 +1890320 +1890335 +10180624 +1890410 +1890512 +1891339 +1891583 +1891636 +1891758 +1891936 +10141437 +6133140 +5771877 +4532125 +9967529 +10145421 +6120803 +6133232 +6121010 +10502505 +10397209 +6133154 +6133158 +1886374 +1889833 +5127592 +5127629 +5127644 +5127656 +5127669 +5127675 +5127688 +5127698 +5802339 +6121184 +1888638 +1888639 +1883885 +10410699 +5122430 +1858698 +1858930 +1859453 +1859932 +5123180 +1864897 +1865593 +1865660 +1865666 +9914882 +1865930 +1866237 +6106943 +1866530 +1866573 +9906979 +10047346 +11729388 +5124716 +5120278 +10019169 +10005133 +1861451 +1861456 +1861457 +1861488 +1861494 +1861644 +1861665 +1861714 +1861721 +1861933 +1861936 +1861937 +1861949 +1861951 +1861975 +1862008 +1862026 +1862061 +5123676 +5123685 +1862293 +1862363 +1862370 +1862394 +1862401 +1862403 +1862414 +9836014 +1862430 +1862434 +1862449 +1862454 +1862468 +1862475 +1862481 +1862516 +1862517 +1862521 +1862526 +6106708 +5123707 +5123709 +1863034 +1863354 +1863388 +1863394 +1863467 +1863646 +1863829 +1863848 +1863880 +1863907 +1863909 +1863910 +1863924 +1863944 +1864126 +1864135 +8133328 +11738734 +11954157 +5124304 +5124305 +5124332 +5124348 +5124374 +1864796 +6099041 +6106759 +10193618 +5123824 +5123837 +5123852 +5123870 +5123876 +5123884 +5123890 +8810912 +10189661 +10191275 +10436020 +1992634 +1993496 +1993637 +1953192 +1953196 +1953217 +1953326 +1953356 +6132711 +6132712 +1953407 +1953423 +11467944 +6132725 +6132723 +6132729 +1954037 +5143241 +5143249 +5143266 +1954120 +6132728 +1754135 +1754263 +1754368 +1754516 +1754535 +1754919 +1754933 +1757652 +5108318 +5108334 +5108335 +11860016 +5108346 +9004359 +1855630 +1857380 +1857828 +1858283 +8178453 +1858557 +1937665 +1937699 +1937707 +1937712 +1937723 +1937769 +1937826 +1937847 +1937856 +1937892 +1937911 +1937937 +1937966 +1937975 +1937988 +1938052 +1938069 +1938074 +1938088 +1938114 +1938122 +1938129 +1938174 +4692504 +9017206 +1936988 +1936993 +1937011 +1937037 +5141154 +5141163 +5141172 +5141177 +5141179 +5141185 +5141187 +5141188 +5141195 +5141197 +5141198 +5141199 +5141202 +5141207 +5141212 +5141215 +5141226 +5141229 +5141230 +5141233 +5141236 +5141242 +5141252 +5141254 +1937444 +1937514 +1937530 +1937570 +1937580 +1937613 +1937618 +1939086 +1939156 +1939168 +1939225 +5141311 +5141317 +10213314 +1800441 +6133777 +1800539 +1800562 +1800572 +1800686 +1800691 +1800821 +5114394 +5114400 +11873966 +9544823 +5114425 +1801080 +1801170 +1801196 +5114465 +1801461 +1801490 +1801503 +1801519 +10066605 +10510325 +6112606 +6112613 +6112661 +6133809 +6133811 +1801993 +1802090 +1802337 +1802702 +1802827 +1802833 +1802919 +1803022 +1803035 +1803078 +6133803 +5114303 diff --git a/dev/releases/mambo_v3/presets/subsaharan_africa.classes b/dev/releases/mambo_v3/presets/subsaharan_africa.classes new file mode 100644 index 0000000..324eab2 --- /dev/null +++ b/dev/releases/mambo_v3/presets/subsaharan_africa.classes @@ -0,0 +1,796 @@ +1992315 +6113873 +1732087 +5101590 +1732660 +1732955 +6113959 +1845270 +1845574 +1845616 +4528100 +1847111 +9868978 +1850640 +5119338 +1839146 +1831458 +11513018 +1763976 +1766612 +1767883 +1769739 +1771455 +1772352 +1772447 +1772689 +5110546 +8979264 +1776265 +1776268 +4687991 +1778430 +5111054 +1786190 +1786980 +1786984 +1786985 +1787009 +1788553 +6116754 +1789057 +1789498 +1789805 +1790287 +1791715 +1792210 +1795074 +1796984 +5884245 +6117055 +6117124 +1798481 +6115283 +1798802 +4301310 +4532352 +6115437 +8793873 +1803148 +1803163 +1803197 +1804337 +8865876 +1806871 +1806913 +1808172 +1808359 +1809158 +1809159 +1814552 +8916247 +5117776 +5117791 +5117805 +6122301 +6121912 +1820802 +1820948 +1821012 +1821436 +6122103 +10503495 +8881513 +4532549 +12017078 +6112547 +6112472 +5115381 +1774826 +5116504 +8723161 +5108808 +1781413 +1780897 +1794268 +1803590 +1803593 +1819320 +1772374 +6115388 +1816685 +1774600 +1803544 +1803545 +1817973 +1804532 +1813460 +1807634 +1782645 +1768459 +5113036 +1821547 +1821581 +1821684 +1768212 +5118223 +1820573 +6116073 +1816775 +1803306 +4687933 +6116659 +6116661 +6116669 +6116674 +4532453 +1814877 +11754729 +1781503 +6115504 +1785072 +1785105 +1765997 +4687389 +5884188 +1809585 +1807924 +1782310 +1777517 +6115973 +5123339 +5123474 +1869595 +1870450 +1870988 +1871407 +8766638 +4531365 +1871754 +1872850 +1872873 +1872901 +1873051 +1873079 +1873215 +1873890 +1876542 +1876922 +1877788 +1890024 +5884888 +1877035 +5125780 +1871504 +12231385 +1736623 +1737131 +1737509 +4530608 +1740762 +1740797 +11846897 +1745781 +1921064 +10581870 +1921650 +10858809 +11374171 +11378618 +1922063 +1922064 +1922244 +1922291 +1922468 +1922679 +1922689 +1922694 +1922701 +1923465 +1923473 +10656713 +1924392 +1924429 +8023645 +8951523 +1924713 +5138701 +1925410 +1925609 +1925615 +1925676 +1925693 +1925694 +1925801 +1926530 +1926531 +1926539 +1926546 +1926550 +1926817 +1927313 +1927633 +11667997 +1927943 +1927955 +1927979 +1928070 +1928076 +5139040 +1928389 +5139188 +5139201 +1928746 +1929059 +1929697 +1930904 +1930916 +1930923 +1930931 +1931046 +1931403 +1931437 +1932177 +1932302 +1932332 +1932354 +8833509 +7346444 +8177775 +1932580 +1932629 +5139954 +5140006 +1932751 +1932752 +1932753 +1932882 +1932976 +9954885 +1933583 +1933649 +5138841 +5138921 +7964910 +1933204 +1752327 +1752805 +5105584 +1919181 +1919194 +1919210 +1919213 +1919214 +1919223 +4535280 +4535285 +1919346 +1919660 +1919663 +1919665 +1919924 +1919929 +1919930 +1920181 +1920258 +5137790 +5137799 +5137827 +5137828 +5137849 +1920348 +1920353 +1920359 +1920362 +1920363 +1920369 +1920370 +1920374 +1920377 +1920378 +1920379 +1920381 +1920390 +1920395 +1920401 +1920404 +1920405 +4699245 +5137863 +1920496 +1920506 +1920509 +4535271 +5137988 +5137996 +5137998 +1920795 +1920815 +1920816 +5137612 +5137663 +1750326 +1868884 +1869043 +1869238 +1869278 +1869286 +1955694 +1956897 +1959839 +1960105 +1961025 +4302252 +1963168 +1964076 +1966255 +1967209 +1967324 +1967438 +1967606 +5144691 +5145075 +5145396 +5145468 +5145502 +5145842 +1973171 +5147058 +1978017 +1980521 +1980525 +1980533 +1982267 +1985742 +4525097 +6118530 +6214843 +4524223 +1988064 +1992066 +7507369 +4525034 +4523519 +6119299 +6119323 +6119359 +6119488 +5149664 +5149787 +1987602 +1954382 +11794114 +1942762 +1942790 +1942793 +1943236 +8073674 +1944234 +1944910 +1945535 +1945571 +1945587 +1945786 +1945877 +1945878 +1945980 +1946037 +1946660 +1946661 +1947112 +1947113 +1947117 +5142130 +5142160 +1948371 +1948994 +5142352 +1950156 +1950877 +1948916 +1758839 +5108619 +1761439 +1762383 +5109646 +1764174 +4534245 +4534250 +4534275 +11797244 +5109843 +5109848 +5109855 +5109931 +8352161 +1766072 +9105656 +5772171 +5772206 +1768042 +1768048 +1770416 +1774470 +1774797 +6115946 +5772222 +1780049 +1783777 +1784349 +1784591 +1785181 +1785185 +1785329 +1785361 +1786360 +1787264 +1787438 +4534166 +4534194 +1789957 +1790364 +1791758 +1792418 +1794507 +1795068 +9803522 +1796451 +4532269 +6116341 +6116368 +6116899 +1763072 +5109259 +5109345 +5109407 +4534675 +4534681 +4534686 +6116440 +8108800 +1770821 +1771040 +1771245 +1765751 +5108660 +5108671 +11714235 +11819666 +1797793 +1797864 +1797942 +1797965 +4532203 +4532206 +4532216 +4532266 +6115772 +6115793 +6115822 +1782267 +1767302 +8363507 +10458175 +5119183 +1827775 +10023821 +1892544 +1892554 +1892555 +1892621 +11688586 +5806166 +10587253 +1892811 +1892814 +5127822 +1893558 +1893562 +1893901 +8049830 +1895956 +1896547 +1896600 +1896603 +5128545 +1897904 +1897946 +1897965 +1897970 +1897972 +1898002 +1898017 +10114575 +1898286 +1898290 +4299368 +4299370 +1899071 +1899144 +1899164 +1899198 +1900053 +1900055 +1901781 +1901782 +1901850 +11546465 +11623814 +11726907 +11841763 +5130335 +5130347 +5130392 +5130393 +5130396 +5130448 +5130464 +5130467 +5130487 +5130502 +5130542 +1903009 +1903661 +1904206 +1906006 +1906014 +1906030 +1906063 +1906117 +5132523 +5132529 +5132540 +5132545 +5132550 +5132591 +5132713 +1906604 +1906621 +1906679 +10569879 +11378273 +5132839 +1907399 +4535754 +1908356 +8727750 +1909818 +5133610 +10203260 +1912506 +8964866 +1915499 +11372793 +11375508 +12301192 +12357826 +12358748 +1909736 +5135573 +5135944 +5136059 +5136113 +5136200 +5136306 +1918207 +1918212 +1918688 +1918776 +4535539 +5137397 +9902073 +10717680 +5131347 +5131442 +5131540 +5133088 +7642610 +5135513 +10873137 +1896957 +5128597 +5128825 +5128984 +5129091 +5129190 +9087922 +1910496 +1910501 +1910628 +1910629 +1910663 +1842097 +4301036 +4529738 +6122527 +1878656 +1878804 +1878951 +1879001 +1879227 +1879340 +1879408 +1879427 +1879452 +5126204 +1879471 +1879490 +1879655 +1879691 +1880011 +5126637 +1880408 +1880865 +1881126 +1881147 +1881151 +5126668 +9819403 +1881303 +1882110 +1882884 +1882905 +1882941 +1882960 +1882965 +1883067 +1883124 +1883386 +1883458 +5127094 +1884051 +1884437 +1884449 +1884479 +6120980 +1884774 +1884844 +1884909 +4532146 +1885024 +1885262 +1885745 +1885764 +6120861 +1885836 +1886015 +1886088 +1886104 +1886251 +1886648 +1886729 +7562564 +1887054 +8955839 +4531670 +1887694 +1888346 +1888915 +1889071 +1889272 +1889277 +1889543 +9228024 +1890287 +1890335 +7543006 +1890346 +1890410 +1890534 +1890670 +1891167 +1891217 +4532022 +4532024 +1891583 +8986756 +1892456 +1892476 +5771877 +6133232 +6121010 +6121218 +6133158 +8876855 +1886374 +1889833 +5127644 +5127669 +5127675 +5802339 +6121184 +1886207 +1883885 +1831136 +1858674 +1858930 +1859285 +1859932 +1866249 +1866252 +1866262 +1866421 +5124813 +1866980 +1867009 +1867014 +1867295 +1867312 +1867673 +1867744 +1867749 +1867750 +1867751 +1868014 +1868049 +1868060 +11414590 +11464362 +5120278 +1861433 +1861510 +1861522 +1861544 +1861584 +1861592 +1861644 +1862293 +1862311 +1862401 +1862433 +1862692 +1862719 +1862765 +1862989 +1863034 +1863282 +1863544 +1863640 +9178932 +5124071 +5124088 +5124093 +5124109 +1864576 +1864652 +5124352 +1992634 +1992956 +1992969 +6132725 +1830437 +1830459 +10055273 +1857068 +1857143 +1857577 +1857581 +1857626 +1858283 +1937643 +1937667 +1937702 +1937711 +1937849 +1937959 +1938069 +1938125 +1938166 +5141170 +5141195 +5141216 +5141234 +5141248 +5141250 +1939314 +1800642 +5114409 +4534796 +4534757 +6112634 +1802662 +1802850 +1802868 +1803022 +1803025 +1803060 diff --git a/dev/releases/mambo_v3/presets/tasmania.classes b/dev/releases/mambo_v3/presets/tasmania.classes new file mode 100644 index 0000000..6f46c28 --- /dev/null +++ b/dev/releases/mambo_v3/presets/tasmania.classes @@ -0,0 +1,274 @@ +9840570 +10341307 +10435406 +1832553 +1829866 +1828456 +1828540 +1828544 +10833593 +5119350 +5119353 +1837706 +4686905 +4686913 +1835886 +4685557 +1831458 +1831499 +1761751 +1761820 +1780856 +10154280 +5112407 +5112410 +1790450 +1795657 +1799165 +1803197 +1804430 +1806704 +1807503 +1809244 +1809248 +1816110 +1816434 +1817065 +1817171 +10274769 +1811455 +1731906 +1731923 +1732001 +1732005 +10640865 +1840346 +5123339 +10005632 +1870703 +1872255 +1873290 +5125600 +5125629 +1874146 +1875534 +1890065 +10211808 +10526954 +1940575 +12259151 +1741074 +11906255 +9867379 +1745019 +10358334 +1748425 +1748473 +9952043 +10606887 +10549715 +1925555 +4708984 +1927894 +4708927 +1928923 +1932563 +7346444 +1752536 +1752547 +1920496 +1828310 +1962159 +9875141 +1970485 +1964995 +1964996 +10295646 +1954236 +10634980 +9213204 +1955093 +10560674 +11720357 +9593393 +10062202 +10075732 +10132475 +10363151 +10398979 +10456933 +10457796 +10471477 +10623003 +11468089 +10257899 +1956416 +10167252 +1959341 +1960201 +1960521 +5144204 +1964066 +1965643 +1965650 +10174909 +1967716 +1968115 +1968131 +1969104 +10109201 +5144937 +5144942 +5145422 +1972407 +1972606 +5146262 +1972903 +5146472 +5146805 +5146880 +1975212 +1975248 +10572729 +1976341 +1976342 +1976890 +1976891 +1978082 +10530515 +1978904 +1980041 +1980063 +1980491 +10378314 +10571987 +1982024 +1982055 +1982085 +1982148 +12116722 +1985826 +1986223 +1986846 +1986942 +5149369 +5149387 +1988354 +1988360 +1988362 +1988376 +1988894 +1989181 +1989283 +1989377 +1990165 +1990167 +1990255 +1990256 +1991468 +1992167 +4702878 +10078800 +10146771 +1963532 +1942618 +1943090 +1943096 +4689912 +1944523 +4689905 +1760172 +1761788 +1762900 +1762902 +1768972 +1769260 +1769310 +4688049 +4688092 +4688098 +1771357 +4687565 +1774918 +10032003 +1785149 +1791793 +1798084 +9890366 +1792560 +1770849 +1771203 +1771296 +10658576 +1823493 +1827507 +11905965 +1827802 +5806175 +5806177 +4704400 +4704407 +1899943 +1899947 +1899950 +5130456 +1902244 +4704500 +5102423 +5120379 +11563728 +10134558 +12231152 +5126376 +1880982 +1881018 +1881019 +1881031 +1881041 +1881132 +1881424 +1881504 +1882215 +1882355 +5126843 +5126922 +5127044 +1882905 +1884531 +1892462 +10521368 +1854021 +1854249 +1858762 +1862331 +1754619 +1754814 +4689394 +1855804 +1857033 +1857180 +1857829 +1857882 +1857935 +5803065 +1838297 +1838308 +1833477 +1833653 +1835121 +1835123 +1835821 +1836899 +4686620 +4685566 +5120053 +4685669 +4685678 +4685810 +4686385 +4686702 +1801432 +10573425 +11508472 +11836409 +1801787 diff --git a/dev/releases/mambo_v3/probe_onnx_cuda.py b/dev/releases/mambo_v3/probe_onnx_cuda.py new file mode 100644 index 0000000..c360819 --- /dev/null +++ b/dev/releases/mambo_v3/probe_onnx_cuda.py @@ -0,0 +1,30 @@ +"""Test an ORT CUDA kernel without model assets, PyTorch, or CPU fallback.""" + +import base64 +import os + +import numpy as np +import onnxruntime as ort + + +def main(): + # ONNX opset 18 / IR 10: one FP32 Sigmoid with input/output shape [4]. + # Embedded protobuf avoids requiring the onnx export package for this probe. + model = base64.b64decode("CAo6RwoPCgF4EgF5IgdTaWdtb2lkEhJjdWRhX3NpZ21vaWRfcHJvYmVaDwoBeBIKCggIARIECgIIBGIPCgF5EgoKCAgBEgQKAggEQgQKABAS") + print("ORT:", ort.__version__, ort.__file__, flush=True) + print("JIT settings:", {k: v for k, v in os.environ.items() if k.startswith(("CUDA_FORCE", "CUDA_DISABLE"))}, flush=True) + ort.preload_dlls() + options = ort.SessionOptions() + options.graph_optimization_level = ort.GraphOptimizationLevel.ORT_DISABLE_ALL + options.add_session_config_entry("session.disable_cpu_ep_fallback", "1") + session = ort.InferenceSession(model, sess_options=options, providers=["CUDAExecutionProvider"]) + session.disable_fallback() + if session.get_providers()[0] != "CUDAExecutionProvider": + raise RuntimeError("CUDA provider not selected") + result = session.run(None, {"x": np.array([-1, 0, 1, 2], dtype=np.float32)})[0] + np.testing.assert_allclose(result, [0.26894142, 0.5, 0.73105858, 0.88079708], rtol=1e-5) + print("PASS: standalone CUDA Sigmoid", result, flush=True) + + +if __name__ == "__main__": + main() diff --git a/dev/releases/mambo_v3/promoted_report.py b/dev/releases/mambo_v3/promoted_report.py new file mode 100644 index 0000000..ecd9e4c --- /dev/null +++ b/dev/releases/mambo_v3/promoted_report.py @@ -0,0 +1,202 @@ +"""Publish the selected TTA comparison from verified full-run evidence and fresh timings.""" + +import argparse +import csv +import hashlib +import json +import statistics +from collections import defaultdict +from pathlib import Path + +from deployment.mambo_deploy.augmentation import DEFAULT_TTA +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.releases.mambo_v3.defaults_report import SERIES +from dev.releases.mambo_v3.evaluation_data import write_json +from dev.releases.mambo_v3.tail_report import collect + +from .figure_export import save_figure + + +def quality(source, output): + data = json.loads(source.read_text()) + study = {"tta": DEFAULT_TTA, "source_sha256": file_hash(source), "revision": data["revision"], "models": {}} + for model, _, _ in SERIES: + key = model.replace("-tta", f":{DEFAULT_TTA}") + row = data["models"][key] + study["models"][model] = { + **row, + "report_zero": row["operating_points"]["zero"]["full"], + "report_optimized": row["operating_points"]["optimized"]["full"], + } + # Eleven-model tail domains belong to the exploratory comparison, not this five-model table. + study["models"][model].pop("operating_points") + tails = collect(study) + tails["tta"] = DEFAULT_TTA + write_json(output / "mambo-promoted-thresholds.json", study) + write_json(output / "mambo-promoted-tail.json", tails) + rows = tails["rows"] + with (output / "mambo-promoted-tail.csv").open("w", newline="") as stream: + flattened = [{**{k: v for k, v in r.items() if k not in ("metrics", "classes")}, **r["metrics"]} for r in rows] + writer = csv.DictWriter(stream, fieldnames=list(flattened[0]), lineterminator="\n") + writer.writeheader() + writer.writerows(flattened) + lookup = {(r["model"], r["scope"], r["rank"], r["cutoff"], r["domain"]): r for r in rows} + text = "" + for rank in ("species", "genus", "family"): + text += f"### {rank.title()}\n\n" + text += "| Pipeline | Confidence | Macro accuracy (full / >5) | Macro-F1 (full / >5) | Coverage |\n|---|---|---:|---:|---:|\n" + for model, label, _ in SERIES: + for scope, name in (("zero", "None"), ("optimized", "Calibrated")): + full = lookup[model, scope, rank, -1, "per_model"] + tail = lookup[model, scope, rank, 5, "common"] + a, b = full["metrics"], tail["metrics"] + text += ( + f"| {label} | {name} | {a['accuracy']:.2%} / {b['accuracy']:.2%} | " + f"{a['f1']:.4f} / {b['f1']:.4f} | {full['overall_coverage']:.2%} |\n" + ) + text += "\n" + text += "### Support retained and comparison figure\n\n" + text += ( + "Counts below describe truth classes outside the truncated average, not rejected images.\n" + "The prediction range counts accepted predictions into excluded classes, divided by all\n" + "52,788 reporting images. Truth and prediction counts must not be added.\n\n" + "| Confidence | Rank | Shared classes | Truth outside: images / % | Accepted predictions outside: images / % (pipeline range) |\n" + "|---|---|---:|---:|---:|\n" + ) + for scope, name in (("zero", "None"), ("optimized", "Calibrated")): + for rank in ("species", "genus", "family"): + selected = [lookup[m, scope, rank, 5, "common"] for m, _, _ in SERIES] + row = selected[0] + n = row["report_images"] + truth = n - row["truth_images_in_retained_classes"] + outside = [round(r["overall_coverage"] * n) - r["accepted_predictions_in_retained_classes"] for r in selected] + lo, hi = min(outside), max(outside) + text += ( + f"| {name} | {rank.title()} | {row['class_count']} | {truth:,} / {truth / n:.2%} | " + f"{lo:,}–{hi:,} / {lo / n:.2%}–{hi / n:.2%} |\n" + ) + (output / "quality-tables.md").write_text(text) + + +def performance(root, baseline, output): + old = json.loads(baseline.read_text()) + plan = json.loads((root / "plan.json").read_text()) + if plan["status"] != "complete" or len(plan["completed"]) != 12: + raise ValueError("Require all twelve fresh-process trials") + grouped, resources, provenance = defaultdict(list), defaultdict(list), {} + for name in plan["completed"]: + path = root / name / "report.json" + r = json.loads(path.read_text()) + s = r["settings"] + bank = hashlib.sha256(json.dumps(r["samples"], sort_keys=True).encode()).hexdigest() + if r["status"] != "complete" or s["tta"] != DEFAULT_TTA or bank != old["timing_bank_sha256"]: + raise ValueError("Changed recipe or timing bank") + if any(r[k] != old[k] for k in ("bundle_sha256", "manifest_sha256")): + raise ValueError("Changed benchmark inputs") + if s["threads"] != 4 or s["embeddings"] or s["precision"] != "auto": + raise ValueError("Unexpected timing configuration") + model, device = s["backend"] + "-tta", s["device"] + for cell in r["cells"]: + if cell["preset"] != "north_europe": + raise ValueError("Expected northern Europe") + grouped[model, device, cell["batch_size"]].append(cell["end_to_end"]) + resources[model, device].append(r["peak_rss_kib_linux"] / 1024) + provenance[str(path)] = file_hash(path) + data = { + "tta": DEFAULT_TTA, + "sources_sha256": {str(baseline): file_hash(baseline), **provenance}, + "speed": [r for r in old["speed"] if not r["model"].endswith("-tta") and r["preset"] == "north_europe"], + "resources": [r for r in old["resources"] if not r["model"].endswith("-tta")], + } + expected = {(m, d, b) for m in ("torch-tta", "onnx-tta") for d in ("cpu", "cuda:0") for b in ((1, 8) if d == "cpu" else (1, 8, 32))} + if set(grouped) != expected: + raise ValueError("Incomplete benchmark matrix") + for (model, device, batch), trials in grouped.items(): + if len(trials) != 3 or any(len(t["seconds"]) != 7 for t in trials): + raise ValueError("Require three trials of seven observations") + values = [v for t in trials for v in t["seconds"]] + data["speed"].append( + { + "model": model, + "device": device, + "batch": batch, + "images_per_second": batch / statistics.median(values), + "trial_min_ips": batch / max(t["median_seconds"] for t in trials), + "trial_max_ips": batch / min(t["median_seconds"] for t in trials), + } + ) + for (model, device), values in resources.items(): + data["resources"].append({"model": model, "device": device, "rss_mib": statistics.median(values)}) + write_json(output / "mambo-promoted-speed.json", data) + text = "| Pipeline | CPU B1 | GPU B1 | GPU B8 | GPU B32 |\n|---|---:|---:|---:|---:|\n" + for model, label, _ in SERIES: + values = [ + next(r["images_per_second"] for r in data["speed"] if (r["model"], r["device"], r["batch"]) == (model, device, batch)) + for device, batch in (("cpu", 1), ("cuda:0", 1), ("cuda:0", 8), ("cuda:0", 32)) + ] + text += f"| {label} | " + " | ".join(f"{v:.2f}" for v in values) + " |\n" + (output / "speed-table.md").write_text(text) + + +def render_speed(data, output): + import matplotlib + + matplotlib.use("Agg") + import matplotlib.pyplot as plt + + plt.rcParams.update({"svg.fonttype": "none", "svg.hashsalt": "mambo-promoted-speed-v1"}) + fig, axes = plt.subplots(1, 2, figsize=(12, 6)) + for ax, device, batches in zip(axes, ("cpu", "cuda:0"), ((1, 8), (1, 8, 32)), strict=True): + for model, label, color in SERIES: + rows = [next(r for r in data["speed"] if (r["model"], r["device"], r["batch"]) == (model, device, b)) for b in batches] + values = [r["images_per_second"] for r in rows] + ax.errorbar( + range(len(batches)), + values, + yerr=[ + [max(0, v - r["trial_min_ips"]) for v, r in zip(values, rows)], + [max(0, r["trial_max_ips"] - v) for v, r in zip(values, rows)], + ], + marker="o", + capsize=3, + color=color, + label=label, + ) + ax.set( + title="CPU · FP32" if device == "cpu" else "GPU · automatic precision", + xlabel="Images per batch", + ylabel="End-to-end images / second", + xticks=range(len(batches)), + xticklabels=batches, + ylim=(0, None), + ) + ax.grid(alpha=0.15) + fig.suptitle("Release throughput · northern Europe · TTA: ±30° with 25% padding") + fig.legend(*axes[0].get_legend_handles_labels(), loc="upper center", bbox_to_anchor=(0.5, 0.94), ncol=3) + fig.text( + 0.03, + 0.02, + "i7-12800H / RTX 3080 Ti Laptop; four preparation/runtime threads; same image bank.\n" + "Three fresh processes × seven observations; bars: trial-median range. Decode through CPU results included.\n" + "V2 and single-view V3 reuse earlier measurements; laptop conditions vary between campaigns.", + fontsize=9, + ) + fig.tight_layout(rect=(0, 0.15, 1, 0.84)) + save_figure(fig, output, "mambo-promoted-speed", dpi=140) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--output", type=Path, required=True) + parser.add_argument("--quality", type=Path) + parser.add_argument("--performance", type=Path) + parser.add_argument("--baseline", type=Path, default=Path("docs/assets/mambo-defaults-comparison.json")) + parser.add_argument("--render-speed", type=Path) + args = parser.parse_args() + args.output.mkdir(parents=True, exist_ok=True) + if args.quality: + quality(args.quality, args.output) + if args.performance: + performance(args.performance, args.baseline, args.output) + if args.render_speed: + render_speed(json.loads(args.render_speed.read_text()), args.output) diff --git a/dev/releases/mambo_v3/publication.md b/dev/releases/mambo_v3/publication.md new file mode 100644 index 0000000..09d573f --- /dev/null +++ b/dev/releases/mambo_v3/publication.md @@ -0,0 +1,167 @@ +# Publish MAMBO V3 + +Preparation does not publish anything. The owner performs the steps below after +reviewing the candidate and its qualification records. Packages and weights have +separate identities: training **`mt-trainer==0.3.0`** (Python `mini_trainer`), +deployment **`mambo-v3==0.3.0`** (Python `mambo_deploy`), model **`MAMBO_v3`**. +`mini-trainer` on PyPI is an unrelated project; never publish or install it here. + +## 1. Configure accounts and environments + +Configure pending trusted publishers for `mt-trainer` and `mambo-v3`. The owner +confirmed PyPI accepts `mt-trainer`; a pending publisher does not reserve its name +until publication. Use owner `asgersvenning`, repository `mini_trainer` and these settings: + +| Project | Workflow filename | GitHub environment | +| --- | --- | --- | +| `mt-trainer` | `publish.yml` | `pypi-training` | +| `mambo-v3` | `publish-model.yml` | `pypi-model-mambo-v3` | + +Create those GitHub environments plus `model-assets-mambo-v3` and `model-demo-mambo-v3`, with owner +review before public writes. No PyPI API token is needed. Create the Hugging Face +model repository and Gradio Space, both named `asgersvenning/MAMBO-v3` in their +respective namespaces. Choose CPU Basic initially; the demo does not need a GPU. + +All four GitHub environments use trusted publishing; **none needs a stored token +or secret**. Set only these environment variables: + +| GitHub environment | Variable | Value | +| --- | --- | --- | +| `model-assets-mambo-v3` | `HF_MODEL_REPO` | `asgersvenning/MAMBO-v3` | +| `model-demo-mambo-v3` | `HF_SPACE_REPO` | `asgersvenning/MAMBO-v3` | + +In each Hugging Face repository's **Settings → Trusted Publishers**, register +GitHub Actions with `repository=asgersvenning/mini_trainer` and the workflow below. +The Space needs two registrations because either workflow can deploy it: + +| Hugging Face settings | `workflow` claim | +| --- | --- | +| [Model](https://huggingface.co/asgersvenning/MAMBO-v3/settings) | `publish-model.yml` | +| [Space](https://huggingface.co/spaces/asgersvenning/MAMBO-v3/settings) | `publish-model.yml` | +| Same Space | `publish-demo.yml` | + +Leave the optional branch claim unset: model publication runs from a release tag, +and demo updates run from a reviewed manually selected revision. Keep GitHub +**required-reviewer environment gates** enabled; restrict allowed deployment +branches/tags there to the reviewed release refs. Repository and workflow claims +must both match; do not authorize the whole GitHub repository without a workflow. + +The publishing jobs use the official `hf auth token` exchange with +`huggingface-hub>=1.19`: a short-lived, destination-scoped token is masked and passed +only to the upload process. Preparation jobs cannot request OIDC credentials. +GitHub release uploads use the automatic `github.token`; no personal token is +needed. See [Hugging Face trusted publishing](https://huggingface.co/docs/hub/trusted-publishers). + +These are the destinations linked in the public documentation. If using another +namespace, update those public links as well as the variables and publisher +registrations. The variables and registrations are non-secret configuration; +keep account recovery codes securely backed up. Remove any obsolete `HF_TOKEN` +environment secrets and revoke tokens created solely for these workflows. + +## 2. Review and prepare without publishing + +[Shared routing conventions](../README.md) use `release/packages/**`, +`release/models/**` and `release/demos/**` for automatic preparation. The existing +`release/mambo-v3` branch can stay in place and use manual preparation; it has no +special publication permission. `MAMBO_v3` is an explicit descriptor tag override. + +Make the reviewed workflow changes available on the repository's default branch +before using manual Actions dispatch. Push the release source through the normal +review/merge process; no release tag is needed for preparation. + +Run **Prepare and publish model** (`publish-model.yml`) manually on the intended +release revision with `product=mambo-v3`. Manual dispatch only downloads pinned inputs, builds artifacts, +qualifies installed CPU runtimes and uploads downloadable Action artifacts; +it does not run any publication job. Download and review: + +- `model-candidate`: exact wheels, source distribution, offline bundle, evidence, + source/hash manifest and `qualification/` results. +- `model-publication`: the explicit GitHub, model and Space upload directories. + +The CLI equivalent, from a clean committed checkout with NumPy/Pillow and uv: + +```sh +python -m dev.releases.mambo_v3.prepare_candidate \ + --source local-evidence/mambo-v3 --output local-evidence/mambo-v3-publication-candidate --download +python -m dev.releases.mambo_v3.qualify_candidate \ + local-evidence/mambo-v3-publication-candidate +python -m dev.releases.mambo_v3.publication_assets \ + local-evidence/mambo-v3-publication-candidate --output local-evidence/mambo-v3-publication-assets +``` + +Use a new output directory after a failed attempt. Qualification creates a separate +CPU environment; it never synchronizes the working `.venv`. CI uses synthetic +images for runtime contracts, not accuracy. Local qualification can use +`--dataset /path/to/flemming` for four retained real images. Existing model quality +and timing evidence is reused, with its original environment and methodology. + +Review CC BY-NC-SA 4.0 weight terms, MIT code terms, attribution and the disclosed +missing original training revision/initial-checkpoint hash. Review the rendered +README figures, demo controls and public-file inventories. No photographs, private +prediction archives, credentials or datasets belong in the upload directories. + +## 3. Publish training, then the model + +At the reviewed commit, create and **publish a GitHub Release** with tag +`packages/mt-trainer/v0.3.0`. A tag push alone does not publish. Approve `pypi-training`: +`publish.yml` builds, installs and exercises the wheel, then publishes the exact +retained wheel and the source distribution to PyPI. Model/Space jobs do not run. +Verify `mt-trainer==0.3.0` is publicly available under the intended ownership. + +Then publish the GitHub Release tagged **`MAMBO_v3`** at the reviewed model commit. +The model workflow prepares and qualifies its candidate before the public gates: + +1. `pypi-model-mambo-v3` publishes only `mambo-v3` distributions. It first checks that the + intended `mt-trainer` version is public and points to this repository. +2. `model-assets-mambo-v3` attaches the offline bundle, deployment distributions, evidence, + inventory and checksums to GitHub; it uploads the model repository and creates + an immutable Hugging Face `v0.3.0` tag at that upload's commit. +3. `model-demo-mambo-v3` deploys the staged Space after package/model publication succeeds. + +Prereleases prepare artifacts but do not publish packages or activate the demo. +Training versions and model versions need not advance together. Future trained +models use separate model-generation packages; V3 maintenance retains its weights +and existing preset identities. Introduce a distinct reviewed release identity +before publishing a future model or maintenance version; never reuse `MAMBO_v3` +or an existing package version for different bytes. + +## 4. Verify public integration + +From a fresh environment outside the checkout: + +```sh +uv venv --python 3.13 .venv-mambo +source .venv-mambo/bin/activate +uv pip install 'mambo-v3[onnx]==0.3.0' +mambo_predict -i moth.jpg -o output --name onnx +uvx --from 'mambo-v3[onnx]==0.3.0' mambo_predict -i moth.jpg -o output --name isolated +``` + +Also follow the documented native installation, check cache/offline reuse and +compare downloaded assets against GitHub's `SHA256SUMS`. Open the model page and +Space; try both runtimes, a regional preset, a custom list and TTA. Confirm figures, +citation and cross-links resolve. These are post-publication checks, not claims +that public endpoints were exercised during local preparation. + +## Demo updates and recovery + +For a UI-only update, dispatch **Prepare or update model demo** (`publish-demo.yml`) +on a reviewed revision with `product=mambo-v3`. The default `publish=false` builds/checks a staged Space +without public writes. Set `publish=true` and approve `model-demo-mambo-v3` to deploy it. +This workflow uploads no package or model weights. It requires the public package +release to exist and pins that package and its CPU runtime dependencies. + +For partial publication, rerun the failed jobs from the same workflow run so they +reuse the prepared artifacts. PyPI skips identical existing distributions; GitHub +compares existing asset bytes and refuses replacements; Hugging Face compares the +recorded immutable revision and refuses a different payload. Do not rebuild and +silently replace already-published files. A different release payload needs a new +reviewed version/identity. If Space upload succeeded but tag creation failed, +retrying records the same payload and revision. + +Retain the reviewed Action artifacts externally before their 30-day expiry. To +withdraw a defective release, stop recommending it and publish a corrective +version; preserve immutable assets for existing pins. Revert an application to its +retained V2 environment if needed. V3 embeddings and thresholds do not transfer to +V2. Remote account configuration, publication and final live endpoint checks remain +owner tasks; preparation never performs those writes. diff --git a/dev/releases/mambo_v3/publication_assets.py b/dev/releases/mambo_v3/publication_assets.py new file mode 100644 index 0000000..b025b16 --- /dev/null +++ b/dev/releases/mambo_v3/publication_assets.py @@ -0,0 +1,120 @@ +"""Stage/verify explicit public release files; never upload or publish anything.""" + +import argparse +import json +import shutil +import subprocess +import tarfile +import tomllib +from pathlib import Path + +from dev.releases.mambo_v3.prepare_candidate import HERE, ROOT, digest + + +def verify(candidate, *, qualified=True): + manifest = json.loads((candidate / "release-candidate.json").read_text()) + project = tomllib.loads((ROOT / "deployment/pyproject.toml").read_text())["project"] + source = subprocess.check_output(["git", "rev-parse", "HEAD"], cwd=ROOT, text=True).strip() + if (manifest["distribution"], manifest["package_version"], manifest["model_id"], manifest["source_commit"]) != ( + project["name"], + project["version"], + "MAMBO_v3", + source, + ): + raise ValueError("Candidate identity differs from the checked-out release") + bundle = json.loads((candidate / "mambo-v3-bundle/release.json").read_text()) + if any(bundle[key] != manifest[key] for key in ("model_id", "package_version", "distribution")): + raise ValueError("Bundle and package release identities differ") + for relative, entry in manifest["files"].items(): + path = candidate / relative + if not path.resolve().is_relative_to(candidate.resolve()) or path.is_symlink(): + raise ValueError(f"Invalid candidate path: {relative}") + if path.stat().st_size != entry["size"] or digest(path) != entry["sha256"]: + raise ValueError(f"Candidate integrity mismatch: {relative}") + actual = {p.relative_to(candidate).as_posix() for p in candidate.rglob("*") if p.is_file()} + if actual != set(manifest["files"]) | {"release-candidate.json", "SHA256SUMS"}: + raise ValueError("Candidate contains unaccounted or missing files") + if qualified and manifest["qualification"] != "passed": + raise ValueError("Installed-artifact qualification is not complete") + return manifest + + +def seal(candidate): + manifest = json.loads((candidate / "release-candidate.json").read_text()) + manifest["files"] = { + path.relative_to(candidate).as_posix(): {"size": path.stat().st_size, "sha256": digest(path)} + for path in sorted(candidate.rglob("*")) + if path.is_file() and path.name not in {"release-candidate.json", "SHA256SUMS"} + } + (candidate / "release-candidate.json").write_text(json.dumps(manifest, indent=2) + "\n") + (candidate / "SHA256SUMS").write_text( + "".join(f"{entry['sha256']} {name}\n" for name, entry in manifest["files"].items()) + + f"{digest(candidate / 'release-candidate.json')} release-candidate.json\n" + ) + + +def stage_space(output, source=None, version=None): + source = source or subprocess.check_output(["git", "rev-parse", "HEAD"], cwd=ROOT, text=True).strip() + version = version or tomllib.loads((ROOT / "deployment/pyproject.toml").read_text())["project"]["version"] + output.mkdir(parents=True, exist_ok=False) + for name in ("app.py", "README.md", "requirements.txt", "taxon-names.json"): + shutil.copyfile(ROOT / "deployment/demo" / name, output / name) + (output / "publication.json").write_text( + json.dumps( + { + "source_commit": source, + "model_id": "MAMBO_v3", + "package_version": version, + "files": {p.name: digest(p) for p in sorted(output.iterdir()) if p.is_file()}, + }, + indent=2, + ) + + "\n" + ) + return output + + +def stage(candidate, output): + manifest = verify(candidate) + output.mkdir(parents=True, exist_ok=False) + model, space, github = (output / name for name in ("model", "space", "github")) + model.mkdir() + github.mkdir() + shutil.copytree(candidate / "mambo-v3-bundle", model / "bundle") + stage_space(space, manifest["source_commit"], manifest["package_version"]) + shutil.copyfile(HERE / "MODEL_CARD.md", model / "README.md") + for name in ("MODEL_LICENSE.txt", "NOTICES.md"): + shutil.copyfile(HERE / name, model / name) + shutil.copyfile(ROOT / "deployment/CITATION.cff", model / "CITATION.cff") + shutil.copyfile(candidate / "release-candidate.json", model / "release-candidate.json") + # GitHub gets the offline bundle, public evidence and deployment distributions. + # The training wheel is installed for qualification but has its own publication. + for name in ("mambo-v3-bundle.tar.gz", "RELEASE_README.md", "release-candidate.json"): + shutil.copyfile(candidate / name, github / name) + for path in (candidate / "dist").glob("mambo_v3-*"): + shutil.copyfile(path, github / path.name) + with tarfile.open(github / "mambo-v3-evidence.tar.gz", "w:gz") as archive: + for name in ("evidence", "qualification", "publication.md", "evidence-policy.md", "model-provenance.toml"): + archive.add(candidate / name, arcname=name) + (github / "SHA256SUMS").write_text("".join(f"{digest(p)} {p.name}\n" for p in sorted(github.iterdir()) if p.is_file())) + for folder in (model, space, github): + (folder / "publication.json").unlink(missing_ok=True) + payload = { + "source_commit": manifest["source_commit"], + "model_id": manifest["model_id"], + "package_version": manifest["package_version"], + "files": {p.relative_to(folder).as_posix(): digest(p) for p in sorted(folder.rglob("*")) if p.is_file()}, + } + (folder / "publication.json").write_text(json.dumps(payload, indent=2) + "\n") + return output + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("candidate", type=Path) + parser.add_argument("--output", type=Path) + args = parser.parse_args() + if args.output: + stage(args.candidate.resolve(), args.output.resolve()) + else: + verify(args.candidate.resolve()) diff --git a/dev/releases/mambo_v3/publish_assets.py b/dev/releases/mambo_v3/publish_assets.py new file mode 100644 index 0000000..bda33b0 --- /dev/null +++ b/dev/releases/mambo_v3/publish_assets.py @@ -0,0 +1,76 @@ +"""Explicit publication entry point; workflows call it only after human release gates.""" + +import argparse +import json +import os +import subprocess +import tempfile +from pathlib import Path + +from dev.releases.mambo_v3.prepare_candidate import digest + + +def verified_payload(folder): + payload = json.loads((folder / "publication.json").read_text()) + paths = {p.relative_to(folder).as_posix() for p in folder.rglob("*") if p.is_file()} + if paths != set(payload["files"]) | {"publication.json"}: + raise ValueError("Staged publication file set differs from its inventory") + for relative, expected in payload["files"].items(): + path = folder / relative + if not path.resolve().is_relative_to(folder.resolve()) or path.is_symlink() or digest(path) != expected: + raise ValueError(f"Staged publication integrity mismatch: {relative}") + return payload + + +def github(folder, repository, tag): + verified_payload(folder) + release = json.loads(subprocess.check_output(["gh", "api", f"repos/{repository}/releases/tags/{tag}"], text=True)) + existing = {item["name"]: item for item in release["assets"]} + for path in sorted(folder.iterdir()): + if not path.is_file(): + raise ValueError("GitHub release assets must be flat files") + if asset := existing.get(path.name): + with tempfile.TemporaryFile() as stream: + subprocess.run( + ["gh", "api", "-H", "Accept: application/octet-stream", f"repos/{repository}/releases/assets/{asset['id']}"], + stdout=stream, + check=True, + ) + stream.seek(0) + import hashlib + + if hashlib.file_digest(stream, "sha256").hexdigest() != digest(path): + raise ValueError(f"Refusing to replace published asset: {path.name}") + else: + subprocess.run(["gh", "release", "upload", tag, str(path), "--repo", repository], check=True) + + +def hub(folder, repository, kind): + from huggingface_hub import HfApi, hf_hub_download + + payload = verified_payload(folder) + api = HfApi(token=os.environ["HF_TOKEN"]) + tag = f"v{payload['package_version']}" if kind == "model" else f"source-{payload['source_commit']}" + # Account/repository creation is a separate owner task, not implicit here. + tags = {ref.name for ref in api.list_repo_refs(repository, repo_type=kind).tags} + if tag in tags: + existing = Path(hf_hub_download(repository, "publication.json", repo_type=kind, revision=tag, token=api.token)) + if json.loads(existing.read_text()) != payload: + raise ValueError(f"Refusing to replace published {kind} revision: {tag}") + print(f"Already published: {repository}@{tag}") + return + commit = api.upload_folder(repo_id=repository, repo_type=kind, folder_path=folder, commit_message=f"Publish {tag}") + api.create_tag(repo_id=repository, repo_type=kind, tag=tag, revision=commit.oid) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("kind", choices=("github", "model", "space")) + parser.add_argument("folder", type=Path) + parser.add_argument("repository") + parser.add_argument("--tag", default="MAMBO_v3") + args = parser.parse_args() + if args.kind == "github": + github(args.folder.resolve(), args.repository, args.tag) + else: + hub(args.folder.resolve(), args.repository, args.kind) diff --git a/dev/releases/mambo_v3/qualify_bundle.py b/dev/releases/mambo_v3/qualify_bundle.py new file mode 100644 index 0000000..e98c39d --- /dev/null +++ b/dev/releases/mambo_v3/qualify_bundle.py @@ -0,0 +1,89 @@ +"""Small real-image backend contract check; not a performance or accuracy benchmark.""" + +import argparse +import hashlib +import importlib.metadata +import json +from pathlib import Path + +import numpy as np + + +def qualify(bundle, dataset, device, backends, tta="none"): + from mambo_deploy import Predictor + + if "torch" in backends: + import torch + + torch.set_num_threads(2) + images = [] + for directory in sorted(dataset.iterdir()): + if directory.is_dir() and (paths := sorted(directory.glob("*.jpg"))): + images.append(paths[0]) + if len(images) == 4: + break + if len(images) != 4: + raise ValueError("Need four species directories containing JPEGs") + report = {"device": device, "tta": tta, "images": [], "variants": {}, "purpose": "bounded contract qualification; not a benchmark"} + for path in images: + with path.open("rb") as stream: + digest = hashlib.file_digest(stream, "sha256").hexdigest() + report["images"].append({"path": str(path), "sha256": digest}) + custom = None + for backend in backends: + predictor = Predictor(bundle, backend=backend, device=device, model="full", batch_size=2, tta=tta) + plain = predictor.predict(images) + embedded, vectors = predictor.predict_with_embeddings(images) + if plain.labels != embedded.labels: + raise AssertionError(f"{backend}: prediction-only and embedding graphs disagree on top-1") + if vectors.shape != (4, 1280) or not np.isfinite(vectors).all(): + raise AssertionError("Embedding shape/finite contract failed") + np.testing.assert_allclose(np.linalg.norm(vectors, axis=1), 1, atol=1e-4) + # Reuse loaded models while testing a regional mask and a custom list. + europe = predictor.bundle.file(predictor.bundle.regions["europe"]["path"]).read_text().splitlines() + predictor._apply_class_mask(europe) + regional = predictor.predict(images) + if any(item.label[0] not in europe for item in regional): + raise AssertionError("Regional filtering failed") + if custom is None: + custom = list(dict.fromkeys(item.label[0] for item in plain)) + predictor._apply_class_mask(custom) + limited, limited_vectors = predictor.predict_with_embeddings(images) + if any(item.label[0] not in custom for item in limited): + raise AssertionError("Custom filtering failed") + np.testing.assert_array_equal(vectors, limited_vectors) + report["variants"][backend] = { + "full": plain.to_dict(), + "europe": regional.to_dict(), + "custom": limited.to_dict(), + "embedding_shape": list(vectors.shape), + "prediction_modes_agree": True, + } + if backend == "onnx": + report["variants"][backend]["onnx_session_info"] = predictor.onnx_session_info + report["variants"][backend]["providers"] = {name: session.get_providers() for name, session in predictor._sessions.items()} + if len(backends) == 2: + for mode in ("full", "europe", "custom"): + a, b = (report["variants"][backend][mode] for backend in backends) + report[f"{mode}_backend_top1_agreement"] = sum(x["label"] == y["label"] for x, y in zip(a, b)) / len(a) + report["versions"] = {} + for name in ("numpy", "pillow", "torch", "onnxruntime", "onnxruntime-gpu", "mambo-v3"): + try: + report["versions"][name] = importlib.metadata.version(name) + except importlib.metadata.PackageNotFoundError: + pass + return report + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("bundle", type=Path) + parser.add_argument("dataset", type=Path) + parser.add_argument("--device", default="cpu") + parser.add_argument("--backends", nargs="+", choices=["torch", "onnx"], default=["torch", "onnx"]) + parser.add_argument("--tta", default="none") + parser.add_argument("--output", type=Path, required=True) + args = parser.parse_args() + report = qualify(args.bundle, args.dataset, args.device, args.backends, args.tta) + args.output.write_text(json.dumps(report, indent=2) + "\n") + print(args.output) diff --git a/dev/releases/mambo_v3/qualify_candidate.py b/dev/releases/mambo_v3/qualify_candidate.py new file mode 100644 index 0000000..b59cb72 --- /dev/null +++ b/dev/releases/mambo_v3/qualify_candidate.py @@ -0,0 +1,102 @@ +"""Qualify exact installed candidate wheels in an isolated CPU environment.""" + +import argparse +import json +import os +import subprocess +import tempfile +from pathlib import Path + +from dev.releases.mambo_v3.prepare_candidate import HERE, ROOT, digest +from dev.releases.mambo_v3.publication_assets import seal, verify + + +def qualify(candidate, dataset=None): + manifest = verify(candidate, qualified=False) + reports = candidate / "qualification" + reports.mkdir(exist_ok=False) + deployment = next((candidate / "dist").glob("mambo_v3-*.whl")) + training = next((candidate / "dist").glob("mt_trainer-*.whl")) + with tempfile.TemporaryDirectory(prefix="mambo-installed-") as directory: + work = Path(directory) + env = {**os.environ, "CUDA_VISIBLE_DEVICES": "", "GRADIO_ANALYTICS_ENABLED": "False", "MAMBO_CACHE": str(work / "cache")} + env.pop("PYTHONPATH", None) + env.pop("MAMBO_BUNDLE", None) + env.pop("MAMBO_OFFLINE", None) + subprocess.run(["uv", "venv", "--python", "3.13", str(work / "env")], check=True) + python = work / "env/bin/python" + + def run(*args): + subprocess.run([str(python), "-I", *map(str, args)], cwd=work, env=env, check=True) + + subprocess.run(["uv", "pip", "install", "--python", str(python), f"{deployment}[onnx]"], check=True) + run( + "-c", + "import importlib.util; assert importlib.util.find_spec('torch') is None; " + "assert importlib.util.find_spec('mini_trainer') is None", + ) + if dataset is None: + dataset = work / "images" + run( + "-c", + f"from pathlib import Path; from PIL import Image; p=Path({str(dataset)!r}); " + "[(p/str(i)).mkdir(parents=True) for i in range(4)]; " + "[Image.new('RGB',(96+i*7,80+i*11),(30+i*45,100,150)).save(p/str(i)/'fixture.jpg') for i in range(4)]", + ) + fixture_kind = "synthetic integration fixtures; no accuracy claim" + else: + dataset = dataset.resolve() + fixture_kind = "four retained real images; no new accuracy benchmark" + image = next(dataset.glob("*/*.jpg")) + run(HERE / "check_download_install.py", image, reports / "download.json") + env["MAMBO_OFFLINE"] = "1" + subprocess.run( + [str(python.parent / "mambo_predict"), "-i", str(image), "-o", str(work / "cli"), "--name", "smoke", "--tta", "--embeddings"], + cwd=work, + env=env, + check=True, + ) + run( + "-c", + f"import json,numpy as np; from pathlib import Path; p=Path({str(work / 'cli/smoke')!r}); " + "assert len(json.loads((p/'predictions.json').read_text())['results'])==1; " + "assert np.load(p/'embeddings.npy').shape==(1,1280); assert (p/'mini_metric.csv').is_file()", + ) + subprocess.run( + ["uv", "pip", "install", "--python", str(python), "--torch-backend", "cpu", str(training), f"{deployment}[torch]"], check=True + ) + for tta in ("none", "rotation30_pad25_3"): + run(HERE / "qualify_bundle.py", candidate / "mambo-v3-bundle", dataset, "--tta", tta, "--output", reports / f"cpu-{tta}.json") + subprocess.run(["uv", "pip", "install", "--python", str(python), "gradio==6.28.0"], check=True) + env["MAMBO_BUNDLE"] = str(candidate / "mambo-v3-bundle") + run(HERE / "qualify_demo.py", ROOT / "deployment/demo/app.py", image, reports / "demo.json") + subprocess.run(["uv", "pip", "check", "--python", str(python)], check=True) + packages = subprocess.check_output(["uv", "pip", "freeze", "--python", str(python)], text=True) + (reports / "environment.txt").write_text(packages) + (reports / "validation.json").write_text( + json.dumps( + { + "source_commit": manifest["source_commit"], + "fixture_kind": fixture_kind, + "wheel_sha256": {p.name: digest(p) for p in (deployment, training)}, + "onnx_without_torch": True, + "automatic_download_and_offline_cache": True, + "cli_tta_embeddings": True, + "cpu_backends_presets_custom_tta_embeddings": True, + }, + indent=2, + ) + + "\n" + ) + manifest["qualification"] = "passed" + (candidate / "release-candidate.json").write_text(json.dumps(manifest, indent=2) + "\n") + seal(candidate) + verify(candidate) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("candidate", type=Path) + parser.add_argument("--dataset", type=Path, help="Optional retained image directory; otherwise use synthetic fixtures") + args = parser.parse_args() + qualify(args.candidate.resolve(), args.dataset) diff --git a/dev/releases/mambo_v3/qualify_demo.py b/dev/releases/mambo_v3/qualify_demo.py new file mode 100644 index 0000000..6489aa1 --- /dev/null +++ b/dev/releases/mambo_v3/qualify_demo.py @@ -0,0 +1,52 @@ +"""Check the staged single-image UI with installed runtimes; never launch a server.""" + +import argparse +import json +import runpy +from pathlib import Path + +from PIL import Image + + +def qualify(app_path, image_path, output): + demo = runpy.run_path(str(app_path)) + interface = demo["build_app"]() + if not interface.blocks: + raise AssertionError("Empty demo interface") + records = [] + with Image.open(image_path) as source: + image = source.convert("RGB") + for backend in ("onnx", "torch"): + predictor = demo["predictor_for"](backend) + custom = predictor.class_list[0] + runtime = None + for preset, labels, tta in (("full", None, False), ("north_europe", "", True), ("full", custom, False)): + tables = demo["classify"](image, backend, preset, labels, tta, 5) + if not all(table and all(0 <= row[3] <= 100 and row[2] for row in table) for table in tables[:3]): + raise AssertionError("Missing predictions, taxon IDs or valid confidences") + current = predictor._torch_model if backend == "torch" else predictor._sessions["onnx"] + if runtime is not None and current is not runtime: + raise AssertionError("Changing demo configuration reloaded the runtime") + runtime = current + records.append( + { + "backend": backend, + "preset": preset, + "custom": bool(labels), + "tta": tta, + "rows": [len(table) for table in tables[:3]], + "status": tables[-1], + } + ) + if demo["predictor_for"].cache_info().currsize != 2: + raise AssertionError("Unexpected runtime cache size") + output.write_text(json.dumps({"controls": records, "runtime_reuse": True, "ui_constructed": True}, indent=2) + "\n") + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("app", type=Path) + parser.add_argument("image", type=Path) + parser.add_argument("output", type=Path) + args = parser.parse_args() + qualify(args.app, args.image, args.output) diff --git a/dev/releases/mambo_v3/qualify_precision.py b/dev/releases/mambo_v3/qualify_precision.py new file mode 100644 index 0000000..c5535a5 --- /dev/null +++ b/dev/releases/mambo_v3/qualify_precision.py @@ -0,0 +1,106 @@ +"""Bounded precision qualification: existing weights, all presets, FP32 output contracts.""" + +import argparse +import csv +import importlib.util +import time +from concurrent.futures import ThreadPoolExecutor +from pathlib import Path + +import numpy as np + +from deployment.mambo_deploy import Predictor +from deployment.mambo_deploy.preprocessing import prepare_batch, preprocess +from deployment.mambo_deploy.results import Prediction, hierarchy +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.releases.mambo_v3.evaluate import runtime_settings +from dev.releases.mambo_v3.evaluation_data import CSV_COLUMNS, PRESETS, canonical_rows, load_records, write_json + + +def qualify(args): + args.output.mkdir(parents=True, exist_ok=False) + runtime_settings(4, args.backend) + _, records = load_records(args.manifest, args.root, args.count, 20260923) + write_json(args.output / "samples.json", records) + report = {"status": "running", "variants": {}, "samples_sha256": file_hash(args.output / "samples.json")} + shared = None + try: + paths = [args.root / r["path"] for r in records] + if any(file_hash(p) != r["sha256"] for p, r in zip(paths, records, strict=True)): + raise ValueError("Image bytes changed") + if args.old_preprocessing: + spec = importlib.util.spec_from_file_location("old_recipe", args.old_preprocessing) + old = importlib.util.module_from_spec(spec) + spec.loader.exec_module(old) + for path in paths[:256]: + np.testing.assert_array_equal(preprocess(path), old.preprocess(path)) + report["preprocessing_exact_images"] = min(256, len(paths)) + for precision in args.precisions: + start = time.perf_counter() + predictor = Predictor( + args.bundle, backend=args.backend, device="cuda:0", model="full", batch_size=32, threads=4, precision=precision + ) + if shared is not None: + predictor._torch_model = shared + runtime = predictor._torch if args.backend == "torch" else predictor._onnx + with ThreadPoolExecutor(max_workers=4) as pool: + outputs, vectors = [], [] + for offset in range(0, len(paths), 32): + x = prepare_batch(paths[offset : offset + 32], pool) + leaves, embedding = runtime(x, True) + assert leaves.dtype == embedding.dtype == np.float32 + assert embedding.shape == (len(x), 1280) + assert np.isfinite(leaves).all() and np.isfinite(embedding).all() + np.testing.assert_allclose(np.linalg.norm(embedding, axis=1), 1, atol=1e-4) + if offset < 256: + plain, _ = runtime(x, False) + np.testing.assert_array_equal(np.argmax(plain, axis=1), np.argmax(leaves, axis=1)) + outputs.append(leaves) + vectors.append(embedding) + raw = np.concatenate(outputs) + destination = args.output / precision + destination.mkdir() + np.save(destination / "embeddings.npy", np.concatenate(vectors), allow_pickle=False) + for preset in PRESETS: + selector = Predictor(args.bundle, model=preset) + result = Prediction(*hierarchy(raw, selector.selected, selector.bundle.classes)) + folder = destination / preset + folder.mkdir() + with (folder / "mini_metric.csv").open("w", newline="") as stream: + writer = csv.writer(stream) + writer.writerow(CSV_COLUMNS) + writer.writerows(canonical_rows(records, result)) + # Public API, custom-list filtering, threaded preparation and embedding path. + predictor._apply_class_mask(selector.class_list[:3]) + public, embedding = predictor.predict_with_embeddings(paths[:8]) + assert all(item.label[0] in selector.class_list[:3] for item in public) + assert public.labels == predictor.predict(paths[:8]).labels + _, direct_embedding = runtime(prepare_batch(paths[:8]), True) + np.testing.assert_array_equal(embedding, direct_embedding) + shared = predictor._torch_model + report["variants"][precision] = { + "seconds": time.perf_counter() - start, + "finite": True, + "embedding_dtype": "float32", + "prediction_modes_agree_first256": True, + "custom_list": True, + } + write_json(args.output / "report.json", report) + print(precision, report["variants"][precision], flush=True) + report["status"] = "complete" + except Exception as error: + report.update(status="failed", error=str(error)) + raise + finally: + write_json(args.output / "report.json", report) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + for name in ("bundle", "manifest", "root", "output"): + parser.add_argument("--" + name, type=Path, required=True) + parser.add_argument("--old-preprocessing", type=Path) + parser.add_argument("--backend", choices=["torch", "onnx"], required=True) + parser.add_argument("--precisions", nargs="+", required=True) + parser.add_argument("--count", type=int, default=4096) + qualify(parser.parse_args()) diff --git a/dev/releases/mambo_v3/reconstruct_presets.py b/dev/releases/mambo_v3/reconstruct_presets.py new file mode 100644 index 0000000..71168d9 --- /dev/null +++ b/dev/releases/mambo_v3/reconstruct_presets.py @@ -0,0 +1,67 @@ +"""Reconstruct frozen regional membership from the pinned local Parquet metadata.""" + +import argparse +import json +import tomllib +from pathlib import Path + +from dev.releases.mambo_v3.audit import HERE, sha256 + + +def region_counts(table, column, values): + import pyarrow as pa + import pyarrow.compute as pc + + selected = table.filter(pc.is_in(table[column], value_set=pa.array(values))) + if selected["speciesKey"].null_count: + raise ValueError("Selected metadata contains null species IDs") + counts = selected["speciesKey"].value_counts().to_pylist() + return {row["values"]: row["counts"] for row in counts} + + +def membership(counts, threshold): + return {species for species, count in counts.items() if count > threshold} + + +def reconstruct(metadata): + import pyarrow.parquet as pq + + config = tomllib.loads((HERE / "construction.toml").read_text()) + source = config["source"] + if metadata.stat().st_size != source["size"] or sha256(metadata) != source["sha256"]: + raise ValueError("Source Parquet differs from pinned metadata") + table = pq.read_table(metadata, columns=["speciesKey", "countryCode", "continent"]) + if table.num_rows != source["rows"]: + raise ValueError("Unexpected metadata row count") + report = {"source_sha256": source["sha256"], "rows": table.num_rows, "regions": {}} + for name in ("europe", "north_europe"): + rule = config[name] + counts = region_counts(table, rule["column"], rule["values"]) + actual = membership(counts, rule["exclusive_minimum_rows"]) + expected = set((HERE / "presets" / f"{name}.classes").read_text().splitlines()) + if actual != expected: + raise ValueError(f"{name} differs: missing={len(expected - actual)}, extra={len(actual - expected)}") + stats = { + "selected_rows": sum(counts.values()), + "species_before_threshold": len(counts), + "species_after_threshold": len(actual), + } + if any(value != rule[key] for key, value in stats.items()): + raise ValueError(f"{name} count totals differ from reconstruction record") + report["regions"][name] = stats + northern = config["north_europe"] + base = set((HERE / "presets/north_europe.classes").read_text().splitlines()) + for label, extra in (("neutral_additions", northern["membership_neutral_additions"]), ("with_GB", ["GB"])): + counts = region_counts(table, "countryCode", northern["values"] + extra) + actual = membership(counts, northern["exclusive_minimum_rows"]) + report["regions"]["north_europe"][label] = {"extra": len(actual - base), "missing": len(base - actual)} + if label == "neutral_additions" and actual != base: + raise ValueError("Documented neutral countries change membership") + return report + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("metadata", type=Path) + args = parser.parse_args() + print(json.dumps(reconstruct(args.metadata), indent=2)) diff --git a/dev/releases/mambo_v3/release-comparison.md b/dev/releases/mambo_v3/release-comparison.md new file mode 100644 index 0000000..5d2d6f5 --- /dev/null +++ b/dev/releases/mambo_v3/release-comparison.md @@ -0,0 +1,140 @@ +# Historical V2/V3 comparison workflow + +Reproduce the original Flemming comparison of V2's published pipeline and V3 +FP32. It predates acceleration/TTA; use [current results](../../../deployment/README.md#release-comparison) +for adoption and the [UCloud runbook](ucloud-release.md) for a new campaign. +Run from the repository root. Replaying collection against today's adapter +measures a different pipeline; figures can be rebuilt directly from retained data. + +## Historical model identity + +The V2 runner verifies source commit `32b3cd661778356b2e8c4cff5b10fa9061aa6f5d`, +head hashes from [inventory.toml](inventory.toml), and external BioCLIP-2 hashes. +Heads share learned tensors and differ only by regional masks, allowing shared +features during collection. Head hashes record retrieval, not independent signatures. + +Export the original source without switching this release branch: + +```sh +mkdir -p /path/to/v2-source +git archive 32b3cd661778356b2e8c4cff5b10fa9061aa6f5d mini_trainer | tar -x -C /path/to/v2-source +``` + +Use a separate runtime and preserve the existing CUDA environment. The original +comparison used Python 3.13, PyTorch 2.12.0+cu130 / torchvision 0.27.0 and +open_clip_torch 3.3.0; the historical runbook linked below retains the full version +list. This was a contemporary comparison environment, not V2's original lock. + +The offline Hugging Face cache must contain `imageomics/bioclip-2` snapshot +`2957b322090f9cb17ae72c71981c7218a28d81e0`. The runner's +[backbone verification](legacy_evaluation.py) pins both configuration and weights +by SHA-256. Download before timing, then set `HF_HUB_OFFLINE=1` and `HF_HUB_CACHE`. +Put the original source first on `PYTHONPATH` and use `python -P` so the current +checkout cannot shadow it. The [UCloud setup](ucloud-release.md#setup-with-uv) +automates source extraction and asset retrieval for that workflow. + +## Qualification and full quality + +```sh +HF_HUB_OFFLINE=1 HF_HUB_CACHE=/path/to/pinned-cache \ +PYTHONPATH=/path/to/v2-source:/path/to/mini_trainer \ +/path/to/v2-env/bin/python -P -m dev.releases.mambo_v3.legacy_evaluation qualification \ + --source /path/to/v2-source --weights /path/to/MAMBO \ + --manifest /path/to/flemming-manifest.json --root /path/to/flemming \ + --output /path/to/new-qualification +``` + +Qualification compares shared-backbone outputs with original API calls on 256 +images for each list. Full collection rechecks its first batch and verifies image +hashes. Replace `qualification` with `full`, using output +`/path/to/v2-full-phase/v2-full` for the chart aggregator's layout. + +Use the [pinned metric workflow](evaluation.md#metrics), retaining unknown truth. +[Metric definitions](../../../docs/mambo-release-comparison.md#prediction-quality) +cover macro/micro averages and all/known populations. Verify paired sample identity +and truth before interpreting changes. + +## Speed and memory + +`release_comparison.py benchmark` runs three fresh-process trials of v2 PyTorch +and v3 PyTorch/ONNX on CPU and CUDA, in alternating order. Arguments: + +```sh +python -m dev.releases.mambo_v3.release_comparison benchmark \ + --v2-python /path/to/v2-env/bin/python --v3-python /path/to/v3-env/bin/python \ + --legacy-source /path/to/v2-source --legacy-weights /path/to/MAMBO \ + --hf-cache /path/to/pinned-cache --bundle /path/to/v3-bundle \ + --manifest /path/to/flemming-manifest.json --root /path/to/flemming \ + --output /path/to/new-comparison-timings +``` + +The historical protocol uses the same seeded 32-image bank, four CPU threads, +two warmups and seven observations per cell: CPU batches 1/8, GPU 1/8/32, +predictions only. Do not overlap trials with other heavy work. The added V3 trials +cover legacy Europe and both northern lists, complementing the original +global/updated-Europe sweep. Keep adapter revisions consistent across those inputs. + +Two distinctions are essential for interpreting the comparison: + +- V2 CPU needed `--cpu-float32` because its bfloat16 inputs met float32 weights. + The orchestrator selects this value-preserving input cast only for CPU; + historical source/weights and the CUDA path remain unchanged. +- V2 uses an initial 512-pixel resize, BioCLIP's 224-pixel preprocessing and CUDA + FP16 autocast; V3 uses 384 pixels and FP32. Both disable TF32. This compares + release pipelines, not isolated backbones. V2 has no qualified ONNX variant. + +[Shared timing boundaries](evaluation.md#timing-and-summary) define end-to-end, +startup and memory measurements. RSS uses full-list-containing sweeps; startup +includes construction and the first completed call with cached assets. Collection +wall time is not a backend speed comparison. + +## Rebuild the charts + +```sh +python -m dev.releases.mambo_v3.comparison_charts \ + --v2-quality /path/to/v2-full-phase --v3-quality /path/to/v3-full-phase \ + --v3-performance /path/to/original-v3-timings \ + --added-performance /path/to/new-comparison-timings --output /path/to/charts +``` + +Aggregation requires complete runs, unchanged metric inputs, matching populations, +metric revisions and image banks, and three timing trials per cell. It copies +`mini_metrics` scores at all ranks and both scopes; it computes no predictive +metrics. Keep raw predictions/observations outside Git and retain their hashes. + +To regenerate retained figures and the complete metric CSV without private inputs: + +```sh +.venv/bin/python -m dev.releases.mambo_v3.comparison_charts \ + --data docs/assets/mambo-release-comparison.json --output /tmp/mambo-fp32-figures +``` + +## Evidence and regression coverage + +The original local evidence remains under: + +| Evidence | Ignored location | +| --- | --- | +| Full V2 quality | `local-evidence/mambo-release-comparison-quality/v2-full/` | +| Successful additional timings | `local-evidence/mambo-release-comparison-performance-cpu-adapter/` | +| Unadapted V2 CPU failure | `local-evidence/mambo-release-comparison-performance/trial-0-v2-cpu/report.json` | +| Original V3 quality and timings | `local-evidence/mambo-v3/` | + +These paths describe the retained local archive, not files shipped in the package. +Interrupted processes are excluded; each reported timing cell has three successful +trials. The [historical runbook](https://github.com/asgersvenning/mini_trainer/blob/b24a559b26849a57e83770335e6af00b08822807/dev/releases/mambo_v3/release-comparison.md) +retains individual retry and metric-migration details. Use the +[evidence policy](evidence-policy.md) when extending comparisons. + +For changes to metric extraction, the focused integration regression checks +imbalanced classes, excluded truth, macro/micro averages and F1 through the real +pinned `mini_metrics` API: + +```sh +MAMBO_METRICS_PYTHON=/path/to/metrics-env/bin/python \ + bash dev/check.sh test tests/releases/test_release_evaluation.py \ + -k pinned_metrics_distinguish_micro_macro_and_known_truth +``` + +For performance changes use the [pipeline review](../../../docs/mambo-inference-pipeline-review.md) +and [small speed check](speed-smoke.md), not a repeated full historical campaign. diff --git a/dev/releases/mambo_v3/release_comparison.py b/dev/releases/mambo_v3/release_comparison.py new file mode 100644 index 0000000..5be0056 --- /dev/null +++ b/dev/releases/mambo_v3/release_comparison.py @@ -0,0 +1,106 @@ +"""Run v2 quality or additional v2/v3 timings sequentially in isolated processes.""" + +import argparse +import json +import os +import subprocess +from pathlib import Path + +from dev.releases.mambo_v3.evaluation_data import write_json + + +def run(args): + args.output.mkdir(parents=True, exist_ok=False) + root = Path(__file__).resolve().parents[3] + shared = ["--manifest", str(args.manifest.resolve()), "--root", str(args.root.resolve())] + legacy = [ + str(args.v2_python), + "-P", + "-m", + "dev.releases.mambo_v3.legacy_evaluation", + args.phase, + "--source", + str(args.legacy_source.resolve()), + "--weights", + str(args.legacy_weights.resolve()), + *shared, + ] + jobs = [] + if args.phase == "full": + jobs.append(("v2-full", legacy, True)) + else: + # Reuse existing v3 full/updated-Europe timings; add both northern lists and legacy Europe. + variants = [(release, device) for device in ("cpu", "cuda:0") for release in ("v2", "v3-torch", "v3-onnx")] + for trial in range(3): + for release, device in variants if trial != 1 else reversed(variants): + name = f"trial-{trial}-{release}-{device.replace(':', '-')}" + if release == "v2": + command = [*legacy, "--device", device] + if device == "cpu": + command.append("--cpu-float32") + else: + command = [ + str(args.v3_python), + "-m", + "dev.releases.mambo_v3.benchmark", + *shared, + "--bundle", + str(args.bundle.resolve()), + "--device", + device, + "--backend", + release[3:], + "--presets", + "north_europe", + "north_europe_v3", + "europe", + "--threads", + "4", + ] + if device == "cpu": + command += ["--batches", "1", "8"] + jobs.append((name, command, release == "v2")) + plan = {"status": "running", "jobs": jobs, "completed": []} + write_json(args.output / "plan.json", plan) + try: + for name, command, old in jobs: + env = dict( + os.environ, + OMP_NUM_THREADS="4", + MKL_NUM_THREADS="4", + OPENBLAS_NUM_THREADS="1", + CUDA_VISIBLE_DEVICES="0", + PYTHONHASHSEED="0", + HF_HUB_OFFLINE="1", + HF_HUB_CACHE=str(args.hf_cache.resolve()), + PYTHONPATH=f"{args.legacy_source.resolve()}:{root}" if old else str(root), + ) + print(name, flush=True) + with (args.output / f"{name}.log").open("w") as stream: + subprocess.run( + [*command, "--output", str((args.output / name).resolve())], + env=env, + check=True, + stdout=stream, + stderr=subprocess.STDOUT, + cwd=root, + ) + report = json.loads((args.output / name / "report.json").read_text()) + if report["status"] != "complete": + raise RuntimeError(f"Incomplete comparison: {name}") + plan["completed"].append(name) + write_json(args.output / "plan.json", plan) + plan["status"] = "complete" + except Exception as error: + plan.update(status="failed", error=f"{type(error).__name__}: {error}") + raise + finally: + write_json(args.output / "plan.json", plan) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("phase", choices=("full", "benchmark")) + for name in ("v2-python", "v3-python", "legacy-source", "legacy-weights", "hf-cache", "bundle", "manifest", "root", "output"): + parser.add_argument(f"--{name}", type=Path, required=True) + run(parser.parse_args()) diff --git a/dev/releases/mambo_v3/run_local.py b/dev/releases/mambo_v3/run_local.py new file mode 100644 index 0000000..2e34e9c --- /dev/null +++ b/dev/releases/mambo_v3/run_local.py @@ -0,0 +1,118 @@ +"""Run a bounded release phase sequentially; each variant/trial uses a fresh process.""" + +import argparse +import itertools +import json +import os +import subprocess +import sys +from pathlib import Path + +from deployment.mambo_deploy.augmentation import DEFAULT_TTA, PROFILES +from dev.releases.mambo_v3.evaluation_data import write_json + + +def plan(args): + shared = ["--bundle", str(args.bundle.resolve()), "--manifest", str(args.manifest.resolve()), "--root", str(args.root.resolve())] + shared += ["--precision", args.precision, "--tta", getattr(args, "tta", "none")] + jobs = [] + if args.phase in ("qualification", "full"): + variants = ( + itertools.product(("cpu", "cuda:0"), ("torch", "onnx"), (False, True)) + if args.phase == "qualification" + else [("cuda:0", "torch", False), ("cuda:0", "onnx", False)] + ) + for device, backend, embeddings in variants: + name = f"{backend}-{device.replace(':', '-')}-{'embedding' if embeddings else 'prediction'}" + command = [ + str(args.python), + "-m", + "dev.releases.mambo_v3.evaluate", + "collect", + *shared, + "--backend", + backend, + "--device", + device, + "--batch-size", + "32", + "--threads", + "4", + ] + if embeddings: + command.append("--embeddings") + if args.phase == "qualification": + command += ["--count", str(args.count)] + jobs.append((name, command)) + else: + variants = list(itertools.product(("cpu", "cuda:0"), ("torch", "onnx"), (False, True))) + for trial in range(3): + for device, backend, embeddings in variants if trial % 2 == 0 else list(reversed(variants)): + for threads in [4, 1] if device == "cpu" else [4]: + name = f"trial-{trial}-{backend}-{device.replace(':', '-')}-{'embedding' if embeddings else 'prediction'}-t{threads}" + command = [ + str(args.python), + "-m", + "dev.releases.mambo_v3.benchmark", + *shared, + "--backend", + backend, + "--device", + device, + "--threads", + str(threads), + ] + if embeddings: + command.append("--embeddings") + # Single-thread runs qualify interactive latency; practical thread runs sweep all batches. + if threads == 1: + command += ["--batches", "1"] + elif device == "cpu": + command += ["--batches", "1", "8"] + jobs.append((name, command)) + return [(name, [*command, "--output", str((args.output / name).resolve())]) for name, command in jobs] + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("phase", choices=["qualification", "full", "benchmark"]) + for name in ("bundle", "manifest", "root", "output"): + parser.add_argument(f"--{name}", type=Path, required=True) + parser.add_argument("--python", type=Path, default=Path(sys.executable)) + parser.add_argument("--count", type=int, default=256) + parser.add_argument("--precision", choices=["auto", "fp32", "fp16", "bf16", "tf32"], default="fp32") + parser.add_argument("--tta", nargs="?", const=DEFAULT_TTA, choices=PROFILES, default="none") + args = parser.parse_args() + args.output.mkdir(parents=True, exist_ok=False) + jobs = plan(args) + record = {"phase": args.phase, "status": "running", "commands": jobs, "completed": []} + write_json(args.output / "plan.json", record) + environment = dict( + os.environ, + CUDA_VISIBLE_DEVICES="0", + PYTHONHASHSEED="0", + OMP_NUM_THREADS="4", + MKL_NUM_THREADS="4", + OPENBLAS_NUM_THREADS="1", + MPLBACKEND="Agg", + ) + try: + for name, command in jobs: + print(name, flush=True) + with (args.output / f"{name}.log").open("w") as stream: + subprocess.run(command, env=environment, stdout=stream, stderr=subprocess.STDOUT, check=True) + report = json.loads((args.output / name / "report.json").read_text()) + if report["status"] != "complete": + raise RuntimeError(f"Incomplete variant: {name}") + record["completed"].append(name) + write_json(args.output / "plan.json", record) + record["status"] = "complete" + except Exception as error: + record.update(status="failed", error=f"{type(error).__name__}: {error}") + raise + finally: + write_json(args.output / "plan.json", record) + + +if __name__ == "__main__": + main() diff --git a/dev/releases/mambo_v3/runtime-requirements.in b/dev/releases/mambo_v3/runtime-requirements.in new file mode 100644 index 0000000..c08fb48 --- /dev/null +++ b/dev/releases/mambo_v3/runtime-requirements.in @@ -0,0 +1,5 @@ +# Install from the repository root. Runtime ranges come from the packages; +# only the metric implementation is fixed to preserve comparison semantics. +./deployment[onnx-cuda] +.[recommended,bioclip,timm] +mini_metrics @ git+https://github.com/GuillaumeMougeot/mini_metrics.git@70cc69adc05362863439277048e06386c1f885e1 diff --git a/dev/releases/mambo_v3/setup_ucloud_release.py b/dev/releases/mambo_v3/setup_ucloud_release.py new file mode 100644 index 0000000..351669c --- /dev/null +++ b/dev/releases/mambo_v3/setup_ucloud_release.py @@ -0,0 +1,123 @@ +"""Prepare cached public models and the original test split from one Parquet path.""" + +import argparse +import io +import json +import os +import socket +import subprocess +import sys +import tarfile +import tomllib +from pathlib import Path + +from deployment.mambo_deploy.bundle import Bundle +from deployment.mambo_deploy.download import default_bundle, fetch_file +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.releases.mambo_v3.audit import HERE +from dev.releases.mambo_v3.evaluation_data import write_json +from dev.releases.mambo_v3.hash_images import hash_images +from dev.releases.mambo_v3.legacy_evaluation import COMMIT +from dev.releases.mambo_v3.prepare_ucloud import recover + + +def prepare_legacy_source(source): + """Extract the pinned package with paths relative to the repository root.""" + if not source.exists(): + source.parent.mkdir(parents=True, exist_ok=True) + archive = subprocess.check_output(["git", "archive", COMMIT, "mini_trainer"], cwd=HERE.parents[2]) + source.mkdir() + with tarfile.open(fileobj=io.BytesIO(archive)) as stream: + stream.extractall(source, filter="data") + + +def setup(args): + metadata = args.metadata.resolve() + expected = tomllib.loads((HERE / "construction.toml").read_text())["source"]["sha256"] + if file_hash(metadata) != expected: + raise ValueError("Original metadata snapshot hash mismatch") + root = (args.root or metadata.parent).resolve() + cache = args.cache.expanduser().resolve() + cache.mkdir(parents=True, exist_ok=True) + os.environ["MAMBO_CACHE"] = str(cache / "models") + if args.offline: + os.environ["MAMBO_OFFLINE"] = "1" + bundle_path = default_bundle() + bundle = Bundle(bundle_path, download=True) + for relative in bundle.manifest["files"]: + bundle.file(relative) + inventory = tomllib.loads((HERE / "inventory.toml").read_text()) + production = inventory["production"] + suffixes = ("evaluation/in-domain/provenance/staging.json", "evaluation/in-domain/predictions/mini_metric.csv") + needed = [a for a in inventory["artifacts"] if a["path"].startswith("MAMBO/") or a["path"] in [f"{production}/{p}" for p in suffixes]] + for item in needed: + fetch_file(item["url"], cache / "archives" / item["path"], size=item["size"], sha256=item["sha256"], offline=args.offline) + source = cache / "legacy-source" / COMMIT + prepare_legacy_source(source) + from huggingface_hub import hf_hub_download + + hf_cache = cache / "huggingface/hub" + for name, digest in { + "open_clip_config.json": "1bf947e96e943fe50efd5c3e26c37f843a2fa3c358967719a68c8a6d17ce68c8", + "open_clip_model.safetensors": "b7b2bf6fbc95799e42630e394cf95803892ab447c1a8ab629dbc82fbeaf7dfef", + }.items(): + path = hf_hub_download( + "imageomics/bioclip-2", + name, + revision="2957b322090f9cb17ae72c71981c7218a28d81e0", + cache_dir=hf_cache, + local_files_only=args.offline, + ) + if file_hash(path) != digest: + raise ValueError("Unexpected BioCLIP-2 backbone") + # The legacy API requests the default branch; point its offline ref to the verified snapshot. + refs = hf_cache / "models--imageomics--bioclip-2/refs" + refs.mkdir(parents=True, exist_ok=True) + (refs / "main").write_text("2957b322090f9cb17ae72c71981c7218a28d81e0") + staging, reference = [cache / "archives" / production / suffix for suffix in suffixes] + manifest = cache / "global-lepi-test-manifest.json" + provenance = {k: file_hash(v) for k, v in [("metadata", metadata), ("staging", staging), ("reference", reference)]} + provenance["test_set"] = "0" + if manifest.exists(): + prior = json.loads(manifest.read_text()) + if prior.get("provenance") != provenance or len(prior["records"]) != 632913: + raise ValueError("Cached manifest differs from original split provenance") + else: + records = recover(metadata, staging, reference) + if len(records) != 632913: + raise ValueError("Expected original 632,913-image test split") + hash_images(records, root, cache / "image-hashes.sqlite3", provenance, workers=args.hash_workers) + temporary = manifest.with_suffix(".partial.json") + write_json(temporary, {"schema_version": 1, "dataset": "global-lepi-test", "provenance": provenance, "records": records}) + temporary.replace(manifest) + config = json.loads((HERE / "ucloud_release.json").read_text()) + config.update( + environment_id=socket.gethostname(), + v2_python=str(args.v2_python or sys.executable), + v3_python=sys.executable, + metrics_python=str(args.metrics_python or sys.executable), + legacy_source=str(source), + legacy_weights=str(cache / "archives/MAMBO"), + hf_cache=str(hf_cache), + bundle=str(bundle_path), + manifest=str(manifest), + root=str(root), + output=str(cache / "runs"), + ) + output = cache / "ucloud-release.json" + if output.exists() and json.loads(output.read_text()) != config: + raise ValueError("Existing run configuration differs; preserve it or choose a new cache") + write_json(output, config) + print(f"Ready: {output}", flush=True) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--metadata", type=Path, required=True) + parser.add_argument("--root", type=Path, help="Defaults to the Parquet parent; expects images/species/filename below it") + parser.add_argument("--cache", type=Path, default=Path.home() / ".cache/mambo-ucloud") + parser.add_argument("--v2-python", type=Path) + parser.add_argument("--metrics-python", type=Path) + parser.add_argument("--hash-workers", type=int, help="Concurrent image readers; default twice CPU affinity, minimum 8, maximum 256") + parser.add_argument("--offline", action="store_true") + setup(parser.parse_args()) diff --git a/dev/releases/mambo_v3/speed-smoke.md b/dev/releases/mambo_v3/speed-smoke.md new file mode 100644 index 0000000..34ce8ad --- /dev/null +++ b/dev/releases/mambo_v3/speed-smoke.md @@ -0,0 +1,73 @@ +# Short UCloud deployment speed check + +Use a full B200 node with `/work/datasets` mounted. The fresh-node workflow is: + +1. Install [uv](https://docs.astral.sh/uv/getting-started/installation/): + + ```sh + curl -LsSf https://astral.sh/uv/install.sh | sh + source "$HOME/.local/bin/env" + ``` + +2. Clone the release branch: + + ```sh + cd /work + git clone --branch release/mambo-v3 https://github.com/asgersvenning/mini_trainer.git + cd mini_trainer + ``` + +3. Create and activate the environment, then install its dependencies: + + ```sh + uv venv --python 3.13 .venv-mambo-runtime + source .venv-mambo-runtime/bin/activate + uv pip install --torch-backend=auto -e '.[timm]' -e ./deployment pyarrow + ``` + +4. Run the experiment: + + ```sh + export MAMBO_CACHE=/work/mambo-cache + python -m dev.releases.mambo_v3.speed_smoke \ + --metadata /work/datasets/global_lepi/0032836-250426092105405_processing_metadata_postprocessed_quality_filtered.parquet \ + --output /work/mambo-speed/b200-full-gather + ``` + +The command uses uv to prepare/reuse the B200-qualified ONNX Runtime 1.22.0 in +`$MAMBO_CACHE/speed-onnx-1.22`, separately from the active Torch environment. +This is specific to the B200 experiment, not a deployment-wide version pin. +To reuse an existing ONNX interpreter instead, supply `--onnx-python /path/to/python`; +that bypasses automatic environment setup. Model assets download automatically. + +The test selects and warms the same 4,096 original test images, using batch 256, +the global list, auto precision and no embeddings. It runs **PyTorch, ONNX, and +both with default TTA**, with three streaming passes per variant. Preparation +workers follow the CPU quota, capped at 48; `--workers N` overrides this if needed. +Keep sample, batch and worker settings unchanged for the pipeline comparison. + +Initial dependency/model downloads and cold storage add setup time. Each completed +variant prints a row and updates `summary.csv`; runtime output/errors are in its +`.log`. Outputs remain under `/work`. Choose a fresh output directory each run. +No campaign configuration, full-data hashing, quality evaluation or MIG rerun is +needed. A MIG comparison is optional when it answers a specific deployment question. + +Return the complete reports after completion: + +```sh +cat /work/mambo-speed/b200-full-gather/summary.csv +tar -czf /work/mambo-speed/b200-full-gather.tar.gz \ + -C /work/mambo-speed b200-full-gather +``` + +The archive retains raw timings, preparation counters, runtime versions, CPU/GPU +identity, host memory and Torch allocator peak GPU memory. Streaming images/s is +the primary comparison. Request timing is a separate API measurement; the +prepared-input diagnostic is single-view even in TTA reports. Memory figures are +not all-backend GPU peaks. This is a warm-storage speed check, not cold WEKA throughput. +The existing resident reference at batch 256 is 3,667 images/s; it excludes transfers +and CPU result construction and remains a reference, not an end-to-end promise. + +For targeted local diagnosis, the [pipeline probe and stage traces](pipeline-probe.md) +separate preparation, transfers and results from model execution. They are not +additional required steps for this experiment. diff --git a/dev/releases/mambo_v3/speed_smoke.py b/dev/releases/mambo_v3/speed_smoke.py new file mode 100644 index 0000000..3bc230d --- /dev/null +++ b/dev/releases/mambo_v3/speed_smoke.py @@ -0,0 +1,170 @@ +"""One small four-variant GPU speed check; no campaign setup or full-data hashing.""" + +import argparse +import json +import math +import os +import random +import subprocess +import sys +from concurrent.futures import ThreadPoolExecutor +from pathlib import Path + +import pyarrow.compute as pc +import pyarrow.parquet as pq + +from deployment.mambo_deploy import Predictor +from deployment.mambo_deploy.augmentation import DEFAULT_TTA +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.releases.mambo_v3.evaluation_data import write_json + +SEED = 20260923 + + +def workers(): + count = len(os.sched_getaffinity(0)) + quota = Path("/sys/fs/cgroup/cpu.max") + if quota.exists(): + limit, period = quota.read_text().split() + if limit != "max": + count = min(count, math.ceil(int(limit) / int(period))) + return min(count, 48) + + +def sample(metadata, count=4096): + table = pq.read_table(metadata, columns=["filename", "set", "speciesKey", "genusKey", "familyKey"]) + table = table.filter(pc.equal(table["set"], "0")) + if len(table) < count: + raise ValueError(f"Need {count} test images, found {len(table)}") + rows = table.take(random.Random(SEED).sample(range(len(table)), count)).to_pylist() + records = [] + root = metadata.parent.resolve() + for row in rows: + path = f"images/{row['speciesKey']}/{row['filename']}" + if not (root / path).resolve().is_relative_to(root): + raise ValueError(f"Unsafe image path: {path}") + records.append({"path": path, "labels": [row[k] for k in ("speciesKey", "genusKey", "familyKey")], "split": "test"}) + return records + + +def prepare_onnx_runtime(): + """Keep the B200-qualified CUDA 12 runtime separate from the active Torch environment.""" + cache = Path(os.environ.get("MAMBO_CACHE", Path.home() / ".cache/mambo")).expanduser() + environment = cache / "speed-onnx-1.22" + interpreter = environment / "bin/python" + print(f"Preparing isolated ONNX runtime: {environment}", flush=True) + if not interpreter.is_file(): + subprocess.run(["uv", "venv", "--python", "3.13", str(environment)], check=True) + subprocess.run( + [ + "uv", + "pip", + "install", + "--python", + str(interpreter), + "onnxruntime-gpu[cuda,cudnn]==1.22.0", + "-e", + str(Path(__file__).resolve().parents[3] / "deployment"), + ], + check=True, + ) + return interpreter + + +def run(args): + if args.output.exists(): + raise FileExistsError(args.output) + args.onnx_python = args.onnx_python or prepare_onnx_runtime() + args.output.mkdir(parents=True, exist_ok=False) + prepare_workers = args.workers or workers() + root = args.metadata.resolve().parent + print("Selecting and warming 4,096 test images; the full dataset is not scanned for images.", flush=True) + records = sample(args.metadata) + with ThreadPoolExecutor(max_workers=128) as pool: + for record, digest in zip(records, pool.map(file_hash, (root / r["path"] for r in records)), strict=True): + record["sha256"] = digest + manifest = args.output / "sample.json" + write_json(manifest, {"schema_version": 1, "dataset": "global-lepi-speed-sample", "records": records}) + write_json( + args.output / "environment.json", + { + "commit": subprocess.check_output(["git", "rev-parse", "HEAD"], text=True).strip(), + "gpu": subprocess.check_output(["nvidia-smi"], text=True), + "gpu_instances": subprocess.check_output(["nvidia-smi", "-L"], text=True), + "cuda_visible_devices": os.environ.get("CUDA_VISIBLE_DEVICES"), + "cpu_max": Path("/sys/fs/cgroup/cpu.max").read_text() if Path("/sys/fs/cgroup/cpu.max").exists() else None, + "prepare_workers": prepare_workers, + "metadata_sha256": file_hash(args.metadata), + "sample_sha256": file_hash(manifest), + }, + ) + print("Checking/downloading the standard release weights.", flush=True) + bundle = Predictor().bundle + bundle.profile("torch") + bundle.profile("onnx") + summary = ["variant,stream_images_per_second,request_images_per_second,peak_host_gib"] + for backend, tta in (("torch", "none"), ("onnx", "none"), ("torch", DEFAULT_TTA), ("onnx", DEFAULT_TTA)): + name = backend + ("-tta" if tta != "none" else "") + print(f"{name}: batch 256, {prepare_workers} preparation workers; three streaming passes", flush=True) + output = args.output / name + options = { + "bundle": bundle.root, + "manifest": manifest, + "root": root, + "output": output, + "backend": backend, + "device": "cuda:0", + "precision": "auto", + "tta": tta, + "batches": 256, + "presets": "full", + "bank-size": 256, + "stream-images": 4096, + "repeats": 3, + "warmup": 2, + "threads": 4, + "stream-workers": prepare_workers, + "read-workers": 128, + "read-window": 4096, + "prefetch-batches": 2, + "encoded-budget-mib": 1024, + } + interpreter = str(args.onnx_python) if backend == "onnx" else sys.executable + command = [interpreter, "-m", "dev.releases.mambo_v3.benchmark"] + command.extend(part for key, value in options.items() for part in ("--" + key, str(value))) + with (args.output / f"{name}.log").open("w") as log: + try: + subprocess.run(command, check=True, stdout=log, stderr=subprocess.STDOUT) + except subprocess.CalledProcessError: + print(f"Failed; inspect {args.output / (name + '.log')}", flush=True) + raise + report = json.loads((output / "report.json").read_text()) + cell = report["cells"][0] + row = ( + f"{name},{cell['streaming']['images_per_second']:.1f}," + f"{cell['images_per_second']:.1f},{report['peak_rss_kib_linux'] / 1024**2:.2f}" + ) + summary.append(row) + (args.output / "summary.csv").write_text("\n".join(summary) + "\n") + print(row, flush=True) + print(f"Done: {args.output / 'summary.csv'}", flush=True) + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--metadata", type=Path, required=True) + parser.add_argument("--onnx-python", type=Path, help="Reuse an ONNX interpreter; otherwise uv prepares an isolated B200 runtime") + parser.add_argument("--output", type=Path, required=True, help="New persistent directory under /work") + parser.add_argument("--workers", type=int, help="Preparation workers; defaults to CPU quota, capped at 48") + args = parser.parse_args() + if args.workers is not None and args.workers < 1: + parser.error("--workers must be positive") + if args.onnx_python is not None: + args.onnx_python = args.onnx_python.absolute() + if not args.onnx_python.is_file(): + parser.error("--onnx-python must identify an existing interpreter") + run(args) + + +if __name__ == "__main__": + main() diff --git a/dev/releases/mambo_v3/summarize.py b/dev/releases/mambo_v3/summarize.py new file mode 100644 index 0000000..8869385 --- /dev/null +++ b/dev/releases/mambo_v3/summarize.py @@ -0,0 +1,164 @@ +"""Render concise local quality and performance tables from completed release evidence.""" + +import argparse +import json +import statistics +from collections import defaultdict +from pathlib import Path + +import numpy as np + +from dev.releases.mambo_v3.evaluation_data import PRESETS, write_json + + +def summarize(quality, benchmarks, output): + output.mkdir(parents=True, exist_ok=False) + quality_rows = [] + for backend in ("torch", "onnx"): + variant = quality / f"{backend}-cuda-0-prediction" + report = json.loads((variant / "report.json").read_text()) + if report["status"] != "complete": + raise ValueError("Incomplete quality run") + for preset in PRESETS: + metrics = json.loads((variant / preset / "metrics.json").read_text()) + quality_rows.append( + { + "backend": backend, + "preset": preset, + "samples": report["samples"], + "metrics": metrics, + "bundle_sha256": report["bundle_sha256"], + "list_sha256": report["lists"][preset]["sha256"], + "samples_sha256": report["sample_ids_sha256"], + } + ) + benchmark_plan = json.loads((benchmarks / "plan.json").read_text()) + if benchmark_plan["status"] != "complete": + raise ValueError("Benchmark phase is incomplete") + grouped = defaultdict(list) + resources = [] + for variant in benchmark_plan["completed"]: + path = benchmarks / variant / "report.json" + report = json.loads(path.read_text()) + if report["status"] != "complete": + raise ValueError(f"Incomplete benchmark: {path}") + settings = report["settings"] + resources.append( + { + "variant": path.parent.name, + "backend": settings["backend"], + "device": settings["device"], + "embeddings": settings["embeddings"], + "threads": settings["threads"], + "peak_rss_mib": report["peak_rss_kib_linux"] / 1024, + "cold_first_image_seconds": report["cold_first_image_seconds"], + "load_components_seconds": report["load_components_seconds"], + "torch_imported": report["torch_imported"], + "torch_peak_allocated_bytes": report.get("torch_peak_allocated_bytes"), + "before": report["before"], + "after": report["after"], + } + ) + for cell in report["cells"]: + key = (settings["backend"], settings["device"], settings["embeddings"], settings["threads"], cell["preset"], cell["batch_size"]) + grouped[key].append(cell) + performance = [] + for key, cells in sorted(grouped.items()): + if len(cells) != 3: + raise ValueError(f"Expected three trials: {key}") + backend, device, embeddings, threads, preset, batch = key + values = [v for cell in cells for v in cell["end_to_end"]["seconds"]] + medians = [cell["end_to_end"]["median_seconds"] for cell in cells] + prepared = [cell["prepared"]["median_seconds"] for cell in cells] + performance.append( + { + "backend": backend, + "device": device, + "embeddings": embeddings, + "threads": threads, + "preset": preset, + "batch": batch, + "median_batch_ms": 1000 * statistics.median(values), + "p95_batch_ms": 1000 * float(np.percentile(values, 95)), + "images_per_second": batch / statistics.median(values), + "trial_median_min_ms": 1000 * min(medians), + "trial_median_max_ms": 1000 * max(medians), + "prepared_batch_ms": 1000 * statistics.median(prepared), + "observations": len(values), + } + ) + write_json(output / "summary.json", {"quality": quality_rows, "performance": performance, "resources": resources}) + report_dataset = json.loads((quality / "torch-cuda-0-prediction/report.json").read_text())["dataset"] + report_samples = quality_rows[0]["samples"] + report_species = quality_rows[0]["metrics"]["ranks"]["species"]["truth_species_or_taxa"] + lines = [ + "# Local MAMBO release qualification", + "", + f"Full {report_dataset} evaluation: {report_samples:,} images / {report_species} truth species. " + "All predictions are unthresholded. See source reports for runtime precision and host details.", + "", + "## Full-dataset species results", + "", + "| Backend | Preset | Accuracy, all | Accuracy, known | Macro-F1, all | Truth coverage |", + "|---|---|---:|---:|---:|---:|", + ] + for row in quality_rows: + metric = row["metrics"] + rank = metric["ranks"]["species"] + lines.append( + f"| {row['backend']} | {row['preset']} | {rank['micro_accuracy_all']:.2%} | " + f"{rank['micro_accuracy_known']:.2%} | {metric['all']['f1']['0']:.4f} | {rank['list_coverage']:.2%} |" + ) + lines += [ + "", + "## End-to-end latency and throughput", + "", + "Updated Europe, four CPU threads, three alternating-order trials. " + "Batch latency includes image decoding, preprocessing, transfers, hierarchy reduction and optional embeddings. " + "p95 is descriptive of the retained observations, not a service-level guarantee.", + "", + "| Backend | Device | Embeddings | Batch | Median ms | p95 ms | Images/s | Trial median range ms |", + "|---|---|---|---:|---:|---:|---:|---:|", + ] + for row in performance: + if row["preset"] == "europe_v3" and row["threads"] == 4: + lines.append( + f"| {row['backend']} | {row['device']} | {row['embeddings']} | {row['batch']} | " + f"{row['median_batch_ms']:.1f} | {row['p95_batch_ms']:.1f} | {row['images_per_second']:.1f} | " + f"{row['trial_median_min_ms']:.1f}–{row['trial_median_max_ms']:.1f} |" + ) + lines += [ + "", + "## Startup and process memory", + "", + "Cold first image includes lazy load and first execution; RSS is the process high-water mark across the batch sweep.", + "", + "| Backend | Device | Embeddings | Median cold first image s | Peak RSS range MiB |", + "|---|---|---|---:|---:|", + ] + groups = defaultdict(list) + for row in resources: + if row["threads"] == 4: + groups[(row["backend"], row["device"], row["embeddings"])].append(row) + for (backend, device, embeddings), rows in sorted(groups.items()): + lines.append( + f"| {backend} | {device} | {embeddings} | " + f"{statistics.median(r['cold_first_image_seconds'] for r in rows):.2f} | " + f"{min(r['peak_rss_mib'] for r in rows):.0f}–{max(r['peak_rss_mib'] for r in rows):.0f} |" + ) + lines += [ + "", + "The machine-readable companion includes all ranks, known-only/per-class metrics, full-list and " + "one-thread comparisons, prepared-runtime timings, raw timing counts, and resource observations. " + "See the evaluation workflow for commands and interpretation limits.", + "", + ] + (output / "summary.md").write_text("\n".join(lines)) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + for name in ("quality", "benchmarks", "output"): + parser.add_argument(f"--{name}", type=Path, required=True) + args = parser.parse_args() + summarize(args.quality, args.benchmarks, args.output) diff --git a/dev/releases/mambo_v3/tail_charts.py b/dev/releases/mambo_v3/tail_charts.py new file mode 100644 index 0000000..29cb4a6 --- /dev/null +++ b/dev/releases/mambo_v3/tail_charts.py @@ -0,0 +1,92 @@ +"""Compare full and truncated macro metrics at both confidence settings.""" + +import argparse +import json +from pathlib import Path + +from dev.releases.mambo_v3.defaults_report import SERIES + +from .figure_export import save_figure + + +def render_paired(data, output): + import matplotlib + + matplotlib.use("Agg") + import matplotlib.pyplot as plt + from matplotlib.lines import Line2D + + rows = {(r["model"], r["scope"], r["rank"], r["cutoff"], r["domain"]): r for r in data["rows"]} + if {r["report_images"] for r in data["rows"]} != {data.get("report_images", 52788)} or {r["scope"] for r in data["rows"]} != { + "zero", + "optimized", + }: + raise ValueError("Expected both confidence settings on the shared reporting partition") + plt.rcParams.update({"svg.fonttype": "none", "svg.hashsalt": "mambo-paired-tail-v1"}) + fig, axes = plt.subplots(3, 3, figsize=(16, 11), gridspec_kw={"width_ratios": [1, 1, 0.75]}) + for level, rank in enumerate(("species", "genus", "family")): + for col, metric in enumerate(("accuracy", "f1", "coverage")): + ax = axes[level, col] + for i, (model, _, color) in enumerate(SERIES): + for scope, marker, offset in (("zero", "o", -0.16), ("optimized", "s", 0.16)): + full = rows[model, scope, rank, -1, "per_model"] + tail = rows[model, scope, rank, 5, "common"] + y = i + offset + if metric == "coverage": + value = full["overall_coverage"] * 100 + ax.scatter(value, y, color=color, marker=marker, s=35) + ax.annotate(f"{value:.1f}%", (value, y), xytext=(-7, -3), textcoords="offset points", ha="right", fontsize=8) + else: + factor = 100 if metric == "accuracy" else 1 + a, b = full["metrics"][metric] * factor, tail["metrics"][metric] * factor + ax.plot([a, b], [y, y], color=color, alpha=0.4) + ax.scatter(a, y, facecolors="white", edgecolors=color, marker=marker, s=45, zorder=3) + ax.scatter(b, y, color=color, marker=marker, s=45, zorder=3) + title = {"accuracy": "Macro accuracy (%)", "f1": "Macro-F1", "coverage": "Acceptance coverage (%)"}[metric] + ax.set( + title=f"{rank.title()} · {title}", + yticks=range(5), + yticklabels=[label for _, label, _ in SERIES] if col == 0 else [], + xlim=(0, 1) if metric == "f1" else (0, 105), + ylim=(4.6, -0.6), + ) + ax.grid(axis="x", alpha=0.15) + ax.spines[["top", "right"]].set_visible(False) + shape_handles = [ + Line2D([], [], marker=marker, color="gray", markerfacecolor="white", linestyle="none", label=label) + for marker, label in (("o", "Unthresholded"), ("s", "Calibrated")) + ] + fill_handles = [ + Line2D([], [], marker="o", color="gray", markerfacecolor=fill, linestyle="none", label=label) + for fill, label in (("white", "Full support"), ("gray", "Truncated (support >5)")) + ] + fig.suptitle(data.get("dataset_title", "V2 vs V3 vs V3 + TTA · matched reporting images · legacy northern Europe"), fontsize=16) + fig.legend(handles=shape_handles, title="Shape = confidence setting", loc="upper center", bbox_to_anchor=(0.30, 0.955), ncol=2) + fig.legend(handles=fill_handles, title="Fill = averaging domain", loc="upper center", bbox_to_anchor=(0.70, 0.955), ncol=2) + fig.text( + 0.03, + 0.02, + f"Same {data.get('report_images', 52788):,} reporting images throughout; thresholds fitted on " + f"{data.get('calibration_images', 5852):,} separate images using mini_metrics Macro-F1.\n" + "Hollow → filled changes the averaging domain, not predictions. " + ">5 requires truth AND accepted-prediction support in every pipeline.\n" + "Retained classes differ between confidence settings. No evaluation rows removed; per-class FP/FN remain intact.\n" + f"Coverage is unchanged by class truncation. TTA: {data.get('tta', 'padded_scale')}; " + + ( + "recipe selected on Flemming, not this test set." + if data.get("independent_recipe") + else "recipe selection used the same dataset, so results remain descriptive." + ), + fontsize=10, + ) + fig.tight_layout(rect=(0, 0.10, 1, 0.91)) + output.mkdir(parents=True, exist_ok=True) + save_figure(fig, output, "mambo-threshold-tail", dpi=150) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--data", type=Path, required=True) + parser.add_argument("--output", type=Path, required=True) + args = parser.parse_args() + render_paired(json.loads(args.data.read_text()), args.output) diff --git a/dev/releases/mambo_v3/tail_report.py b/dev/releases/mambo_v3/tail_report.py new file mode 100644 index 0000000..368bd93 --- /dev/null +++ b/dev/releases/mambo_v3/tail_report.py @@ -0,0 +1,135 @@ +"""Supplementary support-truncated macro metrics from pinned mini_metrics class outputs.""" + +import argparse +import csv +import json +from collections import Counter +from pathlib import Path + +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.releases.mambo_v3.evaluation_data import write_json +from dev.releases.mambo_v3.metrics import REVISION, finite_json, require_pinned_metrics +from dev.releases.mambo_v3.threshold_report import identity + + +def eligible_classes(truth, accepted_predictions, cutoff): + """Use strict support cutoffs in both domains, without dropping evaluation rows.""" + return { + label + for label in truth.keys() | accepted_predictions.keys() + if truth.get(label, 0) > cutoff and accepted_predictions.get(label, 0) > cutoff + } + + +def collect(study): + from mini_metrics.data import MetricDF + from mini_metrics.metrics import MacroAccuracy, MacroF1, MacroPrecision, MacroRecall + + require_pinned_metrics() + metrics = {"accuracy": MacroAccuracy(), "precision": MacroPrecision(), "recall": MacroRecall(), "f1": MacroF1()} + work = {} + identities = {} + for model, source in study["models"].items(): + if file_hash(source["source"]) != source["source_sha256"]: + raise ValueError("Changed predictions") + data = MetricDF.from_source(source["source"]) + data, _ = data.split((0.9, 0.1), strata=("label",), seed=42) + identities[model] = identity(data) + if identity(data) != source["identities"]["report"]: + raise ValueError("Changed reporting partition") + work[model] = {} + scopes = (("zero", 0), ("optimized", source["thresholds"])) + for scope, threshold in scopes: + df = data.with_threshold(threshold) + groups = {name: metric(df, aggregate=False, verbose=0) for name, metric in metrics.items()} + work[model][scope] = {} + for level in range(3): + rows = df[df.level == level] + work[model][scope][level] = { + "truth": Counter(map(str, rows.label)), + "predictions": Counter(map(str, rows.prediction[rows.prediction_made])), + "groups": {m: g[level] for m, g in groups.items()}, + } + if len(set(identities.values())) != 1: + raise ValueError("Model evaluation populations differ") + result = { + "population": "reporting_partition", + "identities": identities, + "sources_sha256": {model: source["source_sha256"] for model, source in study["models"].items()}, + "revision": REVISION, + "policy": "Strictly > cutoff in both truth and accepted predictions; preserve all per-class FP/FN; macro reaggregation only", + "rows": [], + } + for scope in ("zero", "optimized"): + for level, rank in enumerate(("species", "genus", "family")): + for cutoff in (-1, 5, 10, 20): + eligible = { + model: eligible_classes(scopes[scope][level]["truth"], scopes[scope][level]["predictions"], cutoff) + for model, scopes in work.items() + } + shared = set.intersection(*eligible.values()) + for model, scopes in work.items(): + row = scopes[scope][level] + domains = [("per_model", eligible[model])] + if cutoff >= 0: + domains.append(("common", shared)) + for domain, selected in domains: + reference = study["models"][model]["report_zero" if scope == "zero" else "report_optimized"] + result["rows"].append( + { + "model": model, + "scope": scope, + "rank": rank, + "cutoff": cutoff, + "domain": domain, + "classes": sorted(selected), + "class_count": len(selected), + "truth_images_in_retained_classes": sum(row["truth"][k] for k in selected), + "accepted_predictions_in_retained_classes": sum(row["predictions"][k] for k in selected), + "report_images": sum(row["truth"].values()), + "overall_coverage": reference["coverage"][str(level)], + "metrics": { + name: float( + metric._aggregate_groups({k: v for k, v in row["groups"][name].items() if str(k) in selected}) + ) + if selected + else None + for name, metric in metrics.items() + }, + } + ) + return finite_json(result) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--study", type=Path, default=Path("docs/assets/mambo-threshold-comparison.json")) + parser.add_argument("--output", type=Path, required=True) + args = parser.parse_args() + result = collect(json.loads(args.study.read_text())) + args.output.mkdir(parents=True, exist_ok=True) + write_json(args.output / "mambo-tail-metrics.json", result) + with (args.output / "mambo-tail-metrics.csv").open("w", newline="") as stream: + writer = csv.DictWriter( + stream, + fieldnames=[ + "model", + "scope", + "rank", + "cutoff", + "domain", + "class_count", + "truth_images_in_retained_classes", + "accepted_predictions_in_retained_classes", + "report_images", + "overall_coverage", + "accuracy", + "precision", + "recall", + "f1", + ], + lineterminator="\n", + ) + writer.writeheader() + for row in result["rows"]: + writer.writerow({**{k: v for k, v in row.items() if k not in ("classes", "metrics")}, **row["metrics"]}) diff --git a/dev/releases/mambo_v3/threshold_report.py b/dev/releases/mambo_v3/threshold_report.py new file mode 100644 index 0000000..7e6275d --- /dev/null +++ b/dev/releases/mambo_v3/threshold_report.py @@ -0,0 +1,291 @@ +"""Calibrate and compare northern-Europe rejection thresholds using pinned mini_metrics.""" + +import argparse +import csv +import hashlib +import json +from pathlib import Path + +import numpy as np + +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.releases.mambo_v3.acceleration_report import METRICS +from dev.releases.mambo_v3.defaults_report import SERIES +from dev.releases.mambo_v3.evaluation_data import write_json +from dev.releases.mambo_v3.metrics import REVISION, finite_json, require_pinned_metrics + +from .figure_export import save_figure + +SOURCES = { + "v2": "mambo-release-comparison-quality/v2-full", + "torch": "mambo-accelerated-quality/torch-cuda-0-prediction", + "onnx": "mambo-accelerated-quality/onnx-cuda-0-prediction", + "torch-tta": "mambo-default-tta-quality/torch-cuda-0-prediction", + "onnx-tta": "mambo-default-tta-quality/onnx-cuda-0-prediction", +} +RANKS = ("species", "genus", "family") + + +def identity(data): + """Hash ordered image/rank/truth identities, independently of predictions.""" + rows = zip(data.instance_id.tolist(), data.level.tolist(), data.label.tolist(), strict=True) + return hashlib.sha256(json.dumps(list(rows), separators=(",", ":")).encode()).hexdigest() + + +def collect(root, output): + from mini_metrics.data import MetricDF + from mini_metrics.metrics import MacroF1, OptimalConfidenceThreshold, evaluate_file + + require_pinned_metrics() + output.mkdir(parents=True, exist_ok=True) + result = { + "revision": REVISION, + "preset": "north_europe", + "policy": "MacroF1; eps=0.01; use_quantiles=True; n_bootstraps=0; per-rank thresholds; all truth", + "split": "MetricDF.split((0.9, 0.1), strata=('label',), seed=42); report/calibration; grouped by instance_id", + "curve": "51 uniform confidence values plus 21 calibration quantiles per rank, and selected thresholds; reporting data", + "models": {}, + } + baseline = json.loads(Path("docs/assets/mambo-defaults-comparison.json").read_text()) + reference = {r["model"]: r["scores"]["all"] for r in baseline["quality"] if r["preset"] == "north_europe"} + identities = None + pattern = "^(" + "|".join(METRICS) + ")$" + + def measure(data, thresholds, known=False, curve=False): + return finite_json( + evaluate_file( + data, + threshold=thresholds, + optimal=False, + known_only=known, + simple=True, + hierarchical=False, + pattern=r"^(accuracy|micro_accuracy|precision|recall|f1|coverage)$" if curve else pattern, + verbose=0, + ) + ) + + for model, relative in SOURCES.items(): + source = root / relative / "north_europe/mini_metric.csv" + digest = file_hash(source) + prior = json.loads(source.with_name("metrics.json").read_text()) + if prior["source_sha256"] != digest or prior["mini_metrics_revision"] != REVISION: + raise ValueError(f"Prediction provenance mismatch: {source}") + data = MetricDF.from_source(source) + if np.any(data.threshold != 0) or not np.isfinite(data.confidence).all(): + raise ValueError("Require finite unthresholded predictions") + if np.any((data.confidence < 0) | (data.confidence > 1)): + raise ValueError("Confidence outside [0, 1]") + reporting, calibration = data.split((0.9, 0.1), strata=("label",), seed=42) + current = {"full": identity(data), "report": identity(reporting), "calibration": identity(calibration)} + if identities is not None and current != identities: + raise ValueError("Models do not share identical image/truth partitions") + identities = current + if set(reporting.instance_id) & set(calibration.instance_id): + raise ValueError("Calibration leakage across image IDs") + full = measure(data, 0) + for metric in METRICS: + for level in range(3): + if not np.isclose(full[metric][str(level)], reference[model][metric][str(level)], atol=1e-12, rtol=0): + raise ValueError(f"Threshold-zero baseline changed: {model}/{metric}/{level}") + selected = OptimalConfidenceThreshold(crit=MacroF1, eps=0.01, use_quantiles=True, n_bootstraps=0)(calibration, verbose=0) + thresholds = [float(selected[level]) for level in range(3)] + row = { + "source": str(source), + "source_sha256": digest, + "identities": current, + "report_images": len(set(reporting.instance_id)), + "calibration_images": len(set(calibration.instance_id)), + "thresholds": thresholds, + "full_zero": full, + "report_zero": measure(reporting, 0), + "report_optimized": measure(reporting, thresholds), + "known_zero": measure(reporting, 0, known=True), + "known_optimized": measure(reporting, thresholds, known=True), + "calibration_zero": measure(calibration, 0), + "calibration_optimized": measure(calibration, thresholds), + "curve": [], + } + # Public optimal=True must reproduce the explicit shared split and optimizer. + public = finite_json( + evaluate_file( + data, + optimal=True, + seed=42, + opt_crit=MacroF1, + eps=0.01, + use_quantiles=True, + simple=True, + hierarchical=False, + pattern=pattern, + verbose=0, + ) + ) + for metric in METRICS: + if public[metric] != row["report_optimized"][metric]: + raise ValueError(f"Public optimizer mismatch: {model}/{metric}") + grids = [ + np.unique( + np.r_[ + np.linspace(0, 1, 51), + np.quantile(calibration.confidence[calibration.level == level], np.linspace(0, 1, 21)), + thresholds[level], + ] + ) + for level in range(3) + ] + # One vector call handles independent operating points at all three ranks. + for i in range(max(map(len, grids))): + vector = [float(grid[min(i, len(grid) - 1)]) for grid in grids] + row["curve"].append({"thresholds": vector, "scores": measure(reporting, vector, curve=True)}) + result["models"][model] = row + write_json(output / f"{model}.json", row) + print(model, "thresholds", thresholds, "report/calibration", row["report_images"], row["calibration_images"], flush=True) + result["tta_threshold_sensitivity"] = tta_threshold_sensitivity(result) + write_json(output / "mambo-threshold-comparison.json", result) + return result + + +def tta_threshold_sensitivity(data): + """Separate backend differences from selection of near-optimal operating points.""" + from mini_metrics.data import MetricDF + from mini_metrics.metrics import MacroF1, evaluate_file + + result = {} + for model in ("torch-tta", "onnx-tta"): + row = data["models"][model] + if file_hash(row["source"]) != row["source_sha256"]: + raise ValueError("Changed sensitivity input") + reporting, calibration = MetricDF.from_source(row["source"]).split((0.9, 0.1), strata=("label",), seed=42) + calibration = calibration[calibration.level == 0] + reporting = reporting[reporting.level == 0] + curve = MacroF1().compute_threshold_curve(calibration) + result[model] = {"calibration_max_f1": float(np.max(curve.values)), "operating_points": []} + for selected_by in ("torch-tta", "onnx-tta"): + threshold = data["models"][selected_by]["thresholds"][0] + point = {"selected_by": selected_by, "threshold": threshold} + for name, partition in (("calibration", calibration), ("report", reporting)): + point[name] = finite_json( + evaluate_file( + partition, + threshold=threshold, + simple=True, + hierarchical=False, + pattern=r"^(precision|recall|f1|coverage)$", + verbose=0, + ) + ) + result[model]["operating_points"].append(point) + return result + + +def render(data, output): + import matplotlib + + matplotlib.use("Agg") + import matplotlib.pyplot as plt + + output.mkdir(parents=True, exist_ok=True) + plt.rcParams.update( + {"svg.fonttype": "none", "svg.hashsalt": "mambo-threshold-v1", "axes.spines.top": False, "axes.spines.right": False} + ) + + def save(fig, name): + fig.tight_layout(rect=(0, 0.10, 1, 0.89)) + fig.text( + 0.02, + 0.015, + "Legacy northern Europe; same reporting images for all pipelines; all truth, including unknown taxa.\n" + "mini_metrics: Macro-F1 calibration on separate 10%; seed 42. Coverage = fraction of images accepted at each rank.\n" + "Calibration/report split is image-level; TTA was previously selected using a subset of Flemming.", + fontsize=9, + ) + save_figure(fig, output, name, dpi=140) + + fig, axes = plt.subplots(3, 2, figsize=(12, 10)) + for level, rank in enumerate(RANKS): + k = str(level) + for model, label, color in SERIES: + row = data["models"][model] + points = row["curve"] + axes[level, 0].plot( + [p["scores"]["recall"][k] for p in points], + [p["scores"]["precision"][k] for p in points], + color=color, + label=label, + linestyle="--" if model.startswith("onnx") else "-", + ) + axes[level, 1].plot( + [p["scores"]["coverage"][k] for p in points], + [p["scores"]["micro_accuracy"][k] for p in points], + color=color, + linestyle="--" if model.startswith("onnx") else "-", + ) + for name, marker in (("report_zero", "o"), ("report_optimized", "*")): + r = row[name] + axes[level, 0].scatter(r["recall"][k], r["precision"][k], color=color, marker=marker, s=65 if marker == "*" else 20) + axes[level, 1].scatter(r["coverage"][k], r["micro_accuracy"][k], color=color, marker=marker, s=65 if marker == "*" else 20) + axes[level, 0].set( + title=rank.title(), xlabel="Macro recall (all truth retained)", ylabel="Macro precision", xlim=(0, 1), ylim=(0, 1.03) + ) + axes[level, 1].set( + title=rank.title(), xlabel="Image coverage", ylabel="Micro accuracy among accepted", xlim=(0, 1.02), ylim=(0, 1.03) + ) + for ax in axes[level]: + ax.grid(alpha=0.15) + fig.suptitle("Confidence threshold trade-offs · circles: threshold 0 · stars: calibrated", fontsize=14) + fig.legend(*axes[0, 0].get_legend_handles_labels(), loc="upper center", bbox_to_anchor=(0.5, 0.96), ncol=3, frameon=False) + save(fig, "mambo-threshold-curves") + + fig, axes = plt.subplots(3, 2, figsize=(12, 10)) + labels = ["V2", "V3\nPyTorch", "V3\nONNX", "PyTorch\n+ TTA", "ONNX\n+ TTA"] + for level, rank in enumerate(RANKS): + for col, metric in enumerate(("f1", "coverage")): + ax = axes[level, col] + for offset, scope, label, color in ( + (-0.18, "report_zero", "Threshold zero", "#b8c5d0"), + (0.18, "report_optimized", "Calibrated threshold", "#098e92"), + ): + values = [data["models"][model][scope][metric][str(level)] for model, _, _ in SERIES] + bars = ax.bar(np.arange(5) + offset, values, 0.36, label=label, color=color) + ax.bar_label(bars, fmt="%.3f", fontsize=8, padding=3) + ax.set( + title=f"{rank.title()} · {'Macro-F1' if metric == 'f1' else 'Image coverage'}", + xticks=range(5), + xticklabels=labels, + ylim=(0, 1.12 if metric == "coverage" else 1), + ) + ax.grid(axis="y", alpha=0.15) + ax.set_axisbelow(True) + fig.suptitle("Threshold optimization · same reporting partition before and after", fontsize=15) + fig.legend(*axes[0, 0].get_legend_handles_labels(), loc="upper center", bbox_to_anchor=(0.5, 0.95), ncol=2, frameon=False) + save(fig, "mambo-threshold-comparison") + with (output / "mambo-threshold-metrics.csv").open("w", newline="") as stream: + writer = csv.writer(stream, lineterminator="\n") + writer.writerow(["model", "rank", "scope", "threshold", *METRICS]) + for model, row in data["models"].items(): + for scope in ("report_zero", "report_optimized", "known_zero", "known_optimized", "calibration_zero", "calibration_optimized"): + for level, rank in enumerate(RANKS): + writer.writerow( + [ + model, + rank, + scope, + row["thresholds"][level] if scope.endswith("optimized") else 0, + *[row[scope][m][str(level)] for m in METRICS], + ] + ) + write_json(output / "mambo-threshold-comparison.json", data) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + source = parser.add_mutually_exclusive_group(required=True) + source.add_argument("--evidence", type=Path) + source.add_argument("--data", type=Path) + parser.add_argument("--output", type=Path, required=True) + args = parser.parse_args() + if args.evidence: + collect(args.evidence, args.output) + else: + render(json.loads(args.data.read_text()), args.output) diff --git a/dev/releases/mambo_v3/ucloud-release.md b/dev/releases/mambo_v3/ucloud-release.md new file mode 100644 index 0000000..2c6de86 --- /dev/null +++ b/dev/releases/mambo_v3/ucloud-release.md @@ -0,0 +1,231 @@ +# UCloud release comparison + +Run inside a manually allocated UCloud SSH node with the original global-lepi +dataset mounted. The scripts live in this repository, not the deployment wheel; +clone the reviewed release revision with Git history. Install uv, create/activate +the environment, then run the experiment. Use `tmux` and persist results under +`/work`. These commands do not allocate a node. + +The completed campaign is documented in [in-domain evidence](../../../docs/mambo-indomain-evidence.md). +For a small throughput check rather than a full evaluation, use +[speed-smoke.md](speed-smoke.md). Do not repeat the full campaign to validate +unchanged quality or a documentation edit. + +## Setup with uv + +From the checkout root after installing uv and selecting the reviewed revision: + +```sh +uv venv --python 3.13 .venv-mambo-runtime +source .venv-mambo-runtime/bin/activate +uv pip install --torch-backend=auto -r dev/releases/mambo_v3/runtime-requirements.in +python -m dev.releases.mambo_v3.setup_ucloud_release \ + --metadata /work/datasets/global_lepi/0032836-250426092105405_processing_metadata_postprocessed_quality_filtered.parquet \ + --cache /work/mambo-cache +``` + +Runtime dependencies resolve afresh within package ranges; only `mini_metrics` is +fixed to preserve metric semantics. The historical `ucloud_env/uv.lock` remains a +reproduction record, not the default deployment install. PyTorch backend selection +and ORT CUDA/cuDNN dependencies still require real GPU qualification. Keep the +resolved environments unchanged during a campaign; use activated `python` or +`uv run --no-sync`. No implicit checkout-environment synchronization is needed. + +Preparation requires only the metadata path; images default to +`images//` beneath its parent (`--root` overrides). It verifies +the metadata snapshot and preserves original `set == "0"` membership and taxonomy. +Models, legacy heads and split provenance download from public ERDA with size/hash +verification; the BioCLIP backbone uses a pinned Hugging Face revision. V2 source +is extracted from its pinned Git commit and run in a separate process. + +All 632,913 test images are hashed with concurrent readers, warming WEKA as they +read. Default is twice CPU affinity, bounded 8–256; `--hash-workers` overrides it. +That default may need adjustment to the allocation quota. Progress appears every +five seconds, including stalls. Completed hashes checkpoint to SQLite and are reused +when input identity, size and modification time agree. The final manifest appears +only when all images finish. Run one preparation process per cache; `--offline` +requires cached downloads. Checksums fail explicitly instead of replacing evidence. + +The chosen cache contains models, manifest, hash checkpoint and +`ucloud-release.json`. It is separate from the persistent campaign directory below. +Inspect config paths, environment label, device, threads and batches before starting. + +## Qualify, collect, measure + +Create one named campaign. `--new-campaign` binds the active interpreter, reuses +prepared assets and saves `config.json` in the new output directory: + +```sh +python -m dev.releases.mambo_v3.ucloud_release qualification \ + --config /work/mambo-cache/ucloud-release.json \ + --new-campaign /work/mambo-results/current +``` + +Qualification runs 256 identical images through V2, V3 Torch, V3 ONNX and both V3 +backends with `rotation30_pad25_3` TTA. Inspect reports/logs and `nvidia-smi -L` for +the actual GPU/MIG profile, placement and memory. One MIG slice is one CUDA device. +This is runtime qualification, not a reliable quality estimate or a requirement +for micro-numerical equality. + +**Use the saved campaign config for every remaining phase:** + +```sh +python -m dev.releases.mambo_v3.ucloud_release full \ + --config /work/mambo-results/current/config.json && +python -m dev.releases.mambo_v3.metrics \ + --collection /work/mambo-results/current/full && +python -m dev.releases.mambo_v3.ucloud_release benchmark \ + --config /work/mambo-results/current/config.json && +python -m dev.releases.mambo_v3.ucloud_summary \ + --root /work/mambo-results/current \ + --output /work/mambo-results/summary +``` + +The chain stops on failure. It does not wait for a separately launched collection: +queue it in the same shell after qualification/full succeeds. `plan.json` must say +`complete`; a started process or existing output file is not completion. +`--dry-run` prints planned jobs; `--resume` verifies/reuses complete jobs. +Preserve partial job directories elsewhere before retrying. Fingerprints reject +changed source, inputs, configuration or environments within an existing campaign. + +### Reuse prepared assets or change settings + +On an existing job, skip setup/hashing and use the prior config with a **new** +campaign directory. Do not pull changes into an actively running checkout or alter +its environments; stop the run and queued follow-ups first, or use another checkout. +Harness-only changes need no environment rebuild; installed package/dependency +changes need an explicit install and requalification. + +Relevant `--new-campaign` options: + +| Option | Applies to | +| --- | --- | +| `--onnx-python PATH` | Separate runtime for both ONNX variants and their benchmarks | +| `--v3-batch-size N` | V3 collection; benchmark planning also includes this GPU batch | +| `--decode-workers N` | V3 preparation concurrency | +| `--read-workers N`, `--read-window N` | Outstanding IO capacity/lookahead | +| `--prefetch-batches N`, `--encoded-budget-mib N` | Bounded preparation/encoded storage | +| `--no-device-prefetch` | Collection and streaming transfer-staging comparison | +| `--reuse-v2-from DIRECTORY` | Verified V2 qualification/full outputs; never benchmark reuse | + +The full-B200 smoke used batch 256, 48 preparation workers, 128 readers, a 4,096-image +window, two prefetched batches and 1 GiB encoded budget. Those are measured settings +for a 48-vCPU/full-GPU allocation, not defaults for MIG or arbitrary machines. +Use the saved prior config to preserve its settings; see CLI `--help` for overrides. +After changing anything, use the new config consistently for full/metrics/benchmark +and summary rather than editing paths in each historical campaign recipe. + +## ONNX CUDA compatibility and the recorded B200 exception + +ORT session qualification probes a synthetic batch once per graph initialization. +A kernel-image/device-function failure retries with graph optimizations disabled. +Unrelated errors are not retried; failure of that baseline graph reports runtime/ +device incompatibility. Both profiles retain CUDA with individual CPU operators +allowed. Reports retain `onnx_session_info` and failed attempts. The probe is part +of cold first use, excluded from warmed timing cells. + +On the recorded Linux CPython 3.13 B200 setup, ORT 1.30.0's provider binary +SHA-256 `afd77f8d1e05544456476e244601ff08d444ff90921d6d73b2066c124f109bd2` +lacked SM100 kernels and PTX. Standalone Sigmoid failed independently of the model, +including with optimization disabled. Fresh resolution retained that binary, so +lock relaxation alone did not repair it. + +The inspected upstream ORT 1.22.0 wheel included generic SM90 PTX and passed the +standalone probe and full model qualification on B200, plus bounded laptop checks. +That supports this runtime candidate, not a universal version recommendation. +Keep its CUDA 12 libraries isolated from the CUDA 13 Torch environment: + +```sh +uv venv --python 3.13 /work/venvs/mambo-onnx +uv pip install --python /work/venvs/mambo-onnx/bin/python \ + 'onnxruntime-gpu[cuda,cudnn]==1.22.0' numpy ./deployment +/work/venvs/mambo-onnx/bin/python dev/releases/mambo_v3/probe_onnx_cuda.py +``` + +If needed, supply `--onnx-python /work/venvs/mambo-onnx/bin/python` when creating +the named campaign above. Run orchestration/metrics from the main activated +environment. Both interpreter inventories enter the fingerprint. The historical +separate-runtime campaign completed; it is not still awaiting results. + +## Progress and timing interpretation + +```sh +python dev/monitor_mambo_release.py /work/mambo-results/current/full +``` + +The standalone monitor reads plans/reports and log tails without model packages. +ETA needs two observed checkpoints; startup/finalization have no reliable image +ETA, and stale checkpoints suppress estimates. Different variants run at different +rates, so current-job ETA is not a whole-campaign forecast. `--once` gives status; +Ctrl-C stops only the monitor. It does not track metrics reduction or benchmark cells. + +Pipeline counters describe occupancy, input waits, buffer allocations and worker +durations. `preparation_worker_seconds` sums concurrent work and can exceed wall +time. `runtime_submit_seconds` excludes Torch output completion waits but includes +ONNX's synchronous runtime; CUDA stream intervals are not kernel-only time or GPU +utilization. Do not add overlapping phases or interpret low host storage-read bytes +as proof of absent network-storage waits. Pinned storage consumes host RAM. +[Pipeline decisions](../../../docs/mambo-inference-pipeline-review.md) explain the +current ownership boundaries and remaining performance limits. + +## Evidence and metric policy + +Quality uses every original test image with global vocabulary. All metrics come +from pinned `mini_metrics`: macro accuracy/precision/recall/F1, micro accuracy, +Theil U and coverage at species/genus/family, for all and known truth. The base +`metrics` command reports unthresholded results. The presentation path adds the +same calibration/reporting split and full/support >5 conventions used for Flemming: + +```sh +python -m dev.releases.mambo_v3.indomain_report \ + --root /work/mambo-results/current \ + --output /work/mambo-results/presentation +python -m dev.releases.mambo_v3.indomain_speed \ + --source /work/mambo-results/summary \ + --output /work/mambo-results/presentation +``` + +`mini_metrics` selects thresholds on a disjoint calibration portion and evaluates +them on reporting rows; do not fit on the reporting portion. Retain coverage and +class-support domains alongside thresholded metrics. See +[in-domain evidence](../../../docs/mambo-indomain-evidence.md) for exact policy and +[reusable evidence](evidence-policy.md) for identities required in future comparisons. + +Benchmark modes are distinct: request includes loading through completed predictions; +streaming includes its bank/startup/drain; prepared diagnostics exclude input +preparation. Keep warmups, repetitions, batch/list, threads and optimized-session +profile with each result. V2 CPU uses the documented FP32 adapter and has no +qualified ONNX counterpart. Do not benchmark concurrently with heavy collection. + +Keep UCloud and laptop panels separate and use images/s consistently. Their image +domains differ, so differences cannot be assigned solely to hardware. For matched +hardware comparisons, configure `timing_manifest` and `timing_root` identically +before qualification. Latest B200 smoke values replace only corresponding measured +points; historical CPU/V2 points remain labelled. + +## Persistent storage and transfer + +All example campaign/summary/presentation outputs above are under `/work`. +For an older home-cache run, copy only completed results to a mounted location; +preserve its config, all phase plans/reports/logs, samples, predictions and metrics: + +```sh +mkdir -p /work/mambo-results +rsync -a ~/.cache/mambo-ucloud/runs-transfers/ /work/mambo-results/runs-transfers/ +rsync -a ~/.cache/mambo-ucloud/summary-transfers/ /work/mambo-results/summary-transfers/ +``` + +`rsync -a` permits interrupted copies to be resumed while preserving directory +structure; a verified `cp -a` transfer is also sufficient. Check phase completion, +report/prediction hashes and summary consistency before packaging. Retain +`mini_metric.csv` at every rank/list for later metrics; downloaded weights and +dataset photos are not needed to integrate the results into documentation. + +```sh +tar -czf /work/mambo-results.tar.gz -C /work mambo-results +sha256sum /work/mambo-results.tar.gz +``` + +Transfer the archive and digest, verify after download, and retain immutable raw +results alongside derived tables/figures. Archive integrity is separate from +successful campaign completion and metric validity. diff --git a/dev/releases/mambo_v3/ucloud_env/pyproject.toml b/dev/releases/mambo_v3/ucloud_env/pyproject.toml new file mode 100644 index 0000000..4d4deff --- /dev/null +++ b/dev/releases/mambo_v3/ucloud_env/pyproject.toml @@ -0,0 +1,31 @@ +[project] +name = "mambo-ucloud-release" +version = "0.1.0" +requires-python = ">=3.13,<3.14" +dependencies = [ + "mt-trainer[recommended,bioclip,timm]", + "mambo-v3", + "mini_metrics", + "torch==2.12.0", + "torchvision==0.27.0", + "onnxruntime-gpu[cuda,cudnn]>=1.27,<2", + "open_clip_torch==3.3.0", + "timm==1.0.25", + "huggingface_hub==0.36.2", + "safetensors==0.6.2", +] + +[tool.uv] +package = false + +[tool.uv.sources] +mt-trainer = { path = "../../../.." } +mambo-v3 = { path = "../../../../deployment" } +mini_metrics = { git = "https://github.com/GuillaumeMougeot/mini_metrics.git", rev = "70cc69adc05362863439277048e06386c1f885e1" } +torch = { index = "pytorch-cu130" } +torchvision = { index = "pytorch-cu130" } + +[[tool.uv.index]] +name = "pytorch-cu130" +url = "https://download.pytorch.org/whl/cu130" +explicit = true diff --git a/dev/releases/mambo_v3/ucloud_env/uv.lock b/dev/releases/mambo_v3/ucloud_env/uv.lock new file mode 100644 index 0000000..f9adbec --- /dev/null +++ b/dev/releases/mambo_v3/ucloud_env/uv.lock @@ -0,0 +1,1551 @@ +version = 1 +revision = 3 +requires-python = "==3.13.*" +resolution-markers = [ + "sys_platform == 'win32'", + "sys_platform == 'emscripten'", + "sys_platform != 'emscripten' and sys_platform != 'win32'", +] + +[[package]] +name = "absl-py" +version = "2.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d0/4f/d79676ab82f2e42fc3611618139f13a9c4c31d0cff4b486982047679a802/absl_py-2.5.0.tar.gz", hash = "sha256:0c996f25c0490700fadabe6351630f6111534fa0ae252cc6d2014ea3b141135f", size = 118119, upload-time = "2026-07-03T10:57:48.157Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/58/0a/a10b45aab35b175aded078a462dc8d0c698f5b13946e7cb0869097b78bb6/absl_py-2.5.0-py3-none-any.whl", hash = "sha256:0f17b89f2a4eaaedc4f28c622998aa690564b3012a396a4ffad0821007fe03ba", size = 137410, upload-time = "2026-07-03T10:57:46.735Z" }, +] + +[[package]] +name = "annotated-types" +version = "0.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5f/56/a8120250d128bed162cd73c76d45f6ef9991f3e068f62a8ee060afa3104a/annotated_types-0.8.0.tar.gz", hash = "sha256:13b2beaad985e05e2d6407ee4c4f35590b11f8d693a258a561055cac8f64cab7", size = 15893, upload-time = "2026-07-23T20:16:13.995Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl", hash = "sha256:f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0", size = 13427, upload-time = "2026-07-23T20:16:12.938Z" }, +] + +[[package]] +name = "biopython" +version = "1.88" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f6/a0/cf657d076ec56a5f9e5c29a560c1f97b8eb6ae6608dc8bc95b4e2437f129/biopython-1.88.tar.gz", hash = "sha256:9aaa31c0bda4d059f7b2ee00bfdb5cbb73ade3057aa4b737a7cc0187091d071a", size = 19858058, upload-time = "2026-08-06T12:13:36.003Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ae/9a/333f14a9228f5dc702d8a7570482e096b8503d3b6679054772b79cf05358/biopython-1.88-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:465caece761b9ec22e0dc63bb5969517c901587a27104c4f1cee69f414b4df2d", size = 2681139, upload-time = "2026-08-06T12:30:58.807Z" }, + { url = "https://files.pythonhosted.org/packages/28/66/c3d6060ee8b08af4118817fe5ac455f1faf776c26e9c08f2d0232c687a72/biopython-1.88-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:df709eabdce2fc2cc1059fcefbbea245d2b2c41fc2026eda6194b810474e68d6", size = 3220838, upload-time = "2026-08-06T12:59:31.92Z" }, + { url = "https://files.pythonhosted.org/packages/30/9b/1075a762fc3595d4b8ca688246be9f9ca68a29d0c05c336197670fbc7eff/biopython-1.88-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:410eaa083fcc308b44c7051e597ae2f39e4068754bdd605cc32aed025aa132d0", size = 3246944, upload-time = "2026-08-06T12:59:36.656Z" }, + { url = "https://files.pythonhosted.org/packages/e4/50/f3089c4f36d9d877475bfd2cb0d066b0a6be638aae7238be136d890a433b/biopython-1.88-cp313-cp313-win32.whl", hash = "sha256:e3ac69b8abddac75dce301cbe77fc2650cbe0bd62ab2d2662d0f6f378b8c8018", size = 2709206, upload-time = "2026-08-06T12:32:29.601Z" }, + { url = "https://files.pythonhosted.org/packages/db/80/3890552b57771e87ba8f4d7936ad6a9074252fcc615d1a8599c977a4bed4/biopython-1.88-cp313-cp313-win_amd64.whl", hash = "sha256:f0aaf49f0c8919fb7a02cdc3db9e7f89165f53417a18d80508e0f167121cb7c1", size = 2744168, upload-time = "2026-08-06T12:32:25.365Z" }, +] + +[[package]] +name = "certifi" +version = "2026.7.22" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a3/c2/24167ea9858356b47a87a50d39908bfdb72ceeefe0041586e704e5376b3a/certifi-2026.7.22.tar.gz", hash = "sha256:741e2c3b351ddf169a738da9f2c048608ff7f2c5cc02f1ebc6b118bb090d5d55", size = 138112, upload-time = "2026-07-22T03:35:12.644Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0b/a7/71ac2cff56fec219ed242bb11b8efb69fcc4bec75db06fb7bfe35de520e6/certifi-2026.7.22-py3-none-any.whl", hash = "sha256:62f22742b58a1a33014a2b6b706588a8d7e2a88ae7bd1a6ebe8c992928483775", size = 136983, upload-time = "2026-07-22T03:35:11.276Z" }, +] + +[[package]] +name = "charset-normalizer" +version = "3.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e5/3f/143b048436775b0f76ac3eec145c019e8173ccc2885c8f20319b996d5e83/charset_normalizer-3.5.1.tar.gz", hash = "sha256:6117b84ea48435e5356dc737f5121485c30920ba43375fa7b434fd753df0eac3", size = 171764, upload-time = "2026-08-15T08:20:44.807Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bc/61/2cb6ad133dbbb449fa2d37ccae973232f4827e799af258d15e589a3d1e9e/charset_normalizer-3.5.1-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:4f298bdadb8f0b9e5672877f647d1be9373ef5320c9e2f049795e26cad28b6a9", size = 211584, upload-time = "2026-08-15T08:17:33.597Z" }, + { url = "https://files.pythonhosted.org/packages/18/57/a305c968be1ca13f3dd1b32f445877e97addf55d80b65c7cb35fac82b777/charset_normalizer-3.5.1-cp313-cp313-android_24_x86_64.whl", hash = "sha256:88ca277405c2d3b71c4e1c2ee0e7966e807bcba86a69d11e19ba199d18ae4491", size = 223359, upload-time = "2026-08-15T08:17:35.022Z" }, + { url = "https://files.pythonhosted.org/packages/09/0a/d3646670292ce8d8f8cc11ac067d44885e697a5591f57a9221128da5e7b3/charset_normalizer-3.5.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:9362dd90aa7dab48c0054a21187791ccf05473f7dba5d92b8033ae62164675e7", size = 194464, upload-time = "2026-08-15T08:17:36.452Z" }, + { url = "https://files.pythonhosted.org/packages/de/93/d51ec556e01042fed6f993ea859311bc7917b466684182fbbceb6ca24762/charset_normalizer-3.5.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:977cdbd483a9cff38179bea4fd754289a6f2195c7abd414aba85410b3e66cc5e", size = 197676, upload-time = "2026-08-15T08:17:37.819Z" }, + { url = "https://files.pythonhosted.org/packages/a4/a0/562247944386f7d4ef94467e84876600cc1e0f1b93239aaa9213d2bc3cbd/charset_normalizer-3.5.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e90251c0c7bdd54a100a0dce3c07b7e637278c93af29dbf78ebb89a58c4bac7d", size = 340473, upload-time = "2026-08-15T08:17:39.303Z" }, + { url = "https://files.pythonhosted.org/packages/31/e7/1d994be1b93d41e9502b8b0460eaa88a1dd8df335df415db87d6c3e91ab2/charset_normalizer-3.5.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:94d78ecec2605a8d0398b0f365d5f12a63248438516f5dac536a5eff7337df4a", size = 240156, upload-time = "2026-08-15T08:17:40.66Z" }, + { url = "https://files.pythonhosted.org/packages/09/53/27923ce5cc6cbccb832037b27dca98882d9c53e9b69e866bbbef4aae7fc8/charset_normalizer-3.5.1-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:d59b75732e9b6f27388e10c14b0259cc5f2e48c78627d185e6a177b58ad3cffe", size = 228246, upload-time = "2026-08-15T08:17:42.003Z" }, + { url = "https://files.pythonhosted.org/packages/ce/48/5a97e84d63af1d55c07439cb80e56d99a8efb4295700eb4e18c0d1615d2c/charset_normalizer-3.5.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0d929fc574b4d6fd9e7c0f5c2ede8716a41911923aa7fa5fce38e0818aa4a1ac", size = 263660, upload-time = "2026-08-15T08:17:43.627Z" }, + { url = "https://files.pythonhosted.org/packages/7a/c2/071575791dcc88316c0a9a65ce38897a82e4cfe4a325f0f7fe1b1ac47bcf/charset_normalizer-3.5.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:394fea06235c8543390050ed5f529187074b029fb027213f6c46ac11ab5d950e", size = 260354, upload-time = "2026-08-15T08:17:45.094Z" }, + { url = "https://files.pythonhosted.org/packages/fb/af/63240b0c0248c075c2535a1f1bd992821d8251b9f173abc13329661d09e4/charset_normalizer-3.5.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:62b55f6722735a6c472f88361cde6640608773d9443cebdbb51abf436a1fcdd3", size = 250638, upload-time = "2026-08-15T08:17:46.496Z" }, + { url = "https://files.pythonhosted.org/packages/4d/66/70dfad64f15be09c15ccfee81330a7e515895dbe296dd23114e9a231268a/charset_normalizer-3.5.1-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fa48b1b63d639f9483e0633e092f5851e2348c352f1f9bb6c8182f87884ef876", size = 244583, upload-time = "2026-08-15T08:17:47.963Z" }, + { url = "https://files.pythonhosted.org/packages/c0/24/ef36367d38b9ddd4bccbf72888c342e8de1f5ae506fa0b2dcf970e2732a1/charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c71fb0d56c920c269cd3e2e3fe7c610e3f1fdb21a6ce60efa6430ff63676cea6", size = 242038, upload-time = "2026-08-15T08:17:49.481Z" }, + { url = "https://files.pythonhosted.org/packages/db/ab/55e683ba0fff2e43adafc10daa3001eac90fdaa419a97227d5a7067eedde/charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:485a0d363cafefcd2538a73c7c838daa2035f09b2c9f9b5e3133f80c6aeb84c2", size = 233677, upload-time = "2026-08-15T08:17:50.845Z" }, + { url = "https://files.pythonhosted.org/packages/bd/67/0f40eaf8d1b6e7cf15e82382a2965efaca787fc1c2794b7021d37aaf5036/charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:5c0ea61a470e070686aa30892fed79e297d2c8d0ab46b8bcdf027d38c51da591", size = 264491, upload-time = "2026-08-15T08:17:52.61Z" }, + { url = "https://files.pythonhosted.org/packages/5c/64/12b4c2a11ee8df4fcc518c78b0d93e3a92bd3d5253d1617ce74ff0e8c7ef/charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:90b7481fb62fbe172c558bc6fd1c4c98d82004a54a7551f20e11ac9bf0b8708c", size = 245196, upload-time = "2026-08-15T08:17:54.023Z" }, + { url = "https://files.pythonhosted.org/packages/37/2e/651d910af6d0fba325eee1cda37ec5443462ed25360e666c144166eb6091/charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:35fe081843b35aad20ffeccec3eeffbe637b15d14f3fb22cc1b59cd8ec17e93c", size = 261660, upload-time = "2026-08-15T08:17:55.491Z" }, + { url = "https://files.pythonhosted.org/packages/90/c6/b09e05e6db7f64338e0dc067c79577b1138da86c1e38369096851d96be88/charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fd0350afdc3aabd5576f60ea109228bd5538139713c7b094c5cd27c73a98bc6f", size = 252618, upload-time = "2026-08-15T08:17:57.025Z" }, + { url = "https://files.pythonhosted.org/packages/76/4e/362d4f9fdcdf5556fb2aa3ce7d4a58ebce03ed1ff03aa1d9aca8d02f13f3/charset_normalizer-3.5.1-cp313-cp313-pyemscripten_2025_0_wasm32.whl", hash = "sha256:9d9a0dc7cbe9bec24c3f767c9122c41fe5a1bc43f47cd099d00d393e09769de4", size = 140362, upload-time = "2026-08-15T08:17:58.425Z" }, + { url = "https://files.pythonhosted.org/packages/b4/d4/703be739b26acce318bd29eb3b25b7209e1b1f527f9eae3d1f1f01fdde2b/charset_normalizer-3.5.1-cp313-cp313-win32.whl", hash = "sha256:d63600d620ad0064c3a748b950ac5ea38a80190e5498532efefa4b7b3f1da1f3", size = 177755, upload-time = "2026-08-15T08:18:00.037Z" }, + { url = "https://files.pythonhosted.org/packages/8a/33/56d97ade41c8db611e727168c52ae46c9224c362ec28d4b65d7e9869e8da/charset_normalizer-3.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:aea996a6aba25260827c9ea511d1addfde2da9eb686ac961838509086188b7e6", size = 199295, upload-time = "2026-08-15T08:18:01.506Z" }, + { url = "https://files.pythonhosted.org/packages/5b/75/5b20dd1e6573a01a08158fe104104fa2c8abf941745596954185726cd46c/charset_normalizer-3.5.1-cp313-cp313-win_arm64.whl", hash = "sha256:fd0a274c0e5f9a21565cd9d3dd749b61f96b7aa1e20a93aa1ba4029518f2e5c0", size = 179856, upload-time = "2026-08-15T08:18:02.929Z" }, + { url = "https://files.pythonhosted.org/packages/5b/97/fb4e82231aba271ffd775a1b4993b0defc4e3059f286ae41d9433409fe85/charset_normalizer-3.5.1-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:41876ee62a3dddf48ff1121ad8f0798032aa03f2fd35f21f34a4cab14f18d8d2", size = 331467, upload-time = "2026-08-15T08:19:50.959Z" }, + { url = "https://files.pythonhosted.org/packages/9f/2f/fe3f187327aac18e2d54e9d2b08e15d27bf9b642d9e51c219f130fc34d1a/charset_normalizer-3.5.1-cp37-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:a6dac12ff6b846103483683f60c5f8fee205121adc58ffd87e90a90a3af69e99", size = 253057, upload-time = "2026-08-15T08:19:52.654Z" }, + { url = "https://files.pythonhosted.org/packages/d7/c7/9e48cee5c161fe24da823b61bf381921d77cb994a0a4de148e95018c1984/charset_normalizer-3.5.1-cp37-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cee5dd7c6fb5dd52a0fe2a740f9bc6e3593f5f8b1788bde49de02086f30182b2", size = 240930, upload-time = "2026-08-15T08:19:54.163Z" }, + { url = "https://files.pythonhosted.org/packages/49/e0/716601f3cc69be7b198951150c75ead1ece33c3c8036ff6ffa46029659a0/charset_normalizer-3.5.1-cp37-abi3-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:343fb4f2821043bd87095f7b08a1a181febc8e36ac64212143bbfd0a0e1bc235", size = 230822, upload-time = "2026-08-15T08:19:55.807Z" }, + { url = "https://files.pythonhosted.org/packages/d3/05/71bfc5caa0abcc45aea1f6a4d50ac68e59605ddc7666fe8494f4cd229665/charset_normalizer-3.5.1-cp37-abi3-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ae4a097991662cd4fff0ddc74e0fe7874f82e00042fa0ea00855645ed0c79598", size = 260037, upload-time = "2026-08-15T08:19:57.312Z" }, + { url = "https://files.pythonhosted.org/packages/c3/92/de7e32ed05341e7a9c4c877c318418197b7f2d66a3b68d561bf2ac57ca3e/charset_normalizer-3.5.1-cp37-abi3-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4b599739b93b2cbeded49645ae3c8d1405c29ddfbceac1545c87a3f9580a9e96", size = 255097, upload-time = "2026-08-15T08:19:59.056Z" }, + { url = "https://files.pythonhosted.org/packages/f5/7b/ade0a122600319dfa0b1000ab0f9731c94a817904cf3c5de408c73a4ede7/charset_normalizer-3.5.1-cp37-abi3-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b39b69b347e5e47a3b5b8cfc005c68c1ba347474e3960236c4944a8ecd174962", size = 250166, upload-time = "2026-08-15T08:20:00.612Z" }, + { url = "https://files.pythonhosted.org/packages/75/9c/019fbb9f4834491a160951349b1a3714439376f66e5f7cf18b4f18f0c7aa/charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:a2028475ba855475b8b4d3cfeb4994269c967aea8b9892dfba907f4263a863a3", size = 241821, upload-time = "2026-08-15T08:20:02.321Z" }, + { url = "https://files.pythonhosted.org/packages/2b/b8/11d4840bfc99330cc7fbcc2681ee5a044553a6e77655508d8f9b2bff7b34/charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:36047af20e17097c3bb9476c2b7655f2f7aa51322c0ba58c07695bedf755a950", size = 232529, upload-time = "2026-08-15T08:20:04.008Z" }, + { url = "https://files.pythonhosted.org/packages/18/96/2b3a21492d9f65171ac75d872f5018260013d00bfa0ff70ec9f179148cbd/charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_ppc64le.whl", hash = "sha256:4c4fb141a727957c93edfe5c32a26ceb6b5f6461d67146e2d39f51e16170bea8", size = 260348, upload-time = "2026-08-15T08:20:05.877Z" }, + { url = "https://files.pythonhosted.org/packages/d6/aa/a69a2028e8bd052476c245460ab19d7de595de084dd968f2d75cd50c3e25/charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_riscv64.whl", hash = "sha256:2f293479cce755c75f1697e87c409b7ae4c555c7dfecb6e988ad13abba943031", size = 247234, upload-time = "2026-08-15T08:20:07.487Z" }, + { url = "https://files.pythonhosted.org/packages/35/8a/3d130aeabcaf3d2466af76b7b141c08d9e89c9016ab4b7cdd0f7dc2d1c62/charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_s390x.whl", hash = "sha256:3588e376b3ea2eea84976f67273d679f229e24c66dce7b82ae45aef04ff6e072", size = 256917, upload-time = "2026-08-15T08:20:09.142Z" }, + { url = "https://files.pythonhosted.org/packages/80/c2/a7379b840292d0c1ab9fbd17d1f3967aa81794dc95bc74be8999d7fedcf7/charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:e199fb99720074809a7720f1c0b4d919eea8b87e88713e0f8f602f7bef543d9d", size = 254846, upload-time = "2026-08-15T08:20:10.727Z" }, + { url = "https://files.pythonhosted.org/packages/01/65/d43b714731bb2f40d4053dfa00ecfc1c5a301f8e3316c5db3a09af59fe94/charset_normalizer-3.5.1-cp37-abi3-win32.whl", hash = "sha256:dd732602a7009217f658d5863d12d79d373a4de0eebc111094bcdd3bb8e0a6cc", size = 174216, upload-time = "2026-08-15T08:20:12.334Z" }, + { url = "https://files.pythonhosted.org/packages/35/4f/b911ed898b26a09789eba9c9200c999aff6c61b4bafaf4838e56d1a1e1a3/charset_normalizer-3.5.1-cp37-abi3-win_amd64.whl", hash = "sha256:70055ff39b97c99e7ae40ea3e393fb62aa2e44dbd9b29f8d14f42fb0025c3959", size = 199764, upload-time = "2026-08-15T08:20:13.908Z" }, + { url = "https://files.pythonhosted.org/packages/f0/a7/920baf467bfd9bf689f3b318340f37aee4572a71f162bd8db51da55ba4fa/charset_normalizer-3.5.1-cp37-abi3-win_arm64.whl", hash = "sha256:87e4f41d375c0b9be2fb5251aee4b8a689169e134535aed81bf085c3b647451e", size = 287318, upload-time = "2026-08-15T08:20:15.551Z" }, + { url = "https://files.pythonhosted.org/packages/cc/61/d01fc49b8dea277640b55a9e15960dbca9fdc8c9fde18e572d39c59f4019/charset_normalizer-3.5.1-py3-none-any.whl", hash = "sha256:6df0ec430f9a831772c23ca5a224cba36517a58a84bb32c32bb59a9fa67c47f6", size = 68658, upload-time = "2026-08-15T08:20:43.306Z" }, +] + +[[package]] +name = "click" +version = "8.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c7/0e/7fa0ef50764b67090eca4114772a2abf8b6148198475e54c660b97caeee6/click-8.5.0.tar.gz", hash = "sha256:ba0d2089de75ea0310e2dde03160e6ca10009947fb95a182f9b54021bb272e34", size = 382235, upload-time = "2026-08-26T13:33:14.56Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/58/50/6c0d534c5f134586a8e1ba4e330569e32f057e33372ae556463212fb4cd3/click-8.5.0-py3-none-any.whl", hash = "sha256:255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360", size = 125251, upload-time = "2026-08-26T13:33:12.928Z" }, +] + +[[package]] +name = "cloudpickle" +version = "3.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/27/fb/576f067976d320f5f0114a8d9fa1215425441bb35627b1993e5afd8111e5/cloudpickle-3.1.2.tar.gz", hash = "sha256:7fda9eb655c9c230dab534f1983763de5835249750e85fbcef43aaa30a9a2414", size = 22330, upload-time = "2025-11-03T09:25:26.604Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl", hash = "sha256:9acb47f6afd73f60dc1df93bb801b472f05ff42fa6c84167d25cb206be1fbf4a", size = 22228, upload-time = "2025-11-03T09:25:25.534Z" }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, +] + +[[package]] +name = "contourpy" +version = "1.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/83/5a/a55177dd22553a277388e8a1b3220e92de91bacb28356cdc73caa240121d/contourpy-1.4.0.tar.gz", hash = "sha256:20156f5a1ac4f8ce02656e39a61e82164a3d359796dc8026f75b062783d500e1", size = 13323726, upload-time = "2026-09-11T19:05:05.808Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/8b/62a6eacea08ea0b6ab0159a7783df7ed421ff9c1ff58fef7c31f58fa5e52/contourpy-1.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e21d1d4a9db5b3a793649c7ab0ddb4697f2818929eec871a7b9c45fce7b2a1ea", size = 297330, upload-time = "2026-09-11T19:03:11.809Z" }, + { url = "https://files.pythonhosted.org/packages/3f/2f/103cdc5b7077cd569989d3ddb99ee3d4e96ee31bde8df2a6e426b2dc6195/contourpy-1.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:196759a3e4db60e1546167e361090ebb6d199aa3aafc9e34ea17a5ac3b23e814", size = 285037, upload-time = "2026-09-11T19:03:13.781Z" }, + { url = "https://files.pythonhosted.org/packages/bf/25/97001d1fdf940e6f5adfc592d4f5899fff95daf7dceead3988fe09987d2d/contourpy-1.4.0-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c0e07c691f3b3321913ed9b8161c50ea5f77fadd006f52f5e755359b0dcbfc5", size = 356675, upload-time = "2026-09-11T19:03:15.374Z" }, + { url = "https://files.pythonhosted.org/packages/a6/5e/9a7241a89e2f74402aefa2569e1349ad2750ff77823c04c788eaaedb7fdd/contourpy-1.4.0-cp313-cp313-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7f861af508fca2384eef392bc1d8377cfa349b2b854cb11b45d89c75780e2561", size = 406990, upload-time = "2026-09-11T19:03:17.44Z" }, + { url = "https://files.pythonhosted.org/packages/36/81/3a4fbbf6a806eada5453a6d16f6c7d96b9f4b3e57a3127368fb545986b8a/contourpy-1.4.0-cp313-cp313-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a03b32c2e7eda8b17757c022162c13c86f5c3d6f937dddf9ba3c3ff7b513953b", size = 407271, upload-time = "2026-09-11T19:03:19.523Z" }, + { url = "https://files.pythonhosted.org/packages/68/77/8f93ecbde1a4d11dfd460cd19a0c159f5487352e751fa87f5d78cc9db08e/contourpy-1.4.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f1219a8898523cba821085f2da8a1b962cc696325763f09d7f93538ba43b2d70", size = 384707, upload-time = "2026-09-11T19:03:21.208Z" }, + { url = "https://files.pythonhosted.org/packages/05/07/e5cdf94d68961ee464de6b4fedd3d2f666584f59ccd124bb1290597122ab/contourpy-1.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:20da2f86bfaed60dbba729fe738c8241b1dd22b6cf7e8cbbf30df290bd04ba28", size = 1356741, upload-time = "2026-09-11T19:03:23.621Z" }, + { url = "https://files.pythonhosted.org/packages/fd/8a/2301d07accb257ac08daeb631875fada06fedd019c20ff7b00ee07e9d211/contourpy-1.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6ced1670fafee703b8277ab1645072a226e74f167166eae146fb743916119b67", size = 1426793, upload-time = "2026-09-11T19:03:25.955Z" }, + { url = "https://files.pythonhosted.org/packages/7d/5d/a62648f06259d15c139b14eb8cf3c58fe53cb970a55f2bb77d1070e80a41/contourpy-1.4.0-cp313-cp313-pyemscripten_2025_0_wasm32.whl", hash = "sha256:abd0f7e51ecc52bf8c95713bd80b1c17c516a71fa391c54475308a4377903c2b", size = 117961, upload-time = "2026-09-11T19:03:27.713Z" }, + { url = "https://files.pythonhosted.org/packages/71/31/c5b7771ba6982f319ec90c0cf5c425b36891adfeee2d9f667f90b2d0c166/contourpy-1.4.0-cp313-cp313-win32.whl", hash = "sha256:510f7d93d94cf6ebf4e2cd0640bea16ab8affac7547230175b6745b596ce0599", size = 347438, upload-time = "2026-09-11T19:03:29.829Z" }, + { url = "https://files.pythonhosted.org/packages/68/c1/a59df0754bf83a6f3e153cc19d550a5b01f607e389b1c4d57f436f9139e0/contourpy-1.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:6507a016976a75a15aee47809a34605de6244ccc056e6164bf9fb14b27eecad4", size = 234084, upload-time = "2026-09-11T19:03:31.657Z" }, + { url = "https://files.pythonhosted.org/packages/41/48/97224f5decb1efa5a610f912195deb45321f73ec9b9dac485cd6fe2d5a6a/contourpy-1.4.0-cp313-cp313-win_arm64.whl", hash = "sha256:423bd5f4b3f11d54a8c597234e513382e3454bb106b8ec7ae32ba4ed63f8d99b", size = 559559, upload-time = "2026-09-11T19:03:33.528Z" }, +] + +[[package]] +name = "cuda-bindings" +version = "13.4.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cuda-pathfinder", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/f8/a9/c83eb5aa055a4b0c3776d83f6f88b9e778a6fe0415210977c889c6a0bb8a/cuda_bindings-13.4.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d7c6c9f46fca7f3fc61959ef9a2398ac656172145b43f408e0a6492360cf1c0c", size = 6316533, upload-time = "2026-09-23T02:22:09.694Z" }, + { url = "https://files.pythonhosted.org/packages/8a/24/9c01edfd2210737ee9471b47db857a079e5a23f2677e5d9778c0ff23d099/cuda_bindings-13.4.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1fd7d8459b364aedc11f3e59703453ced823135f78a9111ca70feef8d56d4d21", size = 6929124, upload-time = "2026-09-23T02:22:11.765Z" }, +] + +[[package]] +name = "cuda-pathfinder" +version = "1.8.2" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/98/59/239c7259e669c46ddbcac0aa60e3a0ef00bfeaaa687f905b24dd6a7a10fe/cuda_pathfinder-1.8.2-py3-none-any.whl", hash = "sha256:4e65059febdb4d19d5cbc4798677e19db2b582f2f702f457b609e571690d357e", size = 62551, upload-time = "2026-09-17T22:19:09.396Z" }, +] + +[[package]] +name = "cuda-toolkit" +version = "13.0.2" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/57/b2/453099f5f3b698d7d0eab38916aac44c7f76229f451709e2eb9db6615dcd/cuda_toolkit-13.0.2-py2.py3-none-any.whl", hash = "sha256:b198824cf2f54003f50d64ada3a0f184b42ca0846c1c94192fa269ecd97a66eb", size = 2364, upload-time = "2025-12-19T23:24:07.328Z" }, +] + +[package.optional-dependencies] +cudart = [ + { name = "nvidia-cuda-runtime", marker = "sys_platform == 'linux'" }, +] +cufft = [ + { name = "nvidia-cufft", marker = "sys_platform == 'linux'" }, +] +cufile = [ + { name = "nvidia-cufile", marker = "sys_platform == 'linux'" }, +] +cupti = [ + { name = "nvidia-cuda-cupti", marker = "sys_platform == 'linux'" }, +] +curand = [ + { name = "nvidia-curand", marker = "sys_platform == 'linux'" }, +] +cusolver = [ + { name = "nvidia-cusolver", marker = "sys_platform == 'linux'" }, +] +cusparse = [ + { name = "nvidia-cusparse", marker = "sys_platform == 'linux'" }, +] +nvjitlink = [ + { name = "nvidia-nvjitlink", marker = "sys_platform == 'linux'" }, +] +nvrtc = [ + { name = "nvidia-cuda-nvrtc", marker = "sys_platform == 'linux'" }, +] +nvtx = [ + { name = "nvidia-nvtx", marker = "sys_platform == 'linux'" }, +] + +[[package]] +name = "cycler" +version = "0.12.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a9/95/a3dbbb5028f35eafb79008e7522a75244477d2838f38cbb722248dabc2a8/cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c", size = 7615, upload-time = "2023-10-07T05:32:18.335Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30", size = 8321, upload-time = "2023-10-07T05:32:16.783Z" }, +] + +[[package]] +name = "diskcache" +version = "5.6.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3f/21/1c1ffc1a039ddcc459db43cc108658f32c57d271d7289a2794e401d0fdb6/diskcache-5.6.3.tar.gz", hash = "sha256:2c3a3fa2743d8535d832ec61c2054a1641f41775aa7c556758a109941e33e4fc", size = 67916, upload-time = "2023-08-31T06:12:00.316Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3f/27/4570e78fc0bf5ea0ca45eb1de3818a23787af9b390c0b0a0033a1b8236f9/diskcache-5.6.3-py3-none-any.whl", hash = "sha256:5e31b2d5fbad117cc363ebaf6b689474db18a1f6438bc82358b024abd4c2ca19", size = 45550, upload-time = "2023-08-31T06:11:58.822Z" }, +] + +[[package]] +name = "filelock" +version = "4.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4f/b8/9ba8f569df649beb7058db5eb392a5f779bdbc3b82cf3942f0be439fb99e/filelock-4.0.3.tar.gz", hash = "sha256:87296d60478e14204fd9406e79831400fef76693bae2895deec236c98e87a8aa", size = 244309, upload-time = "2026-09-23T23:40:22.569Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7a/6d/db8b86e168fef0cf904737e275bccb683558088ef971e92d3b41ce980699/filelock-4.0.3-py3-none-any.whl", hash = "sha256:30cd166e2aee2c7534ce2c33c6367c4cd051b8368e20e2c4eb0c34f699bacfab", size = 108444, upload-time = "2026-09-23T23:40:20.819Z" }, +] + +[[package]] +name = "flatbuffers" +version = "25.12.19" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e8/2d/d2a548598be01649e2d46231d151a6c56d10b964d94043a335ae56ea2d92/flatbuffers-25.12.19-py2.py3-none-any.whl", hash = "sha256:7634f50c427838bb021c2d66a3d1168e9d199b0607e6329399f04846d42e20b4", size = 26661, upload-time = "2025-12-19T23:16:13.622Z" }, +] + +[[package]] +name = "fonttools" +version = "4.66.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/24/86f9930b930b97fc82266083320f3c34643ef67261c32651e893db525aca/fonttools-4.66.0.tar.gz", hash = "sha256:ef0610dfe7bb5bf574d9bdad6f597403ebc9807d124ac6f148d7604b2609be98", size = 3692007, upload-time = "2026-09-23T17:59:14.345Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/c8/1cf0a4f54c8cf351a4d9f8fcad5201dc0c5fb8676efdb1ba7cc3136ca523/fonttools-4.66.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:c144e68572af1dfcb05fe065827d0920d4118b265504928e1d2262e3701a25a1", size = 3094615, upload-time = "2026-09-23T17:57:27.942Z" }, + { url = "https://files.pythonhosted.org/packages/c5/ed/89baf1795841eaad6fcf0ee6f319c236f4379dd98653b4bff294b83d4172/fonttools-4.66.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ada87643b20a8fa5763e6dd4fa0f5e2901cbdbe0833deb6d5c5a9c3186782b94", size = 2586645, upload-time = "2026-09-23T17:57:30.248Z" }, + { url = "https://files.pythonhosted.org/packages/56/f9/982609322f92532bdd769a225c9b3e2bbac0a077c37f7780710db9a8e018/fonttools-4.66.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:700c448f190cc7bbd9f059bd96131f4770e90938c9692550b142153bea73b14c", size = 5389194, upload-time = "2026-09-23T17:57:33.07Z" }, + { url = "https://files.pythonhosted.org/packages/7d/22/12177031dd8be493d5afda574323da19f6ea5488c85202f3a5708c94757c/fonttools-4.66.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c519433e8632284dbe64ee4c81b609a17e205bc1afff285553723964880d1c89", size = 5371422, upload-time = "2026-09-23T17:57:35.915Z" }, + { url = "https://files.pythonhosted.org/packages/19/e1/e8ed0950eb846f4a404ff84aea89e4c93393c2475cdfdf1c03a1b3f4e2ef/fonttools-4.66.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:8739d77810aeb6d2ecd55cc2e4864d98a00c317fb6131a6d22ca58b3f50cf22a", size = 5332183, upload-time = "2026-09-23T17:57:39.041Z" }, + { url = "https://files.pythonhosted.org/packages/3e/fb/c0310cf9838859d74130530ef351a903735c6ecf47418d7d0dc4cf459a9b/fonttools-4.66.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:cffa168522a0e057d3a5628c8ebd43ddf66a34613f42e116bffb85b0b32ce5a0", size = 5490019, upload-time = "2026-09-23T17:57:41.945Z" }, + { url = "https://files.pythonhosted.org/packages/a9/7b/928f334aea18c77f6892895bb1e28388c9e2466e04bc924f93043024c780/fonttools-4.66.0-cp313-cp313-win32.whl", hash = "sha256:379b94fe10651d26caf398eb646b3ecde886a9c504d3cce5e46164d58a78e32d", size = 2432785, upload-time = "2026-09-23T17:57:44.484Z" }, + { url = "https://files.pythonhosted.org/packages/fa/5b/576072a97256f06fe6d0112c522c118fe72390482baf52ad9bfa3b0d1db6/fonttools-4.66.0-cp313-cp313-win_amd64.whl", hash = "sha256:ee4f85d1341af630d787514eef1a0e1ad883f9d6c11a4c1465faeb9cd0bb5ced", size = 2484475, upload-time = "2026-09-23T17:57:46.625Z" }, + { url = "https://files.pythonhosted.org/packages/83/65/826290863c9df6041f2e36a5ae5d604cd8247fffc8ec7b45581fd2473e4d/fonttools-4.66.0-py3-none-any.whl", hash = "sha256:bc7b7ddc1a1f46c363354304e9a8dd93722e4a6a24f785015650898dacf40df9", size = 1201583, upload-time = "2026-09-23T17:59:12.104Z" }, +] + +[[package]] +name = "fsspec" +version = "2026.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/77/cd/9be253869fc42e764de7f3dedd6969af7d44ff9c3375214a3442a6f3fc08/fsspec-2026.9.0.tar.gz", hash = "sha256:0f08147951c8cb31d844c3547d631053b127863b60be04cf06e121333ee0e2fe", size = 333545, upload-time = "2026-09-18T17:50:42.825Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6c/c0/a98505f18594f1bce828bb159cec0fcf9860562f1a2c85913409fc8f3d9e/fsspec-2026.9.0-py3-none-any.whl", hash = "sha256:8dd6e646e99ea382bd85f97a45e6b526a442d79423a7dc673f1e2756d05fcb5f", size = 221738, upload-time = "2026-09-18T17:50:41.341Z" }, +] + +[[package]] +name = "ftfy" +version = "6.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "wcwidth" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a5/d3/8650919bc3c7c6e90ee3fa7fd618bf373cbbe55dff043bd67353dbb20cd8/ftfy-6.3.1.tar.gz", hash = "sha256:9b3c3d90f84fb267fe64d375a07b7f8912d817cf86009ae134aa03e1819506ec", size = 308927, upload-time = "2024-10-26T00:50:35.149Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ab/6e/81d47999aebc1b155f81eca4477a616a70f238a2549848c38983f3c22a82/ftfy-6.3.1-py3-none-any.whl", hash = "sha256:7c70eb532015cd2f9adb53f101fb6c7945988d023a085d127d1573dc49dd0083", size = 44821, upload-time = "2024-10-26T00:50:33.425Z" }, +] + +[[package]] +name = "googleapis-common-protos" +version = "1.75.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "protobuf" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8a/c5/4353a188e2c335aee33269e8b654af228278cca8e5f0b4b5f11e5d0e9adb/googleapis_common_protos-1.75.3.tar.gz", hash = "sha256:57c435ac2c68b108999b6db075d9053e4d7a936ba57b4a3d45667b1346f1738a", size = 153905, upload-time = "2026-09-03T22:31:21.869Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1a/7a/7d79170c6ce6f12e109df2b3879d6b934010cf4f99aea8de8b7e5408c174/googleapis_common_protos-1.75.3-py3-none-any.whl", hash = "sha256:a018d2bf098ca9fb6faa08d5bb780e2a2c2f73c566f069761331386c9596d3f2", size = 306984, upload-time = "2026-09-03T22:30:45.133Z" }, +] + +[[package]] +name = "grpcio" +version = "1.84.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3f/4f/4435c0aae54657258d9cfcba78598f3d9e5fe4c82ff18d78558567b90faf/grpcio-1.84.0.tar.gz", hash = "sha256:19aaf172fc2edbefccce3f6e92c5150975dbe56c45744e9e87cf72ebdf85bfbe", size = 13493876, upload-time = "2026-09-14T06:59:33.291Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5d/51/40f99701adb01d4e5316a2aaf13838da1a24d5c879cd8c95156d7c364454/grpcio-1.84.0-cp313-cp313-linux_armv7l.whl", hash = "sha256:209414080da8c20af94df1395b635da52dd57b5edc9e917e1deca0dc1c4bb55e", size = 6427619, upload-time = "2026-09-14T06:58:06.025Z" }, + { url = "https://files.pythonhosted.org/packages/c5/4b/ed8e22a1237e6b2be6ef4f221d074a5b0e0dd8a0da8c944c04aea731f0eb/grpcio-1.84.0-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:e41c3993eee896c617dbd8a505085d28b6e84a0445ed9a1f40f95808473cf678", size = 12336549, upload-time = "2026-09-14T06:58:08.583Z" }, + { url = "https://files.pythonhosted.org/packages/d3/50/00165b05cd73f45996748ea67ce9e55d08936f2fea94a7fd8541cc2d0e54/grpcio-1.84.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:fff5ef3fe1bba7d6147e5f19e01e5e122ac2c076486887ddcb8d42e663400fbe", size = 6989458, upload-time = "2026-09-14T06:58:11.884Z" }, + { url = "https://files.pythonhosted.org/packages/26/38/d0486230e684d916f97429a53041db88410e662a38f2a8d09e2d90375840/grpcio-1.84.0-cp313-cp313-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:b8c62888c3e49debf37ad9773e3c02f77b0c1e811f8fb0962f2b6c3bbab5b97a", size = 7757778, upload-time = "2026-09-14T06:58:14.849Z" }, + { url = "https://files.pythonhosted.org/packages/da/56/548a643decb059ca244499c675ae2c13a15f523ba94592c2774bd80a13c1/grpcio-1.84.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:986e9751d416d7a6eaa2fecdac38da63153d63a4b340ba7d624889c490451500", size = 7159572, upload-time = "2026-09-14T06:58:17.87Z" }, + { url = "https://files.pythonhosted.org/packages/db/f5/42caac81a79ec680f1f7a8eaf7ca90d2f93936ce0c3a073141ba96757f77/grpcio-1.84.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5933a052946873d01a42119a05420d669bdca436aeba2d1851988ccb12b421c0", size = 7710547, upload-time = "2026-09-14T06:58:20.607Z" }, + { url = "https://files.pythonhosted.org/packages/57/a4/828ad990b2410fee0a55cc73aa1bf98eb5b911c54847374ef4f24b9e877b/grpcio-1.84.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:e094dd21f077af8194923fc263cad872eaa1802bb0156fd7e5ae18e99cd86715", size = 8761519, upload-time = "2026-09-14T06:58:23.875Z" }, + { url = "https://files.pythonhosted.org/packages/d5/a5/1f91af098919eaf5d80d5a61126ad9fae074e5190c25a3014ce1d8d0d890/grpcio-1.84.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:08735e3d08d24ab3132cf87e2e5dea8746cabcc7d676c2b0b7362f195feef9d9", size = 8121424, upload-time = "2026-09-14T06:58:27.006Z" }, + { url = "https://files.pythonhosted.org/packages/8c/8f/77fd4a7a913b636785479922349c4cb98d94d05d15652e556b3ca0df6663/grpcio-1.84.0-cp313-cp313-win32.whl", hash = "sha256:70bb4ce8be0c5606bec259cbd7152374470396413b7863a658a08c849e6b29ff", size = 4477974, upload-time = "2026-09-14T06:58:29.528Z" }, + { url = "https://files.pythonhosted.org/packages/d0/9a/1fa59ddbfc8898e5518d1447e46f771f387f0ed6132ad531395338e51a5c/grpcio-1.84.0-cp313-cp313-win_amd64.whl", hash = "sha256:b61692f0069b3eee2fc8a3a1b7f6c044df9e03fede6ce69b3ca832e1c39f26c5", size = 5255326, upload-time = "2026-09-14T06:58:31.781Z" }, +] + +[[package]] +name = "hf-xet" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1b/ab/522a2ab67f27971a9d48ca666d4fca85ef7d5282d142e31fd087e27b1bbe/hf_xet-1.6.0.tar.gz", hash = "sha256:2e58454a340b3556dfa4972d5451aff4fba8dd42a236600ba1a1d2b1514f0fef", size = 920527, upload-time = "2026-08-03T22:33:13.243Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a2/50/7afa2c9c787405864fc47a0d1bbc02c62e9101947ed43c1f43899fc7d91d/hf_xet-1.6.0-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:633dc0cd71d32da58ab8c03ad38e2fac452c15c2b0a2866ebf6ededfe0a5061d", size = 4071729, upload-time = "2026-08-03T22:33:00.721Z" }, + { url = "https://files.pythonhosted.org/packages/4b/69/55b8dcf636142ae660fec1869fcac14c4da2e8412e14d6eee1523be77e9f/hf_xet-1.6.0-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:f0906082d9932ae0c0057fa194041c22b4e2cdb46b2592ef3b91f020d62a081a", size = 3876287, upload-time = "2026-08-03T22:33:02.251Z" }, + { url = "https://files.pythonhosted.org/packages/67/4e/a28359bf1c1ecf11eba22123168c138698f7cb576ac678f5a2e16cd5da08/hf_xet-1.6.0-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d62671bb130879cef0ee4c9ebe47a14af6c66ec53e6d84dc15936e5ffdfac82f", size = 4464663, upload-time = "2026-08-03T22:33:03.802Z" }, + { url = "https://files.pythonhosted.org/packages/9a/69/1f0cbc2fb22ae6082d094f743d1b8945a3f36f6089cb95f42b7ee348cda7/hf_xet-1.6.0-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:0e6e21fa3cdfcdcd76748564bf593870a5e013f47d97cf10aed63aa222cff5b7", size = 4262538, upload-time = "2026-08-03T22:33:05.287Z" }, + { url = "https://files.pythonhosted.org/packages/d1/3a/4f4f2301ade26e404462d3336fa11f7958d914cabbabdd6e03c3c5d5658c/hf_xet-1.6.0-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:4fc74352a17015bd0ee90038bc9efe38db894cde45f268b6712b04fce8cd0acb", size = 4460520, upload-time = "2026-08-03T22:33:06.81Z" }, + { url = "https://files.pythonhosted.org/packages/ab/5f/311725e2a905534dfee2dcb5b08414f249147f1f12252bfc2bd24caa075c/hf_xet-1.6.0-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:8fb4f71cba6129110c3374a33f919001ff130488fc23553698e34cc1c2a1198c", size = 4675937, upload-time = "2026-08-03T22:33:08.616Z" }, + { url = "https://files.pythonhosted.org/packages/98/b7/8c59a66d15205024662f1d66968136f13893f96df1ddc5087e2e281fc95f/hf_xet-1.6.0-cp38-abi3-win_amd64.whl", hash = "sha256:fb4fadde1b2b70bf4c0c14a6dccbe7194b1c28947fefd5bbe3fed9d940676c3b", size = 4033128, upload-time = "2026-08-03T22:33:10.171Z" }, + { url = "https://files.pythonhosted.org/packages/73/63/ca511b6f802f28cf3489b280fe77475bcca8de85e81a6299d7916b5b5555/hf_xet-1.6.0-cp38-abi3-win_arm64.whl", hash = "sha256:3dc3e35441ba395006af5aaacc40ef2e603c51ef46c3530b9156185f00935ea3", size = 3859359, upload-time = "2026-08-03T22:33:11.725Z" }, +] + +[[package]] +name = "huggingface-hub" +version = "0.36.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "filelock" }, + { name = "fsspec" }, + { name = "hf-xet", marker = "platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'arm64' or platform_machine == 'x86_64'" }, + { name = "packaging" }, + { name = "pyyaml" }, + { name = "requests" }, + { name = "tqdm" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7c/b7/8cb61d2eece5fb05a83271da168186721c450eb74e3c31f7ef3169fa475b/huggingface_hub-0.36.2.tar.gz", hash = "sha256:1934304d2fb224f8afa3b87007d58501acfda9215b334eed53072dd5e815ff7a", size = 649782, upload-time = "2026-02-06T09:24:13.098Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a8/af/48ac8483240de756d2438c380746e7130d1c6f75802ef22f3c6d49982787/huggingface_hub-0.36.2-py3-none-any.whl", hash = "sha256:48f0c8eac16145dfce371e9d2d7772854a4f591bcb56c9cf548accf531d54270", size = 566395, upload-time = "2026-02-06T09:24:11.133Z" }, +] + +[[package]] +name = "idna" +version = "3.20" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f5/08/8eea9d4b8302028f3abb2c0813953f7aec26d33b7a8960ed760e65ff29fa/idna-3.20.tar.gz", hash = "sha256:a7db850025b95ded1eae8a46181a1a6c56c92c96f0e2b005d9ff8dc0210cab44", size = 216463, upload-time = "2026-09-17T14:11:04.752Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/58/a2/bb081bab032533a855d44de1d56f8e8426114ff1ba5d1f07a438a0a654f8/idna-3.20-py3-none-any.whl", hash = "sha256:ab7ae7122974553370f0bdb919e1a960b2cd1bc1ef0276416d896db81c14582c", size = 69583, upload-time = "2026-09-17T14:11:03.168Z" }, +] + +[[package]] +name = "jinja2" +version = "3.1.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115, upload-time = "2025-03-05T20:05:02.478Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z" }, +] + +[[package]] +name = "joblib" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cloudpickle" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d5/1d/537ab090f302b838943a1b56497dd53059b9a9b46a074936470173a2e207/joblib-1.6.0.tar.gz", hash = "sha256:2ccc96785b12046c08fd6d55839c12857831b54a3c1673ffadd2f04bfc4eda03", size = 327903, upload-time = "2026-08-31T09:39:04.122Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/18/53/84099323c2ec4be98d935f63c033ac4151ee83836ca1050ede3b3aadf155/joblib-1.6.0-py3-none-any.whl", hash = "sha256:3dbbf9f6e4b592a2357b854608e980fe6390d131d7a82f011a377ef2ebef7aba", size = 306115, upload-time = "2026-08-31T09:39:02.298Z" }, +] + +[[package]] +name = "kiwisolver" +version = "1.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ba/07/bd78e6a8fae171ea041ef5bba3ed21a003522fa088834b069b1909981f30/kiwisolver-1.5.1.tar.gz", hash = "sha256:f1303ef2eec81262a4b708c3e858afe58d7c75ad91c1c05266eda7673369859a", size = 104395, upload-time = "2026-08-28T10:28:27.153Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/08/c1/88018321d976f53c421e379c43bc6993e70ce0c8a3ec5edc4bfe102257f6/kiwisolver-1.5.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:b6ae6a0328f0bc035741820fdeecdcd67bf4694eee03972e843663107122f450", size = 62272, upload-time = "2026-08-28T10:25:51.02Z" }, + { url = "https://files.pythonhosted.org/packages/85/d2/712bc17ea4f1d216034928069d612defbc6c95a471c55a7203a39faecb1a/kiwisolver-1.5.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:886fc26012f0e8b5f69d1cfe6d711f6b11f194621539bf8e6bb1c25c5dc82724", size = 64481, upload-time = "2026-08-28T10:25:52.22Z" }, + { url = "https://files.pythonhosted.org/packages/1b/e6/6c5380d676f43b6d918033962ea5e72360ca69e5a404154bc496b598ffdb/kiwisolver-1.5.1-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:aefe930d113798330e9462f7874542977869c0613cba3262e2de3a8d5dee8f3a", size = 66260, upload-time = "2026-08-28T10:25:53.387Z" }, + { url = "https://files.pythonhosted.org/packages/92/6a/7087f5822cc8bb272679641404b1966a42504dac9ee74e2b33840475a0aa/kiwisolver-1.5.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a5ca5aebae78a0bc13c1943af4af615d4966c5b650b05d5aa83b50e427196fee", size = 123876, upload-time = "2026-08-28T10:25:54.644Z" }, + { url = "https://files.pythonhosted.org/packages/5c/4b/9f385087ca09ee5ab9c09c6832561a7d2f7c78d3e5661d511e669f70e439/kiwisolver-1.5.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1ed0f5e49d0ceff8b72190824d9e59c062fbbc02c231b853112c78474b3f5ec2", size = 66487, upload-time = "2026-08-28T10:25:55.899Z" }, + { url = "https://files.pythonhosted.org/packages/47/8b/40d33ffd2f378094ed462e9a9a0907e59d4de9845e65a59561272da350d4/kiwisolver-1.5.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:77a4c8187a5948d7f8795adb765a3c7b553d07d86d88e43038fc32fc1fb9a3f3", size = 64673, upload-time = "2026-08-28T10:25:57.048Z" }, + { url = "https://files.pythonhosted.org/packages/ab/43/86aacc027959108b4c66eeae8b73cedb057dfa6eb3a335d05ad65197081c/kiwisolver-1.5.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:74ad5c3dad54a4641b4c28cd15ded70899d04459c6c7aeacafea716be97cce6d", size = 1477992, upload-time = "2026-08-28T10:25:58.479Z" }, + { url = "https://files.pythonhosted.org/packages/ed/40/b1d0369048c79733a32c8abb0f2718532e6630641368e33a81384246e844/kiwisolver-1.5.1-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:21e46b23a2da695c364124817bc01d970effd5483147f8d66a6a7167e3f6b851", size = 1278821, upload-time = "2026-08-28T10:26:00.121Z" }, + { url = "https://files.pythonhosted.org/packages/61/a1/fa71c1792272ff9461432715ae60ffb7e11a4d7ac3bf68961b9cab6c60cf/kiwisolver-1.5.1-cp313-cp313-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:75d9b1cf8258462dbdc1eeda718c96ea7f079324c09067f6daabfcf37712b7fe", size = 1296805, upload-time = "2026-08-28T10:26:01.868Z" }, + { url = "https://files.pythonhosted.org/packages/a3/49/3f0bd94af8e06ecc47eb834b195a06f05d48711ceb2352c56d6835160f0e/kiwisolver-1.5.1-cp313-cp313-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8fca690b00c4c48f6c2a547b0160ed511357093a4e4c9b47e0fadf3128066d89", size = 1346109, upload-time = "2026-08-28T10:26:03.59Z" }, + { url = "https://files.pythonhosted.org/packages/a4/44/3afe6ef9cf06d61220953a8963e94eca978491be1d9547cb01d82a1efa08/kiwisolver-1.5.1-cp313-cp313-manylinux_2_39_riscv64.whl", hash = "sha256:876bbfd276473d3daffe30e8c975df4ed9429967b41a6cb362dbb5155b6f13ad", size = 988252, upload-time = "2026-08-28T10:26:05.306Z" }, + { url = "https://files.pythonhosted.org/packages/e4/30/a12bd7a7285a211e1747c3eec77b8c614dbfcc1dad942f7611a1a6921ae5/kiwisolver-1.5.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f942903fde7363d1d879057ec5de01310efda2597161784d752fa9953a01a71a", size = 2228846, upload-time = "2026-08-28T10:26:07.312Z" }, + { url = "https://files.pythonhosted.org/packages/a1/6b/233e2958abf0dab7b18d07e52f286e02e519d7651bfbbe97af9347564109/kiwisolver-1.5.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c90d3022d8a94778939cda8638c6c8da8fa757b8958dad7ec868ce29c87681b8", size = 2325583, upload-time = "2026-08-28T10:26:09.093Z" }, + { url = "https://files.pythonhosted.org/packages/42/8e/7673060a27b01405b580058510adef34687069d229800239f5e44682d4d0/kiwisolver-1.5.1-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:8a34616dc2521cc8dc1d7d081734da63539f021ac0450ce950908340c6e7aa2f", size = 1978221, upload-time = "2026-08-28T10:26:11.127Z" }, + { url = "https://files.pythonhosted.org/packages/3f/7b/1b882fc1a8b4a0bb8084e7d1d85004116d08c92c0705d31f2928dec607f2/kiwisolver-1.5.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:8bf4df63592c2a66b4f8edc5df2544998c288aa02f96ce0acd880cd1de8c8127", size = 2491819, upload-time = "2026-08-28T10:26:13.348Z" }, + { url = "https://files.pythonhosted.org/packages/39/9c/426deb49e62c5f69464b64bbeca064d3b758a7506b8913d986ef34f4619c/kiwisolver-1.5.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d09037ca068d784ebc4aec290ef952ca27ac15dd9c0b5801a88c6e1096b83e6b", size = 2295520, upload-time = "2026-08-28T10:26:15.042Z" }, + { url = "https://files.pythonhosted.org/packages/f5/22/deabbb3ad6d918d74b7831b2d8ae7151b09d21c87974e5ee8a456f58c94c/kiwisolver-1.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:dc23390afe9f4ef9ac3bcc72a03a56eebbde03f4c571a32cb38f859cff9a6524", size = 70758, upload-time = "2026-08-28T10:26:16.504Z" }, + { url = "https://files.pythonhosted.org/packages/b9/71/02fa5c2fd92068bb8952847e70ee6c5cb280e7febe11653d17812acc53dd/kiwisolver-1.5.1-cp313-cp313-win_arm64.whl", hash = "sha256:186884a58486651e3c217b6acea0a53eaa9498fdd472057c46f2f0fb5c25aad5", size = 68329, upload-time = "2026-08-28T10:26:17.658Z" }, +] + +[[package]] +name = "mambo-ucloud-release" +version = "0.1.0" +source = { virtual = "." } +dependencies = [ + { name = "huggingface-hub" }, + { name = "mambo-v3" }, + { name = "mini-metrics" }, + { name = "mt-trainer", extra = ["bioclip", "recommended", "timm"] }, + { name = "onnxruntime-gpu", extra = ["cuda", "cudnn"] }, + { name = "open-clip-torch" }, + { name = "safetensors" }, + { name = "timm" }, + { name = "torch" }, + { name = "torchvision" }, +] + +[package.metadata] +requires-dist = [ + { name = "huggingface-hub", specifier = "==0.36.2" }, + { name = "mambo-v3", directory = "../../../../deployment" }, + { name = "mini-metrics", git = "https://github.com/GuillaumeMougeot/mini_metrics.git?rev=70cc69adc05362863439277048e06386c1f885e1" }, + { name = "mt-trainer", extras = ["recommended", "bioclip", "timm"], directory = "../../../../" }, + { name = "onnxruntime-gpu", extras = ["cuda", "cudnn"], specifier = ">=1.27,<2" }, + { name = "open-clip-torch", specifier = "==3.3.0" }, + { name = "safetensors", specifier = "==0.6.2" }, + { name = "timm", specifier = "==1.0.25" }, + { name = "torch", specifier = "==2.12.0", index = "https://download.pytorch.org/whl/cu130" }, + { name = "torchvision", specifier = "==0.27.0", index = "https://download.pytorch.org/whl/cu130" }, +] + +[[package]] +name = "mambo-v3" +version = "0.3.0" +source = { directory = "../../../../deployment" } +dependencies = [ + { name = "numpy" }, + { name = "pillow" }, +] + +[package.metadata] +requires-dist = [ + { name = "mt-trainer", marker = "extra == 'torch'", specifier = ">=0.3.0,<0.4" }, + { name = "numpy", specifier = ">=2.4" }, + { name = "onnxruntime", marker = "extra == 'onnx'", specifier = ">=1.20" }, + { name = "onnxruntime-gpu", extras = ["cuda", "cudnn"], marker = "extra == 'onnx-cuda'", specifier = ">=1.21,<2" }, + { name = "pillow", specifier = ">=11" }, +] +provides-extras = ["onnx", "onnx-cuda", "torch"] + +[[package]] +name = "markdown" +version = "3.10.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/29/6f/da4c6aea59b3001f2e8c0ec7497475aadaf3b021c10cab5b2858f0f32b26/markdown-3.10.3.tar.gz", hash = "sha256:3589362618f743188b4d955b874402bc814f4f83f544dc207719f4baa7d9c45f", size = 372596, upload-time = "2026-07-30T19:05:29.005Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/64/69/4a5af2bc115a9a33fefe51709749de8262be3f9ba063d1753a837cdbc49c/markdown-3.10.3-py3-none-any.whl", hash = "sha256:fa6c92a00a4a3c98b22728c64a935ae1928250ae65058a6ded814d2cc29a4cea", size = 110757, upload-time = "2026-07-30T19:05:27.883Z" }, +] + +[[package]] +name = "markupsafe" +version = "3.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7e/99/7690b6d4034fffd95959cbe0c02de8deb3098cc577c67bb6a24fe5d7caa7/markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698", size = 80313, upload-time = "2025-09-27T18:37:40.426Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/2f/907b9c7bbba283e68f20259574b13d005c121a0fa4c175f9bed27c4597ff/markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795", size = 11622, upload-time = "2025-09-27T18:36:41.777Z" }, + { url = "https://files.pythonhosted.org/packages/9c/d9/5f7756922cdd676869eca1c4e3c0cd0df60ed30199ffd775e319089cb3ed/markupsafe-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219", size = 12029, upload-time = "2025-09-27T18:36:43.257Z" }, + { url = "https://files.pythonhosted.org/packages/00/07/575a68c754943058c78f30db02ee03a64b3c638586fba6a6dd56830b30a3/markupsafe-3.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6", size = 24374, upload-time = "2025-09-27T18:36:44.508Z" }, + { url = "https://files.pythonhosted.org/packages/a9/21/9b05698b46f218fc0e118e1f8168395c65c8a2c750ae2bab54fc4bd4e0e8/markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676", size = 22980, upload-time = "2025-09-27T18:36:45.385Z" }, + { url = "https://files.pythonhosted.org/packages/7f/71/544260864f893f18b6827315b988c146b559391e6e7e8f7252839b1b846a/markupsafe-3.0.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9", size = 21990, upload-time = "2025-09-27T18:36:46.916Z" }, + { url = "https://files.pythonhosted.org/packages/c2/28/b50fc2f74d1ad761af2f5dcce7492648b983d00a65b8c0e0cb457c82ebbe/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1", size = 23784, upload-time = "2025-09-27T18:36:47.884Z" }, + { url = "https://files.pythonhosted.org/packages/ed/76/104b2aa106a208da8b17a2fb72e033a5a9d7073c68f7e508b94916ed47a9/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc", size = 21588, upload-time = "2025-09-27T18:36:48.82Z" }, + { url = "https://files.pythonhosted.org/packages/b5/99/16a5eb2d140087ebd97180d95249b00a03aa87e29cc224056274f2e45fd6/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12", size = 23041, upload-time = "2025-09-27T18:36:49.797Z" }, + { url = "https://files.pythonhosted.org/packages/19/bc/e7140ed90c5d61d77cea142eed9f9c303f4c4806f60a1044c13e3f1471d0/markupsafe-3.0.3-cp313-cp313-win32.whl", hash = "sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed", size = 14543, upload-time = "2025-09-27T18:36:51.584Z" }, + { url = "https://files.pythonhosted.org/packages/05/73/c4abe620b841b6b791f2edc248f556900667a5a1cf023a6646967ae98335/markupsafe-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5", size = 15113, upload-time = "2025-09-27T18:36:52.537Z" }, + { url = "https://files.pythonhosted.org/packages/f0/3a/fa34a0f7cfef23cf9500d68cb7c32dd64ffd58a12b09225fb03dd37d5b80/markupsafe-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485", size = 13911, upload-time = "2025-09-27T18:36:53.513Z" }, + { url = "https://files.pythonhosted.org/packages/e4/d7/e05cd7efe43a88a17a37b3ae96e79a19e846f3f456fe79c57ca61356ef01/markupsafe-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73", size = 11658, upload-time = "2025-09-27T18:36:54.819Z" }, + { url = "https://files.pythonhosted.org/packages/99/9e/e412117548182ce2148bdeacdda3bb494260c0b0184360fe0d56389b523b/markupsafe-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37", size = 12066, upload-time = "2025-09-27T18:36:55.714Z" }, + { url = "https://files.pythonhosted.org/packages/bc/e6/fa0ffcda717ef64a5108eaa7b4f5ed28d56122c9a6d70ab8b72f9f715c80/markupsafe-3.0.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19", size = 25639, upload-time = "2025-09-27T18:36:56.908Z" }, + { url = "https://files.pythonhosted.org/packages/96/ec/2102e881fe9d25fc16cb4b25d5f5cde50970967ffa5dddafdb771237062d/markupsafe-3.0.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025", size = 23569, upload-time = "2025-09-27T18:36:57.913Z" }, + { url = "https://files.pythonhosted.org/packages/4b/30/6f2fce1f1f205fc9323255b216ca8a235b15860c34b6798f810f05828e32/markupsafe-3.0.3-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6", size = 23284, upload-time = "2025-09-27T18:36:58.833Z" }, + { url = "https://files.pythonhosted.org/packages/58/47/4a0ccea4ab9f5dcb6f79c0236d954acb382202721e704223a8aafa38b5c8/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f", size = 24801, upload-time = "2025-09-27T18:36:59.739Z" }, + { url = "https://files.pythonhosted.org/packages/6a/70/3780e9b72180b6fecb83a4814d84c3bf4b4ae4bf0b19c27196104149734c/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb", size = 22769, upload-time = "2025-09-27T18:37:00.719Z" }, + { url = "https://files.pythonhosted.org/packages/98/c5/c03c7f4125180fc215220c035beac6b9cb684bc7a067c84fc69414d315f5/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009", size = 23642, upload-time = "2025-09-27T18:37:01.673Z" }, + { url = "https://files.pythonhosted.org/packages/80/d6/2d1b89f6ca4bff1036499b1e29a1d02d282259f3681540e16563f27ebc23/markupsafe-3.0.3-cp313-cp313t-win32.whl", hash = "sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354", size = 14612, upload-time = "2025-09-27T18:37:02.639Z" }, + { url = "https://files.pythonhosted.org/packages/2b/98/e48a4bfba0a0ffcf9925fe2d69240bfaa19c6f7507b8cd09c70684a53c1e/markupsafe-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218", size = 15200, upload-time = "2025-09-27T18:37:03.582Z" }, + { url = "https://files.pythonhosted.org/packages/0e/72/e3cc540f351f316e9ed0f092757459afbc595824ca724cbc5a5d4263713f/markupsafe-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287", size = 13973, upload-time = "2025-09-27T18:37:04.929Z" }, +] + +[[package]] +name = "matplotlib" +version = "3.11.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "contourpy" }, + { name = "cycler" }, + { name = "fonttools" }, + { name = "kiwisolver" }, + { name = "numpy" }, + { name = "packaging" }, + { name = "pillow" }, + { name = "pyparsing" }, + { name = "python-dateutil" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e7/c8/9aa712a0afb882649424dd8de8ad9aa6235e796e84c6052e8f6dc1598d0d/matplotlib-3.11.2.tar.gz", hash = "sha256:cec596316640f2b394b8f0daa0ea61a8eae82d017b620b9f202befb972a59ea4", size = 32660610, upload-time = "2026-09-11T19:05:31.214Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bf/ce/fc58855a3d17f6cb8a87b6f9ccd100f65432a3a7ffed57309cbf14c78987/matplotlib-3.11.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:7d43ff8cebb50840648cb6429b2228621dbd709010f3117b3740abb20abf21c0", size = 9476987, upload-time = "2026-09-11T19:03:40.17Z" }, + { url = "https://files.pythonhosted.org/packages/a9/29/2a47b700545aca050e0ed73c89ba21e08407e11f5f42a567421b220de6c1/matplotlib-3.11.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2a8285cea8ef4d92aa041d1c33788bcae82248503300f93f1ca2136b9049452f", size = 9306050, upload-time = "2026-09-11T19:03:43.103Z" }, + { url = "https://files.pythonhosted.org/packages/a9/df/e7c10292f348cf55178a5b3c0092a38ea68891a3945f199ae8b7b8ac9dc1/matplotlib-3.11.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1944895967f87c84c9b4bad29a707b31f5b36df4a3a2339ea1f8ea3ce5105539", size = 9861060, upload-time = "2026-09-11T19:03:46.044Z" }, + { url = "https://files.pythonhosted.org/packages/e4/b9/b978de6d43d47f1d4d8e653fac32c16d8d2e5f46bbbb822e26d7cb1adece/matplotlib-3.11.2-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:af2661f6ac6bbd1d081996f54fdd9385715c625ace8cec0869055c0cfbf38981", size = 10670885, upload-time = "2026-09-11T19:03:48.942Z" }, + { url = "https://files.pythonhosted.org/packages/a3/80/d72f61bb2631ac15d17fada1f17e0f99fecba69d8376d34f17cf93b7eddd/matplotlib-3.11.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7e5a90f8a707ebb6004a713b1cff091a40cc5df4c7c1cb165e5a505ebc11c292", size = 10811222, upload-time = "2026-09-11T19:03:51.665Z" }, + { url = "https://files.pythonhosted.org/packages/94/2e/6d1d33f242c705b5c6c6fb3f0fc141add51cb1abb62912e59de0835d28c4/matplotlib-3.11.2-cp313-cp313-win_amd64.whl", hash = "sha256:bc067c462a86f0e57bf52fc6e058d90171a5420007dac00c46e90153050c69a7", size = 9349539, upload-time = "2026-09-11T19:03:54.534Z" }, + { url = "https://files.pythonhosted.org/packages/bb/bb/c0aa86a7f4c0e62f1c3c0711e361f6f23f87eb9018732a5e11994bd1b7ec/matplotlib-3.11.2-cp313-cp313-win_arm64.whl", hash = "sha256:3e8576f7c47e02fd4f21f44171302d2d1d58d4471d46da3d71fe8899d19539d9", size = 9028295, upload-time = "2026-09-11T19:03:57.261Z" }, +] + +[[package]] +name = "mini-metrics" +version = "0.3.0" +source = { git = "https://github.com/GuillaumeMougeot/mini_metrics.git?rev=70cc69adc05362863439277048e06386c1f885e1#70cc69adc05362863439277048e06386c1f885e1" } +dependencies = [ + { name = "matplotlib" }, + { name = "numpy" }, + { name = "pandas" }, + { name = "scikit-learn" }, + { name = "tqdm" }, +] + +[[package]] +name = "mpmath" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e0/47/dd32fa426cc72114383ac549964eecb20ecfd886d1e5ccf5340b55b02f57/mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f", size = 508106, upload-time = "2023-03-07T16:47:11.061Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c", size = 536198, upload-time = "2023-03-07T16:47:09.197Z" }, +] + +[[package]] +name = "mt-trainer" +version = "0.3.0" +source = { directory = "../../../../" } +dependencies = [ + { name = "diskcache" }, + { name = "matplotlib" }, + { name = "numpy" }, + { name = "psutil" }, + { name = "pyyaml" }, + { name = "torch" }, + { name = "torchvision" }, + { name = "tqdm" }, +] + +[package.optional-dependencies] +bioclip = [ + { name = "open-clip-torch" }, +] +recommended = [ + { name = "biopython" }, + { name = "pyarrow" }, + { name = "pycirclize" }, + { name = "scipy" }, + { name = "setuptools" }, + { name = "tensorboard" }, + { name = "wandb" }, +] +timm = [ + { name = "timm" }, +] + +[package.metadata] +requires-dist = [ + { name = "biopython", marker = "extra == 'recommended'", specifier = ">=1.80" }, + { name = "diskcache" }, + { name = "ipykernel", marker = "extra == 'notebook'" }, + { name = "ipywidgets", marker = "extra == 'notebook'" }, + { name = "matplotlib" }, + { name = "mt-trainer", extras = ["bioclip"], marker = "extra == 'all'" }, + { name = "mt-trainer", extras = ["export"], marker = "extra == 'all'" }, + { name = "mt-trainer", extras = ["notebook"], marker = "extra == 'all'" }, + { name = "mt-trainer", extras = ["recommended"], marker = "extra == 'all'" }, + { name = "mt-trainer", extras = ["timm"], marker = "extra == 'all'" }, + { name = "mt-trainer", extras = ["transformers"], marker = "extra == 'all'" }, + { name = "numpy", specifier = ">=2.4.0" }, + { name = "onnx", marker = "extra == 'export'", specifier = ">=1.17" }, + { name = "onnxruntime", marker = "extra == 'export'", specifier = ">=1.20" }, + { name = "onnxscript", marker = "extra == 'export'", specifier = ">=0.3" }, + { name = "open-clip-torch", marker = "extra == 'bioclip'" }, + { name = "psutil" }, + { name = "pyarrow", marker = "extra == 'recommended'" }, + { name = "pycirclize", marker = "extra == 'recommended'", specifier = ">=1.10.1" }, + { name = "pyremotedata", marker = "extra == 'notebook'" }, + { name = "pyyaml", specifier = ">=6.0.3" }, + { name = "scipy", marker = "extra == 'recommended'" }, + { name = "setuptools", marker = "extra == 'recommended'", specifier = "<=81.0.0" }, + { name = "tensorboard", marker = "extra == 'recommended'" }, + { name = "timm", marker = "extra == 'timm'" }, + { name = "torch", specifier = ">=2.11" }, + { name = "torch", marker = "extra == 'cpu'", specifier = ">=2.11", index = "https://download.pytorch.org/whl/cpu", conflict = { package = "mt-trainer", extra = "cpu" } }, + { name = "torch", marker = "extra == 'cu126'", specifier = ">=2.11", index = "https://download.pytorch.org/whl/cu126", conflict = { package = "mt-trainer", extra = "cu126" } }, + { name = "torch", marker = "extra == 'cu130'", specifier = ">=2.11", index = "https://download.pytorch.org/whl/cu130", conflict = { package = "mt-trainer", extra = "cu130" } }, + { name = "torch", marker = "extra == 'cu132'", specifier = ">=2.11", index = "https://download.pytorch.org/whl/cu132", conflict = { package = "mt-trainer", extra = "cu132" } }, + { name = "torchao", marker = "extra == 'quantization'", specifier = ">=0.17,<0.18" }, + { name = "torchvision" }, + { name = "torchvision", marker = "extra == 'cpu'", index = "https://download.pytorch.org/whl/cpu", conflict = { package = "mt-trainer", extra = "cpu" } }, + { name = "torchvision", marker = "extra == 'cu126'", index = "https://download.pytorch.org/whl/cu126", conflict = { package = "mt-trainer", extra = "cu126" } }, + { name = "torchvision", marker = "extra == 'cu130'", index = "https://download.pytorch.org/whl/cu130", conflict = { package = "mt-trainer", extra = "cu130" } }, + { name = "torchvision", marker = "extra == 'cu132'", index = "https://download.pytorch.org/whl/cu132", conflict = { package = "mt-trainer", extra = "cu132" } }, + { name = "tqdm" }, + { name = "transformers", marker = "extra == 'transformers'" }, + { name = "wandb", marker = "extra == 'recommended'" }, +] +provides-extras = ["recommended", "all", "quantization", "export", "minimal", "notebook", "bioclip", "transformers", "timm", "cpu", "cu126", "cu130", "cu132"] + +[package.metadata.requires-dev] +dev = [ + { name = "import-linter", specifier = ">=2.0" }, + { name = "pytest", specifier = ">=8.0.0" }, + { name = "pytest-cov", specifier = ">=5.0.0" }, + { name = "ruff", specifier = ">=0.14.5" }, +] + +[[package]] +name = "narwhals" +version = "2.26.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/35/68/5351e34623d253423240ea7de3f8fc74fa8ab14b1ab3c0ec4ac8997413c9/narwhals-2.26.0.tar.gz", hash = "sha256:6b9cadca82f375c7e4cf584fdc86ca25da54827307a9c58f94547ee6104b82dd", size = 686970, upload-time = "2026-09-08T13:32:08.964Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/40/b5/1b84b2c784db76d69442334bc8b8748c840f13ca53be086f4f250ad4a0bc/narwhals-2.26.0-py3-none-any.whl", hash = "sha256:29326d74f107c347fd1009bd58e38d9f7c7c5b51e6de97bc93dbc325d9038b54", size = 474034, upload-time = "2026-09-08T13:32:07.159Z" }, +] + +[[package]] +name = "networkx" +version = "3.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/dc/76/3af777226b63a5e64a6b36b1ec5855c14e2b94a37096d4760e595fc43511/networkx-3.7.tar.gz", hash = "sha256:fd77a511bd90f39f3d016351345b52cf5319b813bdca01de3f755d3cca62e96a", size = 1866482, upload-time = "2026-09-21T16:45:16.974Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/cd/fe58041e9011f307c490e3e17dd48cc516448f7c698a3f2d9d9d65d7e6a8/networkx-3.7-py3-none-any.whl", hash = "sha256:e3fd2c13a7814cee3746340d8d7f8598a67f16a58bf47fb7f8793fab6efca1b0", size = 2142205, upload-time = "2026-09-21T16:45:14.609Z" }, +] + +[[package]] +name = "numpy" +version = "2.5.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/13/01/11703282db468b85f6f7b8c7f22d058de5970d5c7e60a3a8aaa313c3de36/numpy-2.5.3.tar.gz", hash = "sha256:df2d5874ff183595a4ba404edd04f6bd9b5505c1d7708573f6a6c17489a67563", size = 20791231, upload-time = "2026-09-06T16:27:47.073Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/79/e5/8fb89cd46d14e35699d13bf943a5f5f441ecee8667120a1f6105ab89e349/numpy-2.5.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:66a78fe4556c60aceda5916f9eacd638b18e9e681016ec302dcb4682d6d4d034", size = 16991061, upload-time = "2026-09-06T16:25:00.411Z" }, + { url = "https://files.pythonhosted.org/packages/2f/06/9dc9e48b5e5e941c8b10350c5ff2d721da42a20517d911d15544246775ff/numpy-2.5.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:92f30e89b8ee0ecf363033576c422b2f58fed6a80bed0aa48dff6d14c654663e", size = 12003676, upload-time = "2026-09-06T16:25:03.475Z" }, + { url = "https://files.pythonhosted.org/packages/ab/2a/98282aa5b8f58b1157d440bb6282eed47e3632a5de53a714fbab17e659fe/numpy-2.5.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:f9a2353b37a1a9e78fd82b27ad7e2a32a2d036604d18f02b05e3136c62ca3b09", size = 5439695, upload-time = "2026-09-06T16:25:05.978Z" }, + { url = "https://files.pythonhosted.org/packages/a1/f9/b6533d777be9d6ffd29dc1be0867e563e6e8cc9a220ff1b716adc317f060/numpy-2.5.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:ccbc4665079665c3cf3bab4db9f6b095370cd6437d66be549b6c2a1fd19e1958", size = 6779395, upload-time = "2026-09-06T16:25:08.599Z" }, + { url = "https://files.pythonhosted.org/packages/73/85/735720d04ec197c5dcfacdfc9922667c7f1f5f496a279b7ba4d7c74c4cc7/numpy-2.5.3-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c76d5dde9f445058f83d0c02af00557a4db91de9a9a57c0df87d1535001d654b", size = 15681750, upload-time = "2026-09-06T16:25:11.173Z" }, + { url = "https://files.pythonhosted.org/packages/3a/1b/3b16a9bc514a440a7a0883684111dcb1ef1aee960af2ca95da8fc775f124/numpy-2.5.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a5fa86b80fd24bcd1aff83ad23be44ea323de3f787be8f8b15d4a65621e25321", size = 16708577, upload-time = "2026-09-06T16:25:14.171Z" }, + { url = "https://files.pythonhosted.org/packages/69/c4/386f397831b07328b639c96c5b62719346cf4baf07c68d927239752b1534/numpy-2.5.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bd4cb9ad3c7889b9b3fe0a9a9fb5d2ed26f9879bff2608d9f01aed147a20d231", size = 17042047, upload-time = "2026-09-06T16:25:17.582Z" }, + { url = "https://files.pythonhosted.org/packages/5f/3e/a700ecbf36e85ae8328fd3b0e12eeddc22ed6358a64cb2bd913e0d195d65/numpy-2.5.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1302b90c0e52281681b2975adfe8a860cb7b12216a27b4b0b4207c44bf7bccf0", size = 18465724, upload-time = "2026-09-06T16:25:20.949Z" }, + { url = "https://files.pythonhosted.org/packages/41/ee/38e785e88a4045f6ad1d1f2808dcdfafdca48c760260c0587bf171e29fc9/numpy-2.5.3-cp313-cp313-win32.whl", hash = "sha256:1c80eabb4035ecf4ca9cd49cde8a9fdd69a729e63e6474887d1523ade7aa277f", size = 6129003, upload-time = "2026-09-06T16:25:23.664Z" }, + { url = "https://files.pythonhosted.org/packages/f3/ec/100f2b1794ede74a9b3d7ec6b9736927f56713414c1dfe19ab6c383494bf/numpy-2.5.3-cp313-cp313-win_amd64.whl", hash = "sha256:71cad2b2a7451ab79d8f5e71b453485b6775963d5cf794179144a7463fe6e8ec", size = 12560965, upload-time = "2026-09-06T16:25:26.602Z" }, + { url = "https://files.pythonhosted.org/packages/80/b1/7dc825ca94c12acebbce4c37caa5e198695eb31424bc579679f32b1bb49d/numpy-2.5.3-cp313-cp313-win_arm64.whl", hash = "sha256:8e4dd766076855b5ff7ea52fa5f07ce26286726e0f8bff446b7739d02e6ea204", size = 10482343, upload-time = "2026-09-06T16:25:29.772Z" }, +] + +[[package]] +name = "nvidia-cublas" +version = "13.1.1.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-cuda-nvrtc" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/a7/a1/0bd24ee8c8d03adac032fd2909426a00c88f8c57961b1277ded97f91119f/nvidia_cublas-13.1.1.3-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:b7a210458267ac818974c53038fbec2e969d5c99f305ab15c72522fa9f001dd5", size = 542848918, upload-time = "2026-04-08T18:46:22.985Z" }, + { url = "https://files.pythonhosted.org/packages/3b/cd/154ca20c38269e05eff77c1464e6c1da89f50a6390b565e9d82e06bc11e1/nvidia_cublas-13.1.1.3-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:37936a16db8fe4ac1f065c2139360608a543a09275cb1a1af612e08cfa065436", size = 423138758, upload-time = "2026-04-08T18:46:58.655Z" }, + { url = "https://files.pythonhosted.org/packages/45/9e/2f562daf80eb8f7a685fb7bea4fda71f6048e4f359d6fdd1b6e70206cb2f/nvidia_cublas-13.1.1.3-py3-none-win_amd64.whl", hash = "sha256:b6cdce694e47ff6aadf0a69df1cab6628d696f5ff56e8d16af50309d855fa20f", size = 404358158, upload-time = "2026-04-08T18:47:26.987Z" }, +] + +[[package]] +name = "nvidia-cuda-cupti" +version = "13.0.85" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/2a/80353b103fc20ce05ef51e928daed4b6015db4aaa9162ed0997090fe2250/nvidia_cuda_cupti-13.0.85-py3-none-manylinux_2_25_aarch64.whl", hash = "sha256:796bd679890ee55fb14a94629b698b6db54bcfd833d391d5e94017dd9d7d3151", size = 10310827, upload-time = "2025-09-04T08:26:42.012Z" }, + { url = "https://files.pythonhosted.org/packages/33/6d/737d164b4837a9bbd202f5ae3078975f0525a55730fe871d8ed4e3b952b0/nvidia_cuda_cupti-13.0.85-py3-none-manylinux_2_25_x86_64.whl", hash = "sha256:4eb01c08e859bf924d222250d2e8f8b8ff6d3db4721288cf35d14252a4d933c8", size = 10715597, upload-time = "2025-09-04T08:26:51.312Z" }, +] + +[[package]] +name = "nvidia-cuda-nvrtc" +version = "13.0.88" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c3/68/483a78f5e8f31b08fb1bb671559968c0ca3a065ac7acabfc7cee55214fd6/nvidia_cuda_nvrtc-13.0.88-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:ad9b6d2ead2435f11cbb6868809d2adeeee302e9bb94bcf0539c7a40d80e8575", size = 90215200, upload-time = "2025-09-04T08:28:44.204Z" }, + { url = "https://files.pythonhosted.org/packages/b7/dc/6bb80850e0b7edd6588d560758f17e0550893a1feaf436807d64d2da040f/nvidia_cuda_nvrtc-13.0.88-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d27f20a0ca67a4bb34268a5e951033496c5b74870b868bacd046b1b8e0c3267b", size = 43015449, upload-time = "2025-09-04T08:28:20.239Z" }, + { url = "https://files.pythonhosted.org/packages/4a/af/345fedb9f4c76c84ab4fa445b36bd4048a4d9db60e6bc76b4f913ff4b852/nvidia_cuda_nvrtc-13.0.88-py3-none-win_amd64.whl", hash = "sha256:6bcd4e7f8e205cbe644f5a98f2f799bef9556fefc89dd786e79a16312ce49872", size = 76807835, upload-time = "2025-09-04T08:39:15.274Z" }, +] + +[[package]] +name = "nvidia-cuda-runtime" +version = "13.0.96" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/87/4f/17d7b9b8e285199c58ce28e31b5c5bbaa4d8271af06a89b6405258245de2/nvidia_cuda_runtime-13.0.96-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ef9bcbe90493a2b9d810e43d249adb3d02e98dd30200d86607d8d02687c43f55", size = 2261060, upload-time = "2025-10-09T08:55:15.78Z" }, + { url = "https://files.pythonhosted.org/packages/2e/24/d1558f3b68b1d26e706813b1d10aa1d785e4698c425af8db8edc3dced472/nvidia_cuda_runtime-13.0.96-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7f82250d7782aa23b6cfe765ecc7db554bd3c2870c43f3d1821f1d18aebf0548", size = 2243632, upload-time = "2025-10-09T08:55:36.117Z" }, + { url = "https://files.pythonhosted.org/packages/b7/94/6b867483bec07da24ffa32736c79fabb94ef3a7af4d787a9d4a974868576/nvidia_cuda_runtime-13.0.96-py3-none-win_amd64.whl", hash = "sha256:f79298c8a098cec150a597c8eba58ecdab96e3bdc4b9bc4f9983635031740492", size = 2927037, upload-time = "2025-10-09T09:04:23.782Z" }, +] + +[[package]] +name = "nvidia-cudnn-cu13" +version = "9.20.0.48" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-cublas" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/56/c5/83384d846b2fd17c44bd499b36c75a45ed4f095fbbb2252294e89cea5c5c/nvidia_cudnn_cu13-9.20.0.48-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:e31454ae00094b0c55319d9d15b6fa2fc50a9e1c0f5c8c80fb75258234e731e1", size = 444574296, upload-time = "2026-03-09T19:28:27.751Z" }, + { url = "https://files.pythonhosted.org/packages/6e/5e/edb9c0ae051602c3ccaffe424256463636d639e27d7f302dde9975ef9e7a/nvidia_cudnn_cu13-9.20.0.48-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:0c45dd8eeb50b603f07995b1b300c62ffe6a1980482b82b3bcf94a4ca9d49304", size = 366173588, upload-time = "2026-03-09T19:29:34.474Z" }, + { url = "https://files.pythonhosted.org/packages/78/39/21507455b1bca8b5702a9e9fc6ce73735f216f558dac2c9ede58e4d456b8/nvidia_cudnn_cu13-9.20.0.48-py3-none-win_amd64.whl", hash = "sha256:af8139732b99c0118be65ea5aac97f0d46018f8c552889e49d2fb0c6261a4a24", size = 350712614, upload-time = "2026-03-09T19:31:11.398Z" }, +] + +[[package]] +name = "nvidia-cufft" +version = "12.0.0.61" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-nvjitlink" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/8b/ae/f417a75c0259e85c1d2f83ca4e960289a5f814ed0cea74d18c353d3e989d/nvidia_cufft-12.0.0.61-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2708c852ef8cd89d1d2068bdbece0aa188813a0c934db3779b9b1faa8442e5f5", size = 214053554, upload-time = "2025-09-04T08:31:38.196Z" }, + { url = "https://files.pythonhosted.org/packages/a8/2f/7b57e29836ea8714f81e9898409196f47d772d5ddedddf1592eadb8ab743/nvidia_cufft-12.0.0.61-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6c44f692dce8fd5ffd3e3df134b6cdb9c2f72d99cf40b62c32dde45eea9ddad3", size = 214085489, upload-time = "2025-09-04T08:31:56.044Z" }, + { url = "https://files.pythonhosted.org/packages/85/b2/f8af21a2ed1beed337a6a02c5a28aeb85441f4d578ec3d529543c775ea4b/nvidia_cufft-12.0.0.61-py3-none-win_amd64.whl", hash = "sha256:2abce5b39d2f5ae12730fb7e5db6696533e36c26e2d3e8fd1750bdd2853364eb", size = 213342123, upload-time = "2025-09-04T08:40:51.145Z" }, +] + +[[package]] +name = "nvidia-cufile" +version = "1.15.1.6" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3f/70/4f193de89a48b71714e74602ee14d04e4019ad36a5a9f20c425776e72cd6/nvidia_cufile-1.15.1.6-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:08a3ecefae5a01c7f5117351c64f17c7c62efa5fffdbe24fc7d298da19cd0b44", size = 1223672, upload-time = "2025-09-04T08:32:22.779Z" }, + { url = "https://files.pythonhosted.org/packages/ab/73/cc4a14c9813a8a0d509417cf5f4bdaba76e924d58beb9864f5a7baceefbf/nvidia_cufile-1.15.1.6-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:bdc0deedc61f548bddf7733bdc216456c2fdb101d020e1ab4b88d232d5e2f6d1", size = 1136992, upload-time = "2025-09-04T08:32:14.119Z" }, +] + +[[package]] +name = "nvidia-curand" +version = "10.4.0.35" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/72/7c2ae24fb6b63a32e6ae5d241cc65263ea18d08802aaae087d9f013335a2/nvidia_curand-10.4.0.35-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:133df5a7509c3e292aaa2b477afd0194f06ce4ea24d714d616ff36439cee349a", size = 61962106, upload-time = "2025-08-04T10:21:41.128Z" }, + { url = "https://files.pythonhosted.org/packages/a5/9f/be0a41ca4a4917abf5cb9ae0daff1a6060cc5de950aec0396de9f3b52bc5/nvidia_curand-10.4.0.35-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:1aee33a5da6e1db083fe2b90082def8915f30f3248d5896bcec36a579d941bfc", size = 59544258, upload-time = "2025-08-04T10:22:03.992Z" }, + { url = "https://files.pythonhosted.org/packages/99/27/72103153b1ffc00e09fdc40ac970235343dcd1ea8bd762e84d2d73219ffa/nvidia_curand-10.4.0.35-py3-none-win_amd64.whl", hash = "sha256:65b1710aa6961d326b411e314b374290904c5ddf41dc3f766ebc3f1d7d4ca69f", size = 55242481, upload-time = "2025-08-04T10:30:41.831Z" }, +] + +[[package]] +name = "nvidia-cusolver" +version = "12.0.4.66" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-cublas", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "nvidia-cusparse", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "nvidia-nvjitlink", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/c8/c3/b30c9e935fc01e3da443ec0116ed1b2a009bb867f5324d3f2d7e533e776b/nvidia_cusolver-12.0.4.66-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:02c2457eaa9e39de20f880f4bd8820e6a1cfb9f9a34f820eb12a155aa5bc92d2", size = 223467760, upload-time = "2025-09-04T08:33:04.222Z" }, + { url = "https://files.pythonhosted.org/packages/5f/67/cba3777620cdacb99102da4042883709c41c709f4b6323c10781a9c3aa34/nvidia_cusolver-12.0.4.66-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:0a759da5dea5c0ea10fd307de75cdeb59e7ea4fcb8add0924859b944babf1112", size = 200941980, upload-time = "2025-09-04T08:33:22.767Z" }, +] + +[[package]] +name = "nvidia-cusparse" +version = "12.6.3.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-nvjitlink", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/f8/94/5c26f33738ae35276672f12615a64bd008ed5be6d1ebcb23579285d960a9/nvidia_cusparse-12.6.3.3-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:80bcc4662f23f1054ee334a15c72b8940402975e0eab63178fc7e670aa59472c", size = 162155568, upload-time = "2025-09-04T08:33:42.864Z" }, + { url = "https://files.pythonhosted.org/packages/fa/18/623c77619c31d62efd55302939756966f3ecc8d724a14dab2b75f1508850/nvidia_cusparse-12.6.3.3-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2b3c89c88d01ee0e477cb7f82ef60a11a4bcd57b6b87c33f789350b59759360b", size = 145942937, upload-time = "2025-09-04T08:33:58.029Z" }, +] + +[[package]] +name = "nvidia-cusparselt-cu13" +version = "0.8.1" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/46/e1/cdc1797eadf82d3a9a575a19b33fdc871a97edbec42c00b5b5e914f4aff4/nvidia_cusparselt_cu13-0.8.1-py3-none-manylinux2014_aarch64.whl", hash = "sha256:4dca476c50bf4780d46cd0bfbd82e2bc10a08e4fef7950917ce8d7578d22a23f", size = 221051344, upload-time = "2025-09-05T18:49:51.289Z" }, + { url = "https://files.pythonhosted.org/packages/34/7d/2661f2fb3ac4302f3a246f5fc030213ac60c1fe0bce84f9783dbd831dbb7/nvidia_cusparselt_cu13-0.8.1-py3-none-manylinux2014_x86_64.whl", hash = "sha256:786ce87568c303fadb5afcc7102d454cd3040d75f6f8626f5db460d1871f4dd0", size = 170148586, upload-time = "2025-09-05T18:50:50.248Z" }, +] + +[[package]] +name = "nvidia-nccl-cu13" +version = "2.29.7" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/72/0d/daf50d44177ee0cbc7ff0a0c91eb5ff676c82be42f9a970bc7597f440c3a/nvidia_nccl_cu13-2.29.7-py3-none-manylinux_2_18_aarch64.whl", hash = "sha256:674a12383e3c38a1bcccae7d4f3633b37852230b6047883cb2f4c2d1b36d9bf5", size = 206014712, upload-time = "2026-03-03T05:34:20.843Z" }, + { url = "https://files.pythonhosted.org/packages/67/f4/58e4e91b6919367c7aafb8e36fce9aad1a3047e536bf7e2fd560927d3a4c/nvidia_nccl_cu13-2.29.7-py3-none-manylinux_2_18_x86_64.whl", hash = "sha256:edd81538446786ec3b73972543e53bb43bcaf0bfc8ef76cb679fcc390ffe136d", size = 205976000, upload-time = "2026-03-03T05:36:24.472Z" }, +] + +[[package]] +name = "nvidia-nvjitlink" +version = "13.0.88" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/56/7a/123e033aaff487c77107195fa5a2b8686795ca537935a24efae476c41f05/nvidia_nvjitlink-13.0.88-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:13a74f429e23b921c1109976abefacc69835f2f433ebd323d3946e11d804e47b", size = 40713933, upload-time = "2025-09-04T08:35:43.553Z" }, + { url = "https://files.pythonhosted.org/packages/ab/2c/93c5250e64df4f894f1cbb397c6fd71f79813f9fd79d7cd61de3f97b3c2d/nvidia_nvjitlink-13.0.88-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e931536ccc7d467a98ba1d8b89ff7fa7f1fa3b13f2b0069118cd7f47bff07d0c", size = 38768748, upload-time = "2025-09-04T08:35:20.008Z" }, + { url = "https://files.pythonhosted.org/packages/e4/01/07530b0e37546231052e30234540289c42eaffa486f1a34a87fed340157b/nvidia_nvjitlink-13.0.88-py3-none-win_amd64.whl", hash = "sha256:634e96e3da9ef845ae744097a1f289238ecf946ce0b82e93cdce14b9782e682f", size = 36035115, upload-time = "2025-09-04T08:43:03.001Z" }, +] + +[[package]] +name = "nvidia-nvshmem-cu13" +version = "3.4.5" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/dc/0f/05cc9c720236dcd2db9c1ab97fff629e96821be2e63103569da0c9b72f19/nvidia_nvshmem_cu13-3.4.5-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:6dc2a197f38e5d0376ad52cd1a2a3617d3cdc150fd5966f4aee9bcebb1d68fe9", size = 60215947, upload-time = "2025-09-06T00:32:20.022Z" }, + { url = "https://files.pythonhosted.org/packages/3c/35/a9bf80a609e74e3b000fef598933235c908fcefcef9026042b8e6dfde2a9/nvidia_nvshmem_cu13-3.4.5-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:290f0a2ee94c9f3687a02502f3b9299a9f9fe826e6d0287ee18482e78d495b80", size = 60412546, upload-time = "2025-09-06T00:32:41.564Z" }, +] + +[[package]] +name = "nvidia-nvtx" +version = "13.0.85" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c2/f3/d86c845465a2723ad7e1e5c36dcd75ddb82898b3f53be47ebd429fb2fa5d/nvidia_nvtx-13.0.85-py3-none-manylinux1_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:4936d1d6780fbe68db454f5e72a42ff64d1fd6397df9f363ae786930fd5c1cd4", size = 148047, upload-time = "2025-09-04T08:29:01.761Z" }, + { url = "https://files.pythonhosted.org/packages/a8/64/3708a90d1ebe202ffdeb7185f878a3c84d15c2b2c31858da2ce0583e2def/nvidia_nvtx-13.0.85-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cb7780edb6b14107373c835bf8b72e7a178bac7367e23da7acb108f973f157a6", size = 148878, upload-time = "2025-09-04T08:28:53.627Z" }, +] + +[[package]] +name = "onnxruntime-gpu" +version = "1.30.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "flatbuffers" }, + { name = "numpy" }, + { name = "packaging" }, + { name = "protobuf" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/31/ae/cfec0c21d039e4125fdc333e2e2032ed0a49eb50f9dd70b7f3819b339018/onnxruntime_gpu-1.30.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:9aba23f903f434cc55d851aeb801afee19e287c202f4ab8f59d02f04caa90aed", size = 246688669, upload-time = "2026-09-10T16:13:21.504Z" }, + { url = "https://files.pythonhosted.org/packages/07/cd/99171c84362c9a3292ec909c2e8edd922dec21d65e28e83e9d809ad178c6/onnxruntime_gpu-1.30.0-cp313-cp313-manylinux_2_34_aarch64.whl", hash = "sha256:0c68878729527a28202af6c1b7ebc2fc5a687e9f6e02bfb8796e39d1fe775fd7", size = 205732148, upload-time = "2026-09-10T15:53:16.111Z" }, + { url = "https://files.pythonhosted.org/packages/7e/d3/50fba71f4174f25f1e677ffe4b2ebc9f6c2a2aa8093c12e82c93792fd4e8/onnxruntime_gpu-1.30.0-cp313-cp313-win_amd64.whl", hash = "sha256:cf494da233f3fc02bbeb2a3178e3ace7361b6b4fef7031b19c1e5aed5e9328ce", size = 160479611, upload-time = "2026-09-10T15:56:28.799Z" }, + { url = "https://files.pythonhosted.org/packages/8e/41/3ebd7b9648259adcf3abd245be862a0cb4c24d4b12f4f7b82d3e9fcf18f0/onnxruntime_gpu-1.30.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:675d519cab613bc42685ecb998f8e8e8c6d73143496681650d30ef14fedeade7", size = 246684982, upload-time = "2026-09-10T16:13:31.799Z" }, + { url = "https://files.pythonhosted.org/packages/f5/b0/6187754ea45ce90c116730115e4d856a6107b9e708580093c112def9a567/onnxruntime_gpu-1.30.0-cp313-cp313t-manylinux_2_34_aarch64.whl", hash = "sha256:c6df4b62538f98482dd5cebc91cba668c4b82156e872517c314a383c904a191d", size = 205776779, upload-time = "2026-09-10T15:53:24.926Z" }, +] + +[package.optional-dependencies] +cuda = [ + { name = "nvidia-cuda-nvrtc" }, + { name = "nvidia-cuda-runtime" }, + { name = "nvidia-cufft" }, + { name = "nvidia-curand" }, +] +cudnn = [ + { name = "nvidia-cudnn-cu13" }, +] + +[[package]] +name = "open-clip-torch" +version = "3.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ftfy" }, + { name = "huggingface-hub" }, + { name = "regex" }, + { name = "safetensors" }, + { name = "timm" }, + { name = "torch" }, + { name = "torchvision" }, + { name = "tqdm" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/4a/1f/2bc9795047fa2c1ad2567ef78ce6dfc9a7b763fa534acee09a94da2a5b8f/open_clip_torch-3.3.0.tar.gz", hash = "sha256:904b1a9f909df8281bb3de60ab95491cd2994a509177ea4f9d6292a84fe24d6d", size = 1503380, upload-time = "2026-02-27T00:32:46.74Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/37/b5/41c315ccd94ca332ead3e832e83eee343ab245005c3e43d9d3e75eae34eb/open_clip_torch-3.3.0-py3-none-any.whl", hash = "sha256:c549ad5ed6bfc119cc11105033c0a2b9d7a2a4afeb40a58a09aab3da1a0043ce", size = 1547268, upload-time = "2026-02-27T00:32:44.902Z" }, +] + +[[package]] +name = "opentelemetry-api" +version = "1.44.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ee/8b/aa9e2d8b8dfa7c946f7dec5d1f8f6ba8eca062f43509a06bdb5ce93d26c0/opentelemetry_api-1.44.0.tar.gz", hash = "sha256:67647e5e9566edcf421166fdf022b3537f818635daa852b289e34604dc6fb33a", size = 72406, upload-time = "2026-07-16T15:25:32.678Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ca/6f/a04e900f465ff3221ccc395522503e2d10e79fa21f2723c8e177aae1e0d1/opentelemetry_api-1.44.0-py3-none-any.whl", hash = "sha256:94b98c893a91b88657eaac1e3ba89618cdb85be6918196705354f34728b2cdef", size = 60018, upload-time = "2026-07-16T15:25:11.657Z" }, +] + +[[package]] +name = "opentelemetry-exporter-otlp-proto-common" +version = "1.44.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-proto" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/61/09/4d717852c1cf3f854b76c7110a5d00883bc3c99288b9b0dbcbeb9e306eb6/opentelemetry_exporter_otlp_proto_common-1.44.0.tar.gz", hash = "sha256:dc87a5a5bc58f149a56d1547e4691588fa12994cdc3bc039a694ccb3375862ac", size = 20202, upload-time = "2026-07-16T15:25:37.658Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5e/71/65fd9d54c10b860f87c045ccee1264cab7011268895d3528818a29c1172a/opentelemetry_exporter_otlp_proto_common-1.44.0-py3-none-any.whl", hash = "sha256:9a9fe61bba73d802904bc989f1d6b4a7b1ee40f06c40e98d6f85af65aaebb694", size = 17045, upload-time = "2026-07-16T15:25:18.201Z" }, +] + +[[package]] +name = "opentelemetry-exporter-otlp-proto-http" +version = "1.44.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "googleapis-common-protos" }, + { name = "opentelemetry-api" }, + { name = "opentelemetry-exporter-otlp-proto-common" }, + { name = "opentelemetry-proto" }, + { name = "opentelemetry-sdk" }, + { name = "requests" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1a/87/95e2a5aaa795b4e2260d74e16df2d5541deb2ea9de010bcd615f4dee2654/opentelemetry_exporter_otlp_proto_http-1.44.0.tar.gz", hash = "sha256:c633d7270ad6b57cd4cfbe8b0007a9e2e7c0cb50bd6c50fe2a7b245f721a09d8", size = 25806, upload-time = "2026-07-16T15:25:39.162Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cd/d0/fdeb1a98d8d3a6205f5f297c51b4a9bfe65126ab60339669bbe3dd54c2e2/opentelemetry_exporter_otlp_proto_http-1.44.0-py3-none-any.whl", hash = "sha256:838592fce774c1c8bb7b9a0a7facbfa82e17be5a8a4e94cef10cb84ae026bae3", size = 21850, upload-time = "2026-07-16T15:25:20.006Z" }, +] + +[[package]] +name = "opentelemetry-proto" +version = "1.44.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "protobuf" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/64/01/40ac4ae9a149263cc52c2cee200ddd80cb6d8db1a4610abf8eabce0fe771/opentelemetry_proto-1.44.0.tar.gz", hash = "sha256:c547a79c2f8c0c515d31509154682e5921c7cfd5ca67b70e1f9266e2c3e103f3", size = 46488, upload-time = "2026-07-16T15:25:45.34Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/7c/8be563d68e93bbefa5c8affb82ddcff91b3ad858ce49957ba7b16fd3e0ab/opentelemetry_proto-1.44.0-py3-none-any.whl", hash = "sha256:898b155a0e1557afd867478fb6158e8122a46329ca0bb8dc53cc55e98f017f56", size = 72483, upload-time = "2026-07-16T15:25:28.429Z" }, +] + +[[package]] +name = "opentelemetry-sdk" +version = "1.44.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-api" }, + { name = "opentelemetry-semantic-conventions" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5d/77/a6592cbc7c8d9bcc9d6757a9df45e04a7c585e3e6e7a13456da522b21109/opentelemetry_sdk-1.44.0.tar.gz", hash = "sha256:cebe7f65dc12f26ead75c6064de12fd2a9052e5060c0272d402cfa203aae123b", size = 208624, upload-time = "2026-07-16T15:25:46.078Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/23/ff077e61886ee020a17ce9c8b6fa11c601c8d8345b09ea24f605445df62a/opentelemetry_sdk-1.44.0-py3-none-any.whl", hash = "sha256:df081c4c6bcfdb1211e3e86140376792643128a25f8d72d1d27675936e7e96ad", size = 137221, upload-time = "2026-07-16T15:25:29.534Z" }, +] + +[[package]] +name = "opentelemetry-semantic-conventions" +version = "0.65b0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-api" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8f/73/0cbdebcb4cf545fdd328da14f5137e37d0770c3f26185e478b0d15d94f50/opentelemetry_semantic_conventions-0.65b0.tar.gz", hash = "sha256:f9b2b81e9d5b64f11bc952075e7e9c7fb0aab075c7fd1c46d597f1b919852d60", size = 148774, upload-time = "2026-07-16T15:25:46.902Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a6/0e/49df70d9b81fb5cbae4bbf2a49d865b09bcbcbc4eb53f5851b1027738d78/opentelemetry_semantic_conventions-0.65b0-py3-none-any.whl", hash = "sha256:1cacde7b0ad306f84c5ef08c3dbe1bbaf20165bba6f8bff43b670e555a086bcb", size = 204645, upload-time = "2026-07-16T15:25:30.688Z" }, +] + +[[package]] +name = "packaging" +version = "26.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/fa/3944b40b07da9ce895c0e6303a5ab7d53da063554f534556b134a54d6093/packaging-26.3.tar.gz", hash = "sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79", size = 313412, upload-time = "2026-08-04T18:15:28.737Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/63/34/ba1c580383c9eada3711951fef0795c80b829a078d72188184bcab9dd527/packaging-26.3-py3-none-any.whl", hash = "sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c", size = 129956, upload-time = "2026-08-04T18:15:27.159Z" }, +] + +[[package]] +name = "pandas" +version = "3.0.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "python-dateutil" }, + { name = "tzdata", marker = "sys_platform == 'emscripten' or sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e2/17/d7b106e05bfa642e8694451e7d3d759c6a241c5386a5d962e4f66c047e06/pandas-3.0.6.tar.gz", hash = "sha256:66b07ef7315a31bfe1089cd3d71a7de781c9dca986762d0b4fe7c0ef17465d10", size = 4667686, upload-time = "2026-09-17T23:23:18.345Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8e/1c/143605a1f6443ad50ebda78a31e5a3a10147fec2590e931584aaa5ff0a09/pandas-3.0.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9ae8073aed8e21d1a7fe263dcdc6840743549722a6738198a0a46000fa9476f2", size = 10418900, upload-time = "2026-09-17T23:21:16.594Z" }, + { url = "https://files.pythonhosted.org/packages/ea/ca/87f8548f73d452aab35e4a90f8b39ae303295e0f2ef0b4055c44d6b3f1be/pandas-3.0.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:60d81f9e1799b36f3739e7fff44d1fbb2e8fd5a271b3863e03de9715fccda0fa", size = 10064785, upload-time = "2026-09-17T23:21:19.677Z" }, + { url = "https://files.pythonhosted.org/packages/43/1a/d951442e5607c6e3b2462eff8f420797d428aa74b87c6ecfe4f48553626e/pandas-3.0.6-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:097090508a1dd335013d39106fc10b20f4fd4a171638e47b77d55798ed9dab6c", size = 10245290, upload-time = "2026-09-17T23:21:22.797Z" }, + { url = "https://files.pythonhosted.org/packages/50/fa/96d50e1e6cd0b08b5e2b7c838f65ae644940f75a124063380b5ef73b6866/pandas-3.0.6-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1e92d9fa834c7d877130027cddc0cad8dcff97c1f6cca26bd6310f847228b658", size = 10757657, upload-time = "2026-09-17T23:21:25.673Z" }, + { url = "https://files.pythonhosted.org/packages/7b/12/f82d13a2cb703e1a8acee7e01fdc2b898d9cd0c00f07d1dfce63af43e350/pandas-3.0.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b27c8d890e4aa2171437ae2a39de1d215e674158e4865c4023a8b31c932513b2", size = 11249114, upload-time = "2026-09-17T23:21:28.898Z" }, + { url = "https://files.pythonhosted.org/packages/1a/ce/8aef2e561a2f2c8b38c913c67373c65ba6748174e763d27c80271b24bd17/pandas-3.0.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f8029ec0f1f89e4f985929ce1f6626dabf3140d61a4e9c1215afdab34eaf9a5d", size = 11820511, upload-time = "2026-09-17T23:21:32.11Z" }, + { url = "https://files.pythonhosted.org/packages/c0/bd/63cb67e6903ef6d9c2871916dbcbc09d254da0fe8b870cf62e16b21945f2/pandas-3.0.6-cp313-cp313-win_amd64.whl", hash = "sha256:f3ce8a6968045481e91a3990e797e348ce13db45ee164a7095bbc824e26c09dd", size = 9638092, upload-time = "2026-09-17T23:21:34.883Z" }, + { url = "https://files.pythonhosted.org/packages/75/2e/e7b35b712edb068d382ddc8b2bea8a04974100515ba2daa22b478b265842/pandas-3.0.6-cp313-cp313-win_arm64.whl", hash = "sha256:cc39303913e2ea129915670de5d1c9fbd647f543bb72e5543bac8baa94e9e42f", size = 8952032, upload-time = "2026-09-17T23:21:37.729Z" }, +] + +[[package]] +name = "pillow" +version = "12.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1c/3d/bb7fca845737cf9d7dbde16ed1843984665ff2e0a518f5db43e77ec540b9/pillow-12.3.0.tar.gz", hash = "sha256:3b8182a766685eaa002637e28b4ec8d6b18819a0c71f579bf0dbaa5830297cce", size = 47025035, upload-time = "2026-07-01T11:56:38.965Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9d/ac/31fb64e1e7efb5a4b50cd3d92049ba89ac6e4d8d3bb6a74e15048ca3353e/pillow-12.3.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:21900ce7ba264168cd50defae43cd75d25c833ad4ad6e73ffc5596d12e25ac89", size = 4161684, upload-time = "2026-07-01T11:54:25.934Z" }, + { url = "https://files.pythonhosted.org/packages/87/b4/9805e23d2b4d77842b468513841fda254ee42f0289d25088340e4ff46e2d/pillow-12.3.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:4e8c2a84d977f50b9daed6eeaf3baef67d00d5d74d932288f02cb94518ee3ace", size = 4255487, upload-time = "2026-07-01T11:54:27.935Z" }, + { url = "https://files.pythonhosted.org/packages/df/39/ecf519435a200c693fe053a6ee4d835b41cf963a4dfc2551c4e637cb2a71/pillow-12.3.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:ae26d61dfa7a47befdc7572b521024e8745f3d809bd95ca9505a7bba9ef849ec", size = 3696433, upload-time = "2026-07-01T11:54:29.813Z" }, + { url = "https://files.pythonhosted.org/packages/42/92/2fc3ffad878ae8dd5469ec1bc8eb83b71f48e13efdf68f02709003982a32/pillow-12.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:7a743ff716f746fc19a9557f60dab1600d4613255f8a7aeb3cdde4db7eb15a66", size = 5345889, upload-time = "2026-07-01T11:54:31.97Z" }, + { url = "https://files.pythonhosted.org/packages/10/76/8803c13605b763d33d156c4678fc77f8443389c0c51c8aef707bb02015f4/pillow-12.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d69141514cc30b774ceea5e3ed3a6635c8d8a96edf664689b890f4089111fb35", size = 4780109, upload-time = "2026-07-01T11:54:34.026Z" }, + { url = "https://files.pythonhosted.org/packages/1f/01/e18aff37cb0b4aac47ac90f016d347a49aca667ef97f190b06ac2aabc928/pillow-12.3.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f7401aebd7f581d7f83a439d87d474999317ee099218e5ad25d125290990ba65", size = 6263736, upload-time = "2026-07-01T11:54:36.131Z" }, + { url = "https://files.pythonhosted.org/packages/f7/62/de5bdd77d935331f4f802edc11e4d82950f642caad6cb2f949837b8560e2/pillow-12.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0847a763afefb695bc912d7c131e7e0632d4edc1d8698f58ddabec8e46b8b6d3", size = 6937129, upload-time = "2026-07-01T11:54:38.216Z" }, + { url = "https://files.pythonhosted.org/packages/70/4d/105627a13300c5e0df1d174230b32fd1273062c96f7745fd552b945d1e1d/pillow-12.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:571b9fcb07b97ef3a492028fb3d2dc0993ca23a06138b0315286566d29ef718a", size = 6339562, upload-time = "2026-07-01T11:54:40.354Z" }, + { url = "https://files.pythonhosted.org/packages/6b/1d/f13de01a553988ab895ba1c722e06cf3144d4f57656fd5b81b6d881f1179/pillow-12.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:756c768d0c9c2955feb7a56c37ea24aea2e369f8d36a88da270b6a9f19e62b5e", size = 7049439, upload-time = "2026-07-01T11:54:42.489Z" }, + { url = "https://files.pythonhosted.org/packages/c9/f9/066794cca041b969964f779ee5fa66a9498bbf34248ac39c5d7954e4198f/pillow-12.3.0-cp313-cp313-win32.whl", hash = "sha256:a876864214e136f0eb367788dbd7df045f4806801518e2cfe9e13229cfe06d8f", size = 6473287, upload-time = "2026-07-01T11:54:44.9Z" }, + { url = "https://files.pythonhosted.org/packages/a6/9b/7a58e61d62be561da3a356fe2384d4059a6345fc130e23ef1c36a5b81d24/pillow-12.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:1cca606cd25738df4ed873d5ad46bbdb3d83b5cbca291f6b4ff13a4df6b0bbe8", size = 7239691, upload-time = "2026-07-01T11:54:47.141Z" }, + { url = "https://files.pythonhosted.org/packages/aa/b0/c4ed4f0ef8f8fa5ee8351537db6650bb8189f7e118842978dd6589065692/pillow-12.3.0-cp313-cp313-win_arm64.whl", hash = "sha256:b629de27fda84b42cde7edef0d85f13b958b47f6e9bbcbba9b673c562a89bd8b", size = 2568185, upload-time = "2026-07-01T11:54:49.137Z" }, +] + +[[package]] +name = "platformdirs" +version = "4.11.12" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ea/dd/65804b0c2925a1c821a05502ea57517b69a073ff400d25ab9faa3a2cf012/platformdirs-4.11.12.tar.gz", hash = "sha256:e8dc1cb58f1153fd7f61db1374317770baababec2480b37b8f01c6cc25b45267", size = 40016, upload-time = "2026-09-22T01:02:36.973Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/2b/69de6317fbf48865bb12aa56c9cfcfff46b3add0cd45250725d96146dce0/platformdirs-4.11.12-py3-none-any.whl", hash = "sha256:b1ba966ac76153d9985a0787ffab951e7c18416189873d4e4ddb2c8a04a0a254", size = 24976, upload-time = "2026-09-22T01:02:35.742Z" }, +] + +[[package]] +name = "protobuf" +version = "7.36.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d9/89/5b8517baa72f84a67b8a307ba953c91057af618bf40bf676f3c03551f8f0/protobuf-7.36.2.tar.gz", hash = "sha256:497d0463ff3316681da6c0b9e8d06cb465d61abce00b613ab42226175644d1bb", size = 512737, upload-time = "2026-09-17T20:07:59.326Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/32/72/98342feb672507c8f3a69e34b4fa8961f608edba5c1a48a6f47156d92cb5/protobuf-7.36.2-cp310-abi3-macosx_10_9_universal2.whl", hash = "sha256:cbc70b17ee27e28894c7fee8bb04be1abead49e936bc70eb60052531eee2079e", size = 456039, upload-time = "2026-09-17T20:07:51.542Z" }, + { url = "https://files.pythonhosted.org/packages/b6/ea/91fdf7c2b8bbd49cde056f00a9df6773532987e1c00fe2830b895af95c7e/protobuf-7.36.2-cp310-abi3-manylinux2014_aarch64.whl", hash = "sha256:e11e1f0180583a2af89db6a2ecd9e8dc40aa6d2988ca175bfd0e6d12ea72d74e", size = 344219, upload-time = "2026-09-17T20:07:52.914Z" }, + { url = "https://files.pythonhosted.org/packages/17/ab/5fd5f8ece73fad885c5a09aa849b32d70472f954ba3a92d3bb5974ea953b/protobuf-7.36.2-cp310-abi3-manylinux2014_s390x.whl", hash = "sha256:f4fee11ec330d238b34a05c9b675f693c20415d1c5bd7d5320cc2f8a798eb9cf", size = 357223, upload-time = "2026-09-17T20:07:53.985Z" }, + { url = "https://files.pythonhosted.org/packages/db/f3/3996583dd2906297a637af12114deddf7658af6e683fedb83be061983fb5/protobuf-7.36.2-cp310-abi3-manylinux2014_x86_64.whl", hash = "sha256:89f23aa53c24553a2416fd4fd1ec06f74fa42b14b546d8883128813f775bbfd2", size = 343223, upload-time = "2026-09-17T20:07:54.931Z" }, + { url = "https://files.pythonhosted.org/packages/fc/1b/dcc64f358fcb51811b58ae40b3d28f820725f116d86487cc20bd4b130701/protobuf-7.36.2-cp310-abi3-win32.whl", hash = "sha256:912c1221170e16c08d1f086762f563dd61ff83c18b5fa6652952dfaded66f728", size = 442998, upload-time = "2026-09-17T20:07:55.826Z" }, + { url = "https://files.pythonhosted.org/packages/8a/55/b77bda4e5e5f5971fb51b07663694690e9afdb9402136c16a522bd621cad/protobuf-7.36.2-cp310-abi3-win_amd64.whl", hash = "sha256:a300819d441e078a5608c0d3c709796bb548136058fda017ae51d425b44fd353", size = 456514, upload-time = "2026-09-17T20:07:57.188Z" }, + { url = "https://files.pythonhosted.org/packages/e4/04/d52c7016b04b6c5108f26691f9d33ec82a9b65d041f1a9c771137693d618/protobuf-7.36.2-py3-none-any.whl", hash = "sha256:bdb3a345d48db958e6ce1f18e508beb0cc981d64f24088427549c866cd039f1e", size = 179806, upload-time = "2026-09-17T20:07:58.211Z" }, +] + +[[package]] +name = "psutil" +version = "7.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/aa/c6/d1ddf4abb55e93cebc4f2ed8b5d6dbad109ecb8d63748dd2b20ab5e57ebe/psutil-7.2.2.tar.gz", hash = "sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372", size = 493740, upload-time = "2026-01-28T18:14:54.428Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/51/08/510cbdb69c25a96f4ae523f733cdc963ae654904e8db864c07585ef99875/psutil-7.2.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2edccc433cbfa046b980b0df0171cd25bcaeb3a68fe9022db0979e7aa74a826b", size = 130595, upload-time = "2026-01-28T18:14:57.293Z" }, + { url = "https://files.pythonhosted.org/packages/d6/f5/97baea3fe7a5a9af7436301f85490905379b1c6f2dd51fe3ecf24b4c5fbf/psutil-7.2.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e78c8603dcd9a04c7364f1a3e670cea95d51ee865e4efb3556a3a63adef958ea", size = 131082, upload-time = "2026-01-28T18:14:59.732Z" }, + { url = "https://files.pythonhosted.org/packages/37/d6/246513fbf9fa174af531f28412297dd05241d97a75911ac8febefa1a53c6/psutil-7.2.2-cp313-cp313t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1a571f2330c966c62aeda00dd24620425d4b0cc86881c89861fbc04549e5dc63", size = 181476, upload-time = "2026-01-28T18:15:01.884Z" }, + { url = "https://files.pythonhosted.org/packages/b8/b5/9182c9af3836cca61696dabe4fd1304e17bc56cb62f17439e1154f225dd3/psutil-7.2.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:917e891983ca3c1887b4ef36447b1e0873e70c933afc831c6b6da078ba474312", size = 184062, upload-time = "2026-01-28T18:15:04.436Z" }, + { url = "https://files.pythonhosted.org/packages/16/ba/0756dca669f5a9300d0cbcbfae9a4c30e446dfc7440ffe43ded5724bfd93/psutil-7.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:ab486563df44c17f5173621c7b198955bd6b613fb87c71c161f827d3fb149a9b", size = 139893, upload-time = "2026-01-28T18:15:06.378Z" }, + { url = "https://files.pythonhosted.org/packages/1c/61/8fa0e26f33623b49949346de05ec1ddaad02ed8ba64af45f40a147dbfa97/psutil-7.2.2-cp313-cp313t-win_arm64.whl", hash = "sha256:ae0aefdd8796a7737eccea863f80f81e468a1e4cf14d926bd9b6f5f2d5f90ca9", size = 135589, upload-time = "2026-01-28T18:15:08.03Z" }, + { url = "https://files.pythonhosted.org/packages/e7/36/5ee6e05c9bd427237b11b3937ad82bb8ad2752d72c6969314590dd0c2f6e/psutil-7.2.2-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486", size = 129090, upload-time = "2026-01-28T18:15:22.168Z" }, + { url = "https://files.pythonhosted.org/packages/80/c4/f5af4c1ca8c1eeb2e92ccca14ce8effdeec651d5ab6053c589b074eda6e1/psutil-7.2.2-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979", size = 129859, upload-time = "2026-01-28T18:15:23.795Z" }, + { url = "https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9", size = 155560, upload-time = "2026-01-28T18:15:25.976Z" }, + { url = "https://files.pythonhosted.org/packages/63/65/37648c0c158dc222aba51c089eb3bdfa238e621674dc42d48706e639204f/psutil-7.2.2-cp36-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b0726cecd84f9474419d67252add4ac0cd9811b04d61123054b9fb6f57df6e9e", size = 156997, upload-time = "2026-01-28T18:15:27.794Z" }, + { url = "https://files.pythonhosted.org/packages/8e/13/125093eadae863ce03c6ffdbae9929430d116a246ef69866dad94da3bfbc/psutil-7.2.2-cp36-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:fd04ef36b4a6d599bbdb225dd1d3f51e00105f6d48a28f006da7f9822f2606d8", size = 148972, upload-time = "2026-01-28T18:15:29.342Z" }, + { url = "https://files.pythonhosted.org/packages/04/78/0acd37ca84ce3ddffaa92ef0f571e073faa6d8ff1f0559ab1272188ea2be/psutil-7.2.2-cp36-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b58fabe35e80b264a4e3bb23e6b96f9e45a3df7fb7eed419ac0e5947c61e47cc", size = 148266, upload-time = "2026-01-28T18:15:31.597Z" }, + { url = "https://files.pythonhosted.org/packages/b4/90/e2159492b5426be0c1fef7acba807a03511f97c5f86b3caeda6ad92351a7/psutil-7.2.2-cp37-abi3-win_amd64.whl", hash = "sha256:eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988", size = 137737, upload-time = "2026-01-28T18:15:33.849Z" }, + { url = "https://files.pythonhosted.org/packages/8c/c7/7bb2e321574b10df20cbde462a94e2b71d05f9bbda251ef27d104668306a/psutil-7.2.2-cp37-abi3-win_arm64.whl", hash = "sha256:8c233660f575a5a89e6d4cb65d9f938126312bca76d8fe087b947b3a1aaac9ee", size = 134617, upload-time = "2026-01-28T18:15:36.514Z" }, +] + +[[package]] +name = "pyarrow" +version = "25.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3d/e3/27f57f80141379d60defe6703eb50a707325706f07fedfd1312c7a751995/pyarrow-25.0.1.tar.gz", hash = "sha256:9150a83248bfed9813ea3c3af74c3856c1984d444aa28e58bf7733b9750ddf6a", size = 1201653, upload-time = "2026-08-10T12:40:53.904Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cc/8d/8f271a7a034c834910ec925d56fa4b29733b1380f5289419f5aaa3b02777/pyarrow-25.0.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:c7c534ec03c358a76ea3e505e74c1b6aef290af90c444dfd092dbfe23e755b85", size = 35855328, upload-time = "2026-08-10T12:38:45.489Z" }, + { url = "https://files.pythonhosted.org/packages/d2/cd/5bac242f4e841b9971d5eb94fdfe2577e2b70be983e27401e72055786037/pyarrow-25.0.1-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:dda9470024204d7bbf2042b47c6e8a0e47a3eeb8e34405882dfaea6577e0c153", size = 37622415, upload-time = "2026-08-10T12:38:51.107Z" }, + { url = "https://files.pythonhosted.org/packages/63/1f/96d03b4e1506524f7087adb0fd6b2f69f0c9c7aaff1ec36d8030082e15a5/pyarrow-25.0.1-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:44a9120ce5bd81936b8ab9a88076e3fd47c2c6838e0e43630fed83626aca81d9", size = 46813813, upload-time = "2026-08-10T12:38:57.773Z" }, + { url = "https://files.pythonhosted.org/packages/98/d6/33a411115b61dbfc16ad6ad73e71730f6fea654ee3667673bc53ab0e2fe7/pyarrow-25.0.1-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:0befcf816e45a1af33ac775a9970b749e4868a230c7372f0ae5e932bee27039f", size = 50104452, upload-time = "2026-08-10T12:39:04.579Z" }, + { url = "https://files.pythonhosted.org/packages/33/ae/b1b97c9ca87f9f9ddbb5230c798df94eccce61bd79b9b45458c69a478588/pyarrow-25.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3f89685964f46e4216103c75483aac0c0692a5f72212d7ca835adba5ede56ce3", size = 49951343, upload-time = "2026-08-10T12:39:11.8Z" }, + { url = "https://files.pythonhosted.org/packages/98/9e/a112df5cfd5a68cb1d9fc31cfe38c28d5aec9f10865ce37ecef2e4450873/pyarrow-25.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6943e2fe7954d29d84de45d29d34c8dc36ce96570e67d89aa9976e650a4a9138", size = 53144784, upload-time = "2026-08-10T12:39:20.503Z" }, + { url = "https://files.pythonhosted.org/packages/31/24/97e8bd98f1e3b07e2ba08bcdff690674fbe16d69a7d2712cc3884665e615/pyarrow-25.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:31e49a7888fcdf3a835da33ae777f6bb9a866334e5a789282fc26dcf426f7f15", size = 27870159, upload-time = "2026-08-10T12:39:26.161Z" }, +] + +[[package]] +name = "pycirclize" +version = "1.10.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "biopython" }, + { name = "matplotlib" }, + { name = "numpy" }, + { name = "pandas" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9f/07/500623e3db04a4a64d7cf5ab946e5e5e860c198900650a8ea05e1d870d0a/pycirclize-1.10.1.tar.gz", hash = "sha256:c67c0bcae01b0c37a07c12f0436540f72c3f1068bfc964f388266ec92812b983", size = 20031483, upload-time = "2025-10-03T17:59:38.451Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/35/ef/a0090b20af352b9e8ca7b5ccef81940df63ba15cf5c66baf5c6145620537/pycirclize-1.10.1-py3-none-any.whl", hash = "sha256:fc571b0223195b651edd22011963628bddd92861a4053526b31035bb3347f43e", size = 83513, upload-time = "2025-10-03T17:59:34.857Z" }, +] + +[[package]] +name = "pydantic" +version = "2.13.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-types" }, + { name = "pydantic-core" }, + { name = "typing-extensions" }, + { name = "typing-inspection" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/53/ef/fc4f868f4e2cee79f863883abffceff107875f569b848507319842d2a681/pydantic-2.13.5.tar.gz", hash = "sha256:51a9c5f7b2f8e636f04c6cada605d9b6a3bf1348fdf945a3d8869b19bba0ee08", size = 845750, upload-time = "2026-08-28T14:04:00.916Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/eb/47/c95ffc2009878c7aac0c5e08528022dcb885933252a88b5f170058014464/pydantic-2.13.5-py3-none-any.whl", hash = "sha256:346a034f080da3755d8e9cb5e00e8b07de1d39e4f6e2c87d8ab7cafa0b269a73", size = 472589, upload-time = "2026-08-28T14:03:59.136Z" }, +] + +[[package]] +name = "pydantic-core" +version = "2.46.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/af/f9/8a06bea35ef8daf588f707784c973a7046e0034c8d8cfb08828eeffb8b75/pydantic_core-2.46.5.tar.gz", hash = "sha256:10416c15b8839ecc4ef4d0885da76da6fd0f67333a0eb8aff6d93c4b8f2910fc", size = 472262, upload-time = "2026-08-28T10:01:31.677Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f5/37/5abe39a8372a61d3dc3c1338fc504281c01b32fdb3169cd7187153b56d3e/pydantic_core-2.46.5-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:b7ca9034437b6022f941f4857459562ee00a560b97e7cce8a0ec5a74fc6766e0", size = 2075885, upload-time = "2026-08-28T09:58:47.856Z" }, + { url = "https://files.pythonhosted.org/packages/21/43/6323b1f8b217780454c61304bcd2b38ae4762f50754414124603ccc90bb2/pydantic_core-2.46.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f332f0e72a5a0400141f830744e141bf9f97917878dbe968669e8a7fefea78ff", size = 1922768, upload-time = "2026-08-28T09:58:49.58Z" }, + { url = "https://files.pythonhosted.org/packages/0f/a3/c05ca796e1197618a774b01e596aeedfefc2f7d8c01ae3054e910b120e8a/pydantic_core-2.46.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:193375f3548919d3f0b60936ca113ada3e38f264f91b9b8e0508efaad57be931", size = 1951241, upload-time = "2026-08-28T09:58:51.511Z" }, + { url = "https://files.pythonhosted.org/packages/68/32/33bc39ac705c52cffc908e8389f9754fdb208aea5c69cceddf4eb3ce99af/pydantic_core-2.46.5-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:79bdfa52f843137045b2d081cc05c120ba6665d29b7559c2c47690906f39279f", size = 2031975, upload-time = "2026-08-28T09:58:53.166Z" }, + { url = "https://files.pythonhosted.org/packages/b0/70/2333e885c0f6a67bc105c5916965dac9b57f2718ee20d81d1a06a4ebdc13/pydantic_core-2.46.5-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:24922243639cbdac66c75fcb6fd6495a9cb52b213d62f9a0d16f0310b1ff8038", size = 2208542, upload-time = "2026-08-28T09:58:55.017Z" }, + { url = "https://files.pythonhosted.org/packages/f7/ea/296debfb4264207bbda5936133892e027c0a58875ad53ebd512fba8ec3a2/pydantic_core-2.46.5-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c76fe65e607be28c7fd4d56fc3c42b1583aa058ce3408b7ad0fd540171d31f9f", size = 2264692, upload-time = "2026-08-28T09:58:56.767Z" }, + { url = "https://files.pythonhosted.org/packages/d3/f2/9e4de77a6271e07a76d2d58b11c091a979c191ed2939bf80067568b369d2/pydantic_core-2.46.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f7b393a8b3da82f5c1fc0751e6d01ac6c55b93c18226a60bdfba4a724efafd1", size = 2066633, upload-time = "2026-08-28T09:58:58.531Z" }, + { url = "https://files.pythonhosted.org/packages/8d/db/f9e9d0c97445987b2084823d5c240de88087338f04fc2cfaa2df186b8049/pydantic_core-2.46.5-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:7ac031912d54f3d83ef3b3eb98dfabc1608802e2202263d25957eeed40b94761", size = 2105235, upload-time = "2026-08-28T09:59:00.421Z" }, + { url = "https://files.pythonhosted.org/packages/07/c5/79169b047b3b2c3e99e04bc76372af9637e0bf6db638274fa927df96369e/pydantic_core-2.46.5-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:837b396ca3d7b74091ca623f6cbd8351bd42d670a79c2683e79fb089f06a2de5", size = 2157367, upload-time = "2026-08-28T09:59:02.442Z" }, + { url = "https://files.pythonhosted.org/packages/26/b5/ba6057afb7c291bd449f51b867f95aef2072941c4ce4e5c31d6ffd132d3b/pydantic_core-2.46.5-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:5ee239d575f80b08eca11f6e20f90c4c695de7825c67eefe6091fbf20dda648e", size = 2158420, upload-time = "2026-08-28T09:59:04.2Z" }, + { url = "https://files.pythonhosted.org/packages/6e/28/2057abecaafdc22912afa819603a51f0a62d40643b7c4871c51721fea9be/pydantic_core-2.46.5-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:e80675d75ae2cd14372cb65cad5400d9347a3d3f6c13000183f22dfd027283ed", size = 2309588, upload-time = "2026-08-28T09:59:06.048Z" }, + { url = "https://files.pythonhosted.org/packages/71/9d/881156dc404e27479c4246128d73538464cab4a239bec61995e227644c30/pydantic_core-2.46.5-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:9c4b71f10dd532fb7a5cbc8f58707779e64f03a258c2bf8bfbaecfcd9970b519", size = 2341866, upload-time = "2026-08-28T09:59:08.539Z" }, + { url = "https://files.pythonhosted.org/packages/5a/38/d66f443a259f84d13babdceae568e572b0ed26da17ca5d0a649ebb110a67/pydantic_core-2.46.5-cp313-cp313-win32.whl", hash = "sha256:97bf8de4d541598c94a59344eeb988a94c08ff76b5723c41f6567ec18c7892ea", size = 1938580, upload-time = "2026-08-28T09:59:10.402Z" }, + { url = "https://files.pythonhosted.org/packages/2c/1e/1d5371213f4cc9a7ed70c0bfcc7911de22311ee99a662a56077d7292d2ac/pydantic_core-2.46.5-cp313-cp313-win_amd64.whl", hash = "sha256:15f4a94963c95accac15b7b657bb177d3ad82bb90b0d0526d9a9b85079925db5", size = 2041980, upload-time = "2026-08-28T09:59:12.396Z" }, + { url = "https://files.pythonhosted.org/packages/5a/48/4222d90b1c67568bace4dec6dca6271449c66de3595d72b6d098f5fde597/pydantic_core-2.46.5-cp313-cp313-win_arm64.whl", hash = "sha256:d22a945598fb91236b4dd793a6e42e4f3dd7740bb5aace5ebd7d4c08d13bb575", size = 1997213, upload-time = "2026-08-28T09:59:14.245Z" }, +] + +[[package]] +name = "pyparsing" +version = "3.3.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e4/11/b213bebff182584360cb8d17c72c1677fec5c5c228de439e63bcf8ab1c8f/pyparsing-3.3.3.tar.gz", hash = "sha256:928ae7e20211f3b6f3915a72f06a0cfd29ab9d24279dd6346b6b1a7146397d36", size = 1050487, upload-time = "2026-09-20T20:59:05.609Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/bb/d215ee7c73b61497b28a5503f9f53523f294fcc936762b7caf90e0c1c2b5/pyparsing-3.3.3-py3-none-any.whl", hash = "sha256:ece8c00a69cf01b45d0b1dedabb469c90d8caf996d4fda40f147627a122849a4", size = 126420, upload-time = "2026-09-20T20:59:04.025Z" }, +] + +[[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 = "pyyaml" +version = "6.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8", size = 181669, upload-time = "2025-09-25T21:32:23.673Z" }, + { url = "https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", size = 173252, upload-time = "2025-09-25T21:32:25.149Z" }, + { url = "https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", size = 767081, upload-time = "2025-09-25T21:32:26.575Z" }, + { url = "https://files.pythonhosted.org/packages/49/1e/a55ca81e949270d5d4432fbbd19dfea5321eda7c41a849d443dc92fd1ff7/pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5", size = 841159, upload-time = "2025-09-25T21:32:27.727Z" }, + { url = "https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6", size = 801626, upload-time = "2025-09-25T21:32:28.878Z" }, + { url = "https://files.pythonhosted.org/packages/f9/11/ba845c23988798f40e52ba45f34849aa8a1f2d4af4b798588010792ebad6/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", size = 753613, upload-time = "2025-09-25T21:32:30.178Z" }, + { url = "https://files.pythonhosted.org/packages/3d/e0/7966e1a7bfc0a45bf0a7fb6b98ea03fc9b8d84fa7f2229e9659680b69ee3/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be", size = 794115, upload-time = "2025-09-25T21:32:31.353Z" }, + { url = "https://files.pythonhosted.org/packages/de/94/980b50a6531b3019e45ddeada0626d45fa85cbe22300844a7983285bed3b/pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26", size = 137427, upload-time = "2025-09-25T21:32:32.58Z" }, + { url = "https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c", size = 154090, upload-time = "2025-09-25T21:32:33.659Z" }, + { url = "https://files.pythonhosted.org/packages/73/e8/2bdf3ca2090f68bb3d75b44da7bbc71843b19c9f2b9cb9b0f4ab7a5a4329/pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb", size = 140246, upload-time = "2025-09-25T21:32:34.663Z" }, +] + +[[package]] +name = "regex" +version = "2026.9.10" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b9/5c/f403115361de25809e8f785686ec7096e30fef73be9ae35aa51da4e80abb/regex-2026.9.10.tar.gz", hash = "sha256:1e321e2c84f0e52c457f5ea5944f796d6e8e09cb99738ea98dcc1bfe402a128d", size = 417072, upload-time = "2026-09-09T21:00:21.521Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/20/90/d4452bf1ef7dbe406980e8b921a257024482203c1dafac535eae207611bc/regex-2026.9.10-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ef5a059ea1c6ee5d1c7e99a2484e628608d010921efe876c6f0e2029d2f35eca", size = 496408, upload-time = "2026-09-09T20:57:36.757Z" }, + { url = "https://files.pythonhosted.org/packages/6a/35/c763c6424a0f99d021d46dc1f9065147bb5a40c2b2cdf28d2ebdbcd96508/regex-2026.9.10-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:dce932f8e3ba936475ea3d0d8b59f7b050a9e206e994f53f8fd80299871e87da", size = 296931, upload-time = "2026-09-09T20:57:38.811Z" }, + { url = "https://files.pythonhosted.org/packages/fa/68/241f88458b17c46ed2f80147a60a03b2ada7fb815c23b6bc76c298abb0a5/regex-2026.9.10-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d8c668af8f7bdb1d18739c27d30cd9f4b371495a883f75a002fb7a39d740fecd", size = 291741, upload-time = "2026-09-09T20:57:40.482Z" }, + { url = "https://files.pythonhosted.org/packages/90/9e/974d6de404c63e2d09525f4ddb99874c7ab8e1f781ccbe0dd3e26fa6f6e5/regex-2026.9.10-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6aebdd9a946de328b3f6f61dbf48dd064a36eb6dddf96e34ae6651d37f6e9383", size = 800088, upload-time = "2026-09-09T20:57:42.098Z" }, + { url = "https://files.pythonhosted.org/packages/9e/fd/3875b73f9e7ba3321dcaa02c19f650c05c61345328acf84599ac6f45ceed/regex-2026.9.10-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f2374c27deb189b282ec7e16106752c22ad39b056bbd8018960b1e4cc95d67a1", size = 871212, upload-time = "2026-09-09T20:57:44.03Z" }, + { url = "https://files.pythonhosted.org/packages/c5/f5/2358e791c0e171194dd6a8b97b520579098a21397fb79dbe6b7edc9e3fa7/regex-2026.9.10-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e0dc78251154b66dc60211563fc115345da332eaa881e4e2523fb1edae3772f4", size = 919752, upload-time = "2026-09-09T20:57:45.691Z" }, + { url = "https://files.pythonhosted.org/packages/20/3b/000c79c3f9c06b7542225a5d3a7f9a85405da7224b3b9af94a491d07abea/regex-2026.9.10-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bafa41b0dd63669e5c0f8adf3d24819efeb73c847f492eb011212eb352e69041", size = 804578, upload-time = "2026-09-09T20:57:47.548Z" }, + { url = "https://files.pythonhosted.org/packages/30/6d/195eedb1de87f26639191e7487e41eb81e2ce255bc7563a64f3f5a95eb08/regex-2026.9.10-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ebb2ba68e4641a994061f70bf44ed448fba0b9b1d18c94ffb9efc1cca805b39b", size = 777345, upload-time = "2026-09-09T20:57:49.63Z" }, + { url = "https://files.pythonhosted.org/packages/79/11/11fe2b313fcd92cb75c583648f2746031b9f4da9e9ed4241204a5e8b3721/regex-2026.9.10-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:048a89ee797db10160bd2bd519286577a6b43a100279bd4b7d8456a3d69c80a0", size = 790556, upload-time = "2026-09-09T20:57:51.27Z" }, + { url = "https://files.pythonhosted.org/packages/7a/c0/07ec9b4c43b0e16d62454971a5ab3886eccb0bfa161300a02d801ab28620/regex-2026.9.10-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:79e9432995e14c749d34209413de5e621ec8e67789bf4f46dbfabea9d06a2406", size = 865572, upload-time = "2026-09-09T20:57:53.163Z" }, + { url = "https://files.pythonhosted.org/packages/19/07/43bc9a9cf9fc8e37d2ba47980dfe4a6e151d2cf3ab969e0031e2a9b21484/regex-2026.9.10-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:5847e22bbf959764d776937d791d034cc2d19b787e361c88d97e859e8dc68502", size = 767971, upload-time = "2026-09-09T20:57:54.805Z" }, + { url = "https://files.pythonhosted.org/packages/9c/49/3b9286a3a94f3c89ed4ddbe74e72bdde21c1a5eadd520d5f4ed4a61936cb/regex-2026.9.10-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:c103b3b14e011774af4fb7e4617ad4d72b9171905cd3b231a70a4efd76e477d7", size = 858835, upload-time = "2026-09-09T20:57:56.627Z" }, + { url = "https://files.pythonhosted.org/packages/4a/9e/e5d27ce9fee8e3ef95f886c7b6ecec211efa4cfc18bd73bd5cf26cca4741/regex-2026.9.10-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6b34a778c695d24e77c140e3b4c95da69282e34f2f6b02b55656aa4a0379f643", size = 791793, upload-time = "2026-09-09T20:57:58.313Z" }, + { url = "https://files.pythonhosted.org/packages/63/03/c28a6bebedc3e2d86ee27ec2de16f7ec0419dcd10e771d43dcc9c58a2e99/regex-2026.9.10-cp313-cp313-win32.whl", hash = "sha256:7abb38b8c40f3a235235a44da452c64b7b5c1d650ec6351027db0e090804f2e5", size = 267298, upload-time = "2026-09-09T20:58:00.009Z" }, + { url = "https://files.pythonhosted.org/packages/cd/fd/5c85fa6cfb8e034080bda5a72fa0a4df2b7777a35eb7e73c2799c2adda7a/regex-2026.9.10-cp313-cp313-win_amd64.whl", hash = "sha256:20e8bfb07ad79a282f8b95b56fe67f9750b1b7f775724e4ba1f23cb296115ce4", size = 277894, upload-time = "2026-09-09T20:58:01.731Z" }, + { url = "https://files.pythonhosted.org/packages/c1/28/f5a25f6f65501675977fda35d9f61abb1468c4b87c0f73e536d8b21a60b8/regex-2026.9.10-cp313-cp313-win_arm64.whl", hash = "sha256:3bdeed3318a8eb2bbadc9c56347e0ff651639e934a47e168d05a3b12929fd0e7", size = 277436, upload-time = "2026-09-09T20:58:03.422Z" }, +] + +[[package]] +name = "requests" +version = "2.34.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ac/c3/e2a2b89f2d3e2179abd6d00ebd70bff6273f37fb3e0cc209f48b39d00cbf/requests-2.34.2.tar.gz", hash = "sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed", size = 142856, upload-time = "2026-05-14T19:25:27.735Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl", hash = "sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0", size = 73075, upload-time = "2026-05-14T19:25:26.443Z" }, +] + +[[package]] +name = "safetensors" +version = "0.6.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ac/cc/738f3011628920e027a11754d9cae9abec1aed00f7ae860abbf843755233/safetensors-0.6.2.tar.gz", hash = "sha256:43ff2aa0e6fa2dc3ea5524ac7ad93a9839256b8703761e76e2d0b2a3fa4f15d9", size = 197968, upload-time = "2025-08-08T13:13:58.654Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4d/b1/3f5fd73c039fc87dba3ff8b5d528bfc5a32b597fea8e7a6a4800343a17c7/safetensors-0.6.2-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:9c85ede8ec58f120bad982ec47746981e210492a6db876882aa021446af8ffba", size = 454797, upload-time = "2025-08-08T13:13:52.066Z" }, + { url = "https://files.pythonhosted.org/packages/8c/c9/bb114c158540ee17907ec470d01980957fdaf87b4aa07914c24eba87b9c6/safetensors-0.6.2-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:d6675cf4b39c98dbd7d940598028f3742e0375a6b4d4277e76beb0c35f4b843b", size = 432206, upload-time = "2025-08-08T13:13:50.931Z" }, + { url = "https://files.pythonhosted.org/packages/d3/8e/f70c34e47df3110e8e0bb268d90db8d4be8958a54ab0336c9be4fe86dac8/safetensors-0.6.2-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d2d2b3ce1e2509c68932ca03ab8f20570920cd9754b05063d4368ee52833ecd", size = 473261, upload-time = "2025-08-08T13:13:41.259Z" }, + { url = "https://files.pythonhosted.org/packages/2a/f5/be9c6a7c7ef773e1996dc214e73485286df1836dbd063e8085ee1976f9cb/safetensors-0.6.2-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:93de35a18f46b0f5a6a1f9e26d91b442094f2df02e9fd7acf224cfec4238821a", size = 485117, upload-time = "2025-08-08T13:13:43.506Z" }, + { url = "https://files.pythonhosted.org/packages/c9/55/23f2d0a2c96ed8665bf17a30ab4ce5270413f4d74b6d87dd663258b9af31/safetensors-0.6.2-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:89a89b505f335640f9120fac65ddeb83e40f1fd081cb8ed88b505bdccec8d0a1", size = 616154, upload-time = "2025-08-08T13:13:45.096Z" }, + { url = "https://files.pythonhosted.org/packages/98/c6/affb0bd9ce02aa46e7acddbe087912a04d953d7a4d74b708c91b5806ef3f/safetensors-0.6.2-cp38-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fc4d0d0b937e04bdf2ae6f70cd3ad51328635fe0e6214aa1fc811f3b576b3bda", size = 520713, upload-time = "2025-08-08T13:13:46.25Z" }, + { url = "https://files.pythonhosted.org/packages/fe/5d/5a514d7b88e310c8b146e2404e0dc161282e78634d9358975fd56dfd14be/safetensors-0.6.2-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8045db2c872db8f4cbe3faa0495932d89c38c899c603f21e9b6486951a5ecb8f", size = 485835, upload-time = "2025-08-08T13:13:49.373Z" }, + { url = "https://files.pythonhosted.org/packages/7a/7b/4fc3b2ba62c352b2071bea9cfbad330fadda70579f617506ae1a2f129cab/safetensors-0.6.2-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:81e67e8bab9878bb568cffbc5f5e655adb38d2418351dc0859ccac158f753e19", size = 521503, upload-time = "2025-08-08T13:13:47.651Z" }, + { url = "https://files.pythonhosted.org/packages/5a/50/0057e11fe1f3cead9254315a6c106a16dd4b1a19cd247f7cc6414f6b7866/safetensors-0.6.2-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:b0e4d029ab0a0e0e4fdf142b194514695b1d7d3735503ba700cf36d0fc7136ce", size = 652256, upload-time = "2025-08-08T13:13:53.167Z" }, + { url = "https://files.pythonhosted.org/packages/e9/29/473f789e4ac242593ac1656fbece6e1ecd860bb289e635e963667807afe3/safetensors-0.6.2-cp38-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:fa48268185c52bfe8771e46325a1e21d317207bcabcb72e65c6e28e9ffeb29c7", size = 747281, upload-time = "2025-08-08T13:13:54.656Z" }, + { url = "https://files.pythonhosted.org/packages/68/52/f7324aad7f2df99e05525c84d352dc217e0fa637a4f603e9f2eedfbe2c67/safetensors-0.6.2-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:d83c20c12c2d2f465997c51b7ecb00e407e5f94d7dec3ea0cc11d86f60d3fde5", size = 692286, upload-time = "2025-08-08T13:13:55.884Z" }, + { url = "https://files.pythonhosted.org/packages/ad/fe/cad1d9762868c7c5dc70c8620074df28ebb1a8e4c17d4c0cb031889c457e/safetensors-0.6.2-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:d944cea65fad0ead848b6ec2c37cc0b197194bec228f8020054742190e9312ac", size = 655957, upload-time = "2025-08-08T13:13:57.029Z" }, + { url = "https://files.pythonhosted.org/packages/59/a7/e2158e17bbe57d104f0abbd95dff60dda916cf277c9f9663b4bf9bad8b6e/safetensors-0.6.2-cp38-abi3-win32.whl", hash = "sha256:cab75ca7c064d3911411461151cb69380c9225798a20e712b102edda2542ddb1", size = 308926, upload-time = "2025-08-08T13:14:01.095Z" }, + { url = "https://files.pythonhosted.org/packages/2c/c3/c0be1135726618dc1e28d181b8c442403d8dbb9e273fd791de2d4384bcdd/safetensors-0.6.2-cp38-abi3-win_amd64.whl", hash = "sha256:c7b214870df923cbc1593c3faee16bec59ea462758699bd3fee399d00aac072c", size = 320192, upload-time = "2025-08-08T13:13:59.467Z" }, +] + +[[package]] +name = "scikit-learn" +version = "1.9.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "joblib" }, + { name = "narwhals" }, + { name = "numpy" }, + { name = "scipy" }, + { name = "threadpoolctl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d2/eb/eaf5e07fcc0da7149b0e084f24e54edd7441b9a89ce7e034032ae97fe3a0/scikit_learn-1.9.1.tar.gz", hash = "sha256:629cada3e33e2b9bf376cdc7614a47a4140b8aedc1d836579e359736fbd82977", size = 7786908, upload-time = "2026-09-10T18:34:04.679Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bb/8d/b60d5e7354ff0ff5cc9400e60273696589d87a30b8b2235886a76d80d062/scikit_learn-1.9.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2c2b312fd8c02951a364fa120ea08c1cec10d863466bf1701b013152d7537835", size = 8739300, upload-time = "2026-09-10T18:32:55.483Z" }, + { url = "https://files.pythonhosted.org/packages/2f/81/3c6392c03665d2899457a76e535a9a6f597dddddf3220fd2e1d790da88c5/scikit_learn-1.9.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:61cd968ab831a76d0ecbaf0347ab2270268716da28f94fd022497e3d6f205f13", size = 8262364, upload-time = "2026-09-10T18:32:57.966Z" }, + { url = "https://files.pythonhosted.org/packages/0f/35/a15b8653499692879821301d48059376d6e68e8b65cd0f22d19b6ee83cd9/scikit_learn-1.9.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5990f9c69e431bfaddcde1a6d7c5355243e026bc9b9e560c13893b90dab53fb4", size = 8823698, upload-time = "2026-09-10T18:33:00.632Z" }, + { url = "https://files.pythonhosted.org/packages/23/e5/688703d357e5393f708d98eb189fd415ae69e39f6de03c6bd4005aef6118/scikit_learn-1.9.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:55e79d6e9b0923f1a978179822bd43d7f5543f45e970a00fe861f43486380aba", size = 9121732, upload-time = "2026-09-10T18:33:02.825Z" }, + { url = "https://files.pythonhosted.org/packages/96/45/a10add34c08184d373be9384660c75758128ca881ed27b503b6f6a742478/scikit_learn-1.9.1-cp313-cp313-win_amd64.whl", hash = "sha256:2070f271e5375dc42c6bb93b461ab1c0aa5841d4009267e0cfd95a39dca94a43", size = 8237244, upload-time = "2026-09-10T18:33:05.26Z" }, + { url = "https://files.pythonhosted.org/packages/9e/08/7a89bcdadd1fff0d464d01056417b646c9abcbc54f7297a0a1203bba5ebb/scikit_learn-1.9.1-cp313-cp313-win_arm64.whl", hash = "sha256:613f0a783ca05aa844a4e1ac42d48425058f2c52be73f40f8cd98b7cd111acd6", size = 7875398, upload-time = "2026-09-10T18:33:07.506Z" }, +] + +[[package]] +name = "scipy" +version = "1.18.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7e/74/66de6258867beb2ef08f35f9f2ac017a52cacd5081714d239ff1a442d458/scipy-1.18.1.tar.gz", hash = "sha256:52c4b7422442aba924d03ad4019852b08a92e64ea187b933135687bfe2747307", size = 30781235, upload-time = "2026-08-21T23:28:50.599Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b6/55/4540ee0f9c42a9ad7109d0d1a8cc70de54c3572b01c6693a2b1c70e90ceb/scipy-1.18.1-cp313-cp313-macosx_10_15_x86_64.whl", hash = "sha256:3ab3523da44749156e1f68b464dc56af11ae4cbc5c739a49d05f32b982eca9f3", size = 31089958, upload-time = "2026-08-21T23:24:35.8Z" }, + { url = "https://files.pythonhosted.org/packages/2a/f5/769f36d14922b8071a43e95d24d18b6bdafad10d7f5cf647867e1ac052bc/scipy-1.18.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:e6fb6a55cc0ba97b59a1f288fb86dc6fce8bdfc0fffcbfd015e3a954bf2a2d93", size = 28715106, upload-time = "2026-08-21T23:24:40.775Z" }, + { url = "https://files.pythonhosted.org/packages/9a/d7/21d890274f75ea37a8209d5519e72da3da90302e3b9fb8397a0918386a62/scipy-1.18.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:ea324d9dd34c38bfb9bec8ca4d1b407db97dbb74029f566b8e322b1b6fe56fe6", size = 20456846, upload-time = "2026-08-21T23:24:45.066Z" }, + { url = "https://files.pythonhosted.org/packages/ec/01/798430ecea2e78ec7c02663d5f71c007bb6abeca931080debd40d7fa55ea/scipy-1.18.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:75b00eb8fb802090aa903f4ea1c7f5a584779f967361e68b7e98e531cc2d7174", size = 23087986, upload-time = "2026-08-21T23:24:49.539Z" }, + { url = "https://files.pythonhosted.org/packages/e6/5f/4634e9d35c68496e4e34cb6946eafab044458e6cedab42b40b6588e475b6/scipy-1.18.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d416b16cccfd70fbf62400e84d0bb2f4e6af519a45557f1692c749b37f14b315", size = 33998146, upload-time = "2026-08-21T23:24:54.714Z" }, + { url = "https://files.pythonhosted.org/packages/41/48/6450ed9243315322bbc19ac57b9b70d66a20bf1d38d124c96bc4bf6af9ea/scipy-1.18.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fdaf5ea890a6183d0565f51a61799d67081bd5b1cf03c5f4b3fd3732108625c9", size = 35312578, upload-time = "2026-08-21T23:25:00.44Z" }, + { url = "https://files.pythonhosted.org/packages/00/bd/bf5a4be6a3525676499f6dff307991739ff6fdcad1481b1aeb6745339f58/scipy-1.18.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c825cef2f49e46753726a7181a8e199804a912b29519ada542c6ebc654951899", size = 35612621, upload-time = "2026-08-21T23:25:06.144Z" }, + { url = "https://files.pythonhosted.org/packages/bd/4e/3c45c33e00a77996c4b1cb707929f833ba7b1d522ee29f882512c330676d/scipy-1.18.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e3b417bf8c2c7c16e8f58ad91db17783ec911ac16e7b50eb6eab6e809b4f5b07", size = 37457323, upload-time = "2026-08-21T23:25:12.483Z" }, + { url = "https://files.pythonhosted.org/packages/93/0e/e0348fbc0dbab65c114cf78957e7dfeb49f8e8b556b4d930cc12ff195e18/scipy-1.18.1-cp313-cp313-win_amd64.whl", hash = "sha256:559ed65f60c1af5a03f3912605a1b5114f522c7c32fb23c3376ae8f03219fe28", size = 36622841, upload-time = "2026-08-21T23:25:18.722Z" }, + { url = "https://files.pythonhosted.org/packages/50/a8/6a77f5f267c555108f0a864b6db714363dab567a8266422a79a385f9232b/scipy-1.18.1-cp313-cp313-win_arm64.whl", hash = "sha256:cd479fc04dd9401e3b4f49e76518768ef99c4f517a98c284eb091fd725719adf", size = 24399315, upload-time = "2026-08-21T23:25:23.458Z" }, +] + +[[package]] +name = "setuptools" +version = "81.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0d/1c/73e719955c59b8e424d015ab450f51c0af856ae46ea2da83eba51cc88de1/setuptools-81.0.0.tar.gz", hash = "sha256:487b53915f52501f0a79ccfd0c02c165ffe06631443a886740b91af4b7a5845a", size = 1198299, upload-time = "2026-02-06T21:10:39.601Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e1/e3/c164c88b2e5ce7b24d667b9bd83589cf4f3520d97cad01534cd3c4f55fdb/setuptools-81.0.0-py3-none-any.whl", hash = "sha256:fdd925d5c5d9f62e4b74b30d6dd7828ce236fd6ed998a08d81de62ce5a6310d6", size = 1062021, upload-time = "2026-02-06T21:10:37.175Z" }, +] + +[[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 = "sympy" +version = "1.14.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mpmath" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/83/d3/803453b36afefb7c2bb238361cd4ae6125a569b4db67cd9e79846ba2d68c/sympy-1.14.0.tar.gz", hash = "sha256:d3d3fe8df1e5a0b42f0e7bdf50541697dbe7d23746e894990c030e2b05e72517", size = 7793921, upload-time = "2025-04-27T18:05:01.611Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", hash = "sha256:e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5", size = 6299353, upload-time = "2025-04-27T18:04:59.103Z" }, +] + +[[package]] +name = "tensorboard" +version = "2.21.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "absl-py" }, + { name = "grpcio" }, + { name = "markdown" }, + { name = "numpy" }, + { name = "packaging" }, + { name = "pillow" }, + { name = "protobuf" }, + { name = "setuptools" }, + { name = "tensorboard-data-server" }, + { name = "werkzeug" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/37/4b/cd2eec9642781a8f5b2fb9994e3933a7b259ab18e9d49aeede9b5acf6311/tensorboard-2.21.0-py3-none-any.whl", hash = "sha256:7279316dcb6bd5bc391d623dea841531299cde1887310e8133bc34a996d32255", size = 5516204, upload-time = "2026-06-29T20:48:04.472Z" }, +] + +[[package]] +name = "tensorboard-data-server" +version = "0.7.2" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7a/13/e503968fefabd4c6b2650af21e110aa8466fe21432cd7c43a84577a89438/tensorboard_data_server-0.7.2-py3-none-any.whl", hash = "sha256:7e0610d205889588983836ec05dc098e80f97b7e7bbff7e994ebb78f578d0ddb", size = 2356, upload-time = "2023-10-23T21:23:32.16Z" }, + { url = "https://files.pythonhosted.org/packages/b7/85/dabeaf902892922777492e1d253bb7e1264cadce3cea932f7ff599e53fea/tensorboard_data_server-0.7.2-py3-none-macosx_10_9_x86_64.whl", hash = "sha256:9fe5d24221b29625dbc7328b0436ca7fc1c23de4acf4d272f1180856e32f9f60", size = 4823598, upload-time = "2023-10-23T21:23:33.714Z" }, + { url = "https://files.pythonhosted.org/packages/73/c6/825dab04195756cf8ff2e12698f22513b3db2f64925bdd41671bfb33aaa5/tensorboard_data_server-0.7.2-py3-none-manylinux_2_31_x86_64.whl", hash = "sha256:ef687163c24185ae9754ed5650eb5bc4d84ff257aabdc33f0cc6f74d8ba54530", size = 6590363, upload-time = "2023-10-23T21:23:35.583Z" }, +] + +[[package]] +name = "threadpoolctl" +version = "3.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/00/dc/6c58154c1c65f758ea979e7139cb76993a9cfc662d14e9be3c4a667cfb77/threadpoolctl-3.7.0.tar.gz", hash = "sha256:61348cfb77d53b9242e0017029244b559b810c142ced65b4e21eeca1843959a7", size = 31961, upload-time = "2026-09-15T15:46:20.263Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/43/3f/f88a53f60a472b46f4023f56d204dd7de33d34c5d2acbfa0d70a674e639e/threadpoolctl-3.7.0-py3-none-any.whl", hash = "sha256:cd8b60b5641b45c67bbf73c64c843235fc2d8a480c87389f52f5dbee893b86be", size = 26362, upload-time = "2026-09-15T15:46:19.168Z" }, +] + +[[package]] +name = "timm" +version = "1.0.25" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "huggingface-hub" }, + { name = "pyyaml" }, + { name = "safetensors" }, + { name = "torch" }, + { name = "torchvision" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d7/2c/593109822fe735e637382aca6640c1102c19797f7791f1fd1dab2d6c3cb1/timm-1.0.25.tar.gz", hash = "sha256:47f59fc2754725735cc81bb83bcbfce5bec4ebd5d4bb9e69da57daa92fcfa768", size = 2414743, upload-time = "2026-02-23T16:49:00.137Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/50/de09f69a74278a16f08f1d562047a2d6713783765ee3c6971881a2b21a3f/timm-1.0.25-py3-none-any.whl", hash = "sha256:bef7f61dd717cb2dbbb7e326f143e13d660a47ecbd84116e6fe33732bed5c484", size = 2565837, upload-time = "2026-02-23T16:48:58.324Z" }, +] + +[[package]] +name = "torch" +version = "2.12.0+cu130" +source = { registry = "https://download.pytorch.org/whl/cu130" } +dependencies = [ + { name = "cuda-bindings", marker = "sys_platform == 'linux'" }, + { name = "cuda-toolkit", extra = ["cudart", "cufft", "cufile", "cupti", "curand", "cusolver", "cusparse", "nvjitlink", "nvrtc", "nvtx"], marker = "sys_platform == 'linux'" }, + { name = "filelock" }, + { name = "fsspec" }, + { name = "jinja2" }, + { name = "networkx" }, + { name = "nvidia-cublas", marker = "sys_platform == 'linux'" }, + { name = "nvidia-cudnn-cu13", marker = "sys_platform == 'linux'" }, + { name = "nvidia-cusparselt-cu13", marker = "sys_platform == 'linux'" }, + { name = "nvidia-nccl-cu13", marker = "sys_platform == 'linux'" }, + { name = "nvidia-nvshmem-cu13", marker = "sys_platform == 'linux'" }, + { name = "setuptools" }, + { name = "sympy" }, + { name = "triton", marker = "sys_platform == 'linux'" }, + { name = "typing-extensions" }, +] +wheels = [ + { url = "https://download-r2.pytorch.org/whl/cu130/torch-2.12.0%2Bcu130-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:bf5f067d3a4d713b75ccd6a0141f8133c7495a016b917ce6dcec1492e3da98b0", upload-time = "2026-05-12T23:51:35Z" }, + { url = "https://download-r2.pytorch.org/whl/cu130/torch-2.12.0%2Bcu130-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:fe5fefb784a370d1ba4959de6e87bcd3b35441040a99bffe32f5cd03bbc834c0", upload-time = "2026-05-12T23:52:00Z" }, + { url = "https://download-r2.pytorch.org/whl/cu130/torch-2.12.0%2Bcu130-cp313-cp313-win_amd64.whl", hash = "sha256:6e728c5fdeffa19b3fa6a759ff585147851772789f3dc84dec5f8cbde0f7a5b0", upload-time = "2026-05-12T23:53:01Z" }, + { url = "https://download-r2.pytorch.org/whl/cu130/torch-2.12.0%2Bcu130-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:fce821712a2881eafcfe9ddf646d953683ae39f2e4c9f9066c6ebe4adcc76495", upload-time = "2026-05-12T23:53:55Z" }, + { url = "https://download-r2.pytorch.org/whl/cu130/torch-2.12.0%2Bcu130-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:180389b4cebb5d8988e453ca35df8fbbf709734c35e882b6e9f4abaca979454a", upload-time = "2026-05-12T23:54:20Z" }, + { url = "https://download-r2.pytorch.org/whl/cu130/torch-2.12.0%2Bcu130-cp313-cp313t-win_amd64.whl", hash = "sha256:eb22ad632b19f6ab9e0852aa2229e9b1c7f5bab5220e39012b3056c31391ea02", upload-time = "2026-05-12T23:55:24Z" }, +] + +[[package]] +name = "torchvision" +version = "0.27.0+cu130" +source = { registry = "https://download.pytorch.org/whl/cu130" } +dependencies = [ + { name = "numpy" }, + { name = "pillow" }, + { name = "torch" }, +] +wheels = [ + { url = "https://download-r2.pytorch.org/whl/cu130/torchvision-0.27.0%2Bcu130-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:da81245777c47f6dfd60e02f510d9778fb7f6e23119e2fc1ea1bb06777aae338", upload-time = "2026-05-12T16:20:44Z" }, + { url = "https://download-r2.pytorch.org/whl/cu130/torchvision-0.27.0%2Bcu130-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:afa4128f37066b83af9d426841a53147dd3c208efea893c93dc3eb6fa2af2287", upload-time = "2026-05-12T16:20:44Z" }, + { url = "https://download-r2.pytorch.org/whl/cu130/torchvision-0.27.0%2Bcu130-cp313-cp313-win_amd64.whl", hash = "sha256:31533c28f23bf642989a9ae12caa40a2f8cc9b443d556ba2ffb7a51f759e6a11", upload-time = "2026-05-13T02:00:46Z" }, + { url = "https://download-r2.pytorch.org/whl/cu130/torchvision-0.27.0%2Bcu130-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:bb511f033cd3d6f304dc25753d2a28a1d77aa4dd54a219242d9df7fa57d8dd0a", upload-time = "2026-05-12T16:20:44Z" }, + { url = "https://download-r2.pytorch.org/whl/cu130/torchvision-0.27.0%2Bcu130-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:0c375ac4e9a1c09308f81b73d111d50b76eec335dc91a1811ae370467db2cf47", upload-time = "2026-05-12T16:20:45Z" }, + { url = "https://download-r2.pytorch.org/whl/cu130/torchvision-0.27.0%2Bcu130-cp313-cp313t-win_amd64.whl", hash = "sha256:34d108e1ce8255e017bf1f732a51ab2e9ddffb443d118db499a0fbbeb0164650", upload-time = "2026-05-13T02:00:47Z" }, +] + +[[package]] +name = "tqdm" +version = "4.70.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0d/ea/b2a5bd54b28a324dae8211928b2d730b6547500342c7e6c6dea08bd0a485/tqdm-4.70.1.tar.gz", hash = "sha256:cefd0eca11b2a37a3aee776544d4f4ae913f02688135b5556b8788dfa474afc4", size = 171846, upload-time = "2026-09-11T07:25:16.601Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a7/03/921a3d3c75785aca9ebfbfcabfbc3a1be12e2ab5265deb026d55a5a3f83e/tqdm-4.70.1-py3-none-any.whl", hash = "sha256:c293e525e6fef9c20e8728fd4612df02a0aa31bb5fe91ecd93e123b1b7bffa73", size = 80199, upload-time = "2026-09-11T07:25:14.599Z" }, +] + +[[package]] +name = "triton" +version = "3.7.0" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/01/e1/a59a583de59b8f62c495d67c80ee3ea97d09e91ac80c4c6e76456ed8d8ac/triton-3.7.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:abdf6beaa89b1bcfb9a43cd990536ce66091a997841a4814b260b7bee4c88c3c", size = 188503209, upload-time = "2026-05-07T19:05:17.935Z" }, + { url = "https://files.pythonhosted.org/packages/30/b1/b7507bb9815d403927c8dd51d4158ed2e11751a92dbc118a044f247b6848/triton-3.7.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a35d7afe3f3f058e7ec49fcce09794049e0ffc5c59019ac25ec3413741b8c4e7", size = 201453566, upload-time = "2026-05-07T18:46:20.427Z" }, + { url = "https://files.pythonhosted.org/packages/a6/8f/0bea7a6a0c989315c9135a1d7fb37e41905cfb3a17cbc1f10044ebd4cc3a/triton-3.7.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cc1d61c172d257db80ddf42595131fb196ad2e9bdd751e90fe2ef13531734e8b", size = 188612899, upload-time = "2026-05-07T19:05:24.955Z" }, + { url = "https://files.pythonhosted.org/packages/e1/02/d96f57828d0912aec733b9bc7e0e7dbfd2c6f079a8fa433ac25cb93d1a30/triton-3.7.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:70fb9bbdc9f400afc54bbf6eb2670af28829a6ae3996863317964783141daf56", size = 201553816, upload-time = "2026-05-07T18:46:27.49Z" }, +] + +[[package]] +name = "typing-extensions" +version = "4.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/cc/6253133b5bb138fc3306cebfbda2c520f545d36b5be2c7255cc528bb45d6/typing_extensions-4.16.0.tar.gz", hash = "sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5", size = 113555, upload-time = "2026-07-02T08:40:05.92Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", hash = "sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8", size = 45571, upload-time = "2026-07-02T08:40:04.659Z" }, +] + +[[package]] +name = "typing-inspection" +version = "0.4.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a3/26/b09b8010994eccc3c09092e6b34058f36a460eea2d4c3e8b910c695975a0/typing_inspection-0.4.4.tar.gz", hash = "sha256:547274fa6b0a561ccf549cc9524b999a578e737d015d8709d021f9d0d13bea47", size = 76928, upload-time = "2026-08-12T12:37:25.997Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl", hash = "sha256:65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147", size = 14750, upload-time = "2026-08-12T12:37:24.648Z" }, +] + +[[package]] +name = "tzdata" +version = "2026.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e4/31/3d74fa778a63b98b7374323befcc0be5ab3bd94afd4096a0124e7379152c/tzdata-2026.4.tar.gz", hash = "sha256:f1b8bd365d8d210c55353f4d7f8d6d8561c0ba50d704b700d195a9424bba0d79", size = 199350, upload-time = "2026-09-12T12:56:03.251Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f9/bc/8737e8d54cf51106118039b83f485a4783112fab49ea9d044b234978a46e/tzdata-2026.4-py2.py3-none-any.whl", hash = "sha256:c2169a8b0a7a5e9674da5a135ccdfb2b3e671b333ed9fed17b41f73c34476e81", size = 347494, upload-time = "2026-09-12T12:56:01.67Z" }, +] + +[[package]] +name = "urllib3" +version = "2.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e3/05/b17359e1cefb4f909b5e40b1b90a496d987258916dbbf88e842c729f510e/urllib3-2.8.0.tar.gz", hash = "sha256:63bf2ead4c879426ebf22ef2a781eeb4aa3b4ae798a0435506f8687fd5bb9b63", size = 458972, upload-time = "2026-09-15T19:29:36.253Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/92/9d/c4e665119135114480843e7ab388fa94d8480650450e6f8e26b70d323a4c/urllib3-2.8.0-py3-none-any.whl", hash = "sha256:0cf3cae568d36aa9576b28dfb35f11328f1cb974ca7647d9475ebb86c75ac6e3", size = 135717, upload-time = "2026-09-15T19:29:34.577Z" }, +] + +[[package]] +name = "wandb" +version = "0.30.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "opentelemetry-api" }, + { name = "opentelemetry-exporter-otlp-proto-http" }, + { name = "opentelemetry-sdk" }, + { name = "packaging" }, + { name = "platformdirs" }, + { name = "protobuf" }, + { name = "pydantic" }, + { name = "pyyaml" }, + { name = "requests" }, + { name = "typing-extensions" }, + { name = "xxhash" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/86/10/c4481d12b26f57606d1ef7c8d56825ad6af769cbb8cd29ee501ac6bbbc2d/wandb-0.30.0.tar.gz", hash = "sha256:f2d7de3c2019204f493f3f9e9166071c2be36f74140af2e1409b4de0fd84c454", size = 40862616, upload-time = "2026-09-09T00:16:41.551Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/71/5a/83201590d1e84a3b7d0a0cc7b53ee1318def18ba5431a32b26a44e6694f6/wandb-0.30.0-py3-none-macosx_13_0_arm64.whl", hash = "sha256:f4f908ace761db42d239d100230df0b77eb9684924d962a762bba176d829a236", size = 23464329, upload-time = "2026-09-09T00:16:20.505Z" }, + { url = "https://files.pythonhosted.org/packages/35/b6/c0acf63242a0b8a3df9f877249ca260be80b86ecb08396fc34982967a50e/wandb-0.30.0-py3-none-macosx_13_0_x86_64.whl", hash = "sha256:9cf2492acd5c66ba7217667386e2a90535ccaec08079b97c389c3da5d15cde48", size = 25250085, upload-time = "2026-09-09T00:16:23.401Z" }, + { url = "https://files.pythonhosted.org/packages/91/69/0593b9e43cd3fc257a0f6ceaf5e078f2b28baf1968e00dfa1be98261ee68/wandb-0.30.0-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:72b564712e85e10d78d37ccdaef4a908d28cbb39240c9c00fa4dde567150c764", size = 24049519, upload-time = "2026-09-09T00:16:25.874Z" }, + { url = "https://files.pythonhosted.org/packages/26/13/775a4c7d87fb771a2ddb104ce7c5c5d393e48720e448b4e8c43aac7cd4ce/wandb-0.30.0-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:bad9412f137d02303bf178513e0109f4fed37a6c817604085a1a4151047d8790", size = 26105520, upload-time = "2026-09-09T00:16:28.146Z" }, + { url = "https://files.pythonhosted.org/packages/58/36/4974e9ec44c23dd28a39c8ee699f1b8911dd6619c932c3fe94b016bc8a1f/wandb-0.30.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:1f2cc20c033f1650d387ca073177e629f1e2a1b5c4be393698e3db4752b9cf3a", size = 24112309, upload-time = "2026-09-09T00:16:30.3Z" }, + { url = "https://files.pythonhosted.org/packages/05/77/5eddd97f33f581f4d167f41bbf4736f2a51ad7271b9c9ed5dceb6994cbd6/wandb-0.30.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:e7dc3b0b1567f6a121d8f7a58131b5d085861139a653ef8bed1569c9be796721", size = 26320243, upload-time = "2026-09-09T00:16:32.878Z" }, + { url = "https://files.pythonhosted.org/packages/2f/e7/821c363f0a74aa9826ca058d3f6f8f8e41697001a0a869b5ccc7eca5b0e4/wandb-0.30.0-py3-none-win_amd64.whl", hash = "sha256:217bde0a7c49482f26166a1a7bee760bb9e2658135b2d45a33aacabffec68817", size = 24083356, upload-time = "2026-09-09T00:16:36.766Z" }, + { url = "https://files.pythonhosted.org/packages/3a/60/fd40e8b1a6136f4df97739a503c239fb4dab67f093cb9cccb5a1dd9d1895/wandb-0.30.0-py3-none-win_arm64.whl", hash = "sha256:36d6d8a5b88b36ad82b0f7ffab79033a8bbba047b5a90c0b7e26d0cf3a09f0b6", size = 21788859, upload-time = "2026-09-09T00:16:39.088Z" }, +] + +[[package]] +name = "wcwidth" +version = "0.9.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/dc/ac/3a943d2792c9bb368aaa8b50121c0f778460ba2d7fbdc0a0366201d9e761/wcwidth-0.9.1.tar.gz", hash = "sha256:5823209b0d43af322ce698c689380d7c15ca31fa8e6e3be8459f27031bef0af5", size = 952410, upload-time = "2026-09-23T20:23:49.127Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/48/7c/130de33c0a7f6efecee28fef5711fc1f8d55ac33885a6b85f4f6689004ba/wcwidth-0.9.1-cp310-abi3-macosx_10_9_x86_64.whl", hash = "sha256:10b00ba23482e352f874d2e8135e7ace9da838646c7dd800566246bbd46125ff", size = 604219, upload-time = "2026-09-23T20:23:22.071Z" }, + { url = "https://files.pythonhosted.org/packages/33/7c/c7bb03da54de7ac5a08753e186b963f91847b04ed8ae5be136a4d5f52b75/wcwidth-0.9.1-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:40d936d72c9bdc10df43f93a8be502bc5024b487259139f66a328722c07f34a9", size = 609038, upload-time = "2026-09-23T20:23:24.941Z" }, + { url = "https://files.pythonhosted.org/packages/0b/71/f57effdf895c2d6d49333f1d6833a9f5438725c55a04ed3124a1c95bb3aa/wcwidth-0.9.1-cp310-abi3-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:69bb970cf5652b88cfdb9d3fdd1764fc15e5f8ad531643e7bb3e894cd969740e", size = 761464, upload-time = "2026-09-23T20:23:32.425Z" }, + { url = "https://files.pythonhosted.org/packages/4f/16/15b03d8fb7a747d0d2cf4a33da7b1b3e092493c58780f6589d5b1e9e3b49/wcwidth-0.9.1-cp310-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b5da43d6967668982e44a52fb551967d293f86d26cd86036ac95bbdd34394ed9", size = 770483, upload-time = "2026-09-23T20:23:28.128Z" }, + { url = "https://files.pythonhosted.org/packages/e2/a0/834886b30e3b885a5a96e8358f1b3917bc0bac43ae4178d77f0c210d079b/wcwidth-0.9.1-cp310-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:747fb724223f417a17541a95a17c1dac3a8ef9a0cf41684950f0eab191a35f65", size = 768443, upload-time = "2026-09-23T20:23:33.875Z" }, + { url = "https://files.pythonhosted.org/packages/a2/ae/1b7597e0132ebc2c920632f39d8c1c61881345c9b480c0a95eb91e7460fa/wcwidth-0.9.1-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:6e1272b7986cefe79783737e38bdb9eaae0682b333c7bd132024441193dd5ce7", size = 781171, upload-time = "2026-09-23T20:23:29.46Z" }, + { url = "https://files.pythonhosted.org/packages/fb/bb/32149e3b481953f4ef35f38f166e2532886d33ae54ccdd71393f821dfad9/wcwidth-0.9.1-cp310-abi3-musllinux_1_2_i686.whl", hash = "sha256:fe021c4d8de9d36c31a0cb41d0d2546dadd3b0708a301f1a0c66ce200851831f", size = 781576, upload-time = "2026-09-23T20:23:35.504Z" }, + { url = "https://files.pythonhosted.org/packages/d6/72/1ee3dff67697bda93bc56ec9f7b3b89609cd64b9abb328512a2f22eb9e47/wcwidth-0.9.1-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:708158c082364af442f9983de7b6ec9ac0d2e1b825ada25f0911b1f138d55405", size = 783526, upload-time = "2026-09-23T20:23:36.937Z" }, + { url = "https://files.pythonhosted.org/packages/ce/0a/e94f19a60f6127bcf3dfcf223ca05a37650d57b37b5ed623597c842ce7ca/wcwidth-0.9.1-cp310-abi3-win32.whl", hash = "sha256:356376852357b8fca71fe5415808ec421679e04b4a98eb7c9cb6a7984b911a05", size = 592136, upload-time = "2026-09-23T20:23:43.774Z" }, + { url = "https://files.pythonhosted.org/packages/3c/ff/d884d2ec7dcdc86cda742a86c7160bc726dbccae76d7ae1f9ac833c26680/wcwidth-0.9.1-cp310-abi3-win_amd64.whl", hash = "sha256:991d1c8834f548e9c1f16432075ee84638e122312556bbf1ed595ea8fffc4673", size = 596738, upload-time = "2026-09-23T20:23:44.989Z" }, + { url = "https://files.pythonhosted.org/packages/fa/93/16e30d617b937272a2310a6e3c1f9d8f94984e19ad4a96eb935628e3e6b6/wcwidth-0.9.1-cp310-abi3-win_arm64.whl", hash = "sha256:61bd7aef9cafb6cb77a37a169998d7928ce82a51522146d11f60db9e7d1cb43a", size = 594700, upload-time = "2026-09-23T20:23:41.013Z" }, + { url = "https://files.pythonhosted.org/packages/96/a2/f06f2e0be4895e5943d358755b51968ace85774cf0a4cc42b4dafb793832/wcwidth-0.9.1-py3-none-any.whl", hash = "sha256:e0c3a1c45c5b9550c6919a4449e95f5b177f6e165786376981db8f1addae9b21", size = 300656, upload-time = "2026-09-23T20:23:20.674Z" }, +] + +[[package]] +name = "werkzeug" +version = "3.1.8" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/dd/b2/381be8cfdee792dd117872481b6e378f85c957dd7c5bca38897b08f765fd/werkzeug-3.1.8.tar.gz", hash = "sha256:9bad61a4268dac112f1c5cd4630a56ede601b6ed420300677a869083d70a4c44", size = 875852, upload-time = "2026-04-02T18:49:14.268Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/93/8c/2e650f2afeb7ee576912636c23ddb621c91ac6a98e66dc8d29c3c69446e1/werkzeug-3.1.8-py3-none-any.whl", hash = "sha256:63a77fb8892bf28ebc3178683445222aa500e48ebad5ec77b0ad80f8726b1f50", size = 226459, upload-time = "2026-04-02T18:49:12.72Z" }, +] + +[[package]] +name = "xxhash" +version = "4.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/a5/1386f35da1475fcaeef42581deae73417c6d2a6a0b2d2e8914de18844dcd/xxhash-4.0.1.tar.gz", hash = "sha256:d55bf4ef10eb09b8b6866790e083d26d087d84caa3cc0946ba87c3ca7ecaf7b7", size = 101513, upload-time = "2026-08-17T08:24:08.557Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f3/dd/c707286b527722f776e1fb81dd202c45623355ba1a2972337a2a26075b2b/xxhash-4.0.1-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:8c9fe122444e129881afd1d4d1c7ac0d3ce2d91b68c2b40173b6025ff1c31f9a", size = 43639, upload-time = "2026-08-17T08:20:54.945Z" }, + { url = "https://files.pythonhosted.org/packages/1b/3b/bb71639a0f95635f61936a6f2653599c4261b645ddddd8d00f9dfe3613e2/xxhash-4.0.1-cp313-cp313-android_24_x86_64.whl", hash = "sha256:1f3346c5c287ac3c7f38b20380f55e8768230e7252af59fabcf3b87ab21e4256", size = 40657, upload-time = "2026-08-17T08:22:12.616Z" }, + { url = "https://files.pythonhosted.org/packages/3c/91/76f3f5385faa9886a36f21fcc603f40b4c0c40ce622382f133160c48b4d9/xxhash-4.0.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:4e5141543c7f7fe3087500bbb4ac2845cb528a980aa91f8f1e661e2292ff4a5d", size = 34708, upload-time = "2026-08-17T08:35:24.614Z" }, + { url = "https://files.pythonhosted.org/packages/9a/4a/f48f0e3e1b1ab072979fff2a5be899234e28090883e8b519d0b10215d708/xxhash-4.0.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:f09ee747e2a5f876cc5ad56947734811828335e13b403dd8ea1e06d77a9dd48d", size = 35650, upload-time = "2026-08-17T08:21:09.337Z" }, + { url = "https://files.pythonhosted.org/packages/c4/53/b73d7472b196101ad1f57ed0674af3af803ac3e9ec2feadd650a7b262562/xxhash-4.0.1-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:acf52474b2494ef66dc7e0fb6d5e2b50c18313039ad4d275fbf9f9907c804bc5", size = 37958, upload-time = "2026-08-17T08:22:10.616Z" }, + { url = "https://files.pythonhosted.org/packages/d0/f2/024946ad8fa532074af4e4380179da54b7ec9facc8bd0b279ec0fac4e63a/xxhash-4.0.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1b3cccf75eeb5b01639b2feadb042a8e07889293b7ca72fa2985e7dcb64763cf", size = 38032, upload-time = "2026-08-17T08:22:09.535Z" }, + { url = "https://files.pythonhosted.org/packages/da/e0/934af8d99bb5885711006bec30a691f728edd513d2c40f053f887d8e7577/xxhash-4.0.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cd878d32f5c6cbce9783f8d6897561fb772211edba9dde49d85672b88ed45276", size = 35895, upload-time = "2026-08-17T08:35:16.53Z" }, + { url = "https://files.pythonhosted.org/packages/20/5f/a8011f6a1558f7ca66d9077bb4f192b1871afcea62fbd5733605d2015755/xxhash-4.0.1-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:41e579025a6e13a99e6d71e39c9cfc621a0dcdbbf19106325e145fa858f2d794", size = 259464, upload-time = "2026-08-17T08:21:06.72Z" }, + { url = "https://files.pythonhosted.org/packages/ff/89/9665a44397547e7a3d58c0942425a976d58dcfd4b538f33220a312bf6912/xxhash-4.0.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:74379a577a9f3b6afbdedf1b90e5c7764467051977f18a326d7d607336d743bd", size = 283949, upload-time = "2026-08-17T08:22:17.003Z" }, + { url = "https://files.pythonhosted.org/packages/34/2d/78774141266457468f29f3f5803092df4db87d8148ba74e4debd041649db/xxhash-4.0.1-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:acb31ecdd1a97fab5cd39a84ee9f515e727d319f796fec48703b8339b9998360", size = 303898, upload-time = "2026-08-17T08:35:27.951Z" }, + { url = "https://files.pythonhosted.org/packages/59/48/d78d22de576b42528bff87c14207de50de4f0b888221a50ff7c9d675d670/xxhash-4.0.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5b7875ac1a2edcb691f27642b8b94b904baa6bcecb7d79c72df2228ba8cb5c51", size = 287241, upload-time = "2026-08-17T08:21:13.042Z" }, + { url = "https://files.pythonhosted.org/packages/4c/de/7a1755a59c59fd46176f293bbdd99e399a6537ba9537fc723aa4d1bf6e27/xxhash-4.0.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4751f1d7eecae6b2d2a773630f1a7248f125c9a92a456694d03c15bceffc9d68", size = 519856, upload-time = "2026-08-17T08:22:15.35Z" }, + { url = "https://files.pythonhosted.org/packages/6f/fb/76580c08e916507859b0f335393cb5fdc59452c4402edbc6bcca6e47e7df/xxhash-4.0.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9a51b061d54cda8b83e62c44458bfbf0dabbef9b975dd9649952ba5076b9f349", size = 268572, upload-time = "2026-08-17T08:22:14.533Z" }, + { url = "https://files.pythonhosted.org/packages/d0/2b/1abde3e07b8f2077a38b4fbfaf764115008bfe0ff03bc7756a52c9fd0607/xxhash-4.0.1-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:74a164e8b63f1e9cf35c9a7809d082b033d1a00e7375d5d814415436e7867e57", size = 344967, upload-time = "2026-08-17T08:35:23.569Z" }, + { url = "https://files.pythonhosted.org/packages/5c/15/80b6ddf0732eef48a8b5fe717398274794392bd6dbe82af38d189d214772/xxhash-4.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4f5e5c6df4b703afcbe9352d238a51efd97c3b91fdc3a2052e40fdacb1e7505f", size = 279956, upload-time = "2026-08-17T08:21:24.97Z" }, + { url = "https://files.pythonhosted.org/packages/77/e0/11cbc43c205bf81fad50d69c7319cd1b1ccc01a66cd4fb8766357126c43d/xxhash-4.0.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:d54b8ae068af532c8cdf56abb9e09a60fbe7b10792444c9c27987bb6d3b450fa", size = 307583, upload-time = "2026-08-17T08:22:22.541Z" }, + { url = "https://files.pythonhosted.org/packages/1c/11/cf0bc07feb2791045b6ac075d4bf64f1a5beedef2f46ae70d7104d63a19f/xxhash-4.0.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:1749f0688020209fe0d357ce1e1cd9ec9c6161ed0405ea949d24581c4c43fa91", size = 265848, upload-time = "2026-08-17T08:35:31.298Z" }, + { url = "https://files.pythonhosted.org/packages/d4/c4/7ada4bea2a2795073dfc42d96842930efbe7a0c1857ef4b522e4e90e5d83/xxhash-4.0.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:94ac8a6b8c47951173f0b67bf862bcb971bf24e493b9fbbdb0e010cbbc7d9f54", size = 284409, upload-time = "2026-08-17T08:21:23.156Z" }, + { url = "https://files.pythonhosted.org/packages/3c/f4/d8ce83dd6b99ccfbdadaf2db968ae40334d2e5f73a0297e593b9ddb3df39/xxhash-4.0.1-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:a33de7633c948ab2dc144af370a66e7e7af29b425dcd0f7e4f59689fb9391b53", size = 335921, upload-time = "2026-08-17T08:22:21.802Z" }, + { url = "https://files.pythonhosted.org/packages/a6/9f/f47d8724bd8bc45b395b06b7cacea2dae0d00031af1b707184a091161df6/xxhash-4.0.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:247ece770647c0aef080561fa996f9774b4dadce2d0c42eeb98229db7dcf820d", size = 487023, upload-time = "2026-08-17T08:22:19.729Z" }, + { url = "https://files.pythonhosted.org/packages/57/54/2d87098f3371cc1e42dd04d2285ad56bca4c56667bc501bff02d2b9fd6b5/xxhash-4.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a4553d36cc0b7fce1f35ba8a94dfd775aa3ed12f5eab2dc3b46ac75a0706b0bb", size = 264333, upload-time = "2026-08-17T08:35:27.001Z" }, + { url = "https://files.pythonhosted.org/packages/27/b8/93795ca5898ec7d7d0455283ad261c0fc76b4f0c0a69e86233bd7badb0bd/xxhash-4.0.1-cp313-cp313-pyemscripten_2025_0_wasm32.whl", hash = "sha256:87aa309a93bd5ec13f14309a305ff4e9bf74c5363fc46c264c0a22edfd5b0670", size = 20581, upload-time = "2026-08-17T08:21:39.207Z" }, + { url = "https://files.pythonhosted.org/packages/b6/96/926f7335a0a1647952c00421e8da877f658094f61336306c7cadc335c94d/xxhash-4.0.1-cp313-cp313-win32.whl", hash = "sha256:cba763d84b06bda2c38d5185dee76f1b9dfdc0789e96e476d9e10005526d0788", size = 34449, upload-time = "2026-08-17T08:22:29.362Z" }, + { url = "https://files.pythonhosted.org/packages/ea/61/8a5aeb811de093bab3434e77eff0e9461624a1a56a6a93d315d080aab2aa/xxhash-4.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:97b94fb29abf21f5f0bde15f7dbdd3a4aa2dc59f37026adc7b4bee8563b84375", size = 36520, upload-time = "2026-08-17T08:35:34.852Z" }, + { url = "https://files.pythonhosted.org/packages/04/14/97f3c74000ca36955e9cb86f6d270dcd5848b5c65afa623453f5cf2d83d6/xxhash-4.0.1-cp313-cp313-win_arm64.whl", hash = "sha256:08ed8da18cd4fd0a6a5d6a444852d8fbd0e565388a74a4937085451b5f1a312a", size = 33428, upload-time = "2026-08-17T08:21:31.713Z" }, +] diff --git a/dev/releases/mambo_v3/ucloud_release.json b/dev/releases/mambo_v3/ucloud_release.json new file mode 100644 index 0000000..9d4c8bf --- /dev/null +++ b/dev/releases/mambo_v3/ucloud_release.json @@ -0,0 +1,23 @@ +{ + "environment_id": "ucloud-replace-with-allocation-and-gpu", + "v2_python": "/work/envs/mambo-v2/bin/python", + "v3_python": "/work/envs/mambo-v3/bin/python", + "metrics_python": "/work/envs/mambo-metrics/bin/python", + "legacy_source": "/work/mambo-v2-source", + "legacy_weights": "/work/models/MAMBO", + "hf_cache": "/work/models/huggingface/hub", + "bundle": "/work/models/mambo-v3-bundle", + "manifest": "/work/global-lepi-test-manifest.json", + "root": "/work/global_lepi", + "output": "/work/mambo-release-ucloud", + "cuda_visible_devices": "0", + "quality_device": "cuda:0", + "quality_batch_size": 32, + "qualification_count": 256, + "threads": 4, + "quality_presets": ["full"], + "timing_presets": ["full", "north_europe"], + "timing_devices": ["cpu", "cuda:0"], + "cpu_batches": [1, 8], + "gpu_batches": [1, 8, 32] +} diff --git a/dev/releases/mambo_v3/ucloud_release.py b/dev/releases/mambo_v3/ucloud_release.py new file mode 100644 index 0000000..89fea6f --- /dev/null +++ b/dev/releases/mambo_v3/ucloud_release.py @@ -0,0 +1,387 @@ +"""Plan and run the five release pipelines on an allocated UCloud node.""" + +import argparse +import hashlib +import json +import os +import platform +import shutil +import subprocess +import sys +from pathlib import Path + +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.releases.mambo_v3.evaluation_data import write_json + +ROOT = Path(__file__).resolve().parents[3] +RECIPE = "rotation30_pad25_3" +VARIANTS = ("v2", "torch", "onnx", "torch-tta", "onnx-tta") +PATHS = ("v2_python", "v3_python", "metrics_python", "legacy_source", "legacy_weights", "hf_cache", "bundle", "manifest", "root", "output") + + +def configuration(path): + data = json.loads(path.read_text()) + for key in (*PATHS, "onnx_python", "reuse_v2_from", "timing_manifest", "timing_root"): + if key in data: + value = path.parent / Path(data[key]).expanduser() + # Resolving a venv Python symlink selects the base interpreter and loses its packages. + data[key] = os.path.abspath(value) if key.endswith("_python") else str(value.resolve()) + for key in ("quality_batch_size", "qualification_count", "threads"): + if not isinstance(data[key], int) or data[key] < 1: + raise ValueError(f"Positive integer required: {key}") + for key, minimum in ( + ("decode_workers", 0), + ("prefetch_batches", 0), + ("read_workers", 1), + ("read_window", 1), + ("encoded_budget_mib", 1), + ): + if key in data and (not isinstance(data[key], int) or data[key] < minimum): + raise ValueError(f"Nonnegative integer required: {key}") + if "v3_batch_size" in data and (not isinstance(data["v3_batch_size"], int) or data["v3_batch_size"] < 1): + raise ValueError("Positive v3_batch_size required") + for key in ("cpu_batches", "gpu_batches"): + if not data[key] or any(not isinstance(b, int) or b < 1 for b in data[key]): + raise ValueError(f"Positive batches required: {key}") + for key in ("quality_presets", "timing_presets"): + if not data[key] or not set(data[key]) <= {"full", "europe", "north_europe"}: + raise ValueError("Use presets shared with V2") + if "full" not in data["quality_presets"]: + raise ValueError("In-domain quality must include the global vocabulary") + if not data["environment_id"] or not data["timing_devices"] or not set(data["timing_devices"]) <= {"cpu", "cuda:0"}: + raise ValueError("Require environment identity and CPU/CUDA timing devices") + if data["quality_device"] not in ("cpu", "cuda:0"): + raise ValueError("Unsupported quality device") + return data + + +def new_campaign(config, output): + """Reuse prepared assets with the active interpreter and a fresh results directory.""" + updated = dict(config) + for key in ("v2_python", "v3_python", "metrics_python"): + updated[key] = os.path.abspath(sys.executable) + output = output.expanduser().resolve() + updated["output"] = str(output) + output.mkdir(parents=True, exist_ok=False) + write_json(output / "config.json", updated) + return updated + + +def jobs(config, phase): + """Pure plan construction: no dataset access, imports of runtimes, or execution.""" + timing = phase == "benchmark" + manifest = config.get("timing_manifest", config["manifest"]) if timing else config["manifest"] + root = config.get("timing_root", config["root"]) if timing else config["root"] + shared = ["--manifest", manifest, "--root", root, "--threads", str(config["threads"])] + bank_size = max(32, *config["cpu_batches"], *config["gpu_batches"], config.get("v3_batch_size", 1)) + planned = [] + for trial in range(3 if timing else 1): + variants = VARIANTS[::-1] if trial == 1 else VARIANTS + devices = config["timing_devices"] if timing else [config["quality_device"]] + for device in devices: + for variant in variants: + legacy = variant == "v2" + if legacy: + command = [ + config["v2_python"], + "-P", + "-m", + "dev.releases.mambo_v3.legacy_evaluation", + phase, + "--source", + config["legacy_source"], + "--weights", + config["legacy_weights"], + ] + if device == "cpu": + command += ["--cpu-float32"] + else: + module = "benchmark" if timing else "evaluate" + interpreter = config.get("onnx_python", config["v3_python"]) if variant.startswith("onnx") else config["v3_python"] + command = [interpreter, "-m", f"dev.releases.mambo_v3.{module}"] + preparation = [ + "--stream-workers" if timing else "--decode-workers", + str(config.get("decode_workers", config["threads"])), + "--prefetch-batches", + str(config.get("prefetch_batches", 2)), + ] + if not timing: + command += ["collect", *preparation] + if not config.get("device_prefetch", True): + command.append("--no-device-prefetch") + for key, default in (("read_workers", 32), ("read_window", 128), ("encoded_budget_mib", 256)): + command += ["--" + key.replace("_", "-"), str(config.get(key, default))] + if timing: + command += preparation + command += [ + "--bundle", + config["bundle"], + "--backend", + variant.split("-")[0], + "--precision", + "auto", + "--tta", + RECIPE if variant.endswith("-tta") else "none", + ] + command += [*shared, "--device", device, "--presets", *config["timing_presets" if timing else "quality_presets"]] + if timing: + sizes = list(config["cpu_batches"] if device == "cpu" else config["gpu_batches"]) + if not legacy and device != "cpu" and "v3_batch_size" in config: + sizes = sorted(set([*sizes, config["v3_batch_size"]])) + command += [ + "--batches", + *map(str, sizes), + "--bank-size", + str(bank_size), + ] + else: + command += [ + "--batch-size", + str(config["quality_batch_size"] if legacy else config.get("v3_batch_size", config["quality_batch_size"])), + ] + if phase == "qualification": + command += ["--count", str(config["qualification_count"])] + name = f"trial-{trial}-{variant}-{device.replace(':', '-')}" if timing else variant + command += ["--output", str(Path(config["output"]) / phase / name)] + planned.append({"name": name, "variant": variant, "device": device, "legacy": legacy, "command": command}) + return planned + + +def runtime_environments(config): + """Record installed environments, independently of how they were resolved.""" + script = ( + "import importlib.metadata as m, json, sys; " + "print(json.dumps({'python': sys.version, 'packages': sorted(" + "[d.metadata['Name'], d.version, d.read_text('direct_url.json')] " + "for d in m.distributions())}))" + ) + return { + interpreter: json.loads(subprocess.check_output([interpreter, "-I", "-c", script], text=True)) + for interpreter in sorted({config[key] for key in ("v2_python", "v3_python", "metrics_python", "onnx_python") if key in config}) + } + + +def fingerprint(config): + manifest = json.loads(Path(config["manifest"]).read_text()) + if manifest.get("dataset") != "global-lepi-test" or len(manifest["records"]) != 632913: + raise ValueError("Require the verified original 632,913-image UCloud test manifest") + if any(r["split"] != "test" for r in manifest["records"]) or manifest.get("provenance", {}).get("test_set") != "0": + raise ValueError("Preserve original test membership; no resplitting") + hashes = {key: file_hash(config[key]) for key in ("manifest", "timing_manifest") if key in config} + hashes["bundle"] = file_hash(Path(config["bundle"]) / "release.json") + hashes["scripts"] = { + str(p.relative_to(ROOT)): file_hash(p) + for folder in (ROOT / "dev/releases/mambo_v3", ROOT / "deployment/mambo_deploy") + for p in sorted(folder.glob("*.py")) + } + hashes["environments"] = runtime_environments(config) + hashes["revision"] = subprocess.check_output(["git", "rev-parse", "HEAD"], cwd=ROOT, text=True).strip() + return {"config": config, "inputs": hashes} + + +def validated_report(directory): + report = json.loads((directory / "report.json").read_text()) + if report["status"] != "complete": + raise ValueError(f"Incomplete job: {directory}; preserve it elsewhere before resuming") + for preset, digest in report.get("csv_sha256", {}).items(): + if file_hash(directory / preset / "mini_metric.csv") != digest: + raise ValueError(f"Changed predictions: {directory}") + return report + + +def bank_identity(directory, report): + records = report["samples"] + if isinstance(records, int): + records = json.loads((directory / "samples.json").read_text()) + if len(records) != report["samples"] or file_hash(directory / "samples.json") != report["sample_ids_sha256"]: + raise ValueError("Changed legacy timing image bank") + return hashlib.sha256(json.dumps(records, sort_keys=True).encode()).hexdigest() + + +def reuse_v2(config, phase, job, frozen): + """Copy completed V2 evidence only when its inputs, runtime and implementation still match.""" + source = Path(config["reuse_v2_from"]) / phase + plan_path = source / "plan.json" + prior = json.loads(plan_path.read_text()) + if "v2" not in prior["completed"]: + raise ValueError(f"No completed V2 evidence in {source}") + previous = next(item for item in prior["jobs"] if item["name"] == "v2") + + def invocation(command): + command = list(command) + command[command.index("--output") + 1] = "" + return command + + if invocation(previous["command"]) != invocation(job["command"]): + raise ValueError("Cannot reuse V2 with changed invocation") + old, new = prior["fingerprint"]["inputs"], frozen["inputs"] + for key in ("manifest", "bundle"): + if old[key] != new[key]: + raise ValueError(f"Cannot reuse V2 with changed {key}") + interpreter = config["v2_python"] + if old["environments"][interpreter] != new["environments"][interpreter]: + raise ValueError("Cannot reuse V2 with changed environment") + # These changes implement V3 collection/prefetch and campaign orchestration only. + allowed = { + "dev/releases/mambo_v3/evaluate.py", + "dev/releases/mambo_v3/prefetch.py", + "dev/releases/mambo_v3/ucloud_release.py", + "deployment/mambo_deploy/augmentation.py", + "deployment/mambo_deploy/preprocessing.py", + "deployment/mambo_deploy/streaming.py", + "deployment/mambo_deploy/result_worker.py", + "deployment/mambo_deploy/transfers.py", + "deployment/mambo_deploy/results.py", + "deployment/mambo_deploy/predictor.py", + "dev/releases/mambo_v3/benchmark.py", + "dev/releases/mambo_v3/ucloud_summary.py", + } + changed = {name for name in old["scripts"].keys() | new["scripts"].keys() if old["scripts"].get(name) != new["scripts"].get(name)} + if changed - allowed: + raise ValueError(f"Cannot reuse V2 with changed scripts: {sorted(changed - allowed)}") + report = validated_report(source / "v2") + if file_hash(source / "v2/samples.json") != report["sample_ids_sha256"]: + raise ValueError("Changed source V2 sample identities") + digest = file_hash(source / "v2/report.json") + if digest != prior["reports_sha256"]["v2"]: + raise ValueError("Changed source V2 report") + destination = Path(config["output"]) / phase / "v2" + shutil.copytree(source / "v2", destination) + print(f"Reused completed V2 {phase} from {source}", flush=True) + return {"source": str(source), "plan_sha256": file_hash(plan_path), "report_sha256": digest} + + +def run(config, phase, resume=False): + frozen = fingerprint(config) + output = Path(config["output"]) / phase + planned = jobs(config, phase) + if phase in ("full", "benchmark"): + prior = json.loads((Path(config["output"]) / "qualification/plan.json").read_text()) + if prior["status"] != "complete" or prior["fingerprint"] != frozen: + raise ValueError("Complete qualification with this exact configuration and revision first") + for job in prior["jobs"]: + directory = Path(config["output"]) / "qualification" / job["name"] + validated_report(directory) + if file_hash(directory / "report.json") != prior["reports_sha256"][job["name"]]: + raise ValueError("Qualification report changed") + if output.exists(): + if not resume: + raise FileExistsError("Use a fresh output or --resume to verify and reuse completed jobs") + plan = json.loads((output / "plan.json").read_text()) + if plan["fingerprint"] != frozen or plan["jobs"] != planned: + raise ValueError("Changed campaign configuration, inputs or code; use a fresh output") + else: + output.mkdir(parents=True) + plan = { + "fingerprint": frozen, + "environment_id": config["environment_id"], + "platform": platform.platform(), + "jobs": planned, + "completed": [], + "reports_sha256": {}, + } + plan.pop("error", None) + plan["status"] = "running" + write_json(output / "plan.json", plan) + identities = set() + try: + for job in planned: + directory = output / job["name"] + if directory.exists() and not (directory / "report.json").exists(): + raise ValueError(f"Partial job {directory}; preserve it elsewhere before resuming") + if not directory.exists() and job["legacy"] and phase != "benchmark" and config.get("reuse_v2_from"): + plan.setdefault("reused", {})[job["name"]] = reuse_v2(config, phase, job, frozen) + if not directory.exists(): + env = dict( + os.environ, + CUDA_VISIBLE_DEVICES=config["cuda_visible_devices"], + OMP_NUM_THREADS=str(config["threads"]), + MKL_NUM_THREADS=str(config["threads"]), + OPENBLAS_NUM_THREADS="1", + PYTHONHASHSEED="0", + HF_HUB_OFFLINE="1", + HF_HUB_CACHE=config["hf_cache"], + PYTHONPATH=f"{config['legacy_source']}:{ROOT}" if job["legacy"] else str(ROOT), + ) + print(job["name"], flush=True) + log = output / f"{job['name']}.log" + with log.open("w") as stream: + try: + subprocess.run(job["command"], cwd=ROOT, env=env, check=True, stdout=stream, stderr=subprocess.STDOUT) + except subprocess.CalledProcessError: + print(f"Job failed; log: {log}\n" + "\n".join(log.read_text(errors="replace").splitlines()[-25:]), flush=True) + raise + report = validated_report(directory) + digest = file_hash(directory / "report.json") + if job["name"] in plan["reports_sha256"] and plan["reports_sha256"][job["name"]] != digest: + raise ValueError("A completed job report changed") + if phase != "benchmark": + identities.add(report["sample_ids_sha256"]) + else: + identities.add(bank_identity(directory, report)) + if len(identities) != 1: + raise ValueError("Different sample identities across pipelines") + plan["reports_sha256"][job["name"]] = digest + if job["name"] not in plan["completed"]: + plan["completed"].append(job["name"]) + write_json(output / "plan.json", plan) + plan["status"] = "complete" + except Exception as error: + plan.update(status="failed", error=f"{type(error).__name__}: {error}") + raise + finally: + write_json(output / "plan.json", plan) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("phase", choices=("qualification", "full", "benchmark")) + parser.add_argument("--config", type=Path, required=True) + parser.add_argument("--dry-run", action="store_true", help="Print jobs without accessing data or starting processes") + parser.add_argument("--resume", action="store_true", help="Verify/reuse complete jobs; never overwrite partial results") + parser.add_argument( + "--new-campaign", + type=Path, + help="Qualification only: reuse prepared assets with the active Python; save config.json in a new results directory", + ) + parser.add_argument("--onnx-python", type=Path, help="With --new-campaign: use a separate interpreter for ONNX jobs") + parser.add_argument("--decode-workers", type=int, help="With --new-campaign: V3 image preparation workers") + parser.add_argument( + "--prefetch-batches", type=int, help="With --new-campaign: bounded V3 preparation queue (0 minimizes decoded lookahead)" + ) + parser.add_argument("--reuse-v2-from", type=Path, help="With --new-campaign: verified completed V2 qualification/full evidence") + for key in ("read-workers", "read-window", "encoded-budget-mib"): + parser.add_argument("--" + key, type=int, help="With --new-campaign: streaming input control") + parser.add_argument("--v3-batch-size", type=int, help="With --new-campaign: V3 collection batch size") + parser.add_argument("--no-device-prefetch", action="store_true", help="With --new-campaign: disable device input staging") + args = parser.parse_args() + if args.no_device_prefetch and not args.new_campaign: + parser.error("--no-device-prefetch requires --new-campaign") + for key in ("read_workers", "read_window", "encoded_budget_mib", "v3_batch_size"): + value = getattr(args, key) + if value is not None and (not args.new_campaign or value < 1): + parser.error("Positive streaming controls require --new-campaign") + if any(value is not None for value in (args.decode_workers, args.prefetch_batches, args.reuse_v2_from)) and not args.new_campaign: + parser.error("Collection overrides require --new-campaign") + if any(value is not None and value < 0 for value in (args.decode_workers, args.prefetch_batches)): + parser.error("Workers and prefetch must be nonnegative") + if args.onnx_python and not args.new_campaign: + parser.error("--onnx-python requires --new-campaign; subsequent phases use the saved config") + if args.new_campaign and (args.phase != "qualification" or args.resume or args.dry_run): + parser.error("--new-campaign requires qualification without --resume or --dry-run") + config = configuration(args.config.resolve()) + if args.no_device_prefetch: + config["device_prefetch"] = False + if args.onnx_python: + config["onnx_python"] = os.path.abspath(args.onnx_python.expanduser()) + for key in ("decode_workers", "prefetch_batches", "read_workers", "read_window", "encoded_budget_mib", "v3_batch_size"): + if (value := getattr(args, key)) is not None: + config[key] = value + if args.reuse_v2_from: + config["reuse_v2_from"] = str(args.reuse_v2_from.expanduser().resolve()) + if args.new_campaign: + config = new_campaign(config, args.new_campaign) + if args.dry_run: + print(json.dumps(jobs(config, args.phase), indent=2)) + else: + run(config, args.phase, args.resume) diff --git a/dev/releases/mambo_v3/ucloud_summary.py b/dev/releases/mambo_v3/ucloud_summary.py new file mode 100644 index 0000000..64de2b6 --- /dev/null +++ b/dev/releases/mambo_v3/ucloud_summary.py @@ -0,0 +1,119 @@ +"""Validate completed UCloud evidence and export environment-labelled quality/speed tables.""" + +import argparse +import csv +import json +import statistics +from pathlib import Path + +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.releases.mambo_v3.evaluation_data import write_json +from dev.releases.mambo_v3.metrics import METRIC_SCHEMA, REVISION +from dev.releases.mambo_v3.ucloud_release import VARIANTS, bank_identity, validated_report + + +def summarize(root, output): + plans = {phase: json.loads((root / phase / "plan.json").read_text()) for phase in ("full", "benchmark")} + if any(p["status"] != "complete" for p in plans.values()): + raise ValueError("Both collection and benchmark phases must be complete") + if plans["full"]["fingerprint"] != plans["benchmark"]["fingerprint"]: + raise ValueError("Quality and timing campaign identities differ") + data = { + "environment_id": plans["full"]["environment_id"], + "fingerprint": plans["full"]["fingerprint"], + "quality": [], + "speed": [], + "streaming_speed": [], + "runtime_reports": {}, + "metric_revision": REVISION, + "policy": "Original full test split; no threshold selection on test; all and known truth; timings isolated from collection", + } + identities, banks = set(), set() + for phase, plan in plans.items(): + if set(plan["completed"]) != {j["name"] for j in plan["jobs"]}: + raise ValueError("Incomplete job list") + if {j["variant"] for j in plan["jobs"]} != set(VARIANTS): + raise ValueError("Missing release variant") + for job in plan["jobs"]: + directory = root / phase / job["name"] + r = validated_report(directory) + if file_hash(directory / "report.json") != plan["reports_sha256"][job["name"]]: + raise ValueError("Changed job report") + data["runtime_reports"][f"{phase}/{job['name']}"] = {k: v for k, v in r.items() if k not in ("samples", "cells")} + if phase == "full": + if r["samples"] != 632913: + raise ValueError("Not the complete original test set") + identities.add(r["sample_ids_sha256"]) + for preset, digest in r["csv_sha256"].items(): + m = json.loads((directory / preset / "metrics.json").read_text()) + if m["source_sha256"] != digest or m["metric_schema"] != METRIC_SCHEMA or m["mini_metrics_revision"] != REVISION: + raise ValueError("Stale or incompatible mini_metrics output") + for scope in ("all", "known"): + for level, rank in enumerate(("species", "genus", "family")): + data["quality"].append( + { + "environment_id": data["environment_id"], + "variant": job["variant"], + "preset": preset, + "scope": scope, + "rank": rank, + **m["ranks"][rank], + **{k: v[str(level)] for k, v in m[scope].items()}, + } + ) + else: + banks.add(bank_identity(directory, r)) + for c in r["cells"]: + identity = { + "environment_id": data["environment_id"], + "variant": job["variant"], + "device": job["device"], + "trial": job["name"], + "preset": c["preset"], + "batch_size": c["batch_size"], + } + if "streaming" in c: + stream = c["streaming"] + if len(stream["seconds"]) != 3 or any(v <= 0 for v in stream["seconds"]): + raise ValueError("Require three positive streaming observations") + data["streaming_speed"].append( + { + **identity, + "images": stream["images"], + "images_per_second": stream["images"] / statistics.median(stream["seconds"]), + "seconds": stream["seconds"], + } + ) + seconds = c["end_to_end"]["seconds"] + if len(seconds) != 7 or any(v <= 0 for v in seconds): + raise ValueError("Require seven positive completed observations") + data["speed"].append( + { + **identity, + "images_per_second": c["batch_size"] / statistics.median(seconds), + "seconds": seconds, + "peak_host_rss_mib": r["peak_rss_kib_linux"] / 1024, + } + ) + if len(identities) != 1 or len(banks) != 1: + raise ValueError("Mismatched quality populations or timing image banks") + data["sample_ids_sha256"] = next(iter(identities)) + data["timing_bank_sha256"] = next(iter(banks)) + output.mkdir(parents=True, exist_ok=False) + write_json(output / "ucloud-summary.json", data) + for name in ("quality", "speed", "streaming_speed"): + if not data[name]: + continue + with (output / f"{name}.csv").open("w", newline="") as stream: + writer = csv.DictWriter(stream, fieldnames=list(data[name][0]), lineterminator="\n") + writer.writeheader() + writer.writerows(data[name]) + return data + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--root", type=Path, required=True) + parser.add_argument("--output", type=Path, required=True) + args = parser.parse_args() + summarize(args.root, args.output) diff --git a/dev/ucloud/README.md b/dev/ucloud/README.md index 3d9cd5f..3935999 100644 --- a/dev/ucloud/README.md +++ b/dev/ucloud/README.md @@ -1,851 +1,263 @@ -# UCloud global_lepi training comparison - -Run inside **one allocated node**, with 1, 2, 4 or 8 visible GPUs. More than one -GPU uses one `torchrun` process per GPU and the package's existing DDP trainer -(including SyncBatchNorm). One GPU uses ordinary training. Do not invoke the -launcher once per GPU or wrap it in a multi-task `srun`. - -Allocate the job manually in the UCloud web interface, connect to that node over -SSH, install the environments below, then run the launcher from the shell. Local -Slurm inside the allocation is unnecessary and cannot allocate further nodes. -Use `tmux` or another persistent shell if an SSH disconnect would stop the process; -this does not extend the allocation's lifetime. - -UCloud's [PyTorch app](https://docs.cloud.sdu.dk/Apps/pytorch.html) supports a Bash -batch script and selection of GPU machine types. Mounted volumes appear under -[`/work`](https://docs.cloud.sdu.dk/guide/submitting.html). Use the actual paths -shown in your job. No Gefion account, partition, GPU type or Slurm directives are -assumed here. The scripts perform no installation, submission or paid allocation. - -## Comparison and controls - -The source configuration is `publication/experiments/config_temp.yaml` (singular -`publication`), a local experiment file. This protocol keeps 10 epochs, FP16 AMP, -class weighting, 0.25 warmup epochs and eight loader workers per rank. It replaces -ViT with torchvision `efficientnet_v2_s` (EfficientNetV2-S) and fixes the -`HierarchicalClassifier` head, species/genus/family, equal loss weights, normalized -prototypes, hidden layer, dropout 0.1, MuonAuxAdamW, learning rate 0.001, weight decay -0.01, regularizer 0.1 and automatic smoothing. Resizing is explicitly 384 pixels, -the backbone's preferred crop size. The initial pretrained backbone and randomly -initialized head are saved **once per seed by master**, then loaded by both branches. -Smoothing values per hierarchy level are recorded in `dataset.json`. - -**Batch size 64 is global**, so it becomes 32/16/8 per rank for 2/4/8 GPUs. Learning -rate is not scaled. Changing GPU count still changes SyncBatchNorm, sampling and -kernel behavior; compare rows within an allocation, not as identical trajectories -across GPU counts. Three paired seeds are the default. Run order is shuffled within -each seed using a reproducible schedule. RNG streams are not guaranteed identical -across implementations, but starting model tensors are identical. No resume or -checkpoint averaging is used in measured runs. - -| Variant | Branch | Change from eager control | -| --- | --- | --- | -| `master_eager` | master | Baseline | -| `quant_eager` | quant | Branch changes with all optional acceleration off | -| `quant_prefetch` | quant | CUDA transfer lookahead | -| `quant_compile_model` | quant | Default model compilation | -| `quant_compile_optimizer` | quant | Optimizer compilation | -| `quant_combined` | quant | Prefetch plus both compilation options | - -Optional variant names: `quant_model_graphs` (reduce-overhead model mode), -`quant_optimizer_graphs` (optimizer graph replay), and **`quant_int8` (one GPU -only)**. For a single-GPU INT8 comparison, set `gpus: 1` and include at least -`master_eager`, `quant_eager`, `quant_int8`. The runner rejects INT8 with DDP. -These are target-machine qualification experiments; a supported flag is not a -guarantee that a compiled configuration succeeds or is faster on this hierarchy. -Failures remain visible. No automatic fallback is used. - -Muon, normalized heads, EMLA/class weighting, regularization and smoothing already -exist on the pinned master. They are held constant rather than mislabeled as new -quant features. Their quality/tuning ablations belong to the separate -[feature-validation protocol](../../docs/training-feature-validation.md). -EMA is disabled. CPU PTQ/QAT are inference experiments. Full dataset RAM caching -is excluded because it replicates the dataset per DDP rank and can exhaust node -memory; both branches use uncached image loading. W&B is disabled to avoid requiring -credentials; local logs and checkpoints are retained. +# UCloud training comparison -## Fresh job setup +Run inside one manually allocated UCloud node, with mounted data and results under +`/work`. Connect by SSH and use `tmux` for long commands; it does not extend the +allocation. These helpers do not submit jobs or install a scheduler. + +This harness retains historical master/quant comparisons. Quantization is merged; +the labels identify **pinned packages**, not current branch tips. The completed +production recipe and lessons are in the +[training post-mortem](../../docs/training-workflow-postmortem.md). For a new +production run use the [DDP/production guide](ddp.md); for MAMBO deployment testing +use the [release runbook](../releases/mambo_v3/ucloud-release.md). -For the first bounded test, select one MIG in UCloud and mount the global_lepi -dataset. Internet access is needed for the source checkout, Python dependencies -and the first pretrained-weight download. CPU and RAM come with the selected -GPU product; the host totals reported inside the container are not your budget. +## Fresh job setup -Clone the branch containing the current harness, then install uv if the image -does not already provide it. Follow the [official uv installation instructions](https://docs.astral.sh/uv/getting-started/installation/). +Install uv, clone the repository, select the reviewed harness revision, then let +the setup helper create the dedicated environments. Keep the harness checkout +separate from the pinned packages it installs. ```bash -git clone --branch quant https://github.com/asgersvenning/mini_trainer.git /work/mini_trainer -# Only if `uv --version` is unavailable: +# Install uv only if the node does not already provide it. curl -LsSf https://astral.sh/uv/install.sh | sh export PATH="$HOME/.local/bin:$PATH" - +git clone https://github.com/asgersvenning/mini_trainer.git /work/mini_trainer cd /work/mini_trainer +git checkout YOUR_REVIEWED_REF bash dev/ucloud/setup.sh /work/YOUR_DATASET/YOUR_METADATA.parquet -``` - -The setup script reads the pinned commits from `qualification.json`, exports the -quant commit's lockfile into `/work/requirements-mt.txt`, creates two Python 3.12 -environments and checks their dependencies. It uses explicit indexes and required -hashes, stops on the first error, and generates `/work/qualification.json` with the -supplied dataset path and a new smoke-test output path. It does not start training -or touch the dataset. No editable package is installed, and the checkout stays on -the harness branch. Do not reset it to the older pinned package commits. - -`MT_WORK_ROOT` overrides `/work`, `MT_CONFIG` chooses another generated config path, -and `MT_TORCH_BACKEND` selects `cu126`, `cu130` (default) or `cu132`. A failed setup can -be rerun: it synchronizes only its dedicated `venvs/mt-master` and `venvs/mt-quant` -environments, removing leftover packages there. An existing generated config is -never overwritten. The UV download cache defaults to `/work/.cache/uv`; installation -time and disk space depend on the node and network and are outside the test budget. - -Once setup succeeds: - -```bash -cd /work/mini_trainer/dev/ucloud +source /work/venvs/mt-quant/bin/activate export TORCH_HOME=/work/.cache/torch -bash launch.sh /work/qualification.json --stage plan -bash launch.sh /work/qualification.json --stage prepare && \ - bash launch.sh /work/qualification.json --stage train -bash launch.sh /work/qualification.json --stage summary -``` - -Preparation and both eager runs share a 30-minute wall-clock budget. It does not -terminate the UCloud job; choose the allocation lifetime separately, allowing for -installation. See the qualification and resource discussion below before expanding -the matrix. The manual setup below remains available for full-dataset comparisons. - -## Fresh environment setup (manual) - -Use the same Python and exact dependency versions for both packages. The runner -checks installed VCS commit IDs and dependency inventories. No editable installs: -running from the harness directory must import the selected installed branch. -The node image must provide a working NVIDIA driver and a C++ compiler (`c++`, or -the executable named by `CXX`); the preflight checks both CUDA execution and compiler -availability. Python wheels do not provide the NVIDIA kernel driver. -The default commits are the local branch tips inspected when this harness was -prepared, not a claim about the latest remote branches: - -```bash -MASTER_SHA=2ebbe39f2365bfea482d7ebc3d000cf4d2044918 -QUANT_SHA=4ea6b9613fc29a8e33ef72f28885f4e2a0e5906b -REPO_URL=https://github.com/asgersvenning/mini_trainer.git -``` - -In a checkout of `QUANT_SHA`, export its lockfile with an explicit CUDA backend. -Choose `cu126`, `cu130` or `cu132` according to the allocated GPU and driver; do -not choose CPU wheels. `cu130` below is an explicit example, not GPU qualification. -Keep the NVIDIA driver information from `nvidia-smi` with your results. - -```bash -uv export --locked --no-dev --no-emit-project --extra recommended --extra cu130 --extra export --extra quantization --output-file /work/requirements-mt.txt -uv venv --python 3.12 /work/venvs/mt-master -uv venv --python 3.12 /work/venvs/mt-quant -export UV_LINK_MODE=copy -unset UV_TORCH_BACKEND -uv pip install --python /work/venvs/mt-master/bin/python --index https://pypi.org/simple --default-index https://download.pytorch.org/whl/cu130 --index-strategy unsafe-first-match --require-hashes -r /work/requirements-mt.txt -uv pip install --python /work/venvs/mt-quant/bin/python --index https://pypi.org/simple --default-index https://download.pytorch.org/whl/cu130 --index-strategy unsafe-first-match --require-hashes -r /work/requirements-mt.txt -uv pip install --python /work/venvs/mt-master/bin/python --no-deps "mini_trainer @ git+$REPO_URL@$MASTER_SHA" -uv pip install --python /work/venvs/mt-quant/bin/python --no-deps "mini_trainer @ git+$REPO_URL@$QUANT_SHA" -uv pip check --python /work/venvs/mt-master/bin/python -uv pip check --python /work/venvs/mt-quant/bin/python -``` - -Both pinned commits must be available in the Git repository you install from. -At preparation time the public `quant` tip was `f5c69e7cab2bfde8a5467026b293858b93e628f9`; -the pinned local tip contains two later commits. Publish those commits before -using the HTTPS installation above, or transfer a Git bundle without publishing: - -```bash -# On the development machine; transfer this bundle and dev/ucloud to UCloud. -git bundle create /tmp/mini-trainer-ucloud.bundle master quant -# On UCloud, after transferring it: -git clone /work/mini-trainer-ucloud.bundle /work/mini-trainer-source -REPO_URL=file:///work/mini-trainer-source -# Then use the same pinned uv pip install commands above with this REPO_URL. ``` -Keep the harness separately: it was added after the pinned quant commit and is -not installed by `uv pip install mini_trainer`. Use a checkout containing -`dev/ucloud/launch.sh`, not a checkout reset to `QUANT_SHA`, for the copy below. -Save the exported requirements. -The export and quantization extras are installed equally in both environments so -optional follow-ups do not change the dependency comparison. -Use the same backend in the export's `--extra` and the installs' explicit CUDA -index URL. Exported requirements do not carry the custom PyTorch index. -PyPI is searched first, then the CUDA index when the pinned version is absent. -Keep hashes enabled. Avoid `--torch-backend` for this exported lock: it also -redirects `torchao`, which is locked from PyPI, and can trigger an unpinned -requirement error in a fresh environment. Stop on any installation failure before -continuing to the next command. The copy link mode avoids cross-filesystem -hardlink warnings; it does not affect training speed. - -Preparation downloads torchvision's pretrained weights if absent. For offline -jobs, populate a shared writable `TORCH_HOME` ahead of time using the same locked -torchvision version. Allow CPU RAM/disk for the full hierarchical initial models, -three seeds, optimizer checkpoints and compiled caches. Do not assume INT8 makes -the convolutional backbone or all optimizer state integer. +Replace the revision and metadata placeholders. The node needs a working NVIDIA +driver and C++ compiler; preflight checks CUDA execution and compiler availability. +Internet or prepared caches are needed for packages and pretrained weights. +Mounted paths/allocation products are described in the +[UCloud guide](https://docs.cloud.sdu.dk/guide/submitting.html). + +`setup.sh` reads the template's immutable package commits, exports the quant pin's +lock, installs matching dependencies into dedicated Python 3.12 environments, and +writes `/work/qualification.json`. It does not train or modify the dataset. It +requires full Git history containing those pins and does not install editable +packages. Never reset the harness checkout to an older package pin. + +| Setup override | Purpose | +| --- | --- | +| `MT_TEMPLATE` | Profile JSON; defaults to the adjacent `qualification.json` | +| `MT_CONFIG` | New generated node configuration; existing files are not overwritten | +| `MT_WORK_ROOT` | Persistent environment/result root; default `/work` | +| `MT_TORCH_BACKEND` | `cu126`, `cu130` (default), or `cu132`; choose for the node | +| `MT_REPO_URL` | Package Git source, including a transferred `file:///work/...` clone | +| `UV_CACHE_DIR` | Package cache; default `/work/.cache/uv` | + +Setup can retry partial dependency installation in its dedicated environments. +It uses required hashes, explicit PyPI/CUDA indexes and copy link mode. Do not add +`--torch-backend` to the exported requirements install: that can redirect the +PyPI-locked TorchAO dependency. The helper is the maintained installation recipe; +inspect `requirements-mt.txt` and installed inventories rather than duplicating +its commands. For offline source transfer, create a Git bundle containing the +template's pinned commits and set `MT_REPO_URL` to the resulting node-side clone. ## Configure and launch -If you cloned a branch containing this harness directly onto the node, run from -that checkout's `dev/ucloud` directory. No `/work/comparison` directory or copy is -needed. Keep the checkout there; the launcher resolves its sibling scripts itself -and runs workers outside the checkout with the configured installed interpreters. -For example: - -```bash -cd /work/mini_trainer/dev/ucloud -``` - -The following copy instructions are an alternative for transferring just the harness -when environments already exist. `setup.sh` requires a Git checkout with the pinned -package commits and is intended for the fresh-job workflow above. -First copy the harness and example configuration onto the node. If a checkout -containing `dev/ucloud` is already on the node, run from that checkout's root: - -```bash -mkdir -p /work/comparison -cp -i dev/ucloud/launch.sh dev/ucloud/compare.py dev/ucloud/worker.py \ - dev/ucloud/export_followup.py dev/ucloud/comparison.json dev/ucloud/qualification.json /work/comparison/ -``` - -Otherwise, run this from the checkout root on your development machine, replacing -`UCLOUD_SSH_HOST` with the SSH destination you use for the allocated node (and -adding your usual SSH port/key options if needed): - -```bash -ssh UCLOUD_SSH_HOST 'mkdir -p /work/comparison' -scp dev/ucloud/launch.sh dev/ucloud/compare.py dev/ucloud/worker.py \ - dev/ucloud/export_followup.py dev/ucloud/comparison.json dev/ucloud/qualification.json UCLOUD_SSH_HOST:/work/comparison/ -``` - -Copy once before configuring; preserve an already edited node configuration when -updating scripts. Creating `/work/comparison` alone does not populate it. Keep the -three Python scripts alongside `launch.sh`, which resolves them relative to itself. - -On the node, edit `/work/comparison/comparison.json`: set `parquet`, `output`, both -Python paths and `gpus`. -The Parquet must sit beside `images//` as expected by -`mini_trainer`. Preparation checks every image path, rejects duplicates and missing -labels, freezes the taxonomy/index, and retains the existing `set` mapping: -`0=test`, `1=validation`, other numeric sets=train. Non-numeric sets are excluded by -the existing parser. No random re-splitting occurs. Keep image bytes immutable; -preparation checks file existence, not hashes or complete decoding of the images. - -```bash -cd /work/comparison -bash launch.sh comparison.json --stage plan -bash launch.sh comparison.json --stage prepare -bash launch.sh comparison.json --stage train -bash launch.sh comparison.json --stage summary -``` - -`prepare` requires a **new** output directory and verifies CUDA in both environments. -It is CPU-heavy when parsing and initializing models. Start with the bounded -qualification profile below: one epoch of the full six-million-image dataset is -still a long run. Eight workers per rank can mean 64 workers on eight GPUs; reduce -consistently if the allocated CPU or shared-memory budget requires it. - -### Bounded qualification on one MIG device - -Use `qualification.json` for the first setup test. Edit its dataset path and -environment entries to match your node, and choose a new output path. It selects -one visible CUDA device, batch size 32, two loader workers, one epoch and one seed, -with both eager controls. The source splits are preserved, and a fixed seed selects -2,048 training, 512 validation and 128 test rows by uniform reservoir sampling within -each split. Both branches use exactly the same saved sample and starting weights. -Test images are checked for existence but are not used in training or validation. - -This gives **64 training batches and 16 validation batches per branch**. Selection -still streams the source Parquet once, but retains only 2,688 rows plus one batch -in memory. Only selected image paths are checked. The taxonomy and classifier head -are built from the selected rows, reducing the pinned master's expensive normalized -head initialization. Duplicate/path validation covers the sample, not the entire -source dataset. The selected Parquet, mappings, index and seed are retained and -hashed with the other preparation artifacts. - -This is an infrastructure smoke test, **not a full-taxonomy performance or quality -comparison**. Random sampling can leave validation species absent from the training -sample. Do not interpret its accuracy, loss weighting or timing as representative -of the complete dataset. Results carry `scope=qualification_subset`, including in -the paired report. Omitting `qualification` preserves the full-dataset workflow. - -```bash -# From the node's checkout, after editing qualification.json: -cd /work/mini_trainer/dev/ucloud -bash launch.sh qualification.json --stage plan -bash launch.sh qualification.json --stage prepare && \ - bash launch.sh qualification.json --stage train -bash launch.sh qualification.json --stage summary -``` - -The profile's `budget_seconds: 1800` sets one wall-clock deadline beginning at -`prepare`, shared by preflights, preparation and both training runs. Time between -commands also counts; chain preparation and training as above. The launcher stops -active workers when the deadline expires (cleanup may take up to 15 additional -seconds), records an interrupted/timed-out run when applicable, and preserves all -logs. This is a time bound, not a promise that both runs finish on every allocation. -`timeout_seconds` additionally caps each worker call. Summary remains available -after the deadline. The budget does not stop the UCloud allocation or include manual -environment installation; set the job lifetime in UCloud separately. - -After the eager pair passes, use another new output and add `quant_prefetch` first. -Test compilation variants separately: cold compilation can consume much of a short -budget. For timing comparisons, increase to at least two epochs to distinguish -first-use costs from subsequent execution, and keep sample seed, batch size, -image size, resource allocation and thread settings fixed across variants. Full -taxonomy, full-data convergence, INT8 and multi-GPU/DDP qualification remain separate. - -### Job resources and bottlenecks - -[UCloud's resource guide](https://docs.cloud.sdu.dk/guide/resources-products.html) -describes one MIG as one seventh of a B200 and allows one to four MIGs per job. -The UI's `4/7` selection provides four separate `1g.23gb` devices, not a single -device with four times the memory. CPU and system RAM allocations scale with the -selected product. Use the vCPU/RAM values shown for that selection; `nproc` and -`free` can expose host totals (384 vCPUs and roughly 2.2 TiB on this node type). -Keep the existing one-MIG allocation for the initial eager test; four devices -would additionally exercise DDP and would not accelerate the serial preparation. - -The profile's batch size 32 leaves more headroom than the observed full-head -batch-64 run, which used about 16 GiB of a 20.5 GiB device. Keep 384-pixel inputs to -exercise the intended preprocessing. Two loader workers are a conservative starting -point for a fractional allocation. The reported 34 GiB `/dev/shm` is not a small -default shared-memory mount; there is no evidence so far that it needs increasing. -Avoid full-dataset RAM caching. If loaders later starve the GPU, compare two and -four workers within the actual CPU quota before increasing further; keep the same -worker count for paired branches. Container CPU quotas may be lower than affinity. - -The launcher defaults to one CPU math thread and one compiler worker per rank. -Changing `OMP_NUM_THREADS` and `MKL_NUM_THREADS` before launch affects both branches; -two math threads can be tested if the allocated CPU budget leaves room alongside -the loaders. Do not set them from the host CPU count. Preflight records the actual -PyTorch thread count, visible CPU affinity count and shared-memory capacity. Keep -the pretrained weight cache (`TORCH_HOME`) on persistent writable storage to avoid -repeated downloads. If file I/O remains dominant, stage only the small sample's -images on confirmed fast node-local storage for a separate, identically staged -comparison; moving the full dataset is unnecessary for a smoke test. - -### Preparation progress and interrupted runs - -The launcher prints the preflight and preparation log paths. `prepare.log` includes -timestamped sampling, taxonomy, path-checking, index-writing, hashing and model -construction messages, with periodic counts while scanning and checking paths. -CPU model construction can still be silent inside the pinned package's initializer. -JSON is written incrementally, and per-image metadata is released before building -starting models to reduce preparation's temporary memory requirements. +From the repository root: ```bash -output_dir=$(python3 -c 'import json; print(json.load(open("qualification.json"))["output"])') -tail -f "$output_dir/prepare.log" +bash dev/ucloud/launch.sh /work/qualification.json --stage plan +bash dev/ucloud/launch.sh /work/qualification.json --stage prepare && +bash dev/ucloud/launch.sh /work/qualification.json --stage train +# Keep failure evidence: summary can run even after an unsuccessful train stage. +bash dev/ucloud/launch.sh /work/qualification.json --stage summary ``` -`prepared.json` is the completion marker. Its absence can mean preparation is still -running; check the original launcher and worker processes before starting another -attempt. An existing output cannot be prepared again, and training now reports an -explicit incomplete-preparation error. Preserve an interrupted attempt and use a -new output path. Ctrl-C stops the worker process group and records `interrupted` -for an active training run; it exits with code 130 without a Python traceback. -Neither interrupted nor timed-out runs enter paired completed-run comparisons. - -`--only quant_eager_seed42` selects a planned run. Run `train` again to skip -completed, checksum-verified runs and continue pending ones. Failed/interrupted -runs are preserved and block reuse of their names: use a new output directory for -a repeated comparison. Do not mix partial/resumed timings into a complete-run row. -The timeout is per run (default 32 hours), not a node reservation. Set the UCloud -job duration for preparation plus all runs. Set `CUDA_VISIBLE_DEVICES` to the -allocated devices if needed; the launcher does not overwrite it. - -The launcher defaults to one CPU math thread and one compiler worker per rank. -Set `TORCH_HOME` and, if -needed, `TMPDIR` to sufficiently large writable volumes before launching. Compiler -caches are isolated per run/rank so first-use compilation is charged to that run; -filesystem page cache and hardware temperature are not reset between runs. -Compiler caches default to unique directories in `/tmp`, recorded per rank in the -run directory. Set `MT_COMPILER_CACHE_ROOT` to a larger writable directory if -needed; it must contain no whitespace because the C++ compiler toolchain can -misparse cache paths. Dataset and result paths may contain spaces. Even eager -model runs can compile existing augmentation kernels. Remove recorded cache -directories after the experiment if their disk space is needed. -Training output is redirected to the printed `console.log` path; use `tail -f` -from a second SSH session to follow it. +Review `parquet`, new `output`, environment paths/commits, GPU count, batch and +worker settings in the resolved JSON. The launcher runs installed packages outside +the checkout. Use one launcher per node: multiple visible GPUs use one torchrun +process per GPU; a single device uses ordinary training. Do not wrap the launcher +in another multi-task launch. Native INT8 variants reject DDP. + +Metadata must be beside `images//`. Preparation preserves +existing `set` values: 0=test, 1=validation, other numeric sets=train; the current +parser excludes nonnumeric sets. It freezes taxonomy/index and checks selected +paths, duplicates and labels. It does not hash/decode all image bytes; keep inputs +immutable. Test records are not used for training or validation. + +**The shipped qualification is an infrastructure smoke.** It uses one visible +CUDA device (including one MIG slice), batch 32, two loader workers, one epoch and +seed 42, with both eager controls. Reservoir sampling preserves splits and selects +2,048 train / 512 validation / 128 test records. Only these paths are inspected; +taxonomy is sample-derived. Missing training species in validation and the smaller +head make its quality/throughput unrepresentative of full-data training. Reports +identify `scope=qualification_subset`. + +Preparation and both runs share a 1,800-second deadline from `prepare`; pauses +between commands count. Per-worker limits and up to 15 seconds termination cleanup +are separate. Installation and the UCloud reservation lifetime are outside that +budget. One full-data epoch is not a substitute for this small qualification. + +## Profiles and comparison controls + +Choose a profile for a decision, copy it to a new node config, and review its +pins/paths before preparation. Use `MT_TEMPLATE` when its packages differ from the +installed environments. Do not treat the following as a mandatory experiment sequence. + +| Profile | Scope | +| --- | --- | +| [qualification.json](qualification.json) | Small eager-pair environment and lifecycle smoke | +| [comparison.json](comparison.json) | Full-data, three-seed eager/prefetch/compilation comparison | +| [experiment.json](experiment.json) | Four-epoch 4,096/1,024/128 subset; eager and prefetch | +| [compilation.json](compilation.json) | Same subset, model compilation | +| [optimizer-compilation.json](optimizer-compilation.json) | Same subset, optimizer compilation alone | +| [combined-int8.json](combined-int8.json) | Staged model compile → optimizer compile → prefetch → native INT8, one GPU | +| [figures.json](figures.json) | Two epochs with required diagnostics; select `quant_compile_model_seed42` | +| [ddp.json](ddp.json) | Separate full-head DDP and production handoff | + +The comparison keeps EfficientNetV2-S at 384 pixels, normalized hierarchical +species/genus/family heads, equal loss weights, hidden layer/dropout, MuonAuxAdamW, +class weighting, regularization and smoothing fixed. The pinned master already has +those features; they are not quantization innovations. Master creates one initial +pretrained-backbone/random-head checkpoint per seed for both packages. Starting +tensors match; implementation RNG trajectories need not. + +`global_batch_size` is **global**: 64 becomes 32/16/8 per rank on 2/4/8 GPUs. +Learning rate is not automatically scaled. GPU count changes sampling/SyncBatchNorm +and kernels, so compare paired variants within an allocation. Run order is +reproducibly shuffled per seed; no checkpoint averaging or resumed timing is used. + +The main controls are `master_eager` and `quant_eager`. Optional variants add +`quant_prefetch`, `quant_compile_model`, `quant_compile_optimizer`, `quant_combined`, +model/optimizer graphs, or single-GPU `quant_int8`. In the combined profile, +`quant_compile_both` adds optimizer compilation, `quant_float_combined` adds prefetch, +and `quant_int8_combined` adds native INT8. “Float” retains FP16 AMP over ordinary +floating parameters. INT8 covers eligible Linear modules, not the whole backbone; +inspect its coverage report. No automatic fallback hides failed variants. + +Templates disable EMA and full-dataset RAM caching. Diagnostic subset profiles may +disable figures; that makes their timings incomparable with figures-enabled runs. +Preserve full diagnostics and W&B when qualifying production. Feature/quality +ablations belong in the [separate protocol](../../docs/training-feature-validation.md). + +## Resources, progress and recovery + +Use the allocation's CPU/RAM limits, not host-wide `nproc`/`free` totals. Inspect +`nvidia-smi` for actual GPU/MIG topology. Read concurrency, DataLoader processes, +math threads and compiler workers consume different resources. The launcher defaults +to one CPU math thread and compiler worker per rank; explicit OMP/MKL settings +affect both branches. Size decode workers to the allocation; latency-bound shared +storage can warrant far more outstanding reads, as the production post-mortem +demonstrates. Avoid replicating a full decoded dataset per DDP rank. + +Keep caches on sufficiently large writable storage. Compiler caches are isolated +per run/rank and their paths are recorded; `MT_COMPILER_CACHE_ROOT` must contain +**no whitespace** because of compiler tooling. Dataset/result paths may contain +spaces. Cold compilation counts toward each run; shared filesystem caches and +device temperature are not reset. + +The launcher prints `prepare.log` and run `console.log` locations. Preparation logs +sampling, taxonomy, checking/hashing and model construction; CPU initialization may +still be silent. `prepared.json` is the completion marker. If absent, inspect live +processes/logs before restarting. Preparation requires a fresh output directory; +preserve incomplete attempts rather than deleting evidence. + +Run `train` again to skip completed, checksum-verified runs and continue pending +ones. `--only quant_eager_seed42` selects one planned run. Failed/interrupted names +cannot be reused: use a new comparison output. Ctrl-C terminates the process group +and records interruption; timeout stops the controller. Do not reset deadlines or +mix partial/resumed timing into complete-run rows. Summary remains available. + +With `require_finite_losses: true`, missing/malformed/nonfinite epoch loss rows +produce `invalid_metrics` even after exit zero. Logs/checkpoints/timings remain, +but automatic successful-pair reports exclude the run. A saved-loss audit does not +prove every intermediate tensor was finite. A missing valid master control can +leave `paired.json` empty while direct quant comparisons remain in the CSV. ## Results and interpretation -`comparison.csv` contains wall time, total training-phase time, first and later -epoch times, maximum per-rank allocated CUDA memory and best validation selection -metric. `paired.json` gives wall speedup and validation differences against the -same-seed master control. Retain each seed; three seeds support an initial paired -comparison, not a precise general performance claim. Compare acceleration rows -against `quant_eager` as well to isolate optional-feature effects. - -Each run retains `console.log`, `launch.json`, `result.json`, per-rank phase JSONL, -and `model/` with the trainer's configuration, summaries and `weights/best.pt` plus -training checkpoints. Wall time includes startup, loading, compilation, evaluation, -logging and saving; preparation is outside that measurement. Synchronized phase -timings include logger work. The harness disables the logger's per-step CUDA peak -reset so phase peaks cover all steps. These peaks exclude earlier model/optimizer -construction; use UCloud's resource report or `nvidia-smi` for whole-job/process -memory. CUDA allocator bytes are not total device memory or node RAM. - -The built-in selection metric is the trainer's leaf-level validation accuracy; -DDP's padded validation sampler can repeat a few examples. It is not a full -macro/per-class quality study. Test data is frozen but never used by this training -runner. Choose configurations using validation first, then perform a separate, -non-distributed held-out evaluation for per-level accuracy, rare-class recall, -probability quality and uncertainty. Preserve failed and slower configurations. - -## ONNX follow-up using these checkpoints - -After training, use the **quant environment** to export a selected floating-point -checkpoint (including a master-trained checkpoint). This keeps the deployment -toolchain fixed while comparing learned weights: - -```bash -/work/venvs/mt-quant/bin/python /work/comparison/export_followup.py /work/results/global-lepi-ddp quant_eager_seed42 -``` - -This exports the actual hierarchical evaluation forward, runs dynamic-batch parity, -and compares CPU ONNX Runtime with reloaded FP32 PyTorch on four real validation -images through the checkpoint preprocessor. It retains the complete ONNX bundle, -source checkpoint hash, preprocessing description, image hashes, and -`validation-example.npz`. The destination must be new. It does not rerun training -or access test images. - -A standalone environment with NumPy and ONNX Runtime can replay the saved inputs: - -```python -import json -import numpy as np -import onnxruntime as ort - -bundle = "/work/results/global-lepi-ddp/runs/quant_eager_seed42/onnx" -with open(f"{bundle}/manifest.json") as handle: - manifest = json.load(handle) -session = ort.InferenceSession(f"{bundle}/model.onnx", providers=["CPUExecutionProvider"]) -with np.load(f"{bundle}/validation-example.npz") as example: - outputs = session.run(None, {manifest["input"]["name"]: example["images"]}) - for i, output in enumerate(outputs): - np.testing.assert_allclose(output, example[f"output_{i}"], rtol=1e-4, atol=1e-5) -``` - -This establishes a small real-image export/inference parity check, not target-GPU -latency, dataset-wide quality or a standalone image decoder. Follow the -[ONNX guide](../../docs/onnx.md) and existing -[deployment benchmark workflow](../benchmarks/inference.md) for provider placement, -warmup/repeated timing, held-out inference and INT8 export. Native INT8 checkpoints -require their explicit CUDA-reference export path and are rejected by this FP32 -follow-up. Calibrate PTQ on training images only. - -## Local validation and limits - -The bounded qualification increment has 16 focused passing cases covering the -bootstrap's success/failure flow with a fake installer, reproducible split sampling, -CPU preparation/training/reload with real EfficientNetV2-S, artifact checks, -interruption records, and deadline termination of a real worker. The core harness -tests also passed against the pinned master source. The bootstrap's real locked -export and dependency-sync dry run resolved the Python 3.12 CUDA 13.0 environment; -a complete fresh GPU environment was not installed locally. - -Static checks passed. The repository-wide run completed its benchmark group, then -stalled in a spawned loader test in the sandbox; the remaining suite was rerun -outside the sandbox with one CPU math thread: 377 passed, 149 skipped, and the known -EMA expected failure. Skips include unavailable GPU/optional/slow coverage. Warnings -include upstream deprecations and missing optional dendrogram plotting dependencies. -There is no new B200/MIG runtime measurement for the bounded profile yet. - -Initial harness validation, before the bounded profile: - -The launch planner, input freezing, completed-run skipping, shell syntax, Ruff and -import contracts were checked. A small Parquet fixture ran through preparation, -one CPU training epoch and checkpoint reload with the real EfficientNetV2-S -hierarchical model on both the current quant code and pinned master source, -without downloading pretrained weights. The ONNX follow-up passed dynamic-batch -and four-image CPU Runtime parity using the resulting quant checkpoint. - -Focused harness, training-state, integration and ONNX checks passed: 108 tests -across the validation runs, 43 hardware/optional-dependency skips and the known EMA -expected failure. CPU DDP passed when rerun outside the sandbox's socket -restriction. The repository-wide suite was interrupted in an unrelated long-running -benchmark; it was not completed. No GPU was available locally. These checks do not -establish CUDA/DDP compilation, INT8 correctness or global_lepi convergence and -throughput on UCloud; run the qualification configuration there first. - -## Expanded single-GPU experiment and validation-loss diagnosis - -`experiment.json` increases the qualification to 4,096 train / 1,024 validation / -128 test images and four epochs. Existing split assignments remain intact; the -sample builds its own taxonomy, so this still does not measure full-head quality. -It keeps batch 32, two loader workers, 384 pixels, seed 42 and the same pinned -packages. The three variants are master eager, quant eager and quant prefetch. -Prefetch remains diagnostic after an observed first-epoch validation NaN; finite -training losses do not establish that validation is numerically sound. - -There are 128 training batches and 32 validation batches per epoch. Compare the -mean of epochs 2–4 (`later_epoch_mean_seconds`), and retain first-epoch and total -wall times separately. The expanded run measured about 31 seconds for the first -training epoch and 25.5 seconds for later epochs, but its first validation phase -(including figures) took 151 seconds and the run exceeded five minutes. -The template now sets `figures: false` for every variant, bypassing confusion, -class-distance and dendrogram figures (including species-name lookups). Scalar -validation metrics, losses, checkpoint selection and saving still run. Existing -configs default to figures enabled. This setting only changes the dedicated -harness worker; no package reinstall is required. Allow roughly 2–3 minutes per -variant based on those training times, with additional time possible for cold -image reads and startup. Whole-run and validation-phase timings are not directly -comparable to older runs with figures enabled. -Each worker has a 300-second limit; timeout terminates the experiment rather than -silently shortening its epochs. Process cleanup can take another 15 seconds. -The overall prepare/train budget is 1,800 seconds, including pauses between stages. -A fresh job is unnecessary; pull the harness update and use a new output directory. - -`require_finite_losses: true` audits all expected training and validation epoch -rows in `model/logs/summary.csv`. Missing, malformed or non-finite total/per-level -losses produce `status=invalid_metrics` and `loss_check=failed`, even with exit code -zero. `result.json` identifies the affected epoch and phase. Checkpoints and timing -artifacts remain available, but such runs are excluded from successful paired -comparisons. This is a recorded-loss check, not a claim that the optimizer failed, -nor a guarantee that every intermediate tensor was finite. Existing configs retain -their previous behavior unless the flag is enabled. - -First replay the affected checkpoint in four fresh processes. This uses the frozen -validation images, training class frequencies, smoothing and saved preprocessing. -FP16 means FP32 model parameters with FP16 autocast; FP32 disables autocast and -builds the criterion in FP32. No optimizer, augmentation or training runs. Each -case records parameter finiteness, per-batch input/output/loss finiteness and input -and label hashes under a new output directory. It never rewrites the old run. -Use the pinned quant interpreter, with the same thread settings as the launcher: - -```bash -cd /work/mini_trainer -git pull --ff-only -export OMP_NUM_THREADS=1 MKL_NUM_THREADS=1 -for precision in fp16 fp32; do - for loader in eager prefetch; do - replay_args=() - if [[ "$loader" == prefetch ]]; then replay_args+=(--prefetch); fi - timeout --kill-after=15s 300s /work/venvs/mt-quant/bin/python \ - dev/ucloud/replay_validation.py \ - /work/results/global-lepi-prefetch-1 quant_prefetch_seed42 \ - --precision "$precision" "${replay_args[@]}" \ - --output "/work/results/prefetch-replay-1-$precision-$loader" || break 2 - done -done -``` - -A completed diagnostic writes `result.json` even when it finds non-finite values; -inspect all four reports and `batches.jsonl`. Matching input/target hashes help -check that cases consumed identical batches. FP16-only failure points toward a -precision-dependent evaluation issue; prefetch-only failure warrants transfer-path -investigation. Neither outcome alone proves the root cause. Reloading clears -in-memory model caches, and per-batch checks synchronize CUDA, so a clean replay -cannot rule out a timing-sensitive failure in the original process. This is not a -speed benchmark. The original NaN occurred during evaluation, not recorded training -loss, and does not by itself demonstrate training divergence. - -Then generate the expanded config, preserving this job's dataset and environment -paths. It intentionally creates a fresh preparation and starting weights: - -```bash -python3 - <<'PY' -import json -from pathlib import Path -config = json.loads(Path('dev/ucloud/experiment.json').read_text()) -previous = json.loads(Path('/work/qualification-prefetch.json').read_text()) -for key in ('parquet', 'environments'): - config[key] = previous[key] -with Path('/work/qualification-expanded.json').open('x') as handle: - json.dump(config, handle, indent=2) - handle.write('\n') -PY -bash dev/ucloud/launch.sh /work/qualification-expanded.json --stage plan -bash dev/ucloud/launch.sh /work/qualification-expanded.json --stage prepare && \ - bash dev/ucloud/launch.sh /work/qualification-expanded.json --stage train -bash dev/ucloud/launch.sh /work/qualification-expanded.json --stage summary -cat /work/results/global-lepi-expanded-nofigures-1/comparison.csv -``` - -Run in tmux and retain all artifacts, including failed validation checks. A warm -first epoch is kept in the results, not discarded from model training; the later -three epochs provide the timing comparison. This is a larger exploratory test -with one paired seed, not a statistical quality comparison. Do not interpret -small accuracy or timing differences as established improvements. If the replay -finds non-finite values, keep prefetch results diagnostic while investigating them; -eager controls remain useful. Compiler variants are a subsequent experiment. - -## Model compilation comparison in the existing job - -Use `compilation.json` after the expanded eager/prefetch experiment. It keeps -4,096 training / 1,024 validation / 128 test images, four epochs, seed 42, -batch 32, two workers, 384 pixels, figures disabled and the same pinned venvs. -It replaces prefetch with `quant_compile_model` (model compilation only). -The deterministic run order is quant eager, master eager, then quant model -compilation, so both controls finish before a possible compilation timeout. -No dedicated NaN tracing or replay is required for this experiment. The existing -recorded-loss audit remains enabled; `invalid_metrics` retains timing evidence -but excludes that run from the automatic successful-pair report. - -Pull into the current job and run in tmux. The template uses the dataset and venv -paths from the existing job and a fresh output directory; no installation is -needed. If those paths differ, copy the JSON and edit it before preparation. -Do not reuse or modify an already prepared output directory. - -```bash -cd /work/mini_trainer -git pull --ff-only -bash dev/ucloud/launch.sh dev/ucloud/compilation.json --stage plan -bash dev/ucloud/launch.sh dev/ucloud/compilation.json --stage prepare && \ - bash dev/ucloud/launch.sh dev/ucloud/compilation.json --stage train -# Run summary even if training reports a timeout or invalid metrics. -bash dev/ucloud/launch.sh dev/ucloud/compilation.json --stage summary -cat /work/results/global-lepi-compile-model-1/comparison.csv -cat /work/results/global-lepi-compile-model-1/paired.json -``` - -Each worker has a 300-second limit, with up to 15 seconds for termination cleanup. -The 1,800-second overall budget includes preparation and gaps between commands. -Based on the existing eager runs, allow about five minutes for the two controls -combined, up to five minutes for compilation/training, plus preparation. This is -an estimate, not a promise that the compiled variant will finish. - -The harness creates fresh compiler cache directories for each run. No separate -compiled warmup is performed: cold compilation cost belongs in `wall_seconds` -and the first epoch. Compare those with `later_epoch_mean_seconds` (epochs 2–4), -`train_seconds`, and `peak_allocated_bytes`. Later epochs may still include -recompilation; retain the console log when interpreting them. Compare primarily -against quant eager to isolate the effect of compilation, with master eager as -the branch control. A cold-start timeout establishes that this configuration -does not fit the short-job budget; it does not rule out longer-run benefits. -Small single-seed timing differences are exploratory, not established speedups. - -## Optimizer compilation comparison in the existing job - -`optimizer-compilation.json` tests optimizer compilation alone. It keeps the model -eager, prefetch disabled and optimizer CUDA graphs disabled. The workload remains -4,096 train / 1,024 validation / 128 test images, four epochs, seed 42, batch 32, -two loader workers and 384 pixels on one GPU. Figures are disabled and the -recorded-loss audit stays enabled. Installed master and quant revisions are unchanged. - -The seeded order is quant eager, master eager, then `quant_compile_optimizer`. -Both controls therefore run before a possible compiler timeout. Each worker is -limited to 300 seconds (plus up to 15 seconds cleanup), and the overall budget is -1,800 seconds including preparation and pauses between stages. Allow roughly -10–12 minutes including preparation, based on the previous eager timings and -the compiled worker's limit; this does not guarantee compilation will finish. - -Run these commands in tmux in the current allocated job. No venv rebuild is -needed. The new output directory preserves all earlier experiment artifacts. +Retain the config/prepared inputs plus `comparison.csv`, `paired.json` and each +run's launch/result/console logs, per-rank phase JSONL and trainer `model/` outputs. +Comparison rows expose wall, training, first/later-epoch time, allocated memory and +validation selection metric. Master pairing is per seed; compare acceleration +against `quant_eager` too. Few seeds and short runs do not establish convergence. -```bash -cd /work/mini_trainer -git pull --ff-only -bash dev/ucloud/launch.sh dev/ucloud/optimizer-compilation.json --stage plan -bash dev/ucloud/launch.sh dev/ucloud/optimizer-compilation.json --stage prepare && \ - bash dev/ucloud/launch.sh dev/ucloud/optimizer-compilation.json --stage train -# Run summary even after a timeout or an invalid-metrics report. -bash dev/ucloud/launch.sh dev/ucloud/optimizer-compilation.json --stage summary -cat /work/results/global-lepi-compile-optimizer-1/comparison.csv -cat /work/results/global-lepi-compile-optimizer-1/paired.json -``` +Wall time includes startup, IO, compilation, evaluation, logging and saving but +excludes preparation. Phase peaks exclude earlier model/optimizer construction; +allocator memory is not whole-process/device/RAM usage. Retain cold setup and +later epochs separately, including recompilation warnings and slower/failed rows. +The selection metric is leaf validation accuracy; padded DDP validation can repeat +samples. Full macro/per-class/parent quality needs separate held-out evaluation. -Monitor the compiled run from a second terminal: +## Targeted follow-ups -```bash -tail -F /work/results/global-lepi-compile-optimizer-1/runs/quant_compile_optimizer_seed42/console.log -``` - -Compare the compiled optimizer primarily against quant eager within this run: -`wall_seconds`, `first_epoch_seconds`, `later_epoch_mean_seconds` and -`peak_allocated_bytes`. Compiler caches start fresh; no unmeasured compilation -warmup is added. Later epochs can still incur recompilation, so keep warnings -with the timing results. The existing optimizer, learning-rate schedule and AMP -settings remain in effect. This experiment does not combine model compilation -with optimizer compilation; it measures their effects separately first. - -If master has `invalid_metrics`, `paired.json` will be empty because that report -requires a completed master baseline. The CSV still contains the direct quant -comparison. Preserve the loss-audit flag alongside exploratory timing conclusions; -no dedicated numerical tracing is a prerequisite for this experiment. - -## Combined compilation, prefetch and native INT8 - -`combined-int8.json` compares the following runs in this seeded execution order: - -| Variant | Installed branch | Native INT8 | Model compile | Optimizer compile | Prefetch | -| --- | --- | --- | --- | --- | --- | -| `quant_eager` | quant | No | No | No | No | -| `master_eager` | master | No | No | No | No | -| `quant_compile_model` | quant | No | Yes | No | No | -| `quant_compile_both` | quant | No | Yes | Yes | No | -| `quant_float_combined` | quant | No | Yes | Yes | Yes | -| `quant_int8_combined` | quant | Yes | Yes | Yes | Yes | - -Both combined variants use the same pinned quant package. Here “float” means -ordinary FP32 parameters with FP16 AMP, not a switch to FP32-only training. -Native INT8 applies to eligible linear modules; convolutions, normalization, -biases and other unsupported operations remain floating point. Check the -`INT8 training coverage:` entry in the INT8 console log for the actual coverage. -This is not an entirely INT8 EfficientNet. Optimizer CUDA graphs remain disabled. -The older `quant_combined` name remains a floating-point variant for compatibility. - -The four-epoch, 4,096/1,024/128-image workload, batch 32, two workers, 384 pixels, -seed 42, figures disabled and loss audit enabled are unchanged. Each worker has -a 300-second timeout (plus up to 15 seconds cleanup). The entire experiment has -a 1,800-second budget including preparation and gaps between stages. Six workers -all reaching their limits would exceed that budget, so the controller may stop -before the last run in that case. Based on previous timings, allow approximately -20–25 minutes; INT8 and combined compilation are unverified on this allocation. -Fresh compiler caches keep compilation cost in each run. No numerical tracing -or extra warmup is required. - -Pull into the current job and run in tmux; existing venvs already include the -quantization extra. Preparation checks the dependency and single-GPU restriction -for any variant requesting INT8, including the new combined variant. +**Validation-loss replay:** `replay_validation.py` evaluates a saved run without +training, using its frozen validation inputs, frequencies and preprocessing. +Compare FP16/FP32 and ordinary/prefetched loading only when that changes a diagnosis: ```bash -cd /work/mini_trainer -git pull --ff-only -bash dev/ucloud/launch.sh dev/ucloud/combined-int8.json --stage plan -bash dev/ucloud/launch.sh dev/ucloud/combined-int8.json --stage prepare && \ - bash dev/ucloud/launch.sh dev/ucloud/combined-int8.json --stage train -# Run even if training reports a failure, timeout or invalid metrics. -bash dev/ucloud/launch.sh dev/ucloud/combined-int8.json --stage summary -cat /work/results/global-lepi-combined-int8-1/comparison.csv -cat /work/results/global-lepi-combined-int8-1/paired.json +OMP_NUM_THREADS=1 MKL_NUM_THREADS=1 /work/venvs/mt-quant/bin/python \ + dev/ucloud/replay_validation.py /work/results/YOUR_COMPARISON quant_prefetch_seed42 \ + --precision fp32 --output /work/results/YOUR_NEW_REPLAY ``` -The controller continues after ordinary nonzero worker exits or invalid metrics, -but stops on a timeout. Preserve the logs. If the floating combined worker times -out and the overall budget has time left, launch just the not-yet-started INT8 run: +Inspect `result.json` and `batches.jsonl` input/label hashes and finiteness. +Reloaded caches and synchronized diagnostics mean a clean replay cannot rule out +the original timing-sensitive failure. This is not a throughput benchmark. -```bash -bash dev/ucloud/launch.sh dev/ucloud/combined-int8.json --stage train \ - --only quant_int8_combined_seed42 -bash dev/ucloud/launch.sh dev/ucloud/combined-int8.json --stage summary -``` - -Do not rerun an existing failed directory or reset the experiment deadline. -Compare model-only against both compilations to test their interaction, then -both compilations against float combined to test prefetch, then float combined -against INT8 combined to test quantized training. Use total wall time, first-epoch -time, later-epoch mean and peak allocated memory, retaining loss-audit status. -The automatic paired report uses master; the CSV supports these direct quant -comparisons even when master is excluded by its loss audit. One seed does not -establish quality equivalence or a small performance improvement. - -## Figures-enabled qualification - -`figures.json` exercises the simplified dendrogram renderer, compact SVG export, -and bounded whole-matrix confusion reporting for two -epochs on the existing 4,096/1,024/128-image subset. Use only -`quant_compile_model_seed42`: floating-point training with model compilation, -without optimizer compilation or prefetch. The eager variants remain in the -configuration to satisfy harness validation; they are not selected below. -The worker retains its 300-second timeout and the experiment its 1,800-second -budget. Cold compilation and taxonomy lookups are included; completion within -five minutes needs confirmation on the allocated job. - -This fix changes the installed package, so pull the harness and explicitly -upgrade the quant venv to the code revision pinned in this config. Existing -benchmark configs retain their older pins and will need a matching environment -if reused. Run in tmux: +**Floating ONNX:** use the quant environment to hold the export toolchain fixed, +even when exporting master-trained weights: ```bash -cd /work/mini_trainer -git pull --ff-only -FIGURES_SHA=$(python3 -c 'import json; print(json.load(open("dev/ucloud/figures.json"))["environments"]["quant"]["commit"])') -uv pip install --python /work/venvs/mt-quant/bin/python --no-deps --link-mode=copy \ - "mini_trainer @ git+https://github.com/asgersvenning/mini_trainer.git@$FIGURES_SHA" -uv pip check --python /work/venvs/mt-quant/bin/python -bash dev/ucloud/launch.sh dev/ucloud/figures.json --stage plan -bash dev/ucloud/launch.sh dev/ucloud/figures.json --stage prepare && \ - bash dev/ucloud/launch.sh dev/ucloud/figures.json --stage train \ - --only quant_compile_model_seed42 -# Summarize even if training reports a timeout or invalid metrics. -bash dev/ucloud/launch.sh dev/ucloud/figures.json --stage summary -cat /work/results/global-lepi-figures-3/comparison.csv +/work/venvs/mt-quant/bin/python dev/ucloud/export_followup.py \ + /work/results/YOUR_COMPARISON quant_eager_seed42 ``` -Inspect the console log's rendering/export timings and the saved figures under -`/work/results/global-lepi-figures-3/runs/quant_compile_model_seed42/model/logs/figures/`. -Both `epoch-0001` and `epoch-0002` should contain readable dendrogram SVGs, -captioned confusion overview PNGs and class-distance PNGs. The per-level -`Confusion_matrix_lvlL/` and `Soft_confusion_matrix_lvlL/` subdirectories retain -full-resolution PNGs, numerical data, class indices and color scales. Dashboard -overviews cover every class in the original order. See -[confusion reporting details and measurements](../benchmarks/reporting/confusion.md). -Compare first and second epoch reporting costs to check label-cache reuse. `paired.json` will be empty because no master run was selected; this is a -figure qualification, not a new branch comparison. Preserve any failed output -and choose a new output path for a retry. - -See [renderer measurements and limitations](../benchmarks/reporting/dendrogram.md). - -## Scaling the selected configuration +The new output contains source/input hashes, preprocessing, a complete graph plus +external data, dynamic-batch checks and `validation-example.npz` from four real +validation images. This establishes bounded FP32 CPU parity, not dataset quality +or target-GPU performance. Native INT8 checkpoints require the separate explicit +CUDA-reference export path. See [ONNX](../../docs/onnx.md) and +[inference benchmarks](../benchmarks/inference.md); calibrate PTQ on training only. -For four full GPUs with figures, W&B, a bounded batch sweep and checkpoint -continuation, use [the DDP qualification and production handoff](ddp.md). -Production training uses `mt_htrain` under `torchrun`; the Python API harness -remains a qualification tool. - -For the post-training expert benchmark, start with the -[bounded RAM-staging inference trial](expert-trial.md). It generates its minimal -configuration and runs the standard prediction CLI without rebuilding an index. +**Production inference:** use the normal prediction CLI after +[DDP qualification](ddp.md). The completed September campaign's pinned-overlay +staging helpers are retired; their +[historical source](https://github.com/asgersvenning/mini_trainer/tree/852bf712e85b8d1a6b9c9c6d31b3b5d807904303/dev/ucloud) +and [lessons](../../docs/training-workflow-postmortem.md) remain available. +For current MAMBO comparisons use [the release runbook](../releases/mambo_v3/ucloud-release.md). ## Calibrate filesystem read concurrency -`calibrate_io.py` is a standalone Python file; copying that one file is sufficient. -It uses standard-library threads and subprocesses, with Pillow needed only for -`--mode decode`. It does not import mini_trainer or alter its environment. - -```bash -/work/venvs/mt-quant/bin/python dev/ucloud/calibrate_io.py \ - /work/flemming_helsing/restructured/valid/referenced \ - --mode stage --destination /dev/shm --output /work/expert-io-calibration.json -``` - -The default sweep tests 1–1,024 concurrent reads with 30-second I/O measurement limits, -then retests the three strongest candidates twice in shuffled order. It recommends -the smallest concurrency within 5% of the best median confirmation throughput. -Every thread is initialized before measurement starts. Process/thread startup has -a separate 30-second limit and is recorded independently; the overall budget is -600 seconds. blocked filesystem metadata calls may -outlast the budget. Each trial consumes only paths actually submitted to its reader pool; untouched -paths remain available after a timeout. Submitted selections are disjoint and -shuffled. Shared cache state remains unknown. Run away from other heavy read jobs -when selecting a baseline. Existing reports are preserved and a numeric suffix is -chosen automatically for subsequent runs. - -`--mode read` (the default) measures concurrent encoded-byte reads without retaining -a second copy. `--mode stage --destination PATH` also measures writes to the intended -staging filesystem; its own temporary copies are removed between trials. -`--mode decode --resize 384` includes RGB decoding and optional CPU resize, for a -loader-oriented measurement. The resulting thread count is for concurrent I/O or -read/decode tasks, **not** a recommendation to create that many DataLoader processes. -This file calibrates concurrency; it does not install read-ahead into training. - -`--workers`, `--files-per-trial`, `--trial-seconds`, `--startup-seconds`, `--budget-seconds`, and -`--confirmation-rounds` are adjustable. Each trial selects at most 2,048 files and -16 GiB of encoded data by default. Selection shrinks automatically to fit the byte -cap and staging destination; actual and requested concurrency are both recorded -when fewer files fit. Small trials (including ten-file trials) run normally, and -completed reads are ranked without an arbitrary 32-image minimum. Linux child RSS -is monitored against a 4 GiB stop threshold. Failed settings are excluded. The JSON report contains per-trial -throughput, latency, errors, sampled paths and the recommendation. If samples or -time are exhausted, inspect the confirmation coverage before treating the result -as repeatable. Very fast RAM trials benefit from increasing `--files-per-trial`. - -Show an existing report without printing its sample manifest: +`calibrate_io.py` is a standalone standard-library helper (Pillow only for decode). +It measures concurrency; it does not install read-ahead into the trainer. ```bash -/work/venvs/mt-quant/bin/python dev/ucloud/calibrate_io.py \ - --summary /work/io-calibration.json +python dev/ucloud/calibrate_io.py /work/YOUR_IMAGES \ + --mode stage --destination /dev/shm --output /work/io-calibration.json +python dev/ucloud/calibrate_io.py --summary /work/io-calibration.json ``` -Each run also writes a compact `.summary.txt` beside its JSON. Calibration failures -are recorded in the report and a separate `.error.log`, including failures to -terminate a blocked I/O subprocess. Completed partial trials remain usable; an -unusable confirmation does not erase a valid sweep estimate (marked provisional). -A setting that fails with an error or memory-limit violation during confirmation -is excluded from that fallback. An uninterruptible kernel I/O wait can delay process -termination; the calibrator stops instead of accumulating competing readers. +Modes: `read` discards encoded reads, `stage` also measures destination writes and +removes its temporary copies, `decode --resize 384` includes RGB preprocessing. +Defaults sweep 1–1,024 readers, then confirm the three strongest settings twice; +recommendation is the smallest within 5% of the best median. This is an IO-reader +count, **not a DataLoader process count**. + +Startup and IO each have a 30-second limit; total budget is 600 seconds. Trials +default to 2,048 files / 16 GiB encoded data and a 4 GiB child-RSS stop limit. +Byte/destination caps shrink selection; reports retain requested/actual concurrency. +Submitted paths are disjoint and shuffled, but shared-cache state is unknown. +Use `--help` for overrides; increase sample size when RAM trials are too short. + +Inspect JSON, adjacent `.summary.txt` and failure `.error.log`. Completed partial +trials can inform a provisional sweep result; confirmation errors/memory failures +exclude a setting. Uninterruptible kernel IO may delay termination beyond budgets; +the calibrator stops instead of accumulating competing readers. Existing reports +receive numeric suffixes. Run away from competing heavy scans when selecting a +baseline and report both first-pass and repeated-read conditions. + +## Validation boundary + +Offline tests cover planning, frozen inputs/splits, real CPU prepare/train/reload, +loss audits, worker termination and staged IO. See `tests/benchmarks/test_ucloud_*` +and `test_io_calibration.py`. They do not qualify CUDA/DDP compilation, INT8 quality +or full-data throughput. Historical per-edit test counts/ETAs are not current +status; retained campaign evidence is summarized in the linked post-mortem. diff --git a/dev/ucloud/calibrate_io.py b/dev/ucloud/calibrate_io.py index 1ad7c96..3c6bdb7 100644 --- a/dev/ucloud/calibrate_io.py +++ b/dev/ucloud/calibrate_io.py @@ -27,6 +27,8 @@ import time import traceback from concurrent.futures import FIRST_COMPLETED, ThreadPoolExecutor, wait +from contextlib import nullcontext +from itertools import islice from pathlib import Path EXTENSIONS = {".jpg", ".jpeg", ".png", ".webp", ".bmp", ".tif", ".tiff"} @@ -92,16 +94,14 @@ def operation(item): size = os.stat(source).st_size else: size = 0 - target = open(Path(job["destination"]) / str(index), "xb") if job["mode"] == "stage" else None - try: - with open(source, "rb") as stream: - while chunk := stream.read(1024 * 1024): - if target is not None: - target.write(chunk) - size += len(chunk) - finally: - if target is not None: - target.close() + with ( + open(Path(job["destination"]) / str(index), "xb") if job["mode"] == "stage" else nullcontext() as target, + open(source, "rb") as stream, + ): + while chunk := stream.read(1024 * 1024): + if target is not None: + target.write(chunk) + size += len(chunk) return size, time.monotonic() - began rows, errors = [], [] @@ -140,7 +140,7 @@ def submit(item): journal.write(b"x") return pool.submit(operation, item) - pending = {submit(item) for item in list_next(items, job["workers"])} + pending = {submit(item) for item in islice(items, job["workers"])} while pending: done, pending = wait(pending, timeout=0.25, return_when=FIRST_COMPLETED) for future in done: @@ -161,16 +161,6 @@ def submit(item): snapshot(finished=True) -def list_next(iterator, count): - result = [] - for _ in range(count): - value = next(iterator, None) - if value is None: - break - result.append(value) - return result - - def stop(proc): """Do not launch another trial while an uninterruptible reader survives.""" try: diff --git a/dev/ucloud/compare.py b/dev/ucloud/compare.py index 258bfc6..2d8c5ca 100644 --- a/dev/ucloud/compare.py +++ b/dev/ucloud/compare.py @@ -136,6 +136,19 @@ def plan(config): return runs +def verified_preparation(config, root): + """Verify prepared artifacts, the current harness and source Parquet.""" + manifest = json.loads((root / "prepared.json").read_text()) + for name, expected in manifest.items(): + if digest(root / name) != expected: + raise ValueError(f"Prepared artifact changed: {name}") + if name.endswith(".py") and digest(HERE / name) != expected: + raise ValueError(f"Harness changed after preparation: {name}") + if digest(config["parquet"]) != json.loads((root / "dataset.json").read_text())["parquet_sha256"]: + raise ValueError("Source Parquet changed") + return manifest + + def reuse_preparation(config, output): """Copy verified model/data artifacts; keep the new trial's budget and plan.""" source = Path(config["reuse_preparation"]) @@ -152,14 +165,7 @@ def reuse_preparation(config, output): ): if config.get(key) != original.get(key): raise ValueError(f"Cannot reuse preparation with different {key}") - manifest = json.loads((source / "prepared.json").read_text()) - for name, expected in manifest.items(): - if digest(source / name) != expected: - raise ValueError(f"Prepared artifact changed: {name}") - if name.endswith(".py") and digest(HERE / name) != expected: - raise ValueError(f"Harness changed after preparation: {name}") - if digest(config["parquet"]) != json.loads((source / "dataset.json").read_text())["parquet_sha256"]: - raise ValueError("Source Parquet changed") + manifest = verified_preparation(config, source) for name in manifest: if not name.endswith(".py") and name != "budget.json": shutil.copyfile(source / name, output / name) @@ -431,13 +437,7 @@ def run_stage(config, args, deadline=None): raise ValueError(f"Preparation is incomplete: {output}. Check the active process and prepare.log before starting a new attempt") if json.loads(config_path.read_text()) != config: raise ValueError("Configuration differs from the frozen preparation; use a new output directory") - for name, sha in json.loads((output / "prepared.json").read_text()).items(): - if digest(output / name) != sha: - raise ValueError(f"Prepared artifact changed: {name}") - if name.endswith(".py") and digest(HERE / name) != sha: - raise ValueError(f"Harness changed after preparation: {name}") - if digest(config["parquet"]) != json.loads((output / "dataset.json").read_text())["parquet_sha256"]: - raise ValueError("Source Parquet changed") + verified_preparation(config, output) if config.get("checkpoint"): source = json.loads((output / "resume-source.json").read_text()) if digest(config["checkpoint"]) != source["sha256"]: diff --git a/dev/ucloud/ddp.md b/dev/ucloud/ddp.md index 0eda954..5a6c73d 100644 --- a/dev/ucloud/ddp.md +++ b/dev/ucloud/ddp.md @@ -1,67 +1,60 @@ # Four-GPU qualification and production handoff -Use one manually allocated UCloud node with **four full B200 GPUs**, the actual -Parquet and image storage, and internet access. `ddp.json` rejects devices below -140 GiB each, so this is not a continuation on the fractional-GPU job. +This procedure uses the September campaign's pinned packages and four full B200s. +For measured results and next-run lessons see the +[training post-mortem](../../docs/training-workflow-postmortem.md). +Select new package pins explicitly for a new campaign; qualification on this +profile does not establish other GPU topologies or full-dataset storage throughput. -The chosen configuration is floating-point training on `quant`: FP16 AMP, model -compilation, figures, W&B, loss auditing and checkpoints. Optimizer compilation, -explicit CUDA prefetch, INT8 and EMA remain off. Qualification alone uses the -Python API. Production will use `mt_htrain` under `torchrun`. +## Setup -This campaign qualifies four ranks. It does not establish eight-rank scaling or -full-dataset I/O throughput. If eight GPUs become available later, qualify that -allocation separately. At the same per-GPU batch, four GPUs halve the global batch; -review the production batch and learning-rate schedule explicitly before training. - -## Setup and authentication - -Clone the repository on branch `quant` into `/work/mini_trainer` (or pull it there). -Use the same checkout throughout the campaign; preparation hashes the harness. -With `uv`, `git`, Python and a C++ compiler available: +Follow [UCloud setup](README.md#fresh-job-setup) to install uv and clone the reviewed +harness into the manually allocated node. Keep the checkout unchanged after +preparation hashes it. The node needs mounted images/Parquet, internet or prepared +caches, a C++ compiler, and four GPUs with at least 140 GiB each (`ddp.json` rejects +smaller devices). Launch one controller, not a second multi-task wrapper. ```bash cd /work/mini_trainer -git pull --ff-only MT_TEMPLATE=dev/ucloud/ddp.json MT_CONFIG=/work/ddp-b32.json \ bash dev/ucloud/setup.sh \ /work/global_lepi/0032836-250426092105405_processing_metadata_postprocessed_quality_filtered.parquet -# Authenticate in the foreground before redirected workers start. +# Authenticate before redirected workers start; WANDB_ENTITY optionally selects a team. /work/venvs/mt-quant/bin/wandb login -# Optional: WANDB_ENTITY selects a team; otherwise use the authenticated default. export WANDB_PROJECT=mini-trainer-ddp nvidia-smi -L ``` -Authentication uses the existing W&B SDK, without a new login mechanism or -credentials in Git. Each trial uses one shared W&B run with rank labels and a -unique ID. Only rank zero uploads figures and controls the shared finish state. -See [W&B distributed logging](https://docs.wandb.ai/models/track/log/distributed-training). -The installed quant environment contains the pinned package and locked dependencies. +The profile enables FP16 AMP, model compilation, figures, W&B, finite-loss auditing +and checkpoints. Optimizer compilation, explicit CUDA prefetch, INT8 and EMA are +off. Each trial has one shared W&B run with rank labels; rank zero uploads figures +and finishes the run. Qualification uses the Python API; production uses `mt_htrain`. + +## Baseline and resource selection -## Baseline and batch sweep +The [profile](ddp.json) samples 32,768 train / 4,096 validation / 128 test records +from their **existing splits**, with the **full source taxonomy** and fixed class +order. Test rows are reserved for later evaluation. This exercises full-head +training and diagnostics without scanning every image; short-run accuracy is not +a production selection criterion. -Preparation samples 32,768 training, 4,096 validation and 128 test images from the -**existing splits**, but builds the head from the **full source taxonomy**. It -preserves class order across trials. The subset is half the eight-GPU proposal, -keeping 256 training steps and 32 validation steps per rank at batch 32. -This tests production head/figure dimensions -without training on all six million rows. Read `prepare.log` for actual class -counts. The test split is reserved for later evaluation, not batch selection. +| Control | Baseline / rule | +| --- | --- | +| Batch | 32 per GPU, 128 global; `scaling.py --batch` always means per GPU | +| Loader workers | 4 per rank; select using allocated CPU/RAM and observed loading latency | +| Epochs | 3 initially; derived trials plan at least 100 training steps after the first epoch | +| Shared deadline | 1,800 seconds from preparation, including operator gaps and derived trials | +| Child limits | Preparation 900 seconds; training 600 seconds; termination may add cleanup time | -There is one **30-minute wall-clock budget** shared by baseline preparation and -all derived trials, including gaps between commands. Individual training workers -have a 600-second guard; initial preparation has a 900-second guard. Neither is -an expected duration. If the campaign expires, retain its results and review -before starting another qualification campaign in the same allocated job. -Figures and W&B stay enabled. Qualification deadlines stop child processes, not -the UCloud allocation. +These are limits, not ETAs or allocation extensions. Reserve time for restoration +and production; run only trials that change a decision. Derived trials reuse +verified preparation/starting weights and inherit the deadline. They need new +config/output paths; retain failed attempts instead of overwriting evidence. -Define this helper in the foreground terminal or tmux session: +In the foreground terminal or tmux session, define: ```bash -cd /work/mini_trainer run_trial() { local cfg="$1" root rc=0 root=$(python3 -c 'import json,sys; print(json.load(open(sys.argv[1]))["output"])' "$cfg") || return @@ -77,51 +70,59 @@ run_trial() { run_trial /work/ddp-b32.json ``` -The baseline is three epochs at 32 images per GPU (global batch 128), with four -loader workers per rank. Four GPUs are launched with `torchrun`, no Slurm. -Check all four ranks completed, losses passed, figures look correct in W&B, -and reserved GPU memory has headroom before increasing the batch: +Require four completed ranks, finite losses, correct W&B figures and memory +headroom. Then try a larger batch, using a fresh destination for each trial: ```bash python3 dev/ucloud/scaling.py trial /work/ddp-b32.json /work/ddp-b64.json \ --output /work/results/global-lepi-ddp-4gpu-b64-1 --batch 64 run_trial /work/ddp-b64.json +``` + +Continue to 128 or 256 per GPU when memory and time justify it. Select warm +aggregate images/s at acceptable memory use (roughly 20% headroom); stop at OOM, +unstable losses/memory or no meaningful throughput gain. Global batch changes the +training recipe; learning rate is not automatically scaled. -# Only after the 64/GPU result passes and has memory headroom: -python3 dev/ucloud/scaling.py trial /work/ddp-b32.json /work/ddp-b128.json \ - --output /work/results/global-lepi-ddp-4gpu-b128-1 --batch 128 -run_trial /work/ddp-b128.json +For a worker comparison, hold batch, sample and generated epoch horizon fixed. +Use a meaningful increase for the available resources: the production campaign +ultimately used 32 workers/rank, while storage probes favored much higher encoded +read concurrency. A DataLoader process and an outstanding file read are different +resources. A small cached subset cannot select production storage concurrency. + +```bash +BATCH=64 # selected per-GPU batch +WORKERS=8 # candidate per-GPU worker count +python3 dev/ucloud/scaling.py trial /work/ddp-b32.json /work/ddp-workers.json \ + --output /work/results/global-lepi-ddp-workers-1 --batch "$BATCH" --workers "$WORKERS" +run_trial /work/ddp-workers.json ``` -Derived trials reuse verified preparation and starting weights, and inherit the -original deadline. They do not scan/sample/build the taxonomy again. Do not edit -frozen configs or reuse a failed output directory. Stop increasing at an OOM, -failed loss check, unstable memory, or lack of throughput improvement. Consider -256/GPU only if 128/GPU still has substantial headroom and time remains. - -Select by **warm aggregate training images/second at an acceptable memory -footprint**, reserving roughly 20% GPU memory, rather than speed at fixed batch. -`scaling.py report` uses summed sample counts divided by the slowest rank's phase -time and excludes the first epoch, which includes cold compilation. It reports -peak reserved memory as a fraction of actual device capacity. W&B also records -`qualification/*` phase metrics; rank-level evidence remains in `phases-rank*.jsonl`. - -Loader wait measures host time obtaining batches, including worker startup, -loading and decoding; it is not a pure storage measurement and can overlap GPU -work. Compare it alongside throughput. If it is high across warm epochs, try -one matched trial with more loader workers instead of a broad matrix. The -repeated subset benefits from filesystem caches: these timings cannot certify -full-dataset distributed-I/O throughput for a 24-hour run. +### Interpret measurements + +- `scaling.py report` divides summed samples by the slowest rank's phase time, + excludes the first epoch (cold compilation), and reports warm-step sufficiency, + rank imbalance and peak reserved memory relative to device capacity. Failed or + incomplete runs are not qualified performance results. +- Trial generation can increase the epoch horizon: 256/GPU needs five epochs for + the warm-step target. This also changes the LR schedule; throughput trials are + not matched convergence comparisons. Restored trials keep their explicit horizon + and exclude their own first epoch from warm reporting. +- Loader wait includes worker startup, reading and decoding and can overlap GPU + work. `phases-rank*.jsonl` and `windows-rank*.jsonl` retain phase and 32-batch + windows, including partial final windows. Window-boundary CUDA synchronization + adds overhead; these are not pure storage timings. +- `components-rank*.jsonl` records host time for figures/checkpoints, including + logging costs. Figure time also appears inside validation time; do not add + overlapping measurements. Cached repeat epochs do not establish cold-file or + full-dataset throughput. ## Stability and checkpoint continuation -Reserve time for this gate instead of chasing every batch size. Set `BATCH` to -the selected **per-GPU** batch. Request a four-epoch scheduler horizon and preserve the generated horizon for -both the source and restored trial: +Use the selected `BATCH` and `WORKERS`. Preserve the **generated** scheduler horizon +for both source and restored trials; it may exceed the requested four epochs: ```bash -BATCH=64 # replace with the measured choice -WORKERS=4 # replace with the measured worker count python3 dev/ucloud/scaling.py trial /work/ddp-b32.json /work/ddp-stability.json \ --output /work/results/global-lepi-ddp-4gpu-stability-1 --batch "$BATCH" --workers "$WORKERS" --epochs 4 run_trial /work/ddp-stability.json @@ -134,181 +135,61 @@ python3 dev/ucloud/scaling.py trial /work/ddp-b32.json /work/ddp-restore.json \ run_trial /work/ddp-restore.json ``` -The restored run starts at epoch 2 (zero-based), trains the remaining epochs, -and uses a new output and W&B run. Each rank checks model, optimizer, scheduler -and scaler state against the source checkpoint **before any updates**. Require -four successful `restore-rank*.json` records, finite train/eval losses, stable -memory, and working figures/checkpoints after restoration. This tests state -restoration and continued execution, not bitwise reproduction of augmentation RNG. - -## Keep the allocation and hand off immediately - -Qualification and production run in the **same allocated UCloud job**. Do not -terminate/release the job, rebuild its environment, or wait for a new allocation -between them. The separate storage campaign below means a separate harness budget -and output directory, not another UCloud job. Do not enable the continuous-benchmark -provisioning/cleanup policy for this production allocation. - -Before qualification, prepare the production CLI configuration and verify its paths, -full-dataset splits, pinned environment, W&B authentication, output location and -learning-rate/epoch recipe. Leave only measured batch and worker choices to finalize. -Keep the selected environment and caches warm. Reserve qualification time **in -addition to** the intended production duration in the UCloud job lifetime, plus -checkpoint/finalization margin; verify remaining time before launch. If the job -lifetime is insufficient, resolve its extension or a shorter reviewed training -budget while qualification runs rather than releasing the allocation. - -After the required gates pass, record the selected batch/workers and qualification -report, finalize the pre-reviewed production configuration, and launch `mt_htrain` -under four-rank `torchrun` immediately in the existing terminal/tmux session. Do not -spend the allocation completing optional sweep points once the choice is supported. -The production configuration is still an explicit prerequisite, not generated or -validated by these qualification commands. - -## Production uses the public CLIs - -Do not launch the 24-hour run from this qualification harness. After qualification, -freeze a reviewed `production.yaml` for the full dataset, selected batch and -worker count, intended learning-rate schedule, complete taxonomy and preprocessing. -Record package/dependency pins, W&B run, split provenance and checkpoint hashes. -The final epoch count and learning-rate recipe need a separate production decision; -short qualification accuracy does not select them. - -The planned command interface is: +Restoration starts at zero-based epoch 2 with a new output/W&B run. Require four +successful `restore-rank*.json` records verifying model, optimizer, scheduler and +scaler **before updates**, then finite losses, stable memory and working figures +and checkpoints. This checks restoration and continued execution, not bitwise +reproduction of stochastic augmentation. Do not silently extend an expired +campaign budget to finish optional trials. -```bash -/work/venvs/mt-quant/bin/python -m torch.distributed.run \ - --standalone --nnodes=1 --nproc-per-node=4 --max-restarts=0 --no-python \ - /work/venvs/mt-quant/bin/mt_htrain --config /work/production.yaml --wandb --compile +## Separate broader storage pass -/work/venvs/mt-quant/bin/mt_hpredict --config /work/evaluation.yaml -uvx --from "mini_metrics @ git+https://github.com/asgersvenning/mini_metrics.git@$METRICS_SHA" \ - mm_metrics --files "$PREDICTIONS_CSV" --output-dir /work/production-metrics --output - -/work/venvs/mt-quant/bin/mt_export --weights "$BEST_PT" \ - --output /work/production-onnx --input-shape 3 384 384 \ - --preprocessing /work/deployment-preprocessing.json -``` - -These production/evaluation files and shell variables are **handoff placeholders**, -not runnable configs yet. `METRICS_SHA` must be a reviewed immutable commit. -Evaluation must use only the original held-out test split, with matching class -order and score semantics. Use the existing `mt_hpredict` CLI for this hierarchical -model; it also provides an explicit flat-head route. Consolidating inference into -one CLI is [deferred on the roadmap](../../docs/roadmap.md#5-mini_metrics-and-continuous-model-evaluation), -not a production prerequisite. Verify the deployment preprocessing and real-image -ONNX parity following [the export guide](../../docs/onnx.md). - -A later full `master` training comparison remains optional and separate. This -qualification deliberately selects and stress-tests one configuration. - -## Bounded resource-utilization decisions - -Run only the next informative trial; do not execute this as an unattended matrix. -Keep the initial 30-minute campaign and reserve time for checkpoint continuation. -A minimum campaign is baseline, one larger batch, one worker comparison, then -restoration. The time guards can expire before all gates finish; retain evidence -and review any additional campaign rather than silently extending its budget. - -Trial generation automatically raises the epoch count when needed to plan at least -100 training steps after the first epoch. At 256/GPU this subset requires five -rather than three epochs. `scaling.py report` exposes actual `warm_steps` and -`sufficient_warm_steps`; incomplete/failed runs are not performance-qualified merely -because their planned duration was sufficient. Changing the epoch horizon also -changes the learning-rate schedule, so these are throughput trials, not matched -convergence comparisons. - -After selecting a batch, compare workers while holding batch, subset and epoch -horizon fixed. Start with 8/GPU; try 16/GPU only if loading/throughput evidence -justifies it. A small timing difference is not enough to select a winner. - -```bash -BATCH=64 # replace with measured choice -python3 dev/ucloud/scaling.py trial /work/ddp-b32.json /work/ddp-w8.json \ - --output /work/results/global-lepi-ddp-4gpu-w8-1 --batch "$BATCH" --workers 8 -run_trial /work/ddp-w8.json - -# Optional, after reviewing w8: -python3 dev/ucloud/scaling.py trial /work/ddp-b32.json /work/ddp-w16.json \ - --output /work/results/global-lepi-ddp-4gpu-w16-1 --batch "$BATCH" --workers 16 -run_trial /work/ddp-w16.json -``` - -Use `--workers "$WORKERS"` for both stability and restoration trials once workers -are selected. Read the generated stability config's actual `epochs` and pass that -same value to the restore trial; automatic warm-step sizing may have increased it. -A restore run keeps its explicit horizon and excludes its own first epoch from warm -performance reporting because it starts a fresh compiled process. - -Reports retain per-rank phase records, training rank-time ratios, allocation peaks -and 32-batch timing windows (including a final partial window). Completed windows are also appended immediately -to `windows-rank*.jsonl` so a timeout retains them. Windows synchronize -CUDA at their boundaries, adding some overhead consistently across trials. They -measure rank-local elapsed time, not pure disk throughput. Figure and checkpoint -call durations are recorded separately in `components-rank*.jsonl`; figures are -also inside validation phase time, so do not add these overlapping totals. These -component measurements are host elapsed time and include backend logging costs. - -### Separate broader storage pass - -This is explicitly launched with its own budget. It requires fresh preparation, -selects 262,144 training / 8,192 validation / 128 test images, and excludes all image -identities in the baseline selection. The full taxonomy remains in use. The -baseline selection hash is checked, and `selection.json` records the new Parquet -hash and exclusion provenance; both are frozen in the preparation manifest. +This optional pass has its own 1,800-second budget and fresh preparation. It selects +262,144 train / 8,192 validation / 128 test images, excluding identities from the +baseline sample while retaining full taxonomy. The exclusion hash and selection +provenance are frozen. It runs one epoch, with the same 900-second preparation and +600-second worker guards: ```bash -BATCH=64 # selected batch -WORKERS=8 # selected worker count python3 dev/ucloud/scaling.py trial /work/ddp-b32.json /work/ddp-storage.json \ --output /work/results/global-lepi-ddp-4gpu-storage-1 \ --batch "$BATCH" --workers "$WORKERS" --storage run_trial /work/ddp-storage.json ``` -The worker runs one epoch with a 600-second guard; the separate campaign allows -1,800 seconds including preparation (up to 900 seconds) and operator gaps. These -are limits, not runtime estimates or UCloud allocation extensions. A timeout may -leave partial window/phase evidence and must not be reported as success. With only -one epoch there is no warm-epoch result: inspect successive windows and first-epoch -cost separately. Reads use actual dataset storage without explicit RAM caching; -do not flush shared caches. Disjoint images reduce reuse of the baseline sample -but do not establish cold-cache conditions or certify full-dataset production I/O. - -## Generate the production CLI configuration - -`production.py` verifies the starting weights and full-taxonomy preparation artifacts -and writes a new YAML file for the real `mt_htrain` CLI. It deliberately omits the -qualification `data_index`: the CLI parses the complete source Parquet and preserves -its supplied splits. The starting weights are the original pretrained initialization, -not a model trained on the qualification subset. Full metadata parsing/broadcast and -full validation have larger CPU/memory costs than qualification. - -Generate this only after the epoch horizon is reviewed from the broader storage -measurement and remaining allocation time. The generator requires an explicit epoch -count; it does not extrapolate the cached subset into a production schedule. It -retains the qualified LR 0.001, weight decay 0.01 and 0.25-epoch warmup; larger global -batches are not automatically assigned a linearly scaled learning rate. +There is no warm-epoch result for this pass: inspect successive windows and startup +separately. A timeout leaves partial evidence, not a successful run. Disjoint paths +reduce sample reuse but do not guarantee cold WEKA caches; never flush shared caches. + +## Generate and launch production + +Keep the qualified environment and allocation. Allow time for full metadata parsing, +validation, diagnostics, saving and finalization. Choose the full-data epoch/LR +schedule from storage evidence and remaining allocation time, not cached-subset +speed. Resolve any allocation extension before launch. + +`production.py` verifies preparation hashes and writes a new YAML for the public +CLI. It uses the **original pretrained initialization**, not subset-trained weights, +and omits the qualification `data_index` so the CLI parses the full Parquet with +its supplied splits/taxonomy. It retains LR 0.001, weight decay 0.01 and 0.25-epoch +warmup; no batch-dependent LR scaling is applied. ```bash -# Set these to the final measured/reviewed choices before running this block. : "${BATCH:?selected per-GPU batch}" : "${WORKERS:?selected per-GPU workers}" : "${EPOCHS:?reviewed full-data epoch horizon}" -PRODUCTION_OUTPUT=/work/results # user-confirmed persistent storage for this job +PRODUCTION_OUTPUT=/work/results /work/venvs/mt-quant/bin/python dev/ucloud/production.py \ - /work/results/global-lepi-ddp-4gpu-b32-2 /work/production.yaml \ + /work/results/global-lepi-ddp-4gpu-b32-1 /work/production.yaml \ --output "$PRODUCTION_OUTPUT" --name global-lepi-production-1 \ --batch "$BATCH" --workers "$WORKERS" --epochs "$EPOCHS" ``` -Before launch, verify the generated YAML, available storage and the installed package -pin against the successful qualification. Keep the same four GPUs and environment. -The W&B project and shared run identity are set explicitly in YAML; `--wandb` is still -required to enable the backend. Also pass `--compile` explicitly: the pinned CLI -parser otherwise overrides YAML compilation with its false flag default. -No UCloud credentials are involved. +Review the YAML, persistent storage and installed pin against qualification. Keep +the same four GPUs; the generator rejects other topologies. Pass `--wandb` to enable +the configured backend and `--compile` because this pinned parser's false flag +default otherwise overrides YAML. Run in tmux and retain stdout/stderr: ```bash export OMP_NUM_THREADS=1 MKL_NUM_THREADS=1 TORCHINDUCTOR_COMPILE_THREADS=1 @@ -319,16 +200,16 @@ export TORCH_HOME=/work/.cache/torch /work/venvs/mt-quant/bin/mt_htrain --config /work/production.yaml --wandb --compile ``` -Run in tmux and retain stdout/stderr. The pinned CLI writes `checkpoint_last.pth` -after every completed epoch, `best.pt` after improvements, and numbered checkpoints -every five epochs (zero-based 0, 5, 10, ...). These writes are not guaranteed atomic: -if expiry interrupts a write, retain a previous intact numbered checkpoint. The -qualification harness forces more frequent numbered checkpoints; that override does -not carry over to the CLI. Do not assume a final `last.pt` exists after interruption. -The best score on resume is not persisted by the current training loop; archive prior -best artifacts before any separately reviewed resume into an existing output. - -The CLI does not inherit qualification-only finite-loss auditing or timing wrappers. -Inspect the epoch summary and checkpoints during production; the full-dataset run -has no harness wall-time guard and stops at its configured epoch horizon or when the -job/process is terminated. Evaluation/export are separate post-training activities. +The CLI does not inherit qualification-only finite-loss auditing, timing wrappers +or wall-time guards. Inspect epoch summaries/checkpoints during production. The +pinned CLI writes `checkpoint_last.pth` each completed epoch, `best.pt` after +improvements, and numbered checkpoints every five epochs (zero-based 0, 5, 10, …). +The harness's more frequent checkpoint override does not carry over. Writes are +not guaranteed atomic: retain an intact earlier checkpoint if expiry interrupts a +write, and do not assume `last.pt` exists. Best score is not persisted on resume; +archive previous best artifacts before resuming into an existing output. + +Held-out prediction uses `mt_hpredict`; pass its CSVs to the pinned +[mini_metrics environment](../releases/mambo_v3/evaluation.md#metrics). Follow the +[ONNX guide](../../docs/onnx.md) for export, preserving class order, preprocessing +and score semantics. Evaluation/export remain separate from training. diff --git a/dev/ucloud/evaluate-results.md b/dev/ucloud/evaluate-results.md deleted file mode 100644 index 1df4a56..0000000 --- a/dev/ucloud/evaluate-results.md +++ /dev/null @@ -1,94 +0,0 @@ -# Production evaluation with mini_metrics - -Run expert evaluation as soon as expert inference has completed: - -```bash -cd /work/mini_trainer -git pull --ff-only -bash dev/ucloud/evaluate-results.sh expert /work/evaluation-1 -``` - -After staged test inference completes, add its evaluation to the same root: - -```bash -bash dev/ucloud/evaluate-results.sh test /work/evaluation-1 -``` - -Alternatively use `all` once both predictions exist. Each dataset directory must -be fresh; use a new root for reruns. Defaults are: - -- Expert: `/work/expert-full-2/predictions/mini_metric.csv`. -- Test: `/work/test-full-1/predictions/mini_metric.csv`. - -Override these with `MT_EXPERT_CSV` and `MT_TEST_CSV` if inference used another -output directory. Only run against completed inference outputs; file existence -alone is not a completeness guarantee. Confirm the inference exit status and -staging manifest count (expert: 58,640; test: the saved test split count). - -The script uses Python 3.13 through `uvx` and pins mini_metrics to revision -`70cc69adc05362863439277048e06386c1f885e1`. It leaves the training environment -unchanged and uses no GPU. Dependency versions are resolved by uv, not locked -by this helper. Internet access is required for initial tool installation. - -Each dataset gets: - -- `all_labels.csv` and `.json`: aggregate metrics including unseen labels. -- `known_labels.csv` and `.json`: the package's known-label-only metrics. -- `per_class.csv`: per-class metrics, including unseen labels. -- Logs for each invocation, input SHA-256, pinned revision, exact commands and - a `COMPLETED` marker after all three invocations succeed. - -The package supplies vocabulary coverage and micro/macro statistics. Preserve -both coverage and known-only results when assessing the external dataset; do -not describe known-only accuracy as accuracy on the entire benchmark. Compare -species, genus and family separately. The current package disables its separate -hierarchy-wide metrics; per-level metrics are still produced normally. - -No optimal-threshold fitting, subsampling or label filtering is enabled. The -thresholds recorded in prediction files are retained. These collector files -contain the selected prediction per level, so they cannot establish top-5 -accuracy. The expert dataset evaluates external performance; it should not be -used for selecting this model's thresholds or checkpoints. - -Aggregate metric tables and progress are printed live in the terminal and retained -in the corresponding logs. `pipefail` preserves failures through `tee`. - -For compact inspection after completion: - -```bash -cat /work/evaluation-1/expert/all_labels.csv -cat /work/evaluation-1/expert/known_labels.csv -cat /work/evaluation-1/test/all_labels.csv -``` - -Keep per-class output as a file rather than pasting it into the terminal. -All outputs remain under `/work`; computation can also be rerun on a CPU job -from the saved prediction CSVs without retaining the source images or GPU node. - -## Regional candidate vocabulary - -Both `mt_predict` and `mt_hpredict` accept `--class-list FILE` (YAML key -`class_list`). Supply one exact model class label per UTF-8 line; for GBIF -hierarchical models these are species IDs. Blank lines and duplicates are -ignored. The list restricts the model's current candidate vocabulary and cannot -add species absent from the checkpoint. Missing requested labels are reported; -an empty overlap fails before loading images. - -Every input image and ground-truth label remains in evaluation, including labels -excluded by the list. Species outputs and parent mappings are filtered together. -`class_filter.json` in the prediction output records retained, excluded and -missing labels, plus the list's SHA-256. With a pre-masked checkpoint, filtering -further restricts its active vocabulary rather than restoring excluded classes. - -For example, in an environment containing this CLI feature: - -```bash -mt_hpredict --config /work/expert-full-2/inference.yaml \ - --class-list /work/regional-evaluation/mambo-v2-reduced.txt \ - --output /work/regional-evaluation --name predictions -``` - -Use the all-label report for global versus regional comparisons on the same -images. `known_label` now describes the active filtered vocabulary. Confidence -scores are computed over the restricted candidates, so thresholds calibrated -for the global model should not be assumed equivalent. diff --git a/dev/ucloud/evaluate-results.sh b/dev/ucloud/evaluate-results.sh deleted file mode 100644 index 82aa1fd..0000000 --- a/dev/ucloud/evaluate-results.sh +++ /dev/null @@ -1,56 +0,0 @@ -#!/usr/bin/env bash -# CPU evaluation of completed prediction CSVs, independent of the training venv. -set -euo pipefail -selection="${1:-all}" -output="${2:-/work/evaluation-1}" -case "$selection" in - expert) datasets=(expert) ;; - test) datasets=(test) ;; - all) datasets=(expert test) ;; - *) echo 'Usage: evaluate-results.sh [expert|test|all] [fresh-output-directory]' >&2; exit 2 ;; -esac -revision=70cc69adc05362863439277048e06386c1f885e1 -package="git+https://github.com/GuillaumeMougeot/mini_metrics.git@$revision" -expert_csv="${MT_EXPERT_CSV:-/work/expert-full-2/predictions/mini_metric.csv}" -test_csv="${MT_TEST_CSV:-/work/test-full-1/predictions/mini_metric.csv}" -for dataset in "${datasets[@]}"; do - if [[ "$dataset" == expert ]]; then input="$expert_csv"; else input="$test_csv"; fi - if [[ ! -s "$input" ]]; then - echo "Missing or empty completed prediction file: $input. Finish inference first." >&2 - exit 1 - fi - if [[ -e "$output/$dataset" ]]; then - echo "Output already exists: $output/$dataset; choose a fresh output directory." >&2 - exit 1 - fi -done -export PYTHONUNBUFFERED=1 CUDA_VISIBLE_DEVICES="" OMP_NUM_THREADS=1 MKL_NUM_THREADS=1 OPENBLAS_NUM_THREADS=1 MPLBACKEND=Agg -runner=(uvx --python 3.13 --from "$package" mm_metrics) -# Resolve the isolated CPU tool once before starting reports. -"${runner[@]}" --help > /dev/null -for dataset in "${datasets[@]}"; do - if [[ "$dataset" == expert ]]; then input="$expert_csv"; else input="$test_csv"; fi - target="$output/$dataset" - mkdir -p "$output" - mkdir "$target" - sha256sum "$input" > "$target/input.sha256" - printf 'mini_metrics_revision=%s\ninput=%s\n' "$revision" "$input" > "$target/provenance.txt" - for scope in all_labels known_labels per_class; do - options=() - case "$scope" in - all_labels) options=(--all) ;; - known_labels) options=(--all --known-only) ;; - per_class) options=(--per-class) ;; - esac - command=("${runner[@]}" --files "$input" --output-dir "$target" --output-name "$scope" --precision 10 "${options[@]}") - printf '%q ' "${command[@]}" >> "$target/commands.sh" - printf '\n' >> "$target/commands.sh" - echo "$dataset / $scope: $target/$scope.log" - if ! "${command[@]}" 2>&1 | tee "$target/$scope.log"; then - echo "Evaluation failed; inspect $target/$scope.log" >&2 - exit 1 - fi - done - touch "$target/COMPLETED" - echo "Completed $dataset evaluation: $target" -done diff --git a/dev/ucloud/expert-trial.md b/dev/ucloud/expert-trial.md deleted file mode 100644 index 4b3629d..0000000 --- a/dev/ucloud/expert-trial.md +++ /dev/null @@ -1,84 +0,0 @@ -# Bounded expert inference staging trial - -Stop the stalled full-test prediction and obsolete expert index creation with -Ctrl+C in their terminals first. Do not run this alongside additional cold-read -jobs. Saved training weights are unaffected; interrupted prediction currently -loses in-memory predictions because its collector writes at completion. - -This helper targets the mounted expert folder and trained weights used in the -current qualification. Run from the node after pulling the committed helpers: - -```bash -cd /work/mini_trainer -git pull --ff-only -bash dev/ucloud/expert-trial.sh -``` - -No manual YAML editing or dataset index construction is required. The launcher -extracts the focused discovery fix at `0c572ca` into a fresh `/work` source overlay -and uses the existing `/work/venvs/mt-quant` interpreter and dependencies. It does -not install packages or update the environment of another process. The underlying -Python helper also accepts explicit source, weights and output paths (`--help`). - -Defaults: - -- GPU 1; 1,024 JPEG/PNG candidates selected round-robin across class folders. -- At most 2 GiB of encoded source images, copied with four readers to - `/dev/shm/mt-expert-expert-staging-trial-1`. -- Five-minute staging limit and ten-minute inference limit. Timeout/interrupt - stops the phase process group, including inference loader workers. -- Normal prediction defaults: model/preprocessing metadata from the weights, - no separately supplied class mapping, resize recipe or fabricated labels. -- Persistent output: `/work/expert-staging-trial-1`. The minimal `inference.yaml` - contains only input and weights; output/name are explicit CLI arguments. - -`/dev/shm` is RAM-backed. The byte cap limits copied images, not total process or -loader memory. This assumes the current large-memory allocation. `/tmp` overlay -storage has not been established as node-local and is not used for this trial. - -Watch either phase in another terminal: - -```bash -tail -f /work/expert-staging-trial-1/stage.log -# Once inference starts: -tail -f /work/expert-staging-trial-1/inference.log -``` - -The launcher prints phase durations. On success, predictions are in -`/work/expert-staging-trial-1/predictions/mini_metric.csv`; `staging.json` records -original and staged paths, bytes and staging duration. Originals are unchanged. -Newly encountered hierarchical labels may still need GBIF/cache resolution; the -existing policy fails explicitly if it cannot resolve ancestors. Removing index -creation does not remove that lookup. - -If either phase times out, inspect its log before retrying. Partial staging is -retained without a completed manifest and is never treated as ready input. A retry -uses a fresh output/staging name, for example: - -```bash -bash dev/ucloud/expert-trial.sh /work/expert-staging-trial-2 --images 256 -``` - -Proceed to larger staging only if this trial completes and staged inference is -fast. Measure the full expert dataset's encoded size and available job memory -before raising the cap. This round-robin subset is a storage/functionality trial, -not the expert benchmark; do not report its accuracy as a full-dataset result. -Retain the full benchmark's unknown species when subsequently running mini_metrics. -The full test split remains deferred until throughput is adequate. - -RAM staging disappears with the job. Predictions, logs, configuration and manifest -are retained under `/work`. Staged files can be deleted once their corresponding -inference has exited; the helper deliberately does not delete existing directories. - -To retry inference after a code fix, reuse completed staging without another read -of the source images: - -```bash -bash dev/ucloud/expert-trial.sh /work/expert-staging-trial-4 \ - --reuse-stage /work/expert-staging-trial-3 -``` - -This checks the previous completed manifest and staged file sizes. The source -paths remain recorded, and the new output receives its own configuration and logs. -Taxonomy still uses the node's existing GBIF response cache; cache/API failures -remain distinct from the corrected count-versus-rank selection bug. diff --git a/dev/ucloud/expert-trial.sh b/dev/ucloud/expert-trial.sh deleted file mode 100644 index ad01da4..0000000 --- a/dev/ucloud/expert-trial.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env bash -# Run the bounded expert trial without changing the installed training environment. -set -euo pipefail -repo=$(git -C "$(dirname -- "${BASH_SOURCE[0]}")" rev-parse --show-toplevel) -revision=0c572ca -python=/work/venvs/mt-quant/bin/python -source_dir=/work/flemming_helsing/restructured/valid/referenced -weights=/work/results/global_lepi_production_w32_1/weights/best.pt -output="${1:-/work/expert-staging-trial-1}" -if (( $# > 0 )); then shift; fi -# An isolated source overlay keeps the exact trained package dependencies intact. -git -C "$repo" cat-file -e "$revision:mini_trainer/data/metadata.py" -code=$(mktemp -d /work/mt-inference-code.XXXXXX) -git -C "$repo" archive "$revision" mini_trainer | tar -x -C "$code" -export PYTHONPATH="$code" -exec "$python" "$repo/dev/ucloud/expert_trial.py" \ - --source "$source_dir" --weights "$weights" --output "$output" "$@" diff --git a/dev/ucloud/expert_trial.py b/dev/ucloud/expert_trial.py deleted file mode 100644 index a5bcc01..0000000 --- a/dev/ucloud/expert_trial.py +++ /dev/null @@ -1,217 +0,0 @@ -"""Bounded RAM-staging trial followed by the normal hierarchical prediction CLI.""" - -import argparse -import concurrent.futures -import inspect -import json -import os -import shutil -import signal -import subprocess -import sys -import time -from pathlib import Path - -SUFFIXES = {".jpg", ".jpeg", ".png"} - - -def select_images(source: Path, limit: int) -> list[Path]: - """Select round-robin across class folders; this is a trial, not a benchmark.""" - folders = sorted(path for path in source.iterdir() if path.is_dir() and not path.name.startswith(".")) - streams = [iter(path.rglob("*")) for path in folders] - selected = [] - while streams and len(selected) < limit: - active = [] - for stream in streams: - path = next((p for p in stream if p.suffix.lower() in SUFFIXES and p.is_file()), None) - if path is not None: - selected.append(path) - active.append(stream) - if len(selected) == limit: - break - streams = active - return selected - - -def test_rows(index: Path) -> dict: - """Preserve labels and ordering from exactly the supplied test split.""" - data = json.loads(index.read_text()) - count = len(data["path"]) - if any(len(data[key]) != count for key in ("split", "label")): - raise ValueError("Index path, split and label lengths differ") - selected = [i for i, split in enumerate(data["split"]) if split == "test"] - if not selected: - raise ValueError("No test rows in saved index") - result = {k: [v[i] for i in selected] for k, v in data.items() if isinstance(v, list) and len(v) == count} - result["path"] = [str((index.parent / p).absolute()) for p in result["path"]] - return result - - -def stage(source: Path, destination: Path, output: Path, limit: int, byte_limit: int, workers: int, data_index: Path | None = None) -> None: - start = time.monotonic() - print( - f"Selecting all saved test rows from {data_index}" - if data_index - else f"Selecting up to {limit} JPEG/PNG files across class folders", - flush=True, - ) - index = test_rows(data_index) if data_index is not None else None - paths = select_images(source, limit) if index is None else [Path(p) for p in index["path"]] - print(f"Inspecting sizes of {len(paths)} selected files", flush=True) - if not paths: - raise RuntimeError("No JPEG/PNG candidates found") - sizes = [path.stat().st_size for path in paths] - total = sum(sizes) - if total > byte_limit: - raise RuntimeError(f"Selected files need {total} bytes; limit is {byte_limit}. Adjust the staging budget or subset size.") - if shutil.disk_usage(destination.parent).free < total + 256 * 2**20: - raise RuntimeError("Insufficient staging space with 256 MiB headroom") - destination.mkdir(exist_ok=False) - - def relative_path(i: int, path: Path) -> Path: - return path.relative_to(source) if index is None else Path(str(i // 4096)) / f"{i}{path.suffix}" - - def copy(item: tuple[int, Path]) -> dict: - i, path = item - relative = relative_path(i, path) - target = destination / relative - target.parent.mkdir(parents=True, exist_ok=True) - before = path.stat() - shutil.copyfile(path, target) - after = path.stat() - if (before.st_size, before.st_mtime_ns) != (after.st_size, after.st_mtime_ns) or target.stat().st_size != before.st_size: - raise RuntimeError(f"Source changed or copy was incomplete: {path}") - return {"source": str(path), "staged": str(target), "bytes": before.st_size} - - rows = [] - print(f"Copying {len(paths)} files ({total / 2**20:.1f} MiB), {workers} readers", flush=True) - with concurrent.futures.ThreadPoolExecutor(max_workers=workers) as pool: - remaining = iter(enumerate(paths)) - pending = set() - exhausted = False - while pending or not exhausted: - while not exhausted and len(pending) < workers * 2: - item = next(remaining, None) - if item is None: - exhausted = True - else: - pending.add(pool.submit(copy, item)) - if not pending: - break - done, pending = concurrent.futures.wait(pending, return_when=concurrent.futures.FIRST_COMPLETED) - for future in done: - rows.append(future.result()) - if len(rows) % 4096 == 0 or len(rows) == len(paths): - print(f"Copied {len(rows)}/{len(paths)}; elapsed {time.monotonic() - start:.1f}s", flush=True) - report = {"scope": "staging_trial_subset", "seconds": time.monotonic() - start, "bytes": total, "files": rows} - if index is not None: - index["path"] = [str(destination / relative_path(i, p)) for i, p in enumerate(paths)] - (output / "staged-index.json").write_text(json.dumps(index) + "\n") - report["scope"] = "supplied_test_split" - report["source_index"] = str(data_index) - (output / "staging.json").write_text(json.dumps(report, indent=2) + "\n") - - -def reuse_stage(previous: Path) -> tuple[Path, dict]: - """Require a completed manifest and intact staged files, without source reads.""" - config = json.loads((previous / "inference.yaml").read_text()) - report = json.loads((previous / "staging.json").read_text()) - destination = Path(config["input"]).resolve(strict=True) - rows = report["files"] - if not rows: - raise RuntimeError("Completed staging manifest contains no files") - for row in rows: - path = Path(row["staged"]).resolve(strict=True) - if not path.is_relative_to(destination) or path.stat().st_size != row["bytes"]: - raise RuntimeError(f"Staged file does not match manifest: {path}") - return destination, report - - -def main() -> None: - parser = argparse.ArgumentParser(description=__doc__) - parser.add_argument("--source", type=Path, required=True) - parser.add_argument("--weights", type=Path, required=True) - parser.add_argument("--output", type=Path, required=True, help="Fresh persistent trial directory") - parser.add_argument("--images", type=int, default=1024) - parser.add_argument("--data-index", type=Path, help="Stage all test rows from this saved index; ignores --images") - parser.add_argument("--max-mib", type=int, default=2048) - parser.add_argument("--copy-workers", type=int, default=4) - parser.add_argument("--stage-timeout", type=int, default=300) - parser.add_argument("--inference-timeout", type=int, default=600) - parser.add_argument("--gpu", default="1") - parser.add_argument("--reuse-stage", type=Path, help="Reuse a completed trial directory without copying source images") - parser.add_argument("--stage-only", action="store_true", help=argparse.SUPPRESS) - args = parser.parse_args() - if min(args.images, args.max_mib, args.copy_workers, args.stage_timeout, args.inference_timeout) <= 0: - parser.error("Limits and worker counts must be positive") - args.source = args.source.resolve(strict=True) - args.weights = args.weights.resolve(strict=True) - args.output = args.output.resolve() - destination = Path("/dev/shm") / ("mt-expert-" + args.output.name) - if args.stage_only: - stage(args.source, destination, args.output, args.images, args.max_mib * 2**20, args.copy_workers, args.data_index) - return - - from mini_trainer.data import auto_find_images - - if "cls2idx" not in inspect.signature(auto_find_images).parameters: - raise RuntimeError("Install the focused inference discovery fix before running this trial") - previous_report = None - if args.reuse_stage is not None: - destination, previous_report = reuse_stage(args.reuse_stage) - elif destination.exists(): - raise RuntimeError(f"Staging directory already exists: {destination}; choose a fresh output name") - args.output.mkdir(parents=True, exist_ok=False) - if previous_report is not None: - (args.output / "staging.json").write_text(json.dumps(previous_report, indent=2) + "\n") - print(f"Reusing completed staging from {args.reuse_stage}: {destination}", flush=True) - config = {"input": str(destination), "weights": str(args.weights)} - if args.data_index is not None: - if args.reuse_stage is not None: - shutil.copyfile(args.reuse_stage / "staged-index.json", args.output / "staged-index.json") - config["data_index"] = str(args.output / "staged-index.json") - config_path = args.output / "inference.yaml" - # JSON is valid YAML; no extra dependency or hand-edited config required. - config_path.write_text(json.dumps(config, indent=2) + "\n") - env = dict(os.environ, CUDA_VISIBLE_DEVICES=args.gpu, OMP_NUM_THREADS="1", MKL_NUM_THREADS="1", MPLBACKEND="Agg") - cli = Path(sys.executable).parent / "mt_hpredict" - if not cli.is_file(): - raise RuntimeError(f"Missing installed CLI: {cli}") - commands = [ - ([sys.executable, str(Path(__file__).resolve()), *sys.argv[1:], "--stage-only"], args.stage_timeout, "stage"), - ( - [str(cli), "--config", str(config_path), "--output", str(args.output), "--name", "predictions"], - args.inference_timeout, - "inference", - ), - ] - if args.reuse_stage is not None: - commands = commands[1:] - for command, timeout, phase in commands: - print(f"Starting {phase}; timeout {timeout}s. Log: {args.output / (phase + '.log')}", flush=True) - started = time.monotonic() - with (args.output / f"{phase}.log").open("w") as log: - with subprocess.Popen(command, env=env, stdout=log, stderr=subprocess.STDOUT, start_new_session=True) as proc: - try: - returncode = proc.wait(timeout=timeout) - except (subprocess.TimeoutExpired, KeyboardInterrupt): - os.killpg(proc.pid, signal.SIGTERM) - try: - proc.wait(timeout=5) - except subprocess.TimeoutExpired: - pass - # Also stop loader descendants, even if the parent exited first. - try: - os.killpg(proc.pid, signal.SIGKILL) - except ProcessLookupError: - pass - raise SystemExit(f"{phase} interrupted or exceeded {timeout}s; see {log.name}.") from None - if returncode: - raise SystemExit(f"{phase} failed ({returncode}); see {log.name}") - print(f"{phase} completed in {time.monotonic() - started:.1f}s", flush=True) - print(f"Trial complete: {args.output}. Staged bytes retained at {destination}.", flush=True) - print("Check staging.json for the selected scope and exact file count.", flush=True) - - -if __name__ == "__main__": - main() diff --git a/dev/ucloud/export_followup.py b/dev/ucloud/export_followup.py index ab4ec4e..0111d9e 100644 --- a/dev/ucloud/export_followup.py +++ b/dev/ucloud/export_followup.py @@ -45,13 +45,12 @@ def main(): reader = make_read_and_resize_fn((config["size"], config["size"]), torch.device("cpu"), torch.uint8) with torch.inference_mode(): images = preprocess(torch.stack([reader(p) for p in paths])) - eager = model(images) destination = run / "onnx" export_onnx( model, images[:2], destination, - verification_inputs=[images[:1], images], + verification_inputs=[images], preprocessing={ "loader": "mini_trainer.data.io.make_read_and_resize_fn", "size": [config["size"], config["size"]], @@ -63,12 +62,10 @@ def main(): checkpoint_sha256=result["checkpoint_sha256"], ) manifest = json.loads((destination / "manifest.json").read_text()) + verification = manifest["verification"] + # Export already verified these inputs; retain ONNX outputs for later runtimes. session = ort.InferenceSession(str(destination / "model.onnx"), providers=["CPUExecutionProvider"]) outputs = session.run(None, {manifest["input"]["name"]: images.numpy()}) - if len(outputs) != len(eager): - raise ValueError("Output count differs") - for expected, actual in zip(eager, outputs, strict=True): - np.testing.assert_allclose(actual, expected.numpy(), rtol=1e-4, atol=1e-5) np.savez(destination / "validation-example.npz", images=images.numpy(), **{f"output_{i}": v for i, v in enumerate(outputs)}) write_json( destination / "real-image-parity.json", @@ -76,9 +73,7 @@ def main(): "status": "passed", "images": paths, "checkpoint_sha256": result["checkpoint_sha256"], - "provider": "CPUExecutionProvider", - "rtol": 1e-4, - "atol": 1e-5, + **{key: verification[key] for key in ("provider", "rtol", "atol")}, "scope": "Four validation images; dynamic-batch FP32 export parity, not held-out quality or target-GPU speed", }, ) diff --git a/dev/ucloud/setup.sh b/dev/ucloud/setup.sh index 4c5823b..061cece 100644 --- a/dev/ucloud/setup.sh +++ b/dev/ucloud/setup.sh @@ -58,7 +58,7 @@ for branch in "${branches[@]}"; do --index-strategy unsafe-first-match "$requirements" sha=$master_sha if [[ "$branch" == quant ]]; then sha=$quant_sha; fi - uv pip install --python "$env_dir/bin/python" --no-deps "mini_trainer @ git+$repo_url@$sha" + uv pip install --python "$env_dir/bin/python" --no-deps "git+$repo_url@$sha" uv pip check --python "$env_dir/bin/python" done diff --git a/dev/ucloud/test-inference.md b/dev/ucloud/test-inference.md deleted file mode 100644 index cff8afc..0000000 --- a/dev/ucloud/test-inference.md +++ /dev/null @@ -1,41 +0,0 @@ -# Full in-domain test inference - -From `/work/mini_trainer`, run in tmux: - -```bash -git pull --ff-only -bash dev/ucloud/test-inference.sh /work/test-full-1 -``` - -This selects every `test` row from the production `data_index.json`, preserves -labels, class indices and ordering, and copies encoded files into `/dev/shm` -with 512 I/O threads and bounded pending work. It does not select training or -validation rows, resize images, or resolve taxonomy. The 128 GiB staging cap -and free-space check apply before copying. Size inspection precedes copy progress. - -The normal `mt_hpredict` CLI runs on GPU 0 with input, weights and the staged -index supplied; other defaults come from the inference CLI and model metadata. -The existing isolated inference source overlay is used without reinstalling. -Each stage has a one-hour timeout. Stop any old stalled test inference before -starting this run. This helper does not terminate unrelated processes. - -```bash -tail -n 5 /work/test-full-1/stage.log -tail -n 5 /work/test-full-1/inference.log -``` - -The CSV is `/work/test-full-1/predictions/mini_metric.csv`; configuration, -source-to-staged manifest and logs remain in `/work/test-full-1`. RAM files do -not survive job termination. Completed staging can be reused after an inference -failure, without reading source images again: - -```bash -bash dev/ucloud/test-inference.sh /work/test-full-2 --reuse-stage /work/test-full-1 -``` - -A completed manifest is required for reuse. An interrupted copy is not resumable. -The selected test count should match the production index (expected 632,913 -from the original dataset; the saved index is authoritative). - -After inference, use [the mini_metrics evaluation helper](evaluate-results.md) -for separate in-domain and expert reports. diff --git a/dev/ucloud/test-inference.sh b/dev/ucloud/test-inference.sh deleted file mode 100644 index ec6fffc..0000000 --- a/dev/ucloud/test-inference.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env bash -# Stage the complete saved test split and infer without changing the environment. -set -euo pipefail -repo=$(git -C "$(dirname -- "${BASH_SOURCE[0]}")" rev-parse --show-toplevel) -output="${1:-/work/test-full-1}" -if (( $# > 0 )); then shift; fi -exec bash "$repo/dev/ucloud/expert-trial.sh" "$output" \ - --source /work/global_lepi \ - --data-index /work/results/global_lepi_production_w32_1/data_index.json \ - --copy-workers 512 --max-mib 131072 \ - --stage-timeout 3600 --inference-timeout 3600 --gpu 0 "$@" diff --git a/dev/ucloud/worker.py b/dev/ucloud/worker.py index 2f02a6a..b9546c1 100644 --- a/dev/ucloud/worker.py +++ b/dev/ucloud/worker.py @@ -88,7 +88,11 @@ def preflight(config, branch, *, verify=False): import mini_trainer - distribution = importlib.metadata.distribution("mini_trainer") + try: + distribution = importlib.metadata.distribution("mt-trainer") + except importlib.metadata.PackageNotFoundError: + # Historical pinned comparison commits predate the distribution rename. + distribution = importlib.metadata.distribution("mini_trainer") direct = json.loads(distribution.read_text("direct_url.json") or "{}") commit = direct.get("vcs_info", {}).get("commit_id") if commit != config["environments"][branch]["commit"]: diff --git a/dev/wheel_smoke.py b/dev/wheel_smoke.py index 43a319d..7c962d9 100644 --- a/dev/wheel_smoke.py +++ b/dev/wheel_smoke.py @@ -48,7 +48,7 @@ def main(): importlib.import_module(f"mini_trainer.{module}") blacklist = importlib.resources.files("mini_trainer.modeling.architectures").joinpath("blacklist.json") assert isinstance(json.loads(blacklist.read_text()), dict) - for entry in importlib.metadata.distribution("mini_trainer").entry_points: + for entry in importlib.metadata.distribution("mt-trainer").entry_points: if entry.group == "console_scripts": subprocess.run([str(Path(sys.executable).parent / entry.name), "--help"], check=True, timeout=60, capture_output=True) diff --git a/dev/worktrees.md b/dev/worktrees.md index b8c56eb..3677def 100644 --- a/dev/worktrees.md +++ b/dev/worktrees.md @@ -2,14 +2,13 @@ Use one Git worktree per active feature. Worktrees have independent tracked files, indexes and checked-out branches; commits, refs and Git configuration are shared. -The current prototype exploration starts from `quant`, whose diagnostic functions -are the reference for that work. Choose the base explicitly for other features. +Choose the base revision for the task explicitly. From the main checkout: ```bash git worktree list -git worktree add -b feature/my-feature .worktrees/my-feature quant +git worktree add -b feature/my-feature .worktrees/my-feature YOUR_BASE_REF ``` `/.worktrees/` is ignored on branches carrying this guide. For older branches, diff --git a/docs/archive/benchmark-history.md b/docs/archive/benchmark-history.md deleted file mode 100644 index 188a9c1..0000000 --- a/docs/archive/benchmark-history.md +++ /dev/null @@ -1,11 +0,0 @@ -# Historical benchmark notebook - -The detailed chronological notebook is preserved in [Git at `f5c69e7`](https://github.com/asgersvenning/mini_trainer/blob/f5c69e7cab2bfde8a5467026b293858b93e628f9/docs/archive/benchmark-history.md). -It includes exact local configurations, negative experiments and superseded results. -Use [current findings](../benchmarks.md) for conclusions and -[the roadmap](../quantization-roadmap.md) for remaining work. - -Raw evidence and final model retention are described in -[the artifact inventory](../quantization-artifacts.md). Old temporary paths require -restoration; historical commands use the former flat benchmark module paths. -Current commands live in [the benchmark guide](../../dev/benchmarks/README.md). diff --git a/docs/assets/mambo-accelerated-comparison.json b/docs/assets/mambo-accelerated-comparison.json new file mode 100644 index 0000000..3398097 --- /dev/null +++ b/docs/assets/mambo-accelerated-comparison.json @@ -0,0 +1,3479 @@ +{ + "reference": { + "quality": [ + { + "model": "v2", + "preset": "north_europe", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.68712482946794, + "micro_accuracy_known": 0.7963358235503379, + "macro_accuracy_all": 0.6852063621352951, + "macro_accuracy_known": 0.706872966471589, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58639, + "list_coverage": 0.9999829467939972, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7922919508867667, + "micro_accuracy_known": 0.7923054622350313, + "macro_accuracy_all": 0.7890053947525617, + "macro_accuracy_known": 0.7914633554838781, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9449351978171896, + "micro_accuracy_known": 0.9449351978171896, + "macro_accuracy_all": 0.8440271040813301, + "macro_accuracy_known": 0.8440271040813301, + "abstention_coverage": 1.0 + } + }, + "macro_f1_all": 0.25753800338546967, + "scores": { + "all": { + "accuracy": { + "0": 0.6852063621352951, + "1": 0.7890053947525617, + "2": 0.8440271040813301 + }, + "precision": { + "0": 0.2742104381019442, + "1": 0.3188818859364664, + "2": 0.26007435892237385 + }, + "recall": { + "0": 0.6852063621352951, + "1": 0.7890053947525617, + "2": 0.8440271040813301 + }, + "f1": { + "0": 0.25753800338546967, + "1": 0.3169285074452811, + "2": 0.2691037692533918 + }, + "micro_accuracy": { + "0": 0.68712482946794, + "1": 0.7922919508867667, + "2": 0.9449351978171896 + }, + "theilU": { + "0": 0.9259639612074944, + "1": 0.9286450152404832, + "2": 0.865726913911594 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.706872966471589, + "1": 0.7914633554838781, + "2": 0.8440271040813301 + }, + "precision": { + "0": 0.27934832747314936, + "1": 0.3189462554934523, + "2": 0.26007435892237385 + }, + "recall": { + "0": 0.706872966471589, + "1": 0.7914633554838781, + "2": 0.8440271040813301 + }, + "f1": { + "0": 0.26468747200295195, + "1": 0.3174198331740771, + "2": 0.2691037692533918 + }, + "micro_accuracy": { + "0": 0.7963358235503379, + "1": 0.7923054622350313, + "2": 0.9449351978171896 + }, + "theilU": { + "0": 0.9284675700829689, + "1": 0.9286569914847851, + "2": 0.865726913911594 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + }, + "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", + "sample_ids_sha256": "51a9e4ae7818a96f935527a984a61f4fd31e43f60987ca23792f2bcafd27631a", + "list_sha256": "065bb3ade45c970ca129c7507b56ed62fe16b84251961bf53352f5098b8b2be6" + }, + { + "model": "v2", + "preset": "europe", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.669594133697135, + "micro_accuracy_known": 0.7760188149729238, + "macro_accuracy_all": 0.6604260262269301, + "macro_accuracy_known": 0.6813090626293627, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7764495225102319, + "micro_accuracy_known": 0.7764495225102319, + "macro_accuracy_all": 0.7728971632770847, + "macro_accuracy_known": 0.7728971632770847, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9423090040927694, + "micro_accuracy_known": 0.9423090040927694, + "macro_accuracy_all": 0.8353711166095457, + "macro_accuracy_known": 0.8353711166095457, + "abstention_coverage": 1.0 + } + }, + "macro_f1_all": 0.19998360830548284, + "scores": { + "all": { + "accuracy": { + "0": 0.6604260262269301, + "1": 0.7728971632770847, + "2": 0.8353711166095457 + }, + "precision": { + "0": 0.220093475997043, + "1": 0.26145460355851485, + "2": 0.24311183116521895 + }, + "recall": { + "0": 0.6604260262269301, + "1": 0.7728971632770847, + "2": 0.8353711166095457 + }, + "f1": { + "0": 0.19998360830548284, + "1": 0.25527668172822016, + "2": 0.2512650593074731 + }, + "micro_accuracy": { + "0": 0.669594133697135, + "1": 0.7764495225102319, + "2": 0.9423090040927694 + }, + "theilU": { + "0": 0.9298644970123321, + "1": 0.9304037751304223, + "2": 0.858730608498533 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.6813090626293627, + "1": 0.7728971632770847, + "2": 0.8353711166095457 + }, + "precision": { + "0": 0.22455003199982063, + "1": 0.26145460355851485, + "2": 0.24311183116521895 + }, + "recall": { + "0": 0.6813090626293627, + "1": 0.7728971632770847, + "2": 0.8353711166095457 + }, + "f1": { + "0": 0.20496609487323514, + "1": 0.25527668172822016, + "2": 0.2512650593074731 + }, + "micro_accuracy": { + "0": 0.7760188149729238, + "1": 0.7764495225102319, + "2": 0.9423090040927694 + }, + "theilU": { + "0": 0.9324736395684865, + "1": 0.9304037751304223, + "2": 0.858730608498533 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + }, + "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", + "sample_ids_sha256": "51a9e4ae7818a96f935527a984a61f4fd31e43f60987ca23792f2bcafd27631a", + "list_sha256": "df66152ba29ba979b32741db4a0dc7c85db18fa65eac5602ca4aab702343de90" + }, + { + "model": "v2", + "preset": "full", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.5936050477489768, + "micro_accuracy_known": 0.6879520929681016, + "macro_accuracy_all": 0.5720627970250876, + "macro_accuracy_known": 0.5901517392235093, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7285129604365621, + "micro_accuracy_known": 0.7285129604365621, + "macro_accuracy_all": 0.7168278641037727, + "macro_accuracy_known": 0.7168278641037727, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9265006821282401, + "micro_accuracy_known": 0.9265006821282401, + "macro_accuracy_all": 0.8069699178640561, + "macro_accuracy_known": 0.8069699178640561, + "abstention_coverage": 1.0 + } + }, + "macro_f1_all": 0.08990868448899282, + "scores": { + "all": { + "accuracy": { + "0": 0.5720627970250876, + "1": 0.7168278641037727, + "2": 0.8069699178640561 + }, + "precision": { + "0": 0.1100618404698789, + "1": 0.1327201662316462, + "2": 0.19682625488877242 + }, + "recall": { + "0": 0.5720627970250876, + "1": 0.7168278641037727, + "2": 0.8069699178640561 + }, + "f1": { + "0": 0.08990868448899282, + "1": 0.12210675669894289, + "2": 0.20522430973656694 + }, + "micro_accuracy": { + "0": 0.5936050477489768, + "1": 0.7285129604365621, + "2": 0.9265006821282401 + }, + "theilU": { + "0": 0.9424989337241723, + "1": 0.9364867523141058, + "2": 0.8320049778627998 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.5901517392235093, + "1": 0.7168278641037727, + "2": 0.8069699178640561 + }, + "precision": { + "0": 0.11296990063684895, + "1": 0.1327201662316462, + "2": 0.19682625488877242 + }, + "recall": { + "0": 0.5901517392235093, + "1": 0.7168278641037727, + "2": 0.8069699178640561 + }, + "f1": { + "0": 0.09231932892005533, + "1": 0.12210675669894289, + "2": 0.20522430973656694 + }, + "micro_accuracy": { + "0": 0.6879520929681016, + "1": 0.7285129604365621, + "2": 0.9265006821282401 + }, + "theilU": { + "0": 0.9472050810666933, + "1": 0.9364867523141058, + "2": 0.8320049778627998 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + }, + "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", + "sample_ids_sha256": "51a9e4ae7818a96f935527a984a61f4fd31e43f60987ca23792f2bcafd27631a", + "list_sha256": "8a256b140c3ec3389329e6f3cb6c4d50e1634c49907a9caef099cdfd5c378ca5" + }, + { + "model": "v3", + "preset": "north_europe", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.7078956343792633, + "micro_accuracy_known": 0.8204079212617099, + "macro_accuracy_all": 0.7123671759291879, + "macro_accuracy_known": 0.734892620227344, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58639, + "list_coverage": 0.9999829467939972, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7936732605729877, + "micro_accuracy_known": 0.7936867954774126, + "macro_accuracy_all": 0.8054070319557569, + "macro_accuracy_known": 0.8079160881300739, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9298090040927695, + "micro_accuracy_known": 0.9298090040927695, + "macro_accuracy_all": 0.8106383132501974, + "macro_accuracy_known": 0.8106383132501974, + "abstention_coverage": 1.0 + } + }, + "macro_f1_all": 0.25450880594788156, + "scores": { + "all": { + "accuracy": { + "0": 0.7123671759291879, + "1": 0.8054070319557569, + "2": 0.8106383132501974 + }, + "precision": { + "0": 0.26361186496219735, + "1": 0.31882230287858776, + "2": 0.27544229106153234 + }, + "recall": { + "0": 0.7123671759291879, + "1": 0.8054070319557569, + "2": 0.8106383132501974 + }, + "f1": { + "0": 0.25450880594788156, + "1": 0.3207725301986971, + "2": 0.2805840235220709 + }, + "micro_accuracy": { + "0": 0.7078956343792633, + "1": 0.7936732605729877, + "2": 0.9298090040927695 + }, + "theilU": { + "0": 0.9282973331913745, + "1": 0.927078119536916, + "2": 0.8488942298912809 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.734892620227344, + "1": 0.8079160881300739, + "2": 0.8106383132501974 + }, + "precision": { + "0": 0.2677964216559137, + "1": 0.31884970853060046, + "2": 0.27544229106153234 + }, + "recall": { + "0": 0.734892620227344, + "1": 0.8079160881300739, + "2": 0.8106383132501974 + }, + "f1": { + "0": 0.2609164468790569, + "1": 0.3212438169069074, + "2": 0.2805840235220709 + }, + "micro_accuracy": { + "0": 0.8204079212617099, + "1": 0.7936867954774126, + "2": 0.9298090040927695 + }, + "theilU": { + "0": 0.9313037775676971, + "1": 0.9270916152069156, + "2": 0.8488942298912809 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + }, + "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", + "sample_ids_sha256": "51a9e4ae7818a96f935527a984a61f4fd31e43f60987ca23792f2bcafd27631a", + "list_sha256": "065bb3ade45c970ca129c7507b56ed62fe16b84251961bf53352f5098b8b2be6" + }, + { + "model": "v3", + "preset": "europe", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.6894952251023192, + "micro_accuracy_known": 0.7990829677062334, + "macro_accuracy_all": 0.6906121581308468, + "macro_accuracy_known": 0.7124496967278696, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7793656207366985, + "micro_accuracy_known": 0.7793656207366985, + "macro_accuracy_all": 0.7927684087442151, + "macro_accuracy_known": 0.7927684087442151, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9286323328785812, + "micro_accuracy_known": 0.9286323328785812, + "macro_accuracy_all": 0.8061650335232657, + "macro_accuracy_known": 0.8061650335232657, + "abstention_coverage": 1.0 + } + }, + "macro_f1_all": 0.19931852384419554, + "scores": { + "all": { + "accuracy": { + "0": 0.6906121581308468, + "1": 0.7927684087442151, + "2": 0.8061650335232657 + }, + "precision": { + "0": 0.2125866053945616, + "1": 0.25792706709688445, + "2": 0.25177044612587207 + }, + "recall": { + "0": 0.6906121581308468, + "1": 0.7927684087442151, + "2": 0.8061650335232657 + }, + "f1": { + "0": 0.19931852384419554, + "1": 0.25548534308971915, + "2": 0.25562321183354897 + }, + "micro_accuracy": { + "0": 0.6894952251023192, + "1": 0.7793656207366985, + "2": 0.9286323328785812 + }, + "theilU": { + "0": 0.9327740860469433, + "1": 0.930377596554077, + "2": 0.8415003084731356 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7124496967278696, + "1": 0.7927684087442151, + "2": 0.8061650335232657 + }, + "precision": { + "0": 0.21701009331649532, + "1": 0.25792706709688445, + "2": 0.25177044612587207 + }, + "recall": { + "0": 0.7124496967278696, + "1": 0.7927684087442151, + "2": 0.8061650335232657 + }, + "f1": { + "0": 0.20477619736063515, + "1": 0.25548534308971915, + "2": 0.25562321183354897 + }, + "micro_accuracy": { + "0": 0.7990829677062334, + "1": 0.7793656207366985, + "2": 0.9286323328785812 + }, + "theilU": { + "0": 0.9361501370706838, + "1": 0.930377596554077, + "2": 0.8415003084731356 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + }, + "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", + "sample_ids_sha256": "51a9e4ae7818a96f935527a984a61f4fd31e43f60987ca23792f2bcafd27631a", + "list_sha256": "df66152ba29ba979b32741db4a0dc7c85db18fa65eac5602ca4aab702343de90" + }, + { + "model": "v3", + "preset": "full", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.5843281036834925, + "micro_accuracy_known": 0.6772006798687695, + "macro_accuracy_all": 0.5802757153882665, + "macro_accuracy_known": 0.5986243546100299, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7058321964529332, + "micro_accuracy_known": 0.7058321964529332, + "macro_accuracy_all": 0.7133531076261048, + "macro_accuracy_known": 0.7133531076261048, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.903137789904502, + "micro_accuracy_known": 0.903137789904502, + "macro_accuracy_all": 0.7851379223252065, + "macro_accuracy_known": 0.7851379223252065, + "abstention_coverage": 1.0 + } + }, + "macro_f1_all": 0.09709532327738142, + "scores": { + "all": { + "accuracy": { + "0": 0.5802757153882665, + "1": 0.7133531076261048, + "2": 0.7851379223252065 + }, + "precision": { + "0": 0.11912807276515047, + "1": 0.139300115626279, + "2": 0.18846238515501548 + }, + "recall": { + "0": 0.5802757153882665, + "1": 0.7133531076261048, + "2": 0.7851379223252065 + }, + "f1": { + "0": 0.09709532327738142, + "1": 0.12672892757582832, + "2": 0.19392386150040025 + }, + "micro_accuracy": { + "0": 0.5843281036834925, + "1": 0.7058321964529332, + "2": 0.903137789904502 + }, + "theilU": { + "0": 0.9381503100112119, + "1": 0.927961126268096, + "2": 0.803447959660008 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.5986243546100299, + "1": 0.7133531076261048, + "2": 0.7851379223252065 + }, + "precision": { + "0": 0.1233403630154899, + "1": 0.139300115626279, + "2": 0.18846238515501548 + }, + "recall": { + "0": 0.5986243546100299, + "1": 0.7133531076261048, + "2": 0.7851379223252065 + }, + "f1": { + "0": 0.10055972949058657, + "1": 0.12672892757582832, + "2": 0.19392386150040025 + }, + "micro_accuracy": { + "0": 0.6772006798687695, + "1": 0.7058321964529332, + "2": 0.903137789904502 + }, + "theilU": { + "0": 0.9436554162021304, + "1": 0.927961126268096, + "2": 0.803447959660008 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + }, + "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", + "sample_ids_sha256": "51a9e4ae7818a96f935527a984a61f4fd31e43f60987ca23792f2bcafd27631a", + "list_sha256": "8a256b140c3ec3389329e6f3cb6c4d50e1634c49907a9caef099cdfd5c378ca5" + }, + { + "model": "v3", + "preset": "north_europe_v3", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.703206002728513, + "micro_accuracy_known": 0.8149729238309814, + "macro_accuracy_all": 0.7049027989956338, + "macro_accuracy_known": 0.7271922155646657, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7889154160982265, + "micro_accuracy_known": 0.7889154160982265, + "macro_accuracy_all": 0.8001749661579481, + "macro_accuracy_known": 0.8001749661579481, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9289222373806275, + "micro_accuracy_known": 0.9289222373806275, + "macro_accuracy_all": 0.8066694596309745, + "macro_accuracy_known": 0.8066694596309745, + "abstention_coverage": 1.0 + } + }, + "macro_f1_all": 0.2366924424645238, + "scores": { + "all": { + "accuracy": { + "0": 0.7049027989956338, + "1": 0.8001749661579481, + "2": 0.8066694596309745 + }, + "precision": { + "0": 0.2470742742773393, + "1": 0.3039724405966767, + "2": 0.2691352790869643 + }, + "recall": { + "0": 0.7049027989956338, + "1": 0.8001749661579481, + "2": 0.8066694596309745 + }, + "f1": { + "0": 0.2366924424645238, + "1": 0.30440717730876965, + "2": 0.27323770976338385 + }, + "micro_accuracy": { + "0": 0.703206002728513, + "1": 0.7889154160982265, + "2": 0.9289222373806275 + }, + "theilU": { + "0": 0.9297064107551721, + "1": 0.9279675082275328, + "2": 0.8462890628674864 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7271922155646657, + "1": 0.8001749661579481, + "2": 0.8066694596309745 + }, + "precision": { + "0": 0.2514163094253105, + "1": 0.3039724405966767, + "2": 0.2691352790869643 + }, + "recall": { + "0": 0.7271922155646657, + "1": 0.8001749661579481, + "2": 0.8066694596309745 + }, + "f1": { + "0": 0.24287275681309572, + "1": 0.30440717730876965, + "2": 0.27323770976338385 + }, + "micro_accuracy": { + "0": 0.8149729238309814, + "1": 0.7889154160982265, + "2": 0.9289222373806275 + }, + "theilU": { + "0": 0.9329194604232633, + "1": 0.9279675082275328, + "2": 0.8462890628674864 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + }, + "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", + "sample_ids_sha256": "51a9e4ae7818a96f935527a984a61f4fd31e43f60987ca23792f2bcafd27631a", + "list_sha256": "78ee7693c7352244cd8a99b7276196aa32de27e620ed66648c4087f826d47092" + }, + { + "model": "v3", + "preset": "europe_v3", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.6880627557980901, + "micro_accuracy_known": 0.7974228230364837, + "macro_accuracy_all": 0.6887822210592908, + "macro_accuracy_known": 0.7105618960334976, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7779160982264666, + "micro_accuracy_known": 0.7779160982264666, + "macro_accuracy_all": 0.7907835796748087, + "macro_accuracy_known": 0.7907835796748087, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9254945429740792, + "micro_accuracy_known": 0.9254945429740792, + "macro_accuracy_all": 0.804979506038197, + "macro_accuracy_known": 0.804979506038197, + "abstention_coverage": 1.0 + } + }, + "macro_f1_all": 0.19747553631500298, + "scores": { + "all": { + "accuracy": { + "0": 0.6887822210592908, + "1": 0.7907835796748087, + "2": 0.804979506038197 + }, + "precision": { + "0": 0.2113075222535363, + "1": 0.25581979303859764, + "2": 0.25026564649749544 + }, + "recall": { + "0": 0.6887822210592908, + "1": 0.7907835796748087, + "2": 0.804979506038197 + }, + "f1": { + "0": 0.19747553631500298, + "1": 0.2528121859712137, + "2": 0.2540250081556085 + }, + "micro_accuracy": { + "0": 0.6880627557980901, + "1": 0.7779160982264666, + "2": 0.9254945429740792 + }, + "theilU": { + "0": 0.93232229829798, + "1": 0.9297312779441991, + "2": 0.8384429842887284 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7105618960334976, + "1": 0.7907835796748087, + "2": 0.804979506038197 + }, + "precision": { + "0": 0.21594007329351536, + "1": 0.25581979303859764, + "2": 0.25026564649749544 + }, + "recall": { + "0": 0.7105618960334976, + "1": 0.7907835796748087, + "2": 0.804979506038197 + }, + "f1": { + "0": 0.20308773317860726, + "1": 0.2528121859712137, + "2": 0.2540250081556085 + }, + "micro_accuracy": { + "0": 0.7974228230364837, + "1": 0.7779160982264666, + "2": 0.9254945429740792 + }, + "theilU": { + "0": 0.9361858273521857, + "1": 0.9297312779441991, + "2": 0.8384429842887284 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + }, + "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", + "sample_ids_sha256": "51a9e4ae7818a96f935527a984a61f4fd31e43f60987ca23792f2bcafd27631a", + "list_sha256": "465e644095abe381b7b6a44f7ce05d5da0ba77bf75b76e1c53d0eba6c89f487a" + } + ], + "speed": [ + { + "model": "v2", + "device": "cpu", + "preset": "europe", + "batch": 1, + "median_ms": 779.0169740001147, + "p95_ms": 844.8682549969817, + "trial_min_ms": 765.1125749980565, + "trial_max_ms": 795.3343949993723, + "images_per_second": 1.2836690770230288 + }, + { + "model": "v2", + "device": "cpu", + "preset": "europe", + "batch": 8, + "median_ms": 5850.575989999925, + "p95_ms": 5944.596474997525, + "trial_min_ms": 5746.777247000864, + "trial_max_ms": 5879.015160000563, + "images_per_second": 1.3673867348572124 + }, + { + "model": "v2", + "device": "cpu", + "preset": "full", + "batch": 1, + "median_ms": 786.2400800004252, + "p95_ms": 878.9685310002824, + "trial_min_ms": 761.7254659999162, + "trial_max_ms": 859.430982000049, + "images_per_second": 1.271876142462057 + }, + { + "model": "v2", + "device": "cpu", + "preset": "full", + "batch": 8, + "median_ms": 5863.136789001146, + "p95_ms": 6006.966568002099, + "trial_min_ms": 5482.436258000234, + "trial_max_ms": 5984.705701001076, + "images_per_second": 1.3644573353648284 + }, + { + "model": "v2", + "device": "cpu", + "preset": "north_europe", + "batch": 1, + "median_ms": 796.1964119967888, + "p95_ms": 855.2797960001044, + "trial_min_ms": 780.1338070021302, + "trial_max_ms": 827.1140280012332, + "images_per_second": 1.255971497651051 + }, + { + "model": "v2", + "device": "cpu", + "preset": "north_europe", + "batch": 8, + "median_ms": 5765.8902689981915, + "p95_ms": 5890.259110001352, + "trial_min_ms": 5732.572058997903, + "trial_max_ms": 5802.123346998997, + "images_per_second": 1.387470039624944 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "europe", + "batch": 1, + "median_ms": 21.484739001607522, + "p95_ms": 29.487491003237665, + "trial_min_ms": 20.258914999431, + "trial_max_ms": 25.015052997332532, + "images_per_second": 46.5446659568533 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "europe", + "batch": 8, + "median_ms": 184.61432399999467, + "p95_ms": 205.47707299920148, + "trial_min_ms": 180.04209799983073, + "trial_max_ms": 199.17996799995308, + "images_per_second": 43.33358228476481 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "europe", + "batch": 32, + "median_ms": 386.83066299927304, + "p95_ms": 396.4832749989, + "trial_min_ms": 371.3045529984811, + "trial_max_ms": 390.7396550021076, + "images_per_second": 82.72353528515431 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "full", + "batch": 1, + "median_ms": 24.006794999877457, + "p95_ms": 30.195898001693422, + "trial_min_ms": 22.45696499812766, + "trial_max_ms": 26.05628300079843, + "images_per_second": 41.654873130924166 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "full", + "batch": 8, + "median_ms": 182.16871000186075, + "p95_ms": 210.70991599845001, + "trial_min_ms": 174.61328799981857, + "trial_max_ms": 198.96718300151406, + "images_per_second": 43.915335404846886 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "full", + "batch": 32, + "median_ms": 384.66329000220867, + "p95_ms": 399.98923299935996, + "trial_min_ms": 375.0903689979168, + "trial_max_ms": 393.06417599800625, + "images_per_second": 83.18963839730134 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "north_europe", + "batch": 1, + "median_ms": 22.129188000690192, + "p95_ms": 28.487998999480624, + "trial_min_ms": 21.078697001939872, + "trial_max_ms": 23.72169799855328, + "images_per_second": 45.18918633475439 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "north_europe", + "batch": 8, + "median_ms": 178.38607100202353, + "p95_ms": 190.12071899851435, + "trial_min_ms": 173.67241900137742, + "trial_max_ms": 178.83818200061796, + "images_per_second": 44.84655082688184 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "north_europe", + "batch": 32, + "median_ms": 383.29957200039644, + "p95_ms": 395.5446789987036, + "trial_min_ms": 365.05659100293997, + "trial_max_ms": 387.3802570014959, + "images_per_second": 83.48561370156422 + }, + { + "model": "v3-onnx", + "device": "cpu", + "preset": "europe", + "batch": 1, + "median_ms": 108.51240400006645, + "p95_ms": 123.77933399693575, + "trial_min_ms": 97.39962699677562, + "trial_max_ms": 113.84981300216168, + "images_per_second": 9.215536317851623 + }, + { + "model": "v3-onnx", + "device": "cpu", + "preset": "europe", + "batch": 8, + "median_ms": 822.0081180006673, + "p95_ms": 870.8548600006907, + "trial_min_ms": 820.2729259974149, + "trial_max_ms": 846.277905999159, + "images_per_second": 9.732263982329071 + }, + { + "model": "v3-onnx", + "device": "cpu", + "preset": "europe_v3", + "batch": 1, + "median_ms": 114.8194630004582, + "p95_ms": 134.62799300032202, + "trial_min_ms": 105.08139800003846, + "trial_max_ms": 124.61581699972157, + "images_per_second": 8.709324829328015 + }, + { + "model": "v3-onnx", + "device": "cpu", + "preset": "europe_v3", + "batch": 8, + "median_ms": 829.4069539988413, + "p95_ms": 904.6590870020736, + "trial_min_ms": 772.6378150000528, + "trial_max_ms": 864.606418999756, + "images_per_second": 9.645446015890501 + }, + { + "model": "v3-onnx", + "device": "cpu", + "preset": "full", + "batch": 1, + "median_ms": 112.84695399808697, + "p95_ms": 135.95893499950762, + "trial_min_ms": 111.31972099974519, + "trial_max_ms": 115.08480599877657, + "images_per_second": 8.86155952438869 + }, + { + "model": "v3-onnx", + "device": "cpu", + "preset": "full", + "batch": 8, + "median_ms": 865.4289660007635, + "p95_ms": 896.7971799975203, + "trial_min_ms": 831.8117230010103, + "trial_max_ms": 880.8760790016095, + "images_per_second": 9.243970694635777 + }, + { + "model": "v3-onnx", + "device": "cpu", + "preset": "north_europe", + "batch": 1, + "median_ms": 103.7234499999613, + "p95_ms": 124.14646799879847, + "trial_min_ms": 97.68370800156845, + "trial_max_ms": 119.08456600212958, + "images_per_second": 9.6410213890916 + }, + { + "model": "v3-onnx", + "device": "cpu", + "preset": "north_europe", + "batch": 8, + "median_ms": 824.3145499982347, + "p95_ms": 861.5687530000287, + "trial_min_ms": 791.8309580018104, + "trial_max_ms": 852.1146800012502, + "images_per_second": 9.705033109044518 + }, + { + "model": "v3-onnx", + "device": "cpu", + "preset": "north_europe_v3", + "batch": 1, + "median_ms": 112.1231870019983, + "p95_ms": 126.15529799950309, + "trial_min_ms": 102.30596700057504, + "trial_max_ms": 123.34861300041666, + "images_per_second": 8.918761825617548 + }, + { + "model": "v3-onnx", + "device": "cpu", + "preset": "north_europe_v3", + "batch": 8, + "median_ms": 818.1298460003745, + "p95_ms": 854.9832339995191, + "trial_min_ms": 797.6780380013224, + "trial_max_ms": 835.7702249995782, + "images_per_second": 9.778398916883345 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "europe", + "batch": 1, + "median_ms": 31.974444002116797, + "p95_ms": 36.03833899978781, + "trial_min_ms": 31.499988999712514, + "trial_max_ms": 33.238082000025315, + "images_per_second": 31.274976976418955 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "europe", + "batch": 8, + "median_ms": 190.02189400271163, + "p95_ms": 203.95815500160097, + "trial_min_ms": 181.0136739986774, + "trial_max_ms": 194.3993130007584, + "images_per_second": 42.100411860360886 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "europe", + "batch": 32, + "median_ms": 751.9461080009933, + "p95_ms": 938.8219909997133, + "trial_min_ms": 733.0324560025474, + "trial_max_ms": 805.7348090005689, + "images_per_second": 42.556241277809406 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "europe_v3", + "batch": 1, + "median_ms": 33.4465949999867, + "p95_ms": 38.38332599843852, + "trial_min_ms": 30.618580000009388, + "trial_max_ms": 35.84958700230345, + "images_per_second": 29.898409688651345 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "europe_v3", + "batch": 8, + "median_ms": 194.54678400143166, + "p95_ms": 211.8438170000445, + "trial_min_ms": 181.03928100026678, + "trial_max_ms": 202.35563499954878, + "images_per_second": 41.121214319025334 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "europe_v3", + "batch": 32, + "median_ms": 774.5358419997501, + "p95_ms": 949.0962469972146, + "trial_min_ms": 764.2361749967677, + "trial_max_ms": 784.2745119996835, + "images_per_second": 41.31506673387792 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "full", + "batch": 1, + "median_ms": 38.574180001887726, + "p95_ms": 41.16026200063061, + "trial_min_ms": 37.06625300037558, + "trial_max_ms": 40.838097000232665, + "images_per_second": 25.92407667385444 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "full", + "batch": 8, + "median_ms": 202.19900700249127, + "p95_ms": 211.71870800026227, + "trial_min_ms": 198.48519999868586, + "trial_max_ms": 202.6014760012913, + "images_per_second": 39.56498164158359 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "full", + "batch": 32, + "median_ms": 804.4566509997821, + "p95_ms": 961.4865859985002, + "trial_min_ms": 794.1813469988119, + "trial_max_ms": 830.9064189998026, + "images_per_second": 39.77840193157738 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "north_europe", + "batch": 1, + "median_ms": 32.848500999534735, + "p95_ms": 41.949999998905696, + "trial_min_ms": 30.442417999438476, + "trial_max_ms": 40.2992199997243, + "images_per_second": 30.44278945983453 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "north_europe", + "batch": 8, + "median_ms": 186.86159300341387, + "p95_ms": 231.81681699861656, + "trial_min_ms": 182.11845200130483, + "trial_max_ms": 189.51840799854835, + "images_per_second": 42.81243604646913 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "north_europe", + "batch": 32, + "median_ms": 753.8683550010319, + "p95_ms": 914.5665709984314, + "trial_min_ms": 743.5950600010983, + "trial_max_ms": 760.9614780012635, + "images_per_second": 42.447729484488306 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "north_europe_v3", + "batch": 1, + "median_ms": 32.764373001555214, + "p95_ms": 37.03474800204276, + "trial_min_ms": 30.950796000979608, + "trial_max_ms": 35.4559719999088, + "images_per_second": 30.520956404462048 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "north_europe_v3", + "batch": 8, + "median_ms": 188.96362599843997, + "p95_ms": 209.1836069994315, + "trial_min_ms": 176.49814899777994, + "trial_max_ms": 197.84098799937055, + "images_per_second": 42.336190140985366 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "north_europe_v3", + "batch": 32, + "median_ms": 760.7565639991662, + "p95_ms": 922.7298170007998, + "trial_min_ms": 737.9431469998963, + "trial_max_ms": 802.070398000069, + "images_per_second": 42.063389938801855 + }, + { + "model": "v3-torch", + "device": "cpu", + "preset": "europe", + "batch": 1, + "median_ms": 139.97511000343366, + "p95_ms": 157.91612699831603, + "trial_min_ms": 132.2067729997798, + "trial_max_ms": 148.36850999927265, + "images_per_second": 7.144127266450939 + }, + { + "model": "v3-torch", + "device": "cpu", + "preset": "europe", + "batch": 8, + "median_ms": 1020.2903719982714, + "p95_ms": 1126.8082070018863, + "trial_min_ms": 990.7244099995296, + "trial_max_ms": 1102.0994509999582, + "images_per_second": 7.840905118345617 + }, + { + "model": "v3-torch", + "device": "cpu", + "preset": "europe_v3", + "batch": 1, + "median_ms": 156.06195000145817, + "p95_ms": 174.66607700043824, + "trial_min_ms": 155.75652500047, + "trial_max_ms": 160.84377999868593, + "images_per_second": 6.407711809256878 + }, + { + "model": "v3-torch", + "device": "cpu", + "preset": "europe_v3", + "batch": 8, + "median_ms": 1013.887937002437, + "p95_ms": 1098.4262460005993, + "trial_min_ms": 994.4540770011372, + "trial_max_ms": 1078.8947210021433, + "images_per_second": 7.8904183667990235 + }, + { + "model": "v3-torch", + "device": "cpu", + "preset": "full", + "batch": 1, + "median_ms": 162.19867499967222, + "p95_ms": 183.9224630020908, + "trial_min_ms": 160.09652899811044, + "trial_max_ms": 162.8700189976371, + "images_per_second": 6.165278477164014 + }, + { + "model": "v3-torch", + "device": "cpu", + "preset": "full", + "batch": 8, + "median_ms": 1099.8652199996286, + "p95_ms": 1168.8887240015902, + "trial_min_ms": 1066.5678989971639, + "trial_max_ms": 1130.8798369973374, + "images_per_second": 7.273618489366089 + }, + { + "model": "v3-torch", + "device": "cpu", + "preset": "north_europe", + "batch": 1, + "median_ms": 148.2759509999596, + "p95_ms": 161.5721569978632, + "trial_min_ms": 142.76755700120702, + "trial_max_ms": 153.29030800057808, + "images_per_second": 6.744182001572678 + }, + { + "model": "v3-torch", + "device": "cpu", + "preset": "north_europe", + "batch": 8, + "median_ms": 1082.5685600029828, + "p95_ms": 1133.4843360018567, + "trial_min_ms": 1013.1757369999832, + "trial_max_ms": 1087.7670109985047, + "images_per_second": 7.3898321968429945 + }, + { + "model": "v3-torch", + "device": "cpu", + "preset": "north_europe_v3", + "batch": 1, + "median_ms": 139.39189299708232, + "p95_ms": 159.55598099753843, + "trial_min_ms": 129.97479099794873, + "trial_max_ms": 153.69803499925183, + "images_per_second": 7.174018362896696 + }, + { + "model": "v3-torch", + "device": "cpu", + "preset": "north_europe_v3", + "batch": 8, + "median_ms": 1022.699465000187, + "p95_ms": 1107.3616229987238, + "trial_min_ms": 1004.2549429999781, + "trial_max_ms": 1085.7946290016116, + "images_per_second": 7.8224349124877435 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "europe", + "batch": 1, + "median_ms": 35.489638001308776, + "p95_ms": 57.598117000452476, + "trial_min_ms": 33.89597299974412, + "trial_max_ms": 52.630236998084, + "images_per_second": 28.177238662257484 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "europe", + "batch": 8, + "median_ms": 175.51926099986304, + "p95_ms": 185.99682900094194, + "trial_min_ms": 174.19886200150358, + "trial_max_ms": 176.5289369977836, + "images_per_second": 45.57904331654087 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "europe", + "batch": 32, + "median_ms": 728.2977190006932, + "p95_ms": 884.3167390004965, + "trial_min_ms": 698.9123559978907, + "trial_max_ms": 760.5062379989249, + "images_per_second": 43.938075274913146 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "europe_v3", + "batch": 1, + "median_ms": 35.27583799950662, + "p95_ms": 48.10837100012577, + "trial_min_ms": 33.24329500173917, + "trial_max_ms": 41.260214002249995, + "images_per_second": 28.348015432375732 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "europe_v3", + "batch": 8, + "median_ms": 178.32208699837793, + "p95_ms": 194.90453400067054, + "trial_min_ms": 170.77715800041915, + "trial_max_ms": 192.54146399907768, + "images_per_second": 44.86264228206779 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "europe_v3", + "batch": 32, + "median_ms": 724.5190200010256, + "p95_ms": 921.8273680016864, + "trial_min_ms": 717.8096630013897, + "trial_max_ms": 746.3200019992655, + "images_per_second": 44.167232490259124 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "full", + "batch": 1, + "median_ms": 45.16958599924692, + "p95_ms": 55.23221900148201, + "trial_min_ms": 36.25714399822755, + "trial_max_ms": 48.02743799882592, + "images_per_second": 22.1387904688051 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "full", + "batch": 8, + "median_ms": 191.97120100216125, + "p95_ms": 224.58959399955347, + "trial_min_ms": 185.349908999342, + "trial_max_ms": 204.552421997505, + "images_per_second": 41.672917386759146 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "full", + "batch": 32, + "median_ms": 758.8707609975245, + "p95_ms": 956.4475619990844, + "trial_min_ms": 727.8204619979078, + "trial_max_ms": 767.2486240007856, + "images_per_second": 42.16791797055993 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "north_europe", + "batch": 1, + "median_ms": 36.8857930006925, + "p95_ms": 50.996198999200715, + "trial_min_ms": 32.99324700128636, + "trial_max_ms": 48.603333001665305, + "images_per_second": 27.11070899251714 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "north_europe", + "batch": 8, + "median_ms": 171.64449200208765, + "p95_ms": 187.66877799862414, + "trial_min_ms": 168.77017200022237, + "trial_max_ms": 178.43948399968212, + "images_per_second": 46.6079622287134 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "north_europe", + "batch": 32, + "median_ms": 718.6301279980398, + "p95_ms": 923.7060959967494, + "trial_min_ms": 686.7490500007989, + "trial_max_ms": 768.8245279969124, + "images_per_second": 44.52916563510302 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "north_europe_v3", + "batch": 1, + "median_ms": 35.540962002414744, + "p95_ms": 50.400192998495186, + "trial_min_ms": 33.24394499941263, + "trial_max_ms": 46.86532299820101, + "images_per_second": 28.136548468554604 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "north_europe_v3", + "batch": 8, + "median_ms": 185.47856499935733, + "p95_ms": 197.47024499883992, + "trial_min_ms": 182.4952110000595, + "trial_max_ms": 187.0011249993695, + "images_per_second": 43.131668611021006 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "north_europe_v3", + "batch": 32, + "median_ms": 717.1896030013158, + "p95_ms": 890.1827099980437, + "trial_min_ms": 697.0991640009743, + "trial_max_ms": 741.660445000889, + "images_per_second": 44.61860554877744 + } + ], + "resources": [ + { + "model": "v2", + "device": "cpu", + "load_first_seconds": { + "median": 209.39651592600057, + "min": 198.43300686099974, + "max": 209.59208342499915 + }, + "rss_mib": { + "median": 4122.8125, + "min": 4122.08203125, + "max": 4123.83203125 + }, + "cuda_allocated_mib": { + "median": 0.0, + "min": 0.0, + "max": 0.0 + }, + "cuda_reserved_mib": { + "median": 0.0, + "min": 0.0, + "max": 0.0 + } + }, + { + "model": "v2", + "device": "cuda:0", + "load_first_seconds": { + "median": 209.60287212600088, + "min": 208.6747407030016, + "max": 210.06140313599826 + }, + "rss_mib": { + "median": 4122.58203125, + "min": 4122.25390625, + "max": 4123.69921875 + }, + "cuda_allocated_mib": { + "median": 1935.630859375, + "min": 1935.630859375, + "max": 1935.630859375 + }, + "cuda_reserved_mib": { + "median": 2072.0, + "min": 2072.0, + "max": 2072.0 + } + }, + { + "model": "v3-onnx", + "device": "cpu", + "load_first_seconds": { + "median": 0.38248996100082877, + "min": 0.36779166300038924, + "max": 0.40503490100309136 + }, + "rss_mib": { + "median": 586.5078125, + "min": 572.76953125, + "max": 590.7421875 + }, + "cuda_allocated_mib": null, + "cuda_reserved_mib": null + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "load_first_seconds": { + "median": 1.6538925760032726, + "min": 1.6474964560002263, + "max": 1.6716580809988955 + }, + "rss_mib": { + "median": 1469.08984375, + "min": 1461.17578125, + "max": 1476.80859375 + }, + "cuda_allocated_mib": null, + "cuda_reserved_mib": null + }, + { + "model": "v3-torch", + "device": "cpu", + "load_first_seconds": { + "median": 40.465289795996796, + "min": 39.93423429299946, + "max": 40.48855051400096 + }, + "rss_mib": { + "median": 1573.19921875, + "min": 1568.90234375, + "max": 1636.4609375 + }, + "cuda_allocated_mib": { + "median": 0.0, + "min": 0.0, + "max": 0.0 + }, + "cuda_reserved_mib": { + "median": 0.0, + "min": 0.0, + "max": 0.0 + } + }, + { + "model": "v3-torch", + "device": "cuda:0", + "load_first_seconds": { + "median": 41.788645010001346, + "min": 41.23758513699795, + "max": 42.60878924099961 + }, + "rss_mib": { + "median": 1897.02734375, + "min": 1895.94921875, + "max": 1898.734375 + }, + "cuda_allocated_mib": { + "median": 865.3681640625, + "min": 865.3681640625, + "max": 865.3681640625 + }, + "cuda_reserved_mib": { + "median": 1348.0, + "min": 1348.0, + "max": 1348.0 + } + } + ], + "v3_gpu_components": [ + { + "model": "v3-onnx", + "batch": 1, + "stage": "end_to_end", + "observations": 21, + "median_ms": 32.848500999534735 + }, + { + "model": "v3-onnx", + "batch": 1, + "stage": "prepared", + "observations": 21, + "median_ms": 13.389879000897054 + }, + { + "model": "v3-onnx", + "batch": 1, + "stage": "preprocessing", + "observations": 21, + "median_ms": 16.602722000243375 + }, + { + "model": "v3-onnx", + "batch": 8, + "stage": "end_to_end", + "observations": 21, + "median_ms": 186.86159300341387 + }, + { + "model": "v3-onnx", + "batch": 8, + "stage": "prepared", + "observations": 21, + "median_ms": 50.60579099881579 + }, + { + "model": "v3-onnx", + "batch": 8, + "stage": "preprocessing", + "observations": 21, + "median_ms": 134.49058500191313 + }, + { + "model": "v3-onnx", + "batch": 32, + "stage": "end_to_end", + "observations": 21, + "median_ms": 753.8683550010319 + }, + { + "model": "v3-onnx", + "batch": 32, + "stage": "prepared", + "observations": 21, + "median_ms": 180.64068800231325 + }, + { + "model": "v3-onnx", + "batch": 32, + "stage": "preprocessing", + "observations": 21, + "median_ms": 559.359699000197 + }, + { + "model": "v3-torch", + "batch": 1, + "stage": "end_to_end", + "observations": 21, + "median_ms": 36.8857930006925 + }, + { + "model": "v3-torch", + "batch": 1, + "stage": "prepared", + "observations": 21, + "median_ms": 18.508613997255452 + }, + { + "model": "v3-torch", + "batch": 1, + "stage": "preprocessing", + "observations": 21, + "median_ms": 14.880823000567034 + }, + { + "model": "v3-torch", + "batch": 8, + "stage": "end_to_end", + "observations": 21, + "median_ms": 171.64449200208765 + }, + { + "model": "v3-torch", + "batch": 8, + "stage": "prepared", + "observations": 21, + "median_ms": 46.71529999905033 + }, + { + "model": "v3-torch", + "batch": 8, + "stage": "preprocessing", + "observations": 21, + "median_ms": 126.31524700191221 + }, + { + "model": "v3-torch", + "batch": 32, + "stage": "end_to_end", + "observations": 21, + "median_ms": 718.6301279980398 + }, + { + "model": "v3-torch", + "batch": 32, + "stage": "prepared", + "observations": 21, + "median_ms": 181.38111200096318 + }, + { + "model": "v3-torch", + "batch": 32, + "stage": "preprocessing", + "observations": 21, + "median_ms": 519.4957230014552 + } + ], + "quality_policy": { + "accuracy": "Lead: mini_metrics accuracy (macro); micro_accuracy retained; all and known scopes at each rank", + "macro_f1": "mini_metrics all.f1.0; equal weight over union of truth and predicted species", + "threshold": 0, + "optimal": false, + "known_only": false, + "known_accuracy": "mini_metrics known.micro_accuracy; known_only=True; truth in active preset vocabulary" + }, + "sources_sha256": { + "local-evidence/mambo-v3/quality-full/comparison.json": "b9ac190c4ca959c6a5791adc5ceabc4a500a25f9724ef5ab7ebed57cfd5e4de8", + "local-evidence/mambo-release-comparison-quality/v2-full/report.json": "c9a98044cbc97ab0033b1f794e284b8f8504f26fc0b7574dfa619c16df6db263", + "local-evidence/mambo-release-comparison-quality/v2-full/north_europe/metrics.json": "11340899a76a11997c7b3a4813f0824a730177478bab1d5a9270de851f7fa368", + "local-evidence/mambo-release-comparison-quality/v2-full/europe/metrics.json": "e6bccab2d2d6cee8bc3b9322a404dcdcb456c038ace002efb430aba1191c300b", + "local-evidence/mambo-release-comparison-quality/v2-full/full/metrics.json": "1e6a2aabc59aacc10d03c4653de71b549ddf4a003b7a096d04a4cc7c9c2cc9b2", + "local-evidence/mambo-v3/quality-full/torch-cuda-0-prediction/report.json": "ba80d1580f5b563bd5eb0d9af3af392c6115766c4dcebe619f68e034c938b47d", + "local-evidence/mambo-v3/quality-full/torch-cuda-0-prediction/north_europe/metrics.json": "da3927fad7f5901391b9a9033027d6e20f0a6f4a219e1d7d215bacda1b301599", + "local-evidence/mambo-v3/quality-full/torch-cuda-0-prediction/europe/metrics.json": "a82d3c13819caa0c4e39f933b2dcc8098382172f7a8a2fc00d9cc6c4518cde27", + "local-evidence/mambo-v3/quality-full/torch-cuda-0-prediction/full/metrics.json": "b3a724e48d3ecd783509d90899b0d96ec2f2802a2304551db5c595014561297a", + "local-evidence/mambo-v3/quality-full/torch-cuda-0-prediction/north_europe_v3/metrics.json": "6d434a6483fd447d80b5cfd55d57cfe8c65a7420f52cbd413f2e57cee3b23725", + "local-evidence/mambo-v3/quality-full/torch-cuda-0-prediction/europe_v3/metrics.json": "762b26022265c8bfedcc4745ea12107b6957eca098ba6628f6d9a149b39b77ff", + "local-evidence/mambo-v3/performance/trial-0-torch-cpu-prediction-t4/report.json": "f75f2fd264d09ab6aa7bd194e7a6f8afc28980e41e81e164330f0efe5746e88f", + "local-evidence/mambo-v3/performance/trial-0-onnx-cpu-prediction-t4/report.json": "dbec7f2753ea649998ec3d1c6d5d75608d1465d273755910f531902247335047", + "local-evidence/mambo-v3/performance/trial-0-torch-cuda-0-prediction-t4/report.json": "e9d75960d5ce34a9040f6d0c1af2476bad9c3edcfaa0cb581fdf37d3bc8cc1eb", + "local-evidence/mambo-v3/performance/trial-0-onnx-cuda-0-prediction-t4/report.json": "41705c1cdd32397a1b7504eeb8b018308fee04716e807c9e20551f885ca9e5d2", + "local-evidence/mambo-v3/performance/trial-1-onnx-cuda-0-prediction-t4/report.json": "2f85c06d080971c8d677442928097f46939eaf7010707af25915c71f01c16720", + "local-evidence/mambo-v3/performance/trial-1-torch-cuda-0-prediction-t4/report.json": "38d58fb969176851aba53393228946658242a63d15964085f5c55ba8c617fbe7", + "local-evidence/mambo-v3/performance/trial-1-onnx-cpu-prediction-t4/report.json": "983887ef2d024f811d17ca21e5db55b7dfdcb26f11528a2cdf122fa3f9683e06", + "local-evidence/mambo-v3/performance/trial-1-torch-cpu-prediction-t4/report.json": "e092bf39351e6bb1608c643b319ab3ebdd6168498a9aea2381d07e9d6bc88ae8", + "local-evidence/mambo-v3/performance/trial-2-torch-cpu-prediction-t4/report.json": "ca3ffa96c7cd0c410f6804a94c66aa6fd9e3076739e76ac5276877131ec3acd7", + "local-evidence/mambo-v3/performance/trial-2-onnx-cpu-prediction-t4/report.json": "3c49eb94eeec2316838d18c1e691756ef5ab7e215cffa1c50084bcf0772d7ad5", + "local-evidence/mambo-v3/performance/trial-2-torch-cuda-0-prediction-t4/report.json": "a3958a47226f021d42acdc123d81a7e08540d9113a2ce4f0b6559eb7022fff04", + "local-evidence/mambo-v3/performance/trial-2-onnx-cuda-0-prediction-t4/report.json": "927bf5395c71330f8d924a621e060d73ba5cc48210013f0880d6ec1360ccf28f", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-0-v2-cpu/report.json": "21cfb5b069af6a0e008f3b017a6514409b447d2f63d9b7df4da9972113b1aab8", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-0-v3-torch-cpu/report.json": "ea44ddb694bd1922a717775711c1be2fc167223bba2f6827d69ee692ebefe52e", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-0-v3-onnx-cpu/report.json": "7933e6411f95991c742bf7851fc404918ae8e86e7a03c423d4f07f2d76270f50", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-0-v2-cuda-0/report.json": "8f01c6b3299de7ca8c1e122f3a3a41cc71e0551f27800f42f0729255ce67450a", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-0-v3-torch-cuda-0/report.json": "079ffb75a89f7db4184f936482de647ddc9216d2cc56ca471fd70e2799a074c7", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-0-v3-onnx-cuda-0/report.json": "5985213e519f137a6f8f5d118d43a66692579608aa5169c355a4fc3f0c9ac74b", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-1-v3-onnx-cuda-0/report.json": "1433fafea9fbb203400c83c83b68112b72dd74f0397ace1fa5eea7032899ddd3", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-1-v3-torch-cuda-0/report.json": "7e8a7c1f30e5102378d230fb1d5ca1d1a5cdef106dff66f1cf408ffeaf17f115", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-1-v2-cuda-0/report.json": "f9deaee77c4ee1d3ff00b63c45959cc2dcddbbcd6ee890dcbd4bf9e5ed5cbb69", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-1-v3-onnx-cpu/report.json": "db7e71075abe904f239498fa36c831f1dce1c40284c553f54680cc4d7e62b54f", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-1-v3-torch-cpu/report.json": "6cbadadbd51a877c335516e8abb7420ecd553e2146fb59b6275010fe58cbeabc", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-1-v2-cpu/report.json": "1d3ccb09d35977644d7f13584717b0df977d636abef06594bb55c1d1acb4f430", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-2-v2-cpu/report.json": "9ce8be6fa3462f4ff7440b040eb5ffa54ec6e80d4eedfdc8bfc2e0c21da3d353", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-2-v3-torch-cpu/report.json": "3332f479ebd7213ac6301f507bb63e242d4bb3ac4c5e8e4a7e0da1cfe7eaca2c", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-2-v3-onnx-cpu/report.json": "c0d664560c4f71d97f10734348b2f37f564bedd76cd2e996fab0b0f7e3f5f8fb", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-2-v2-cuda-0-retry1/report.json": "5853f83dee6b7009f8038327253fe92f1baa3d0454a225edf6f192560ebab0f3", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-2-v3-torch-cuda-0/report.json": "c348b2c2af88587f075c562c94734bb68b0a29177085baacd03d669f3e2ee259", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-2-v3-onnx-cuda-0/report.json": "cabf7f6338f2a2741838547315c0da33da45ce021c26e4b8e2e043d9bd4168b6" + }, + "timing_bank_sha256": "aa2aea4ecd76bbce46a38a4787f632763fe60b6296d27aa6a2ed633c59e15b63", + "protocol": "Same laptop and image bank; original v2 preprocessing/CUDA autocast; v2 CPU requires float32 input cast; v3 FP32; four threads; three trials; predictions only." + }, + "quality": [ + { + "model": "torch", + "precision": "fp16", + "preset": "north_europe", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.7078274215552524, + "micro_accuracy_known": 0.8203288667536266, + "macro_accuracy_all": 0.7124755690715492, + "macro_accuracy_known": 0.7350044408208473, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58639, + "list_coverage": 0.9999829467939972, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7936903137789905, + "micro_accuracy_known": 0.7937038489742322, + "macro_accuracy_all": 0.8053483819748223, + "macro_accuracy_known": 0.8078572554389183, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9296896316507504, + "micro_accuracy_known": 0.9296896316507504, + "macro_accuracy_all": 0.8105098078966045, + "macro_accuracy_known": 0.8105098078966045, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.7124755690715492, + "1": 0.8053483819748223, + "2": 0.8105098078966045 + }, + "precision": { + "0": 0.2634270457338045, + "1": 0.31893660877341173, + "2": 0.27535126159560075 + }, + "recall": { + "0": 0.7124755690715492, + "1": 0.8053483819748223, + "2": 0.8105098078966045 + }, + "f1": { + "0": 0.25428952382168735, + "1": 0.3204124099108478, + "2": 0.2804463369346697 + }, + "micro_accuracy": { + "0": 0.7078274215552524, + "1": 0.7936903137789905, + "2": 0.9296896316507504 + }, + "theilU": { + "0": 0.928300449968092, + "1": 0.9269683891259273, + "2": 0.848717056770075 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7350044408208473, + "1": 0.8078572554389183, + "2": 0.8105098078966045 + }, + "precision": { + "0": 0.2676065928162877, + "1": 0.31896401442542444, + "2": 0.27535126159560075 + }, + "recall": { + "0": 0.7350044408208473, + "1": 0.8078572554389183, + "2": 0.8105098078966045 + }, + "f1": { + "0": 0.2606923077861283, + "1": 0.32088253381207055, + "2": 0.2804463369346697 + }, + "micro_accuracy": { + "0": 0.8203288667536266, + "1": 0.7937038489742322, + "2": 0.9296896316507504 + }, + "theilU": { + "0": 0.9313351406548803, + "1": 0.9269818797430123, + "2": 0.848717056770075 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + }, + { + "model": "torch", + "precision": "fp16", + "preset": "europe", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.6894270122783083, + "micro_accuracy_known": 0.7990039131981501, + "macro_accuracy_all": 0.6904573601499047, + "macro_accuracy_known": 0.7122900039491111, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7794167803547067, + "micro_accuracy_known": 0.7794167803547067, + "macro_accuracy_all": 0.7927569371584571, + "macro_accuracy_known": 0.7927569371584571, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9285300136425648, + "micro_accuracy_known": 0.9285300136425648, + "macro_accuracy_all": 0.8061547662632332, + "macro_accuracy_known": 0.8061547662632332, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.6904573601499047, + "1": 0.7927569371584571, + "2": 0.8061547662632332 + }, + "precision": { + "0": 0.21308377178370788, + "1": 0.2577674325030351, + "2": 0.2517251364434932 + }, + "recall": { + "0": 0.6904573601499047, + "1": 0.7927569371584571, + "2": 0.8061547662632332 + }, + "f1": { + "0": 0.19974835307971503, + "1": 0.25521877922468866, + "2": 0.2555840946637753 + }, + "micro_accuracy": { + "0": 0.6894270122783083, + "1": 0.7794167803547067, + "2": 0.9285300136425648 + }, + "theilU": { + "0": 0.9327685730735747, + "1": 0.9303872077924281, + "2": 0.8414042795502794 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7122900039491111, + "1": 0.7927569371584571, + "2": 0.8061547662632332 + }, + "precision": { + "0": 0.21751022464426337, + "1": 0.2577674325030351, + "2": 0.2517251364434932 + }, + "recall": { + "0": 0.7122900039491111, + "1": 0.7927569371584571, + "2": 0.8061547662632332 + }, + "f1": { + "0": 0.2052193214139764, + "1": 0.25521877922468866, + "2": 0.2555840946637753 + }, + "micro_accuracy": { + "0": 0.7990039131981501, + "1": 0.7794167803547067, + "2": 0.9285300136425648 + }, + "theilU": { + "0": 0.9362130669456851, + "1": 0.9303872077924281, + "2": 0.8414042795502794 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + }, + { + "model": "torch", + "precision": "fp16", + "preset": "full", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.5842087312414734, + "micro_accuracy_known": 0.6770623344796237, + "macro_accuracy_all": 0.5800914186056899, + "macro_accuracy_known": 0.5984342302612058, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7057128240109141, + "micro_accuracy_known": 0.7057128240109141, + "macro_accuracy_all": 0.7129759960732965, + "macro_accuracy_known": 0.7129759960732965, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9029502046384721, + "micro_accuracy_known": 0.9029502046384721, + "macro_accuracy_all": 0.784246040298466, + "macro_accuracy_known": 0.784246040298466, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.5800914186056899, + "1": 0.7129759960732965, + "2": 0.784246040298466 + }, + "precision": { + "0": 0.11941327816354223, + "1": 0.1394431837512301, + "2": 0.1882961794945315 + }, + "recall": { + "0": 0.5800914186056899, + "1": 0.7129759960732965, + "2": 0.784246040298466 + }, + "f1": { + "0": 0.09729142790239681, + "1": 0.1268067151804599, + "2": 0.19361355430273816 + }, + "micro_accuracy": { + "0": 0.5842087312414734, + "1": 0.7057128240109141, + "2": 0.9029502046384721 + }, + "theilU": { + "0": 0.9380984507134764, + "1": 0.9278203586503335, + "2": 0.8029884477926725 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.5984342302612058, + "1": 0.7129759960732965, + "2": 0.784246040298466 + }, + "precision": { + "0": 0.12352484541958572, + "1": 0.1394431837512301, + "2": 0.1882961794945315 + }, + "recall": { + "0": 0.5984342302612058, + "1": 0.7129759960732965, + "2": 0.784246040298466 + }, + "f1": { + "0": 0.10067516090358233, + "1": 0.1268067151804599, + "2": 0.19361355430273816 + }, + "micro_accuracy": { + "0": 0.6770623344796237, + "1": 0.7057128240109141, + "2": 0.9029502046384721 + }, + "theilU": { + "0": 0.9436338812191157, + "1": 0.9278203586503335, + "2": 0.8029884477926725 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + }, + { + "model": "torch", + "precision": "fp16", + "preset": "north_europe_v3", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.7031548431105048, + "micro_accuracy_known": 0.8149136329499189, + "macro_accuracy_all": 0.704628249754435, + "macro_accuracy_known": 0.7269089849245357, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7888472032742155, + "micro_accuracy_known": 0.7888472032742155, + "macro_accuracy_all": 0.8000993660812793, + "macro_accuracy_known": 0.8000993660812793, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9288540245566167, + "micro_accuracy_known": 0.9288540245566167, + "macro_accuracy_all": 0.8066151835359162, + "macro_accuracy_known": 0.8066151835359162, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.704628249754435, + "1": 0.8000993660812793, + "2": 0.8066151835359162 + }, + "precision": { + "0": 0.24730856379330513, + "1": 0.30404516864512815, + "2": 0.26911334290120537 + }, + "recall": { + "0": 0.704628249754435, + "1": 0.8000993660812793, + "2": 0.8066151835359162 + }, + "f1": { + "0": 0.2368364750172347, + "1": 0.30405829620707303, + "2": 0.27317213148165537 + }, + "micro_accuracy": { + "0": 0.7031548431105048, + "1": 0.7888472032742155, + "2": 0.9288540245566167 + }, + "theilU": { + "0": 0.9297081356830714, + "1": 0.9278811825938204, + "2": 0.8463131556985152 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7269089849245357, + "1": 0.8000993660812793, + "2": 0.8066151835359162 + }, + "precision": { + "0": 0.2516551965945558, + "1": 0.30404516864512815, + "2": 0.26911334290120537 + }, + "recall": { + "0": 0.7269089849245357, + "1": 0.8000993660812793, + "2": 0.8066151835359162 + }, + "f1": { + "0": 0.24302911458287843, + "1": 0.30405829620707303, + "2": 0.27317213148165537 + }, + "micro_accuracy": { + "0": 0.8149136329499189, + "1": 0.7888472032742155, + "2": 0.9288540245566167 + }, + "theilU": { + "0": 0.9329238752080722, + "1": 0.9278811825938204, + "2": 0.8463131556985152 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + }, + { + "model": "torch", + "precision": "fp16", + "preset": "europe_v3", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.6879945429740791, + "micro_accuracy_known": 0.7973437685284004, + "macro_accuracy_all": 0.6886240058738285, + "macro_accuracy_known": 0.7103986779963212, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7779331514324693, + "micro_accuracy_known": 0.7779331514324693, + "macro_accuracy_all": 0.7907596138745981, + "macro_accuracy_known": 0.7907596138745981, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9252899045020464, + "micro_accuracy_known": 0.9252899045020464, + "macro_accuracy_all": 0.804801469829159, + "macro_accuracy_known": 0.804801469829159, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.6886240058738285, + "1": 0.7907596138745981, + "2": 0.804801469829159 + }, + "precision": { + "0": 0.21178593938637336, + "1": 0.25597447312765065, + "2": 0.25018741937505296 + }, + "recall": { + "0": 0.6886240058738285, + "1": 0.7907596138745981, + "2": 0.804801469829159 + }, + "f1": { + "0": 0.1978902721150327, + "1": 0.25283249885833836, + "2": 0.25394065720716125 + }, + "micro_accuracy": { + "0": 0.6879945429740791, + "1": 0.7779331514324693, + "2": 0.9252899045020464 + }, + "theilU": { + "0": 0.9323203923796567, + "1": 0.9297196214314329, + "2": 0.8382838670363196 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7103986779963212, + "1": 0.7907596138745981, + "2": 0.804801469829159 + }, + "precision": { + "0": 0.2164221653533803, + "1": 0.25597447312765065, + "2": 0.25018741937505296 + }, + "recall": { + "0": 0.7103986779963212, + "1": 0.7907596138745981, + "2": 0.804801469829159 + }, + "f1": { + "0": 0.20351606400355202, + "1": 0.25283249885833836, + "2": 0.25394065720716125 + }, + "micro_accuracy": { + "0": 0.7973437685284004, + "1": 0.7779331514324693, + "2": 0.9252899045020464 + }, + "theilU": { + "0": 0.9362292436999937, + "1": 0.9297196214314329, + "2": 0.8382838670363196 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + }, + { + "model": "onnx", + "precision": "tf32", + "preset": "north_europe", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.7078444747612551, + "micro_accuracy_known": 0.8203486303806474, + "macro_accuracy_all": 0.7123551106111988, + "macro_accuracy_known": 0.7348801733973236, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58639, + "list_coverage": 0.9999829467939972, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7936221009549795, + "micro_accuracy_known": 0.7936356349869541, + "macro_accuracy_all": 0.805001260196705, + "macro_accuracy_known": 0.8075090522845452, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9298601637107776, + "micro_accuracy_known": 0.9298601637107776, + "macro_accuracy_all": 0.8106416408810809, + "macro_accuracy_known": 0.8106416408810809, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.7123551106111988, + "1": 0.805001260196705, + "2": 0.8106416408810809 + }, + "precision": { + "0": 0.2634302800489512, + "1": 0.3188298295664697, + "2": 0.27563597431734277 + }, + "recall": { + "0": 0.7123551106111988, + "1": 0.805001260196705, + "2": 0.8106416408810809 + }, + "f1": { + "0": 0.25432102340018437, + "1": 0.3212342539755369, + "2": 0.28076917349510716 + }, + "micro_accuracy": { + "0": 0.7078444747612551, + "1": 0.7936221009549795, + "2": 0.9298601637107776 + }, + "theilU": { + "0": 0.9282787583085454, + "1": 0.9270081304640697, + "2": 0.8488811049574605 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7348801733973236, + "1": 0.8075090522845452, + "2": 0.8106416408810809 + }, + "precision": { + "0": 0.26759865685833206, + "1": 0.31885723521848236, + "2": 0.27563597431734277 + }, + "recall": { + "0": 0.7348801733973236, + "1": 0.8075090522845452, + "2": 0.8106416408810809 + }, + "f1": { + "0": 0.26071387372659355, + "1": 0.32170684925385246, + "2": 0.28076917349510716 + }, + "micro_accuracy": { + "0": 0.8203486303806474, + "1": 0.7936356349869541, + "2": 0.9298601637107776 + }, + "theilU": { + "0": 0.931297601666784, + "1": 0.9270216229111814, + "2": 0.8488811049574605 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + }, + { + "model": "onnx", + "precision": "tf32", + "preset": "europe", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.6894952251023192, + "micro_accuracy_known": 0.7990829677062334, + "macro_accuracy_all": 0.6906260019361401, + "macro_accuracy_known": 0.712463978281947, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7794338335607094, + "micro_accuracy_known": 0.7794338335607094, + "macro_accuracy_all": 0.7928148275159873, + "macro_accuracy_known": 0.7928148275159873, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.928581173260573, + "micro_accuracy_known": 0.928581173260573, + "macro_accuracy_all": 0.8063031248841592, + "macro_accuracy_known": 0.8063031248841592, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.6906260019361401, + "1": 0.7928148275159873, + "2": 0.8063031248841592 + }, + "precision": { + "0": 0.21297537840475272, + "1": 0.25814705246049136, + "2": 0.25176260717979065 + }, + "recall": { + "0": 0.6906260019361401, + "1": 0.7928148275159873, + "2": 0.8063031248841592 + }, + "f1": { + "0": 0.19968247097445052, + "1": 0.2556792223856105, + "2": 0.25564879210539354 + }, + "micro_accuracy": { + "0": 0.6894952251023192, + "1": 0.7794338335607094, + "2": 0.928581173260573 + }, + "theilU": { + "0": 0.9327107183368355, + "1": 0.9303898466600729, + "2": 0.8413915880115065 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.712463978281947, + "1": 0.7928148275159873, + "2": 0.8063031248841592 + }, + "precision": { + "0": 0.21739674629675512, + "1": 0.25814705246049136, + "2": 0.25176260717979065 + }, + "recall": { + "0": 0.712463978281947, + "1": 0.7928148275159873, + "2": 0.8063031248841592 + }, + "f1": { + "0": 0.2051505331795797, + "1": 0.2556792223856105, + "2": 0.25564879210539354 + }, + "micro_accuracy": { + "0": 0.7990829677062334, + "1": 0.7794338335607094, + "2": 0.928581173260573 + }, + "theilU": { + "0": 0.9360902428349954, + "1": 0.9303898466600729, + "2": 0.8413915880115065 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + }, + { + "model": "onnx", + "precision": "tf32", + "preset": "full", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.5842769440654844, + "micro_accuracy_known": 0.677141388987707, + "macro_accuracy_all": 0.5803258635150937, + "macro_accuracy_known": 0.5986760884483774, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7058321964529332, + "micro_accuracy_known": 0.7058321964529332, + "macro_accuracy_all": 0.7132927172304062, + "macro_accuracy_known": 0.7132927172304062, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9030695770804912, + "micro_accuracy_known": 0.9030695770804912, + "macro_accuracy_all": 0.7842061134551048, + "macro_accuracy_known": 0.7842061134551048, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.5803258635150937, + "1": 0.7132927172304062, + "2": 0.7842061134551048 + }, + "precision": { + "0": 0.11940183392320727, + "1": 0.139506013324115, + "2": 0.18845606769929624 + }, + "recall": { + "0": 0.5803258635150937, + "1": 0.7132927172304062, + "2": 0.7842061134551048 + }, + "f1": { + "0": 0.09730444648358827, + "1": 0.12688882216850472, + "2": 0.1937730887900641 + }, + "micro_accuracy": { + "0": 0.5842769440654844, + "1": 0.7058321964529332, + "2": 0.9030695770804912 + }, + "theilU": { + "0": 0.9381877433883671, + "1": 0.9279129375668055, + "2": 0.8032163508659165 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.5986760884483774, + "1": 0.7132927172304062, + "2": 0.7842061134551048 + }, + "precision": { + "0": 0.12359009712973944, + "1": 0.139506013324115, + "2": 0.18845606769929624 + }, + "recall": { + "0": 0.5986760884483774, + "1": 0.7132927172304062, + "2": 0.7842061134551048 + }, + "f1": { + "0": 0.10075026693576739, + "1": 0.12688882216850472, + "2": 0.1937730887900641 + }, + "micro_accuracy": { + "0": 0.677141388987707, + "1": 0.7058321964529332, + "2": 0.9030695770804912 + }, + "theilU": { + "0": 0.9437018925013999, + "1": 0.9279129375668055, + "2": 0.8032163508659165 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + }, + { + "model": "onnx", + "precision": "tf32", + "preset": "north_europe_v3", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.703206002728513, + "micro_accuracy_known": 0.8149729238309814, + "macro_accuracy_all": 0.70490721102182, + "macro_accuracy_known": 0.7271967671015613, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7889324693042292, + "micro_accuracy_known": 0.7889324693042292, + "macro_accuracy_all": 0.7998011634423278, + "macro_accuracy_known": 0.7998011634423278, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9289392905866303, + "micro_accuracy_known": 0.9289392905866303, + "macro_accuracy_all": 0.8066719936597678, + "macro_accuracy_known": 0.8066719936597678, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.70490721102182, + "1": 0.7998011634423278, + "2": 0.8066719936597678 + }, + "precision": { + "0": 0.24693597388838318, + "1": 0.304018206726156, + "2": 0.26915209911986615 + }, + "recall": { + "0": 0.70490721102182, + "1": 0.7998011634423278, + "2": 0.8066719936597678 + }, + "f1": { + "0": 0.23654830838429805, + "1": 0.3048604148769131, + "2": 0.2732530547620374 + }, + "micro_accuracy": { + "0": 0.703206002728513, + "1": 0.7889324693042292, + "2": 0.9289392905866303 + }, + "theilU": { + "0": 0.9297283074523651, + "1": 0.9279871144012297, + "2": 0.8462225486926431 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7271967671015613, + "1": 0.7998011634423278, + "2": 0.8066719936597678 + }, + "precision": { + "0": 0.2512627097909782, + "1": 0.304018206726156, + "2": 0.26915209911986615 + }, + "recall": { + "0": 0.7271967671015613, + "1": 0.7998011634423278, + "2": 0.8066719936597678 + }, + "f1": { + "0": 0.24271540486034088, + "1": 0.3048604148769131, + "2": 0.2732530547620374 + }, + "micro_accuracy": { + "0": 0.8149729238309814, + "1": 0.7889324693042292, + "2": 0.9289392905866303 + }, + "theilU": { + "0": 0.9329324973505538, + "1": 0.9279871144012297, + "2": 0.8462225486926431 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + }, + { + "model": "onnx", + "precision": "tf32", + "preset": "europe_v3", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.6880627557980901, + "micro_accuracy_known": 0.7974228230364837, + "macro_accuracy_all": 0.6887960648645841, + "macro_accuracy_known": 0.710576177587575, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7779672578444747, + "micro_accuracy_known": 0.7779672578444747, + "macro_accuracy_all": 0.7908120470589387, + "macro_accuracy_known": 0.7908120470589387, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9254774897680764, + "micro_accuracy_known": 0.9254774897680764, + "macro_accuracy_all": 0.805164255187583, + "macro_accuracy_known": 0.805164255187583, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.6887960648645841, + "1": 0.7908120470589387, + "2": 0.805164255187583 + }, + "precision": { + "0": 0.21168953424574674, + "1": 0.2560315293300679, + "2": 0.25025960445781553 + }, + "recall": { + "0": 0.6887960648645841, + "1": 0.7908120470589387, + "2": 0.805164255187583 + }, + "f1": { + "0": 0.19783273588838454, + "1": 0.2529767781457853, + "2": 0.2540572988243291 + }, + "micro_accuracy": { + "0": 0.6880627557980901, + "1": 0.7779672578444747, + "2": 0.9254774897680764 + }, + "theilU": { + "0": 0.9322918377735964, + "1": 0.9297404742905871, + "2": 0.838470274037207 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.710576177587575, + "1": 0.7908120470589387, + "2": 0.805164255187583 + }, + "precision": { + "0": 0.21632075786236368, + "1": 0.2560315293300679, + "2": 0.25025960445781553 + }, + "recall": { + "0": 0.710576177587575, + "1": 0.7908120470589387, + "2": 0.805164255187583 + }, + "f1": { + "0": 0.2034558161613722, + "1": 0.2529767781457853, + "2": 0.2540572988243291 + }, + "micro_accuracy": { + "0": 0.7974228230364837, + "1": 0.7779672578444747, + "2": 0.9254774897680764 + }, + "theilU": { + "0": 0.9361375391213514, + "1": 0.9297404742905871, + "2": 0.838470274037207 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + } + ], + "speed": [ + { + "model": "onnx", + "device": "cpu", + "preset": "europe", + "batch": 1, + "images_per_second": 10.347520653711559, + "trial_min_ips": 9.449655199391756, + "trial_max_ips": 10.812101015895683 + }, + { + "model": "onnx", + "device": "cpu", + "preset": "europe", + "batch": 8, + "images_per_second": 10.52727820435193, + "trial_min_ips": 10.355297439131876, + "trial_max_ips": 10.65744350194588 + }, + { + "model": "onnx", + "device": "cpu", + "preset": "full", + "batch": 1, + "images_per_second": 9.872555672482052, + "trial_min_ips": 9.739427177477546, + "trial_max_ips": 9.922526205578436 + }, + { + "model": "onnx", + "device": "cpu", + "preset": "full", + "batch": 8, + "images_per_second": 10.733118494348869, + "trial_min_ips": 10.56679692428927, + "trial_max_ips": 10.763173933865195 + }, + { + "model": "onnx", + "device": "cpu", + "preset": "north_europe", + "batch": 1, + "images_per_second": 10.076177412511877, + "trial_min_ips": 9.60250986545771, + "trial_max_ips": 11.353111385069457 + }, + { + "model": "onnx", + "device": "cpu", + "preset": "north_europe", + "batch": 8, + "images_per_second": 10.80969808387532, + "trial_min_ips": 10.570796505012908, + "trial_max_ips": 11.102500782573706 + }, + { + "model": "onnx", + "device": "cuda:0", + "preset": "europe", + "batch": 1, + "images_per_second": 44.90623220673182, + "trial_min_ips": 42.40445111731503, + "trial_max_ips": 49.82361940898542 + }, + { + "model": "onnx", + "device": "cuda:0", + "preset": "europe", + "batch": 8, + "images_per_second": 116.40713454105308, + "trial_min_ips": 110.31223298386196, + "trial_max_ips": 118.96776369619226 + }, + { + "model": "onnx", + "device": "cuda:0", + "preset": "europe", + "batch": 32, + "images_per_second": 111.8052747339908, + "trial_min_ips": 106.42003928900061, + "trial_max_ips": 116.63412022082476 + }, + { + "model": "onnx", + "device": "cuda:0", + "preset": "full", + "batch": 1, + "images_per_second": 35.75541977678956, + "trial_min_ips": 31.557083953590467, + "trial_max_ips": 40.90267960770997 + }, + { + "model": "onnx", + "device": "cuda:0", + "preset": "full", + "batch": 8, + "images_per_second": 88.21443464701524, + "trial_min_ips": 77.52627983150244, + "trial_max_ips": 100.02293651107108 + }, + { + "model": "onnx", + "device": "cuda:0", + "preset": "full", + "batch": 32, + "images_per_second": 91.63275276401218, + "trial_min_ips": 89.34198103795067, + "trial_max_ips": 95.64585858346106 + }, + { + "model": "onnx", + "device": "cuda:0", + "preset": "north_europe", + "batch": 1, + "images_per_second": 46.70691057432178, + "trial_min_ips": 41.11976015977681, + "trial_max_ips": 49.97505245293308 + }, + { + "model": "onnx", + "device": "cuda:0", + "preset": "north_europe", + "batch": 8, + "images_per_second": 114.11464013589269, + "trial_min_ips": 107.34320509031689, + "trial_max_ips": 115.69758682083888 + }, + { + "model": "onnx", + "device": "cuda:0", + "preset": "north_europe", + "batch": 32, + "images_per_second": 111.27186960045317, + "trial_min_ips": 104.95228749163802, + "trial_max_ips": 118.23092267562323 + }, + { + "model": "torch", + "device": "cpu", + "preset": "europe", + "batch": 1, + "images_per_second": 6.172664042716186, + "trial_min_ips": 5.627297914052408, + "trial_max_ips": 6.828606710641469 + }, + { + "model": "torch", + "device": "cpu", + "preset": "europe", + "batch": 8, + "images_per_second": 8.025987344454904, + "trial_min_ips": 7.857073739438581, + "trial_max_ips": 8.619013897827697 + }, + { + "model": "torch", + "device": "cpu", + "preset": "full", + "batch": 1, + "images_per_second": 6.041894204300364, + "trial_min_ips": 5.731894027251844, + "trial_max_ips": 6.9101794079583225 + }, + { + "model": "torch", + "device": "cpu", + "preset": "full", + "batch": 8, + "images_per_second": 8.113175364445661, + "trial_min_ips": 7.88456031532421, + "trial_max_ips": 8.7687304782976 + }, + { + "model": "torch", + "device": "cpu", + "preset": "north_europe", + "batch": 1, + "images_per_second": 5.695199765540664, + "trial_min_ips": 5.453077416494641, + "trial_max_ips": 6.445979740616736 + }, + { + "model": "torch", + "device": "cpu", + "preset": "north_europe", + "batch": 8, + "images_per_second": 7.839122148750051, + "trial_min_ips": 6.663612338884881, + "trial_max_ips": 9.242605998110642 + }, + { + "model": "torch", + "device": "cuda:0", + "preset": "europe", + "batch": 1, + "images_per_second": 28.83568538372905, + "trial_min_ips": 22.725586903841528, + "trial_max_ips": 31.210095944870968 + }, + { + "model": "torch", + "device": "cuda:0", + "preset": "europe", + "batch": 8, + "images_per_second": 125.82158545438949, + "trial_min_ips": 119.8725311439004, + "trial_max_ips": 129.27090257523392 + }, + { + "model": "torch", + "device": "cuda:0", + "preset": "europe", + "batch": 32, + "images_per_second": 130.40128489292832, + "trial_min_ips": 127.11801504041274, + "trial_max_ips": 137.8194417258879 + }, + { + "model": "torch", + "device": "cuda:0", + "preset": "full", + "batch": 1, + "images_per_second": 25.264118675077682, + "trial_min_ips": 18.90083587705983, + "trial_max_ips": 26.779560009971277 + }, + { + "model": "torch", + "device": "cuda:0", + "preset": "full", + "batch": 8, + "images_per_second": 99.47971239936308, + "trial_min_ips": 93.39931185101867, + "trial_max_ips": 108.8844098127304 + }, + { + "model": "torch", + "device": "cuda:0", + "preset": "full", + "batch": 32, + "images_per_second": 114.91888491933366, + "trial_min_ips": 113.26886770155022, + "trial_max_ips": 117.92808882913475 + }, + { + "model": "torch", + "device": "cuda:0", + "preset": "north_europe", + "batch": 1, + "images_per_second": 29.838347764184938, + "trial_min_ips": 28.22843215050167, + "trial_max_ips": 32.58000010949372 + }, + { + "model": "torch", + "device": "cuda:0", + "preset": "north_europe", + "batch": 8, + "images_per_second": 126.73135226080092, + "trial_min_ips": 125.63045484784077, + "trial_max_ips": 134.262307658797 + }, + { + "model": "torch", + "device": "cuda:0", + "preset": "north_europe", + "batch": 32, + "images_per_second": 136.24360110822388, + "trial_min_ips": 134.1900518259908, + "trial_max_ips": 142.79165057586877 + } + ], + "resources": [ + { + "model": "torch", + "device": "cuda:0", + "rss_mib": 2511.96484375, + "load_first_seconds": 42.957718928999384, + "allocated_mib": 597.53125 + }, + { + "model": "onnx", + "device": "cuda:0", + "rss_mib": 1618.86328125, + "load_first_seconds": 1.4639206969950465, + "allocated_mib": null + }, + { + "model": "torch", + "device": "cpu", + "rss_mib": 1618.265625, + "load_first_seconds": 42.038206298006116, + "allocated_mib": null + }, + { + "model": "onnx", + "device": "cpu", + "rss_mib": 688.5390625, + "load_first_seconds": 0.3738440049928613, + "allocated_mib": null + } + ], + "sources_sha256": { + "docs/assets/mambo-release-comparison.json": "b54cb1a592c2410913fc883818bf4f496a8d3a12a3da552b8b352a180d428414", + "local-evidence/mambo-accelerated-quality/torch-cuda-0-prediction/north_europe/metrics.json": "5855c7a7c65ee15c04eb49bced3e15f3e49daa4b165c2b7578a2406bb928198d", + "local-evidence/mambo-accelerated-quality/torch-cuda-0-prediction/europe/metrics.json": "6c3b31385aa90b0f728d1c0ca095177694b42389b93947a4d3a363396013a5f4", + "local-evidence/mambo-accelerated-quality/torch-cuda-0-prediction/full/metrics.json": "4b30a10abfa0f03b19b0f36afa45f8700bf3797e27705e4653a671d82d64de2e", + "local-evidence/mambo-accelerated-quality/torch-cuda-0-prediction/north_europe_v3/metrics.json": "49fe2accea5fceeda9466c9342b56446e4239e25782d895c0690a66cffb8522f", + "local-evidence/mambo-accelerated-quality/torch-cuda-0-prediction/europe_v3/metrics.json": "759d8c2a6a159a9d6811718098dda3b876315b9c4a7517462e02e9d74faef132", + "local-evidence/mambo-accelerated-quality/torch-cuda-0-prediction/report.json": "8d77e2cc7765edba878a1a4e2ae047d6c0a557ee67a4e24337fa2880d72277bb", + "local-evidence/mambo-accelerated-quality/onnx-cuda-0-prediction/north_europe/metrics.json": "80461d27cf321bc05628c87acc8f0137dc512c1762f55f18a1663397d77552f4", + "local-evidence/mambo-accelerated-quality/onnx-cuda-0-prediction/europe/metrics.json": "2062c11c380b0593c600a50fc8d1c56dc00387f79686b785a90bd48bf65464dc", + "local-evidence/mambo-accelerated-quality/onnx-cuda-0-prediction/full/metrics.json": "a73987b947173a002c2f53322b8a15ad29c96478ee18325b4a7d1e8d99796d87", + "local-evidence/mambo-accelerated-quality/onnx-cuda-0-prediction/north_europe_v3/metrics.json": "8be7a1563b04412ea251f0ae325180511cc7cd19b917a99ad5e09dcfb6b9b1e5", + "local-evidence/mambo-accelerated-quality/onnx-cuda-0-prediction/europe_v3/metrics.json": "294d9d9fa0e294b641d23bb8f9b368afbbfdb70421f56c0509049da2fa21c288", + "local-evidence/mambo-accelerated-quality/onnx-cuda-0-prediction/report.json": "af3c020d7bf832de3edf6015a36cf920d9b11de0a9fb694c37f621d50f1ac13a", + "local-evidence/mambo-accelerated-performance/trial-0-torch-cuda-0/report.json": "0352ff78f15e1d2a4f42b79e1961df3a6a144877f86afe93c569e124e72f3fe1", + "local-evidence/mambo-accelerated-performance/trial-0-onnx-cuda-0/report.json": "a6c1c58fb44a75e1f44e960630628527ce7b48bdf63a225bed2829c0f5427101", + "local-evidence/mambo-accelerated-performance/trial-0-torch-cpu/report.json": "ffc9d26536f4c101b8664916256ee2fa6b50573d275b7bb23d8a06b43b714f74", + "local-evidence/mambo-accelerated-performance/trial-0-onnx-cpu/report.json": "50e82177067a33154660611bd731168670a7fa24fcb19b147a7718b66213dfe4", + "local-evidence/mambo-accelerated-performance/trial-1-onnx-cpu/report.json": "4f7f3c01f0771a0740fc31f670cc49a07967b01ce1c7bb69299af3ed9786e359", + "local-evidence/mambo-accelerated-performance/trial-1-torch-cpu/report.json": "5def0f91eb87405d7897a8526dd07c8384bd73b12f0905c4df07a6d17cf4c085", + "local-evidence/mambo-accelerated-performance/trial-1-onnx-cuda-0/report.json": "e3cd5b5e1a750dc00c6f555c083e4d551fcfb7df7dbeb6b322f4fc33138fd770", + "local-evidence/mambo-accelerated-performance/trial-1-torch-cuda-0/report.json": "9797136c310f0012a5b72911e23785c41ccc8963d4447646dfffba75bdacfc65", + "local-evidence/mambo-accelerated-performance/trial-2-torch-cuda-0/report.json": "bf6601ea0fd9bcea2d98c073f0d0168ebe5a95232eabb91d6e6093d0ba6491b6", + "local-evidence/mambo-accelerated-performance/trial-2-onnx-cuda-0/report.json": "8c85f6dab6c4a1e2919c5823ac3d1c451c1d1bd461d5f59da033109825c2de47", + "local-evidence/mambo-accelerated-performance/trial-2-torch-cpu/report.json": "097f6efa12d69d405c847d908797c6d071b402e77baa444059144531e1386db1", + "local-evidence/mambo-accelerated-performance/trial-2-onnx-cpu/report.json": "9af1b4ea117d86e9d9cf87181a700b4398c660e950e6c89a4ed8b8effb324afb" + }, + "bundle_sha256": "c576f53f404575bb9301de16427dd4feee9b03e48292180e184e0385052ee49b", + "manifest_sha256": "04e56e9189933b6758b192f587e296e49012fd935baa00c04ca91e0a3ce3795f" +} diff --git a/docs/assets/mambo-accelerated-memory.svg b/docs/assets/mambo-accelerated-memory.svg new file mode 100644 index 0000000..c50fa97 --- /dev/null +++ b/docs/assets/mambo-accelerated-memory.svg @@ -0,0 +1,484 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.10.9, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + V2 + + + + + + + + + + V3 torch + FP32 + + + + + + + + + + V3 torch + auto + + + + + + + + + + V3 ONNX + FP32 + + + + + + + + + + V3 ONNX + auto + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 1000 + + + + + + + + + + + + + 2000 + + + + + + + + + + + + + 3000 + + + + + + + + + + + + + 4000 + + + + Peak host RSS (MiB) + + + + + + + + + + + + + + + + + + + + + + + + + 4123 + + + 1573 + + + 1618 + + + 587 + + + 689 + + + CPU execution + + + + + + + + + + + + + + + V2 + + + + + + + + + + V3 torch + FP32 + + + + + + + + + + V3 torch + auto + + + + + + + + + + V3 ONNX + FP32 + + + + + + + + + + V3 ONNX + auto + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 1000 + + + + + + + + + + + + + 2000 + + + + + + + + + + + + + 3000 + + + + + + + + + + + + + 4000 + + + + Peak host RSS (MiB) + + + + + + + + + + + + + + + + + + + + + + + + + 4123 + + + 1897 + + + 2512 + + + 1469 + + + 1619 + + + GPU execution + + + + Process memory across the complete batch sweep + + + Median of three fresh processes; includes loading and batch sweep. Host memory, not GPU VRAM. + CPU batches 1/8; GPU batches 1/8/32. V2 CPU uses the documented input cast. + + + + + + + + + + + diff --git a/docs/assets/mambo-accelerated-metrics.csv b/docs/assets/mambo-accelerated-metrics.csv new file mode 100644 index 0000000..ae9e5ce --- /dev/null +++ b/docs/assets/mambo-accelerated-metrics.csv @@ -0,0 +1,109 @@ +variant,preset,scope,rank,images,accuracy,precision,recall,f1,micro_accuracy,theilU,coverage +MAMBO v2,north_europe,all,species,58640,0.6852063621352951,0.2742104381019442,0.6852063621352951,0.25753800338546967,0.68712482946794,0.9259639612074944,1.0 +MAMBO v2,north_europe,all,genus,58640,0.7890053947525617,0.3188818859364664,0.7890053947525617,0.3169285074452811,0.7922919508867667,0.9286450152404832,1.0 +MAMBO v2,north_europe,all,family,58640,0.8440271040813301,0.26007435892237385,0.8440271040813301,0.2691037692533918,0.9449351978171896,0.865726913911594,1.0 +MAMBO v2,north_europe,known,species,50598,0.706872966471589,0.27934832747314936,0.706872966471589,0.26468747200295195,0.7963358235503379,0.9284675700829689,1.0 +MAMBO v2,north_europe,known,genus,58639,0.7914633554838781,0.3189462554934523,0.7914633554838781,0.3174198331740771,0.7923054622350313,0.9286569914847851,1.0 +MAMBO v2,north_europe,known,family,58640,0.8440271040813301,0.26007435892237385,0.8440271040813301,0.2691037692533918,0.9449351978171896,0.865726913911594,1.0 +MAMBO v2,europe,all,species,58640,0.6604260262269301,0.220093475997043,0.6604260262269301,0.19998360830548284,0.669594133697135,0.9298644970123321,1.0 +MAMBO v2,europe,all,genus,58640,0.7728971632770847,0.26145460355851485,0.7728971632770847,0.25527668172822016,0.7764495225102319,0.9304037751304223,1.0 +MAMBO v2,europe,all,family,58640,0.8353711166095457,0.24311183116521895,0.8353711166095457,0.2512650593074731,0.9423090040927694,0.858730608498533,1.0 +MAMBO v2,europe,known,species,50598,0.6813090626293627,0.22455003199982063,0.6813090626293627,0.20496609487323514,0.7760188149729238,0.9324736395684865,1.0 +MAMBO v2,europe,known,genus,58640,0.7728971632770847,0.26145460355851485,0.7728971632770847,0.25527668172822016,0.7764495225102319,0.9304037751304223,1.0 +MAMBO v2,europe,known,family,58640,0.8353711166095457,0.24311183116521895,0.8353711166095457,0.2512650593074731,0.9423090040927694,0.858730608498533,1.0 +MAMBO v2,full,all,species,58640,0.5720627970250876,0.1100618404698789,0.5720627970250876,0.08990868448899282,0.5936050477489768,0.9424989337241723,1.0 +MAMBO v2,full,all,genus,58640,0.7168278641037727,0.1327201662316462,0.7168278641037727,0.12210675669894289,0.7285129604365621,0.9364867523141058,1.0 +MAMBO v2,full,all,family,58640,0.8069699178640561,0.19682625488877242,0.8069699178640561,0.20522430973656694,0.9265006821282401,0.8320049778627998,1.0 +MAMBO v2,full,known,species,50598,0.5901517392235093,0.11296990063684895,0.5901517392235093,0.09231932892005533,0.6879520929681016,0.9472050810666933,1.0 +MAMBO v2,full,known,genus,58640,0.7168278641037727,0.1327201662316462,0.7168278641037727,0.12210675669894289,0.7285129604365621,0.9364867523141058,1.0 +MAMBO v2,full,known,family,58640,0.8069699178640561,0.19682625488877242,0.8069699178640561,0.20522430973656694,0.9265006821282401,0.8320049778627998,1.0 +V3 FP32 reference,north_europe,all,species,58640,0.7123671759291879,0.26361186496219735,0.7123671759291879,0.25450880594788156,0.7078956343792633,0.9282973331913745,1.0 +V3 FP32 reference,north_europe,all,genus,58640,0.8054070319557569,0.31882230287858776,0.8054070319557569,0.3207725301986971,0.7936732605729877,0.927078119536916,1.0 +V3 FP32 reference,north_europe,all,family,58640,0.8106383132501974,0.27544229106153234,0.8106383132501974,0.2805840235220709,0.9298090040927695,0.8488942298912809,1.0 +V3 FP32 reference,north_europe,known,species,50598,0.734892620227344,0.2677964216559137,0.734892620227344,0.2609164468790569,0.8204079212617099,0.9313037775676971,1.0 +V3 FP32 reference,north_europe,known,genus,58639,0.8079160881300739,0.31884970853060046,0.8079160881300739,0.3212438169069074,0.7936867954774126,0.9270916152069156,1.0 +V3 FP32 reference,north_europe,known,family,58640,0.8106383132501974,0.27544229106153234,0.8106383132501974,0.2805840235220709,0.9298090040927695,0.8488942298912809,1.0 +V3 FP32 reference,europe,all,species,58640,0.6906121581308468,0.2125866053945616,0.6906121581308468,0.19931852384419554,0.6894952251023192,0.9327740860469433,1.0 +V3 FP32 reference,europe,all,genus,58640,0.7927684087442151,0.25792706709688445,0.7927684087442151,0.25548534308971915,0.7793656207366985,0.930377596554077,1.0 +V3 FP32 reference,europe,all,family,58640,0.8061650335232657,0.25177044612587207,0.8061650335232657,0.25562321183354897,0.9286323328785812,0.8415003084731356,1.0 +V3 FP32 reference,europe,known,species,50598,0.7124496967278696,0.21701009331649532,0.7124496967278696,0.20477619736063515,0.7990829677062334,0.9361501370706838,1.0 +V3 FP32 reference,europe,known,genus,58640,0.7927684087442151,0.25792706709688445,0.7927684087442151,0.25548534308971915,0.7793656207366985,0.930377596554077,1.0 +V3 FP32 reference,europe,known,family,58640,0.8061650335232657,0.25177044612587207,0.8061650335232657,0.25562321183354897,0.9286323328785812,0.8415003084731356,1.0 +V3 FP32 reference,full,all,species,58640,0.5802757153882665,0.11912807276515047,0.5802757153882665,0.09709532327738142,0.5843281036834925,0.9381503100112119,1.0 +V3 FP32 reference,full,all,genus,58640,0.7133531076261048,0.139300115626279,0.7133531076261048,0.12672892757582832,0.7058321964529332,0.927961126268096,1.0 +V3 FP32 reference,full,all,family,58640,0.7851379223252065,0.18846238515501548,0.7851379223252065,0.19392386150040025,0.903137789904502,0.803447959660008,1.0 +V3 FP32 reference,full,known,species,50598,0.5986243546100299,0.1233403630154899,0.5986243546100299,0.10055972949058657,0.6772006798687695,0.9436554162021304,1.0 +V3 FP32 reference,full,known,genus,58640,0.7133531076261048,0.139300115626279,0.7133531076261048,0.12672892757582832,0.7058321964529332,0.927961126268096,1.0 +V3 FP32 reference,full,known,family,58640,0.7851379223252065,0.18846238515501548,0.7851379223252065,0.19392386150040025,0.903137789904502,0.803447959660008,1.0 +V3 FP32 reference,north_europe_v3,all,species,58640,0.7049027989956338,0.2470742742773393,0.7049027989956338,0.2366924424645238,0.703206002728513,0.9297064107551721,1.0 +V3 FP32 reference,north_europe_v3,all,genus,58640,0.8001749661579481,0.3039724405966767,0.8001749661579481,0.30440717730876965,0.7889154160982265,0.9279675082275328,1.0 +V3 FP32 reference,north_europe_v3,all,family,58640,0.8066694596309745,0.2691352790869643,0.8066694596309745,0.27323770976338385,0.9289222373806275,0.8462890628674864,1.0 +V3 FP32 reference,north_europe_v3,known,species,50598,0.7271922155646657,0.2514163094253105,0.7271922155646657,0.24287275681309572,0.8149729238309814,0.9329194604232633,1.0 +V3 FP32 reference,north_europe_v3,known,genus,58640,0.8001749661579481,0.3039724405966767,0.8001749661579481,0.30440717730876965,0.7889154160982265,0.9279675082275328,1.0 +V3 FP32 reference,north_europe_v3,known,family,58640,0.8066694596309745,0.2691352790869643,0.8066694596309745,0.27323770976338385,0.9289222373806275,0.8462890628674864,1.0 +V3 FP32 reference,europe_v3,all,species,58640,0.6887822210592908,0.2113075222535363,0.6887822210592908,0.19747553631500298,0.6880627557980901,0.93232229829798,1.0 +V3 FP32 reference,europe_v3,all,genus,58640,0.7907835796748087,0.25581979303859764,0.7907835796748087,0.2528121859712137,0.7779160982264666,0.9297312779441991,1.0 +V3 FP32 reference,europe_v3,all,family,58640,0.804979506038197,0.25026564649749544,0.804979506038197,0.2540250081556085,0.9254945429740792,0.8384429842887284,1.0 +V3 FP32 reference,europe_v3,known,species,50598,0.7105618960334976,0.21594007329351536,0.7105618960334976,0.20308773317860726,0.7974228230364837,0.9361858273521857,1.0 +V3 FP32 reference,europe_v3,known,genus,58640,0.7907835796748087,0.25581979303859764,0.7907835796748087,0.2528121859712137,0.7779160982264666,0.9297312779441991,1.0 +V3 FP32 reference,europe_v3,known,family,58640,0.804979506038197,0.25026564649749544,0.804979506038197,0.2540250081556085,0.9254945429740792,0.8384429842887284,1.0 +V3 PyTorch FP16,north_europe,all,species,58640,0.7124755690715492,0.2634270457338045,0.7124755690715492,0.25428952382168735,0.7078274215552524,0.928300449968092,1.0 +V3 PyTorch FP16,north_europe,all,genus,58640,0.8053483819748223,0.31893660877341173,0.8053483819748223,0.3204124099108478,0.7936903137789905,0.9269683891259273,1.0 +V3 PyTorch FP16,north_europe,all,family,58640,0.8105098078966045,0.27535126159560075,0.8105098078966045,0.2804463369346697,0.9296896316507504,0.848717056770075,1.0 +V3 PyTorch FP16,north_europe,known,species,50598,0.7350044408208473,0.2676065928162877,0.7350044408208473,0.2606923077861283,0.8203288667536266,0.9313351406548803,1.0 +V3 PyTorch FP16,north_europe,known,genus,58639,0.8078572554389183,0.31896401442542444,0.8078572554389183,0.32088253381207055,0.7937038489742322,0.9269818797430123,1.0 +V3 PyTorch FP16,north_europe,known,family,58640,0.8105098078966045,0.27535126159560075,0.8105098078966045,0.2804463369346697,0.9296896316507504,0.848717056770075,1.0 +V3 PyTorch FP16,europe,all,species,58640,0.6904573601499047,0.21308377178370788,0.6904573601499047,0.19974835307971503,0.6894270122783083,0.9327685730735747,1.0 +V3 PyTorch FP16,europe,all,genus,58640,0.7927569371584571,0.2577674325030351,0.7927569371584571,0.25521877922468866,0.7794167803547067,0.9303872077924281,1.0 +V3 PyTorch FP16,europe,all,family,58640,0.8061547662632332,0.2517251364434932,0.8061547662632332,0.2555840946637753,0.9285300136425648,0.8414042795502794,1.0 +V3 PyTorch FP16,europe,known,species,50598,0.7122900039491111,0.21751022464426337,0.7122900039491111,0.2052193214139764,0.7990039131981501,0.9362130669456851,1.0 +V3 PyTorch FP16,europe,known,genus,58640,0.7927569371584571,0.2577674325030351,0.7927569371584571,0.25521877922468866,0.7794167803547067,0.9303872077924281,1.0 +V3 PyTorch FP16,europe,known,family,58640,0.8061547662632332,0.2517251364434932,0.8061547662632332,0.2555840946637753,0.9285300136425648,0.8414042795502794,1.0 +V3 PyTorch FP16,full,all,species,58640,0.5800914186056899,0.11941327816354223,0.5800914186056899,0.09729142790239681,0.5842087312414734,0.9380984507134764,1.0 +V3 PyTorch FP16,full,all,genus,58640,0.7129759960732965,0.1394431837512301,0.7129759960732965,0.1268067151804599,0.7057128240109141,0.9278203586503335,1.0 +V3 PyTorch FP16,full,all,family,58640,0.784246040298466,0.1882961794945315,0.784246040298466,0.19361355430273816,0.9029502046384721,0.8029884477926725,1.0 +V3 PyTorch FP16,full,known,species,50598,0.5984342302612058,0.12352484541958572,0.5984342302612058,0.10067516090358233,0.6770623344796237,0.9436338812191157,1.0 +V3 PyTorch FP16,full,known,genus,58640,0.7129759960732965,0.1394431837512301,0.7129759960732965,0.1268067151804599,0.7057128240109141,0.9278203586503335,1.0 +V3 PyTorch FP16,full,known,family,58640,0.784246040298466,0.1882961794945315,0.784246040298466,0.19361355430273816,0.9029502046384721,0.8029884477926725,1.0 +V3 PyTorch FP16,north_europe_v3,all,species,58640,0.704628249754435,0.24730856379330513,0.704628249754435,0.2368364750172347,0.7031548431105048,0.9297081356830714,1.0 +V3 PyTorch FP16,north_europe_v3,all,genus,58640,0.8000993660812793,0.30404516864512815,0.8000993660812793,0.30405829620707303,0.7888472032742155,0.9278811825938204,1.0 +V3 PyTorch FP16,north_europe_v3,all,family,58640,0.8066151835359162,0.26911334290120537,0.8066151835359162,0.27317213148165537,0.9288540245566167,0.8463131556985152,1.0 +V3 PyTorch FP16,north_europe_v3,known,species,50598,0.7269089849245357,0.2516551965945558,0.7269089849245357,0.24302911458287843,0.8149136329499189,0.9329238752080722,1.0 +V3 PyTorch FP16,north_europe_v3,known,genus,58640,0.8000993660812793,0.30404516864512815,0.8000993660812793,0.30405829620707303,0.7888472032742155,0.9278811825938204,1.0 +V3 PyTorch FP16,north_europe_v3,known,family,58640,0.8066151835359162,0.26911334290120537,0.8066151835359162,0.27317213148165537,0.9288540245566167,0.8463131556985152,1.0 +V3 PyTorch FP16,europe_v3,all,species,58640,0.6886240058738285,0.21178593938637336,0.6886240058738285,0.1978902721150327,0.6879945429740791,0.9323203923796567,1.0 +V3 PyTorch FP16,europe_v3,all,genus,58640,0.7907596138745981,0.25597447312765065,0.7907596138745981,0.25283249885833836,0.7779331514324693,0.9297196214314329,1.0 +V3 PyTorch FP16,europe_v3,all,family,58640,0.804801469829159,0.25018741937505296,0.804801469829159,0.25394065720716125,0.9252899045020464,0.8382838670363196,1.0 +V3 PyTorch FP16,europe_v3,known,species,50598,0.7103986779963212,0.2164221653533803,0.7103986779963212,0.20351606400355202,0.7973437685284004,0.9362292436999937,1.0 +V3 PyTorch FP16,europe_v3,known,genus,58640,0.7907596138745981,0.25597447312765065,0.7907596138745981,0.25283249885833836,0.7779331514324693,0.9297196214314329,1.0 +V3 PyTorch FP16,europe_v3,known,family,58640,0.804801469829159,0.25018741937505296,0.804801469829159,0.25394065720716125,0.9252899045020464,0.8382838670363196,1.0 +V3 ONNX TF32,north_europe,all,species,58640,0.7123551106111988,0.2634302800489512,0.7123551106111988,0.25432102340018437,0.7078444747612551,0.9282787583085454,1.0 +V3 ONNX TF32,north_europe,all,genus,58640,0.805001260196705,0.3188298295664697,0.805001260196705,0.3212342539755369,0.7936221009549795,0.9270081304640697,1.0 +V3 ONNX TF32,north_europe,all,family,58640,0.8106416408810809,0.27563597431734277,0.8106416408810809,0.28076917349510716,0.9298601637107776,0.8488811049574605,1.0 +V3 ONNX TF32,north_europe,known,species,50598,0.7348801733973236,0.26759865685833206,0.7348801733973236,0.26071387372659355,0.8203486303806474,0.931297601666784,1.0 +V3 ONNX TF32,north_europe,known,genus,58639,0.8075090522845452,0.31885723521848236,0.8075090522845452,0.32170684925385246,0.7936356349869541,0.9270216229111814,1.0 +V3 ONNX TF32,north_europe,known,family,58640,0.8106416408810809,0.27563597431734277,0.8106416408810809,0.28076917349510716,0.9298601637107776,0.8488811049574605,1.0 +V3 ONNX TF32,europe,all,species,58640,0.6906260019361401,0.21297537840475272,0.6906260019361401,0.19968247097445052,0.6894952251023192,0.9327107183368355,1.0 +V3 ONNX TF32,europe,all,genus,58640,0.7928148275159873,0.25814705246049136,0.7928148275159873,0.2556792223856105,0.7794338335607094,0.9303898466600729,1.0 +V3 ONNX TF32,europe,all,family,58640,0.8063031248841592,0.25176260717979065,0.8063031248841592,0.25564879210539354,0.928581173260573,0.8413915880115065,1.0 +V3 ONNX TF32,europe,known,species,50598,0.712463978281947,0.21739674629675512,0.712463978281947,0.2051505331795797,0.7990829677062334,0.9360902428349954,1.0 +V3 ONNX TF32,europe,known,genus,58640,0.7928148275159873,0.25814705246049136,0.7928148275159873,0.2556792223856105,0.7794338335607094,0.9303898466600729,1.0 +V3 ONNX TF32,europe,known,family,58640,0.8063031248841592,0.25176260717979065,0.8063031248841592,0.25564879210539354,0.928581173260573,0.8413915880115065,1.0 +V3 ONNX TF32,full,all,species,58640,0.5803258635150937,0.11940183392320727,0.5803258635150937,0.09730444648358827,0.5842769440654844,0.9381877433883671,1.0 +V3 ONNX TF32,full,all,genus,58640,0.7132927172304062,0.139506013324115,0.7132927172304062,0.12688882216850472,0.7058321964529332,0.9279129375668055,1.0 +V3 ONNX TF32,full,all,family,58640,0.7842061134551048,0.18845606769929624,0.7842061134551048,0.1937730887900641,0.9030695770804912,0.8032163508659165,1.0 +V3 ONNX TF32,full,known,species,50598,0.5986760884483774,0.12359009712973944,0.5986760884483774,0.10075026693576739,0.677141388987707,0.9437018925013999,1.0 +V3 ONNX TF32,full,known,genus,58640,0.7132927172304062,0.139506013324115,0.7132927172304062,0.12688882216850472,0.7058321964529332,0.9279129375668055,1.0 +V3 ONNX TF32,full,known,family,58640,0.7842061134551048,0.18845606769929624,0.7842061134551048,0.1937730887900641,0.9030695770804912,0.8032163508659165,1.0 +V3 ONNX TF32,north_europe_v3,all,species,58640,0.70490721102182,0.24693597388838318,0.70490721102182,0.23654830838429805,0.703206002728513,0.9297283074523651,1.0 +V3 ONNX TF32,north_europe_v3,all,genus,58640,0.7998011634423278,0.304018206726156,0.7998011634423278,0.3048604148769131,0.7889324693042292,0.9279871144012297,1.0 +V3 ONNX TF32,north_europe_v3,all,family,58640,0.8066719936597678,0.26915209911986615,0.8066719936597678,0.2732530547620374,0.9289392905866303,0.8462225486926431,1.0 +V3 ONNX TF32,north_europe_v3,known,species,50598,0.7271967671015613,0.2512627097909782,0.7271967671015613,0.24271540486034088,0.8149729238309814,0.9329324973505538,1.0 +V3 ONNX TF32,north_europe_v3,known,genus,58640,0.7998011634423278,0.304018206726156,0.7998011634423278,0.3048604148769131,0.7889324693042292,0.9279871144012297,1.0 +V3 ONNX TF32,north_europe_v3,known,family,58640,0.8066719936597678,0.26915209911986615,0.8066719936597678,0.2732530547620374,0.9289392905866303,0.8462225486926431,1.0 +V3 ONNX TF32,europe_v3,all,species,58640,0.6887960648645841,0.21168953424574674,0.6887960648645841,0.19783273588838454,0.6880627557980901,0.9322918377735964,1.0 +V3 ONNX TF32,europe_v3,all,genus,58640,0.7908120470589387,0.2560315293300679,0.7908120470589387,0.2529767781457853,0.7779672578444747,0.9297404742905871,1.0 +V3 ONNX TF32,europe_v3,all,family,58640,0.805164255187583,0.25025960445781553,0.805164255187583,0.2540572988243291,0.9254774897680764,0.838470274037207,1.0 +V3 ONNX TF32,europe_v3,known,species,50598,0.710576177587575,0.21632075786236368,0.710576177587575,0.2034558161613722,0.7974228230364837,0.9361375391213514,1.0 +V3 ONNX TF32,europe_v3,known,genus,58640,0.7908120470589387,0.2560315293300679,0.7908120470589387,0.2529767781457853,0.7779672578444747,0.9297404742905871,1.0 +V3 ONNX TF32,europe_v3,known,family,58640,0.805164255187583,0.25025960445781553,0.805164255187583,0.2540572988243291,0.9254774897680764,0.838470274037207,1.0 diff --git a/docs/assets/mambo-accelerated-quality-all.svg b/docs/assets/mambo-accelerated-quality-all.svg new file mode 100644 index 0000000..bede7c5 --- /dev/null +++ b/docs/assets/mambo-accelerated-quality-all.svg @@ -0,0 +1,1224 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.10.9, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.685 + + + 0.660 + + + 0.572 + + + 0.712 + + + 0.691 + + + 0.580 + + + 0.712 + + + 0.690 + + + 0.580 + + + 0.712 + + + 0.691 + + + 0.580 + + + Macro accuracy + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.258 + + + 0.200 + + + 0.090 + + + 0.255 + + + 0.199 + + + 0.097 + + + 0.254 + + + 0.200 + + + 0.097 + + + 0.254 + + + 0.200 + + + 0.097 + + + Macro-F1 + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.274 + + + 0.220 + + + 0.110 + + + 0.264 + + + 0.213 + + + 0.119 + + + 0.263 + + + 0.213 + + + 0.119 + + + 0.263 + + + 0.213 + + + 0.119 + + + Macro precision + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.687 + + + 0.670 + + + 0.594 + + + 0.708 + + + 0.689 + + + 0.584 + + + 0.708 + + + 0.689 + + + 0.584 + + + 0.708 + + + 0.689 + + + 0.584 + + + Micro accuracy + + + + Species quality · all truth · automatic GPU settings + + + Pinned mini_metrics; threshold 0, no optimization. All: 58,640 images; known: 50,598 images. + Full tables retain macro recall, Theil U, coverage and every taxonomic rank, including updated European lists. + + + + + + + MAMBO v2 + + + + + + V3 FP32 reference + + + + + + V3 PyTorch FP16 + + + + + + V3 ONNX TF32 + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/mambo-accelerated-quality-known.svg b/docs/assets/mambo-accelerated-quality-known.svg new file mode 100644 index 0000000..5f8fc81 --- /dev/null +++ b/docs/assets/mambo-accelerated-quality-known.svg @@ -0,0 +1,1224 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.10.9, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.707 + + + 0.681 + + + 0.590 + + + 0.735 + + + 0.712 + + + 0.599 + + + 0.735 + + + 0.712 + + + 0.598 + + + 0.735 + + + 0.712 + + + 0.599 + + + Macro accuracy + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.265 + + + 0.205 + + + 0.092 + + + 0.261 + + + 0.205 + + + 0.101 + + + 0.261 + + + 0.205 + + + 0.101 + + + 0.261 + + + 0.205 + + + 0.101 + + + Macro-F1 + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.279 + + + 0.225 + + + 0.113 + + + 0.268 + + + 0.217 + + + 0.123 + + + 0.268 + + + 0.218 + + + 0.124 + + + 0.268 + + + 0.217 + + + 0.124 + + + Macro precision + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.796 + + + 0.776 + + + 0.688 + + + 0.820 + + + 0.799 + + + 0.677 + + + 0.820 + + + 0.799 + + + 0.677 + + + 0.820 + + + 0.799 + + + 0.677 + + + Micro accuracy + + + + Species quality · known truth · automatic GPU settings + + + Pinned mini_metrics; threshold 0, no optimization. All: 58,640 images; known: 50,598 images. + Full tables retain macro recall, Theil U, coverage and every taxonomic rank, including updated European lists. + + + + + + + MAMBO v2 + + + + + + V3 FP32 reference + + + + + + V3 PyTorch FP16 + + + + + + V3 ONNX TF32 + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/mambo-accelerated-speed.svg b/docs/assets/mambo-accelerated-speed.svg new file mode 100644 index 0000000..ce16702 --- /dev/null +++ b/docs/assets/mambo-accelerated-speed.svg @@ -0,0 +1,1240 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.10.9, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + + + + + + + + 8 + + + + Batch size + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 2 + + + + + + + + + + + + + 4 + + + + + + + + + + + + + 6 + + + + + + + + + + + + + 8 + + + + + + + + + + + + + 10 + + + + End-to-end images / second + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1.4 + + + 7.4 + + + 7.8 + + + Torch · CPU + + + + + + + + + + + + + MAMBO v2 + + + + + + + + + Previous v3 FP32 + + + + + + + + + Updated v3 auto + + + + + + + + + + + + + + + + 1 + + + + + + + + + + 8 + + + + Batch size + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 2 + + + + + + + + + + + + + 4 + + + + + + + + + + + + + 6 + + + + + + + + + + + + + 8 + + + + + + + + + + + + + 10 + + + + End-to-end images / second + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1.4 + + + 9.7 + + + 10.8 + + + Onnx · CPU + + + + + + + + + + + + + MAMBO v2 + + + + + + + + + Previous v3 FP32 + + + + + + + + + Updated v3 auto + + + + + + + + + + + + + + + + 1 + + + + + + + + + + 8 + + + + + + + + + + 32 + + + + Batch size + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + + 120 + + + + + + + + + + + + + 140 + + + + End-to-end images / second + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 83.5 + + + 44.5 + + + 136.2 + + + Torch · GPU + + + + + + + + + + + + + MAMBO v2 + + + + + + + + + Previous v3 FP32 + + + + + + + + + Updated v3 auto + + + + + + + + + + + + + + + + 1 + + + + + + + + + + 8 + + + + + + + + + + 32 + + + + Batch size + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + + 120 + + + + + + + + + + + + + 140 + + + + End-to-end images / second + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 83.5 + + + 42.4 + + + 111.3 + + + Onnx · GPU + + + + + + + + + + + + + MAMBO v2 + + + + + + + + + Previous v3 FP32 + + + + + + + + + Updated v3 auto + + + + + Northern Europe: complete-pipeline batch throughput + + + Three fresh-process trials; four CPU threads; decode, preparation and CPU results included. Whiskers: trial-median range. + Updated CUDA: FP16 backbone for PyTorch, TF32 for standard ONNX. CPU: FP32. V2 CPU requires its documented input cast. + + + + + + + + + + + + + + + + + diff --git a/docs/assets/mambo-batch-diagnosis.json b/docs/assets/mambo-batch-diagnosis.json new file mode 100644 index 0000000..7d7fcf9 --- /dev/null +++ b/docs/assets/mambo-batch-diagnosis.json @@ -0,0 +1,1054 @@ +{ + "status": "complete", + "hardware": { + "cpu_model": "12th Gen Intel(R) Core(TM) i7-12800H", + "gpu": "NVIDIA GeForce RTX 3080 Ti Laptop GPU, 700 MiB, 19.13 W, 63, 210 MHz, P8", + "gpu_processes": "", + "ac_online": "1", + "power_profile": null, + "cpu_governor": null + }, + "observed_forward_shapes": [ + [ + 1, + 3, + 384, + 384 + ], + [ + 8, + 3, + 384, + 384 + ], + [ + 32, + 3, + 384, + 384 + ] + ], + "gpu_resident": [ + { + "amp": false, + "channels_last": false, + "batch": 1, + "median_ms": 18.73565999994753, + "images_per_second": 53.374153886375 + }, + { + "amp": false, + "channels_last": false, + "batch": 8, + "median_ms": 49.16021700046258, + "images_per_second": 162.73321169279467 + }, + { + "amp": false, + "channels_last": false, + "batch": 32, + "median_ms": 180.17124500329373, + "images_per_second": 177.60880766192741 + }, + { + "amp": true, + "channels_last": false, + "batch": 1, + "median_ms": 25.087848996918183, + "images_per_second": 39.85993379196602 + }, + { + "amp": true, + "channels_last": false, + "batch": 8, + "median_ms": 25.791216001380235, + "images_per_second": 310.18312589727736 + }, + { + "amp": true, + "channels_last": false, + "batch": 32, + "median_ms": 86.16407899535261, + "images_per_second": 371.3844605908916 + }, + { + "amp": false, + "channels_last": true, + "batch": 1, + "median_ms": 19.476649998978246, + "images_per_second": 51.34353187290733 + }, + { + "amp": false, + "channels_last": true, + "batch": 8, + "median_ms": 59.71050000516698, + "images_per_second": 133.97978578822367 + }, + { + "amp": false, + "channels_last": true, + "batch": 32, + "median_ms": 232.55600000265986, + "images_per_second": 137.60126593007277 + }, + { + "amp": true, + "channels_last": true, + "batch": 1, + "median_ms": 25.334970996482298, + "images_per_second": 39.471132615026384 + }, + { + "amp": true, + "channels_last": true, + "batch": 8, + "median_ms": 27.269050995528232, + "images_per_second": 293.37287906762487 + }, + { + "amp": true, + "channels_last": true, + "batch": 32, + "median_ms": 76.47655099572148, + "images_per_second": 418.4289116514977 + } + ], + "preparation_interventions": [ + { + "variant": "baseline", + "batch": 32, + "median_ms": 562.1651870023925, + "observations": 21 + }, + { + "variant": "contiguous-True-crop-False", + "batch": 32, + "median_ms": 343.510406994028, + "observations": 21 + }, + { + "variant": "contiguous-False-crop-True", + "batch": 32, + "median_ms": 525.9267129949876, + "observations": 21 + }, + { + "variant": "contiguous-True-crop-True", + "batch": 32, + "median_ms": 300.3360820002854, + "observations": 21 + } + ], + "threaded_preparation": [ + { + "workers": 0, + "batch": 1, + "preparation": { + "ms": [ + 19.616127996414434, + 19.292778000817634, + 17.02880099765025, + 16.201587997784372, + 16.534098002011888, + 16.695651996997185, + 18.7562249993789 + ], + "median_ms": 17.02880099765025 + }, + "end_to_end": { + "ms": [ + 53.67833700438496, + 43.58293499535648, + 48.570915998425335, + 58.70243599929381, + 51.21928400330944, + 50.04593500052579, + 109.66543499671388 + ], + "median_ms": 51.21928400330944 + } + }, + { + "workers": 0, + "batch": 8, + "preparation": { + "ms": [ + 142.15509499626933, + 148.18065000144998, + 140.30640100099845, + 134.68550000106916, + 145.06119200086687, + 147.70605999365216, + 146.079619997181 + ], + "median_ms": 145.06119200086687 + }, + "end_to_end": { + "ms": [ + 218.58030399744166, + 222.14935300144134, + 235.41950900107622, + 222.19096399931004, + 213.08374200452818, + 229.48078599438304, + 234.97099000087474 + ], + "median_ms": 222.19096399931004 + } + }, + { + "workers": 0, + "batch": 32, + "preparation": { + "ms": [ + 514.3840050004655, + 539.2801329944632, + 562.3003309956403, + 534.1173130000243, + 540.6491399990045, + 535.0450780024403, + 547.7692889980972 + ], + "median_ms": 539.2801329944632 + }, + "end_to_end": { + "ms": [ + 724.3408480062499, + 724.2302400045446, + 810.2542579945293, + 747.9360249999445, + 752.7866360032931, + 794.1586329980055, + 818.1538760036347 + ], + "median_ms": 752.7866360032931 + } + }, + { + "workers": 4, + "batch": 1, + "preparation": { + "ms": [ + 20.269925997126848, + 22.22652499767719, + 20.50503699865658, + 19.721185002708808, + 21.125603998370934, + 20.139608001045417, + 21.683350001694635 + ], + "median_ms": 20.50503699865658 + }, + "end_to_end": { + "ms": [ + 47.38394000014523, + 46.94011100218631, + 46.92848800186766, + 53.701498996815644, + 51.292921001731884, + 62.550968999858014, + 58.61212900344981 + ], + "median_ms": 51.292921001731884 + } + }, + { + "workers": 4, + "batch": 8, + "preparation": { + "ms": [ + 59.703109000111, + 60.19584999739891, + 59.60010799753945, + 61.238673006300814, + 59.36151299829362, + 60.17484599578893, + 60.63941100001102 + ], + "median_ms": 60.17484599578893 + }, + "end_to_end": { + "ms": [ + 105.8031850043335, + 103.50890800327761, + 99.12116499617696, + 97.16311900410801, + 97.02218999882462, + 100.90754300472327, + 104.99859300034586 + ], + "median_ms": 100.90754300472327 + } + }, + { + "workers": 4, + "batch": 32, + "preparation": { + "ms": [ + 240.61233399697812, + 234.24396100017475, + 234.06826899736188, + 239.8692399947322, + 269.3112029955955, + 258.4397809987422, + 284.8161590009113 + ], + "median_ms": 240.61233399697812 + }, + "end_to_end": { + "ms": [ + 437.74061399744824, + 423.9376620025723, + 443.24309199873824, + 384.62499099841807, + 398.3012780008721, + 387.2949769938714, + 384.7743169972091 + ], + "median_ms": 398.3012780008721 + } + }, + { + "workers": 8, + "batch": 1, + "preparation": { + "ms": [ + 18.01865000015823, + 17.704174999380484, + 17.384498998580966, + 17.4712570005795, + 17.728767001244705, + 18.49644599860767, + 21.064079002826475 + ], + "median_ms": 17.728767001244705 + }, + "end_to_end": { + "ms": [ + 40.77254099684069, + 44.51147800136823, + 41.865560997393914, + 43.20249200100079, + 44.91773899644613, + 49.07010399620049, + 51.19167999509955 + ], + "median_ms": 44.51147800136823 + } + }, + { + "workers": 8, + "batch": 8, + "preparation": { + "ms": [ + 39.493053998739924, + 38.93004300334724, + 40.128129003278445, + 40.12657199928071, + 42.5515759998234, + 41.09424100170145, + 43.94215100182919 + ], + "median_ms": 40.128129003278445 + }, + "end_to_end": { + "ms": [ + 106.83042999880854, + 101.63770999497501, + 99.31824399973266, + 107.72375099622877, + 103.89905999909388, + 118.59914499655133, + 104.00590399513021 + ], + "median_ms": 104.00590399513021 + } + }, + { + "workers": 8, + "batch": 32, + "preparation": { + "ms": [ + 216.59438700589817, + 212.2394100006204, + 197.78962199779926, + 175.19723700388568, + 174.7613069965155, + 189.28766500175698, + 218.17095300502842 + ], + "median_ms": 197.78962199779926 + }, + "end_to_end": { + "ms": [ + 379.3693120023818, + 362.06720899645006, + 359.358975001669, + 357.9453249985818, + 360.56900700350525, + 348.9935030011111, + 366.41513500217116 + ], + "median_ms": 360.56900700350525 + } + } + ], + "preprocess_layout": { + "coordinates": { + "dtype": "float32", + "shape": [ + 438 + ], + "strides": [ + 4 + ], + "contiguous": true + }, + "lo": { + "dtype": "int64", + "shape": [ + 438 + ], + "strides": [ + 8 + ], + "contiguous": true + }, + "fraction": { + "dtype": "float64", + "shape": [ + 438 + ], + "strides": [ + 8 + ], + "contiguous": true + }, + "image": { + "dtype": "float32", + "shape": [ + 3, + 384, + 384 + ], + "strides": [ + 4, + 12, + 4608 + ], + "contiguous": false + }, + "rows": { + "dtype": "float64", + "shape": [ + 3, + 438, + 384 + ], + "strides": [ + 8, + 9216, + 24 + ], + "contiguous": false + }, + "pixels": { + "dtype": "float32", + "shape": [ + 3, + 384, + 384 + ], + "strides": [ + 4, + 12, + 4608 + ], + "contiguous": false + } + }, + "preprocess_line_profile": [ + { + "line": 61, + "code": "pixels = rows[:, :, lo] * (1 - fraction)[None, None, :] + rows[:, :, hi] * fraction[None, None, :]", + "ms": 257.64437997713685 + }, + { + "line": 60, + "code": "rows = image[:, lo] * (1 - fraction)[None, :, None] + image[:, hi] * fraction[None, :, None]", + "ms": 200.77586602565134 + }, + { + "line": 65, + "code": "(pixels - np.array(RECIPE[\"mean\"], dtype=np.float32)[:, None, None]) / np.array(RECIPE[\"std\"], dtype=np.float32)[:, None, None]", + "ms": 114.54548400070053 + }, + { + "line": 54, + "code": "image = image[:, yy][:, :, xx].astype(np.float32)", + "ms": 63.36485400242964 + }, + { + "line": 50, + "code": "image = _rgb(item)", + "ms": 44.08031197817763 + }, + { + "line": 63, + "code": "pixels = np.rint(pixels[:, offset : offset + size, offset : offset + size]).astype(np.float32) / 255", + "ms": 37.388277996797115 + }, + { + "line": 64, + "code": "return np.ascontiguousarray(", + "ms": 22.246315966185648 + }, + { + "line": 56, + "code": "coordinates = np.maximum((np.arange(resized, dtype=np.float32) + 0.5) * np.float32(size / resized) - 0.5, 0)", + "ms": 1.2886569966212846 + }, + { + "line": 52, + "code": "yy = np.minimum((np.arange(size, dtype=np.float32) * np.float32(image.shape[1] / size)).astype(int), image.shape[1] - 1)", + "ms": 1.1460980094852857 + }, + { + "line": 62, + "code": "offset = (resized - size) // 2", + "ms": 0.39232201379491016 + }, + { + "line": 57, + "code": "lo = np.floor(coordinates).astype(int)", + "ms": 0.23413298913510516 + }, + { + "line": 53, + "code": "xx = np.minimum((np.arange(size, dtype=np.float32) * np.float32(image.shape[2] / size)).astype(int), image.shape[2] - 1)", + "ms": 0.22443901252700016 + }, + { + "line": 58, + "code": "hi = np.minimum(lo + 1, size - 1)", + "ms": 0.19344200700288638 + }, + { + "line": 59, + "code": "fraction = coordinates - lo", + "ms": 0.18871598149416968 + }, + { + "line": 51, + "code": "size, resized = 384, 438", + "ms": 0.10417701560072601 + } + ], + "cuda_kernel_time_shares_batch32": { + "convolution": 0.6359277858701351, + "batch_normalization": 0.14220184332861804, + "silu": 0.12333557066163707 + }, + "onnx_placement": { + "before": { + "cpu_model": "12th Gen Intel(R) Core(TM) i7-12800H", + "gpu": "NVIDIA GeForce RTX 3080 Ti Laptop GPU, 910 MiB, 20.07 W, 67, 210 MHz, P8", + "gpu_processes": "", + "ac_online": "1", + "power_profile": null, + "cpu_governor": null + }, + "cells": [ + { + "batch": 1, + "profiled_median_ms": 14.495415998680983, + "node_totals": [ + { + "provider": "CUDAExecutionProvider", + "op": "Conv", + "us": 731492.0, + "calls": 1530 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Add", + "us": 91277.0, + "calls": 342 + }, + { + "provider": "CUDAExecutionProvider", + "op": "ScatterElements", + "us": 26894.0, + "calls": 54 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Gemm", + "us": 19772.0, + "calls": 18 + }, + { + "provider": "CUDAExecutionProvider", + "op": "QuickGelu", + "us": 17403.0, + "calls": 918 + }, + { + "provider": "CUDAExecutionProvider", + "op": "ReduceMean", + "us": 11877.0, + "calls": 279 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Neg", + "us": 9642.0, + "calls": 9 + }, + { + "provider": "CUDAExecutionProvider", + "op": "ReduceL2", + "us": 8983.0, + "calls": 9 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Sigmoid", + "us": 6007.0, + "calls": 270 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Mul", + "us": 5523.0, + "calls": 270 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Expand", + "us": 2812.0, + "calls": 45 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Clip", + "us": 1791.0, + "calls": 18 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Div", + "us": 1131.0, + "calls": 18 + }, + { + "provider": "CUDAExecutionProvider", + "op": "GatherElements", + "us": 978.0, + "calls": 18 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Sub", + "us": 900.0, + "calls": 27 + }, + { + "provider": "CPUExecutionProvider", + "op": "Acos", + "us": 567.0, + "calls": 9 + }, + { + "provider": "CPUExecutionProvider", + "op": "Concat", + "us": 429.0, + "calls": 36 + }, + { + "provider": "CUDAExecutionProvider", + "op": "MemcpyToHost", + "us": 375.0, + "calls": 9 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Shape", + "us": 372.0, + "calls": 27 + }, + { + "provider": "CUDAExecutionProvider", + "op": "ConstantOfShape", + "us": 338.0, + "calls": 18 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Log", + "us": 293.0, + "calls": 18 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Exp", + "us": 292.0, + "calls": 18 + }, + { + "provider": "CUDAExecutionProvider", + "op": "MemcpyFromHost", + "us": 267.0, + "calls": 9 + }, + { + "provider": "CUDAExecutionProvider", + "op": "LeakyRelu", + "us": 195.0, + "calls": 9 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Reshape", + "us": 75.0, + "calls": 9 + } + ], + "trace": "local-evidence/mambo-batch-root-cause/onnx-1_2026-09-23_21-12-47_264.json" + }, + { + "batch": 8, + "profiled_median_ms": 54.01113900006749, + "node_totals": [ + { + "provider": "CUDAExecutionProvider", + "op": "Conv", + "us": 411025.0, + "calls": 1530 + }, + { + "provider": "CUDAExecutionProvider", + "op": "QuickGelu", + "us": 11434.0, + "calls": 918 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Add", + "us": 7787.0, + "calls": 342 + }, + { + "provider": "CUDAExecutionProvider", + "op": "ReduceMean", + "us": 6011.0, + "calls": 279 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Mul", + "us": 3882.0, + "calls": 270 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Sigmoid", + "us": 3511.0, + "calls": 270 + }, + { + "provider": "CUDAExecutionProvider", + "op": "ScatterElements", + "us": 1943.0, + "calls": 54 + }, + { + "provider": "CPUExecutionProvider", + "op": "Acos", + "us": 1096.0, + "calls": 9 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Expand", + "us": 989.0, + "calls": 45 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Gemm", + "us": 900.0, + "calls": 18 + }, + { + "provider": "CUDAExecutionProvider", + "op": "MemcpyFromHost", + "us": 867.0, + "calls": 9 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Sub", + "us": 791.0, + "calls": 27 + }, + { + "provider": "CUDAExecutionProvider", + "op": "ReduceL2", + "us": 577.0, + "calls": 9 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Log", + "us": 490.0, + "calls": 18 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Shape", + "us": 430.0, + "calls": 27 + }, + { + "provider": "CPUExecutionProvider", + "op": "Concat", + "us": 425.0, + "calls": 36 + }, + { + "provider": "CUDAExecutionProvider", + "op": "GatherElements", + "us": 335.0, + "calls": 18 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Div", + "us": 313.0, + "calls": 18 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Clip", + "us": 288.0, + "calls": 18 + }, + { + "provider": "CUDAExecutionProvider", + "op": "MemcpyToHost", + "us": 284.0, + "calls": 9 + }, + { + "provider": "CUDAExecutionProvider", + "op": "ConstantOfShape", + "us": 273.0, + "calls": 18 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Exp", + "us": 245.0, + "calls": 18 + }, + { + "provider": "CUDAExecutionProvider", + "op": "LeakyRelu", + "us": 162.0, + "calls": 9 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Neg", + "us": 130.0, + "calls": 9 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Reshape", + "us": 91.0, + "calls": 9 + } + ], + "trace": "local-evidence/mambo-batch-root-cause/onnx-8_2026-09-23_21-12-49_543.json" + }, + { + "batch": 32, + "profiled_median_ms": 233.22565700073028, + "node_totals": [ + { + "provider": "CUDAExecutionProvider", + "op": "Conv", + "us": 384720.0, + "calls": 1530 + }, + { + "provider": "CUDAExecutionProvider", + "op": "QuickGelu", + "us": 11865.0, + "calls": 918 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Add", + "us": 10292.0, + "calls": 342 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Gemm", + "us": 6870.0, + "calls": 18 + }, + { + "provider": "CUDAExecutionProvider", + "op": "ReduceMean", + "us": 5579.0, + "calls": 279 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Mul", + "us": 3899.0, + "calls": 270 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Sigmoid", + "us": 3759.0, + "calls": 270 + }, + { + "provider": "CPUExecutionProvider", + "op": "Acos", + "us": 3519.0, + "calls": 9 + }, + { + "provider": "CUDAExecutionProvider", + "op": "MemcpyToHost", + "us": 1920.0, + "calls": 9 + }, + { + "provider": "CUDAExecutionProvider", + "op": "MemcpyFromHost", + "us": 1877.0, + "calls": 9 + }, + { + "provider": "CUDAExecutionProvider", + "op": "ScatterElements", + "us": 1387.0, + "calls": 54 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Sub", + "us": 833.0, + "calls": 27 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Expand", + "us": 763.0, + "calls": 45 + }, + { + "provider": "CUDAExecutionProvider", + "op": "ReduceL2", + "us": 647.0, + "calls": 9 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Shape", + "us": 510.0, + "calls": 27 + }, + { + "provider": "CPUExecutionProvider", + "op": "Concat", + "us": 420.0, + "calls": 36 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Div", + "us": 340.0, + "calls": 18 + }, + { + "provider": "CUDAExecutionProvider", + "op": "ConstantOfShape", + "us": 289.0, + "calls": 18 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Clip", + "us": 284.0, + "calls": 18 + }, + { + "provider": "CUDAExecutionProvider", + "op": "GatherElements", + "us": 260.0, + "calls": 18 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Exp", + "us": 246.0, + "calls": 18 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Log", + "us": 210.0, + "calls": 18 + }, + { + "provider": "CUDAExecutionProvider", + "op": "LeakyRelu", + "us": 164.0, + "calls": 9 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Neg", + "us": 147.0, + "calls": 9 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Reshape", + "us": 70.0, + "calls": 9 + } + ], + "trace": "local-evidence/mambo-batch-root-cause/onnx-32_2026-09-23_21-12-51_225.json" + } + ], + "providers": [], + "after": { + "cpu_model": "12th Gen Intel(R) Core(TM) i7-12800H", + "gpu": "NVIDIA GeForce RTX 3080 Ti Laptop GPU, 1957 MiB, 41.93 W, 70, 1222 MHz, P0", + "gpu_processes": "151641, [N/A]", + "ac_online": "1", + "power_profile": null, + "cpu_governor": null + } + }, + "source_sha256": { + "report.json": "918aecaef03e91796d2972c792018407151222fbc344d5710ecc6d751ee91efc", + "preprocess-interventions.json": "48009fc511ef5d98fc6257cdfe7dc6e62f7a8f907eab25f4e89ef0fbd2b0dce7", + "preprocess-line-profile.json": "c69867c2e2e78f1c77e7ae4cfd1eb60044eeb92a7f8343c99628f0619fd866ac", + "preprocess-layout.json": "ae01376e86e37a523c8e53e457e89d896fed586a593071688f6729e08eb086d5", + "torch-profile-32.json": "a10f0ab9e11b70125a44b5289432173b988509a3ccbb6a6c56e1942a48c919e3", + "onnx-profile-summary.json": "6e22f17f87cd981dfb20d5cb329af03ad10b7f45a25a4b0e1b25d33780607ad7" + }, + "limits": "Diagnostic interventions, not qualified release variants. GPU timings exclude input preparation and transfers; threaded end-to-end uses unchanged pixels. Profiler timings are explanatory, not replacement benchmarks. No hardware counter roofline attribution." +} diff --git a/docs/assets/mambo-compact-tta.json b/docs/assets/mambo-compact-tta.json new file mode 100644 index 0000000..303856b --- /dev/null +++ b/docs/assets/mambo-compact-tta.json @@ -0,0 +1,4808 @@ +{ + "status": "complete", + "ids": [ + 499, + 7456, + 7545, + 13157, + 13446, + 15935, + 17643, + 19324, + 19712, + 29688, + 29743, + 29748, + 29759, + 29771, + 29795, + 41098, + 43023, + 43076, + 43198, + 43200, + 43210, + 43242, + 43328, + 43413, + 43544, + 43628, + 43642, + 43786, + 43909, + 44089, + 44150, + 44841, + 45793, + 47361, + 52031, + 52147, + 53598, + 56808, + 443, + 1306, + 2024, + 2656, + 2755, + 3705, + 3777, + 3988, + 4040, + 4232, + 4369, + 4755, + 5460, + 6601, + 6831, + 6915, + 7378, + 7774, + 8013, + 8764, + 8812, + 9004, + 9251, + 9396, + 9621, + 9623, + 9828, + 9909, + 9947, + 10010, + 10235, + 10916, + 12912, + 13059, + 13604, + 14120, + 14545, + 14557, + 15151, + 15190, + 15236, + 15506, + 15558, + 16105, + 16194, + 16213, + 16329, + 16675, + 17035, + 18155, + 18468, + 21097, + 21206, + 21436, + 22879, + 23642, + 24081, + 24313, + 24898, + 25166, + 26201, + 26298, + 26862, + 27120, + 28939, + 29659, + 29918, + 30862, + 30943, + 31051, + 31453, + 31482, + 31485, + 31682, + 31925, + 32216, + 32680, + 32682, + 32993, + 33059, + 33604, + 34254, + 34828, + 35033, + 35085, + 35248, + 37336, + 37379, + 37421, + 38628, + 38846, + 39101, + 39663, + 39896, + 40027, + 40476, + 40686, + 42502, + 42754, + 43348, + 43540, + 44394, + 46722, + 46814, + 46827, + 47313, + 47859, + 48899, + 49511, + 49521, + 50032, + 51394, + 52335, + 52643, + 52730, + 52767, + 52978, + 53078, + 53239, + 53538, + 54524, + 54759, + 55437, + 56094, + 57155, + 57447, + 57933, + 58035, + 45, + 70, + 83, + 99, + 257, + 299, + 494, + 544, + 586, + 593, + 625, + 639, + 684, + 792, + 882, + 910, + 947, + 965, + 1102, + 1103, + 1173, + 1229, + 1231, + 1290, + 1342, + 1417, + 1426, + 1492, + 1578, + 1668, + 1672, + 1695, + 1748, + 1762, + 1780, + 1806, + 1836, + 1890, + 2100, + 2106, + 2147, + 2205, + 2265, + 2290, + 2328, + 2407, + 2469, + 2496, + 2497, + 2502, + 2512, + 2531, + 2634, + 2654, + 2690, + 2724, + 2764, + 2769, + 2792, + 2801, + 2878, + 2892, + 2907, + 2938, + 2955, + 2971, + 3130, + 3150, + 3153, + 3215, + 3286, + 3377, + 3404, + 3444, + 3496, + 3539, + 3622, + 3706, + 3709, + 3714, + 3717, + 3727, + 3744, + 3759, + 3795, + 3831, + 3844, + 3897, + 4063, + 4064, + 4084, + 4140, + 4241, + 4363, + 4507, + 4510, + 4608, + 4630, + 4678, + 4705, + 4729, + 4794, + 4862, + 4866, + 4900, + 4972, + 5015, + 5042, + 5046, + 5056, + 5071, + 5075, + 5158, + 5201, + 5272, + 5289, + 5421, + 5433, + 5448, + 5518, + 5581, + 5613, + 5739, + 5835, + 5890, + 5936, + 5985, + 6035, + 6076, + 6107, + 6169, + 6320, + 6354, + 6496, + 6527, + 6529, + 6532, + 6595, + 6636, + 6642, + 6827, + 6916, + 6930, + 6946, + 6957, + 6975, + 7129, + 7167, + 7222, + 7288, + 7298, + 7347, + 7386, + 7551, + 7581, + 7752, + 7773, + 7828, + 7880, + 8070, + 8149, + 8151, + 8157, + 8260, + 8313, + 8358, + 8368, + 8369, + 8452, + 8460, + 8498, + 8503, + 8515, + 8584, + 8588, + 8772, + 8808, + 8838, + 8859, + 8931, + 8932, + 9143, + 9149, + 9164, + 9227, + 9332, + 9417, + 9484, + 9512, + 9518, + 9669, + 9695, + 9702, + 9723, + 9772, + 9806, + 9811, + 9860, + 9927, + 9937, + 9941, + 9980, + 10011, + 10042, + 10192, + 10244, + 10303, + 10386, + 10387, + 10466, + 10693, + 10808, + 10913, + 10950, + 10983, + 11003, + 11012, + 11017, + 11156, + 11230, + 11233, + 11292, + 11303, + 11312, + 11375, + 11448, + 11574, + 11584, + 11602, + 11688, + 11694, + 11997, + 12054, + 12091, + 12138, + 12139, + 12240, + 12255, + 12281, + 12319, + 12340, + 12366, + 12412, + 12461, + 12554, + 12581, + 12587, + 12649, + 12701, + 12945, + 12954, + 12969, + 12974, + 13044, + 13077, + 13192, + 13215, + 13263, + 13324, + 13528, + 13542, + 13547, + 13618, + 13869, + 13958, + 14311, + 14349, + 14377, + 14441, + 14474, + 14549, + 14594, + 14639, + 14727, + 14864, + 14921, + 14936, + 15093, + 15116, + 15135, + 15262, + 15388, + 15405, + 15449, + 15469, + 15609, + 15681, + 15683, + 15695, + 15719, + 15857, + 15869, + 15923, + 15963, + 15985, + 16023, + 16113, + 16127, + 16182, + 16199, + 16258, + 16365, + 16379, + 16385, + 16408, + 16496, + 16557, + 16571, + 16728, + 16743, + 16972, + 17057, + 17059, + 17071, + 17078, + 17235, + 17277, + 17293, + 17306, + 17581, + 17591, + 17702, + 17825, + 17839, + 17879, + 17920, + 17926, + 18053, + 18096, + 18141, + 18162, + 18182, + 18315, + 18380, + 18399, + 18406, + 18479, + 18512, + 18573, + 18596, + 18611, + 18630, + 18646, + 18676, + 18701, + 18786, + 18929, + 18945, + 18975, + 19108, + 19115, + 19158, + 19180, + 19487, + 19492, + 19503, + 19508, + 19509, + 19538, + 19617, + 19698, + 19725, + 19795, + 19883, + 19907, + 20009, + 20020, + 20067, + 20103, + 20199, + 20383, + 20457, + 20475, + 20543, + 20584, + 20620, + 20685, + 20705, + 20712, + 20785, + 20803, + 20851, + 20875, + 20898, + 20899, + 20905, + 20990, + 21029, + 21039, + 21075, + 21079, + 21083, + 21085, + 21221, + 21308, + 21335, + 21467, + 21570, + 21623, + 21687, + 21757, + 21802, + 21907, + 21924, + 21929, + 21982, + 22245, + 22267, + 22282, + 22320, + 22374, + 22384, + 22524, + 22557, + 22668, + 22674, + 22812, + 22874, + 23128, + 23226, + 23343, + 23376, + 23471, + 23587, + 23594, + 23635, + 23658, + 23661, + 24003, + 24055, + 24125, + 24216, + 24278, + 24352, + 24423, + 24539, + 24562, + 24592, + 24659, + 24714, + 24822, + 25090, + 25123, + 25145, + 25241, + 25262, + 25275, + 25340, + 25354, + 25436, + 25504, + 25529, + 25591, + 25631, + 25635, + 25692, + 25952, + 26029, + 26070, + 26077, + 26089, + 26126, + 26127, + 26131, + 26178, + 26189, + 26197, + 26344, + 26349, + 26359, + 26364, + 26409, + 26415, + 26434, + 26545, + 26716, + 26750, + 26839, + 26932, + 26948, + 27009, + 27016, + 27050, + 27059, + 27084, + 27142, + 27183, + 27186, + 27284, + 27388, + 27408, + 27420, + 27534, + 27573, + 27601, + 27729, + 27820, + 27882, + 27981, + 27990, + 28169, + 28184, + 28212, + 28219, + 28258, + 28435, + 28525, + 28585, + 28586, + 28834, + 28865, + 28893, + 28902, + 29000, + 29066, + 29068, + 29137, + 29211, + 29218, + 29285, + 29338, + 29380, + 29394, + 29434, + 29476, + 29531, + 29565, + 29998, + 30067, + 30128, + 30208, + 30263, + 30273, + 30326, + 30364, + 30429, + 30514, + 30643, + 30677, + 30683, + 30703, + 30895, + 30931, + 30993, + 31056, + 31217, + 31301, + 31480, + 31640, + 31671, + 31728, + 31761, + 31846, + 31864, + 31935, + 32015, + 32040, + 32062, + 32110, + 32137, + 32144, + 32159, + 32240, + 32261, + 32283, + 32285, + 32317, + 32431, + 32483, + 32673, + 32749, + 32813, + 32883, + 32956, + 32965, + 33012, + 33072, + 33170, + 33360, + 33368, + 33487, + 33488, + 33529, + 33536, + 33580, + 33610, + 33639, + 33646, + 33792, + 33896, + 33966, + 33995, + 34000, + 34012, + 34070, + 34122, + 34133, + 34134, + 34140, + 34194, + 34206, + 34217, + 34243, + 34290, + 34329, + 34333, + 34376, + 34388, + 34390, + 34669, + 34735, + 34825, + 34827, + 34863, + 34896, + 34909, + 34915, + 34941, + 35107, + 35166, + 35271, + 35456, + 35460, + 35507, + 35542, + 35556, + 35654, + 35674, + 35687, + 35734, + 35758, + 35836, + 35858, + 35877, + 36120, + 36226, + 36243, + 36341, + 36422, + 36434, + 36600, + 36601, + 36667, + 36709, + 36769, + 36818, + 36829, + 36866, + 36999, + 37039, + 37061, + 37100, + 37189, + 37276, + 37392, + 37433, + 37455, + 37479, + 37488, + 37607, + 37610, + 37660, + 37864, + 37905, + 37934, + 37974, + 37996, + 38017, + 38037, + 38059, + 38085, + 38261, + 38314, + 38323, + 38442, + 38546, + 38580, + 38658, + 38747, + 38786, + 38826, + 38839, + 38841, + 38849, + 38885, + 38901, + 38913, + 39019, + 39062, + 39085, + 39095, + 39143, + 39165, + 39222, + 39264, + 39291, + 39340, + 39559, + 39610, + 39845, + 39921, + 39931, + 39982, + 40101, + 40232, + 40242, + 40263, + 40279, + 40294, + 40329, + 40338, + 40344, + 40485, + 40528, + 40605, + 40629, + 40637, + 40672, + 40872, + 40878, + 40925, + 40941, + 40982, + 40986, + 41034, + 41060, + 41160, + 41217, + 41254, + 41262, + 41414, + 41611, + 41722, + 41814, + 41832, + 41877, + 41886, + 41942, + 41955, + 42023, + 42044, + 42096, + 42237, + 42262, + 42463, + 42467, + 42572, + 42584, + 42590, + 42594, + 42670, + 42727, + 42748, + 42777, + 42852, + 42960, + 43033, + 43095, + 43129, + 43180, + 43329, + 43537, + 43624, + 43680, + 43687, + 43729, + 43802, + 43809, + 43819, + 43839, + 43870, + 43874, + 43899, + 43905, + 43917, + 43922, + 44213, + 44235, + 44247, + 44328, + 44372, + 44456, + 44460, + 44530, + 44561, + 44576, + 44601, + 44605, + 44666, + 44732, + 44863, + 44886, + 45035, + 45075, + 45209, + 45234, + 45293, + 45574, + 45600, + 45675, + 45679, + 45691, + 45744, + 45851, + 45892, + 46002, + 46418, + 46440, + 46450, + 46529, + 46761, + 46776, + 46836, + 46926, + 46941, + 46949, + 46955, + 46956, + 47039, + 47044, + 47052, + 47090, + 47094, + 47105, + 47129, + 47136, + 47185, + 47191, + 47213, + 47372, + 47490, + 47524, + 47765, + 47793, + 47805, + 47958, + 48142, + 48181, + 48410, + 48491, + 48522, + 48536, + 48632, + 48700, + 48712, + 48772, + 48774, + 48791, + 48811, + 48864, + 48947, + 48953, + 49038, + 49039, + 49074, + 49117, + 49234, + 49327, + 49333, + 49338, + 49406, + 49429, + 49441, + 49475, + 49617, + 49688, + 49773, + 49791, + 49854, + 49861, + 49878, + 49937, + 49963, + 50017, + 50041, + 50087, + 50154, + 50328, + 50360, + 50416, + 50439, + 50573, + 50843, + 50855, + 50921, + 50952, + 50964, + 50972, + 50974, + 51005, + 51080, + 51133, + 51257, + 51334, + 51411, + 51432, + 51461, + 51589, + 51637, + 51662, + 51841, + 51890, + 51971, + 52013, + 52123, + 52319, + 52340, + 52350, + 52355, + 52472, + 52502, + 52544, + 52729, + 52737, + 52845, + 52936, + 53027, + 53058, + 53106, + 53209, + 53241, + 53274, + 53291, + 53309, + 53387, + 53397, + 53403, + 53409, + 53416, + 53455, + 53480, + 53519, + 53553, + 53668, + 53671, + 53693, + 53870, + 53893, + 53960, + 54070, + 54335, + 54391, + 54405, + 54478, + 54500, + 54505, + 54545, + 54646, + 54651, + 54720, + 54753, + 54780, + 54787, + 54851, + 54924, + 54939, + 54964, + 55028, + 55197, + 55431, + 55462, + 55507, + 55606, + 55659, + 55692, + 55703, + 55734, + 55743, + 55770, + 55808, + 55821, + 55843, + 55924, + 55933, + 55997, + 56005, + 56168, + 56201, + 56206, + 56269, + 56295, + 56301, + 56348, + 56361, + 56413, + 56515, + 56570, + 56582, + 56594, + 56617, + 56631, + 56654, + 56694, + 56703, + 56780, + 56782, + 56913, + 56939, + 56989, + 57001, + 57014, + 57063, + 57154, + 57198, + 57288, + 57350, + 57365, + 57368, + 57387, + 57394, + 57438, + 57460, + 57467, + 57661, + 57818, + 57854, + 57891, + 57950, + 57963, + 58044, + 58270, + 58290, + 58392, + 58430 + ], + "splits": { + "focus": [ + 0, + 38 + ], + "controls": [ + 38, + 166 + ], + "random": [ + 166, + 1190 + ] + }, + "seed": 20260925, + "parameters": { + "original": {}, + "pad08": { + "padding": 0.08 + }, + "pad15": { + "padding": 0.15 + }, + "rot-10_pad0.08": { + "degrees": -10, + "padding": 0.08 + }, + "rot-10_pad0.15": { + "degrees": -10, + "padding": 0.15 + }, + "rot10_pad0.08": { + "degrees": 10, + "padding": 0.08 + }, + "rot10_pad0.15": { + "degrees": 10, + "padding": 0.15 + }, + "rot-30_pad0.08": { + "degrees": -30, + "padding": 0.08 + }, + "rot-30_pad0.15": { + "degrees": -30, + "padding": 0.15 + }, + "rot30_pad0.08": { + "degrees": 30, + "padding": 0.08 + }, + "rot30_pad0.15": { + "degrees": 30, + "padding": 0.15 + }, + "rot-30_pad0.25": { + "degrees": -30, + "padding": 0.25 + }, + "rot30_pad0.25": { + "degrees": 30, + "padding": 0.25 + } + }, + "recipes": { + "none": [ + "original" + ], + "padded_scale": [ + "original", + "pad08", + "pad15" + ], + "wide_rotation_5": [ + "original", + "rot-10_pad0.08", + "rot10_pad0.08", + "rot-30_pad0.08", + "rot30_pad0.08" + ], + "rotation10_3": [ + "original", + "rot-10_pad0.08", + "rot10_pad0.08" + ], + "rotation30_3": [ + "original", + "rot-30_pad0.08", + "rot30_pad0.08" + ], + "rotation10_pad15_3": [ + "original", + "rot-10_pad0.15", + "rot10_pad0.15" + ], + "rotation30_pad15_3": [ + "original", + "rot-30_pad0.15", + "rot30_pad0.15" + ], + "rotation30_pad25_3": [ + "original", + "rot-30_pad0.25", + "rot30_pad0.25" + ], + "mixed_3": [ + "original", + "rot-10_pad0.08", + "rot30_pad0.15" + ], + "mixed_mirrored_3": [ + "original", + "rot10_pad0.08", + "rot-30_pad0.15" + ], + "wide_rotation_pad15_5": [ + "original", + "rot-10_pad0.15", + "rot10_pad0.15", + "rot-30_pad0.15", + "rot30_pad0.15" + ], + "wide_rotation_mixed_padding_5": [ + "original", + "rot-10_pad0.15", + "rot10_pad0.15", + "rot-30_pad0.25", + "rot30_pad0.25" + ] + }, + "selection": "Existing flagged cases and controls plus a disjoint uniform random reporting sample; exploratory only", + "effective_precision": "fp16", + "aggregation_check": "Normal TTA API agrees at atol=1e-6 with identical batch shape", + "composition_followup": "Two five-view composed policies added after inspecting first qualification; same cached individual views, no new inference", + "runtime": { + "threads": 4, + "tf32": false, + "autocast": false, + "precision": "float32", + "platform": "Linux-5.15.167.4-microsoft-standard-WSL2-x86_64-with-glibc2.35", + "torch": "2.12.0+cu130", + "cuda": "13.0" + }, + "metrics": { + "revision": "70cc69adc05362863439277048e06386c1f885e1", + "fixed_thresholds": [ + 0.8099595010280609, + 0.82109534740448, + 0.970800906419754 + ], + "scores": { + "none": { + "focus": { + "zero": { + "accuracy": { + "0": 0.07692307692307693, + "1": 0.08333333333333333, + "2": 0.14285714285714285 + }, + "precision": { + "0": 0.08333333333333333, + "1": 0.08333333333333333, + "2": 0.1 + }, + "recall": { + "0": 0.07692307692307693, + "1": 0.08333333333333333, + "2": 0.14285714285714285 + }, + "f1": { + "0": 0.041666666666666664, + "1": 0.043478260869565216, + "2": 0.07142857142857142 + }, + "micro_accuracy": { + "0": 0.05263157894736842, + "1": 0.05263157894736842, + "2": 0.05263157894736842 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "precision": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "recall": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "f1": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "micro_accuracy": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "coverage": { + "0": 0.8421052631578947, + "1": 0.8421052631578947, + "2": 0.8157894736842105 + } + } + }, + "controls": { + "zero": { + "accuracy": { + "0": 0.809047619047619, + "1": 0.9534412955465588, + "2": 1.0 + }, + "precision": { + "0": 0.8077464788732395, + "1": 0.8870967741935484, + "2": 1.0 + }, + "recall": { + "0": 0.809047619047619, + "1": 0.9534412955465588, + "2": 1.0 + }, + "f1": { + "0": 0.682683113406005, + "1": 0.8528645833333333, + "2": 1.0 + }, + "micro_accuracy": { + "0": 0.734375, + "1": 0.90625, + "2": 1.0 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.8345588235294118, + "1": 0.9793956043956044, + "2": 1.0 + }, + "precision": { + "0": 0.8537878787878788, + "1": 0.9322033898305084, + "2": 1.0 + }, + "recall": { + "0": 0.8014285714285715, + "1": 0.9534412955465588, + "2": 1.0 + }, + "f1": { + "0": 0.7091621458710066, + "1": 0.8948087431693988, + "2": 1.0 + }, + "micro_accuracy": { + "0": 0.773109243697479, + "1": 0.9354838709677419, + "2": 1.0 + }, + "coverage": { + "0": 0.9296875, + "1": 0.96875, + "2": 1.0 + } + } + }, + "random": { + "zero": { + "accuracy": { + "0": 0.7287591645265503, + "1": 0.8120645062193705, + "2": 0.8462340874847639 + }, + "precision": { + "0": 0.5739530083616106, + "1": 0.6302851947218145, + "2": 0.5380594603502131 + }, + "recall": { + "0": 0.7287591645265503, + "1": 0.8120645062193705, + "2": 0.8462340874847639 + }, + "f1": { + "0": 0.4848822757072845, + "1": 0.5679075771932561, + "2": 0.5015645407987354 + }, + "micro_accuracy": { + "0": 0.7138671875, + "1": 0.7958984375, + "2": 0.92578125 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.8661252354048965, + "1": 0.9638258680695261, + "2": 0.9992480583870744 + }, + "precision": { + "0": 0.8685714285714285, + "1": 0.9159920887193612, + "2": 0.9994813278008299 + }, + "recall": { + "0": 0.6136500174996423, + "1": 0.6947424739533938, + "2": 0.7229324171297198 + }, + "f1": { + "0": 0.5978964265884702, + "1": 0.6982229322444271, + "2": 0.8094967567216647 + }, + "micro_accuracy": { + "0": 0.8401639344262295, + "1": 0.918075422626788, + "2": 0.9973009446693657 + }, + "coverage": { + "0": 0.71484375, + "1": 0.7509765625, + "2": 0.7236328125 + } + } + } + }, + "padded_scale": { + "focus": { + "zero": { + "accuracy": { + "0": 0.07692307692307693, + "1": 0.08333333333333333, + "2": 0.14285714285714285 + }, + "precision": { + "0": 0.09090909090909091, + "1": 0.09090909090909091, + "2": 0.1 + }, + "recall": { + "0": 0.07692307692307693, + "1": 0.08333333333333333, + "2": 0.14285714285714285 + }, + "f1": { + "0": 0.043478260869565216, + "1": 0.045454545454545456, + "2": 0.07142857142857142 + }, + "micro_accuracy": { + "0": 0.05263157894736842, + "1": 0.05263157894736842, + "2": 0.05263157894736842 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.08333333333333333, + "1": 0.09090909090909091, + "2": 0.2 + }, + "precision": { + "0": 0.1111111111111111, + "1": 0.1111111111111111, + "2": 0.14285714285714285 + }, + "recall": { + "0": 0.07692307692307693, + "1": 0.08333333333333333, + "2": 0.07142857142857142 + }, + "f1": { + "0": 0.047619047619047616, + "1": 0.05, + "2": 0.05128205128205128 + }, + "micro_accuracy": { + "0": 0.05714285714285714, + "1": 0.058823529411764705, + "2": 0.045454545454545456 + }, + "coverage": { + "0": 0.9210526315789473, + "1": 0.8947368421052632, + "2": 0.5789473684210527 + } + } + }, + "controls": { + "zero": { + "accuracy": { + "0": 0.8204761904761906, + "1": 0.9709851551956815, + "2": 1.0 + }, + "precision": { + "0": 0.819718309859155, + "1": 0.9032258064516129, + "2": 1.0 + }, + "recall": { + "0": 0.8204761904761906, + "1": 0.9709851551956815, + "2": 1.0 + }, + "f1": { + "0": 0.7002032520325203, + "1": 0.8822751322751322, + "2": 1.0 + }, + "micro_accuracy": { + "0": 0.734375, + "1": 0.9140625, + "2": 1.0 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.8369565217391305, + "1": 0.979757085020243, + "2": 1.0 + }, + "precision": { + "0": 0.8433823529411765, + "1": 0.9180327868852459, + "2": 1.0 + }, + "recall": { + "0": 0.8085714285714286, + "1": 0.9709851551956815, + "2": 1.0 + }, + "f1": { + "0": 0.7086309523809523, + "1": 0.8965053763440859, + "2": 1.0 + }, + "micro_accuracy": { + "0": 0.7666666666666667, + "1": 0.9285714285714286, + "2": 1.0 + }, + "coverage": { + "0": 0.9375, + "1": 0.984375, + "2": 1.0 + } + } + }, + "random": { + "zero": { + "accuracy": { + "0": 0.745465291998228, + "1": 0.8330189970124037, + "2": 0.8842807681031762 + }, + "precision": { + "0": 0.6099473825709565, + "1": 0.683049558096778, + "2": 0.5729386752991159 + }, + "recall": { + "0": 0.745465291998228, + "1": 0.8330189970124037, + "2": 0.8842807681031762 + }, + "f1": { + "0": 0.5194714677110217, + "1": 0.6213163990235893, + "2": 0.5717441179819487 + }, + "micro_accuracy": { + "0": 0.7353515625, + "1": 0.8134765625, + "2": 0.9404296875 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.8716931216931216, + "1": 0.9643968604246995, + "2": 0.9993111168518041 + }, + "precision": { + "0": 0.8595505617977528, + "1": 0.9151865881032547, + "2": 0.9994877049180327 + }, + "recall": { + "0": 0.632523326105755, + "1": 0.7189973821597091, + "2": 0.7567291181807575 + }, + "f1": { + "0": 0.6043949140738758, + "1": 0.7153219743976313, + "2": 0.8334463255800845 + }, + "micro_accuracy": { + "0": 0.8457516339869281, + "1": 0.9204968944099379, + "2": 0.9974937343358395 + }, + "coverage": { + "0": 0.7470703125, + "1": 0.7861328125, + "2": 0.779296875 + } + } + } + }, + "wide_rotation_5": { + "focus": { + "zero": { + "accuracy": { + "0": 0.07692307692307693, + "1": 0.08333333333333333, + "2": 0.16553287981859413 + }, + "precision": { + "0": 0.08333333333333333, + "1": 0.08333333333333333, + "2": 0.25 + }, + "recall": { + "0": 0.07692307692307693, + "1": 0.08333333333333333, + "2": 0.16553287981859413 + }, + "f1": { + "0": 0.041666666666666664, + "1": 0.043478260869565216, + "2": 0.0922077922077922 + }, + "micro_accuracy": { + "0": 0.05263157894736842, + "1": 0.05263157894736842, + "2": 0.10526315789473684 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.1, + "1": 0.0, + "2": 0.0 + }, + "precision": { + "0": 0.14285714285714285, + "1": 0.0, + "2": 0.0 + }, + "recall": { + "0": 0.038461538461538464, + "1": 0.0, + "2": 0.0 + }, + "f1": { + "0": 0.03508771929824561, + "1": 0.0, + "2": 0.0 + }, + "micro_accuracy": { + "0": 0.038461538461538464, + "1": 0.0, + "2": 0.0 + }, + "coverage": { + "0": 0.6842105263157895, + "1": 0.6578947368421053, + "2": 0.34210526315789475 + } + } + }, + "controls": { + "zero": { + "accuracy": { + "0": 0.8328571428571429, + "1": 0.979757085020243, + "2": 1.0 + }, + "precision": { + "0": 0.8335714285714286, + "1": 0.9180327868852459, + "2": 1.0 + }, + "recall": { + "0": 0.8328571428571429, + "1": 0.979757085020243, + "2": 1.0 + }, + "f1": { + "0": 0.718058005095042, + "1": 0.9018817204301075, + "2": 1.0 + }, + "micro_accuracy": { + "0": 0.7578125, + "1": 0.921875, + "2": 1.0 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.8392857142857143, + "1": 0.979757085020243, + "2": 1.0 + }, + "precision": { + "0": 0.8602941176470589, + "1": 0.9333333333333333, + "2": 1.0 + }, + "recall": { + "0": 0.8204761904761906, + "1": 0.9709851551956815, + "2": 1.0 + }, + "f1": { + "0": 0.7295057263411694, + "1": 0.9112021857923497, + "2": 1.0 + }, + "micro_accuracy": { + "0": 0.7833333333333333, + "1": 0.936, + "2": 1.0 + }, + "coverage": { + "0": 0.9375, + "1": 0.9765625, + "2": 1.0 + } + } + }, + "random": { + "zero": { + "accuracy": { + "0": 0.7454409265848465, + "1": 0.8427438194836951, + "2": 0.9057782692968482 + }, + "precision": { + "0": 0.6447761742942466, + "1": 0.7092450965974649, + "2": 0.6184699149071605 + }, + "recall": { + "0": 0.7454409265848465, + "1": 0.8427438194836951, + "2": 0.9057782692968482 + }, + "f1": { + "0": 0.5409941419863084, + "1": 0.6490658911536241, + "2": 0.6260749858957066 + }, + "micro_accuracy": { + "0": 0.75, + "1": 0.8291015625, + "2": 0.951171875 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.8805063830320342, + "1": 0.9581741243283846, + "2": 0.940559205500382 + }, + "precision": { + "0": 0.8678766588602654, + "1": 0.9126635482340179, + "2": 0.9986735993208828 + }, + "recall": { + "0": 0.6710841125403528, + "1": 0.7586561169139849, + "2": 0.7770944143698603 + }, + "f1": { + "0": 0.639757550272372, + "1": 0.7450404248178341, + "2": 0.8451510613258479 + }, + "micro_accuracy": { + "0": 0.840937114673243, + "1": 0.911660777385159, + "2": 0.9964454976303317 + }, + "coverage": { + "0": 0.7919921875, + "1": 0.8291015625, + "2": 0.82421875 + } + } + } + }, + "rotation10_3": { + "focus": { + "zero": { + "accuracy": { + "0": 0.07692307692307693, + "1": 0.08333333333333333, + "2": 0.14965986394557823 + }, + "precision": { + "0": 0.08333333333333333, + "1": 0.08333333333333333, + "2": 0.18181818181818182 + }, + "recall": { + "0": 0.07692307692307693, + "1": 0.08333333333333333, + "2": 0.14965986394557823 + }, + "f1": { + "0": 0.041666666666666664, + "1": 0.043478260869565216, + "2": 0.07272727272727272 + }, + "micro_accuracy": { + "0": 0.05263157894736842, + "1": 0.05263157894736842, + "2": 0.07894736842105263 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "precision": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "recall": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "f1": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "micro_accuracy": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "coverage": { + "0": 0.7631578947368421, + "1": 0.7631578947368421, + "2": 0.4473684210526316 + } + } + }, + "controls": { + "zero": { + "accuracy": { + "0": 0.8352380952380951, + "1": 0.979757085020243, + "2": 1.0 + }, + "precision": { + "0": 0.8335714285714286, + "1": 0.9180327868852459, + "2": 1.0 + }, + "recall": { + "0": 0.8352380952380951, + "1": 0.979757085020243, + "2": 1.0 + }, + "f1": { + "0": 0.7197040956300215, + "1": 0.9018817204301075, + "2": 1.0 + }, + "micro_accuracy": { + "0": 0.7578125, + "1": 0.921875, + "2": 1.0 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.8392857142857143, + "1": 0.979757085020243, + "2": 1.0 + }, + "precision": { + "0": 0.8456521739130435, + "1": 0.9180327868852459, + "2": 1.0 + }, + "recall": { + "0": 0.8133333333333334, + "1": 0.9709851551956815, + "2": 1.0 + }, + "f1": { + "0": 0.7148809523809523, + "1": 0.8965053763440859, + "2": 1.0 + }, + "micro_accuracy": { + "0": 0.768595041322314, + "1": 0.9285714285714286, + "2": 1.0 + }, + "coverage": { + "0": 0.9453125, + "1": 0.984375, + "2": 1.0 + } + } + }, + "random": { + "zero": { + "accuracy": { + "0": 0.741665582935361, + "1": 0.8368075421544521, + "2": 0.8893875924049287 + }, + "precision": { + "0": 0.6195335413940065, + "1": 0.6839432278341946, + "2": 0.5975073991572308 + }, + "recall": { + "0": 0.741665582935361, + "1": 0.8368075421544521, + "2": 0.8893875924049287 + }, + "f1": { + "0": 0.5210162752523081, + "1": 0.6228038402704332, + "2": 0.5972137338849455 + }, + "micro_accuracy": { + "0": 0.7451171875, + "1": 0.8251953125, + "2": 0.9453125 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.8696417362392495, + "1": 0.9662524671802257, + "2": 0.9993186823909892 + }, + "precision": { + "0": 0.8533697632058289, + "1": 0.9134099122354156, + "2": 0.9994877049180327 + }, + "recall": { + "0": 0.654373877627191, + "1": 0.7419456609322663, + "2": 0.753317605354283 + }, + "f1": { + "0": 0.6177175932772172, + "1": 0.73435932685898, + "2": 0.8302999782092606 + }, + "micro_accuracy": { + "0": 0.8422391857506362, + "1": 0.9161603888213852, + "2": 0.9975339087546239 + }, + "coverage": { + "0": 0.767578125, + "1": 0.8037109375, + "2": 0.7919921875 + } + } + } + }, + "rotation30_3": { + "focus": { + "zero": { + "accuracy": { + "0": 0.07692307692307693, + "1": 0.08333333333333333, + "2": 0.16553287981859413 + }, + "precision": { + "0": 0.07142857142857142, + "1": 0.07142857142857142, + "2": 0.23076923076923078 + }, + "recall": { + "0": 0.07692307692307693, + "1": 0.08333333333333333, + "2": 0.16553287981859413 + }, + "f1": { + "0": 0.038461538461538464, + "1": 0.04, + "2": 0.08606060606060605 + }, + "micro_accuracy": { + "0": 0.05263157894736842, + "1": 0.05263157894736842, + "2": 0.10526315789473684 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "precision": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "recall": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "f1": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "micro_accuracy": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "coverage": { + "0": 0.6052631578947368, + "1": 0.5789473684210527, + "2": 0.23684210526315788 + } + } + }, + "controls": { + "zero": { + "accuracy": { + "0": 0.84, + "1": 0.979757085020243, + "2": 1.0 + }, + "precision": { + "0": 0.8335714285714286, + "1": 0.9180327868852459, + "2": 1.0 + }, + "recall": { + "0": 0.84, + "1": 0.979757085020243, + "2": 1.0 + }, + "f1": { + "0": 0.7221732314324906, + "1": 0.9018817204301075, + "2": 1.0 + }, + "micro_accuracy": { + "0": 0.765625, + "1": 0.921875, + "2": 1.0 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.8392857142857143, + "1": 0.979757085020243, + "2": 1.0 + }, + "precision": { + "0": 0.8602941176470589, + "1": 0.9333333333333333, + "2": 1.0 + }, + "recall": { + "0": 0.8252380952380952, + "1": 0.9709851551956815, + "2": 1.0 + }, + "f1": { + "0": 0.7333031946955997, + "1": 0.9112021857923497, + "2": 1.0 + }, + "micro_accuracy": { + "0": 0.7851239669421488, + "1": 0.936, + "2": 1.0 + }, + "coverage": { + "0": 0.9453125, + "1": 0.9765625, + "2": 1.0 + } + } + }, + "random": { + "zero": { + "accuracy": { + "0": 0.7452822316506098, + "1": 0.839252438624142, + "2": 0.9059825176628613 + }, + "precision": { + "0": 0.6418742611969704, + "1": 0.7069412829112952, + "2": 0.6489490489712278 + }, + "recall": { + "0": 0.7452822316506098, + "1": 0.839252438624142, + "2": 0.9059825176628613 + }, + "f1": { + "0": 0.5387700719541371, + "1": 0.6453682873513557, + "2": 0.6657532111557237 + }, + "micro_accuracy": { + "0": 0.748046875, + "1": 0.826171875, + "2": 0.9521484375 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.8802237654320989, + "1": 0.9579540918796495, + "2": 0.9405563476770906 + }, + "precision": { + "0": 0.871941594317285, + "1": 0.9126025354213273, + "2": 0.9987027878849998 + }, + "recall": { + "0": 0.6687776810678153, + "1": 0.7546912409025844, + "2": 0.7868290365641832 + }, + "f1": { + "0": 0.6392070152898363, + "1": 0.7419251820560702, + "2": 0.8522206769876662 + }, + "micro_accuracy": { + "0": 0.8415841584158416, + "1": 0.9081272084805654, + "2": 0.9964497041420118 + }, + "coverage": { + "0": 0.7890625, + "1": 0.8291015625, + "2": 0.8251953125 + } + } + } + }, + "rotation10_pad15_3": { + "focus": { + "zero": { + "accuracy": { + "0": 0.07692307692307693, + "1": 0.08333333333333333, + "2": 0.14965986394557823 + }, + "precision": { + "0": 0.08333333333333333, + "1": 0.07692307692307693, + "2": 0.18181818181818182 + }, + "recall": { + "0": 0.07692307692307693, + "1": 0.08333333333333333, + "2": 0.14965986394557823 + }, + "f1": { + "0": 0.041666666666666664, + "1": 0.041666666666666664, + "2": 0.07792207792207792 + }, + "micro_accuracy": { + "0": 0.05263157894736842, + "1": 0.05263157894736842, + "2": 0.07894736842105263 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.09090909090909091, + "1": 0.1, + "2": 0.0 + }, + "precision": { + "0": 0.1111111111111111, + "1": 0.1111111111111111, + "2": 0.0 + }, + "recall": { + "0": 0.038461538461538464, + "1": 0.041666666666666664, + "2": 0.0 + }, + "f1": { + "0": 0.031746031746031744, + "1": 0.03333333333333333, + "2": 0.0 + }, + "micro_accuracy": { + "0": 0.03333333333333333, + "1": 0.03225806451612903, + "2": 0.0 + }, + "coverage": { + "0": 0.7894736842105263, + "1": 0.8157894736842105, + "2": 0.3684210526315789 + } + } + }, + "controls": { + "zero": { + "accuracy": { + "0": 0.8300000000000001, + "1": 0.979757085020243, + "2": 1.0 + }, + "precision": { + "0": 0.8314285714285715, + "1": 0.9180327868852459, + "2": 1.0 + }, + "recall": { + "0": 0.8300000000000001, + "1": 0.979757085020243, + "2": 1.0 + }, + "f1": { + "0": 0.7150205761316872, + "1": 0.9018817204301075, + "2": 1.0 + }, + "micro_accuracy": { + "0": 0.75, + "1": 0.921875, + "2": 1.0 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.8369565217391305, + "1": 0.979757085020243, + "2": 1.0 + }, + "precision": { + "0": 0.8433823529411765, + "1": 0.9180327868852459, + "2": 1.0 + }, + "recall": { + "0": 0.7990476190476191, + "1": 0.9709851551956815, + "2": 0.9969135802469135 + }, + "f1": { + "0": 0.7023809523809523, + "1": 0.8965053763440859, + "2": 0.9984350547730829 + }, + "micro_accuracy": { + "0": 0.7666666666666667, + "1": 0.9285714285714286, + "2": 1.0 + }, + "coverage": { + "0": 0.9375, + "1": 0.984375, + "2": 0.9921875 + } + } + }, + "random": { + "zero": { + "accuracy": { + "0": 0.7426050842366203, + "1": 0.8422604352105022, + "2": 0.8984576995595194 + }, + "precision": { + "0": 0.6301201369436664, + "1": 0.6995078995078996, + "2": 0.6009209981111495 + }, + "recall": { + "0": 0.7426050842366203, + "1": 0.8422604352105022, + "2": 0.8984576995595194 + }, + "f1": { + "0": 0.5289175898666085, + "1": 0.6383376824908955, + "2": 0.6021230603848032 + }, + "micro_accuracy": { + "0": 0.74609375, + "1": 0.828125, + "2": 0.9482421875 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.8705389433551199, + "1": 0.9621791406006243, + "2": 0.9403301105388392 + }, + "precision": { + "0": 0.8576459255030684, + "1": 0.9145996620828836, + "2": 0.9953032658807512 + }, + "recall": { + "0": 0.6557838891061579, + "1": 0.7490912754027216, + "2": 0.7688329636947574 + }, + "f1": { + "0": 0.6210745598216204, + "1": 0.7391529209868354, + "2": 0.8396085584841956 + }, + "micro_accuracy": { + "0": 0.8402515723270441, + "1": 0.9138755980861244, + "2": 0.9952095808383233 + }, + "coverage": { + "0": 0.7763671875, + "1": 0.81640625, + "2": 0.8154296875 + } + } + } + }, + "rotation30_pad15_3": { + "focus": { + "zero": { + "accuracy": { + "0": 0.07692307692307693, + "1": 0.08333333333333333, + "2": 0.16553287981859413 + }, + "precision": { + "0": 0.07142857142857142, + "1": 0.07142857142857142, + "2": 0.23076923076923078 + }, + "recall": { + "0": 0.07692307692307693, + "1": 0.08333333333333333, + "2": 0.16553287981859413 + }, + "f1": { + "0": 0.038461538461538464, + "1": 0.04, + "2": 0.08606060606060605 + }, + "micro_accuracy": { + "0": 0.05263157894736842, + "1": 0.05263157894736842, + "2": 0.10526315789473684 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "precision": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "recall": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "f1": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "micro_accuracy": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "coverage": { + "0": 0.5526315789473685, + "1": 0.5526315789473685, + "2": 0.21052631578947367 + } + } + }, + "controls": { + "zero": { + "accuracy": { + "0": 0.8300000000000001, + "1": 0.979757085020243, + "2": 1.0 + }, + "precision": { + "0": 0.819718309859155, + "1": 0.9180327868852459, + "2": 1.0 + }, + "recall": { + "0": 0.8300000000000001, + "1": 0.979757085020243, + "2": 1.0 + }, + "f1": { + "0": 0.7063008130081301, + "1": 0.9018817204301075, + "2": 1.0 + }, + "micro_accuracy": { + "0": 0.75, + "1": 0.921875, + "2": 1.0 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.8492647058823529, + "1": 0.979757085020243, + "2": 1.0 + }, + "precision": { + "0": 0.8712121212121212, + "1": 0.9333333333333333, + "2": 1.0 + }, + "recall": { + "0": 0.810952380952381, + "1": 0.979757085020243, + "2": 1.0 + }, + "f1": { + "0": 0.7298840048840048, + "1": 0.9166666666666666, + "2": 1.0 + }, + "micro_accuracy": { + "0": 0.7899159663865546, + "1": 0.9365079365079365, + "2": 1.0 + }, + "coverage": { + "0": 0.9296875, + "1": 0.984375, + "2": 1.0 + } + } + }, + "random": { + "zero": { + "accuracy": { + "0": 0.746946392145336, + "1": 0.8429559184422715, + "2": 0.9038285435129828 + }, + "precision": { + "0": 0.6375276195039041, + "1": 0.7121206532688331, + "2": 0.6185782533611139 + }, + "recall": { + "0": 0.746946392145336, + "1": 0.8429559184422715, + "2": 0.9038285435129828 + }, + "f1": { + "0": 0.5357718847296176, + "1": 0.6491874070914907, + "2": 0.6359736267198427 + }, + "micro_accuracy": { + "0": 0.75, + "1": 0.826171875, + "2": 0.953125 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.8883789778015406, + "1": 0.9668934715764436, + "2": 0.9405612447408113 + }, + "precision": { + "0": 0.8880952380952382, + "1": 0.9318216175359031, + "2": 0.9987027878849998 + }, + "recall": { + "0": 0.6803776952607089, + "1": 0.7702213561149207, + "2": 0.7987399114292636 + }, + "f1": { + "0": 0.6579714146318916, + "1": 0.767104901340909, + "2": 0.8595692011036523 + }, + "micro_accuracy": { + "0": 0.8479604449938195, + "1": 0.9142185663924794, + "2": 0.9964705882352941 + }, + "coverage": { + "0": 0.7900390625, + "1": 0.8310546875, + "2": 0.830078125 + } + } + } + }, + "rotation30_pad25_3": { + "focus": { + "zero": { + "accuracy": { + "0": 0.10256410256410256, + "1": 0.1111111111111111, + "2": 0.1723356009070295 + }, + "precision": { + "0": 0.13333333333333333, + "1": 0.14285714285714285, + "2": 0.25 + }, + "recall": { + "0": 0.10256410256410256, + "1": 0.1111111111111111, + "2": 0.1723356009070295 + }, + "f1": { + "0": 0.057692307692307696, + "1": 0.0625, + "2": 0.09159420289855073 + }, + "micro_accuracy": { + "0": 0.07894736842105263, + "1": 0.07894736842105263, + "2": 0.13157894736842105 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.2, + "1": 0.16666666666666666, + "2": 0.25 + }, + "precision": { + "0": 0.16666666666666666, + "1": 0.14285714285714285, + "2": 0.25 + }, + "recall": { + "0": 0.07692307692307693, + "1": 0.08333333333333333, + "2": 0.07142857142857142 + }, + "f1": { + "0": 0.05555555555555555, + "1": 0.05555555555555555, + "2": 0.06666666666666667 + }, + "micro_accuracy": { + "0": 0.125, + "1": 0.11764705882352941, + "2": 0.2 + }, + "coverage": { + "0": 0.42105263157894735, + "1": 0.4473684210526316, + "2": 0.13157894736842105 + } + } + }, + "controls": { + "zero": { + "accuracy": { + "0": 0.8300000000000001, + "1": 0.979757085020243, + "2": 1.0 + }, + "precision": { + "0": 0.819718309859155, + "1": 0.9180327868852459, + "2": 1.0 + }, + "recall": { + "0": 0.8300000000000001, + "1": 0.979757085020243, + "2": 1.0 + }, + "f1": { + "0": 0.7063008130081301, + "1": 0.9018817204301075, + "2": 1.0 + }, + "micro_accuracy": { + "0": 0.75, + "1": 0.921875, + "2": 1.0 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.8639705882352942, + "1": 0.979757085020243, + "2": 1.0 + }, + "precision": { + "0": 0.8768656716417911, + "1": 0.9333333333333333, + "2": 1.0 + }, + "recall": { + "0": 0.8180952380952381, + "1": 0.9709851551956815, + "2": 1.0 + }, + "f1": { + "0": 0.7402625152625151, + "1": 0.9112021857923497, + "2": 1.0 + }, + "micro_accuracy": { + "0": 0.7966101694915254, + "1": 0.936, + "2": 1.0 + }, + "coverage": { + "0": 0.921875, + "1": 0.9765625, + "2": 1.0 + } + } + }, + "random": { + "zero": { + "accuracy": { + "0": 0.7630355840929575, + "1": 0.8416665920574038, + "2": 0.9041031362537907 + }, + "precision": { + "0": 0.649440935267707, + "1": 0.7067288667804132, + "2": 0.6428022493693895 + }, + "recall": { + "0": 0.7630355840929575, + "1": 0.8416665920574038, + "2": 0.9041031362537907 + }, + "f1": { + "0": 0.5522561853862159, + "1": 0.6423359001887395, + "2": 0.6520928954298746 + }, + "micro_accuracy": { + "0": 0.751953125, + "1": 0.826171875, + "2": 0.9541015625 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.8844092274886111, + "1": 0.9645494413509481, + "2": 0.9405601429271455 + }, + "precision": { + "0": 0.8749024199843872, + "1": 0.9254504504504503, + "2": 0.9987202649804277 + }, + "recall": { + "0": 0.6842780346873641, + "1": 0.7732837086077714, + "2": 0.8053658297569687 + }, + "f1": { + "0": 0.6515157419701599, + "1": 0.7688269140158974, + "2": 0.8642902296431367 + }, + "micro_accuracy": { + "0": 0.8439803439803439, + "1": 0.9130434782608695, + "2": 0.9964912280701754 + }, + "coverage": { + "0": 0.794921875, + "1": 0.8310546875, + "2": 0.8349609375 + } + } + } + }, + "mixed_3": { + "focus": { + "zero": { + "accuracy": { + "0": 0.07692307692307693, + "1": 0.08333333333333333, + "2": 0.14965986394557823 + }, + "precision": { + "0": 0.08333333333333333, + "1": 0.08333333333333333, + "2": 0.18181818181818182 + }, + "recall": { + "0": 0.07692307692307693, + "1": 0.08333333333333333, + "2": 0.14965986394557823 + }, + "f1": { + "0": 0.041666666666666664, + "1": 0.043478260869565216, + "2": 0.07792207792207792 + }, + "micro_accuracy": { + "0": 0.05263157894736842, + "1": 0.05263157894736842, + "2": 0.07894736842105263 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "precision": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "recall": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "f1": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "micro_accuracy": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "coverage": { + "0": 0.7105263157894737, + "1": 0.7105263157894737, + "2": 0.3157894736842105 + } + } + }, + "controls": { + "zero": { + "accuracy": { + "0": 0.8328571428571429, + "1": 0.979757085020243, + "2": 1.0 + }, + "precision": { + "0": 0.8335714285714286, + "1": 0.9180327868852459, + "2": 1.0 + }, + "recall": { + "0": 0.8328571428571429, + "1": 0.979757085020243, + "2": 1.0 + }, + "f1": { + "0": 0.718058005095042, + "1": 0.9018817204301075, + "2": 1.0 + }, + "micro_accuracy": { + "0": 0.7578125, + "1": 0.921875, + "2": 1.0 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.8392857142857143, + "1": 0.979757085020243, + "2": 1.0 + }, + "precision": { + "0": 0.8602941176470589, + "1": 0.9333333333333333, + "2": 1.0 + }, + "recall": { + "0": 0.8204761904761906, + "1": 0.9709851551956815, + "2": 0.9969135802469135 + }, + "f1": { + "0": 0.7295057263411694, + "1": 0.9112021857923497, + "2": 0.9984350547730829 + }, + "micro_accuracy": { + "0": 0.7833333333333333, + "1": 0.936, + "2": 1.0 + }, + "coverage": { + "0": 0.9375, + "1": 0.9765625, + "2": 0.9921875 + } + } + }, + "random": { + "zero": { + "accuracy": { + "0": 0.7483787051805199, + "1": 0.8441241147015702, + "2": 0.8973686936504582 + }, + "precision": { + "0": 0.644046291872379, + "1": 0.706639359135763, + "2": 0.6252674536709237 + }, + "recall": { + "0": 0.7483787051805199, + "1": 0.8441241147015702, + "2": 0.8973686936504582 + }, + "f1": { + "0": 0.5434526186121773, + "1": 0.6435879597662877, + "2": 0.6271769650286804 + }, + "micro_accuracy": { + "0": 0.7490234375, + "1": 0.828125, + "2": 0.9521484375 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.8755316583355257, + "1": 0.9580742573167165, + "2": 0.9405548114248862 + }, + "precision": { + "0": 0.859083850931677, + "1": 0.9133160463697375, + "2": 0.9986357055351376 + }, + "recall": { + "0": 0.6639728113888039, + "1": 0.7492925540790846, + "2": 0.7847286008044015 + }, + "f1": { + "0": 0.6288275726168414, + "1": 0.7396604464261424, + "2": 0.8513149188082024 + }, + "micro_accuracy": { + "0": 0.8395522388059702, + "1": 0.9117997616209773, + "2": 0.9964200477326969 + }, + "coverage": { + "0": 0.78515625, + "1": 0.8193359375, + "2": 0.818359375 + } + } + } + }, + "mixed_mirrored_3": { + "focus": { + "zero": { + "accuracy": { + "0": 0.07692307692307693, + "1": 0.08333333333333333, + "2": 0.14965986394557823 + }, + "precision": { + "0": 0.08333333333333333, + "1": 0.08333333333333333, + "2": 0.18181818181818182 + }, + "recall": { + "0": 0.07692307692307693, + "1": 0.08333333333333333, + "2": 0.14965986394557823 + }, + "f1": { + "0": 0.041666666666666664, + "1": 0.043478260869565216, + "2": 0.07792207792207792 + }, + "micro_accuracy": { + "0": 0.05263157894736842, + "1": 0.05263157894736842, + "2": 0.07894736842105263 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "precision": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "recall": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "f1": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "micro_accuracy": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "coverage": { + "0": 0.7105263157894737, + "1": 0.7105263157894737, + "2": 0.34210526315789475 + } + } + }, + "controls": { + "zero": { + "accuracy": { + "0": 0.8300000000000001, + "1": 0.979757085020243, + "2": 1.0 + }, + "precision": { + "0": 0.8314285714285715, + "1": 0.9180327868852459, + "2": 1.0 + }, + "recall": { + "0": 0.8300000000000001, + "1": 0.979757085020243, + "2": 1.0 + }, + "f1": { + "0": 0.7150205761316872, + "1": 0.9018817204301075, + "2": 1.0 + }, + "micro_accuracy": { + "0": 0.75, + "1": 0.921875, + "2": 1.0 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.8392857142857143, + "1": 0.979757085020243, + "2": 1.0 + }, + "precision": { + "0": 0.8580882352941177, + "1": 0.9333333333333333, + "2": 1.0 + }, + "recall": { + "0": 0.8133333333333334, + "1": 0.9709851551956815, + "2": 1.0 + }, + "f1": { + "0": 0.723930078360458, + "1": 0.9112021857923497, + "2": 1.0 + }, + "micro_accuracy": { + "0": 0.775, + "1": 0.936, + "2": 1.0 + }, + "coverage": { + "0": 0.9375, + "1": 0.9765625, + "2": 1.0 + } + } + }, + "random": { + "zero": { + "accuracy": { + "0": 0.7491680009458922, + "1": 0.8394557063229706, + "2": 0.9043482342930064 + }, + "precision": { + "0": 0.6419566630470978, + "1": 0.7070699475962634, + "2": 0.6143888250977109 + }, + "recall": { + "0": 0.7491680009458922, + "1": 0.8394557063229706, + "2": 0.9043482342930064 + }, + "f1": { + "0": 0.5419177446497941, + "1": 0.6466704666481984, + "2": 0.6235559520324294 + }, + "micro_accuracy": { + "0": 0.7490234375, + "1": 0.828125, + "2": 0.953125 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.8769426980800575, + "1": 0.9600812529099573, + "2": 0.9405557640017973 + }, + "precision": { + "0": 0.8721783741120759, + "1": 0.9258372579801151, + "2": 0.9986543715846994 + }, + "recall": { + "0": 0.6730232466776292, + "1": 0.7590380103213561, + "2": 0.7691659777283154 + }, + "f1": { + "0": 0.642535529030425, + "1": 0.7538350402378683, + "2": 0.8408666689289438 + }, + "micro_accuracy": { + "0": 0.8451053283767038, + "1": 0.9162735849056604, + "2": 0.9964071856287425 + }, + "coverage": { + "0": 0.7880859375, + "1": 0.828125, + "2": 0.8154296875 + } + } + } + }, + "wide_rotation_pad15_5": { + "focus": { + "zero": { + "accuracy": { + "0": 0.07692307692307693, + "1": 0.08333333333333333, + "2": 0.16553287981859413 + }, + "precision": { + "0": 0.07142857142857142, + "1": 0.07142857142857142, + "2": 0.23076923076923078 + }, + "recall": { + "0": 0.07692307692307693, + "1": 0.08333333333333333, + "2": 0.16553287981859413 + }, + "f1": { + "0": 0.038461538461538464, + "1": 0.04, + "2": 0.08606060606060605 + }, + "micro_accuracy": { + "0": 0.05263157894736842, + "1": 0.05263157894736842, + "2": 0.10526315789473684 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.1111111111111111, + "1": 0.125, + "2": 0.0 + }, + "precision": { + "0": 0.125, + "1": 0.125, + "2": 0.0 + }, + "recall": { + "0": 0.038461538461538464, + "1": 0.041666666666666664, + "2": 0.0 + }, + "f1": { + "0": 0.03333333333333333, + "1": 0.03508771929824561, + "2": 0.0 + }, + "micro_accuracy": { + "0": 0.047619047619047616, + "1": 0.047619047619047616, + "2": 0.0 + }, + "coverage": { + "0": 0.5526315789473685, + "1": 0.5526315789473685, + "2": 0.23684210526315788 + } + } + }, + "controls": { + "zero": { + "accuracy": { + "0": 0.8300000000000001, + "1": 0.979757085020243, + "2": 1.0 + }, + "precision": { + "0": 0.8314285714285715, + "1": 0.9180327868852459, + "2": 1.0 + }, + "recall": { + "0": 0.8300000000000001, + "1": 0.979757085020243, + "2": 1.0 + }, + "f1": { + "0": 0.7150205761316872, + "1": 0.9018817204301075, + "2": 1.0 + }, + "micro_accuracy": { + "0": 0.75, + "1": 0.921875, + "2": 1.0 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.8369565217391305, + "1": 0.979757085020243, + "2": 1.0 + }, + "precision": { + "0": 0.8559701492537314, + "1": 0.9333333333333333, + "2": 1.0 + }, + "recall": { + "0": 0.810952380952381, + "1": 0.979757085020243, + "2": 1.0 + }, + "f1": { + "0": 0.7192887281494875, + "1": 0.9166666666666666, + "2": 1.0 + }, + "micro_accuracy": { + "0": 0.7768595041322314, + "1": 0.9365079365079365, + "2": 1.0 + }, + "coverage": { + "0": 0.9453125, + "1": 0.984375, + "2": 1.0 + } + } + }, + "random": { + "zero": { + "accuracy": { + "0": 0.747328759098207, + "1": 0.8454837273735764, + "2": 0.9036214184094202 + }, + "precision": { + "0": 0.6395222105684603, + "1": 0.7136946895200903, + "2": 0.5967611146335022 + }, + "recall": { + "0": 0.747328759098207, + "1": 0.8454837273735764, + "2": 0.9036214184094202 + }, + "f1": { + "0": 0.5377248861803071, + "1": 0.6503312097081253, + "2": 0.611951126722742 + }, + "micro_accuracy": { + "0": 0.7470703125, + "1": 0.830078125, + "2": 0.9521484375 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.8822807082760246, + "1": 0.9601694423038531, + "2": 0.940561322568243 + }, + "precision": { + "0": 0.8693050193050194, + "1": 0.9200274557657107, + "2": 0.9987048285014292 + }, + "recall": { + "0": 0.6837322998924033, + "1": 0.7691893860695195, + "2": 0.8028337651698323 + }, + "f1": { + "0": 0.6499633289417417, + "1": 0.7580175265318646, + "2": 0.8627144973850691 + }, + "micro_accuracy": { + "0": 0.843520782396088, + "1": 0.9137529137529138, + "2": 0.9964994165694282 + }, + "coverage": { + "0": 0.798828125, + "1": 0.837890625, + "2": 0.8369140625 + } + } + } + }, + "wide_rotation_mixed_padding_5": { + "focus": { + "zero": { + "accuracy": { + "0": 0.07692307692307693, + "1": 0.08333333333333333, + "2": 0.18140589569160998 + }, + "precision": { + "0": 0.07142857142857142, + "1": 0.07692307692307693, + "2": 0.2727272727272727 + }, + "recall": { + "0": 0.07692307692307693, + "1": 0.08333333333333333, + "2": 0.18140589569160998 + }, + "f1": { + "0": 0.038461538461538464, + "1": 0.041666666666666664, + "2": 0.1038961038961039 + }, + "micro_accuracy": { + "0": 0.05263157894736842, + "1": 0.05263157894736842, + "2": 0.13157894736842105 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.14285714285714285, + "1": 0.125, + "2": 0.0 + }, + "precision": { + "0": 0.16666666666666666, + "1": 0.125, + "2": 0.0 + }, + "recall": { + "0": 0.038461538461538464, + "1": 0.041666666666666664, + "2": 0.0 + }, + "f1": { + "0": 0.037037037037037035, + "1": 0.03508771929824561, + "2": 0.0 + }, + "micro_accuracy": { + "0": 0.05263157894736842, + "1": 0.047619047619047616, + "2": 0.0 + }, + "coverage": { + "0": 0.5, + "1": 0.5526315789473685, + "2": 0.21052631578947367 + } + } + }, + "controls": { + "zero": { + "accuracy": { + "0": 0.8300000000000001, + "1": 0.979757085020243, + "2": 1.0 + }, + "precision": { + "0": 0.819718309859155, + "1": 0.9180327868852459, + "2": 1.0 + }, + "recall": { + "0": 0.8300000000000001, + "1": 0.979757085020243, + "2": 1.0 + }, + "f1": { + "0": 0.7063008130081301, + "1": 0.9018817204301075, + "2": 1.0 + }, + "micro_accuracy": { + "0": 0.75, + "1": 0.921875, + "2": 1.0 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.8492647058823529, + "1": 0.979757085020243, + "2": 1.0 + }, + "precision": { + "0": 0.8712121212121212, + "1": 0.9333333333333333, + "2": 1.0 + }, + "recall": { + "0": 0.8038095238095238, + "1": 0.9709851551956815, + "2": 1.0 + }, + "f1": { + "0": 0.7256105006105005, + "1": 0.9112021857923497, + "2": 1.0 + }, + "micro_accuracy": { + "0": 0.788135593220339, + "1": 0.936, + "2": 1.0 + }, + "coverage": { + "0": 0.921875, + "1": 0.9765625, + "2": 1.0 + } + } + }, + "random": { + "zero": { + "accuracy": { + "0": 0.7627640719793399, + "1": 0.84525571348092, + "2": 0.9045848540981611 + }, + "precision": { + "0": 0.6522622017963633, + "1": 0.7027911741020109, + "2": 0.6263418165501418 + }, + "recall": { + "0": 0.7627640719793399, + "1": 0.84525571348092, + "2": 0.9045848540981611 + }, + "f1": { + "0": 0.554575595992837, + "1": 0.6425760919272666, + "2": 0.6307037971623958 + }, + "micro_accuracy": { + "0": 0.75390625, + "1": 0.8291015625, + "2": 0.9560546875 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.8856378783397417, + "1": 0.9624757566791329, + "2": 0.9405711179188797 + }, + "precision": { + "0": 0.8762548262548263, + "1": 0.920560606060606, + "2": 0.9987126771255062 + }, + "recall": { + "0": 0.6880541222348207, + "1": 0.7749690157465541, + "2": 0.8043901127509411 + }, + "f1": { + "0": 0.6570247465701876, + "1": 0.7631441652575413, + "2": 0.8637128066391334 + }, + "micro_accuracy": { + "0": 0.8447432762836186, + "1": 0.9126891734575088, + "2": 0.9965156794425087 + }, + "coverage": { + "0": 0.798828125, + "1": 0.8388671875, + "2": 0.8408203125 + } + } + } + } + }, + "transitions": { + "none": { + "focus": { + "species": { + "correct": 2, + "accepted_wrong": 32, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + }, + "genus": { + "correct": 2, + "accepted_wrong": 32, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + }, + "family": { + "correct": 2, + "accepted_wrong": 31, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + } + }, + "controls": { + "species": { + "correct": 94, + "accepted_wrong": 27, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + }, + "genus": { + "correct": 116, + "accepted_wrong": 8, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + }, + "family": { + "correct": 128, + "accepted_wrong": 0, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + } + }, + "random": { + "species": { + "correct": 731, + "accepted_wrong": 117, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + }, + "genus": { + "correct": 815, + "accepted_wrong": 63, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + }, + "family": { + "correct": 948, + "accepted_wrong": 2, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + } + } + }, + "padded_scale": { + "focus": { + "species": { + "correct": 2, + "accepted_wrong": 33, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + }, + "genus": { + "correct": 2, + "accepted_wrong": 32, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 1, + "correct_accepted_to_rejected": 0 + }, + "family": { + "correct": 2, + "accepted_wrong": 21, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 11, + "correct_accepted_to_rejected": 0 + } + }, + "controls": { + "species": { + "correct": 94, + "accepted_wrong": 28, + "wrong_to_correct": 1, + "correct_to_wrong": 1, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 1 + }, + "genus": { + "correct": 117, + "accepted_wrong": 9, + "wrong_to_correct": 1, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + }, + "family": { + "correct": 128, + "accepted_wrong": 0, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + } + }, + "random": { + "species": { + "correct": 753, + "accepted_wrong": 118, + "wrong_to_correct": 25, + "correct_to_wrong": 3, + "wrong_accepted_to_rejected": 5, + "correct_accepted_to_rejected": 8 + }, + "genus": { + "correct": 833, + "accepted_wrong": 64, + "wrong_to_correct": 20, + "correct_to_wrong": 2, + "wrong_accepted_to_rejected": 4, + "correct_accepted_to_rejected": 4 + }, + "family": { + "correct": 963, + "accepted_wrong": 2, + "wrong_to_correct": 19, + "correct_to_wrong": 4, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 3 + } + } + }, + "wide_rotation_5": { + "focus": { + "species": { + "correct": 2, + "accepted_wrong": 25, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 7, + "correct_accepted_to_rejected": 0 + }, + "genus": { + "correct": 2, + "accepted_wrong": 25, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 7, + "correct_accepted_to_rejected": 0 + }, + "family": { + "correct": 4, + "accepted_wrong": 13, + "wrong_to_correct": 2, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 19, + "correct_accepted_to_rejected": 0 + } + }, + "controls": { + "species": { + "correct": 97, + "accepted_wrong": 26, + "wrong_to_correct": 4, + "correct_to_wrong": 1, + "wrong_accepted_to_rejected": 1, + "correct_accepted_to_rejected": 1 + }, + "genus": { + "correct": 118, + "accepted_wrong": 8, + "wrong_to_correct": 2, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + }, + "family": { + "correct": 128, + "accepted_wrong": 0, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + } + }, + "random": { + "species": { + "correct": 768, + "accepted_wrong": 129, + "wrong_to_correct": 44, + "correct_to_wrong": 7, + "wrong_accepted_to_rejected": 11, + "correct_accepted_to_rejected": 13 + }, + "genus": { + "correct": 849, + "accepted_wrong": 75, + "wrong_to_correct": 40, + "correct_to_wrong": 6, + "wrong_accepted_to_rejected": 7, + "correct_accepted_to_rejected": 5 + }, + "family": { + "correct": 974, + "accepted_wrong": 3, + "wrong_to_correct": 34, + "correct_to_wrong": 8, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 9 + } + } + }, + "rotation10_3": { + "focus": { + "species": { + "correct": 2, + "accepted_wrong": 29, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 3, + "correct_accepted_to_rejected": 0 + }, + "genus": { + "correct": 2, + "accepted_wrong": 29, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 3, + "correct_accepted_to_rejected": 0 + }, + "family": { + "correct": 3, + "accepted_wrong": 17, + "wrong_to_correct": 1, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 15, + "correct_accepted_to_rejected": 0 + } + }, + "controls": { + "species": { + "correct": 97, + "accepted_wrong": 28, + "wrong_to_correct": 3, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 1 + }, + "genus": { + "correct": 118, + "accepted_wrong": 9, + "wrong_to_correct": 2, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + }, + "family": { + "correct": 128, + "accepted_wrong": 0, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + } + }, + "random": { + "species": { + "correct": 763, + "accepted_wrong": 124, + "wrong_to_correct": 38, + "correct_to_wrong": 6, + "wrong_accepted_to_rejected": 8, + "correct_accepted_to_rejected": 10 + }, + "genus": { + "correct": 845, + "accepted_wrong": 69, + "wrong_to_correct": 34, + "correct_to_wrong": 4, + "wrong_accepted_to_rejected": 5, + "correct_accepted_to_rejected": 5 + }, + "family": { + "correct": 968, + "accepted_wrong": 2, + "wrong_to_correct": 25, + "correct_to_wrong": 5, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 6 + } + } + }, + "rotation30_3": { + "focus": { + "species": { + "correct": 2, + "accepted_wrong": 23, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 9, + "correct_accepted_to_rejected": 0 + }, + "genus": { + "correct": 2, + "accepted_wrong": 22, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 10, + "correct_accepted_to_rejected": 0 + }, + "family": { + "correct": 4, + "accepted_wrong": 9, + "wrong_to_correct": 2, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 22, + "correct_accepted_to_rejected": 0 + } + }, + "controls": { + "species": { + "correct": 98, + "accepted_wrong": 26, + "wrong_to_correct": 4, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 1, + "correct_accepted_to_rejected": 1 + }, + "genus": { + "correct": 118, + "accepted_wrong": 8, + "wrong_to_correct": 2, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + }, + "family": { + "correct": 128, + "accepted_wrong": 0, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + } + }, + "random": { + "species": { + "correct": 766, + "accepted_wrong": 128, + "wrong_to_correct": 45, + "correct_to_wrong": 10, + "wrong_accepted_to_rejected": 11, + "correct_accepted_to_rejected": 13 + }, + "genus": { + "correct": 846, + "accepted_wrong": 78, + "wrong_to_correct": 39, + "correct_to_wrong": 8, + "wrong_accepted_to_rejected": 6, + "correct_accepted_to_rejected": 7 + }, + "family": { + "correct": 975, + "accepted_wrong": 3, + "wrong_to_correct": 35, + "correct_to_wrong": 8, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 8 + } + } + }, + "rotation10_pad15_3": { + "focus": { + "species": { + "correct": 2, + "accepted_wrong": 29, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 3, + "correct_accepted_to_rejected": 0 + }, + "genus": { + "correct": 2, + "accepted_wrong": 30, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 2, + "correct_accepted_to_rejected": 0 + }, + "family": { + "correct": 3, + "accepted_wrong": 14, + "wrong_to_correct": 1, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 19, + "correct_accepted_to_rejected": 0 + } + }, + "controls": { + "species": { + "correct": 96, + "accepted_wrong": 28, + "wrong_to_correct": 4, + "correct_to_wrong": 2, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 2 + }, + "genus": { + "correct": 118, + "accepted_wrong": 9, + "wrong_to_correct": 2, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + }, + "family": { + "correct": 128, + "accepted_wrong": 0, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 1 + } + }, + "random": { + "species": { + "correct": 764, + "accepted_wrong": 127, + "wrong_to_correct": 42, + "correct_to_wrong": 9, + "wrong_accepted_to_rejected": 10, + "correct_accepted_to_rejected": 11 + }, + "genus": { + "correct": 848, + "accepted_wrong": 72, + "wrong_to_correct": 37, + "correct_to_wrong": 4, + "wrong_accepted_to_rejected": 7, + "correct_accepted_to_rejected": 4 + }, + "family": { + "correct": 971, + "accepted_wrong": 4, + "wrong_to_correct": 30, + "correct_to_wrong": 7, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 5 + } + } + }, + "rotation30_pad15_3": { + "focus": { + "species": { + "correct": 2, + "accepted_wrong": 21, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 11, + "correct_accepted_to_rejected": 0 + }, + "genus": { + "correct": 2, + "accepted_wrong": 21, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 11, + "correct_accepted_to_rejected": 0 + }, + "family": { + "correct": 4, + "accepted_wrong": 8, + "wrong_to_correct": 2, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 23, + "correct_accepted_to_rejected": 0 + } + }, + "controls": { + "species": { + "correct": 96, + "accepted_wrong": 25, + "wrong_to_correct": 4, + "correct_to_wrong": 2, + "wrong_accepted_to_rejected": 2, + "correct_accepted_to_rejected": 2 + }, + "genus": { + "correct": 118, + "accepted_wrong": 8, + "wrong_to_correct": 2, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + }, + "family": { + "correct": 128, + "accepted_wrong": 0, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + } + }, + "random": { + "species": { + "correct": 768, + "accepted_wrong": 123, + "wrong_to_correct": 49, + "correct_to_wrong": 12, + "wrong_accepted_to_rejected": 13, + "correct_accepted_to_rejected": 11 + }, + "genus": { + "correct": 846, + "accepted_wrong": 73, + "wrong_to_correct": 41, + "correct_to_wrong": 10, + "wrong_accepted_to_rejected": 8, + "correct_accepted_to_rejected": 6 + }, + "family": { + "correct": 976, + "accepted_wrong": 3, + "wrong_to_correct": 34, + "correct_to_wrong": 6, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 9 + } + } + }, + "rotation30_pad25_3": { + "focus": { + "species": { + "correct": 3, + "accepted_wrong": 14, + "wrong_to_correct": 1, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 18, + "correct_accepted_to_rejected": 0 + }, + "genus": { + "correct": 3, + "accepted_wrong": 15, + "wrong_to_correct": 1, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 17, + "correct_accepted_to_rejected": 0 + }, + "family": { + "correct": 5, + "accepted_wrong": 4, + "wrong_to_correct": 3, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 27, + "correct_accepted_to_rejected": 0 + } + }, + "controls": { + "species": { + "correct": 96, + "accepted_wrong": 24, + "wrong_to_correct": 4, + "correct_to_wrong": 2, + "wrong_accepted_to_rejected": 3, + "correct_accepted_to_rejected": 1 + }, + "genus": { + "correct": 118, + "accepted_wrong": 8, + "wrong_to_correct": 2, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + }, + "family": { + "correct": 128, + "accepted_wrong": 0, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + } + }, + "random": { + "species": { + "correct": 770, + "accepted_wrong": 127, + "wrong_to_correct": 51, + "correct_to_wrong": 12, + "wrong_accepted_to_rejected": 11, + "correct_accepted_to_rejected": 12 + }, + "genus": { + "correct": 846, + "accepted_wrong": 74, + "wrong_to_correct": 42, + "correct_to_wrong": 11, + "wrong_accepted_to_rejected": 8, + "correct_accepted_to_rejected": 7 + }, + "family": { + "correct": 977, + "accepted_wrong": 3, + "wrong_to_correct": 35, + "correct_to_wrong": 6, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 9 + } + } + }, + "mixed_3": { + "focus": { + "species": { + "correct": 2, + "accepted_wrong": 27, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 5, + "correct_accepted_to_rejected": 0 + }, + "genus": { + "correct": 2, + "accepted_wrong": 27, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 5, + "correct_accepted_to_rejected": 0 + }, + "family": { + "correct": 3, + "accepted_wrong": 12, + "wrong_to_correct": 1, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 19, + "correct_accepted_to_rejected": 0 + } + }, + "controls": { + "species": { + "correct": 97, + "accepted_wrong": 26, + "wrong_to_correct": 4, + "correct_to_wrong": 1, + "wrong_accepted_to_rejected": 1, + "correct_accepted_to_rejected": 1 + }, + "genus": { + "correct": 118, + "accepted_wrong": 8, + "wrong_to_correct": 2, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + }, + "family": { + "correct": 128, + "accepted_wrong": 0, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 1 + } + }, + "random": { + "species": { + "correct": 767, + "accepted_wrong": 129, + "wrong_to_correct": 42, + "correct_to_wrong": 6, + "wrong_accepted_to_rejected": 11, + "correct_accepted_to_rejected": 11 + }, + "genus": { + "correct": 848, + "accepted_wrong": 74, + "wrong_to_correct": 36, + "correct_to_wrong": 3, + "wrong_accepted_to_rejected": 7, + "correct_accepted_to_rejected": 6 + }, + "family": { + "correct": 975, + "accepted_wrong": 3, + "wrong_to_correct": 31, + "correct_to_wrong": 4, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 6 + } + } + }, + "mixed_mirrored_3": { + "focus": { + "species": { + "correct": 2, + "accepted_wrong": 27, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 5, + "correct_accepted_to_rejected": 0 + }, + "genus": { + "correct": 2, + "accepted_wrong": 27, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 5, + "correct_accepted_to_rejected": 0 + }, + "family": { + "correct": 3, + "accepted_wrong": 13, + "wrong_to_correct": 1, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 18, + "correct_accepted_to_rejected": 0 + } + }, + "controls": { + "species": { + "correct": 96, + "accepted_wrong": 27, + "wrong_to_correct": 4, + "correct_to_wrong": 2, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 1 + }, + "genus": { + "correct": 118, + "accepted_wrong": 8, + "wrong_to_correct": 2, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + }, + "family": { + "correct": 128, + "accepted_wrong": 0, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + } + }, + "random": { + "species": { + "correct": 767, + "accepted_wrong": 125, + "wrong_to_correct": 44, + "correct_to_wrong": 8, + "wrong_accepted_to_rejected": 10, + "correct_accepted_to_rejected": 9 + }, + "genus": { + "correct": 848, + "accepted_wrong": 71, + "wrong_to_correct": 38, + "correct_to_wrong": 5, + "wrong_accepted_to_rejected": 7, + "correct_accepted_to_rejected": 2 + }, + "family": { + "correct": 976, + "accepted_wrong": 3, + "wrong_to_correct": 33, + "correct_to_wrong": 5, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 6 + } + } + }, + "wide_rotation_pad15_5": { + "focus": { + "species": { + "correct": 2, + "accepted_wrong": 20, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 12, + "correct_accepted_to_rejected": 0 + }, + "genus": { + "correct": 2, + "accepted_wrong": 20, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 12, + "correct_accepted_to_rejected": 0 + }, + "family": { + "correct": 4, + "accepted_wrong": 9, + "wrong_to_correct": 2, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 22, + "correct_accepted_to_rejected": 0 + } + }, + "controls": { + "species": { + "correct": 96, + "accepted_wrong": 27, + "wrong_to_correct": 4, + "correct_to_wrong": 2, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 2 + }, + "genus": { + "correct": 118, + "accepted_wrong": 8, + "wrong_to_correct": 2, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + }, + "family": { + "correct": 128, + "accepted_wrong": 0, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + } + }, + "random": { + "species": { + "correct": 765, + "accepted_wrong": 128, + "wrong_to_correct": 47, + "correct_to_wrong": 13, + "wrong_accepted_to_rejected": 12, + "correct_accepted_to_rejected": 12 + }, + "genus": { + "correct": 850, + "accepted_wrong": 74, + "wrong_to_correct": 44, + "correct_to_wrong": 9, + "wrong_accepted_to_rejected": 7, + "correct_accepted_to_rejected": 5 + }, + "family": { + "correct": 975, + "accepted_wrong": 3, + "wrong_to_correct": 34, + "correct_to_wrong": 7, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 9 + } + } + }, + "wide_rotation_mixed_padding_5": { + "focus": { + "species": { + "correct": 2, + "accepted_wrong": 18, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 14, + "correct_accepted_to_rejected": 0 + }, + "genus": { + "correct": 2, + "accepted_wrong": 20, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 12, + "correct_accepted_to_rejected": 0 + }, + "family": { + "correct": 5, + "accepted_wrong": 8, + "wrong_to_correct": 3, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 24, + "correct_accepted_to_rejected": 0 + } + }, + "controls": { + "species": { + "correct": 96, + "accepted_wrong": 25, + "wrong_to_correct": 4, + "correct_to_wrong": 2, + "wrong_accepted_to_rejected": 2, + "correct_accepted_to_rejected": 2 + }, + "genus": { + "correct": 118, + "accepted_wrong": 8, + "wrong_to_correct": 2, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + }, + "family": { + "correct": 128, + "accepted_wrong": 0, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + } + }, + "random": { + "species": { + "correct": 772, + "accepted_wrong": 127, + "wrong_to_correct": 52, + "correct_to_wrong": 11, + "wrong_accepted_to_rejected": 11, + "correct_accepted_to_rejected": 12 + }, + "genus": { + "correct": 849, + "accepted_wrong": 75, + "wrong_to_correct": 44, + "correct_to_wrong": 10, + "wrong_accepted_to_rejected": 6, + "correct_accepted_to_rejected": 5 + }, + "family": { + "correct": 979, + "accepted_wrong": 3, + "wrong_to_correct": 37, + "correct_to_wrong": 6, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 7 + } + } + } + } + }, + "timing": { + "method": "Exploratory warm single-process, 32 identical images, 3 interleaved rounds x 3 measurements, one warmup per recipe; decode to CPU results; not fresh-process release benchmark", + "batch": 32, + "seconds": { + "none": [ + 0.2144804639974609, + 0.21811851099482737, + 0.21199875899765175, + 0.2025995919975685, + 0.2070328289992176, + 0.2339461060037138, + 0.2246835510013625, + 0.2197865449998062, + 0.2400066670088563 + ], + "padded_scale": [ + 0.6202133540064096, + 0.6080010169971501, + 0.6066630909917876, + 0.583017093988019, + 0.5802010240004165, + 0.5892352749942802, + 0.6062776319886325, + 0.6001413670019247, + 0.5942272360116476 + ], + "wide_rotation_5": [ + 0.992464380004094, + 0.9940366090013413, + 1.0267372250091285, + 1.0365073889988707, + 0.9982934959989507, + 1.0329979649977759, + 1.0356882339983713, + 1.0375133589986945, + 1.0317529160092818 + ], + "rotation30_3": [ + 0.6086884120013565, + 0.6424980370065896, + 0.6187205320020439, + 0.630254628995317, + 0.6108514070074307, + 0.6221653319953475, + 0.6147350599931087, + 0.6545881219935836, + 0.6308053899992956 + ], + "rotation30_pad15_3": [ + 0.6207602969952859, + 0.6105574930115836, + 0.6377247320051538, + 0.6011321569967549, + 0.6059658189915353, + 0.5964651920075994, + 0.6439924529986456, + 0.6569824749894906, + 0.6281276770023396 + ], + "rotation30_pad25_3": [ + 0.5991483570105629, + 0.6064385210047476, + 0.6497168549976777, + 0.6321360770089086, + 0.617195097001968, + 0.6384922729921527, + 0.6308419309934834, + 0.6193708399950992, + 0.6806321479962207 + ], + "mixed_3": [ + 0.6288331899995683, + 0.6368726570071885, + 0.6247023649921175, + 0.7049452380015282, + 0.6457830569997896, + 0.6081822200067108, + 0.7204734019906027, + 0.6742006679996848, + 0.6673803730082 + ] + }, + "images_per_second": { + "none": 146.709235516278, + "padded_scale": 53.3207703375951, + "wide_rotation_5": 31.015177668479808, + "rotation30_3": 51.43327400993679, + "rotation30_pad15_3": 51.54968859138072, + "rotation30_pad25_3": 50.72586083427381, + "mixed_3": 49.55224460156506 + }, + "script_sha256": "1177b71a6eea7b03ed0c79019a9059684061574fcb39a6b168dd3d33c2287d0c" + }, + "inputs_sha256": { + "local-evidence/mambo-error-trace/samples.json": "fbcbd120960076b989b3148d68964d03f0574f20cec87c6dfc1f117bbf710dac", + "local-evidence/mambo-family-exploration/reporting-ids.json": "85148a818f9316d36f622bc5a9a346cb75325f2d0eb9f86fde6a81d3d89dd92d", + "local-evidence/mambo-v3/flemming-manifest.json": "04e56e9189933b6758b192f587e296e49012fd935baa00c04ca91e0a3ce3795f" + } +} diff --git a/docs/assets/mambo-composed-tta.csv b/docs/assets/mambo-composed-tta.csv new file mode 100644 index 0000000..6a891c3 --- /dev/null +++ b/docs/assets/mambo-composed-tta.csv @@ -0,0 +1,166 @@ +model,scope,rank,threshold,report_images,coverage,full_accuracy,full_precision,full_recall,full_f1,full_micro_accuracy,full_theilU,tail_accuracy,tail_precision,tail_recall,tail_f1,tail_classes,tail_truth_images,tail_accepted_predictions +v2,zero,species,0.0,52788,1.0,0.6856229575537315,0.2795792585422393,0.6856229575537315,0.2619881841444525,0.6871258619383193,0.9268446802176634,0.7950271126103922,0.8372379328631292,0.7950271126103922,0.7878300075502476,308,44643,39243 +v2,zero,genus,0.0,52788,1.0,0.7893807671430488,0.3234152967366764,0.7893807671430488,0.32128858585759745,0.792225505796772,0.9293295014713818,0.8206876060779148,0.8201078560326222,0.8206876060779148,0.7941995832133607,242,52567,44953 +v2,zero,family,0.0,52788,1.0,0.8435038466784595,0.2610923881260793,0.8435038466784595,0.26968398140672784,0.9454610896415853,0.8669636504107465,0.8700294236802284,0.8073706420034539,0.8700294236802284,0.8237730542270192,20,52783,52241 +v2,optimized,species,0.7484260499477386,52788,0.6973175721754944,0.8465208024160925,0.6381169943670084,0.5418132969389368,0.4466755276813756,0.8340124966041836,0.9268446802176634,0.9521428623131191,0.950834091298276,0.6967497218946193,0.7799317319854288,272,42778,31024 +v2,optimized,genus,0.8759860098361969,52788,0.6981321512464954,0.9533632911945014,0.784792371905105,0.6176629588211429,0.5868633065886133,0.9258405014517136,0.9293295014713818,0.9754975181801082,0.96822735165948,0.6927141276824689,0.7874852435844386,215,46868,34160 +v2,optimized,family,0.9553309082984924,52788,0.7744373721300295,0.9963653352691595,0.841348645086206,0.6466603488658192,0.6545226053114057,0.9986057092536875,0.8669636504107465,0.9957914408379742,0.9859850593239553,0.6876576692748175,0.802095261069409,19,52770,40869 +v2,coverage_70,species,0.7434713244438171,52788,0.6999886337804047,0.8482344975724038,0.6389619346119313,0.5468981617462098,0.44937087163076467,0.8329409217612513,0.9268446802176634,0.9525904825539635,0.9530383920489972,0.701565632554905,0.7839107916744207,270,42705,31043 +v2,coverage_70,genus,0.8737562894821167,52788,0.6999886337804047,0.9531039745578903,0.7845297024249248,0.6206686411587036,0.5893305682633164,0.9254418013044302,0.9293295014713818,0.9746620588690518,0.9765518838609734,0.7007712382965899,0.7966054093358439,210,46789,34167 +v2,coverage_70,family,0.98415607213974,52788,0.6999886337804047,0.9984960251371973,0.9374379812137319,0.5742612899561486,0.6694678519956686,0.9992963654569565,0.8669636504107465,0.9982585554220179,0.9900565035745176,0.6040652862222203,0.7393484528820418,19,52770,36944 +v2,coverage_80,species,0.5681188702583313,52788,0.7999924225202698,0.8048570287937525,0.5306305982463984,0.6058964372202109,0.4161430255270702,0.7869287236561686,0.9268446802176634,0.9218031816400422,0.9314233316840236,0.7492859566639438,0.808804322038378,282,43436,34074 +v2,coverage_80,genus,0.6667134761810303,52788,0.7999924225202698,0.9313529816901988,0.6375035137033628,0.6996475066439409,0.5320636902859176,0.8951693109164102,0.9293295014713818,0.9495748403153426,0.9434952597958767,0.7611632950298957,0.8249046274137032,220,47497,38066 +v2,coverage_80,family,0.9347575902938844,52788,0.7999924225202698,0.9927903326406756,0.7487148238957816,0.670547749394969,0.6204806481364462,0.9979161733364906,0.8669636504107465,0.991651964110256,0.982316582583257,0.7165739962311568,0.820825282633827,19,52770,42212 +v2,coverage_90,species,0.3602153062820434,52788,0.8999962112601348,0.7565649535631609,0.42349111509646353,0.6607818075996174,0.365080834230572,0.7413121724304869,0.9268446802176634,0.8722225832302668,0.894765673851891,0.7823544809151759,0.8117772424631506,295,44256,36932 +v2,coverage_90,genus,0.4175159633159637,52788,0.8999962112601348,0.8750784339645986,0.4898323702122493,0.7565919852211191,0.44838372230079665,0.851628112568145,0.9293295014713818,0.9040361245609442,0.9005023638621836,0.8030735550598104,0.828518735633285,231,48032,41304 +v2,coverage_90,family,0.6952391862869263,52788,0.8999962112601348,0.9701041183589592,0.5096266926670753,0.7859717639076295,0.47323785280021996,0.9889073649203309,0.8669636504107465,0.9653837159945841,0.9451986498604876,0.8218848478072115,0.8736386001087222,19,52770,47443 +torch,zero,species,0.0,52788,1.0,0.7135646156794592,0.2688723997356787,0.7135646156794592,0.2592869317361531,0.7077555505039024,0.9292211983468999,0.8203118253354881,0.8392678347823381,0.8203118253354881,0.8100326163861944,308,44643,39953 +torch,zero,genus,0.0,52788,1.0,0.8053026558890463,0.3221313136590869,0.8053026558890463,0.32303518958457,0.7939683261347276,0.9278616328176507,0.8383310164872881,0.8166147950822779,0.8383310164872881,0.805657178112806,242,52567,44773 +torch,zero,family,0.0,52788,1.0,0.8104767092433202,0.2753352445359579,0.8104767092433202,0.2804941988278224,0.9298325376979617,0.8486962980431905,0.8570482156298184,0.7593390669412071,0.8570482156298184,0.7831492631501339,20,52783,51891 +torch,optimized,species,0.8099595010280609,52788,0.7081344244904145,0.8669405316273155,0.7028135267405738,0.5774611074285403,0.5081384528044555,0.8338193199753886,0.9292211983468999,0.963494109771882,0.9626322859838098,0.7171390330256306,0.8016422382706134,272,42778,30977 +torch,optimized,genus,0.82109534740448,52788,0.7575395923315905,0.9547996220084877,0.745381822803767,0.678410498949023,0.6019267109931725,0.9077246242716747,0.9278616328176507,0.9730526458225819,0.9696226974149172,0.7475533077376153,0.8310650157210921,215,46868,35966 +torch,optimized,family,0.970800906419754,52788,0.7305827081912556,0.9932547854813464,0.74059226732527,0.6535073068400129,0.5807455159791292,0.997951563553389,0.8486962980431905,0.99218975160998,0.9900267939876928,0.7040432580775865,0.816089411195116,19,52770,38530 +torch,coverage_70,species,0.8241381645202637,52788,0.6999886337804047,0.86958680967719,0.7167252898445411,0.5705474537929165,0.5122730291185364,0.8354577683959838,0.9292211983468999,0.9672316998030942,0.9647766155724887,0.7128409633763704,0.7993028119491851,270,42705,30647 +torch,coverage_70,genus,0.9218662977218628,52788,0.6999886337804047,0.9660439693907655,0.8305261428723821,0.6273798603264148,0.6221364731441472,0.9193255933533598,0.9278616328176507,0.9824288448238584,0.9833895891353926,0.7075405452013525,0.8063455181681898,210,46789,33607 +torch,coverage_70,family,0.9825798273086548,52788,0.6999886337804047,0.9952393276120065,0.7964173234185559,0.6300210433137761,0.6078073153329585,0.9984844794457525,0.8486962980431905,0.9944876424981127,0.9914000560860179,0.6756125180195103,0.7948388506661144,19,52770,36926 +torch,coverage_80,species,0.6061448454856873,52788,0.7999924225202698,0.8333841588302096,0.5485047799955343,0.6370545006054973,0.445901326225418,0.804735969689794,0.9292211983468999,0.941697838071395,0.9410961417102457,0.7691340926734198,0.8312080391987352,282,43436,34441 +torch,coverage_80,genus,0.7092886567115784,52788,0.7999924225202698,0.9392760079927347,0.6547210280772727,0.7133811913319552,0.5584780260317714,0.8955008287946957,0.9278616328176507,0.9649697784339673,0.9547964398255602,0.7703699933851422,0.8399359589724344,220,47497,37907 +torch,coverage_80,family,0.9039735794067384,52788,0.7999924225202698,0.9767480012163248,0.6257303180264047,0.7059032105438684,0.5344474480496143,0.9955481884915937,0.8486962980431905,0.9862345277241655,0.9749910954156714,0.7634212953547233,0.8500844942394542,19,52770,42152 +torch,coverage_90,species,0.3223742842674255,52788,0.8999962112601348,0.7822620703147596,0.4110337432773394,0.6886066265817404,0.3648914489871293,0.7621503294112695,0.9292211983468999,0.891242198240585,0.898524732525704,0.8065329569944766,0.8353160761309999,295,44256,37604 +torch,coverage_90,genus,0.3692984879016876,52788,0.8999962112601348,0.8858347939502168,0.4723629331651541,0.7735925323689193,0.44134032210625124,0.8531015176071902,0.9278616328176507,0.9209837212851842,0.9006552910895744,0.8167651188996207,0.8434500014751452,231,48032,41630 +torch,coverage_90,family,0.5828610062599182,52788,0.8999962112601348,0.9151360267321503,0.39997022219300904,0.7680035104129965,0.37744401953419926,0.9795196699572712,0.8486962980431905,0.9543680309530158,0.9164661252394816,0.834546759568769,0.8677728056848387,19,52770,47224 +onnx,zero,species,0.0,52788,1.0,0.7133861511997317,0.2689411284200973,0.7133861511997317,0.25936240461341026,0.7078123816018792,0.9291859354966914,0.8208210511198463,0.8393910727128245,0.8208210511198463,0.8102958063278631,308,44643,39968 +onnx,zero,genus,0.0,52788,1.0,0.8053599793321786,0.32303901654923844,0.8053599793321786,0.32445203101159487,0.793949382435402,0.9278774326101347,0.8384072898289766,0.8162946927109619,0.8384072898289766,0.8055261341500325,242,52567,44776 +onnx,zero,family,0.0,52788,1.0,0.8106325437578626,0.2756918885388057,0.8106325437578626,0.2808879232365721,0.9300409183905433,0.8489407553438706,0.8572274253215421,0.7604089989497506,0.8572274253215421,0.784330436376383,20,52783,51893 +onnx,optimized,species,0.8161613345146179,52788,0.7045351216185497,0.8695378035260483,0.7088741319668206,0.5752968296743217,0.5099648536812275,0.8345029711489339,0.9291859354966914,0.9642506092928128,0.9626937682791291,0.7149144701582824,0.8001046982018766,272,42778,30845 +onnx,optimized,genus,0.8301631808280945,52788,0.7536561339698417,0.9551874761942367,0.7523387061411551,0.6745698413302063,0.6043210367725153,0.908581339231852,0.9278774326101347,0.9738759173936625,0.9708203215753252,0.7439396812388471,0.8289781701827877,215,46868,35808 +onnx,optimized,family,0.9698503911495209,52788,0.7325907403197697,0.9932599551447033,0.7406007419898425,0.6548532928566179,0.5815679236552638,0.9979571783202317,0.8489407553438706,0.9921957375359722,0.9900397290020405,0.7056726095713715,0.817387949631118,19,52770,38636 +onnx,coverage_70,species,0.8243970274925232,52788,0.6999886337804047,0.8696078641344749,0.7154987852188989,0.5707796582704833,0.5116109757516245,0.8354036426619036,0.9291859354966914,0.9672641785336684,0.9648328354991503,0.7132879118596801,0.7996140862205406,270,42705,30645 +onnx,coverage_70,genus,0.9216671586036682,52788,0.6999886337804047,0.9661254181481168,0.8307688580940611,0.6277109684720645,0.6224978354796963,0.9192444047522395,0.9278774326101347,0.9825450538711241,0.9833893298187405,0.7076905240002949,0.8064963735413154,210,46789,33604 +onnx,coverage_70,family,0.982620656490326,52788,0.6999886337804047,0.9952396475419057,0.7964181852175016,0.630096313240106,0.6078714628660602,0.9984844794457525,0.8489407553438706,0.9944880129432593,0.9914012807476776,0.6757036342461201,0.7949333838727902,19,52770,36926 +onnx,coverage_80,species,0.6067228317260742,52788,0.7999924225202698,0.8328452370529146,0.5484999836385683,0.6369039477216849,0.44584696550387404,0.804759649538243,0.9291859354966914,0.9418513574630873,0.9410921687024294,0.7693785658461272,0.8313117853878524,282,43436,34446 +onnx,coverage_80,genus,0.7099964618682861,52788,0.7999924225202698,0.9392543348174218,0.654560571667988,0.7132182241768983,0.5583048362404305,0.8955245086431447,0.9278774326101347,0.9649382493245952,0.9544211478616387,0.7704551175301809,0.8398638030564497,220,47497,37907 +onnx,coverage_80,family,0.9041854739189148,52788,0.7999924225202698,0.9767639732185658,0.6257865447269096,0.7059843462574676,0.5345107480456108,0.9955718683400426,0.8489407553438706,0.9862530216214973,0.9750917116165754,0.7635195122711856,0.8501977679165007,19,52770,42152 +onnx,coverage_90,species,0.3231773376464844,52788,0.8999962112601348,0.7807145222813506,0.4112190997898548,0.6889577322256099,0.36507446215024497,0.7621082321244396,0.9291859354966914,0.8914832210371341,0.8988812031034508,0.807154235455831,0.835765327942146,295,44256,37602 +onnx,coverage_90,genus,0.3690774440765381,52788,0.8999962112601348,0.8861895291699214,0.47246294916839016,0.7740196989711382,0.4415744427244726,0.8532699067545096,0.9278774326101347,0.9214659032255056,0.9007912188383919,0.8173605632542287,0.8438589052760838,231,48032,41634 +onnx,coverage_90,family,0.5826917886734009,52788,0.8999962112601348,0.9151606889053974,0.3990993533111283,0.7680131308693198,0.37693960009408994,0.979603864530931,0.8489407553438706,0.9543965871536181,0.914266035432625,0.8345584053843181,0.8664984828887731,19,52770,47228 +torch-tta,zero,species,0.0,52788,1.0,0.7405864004487995,0.3117281910150932,0.7405864004487995,0.30013980437546733,0.7321360915359552,0.9416287278244636,0.8480295198511346,0.8592040363096476,0.8480295198511346,0.8369055759103206,308,44643,40958 +torch-tta,zero,genus,0.0,52788,1.0,0.8312879946116835,0.3578921081808225,0.8312879946116835,0.3600905137263133,0.8163029476396151,0.9429697597956094,0.8642419820735022,0.8426871013681415,0.8642419820735022,0.8341657275204103,242,52567,45474 +torch-tta,zero,family,0.0,52788,1.0,0.8579010503993526,0.2856847483669441,0.8579010503993526,0.2970441402135782,0.9478669394559369,0.8802152497213216,0.8865862079592552,0.7945542451008321,0.8865862079592552,0.8211324206407348,20,52783,52160 +torch-tta,optimized,species,0.7392672300338745,52788,0.7831893612184587,0.8659206758370823,0.6694908268387498,0.639254202340642,0.5238581475082266,0.8257020535519919,0.9416287278244636,0.9585814667783285,0.9585731812083509,0.7743974002343408,0.8413487263251,272,42778,33853 +torch-tta,optimized,genus,0.869922012090683,52788,0.7772978707281958,0.9627590640417357,0.8166841617561862,0.7031449724257084,0.6655108425187299,0.9116055761356989,0.9429697597956094,0.9771086466542604,0.9775547270341164,0.767268013502815,0.8477428518527236,215,46868,36949 +torch-tta,optimized,family,0.964760661125183,52788,0.7874327498673941,0.9955823574240963,0.7393905133847496,0.700159197162577,0.6072565582310141,0.998243799167609,0.8802152497213216,0.9948848349121117,0.9917013099030386,0.7564680159984232,0.8535629866805485,19,52770,41536 +torch-tta,coverage_70,species,0.8902084827423096,52788,0.6999886337804047,0.8906144707778789,0.7981732822929044,0.5796377324768266,0.5609290214340181,0.8444697031203485,0.9416287278244636,0.9733088758873599,0.9705609441193396,0.7175113900443769,0.8041322816170898,270,42705,30831 +torch-tta,coverage_70,genus,0.9606042504310608,52788,0.6999886337804047,0.9753286103689284,0.8964480054302681,0.6333947441461268,0.6669758159190942,0.9231414576060187,0.9429697597956094,0.9855571610067058,0.9869624081036315,0.7108155553452893,0.8092113545878005,210,46789,33743 +torch-tta,coverage_70,family,0.9924046397209167,52788,0.6999886337804047,0.9955883069989272,0.8894957303016392,0.6322405391393889,0.68215984063641,0.9989174853183946,0.8802152497213216,0.9948917238934942,0.9919946066968074,0.6782992761241996,0.7974755385050802,19,52770,36933 +torch-tta,coverage_80,species,0.6967090368270874,52788,0.7999924225202698,0.8608792923180646,0.6433940716376311,0.649735408471136,0.5139660613219256,0.821193464361828,0.9416287278244636,0.9554226848332942,0.9554094003741878,0.7845211799685287,0.8473164347855004,282,43436,34887 +torch-tta,coverage_80,genus,0.818070650100708,52788,0.7999924225202698,0.9575457407732273,0.7633603696735349,0.7240369843261408,0.6403702471656528,0.907056594837793,0.9429697597956094,0.974270531476802,0.9716244705685136,0.7802435176207189,0.8534011844503622,220,47497,38196 +torch-tta,coverage_80,family,0.9556875824928284,52788,0.7999924225202698,0.980043657507525,0.7392855318346994,0.7065130086457477,0.6105337132313392,0.9979872128818376,0.8802152497213216,0.9900505507981868,0.9915410749055935,0.7641594720043668,0.8587374419442199,19,52770,42196 +torch-tta,coverage_90,species,0.4103786051273346,52788,0.8999962112601348,0.8145174796850042,0.4925946020576832,0.7092768556597198,0.43138462249532483,0.783914626702309,0.9416287278244636,0.9175215805336097,0.9199110408254955,0.8271822185719119,0.8577180591837419,295,44256,38345 +torch-tta,coverage_90,genus,0.4679165780544281,52788,0.8999962112601348,0.9206265600944382,0.5628702690668548,0.7929657144502366,0.5213308664991891,0.8721294912542886,0.9429697597956094,0.9452283281513972,0.9293840070922701,0.8394534910703915,0.8708704993487821,231,48032,42116 +torch-tta,coverage_90,family,0.7022547125816345,52788,0.8999962112601348,0.9519711626779341,0.4890308893157449,0.7839285171996123,0.4572527582331337,0.9901702835252268,0.8802152497213216,0.9707034515218184,0.9500140243129231,0.8497758163671418,0.8936445866068157,19,52770,47370 +onnx-tta,zero,species,0.0,52788,1.0,0.7408884646998294,0.3129592874854792,0.7408884646998294,0.30114949302373306,0.7322118663332575,0.9416043541781303,0.8482708971423827,0.859125120067078,0.8482708971423827,0.8368704802655687,308,44643,40964 +onnx-tta,zero,genus,0.0,52788,1.0,0.831310673030869,0.35819829298724193,0.831310673030869,0.3604852264440997,0.8163029476396151,0.9429777628243508,0.8642721574907657,0.8423837204350251,0.8642721574907657,0.8339715279038667,242,52567,45478 +onnx-tta,zero,family,0.0,52788,1.0,0.8580571051602935,0.2856706122641368,0.8580571051602935,0.2970778194056521,0.9479237705539137,0.8802934722288728,0.8867656709343373,0.7945118367924103,0.8867656709343373,0.821233458216956,20,52783,52160 +onnx-tta,optimized,species,0.8280269503593445,52788,0.7404902629385466,0.8755166405852203,0.7362820959348587,0.6075669492667327,0.5430735533140522,0.8355803422957866,0.9416043541781303,0.9650388599694326,0.9639006969879437,0.7443741514376615,0.8223569195026883,272,42778,32341 +onnx-tta,optimized,genus,0.8708856105804443,52788,0.7768621656437069,0.9629823236784678,0.8168891977985718,0.703150166196618,0.6655370235633972,0.911799848813675,0.9429777628243508,0.9774284415058453,0.9775831973986752,0.7672866592834245,0.8477266855996487,215,46868,36936 +onnx-tta,optimized,family,0.966471254825592,52788,0.7846859134651815,0.9955854528269081,0.7395038777892725,0.6986717712105687,0.6065093177805807,0.998285935010381,0.8802934722288728,0.9948884190627355,0.9918743397836266,0.754667447740729,0.852383133337759,19,52770,41392 +onnx-tta,coverage_70,species,0.8901577591896057,52788,0.6999886337804047,0.8906299010400511,0.7966276731934266,0.5796284078643174,0.5599772016156898,0.8443073259181078,0.9416043541781303,0.9732493733693959,0.9705461373032799,0.7174933624601928,0.8041016918766225,270,42705,30827 +onnx-tta,coverage_70,genus,0.9606157541275024,52788,0.6999886337804047,0.9754350362986757,0.8965238930921287,0.6335466562733132,0.6671841623210293,0.9231414576060187,0.9429777628243508,0.9857081844689186,0.9870787691851511,0.7107978607072257,0.809253042786544,210,46789,33740 +onnx-tta,coverage_70,family,0.9924092292785645,52788,0.6999886337804047,0.9955876317644935,0.8894957438238706,0.6319719604359404,0.6819831887822367,0.9989174853183946,0.8802934722288728,0.9948909420430975,0.9919946237775208,0.6779741545358146,0.797243101854852,19,52770,36933 +onnx-tta,coverage_80,species,0.6970725059509277,52788,0.7999924225202698,0.8605050796504391,0.6425824308630953,0.6502626044247952,0.5141028667288083,0.8211697845133791,0.9416043541781303,0.95544016618753,0.9552347846466682,0.7851829659454762,0.8475942364745017,282,43436,34886 +onnx-tta,coverage_80,genus,0.8184317350387573,52788,0.7999924225202698,0.957481163977273,0.7612239102518993,0.7238724141381434,0.6402488255798201,0.9069145157470992,0.9429777628243508,0.9741774842920884,0.9714040423387499,0.7799920264882948,0.8531731226964174,220,47497,38190 +onnx-tta,coverage_80,family,0.9559080004692078,52788,0.7999924225202698,0.9800427091207768,0.7392855395634923,0.7064178836065658,0.6104810675107896,0.9979872128818376,0.8802934722288728,0.9900494526661626,0.9915410867021727,0.7640443206411466,0.8586543171222992,19,52770,42196 +onnx-tta,coverage_90,species,0.4094218313694,52788,0.8999962112601348,0.8145125280066268,0.49342728859876867,0.7093314621998333,0.4322191163505195,0.7838935780588941,0.9416043541781303,0.9179067496797524,0.9195647545876909,0.8271376014440223,0.8573977653891341,295,44256,38344 +onnx-tta,coverage_90,genus,0.4677167236804962,52788,0.8999962112601348,0.9189803824252353,0.5617081860676382,0.7928671954824282,0.5202478106264234,0.8720452966806289,0.9429777628243508,0.945175513586682,0.9293802024440366,0.8393151839568592,0.870823331898205,231,48032,42114 +onnx-tta,coverage_90,family,0.701670229434967,52788,0.8999962112601348,0.9520347449957101,0.4890652942611772,0.7838848111299506,0.4572588673034217,0.9902123808120566,0.8802934722288728,0.9707770731529273,0.9500882665635927,0.8497229090196569,0.8936577693374371,19,52770,47370 +torch:rotation30_pad15_3,zero,species,0.0,52788,1.0,0.7513310721181966,0.33541184570095794,0.7513310721181966,0.3207141524325515,0.7501515495946048,0.9506821380005821,0.8681389941924458,0.8803148570115105,0.8681389941924458,0.8587890346597373,308,44643,41699 +torch:rotation30_pad15_3,zero,genus,0.0,52788,1.0,0.8514761457282455,0.3869580883721579,0.8514761457282455,0.3880631831613022,0.8322156550731227,0.9530656934912801,0.8816751995436959,0.862662277317664,0.8816751995436959,0.8542468147491235,242,52567,45979 +torch:rotation30_pad15_3,zero,family,0.0,52788,1.0,0.8625346236914426,0.33597390634364505,0.8625346236914426,0.34855638987709453,0.9608244297946503,0.904888479697919,0.8919148172451592,0.8153308518106595,0.8919148172451592,0.8403410998409673,20,52783,52370 +torch:rotation30_pad15_3,optimized,species,0.7703565061092377,52788,0.8067363794801848,0.8643190221276298,0.7142382786297836,0.6585389181056288,0.5614510327382695,0.8301084863570187,0.9506821380005821,0.9633823854628971,0.9620682860611799,0.7992089334141771,0.8594740388924278,272,42778,34929 +torch:rotation30_pad15_3,optimized,genus,0.797132283449173,52788,0.8429188451920892,0.9624906870799902,0.7650612786044926,0.7634804910051127,0.66391037346047,0.9039014742898238,0.9530656934912801,0.9754344482950037,0.9752199938369727,0.8251593289180623,0.8840371546219599,215,46868,39740 +torch:rotation30_pad15_3,optimized,family,0.9761196076869965,52788,0.8184435856634084,0.989187457175979,0.8090769758102975,0.7304671232556951,0.6688685629268447,0.998750115730025,0.904888479697919,0.9874802135721861,0.9918462287830544,0.7931565581111449,0.8782448997518413,19,52770,43191 +torch:rotation30_pad15_3,coverage_70,species,0.93315851688385,52788,0.6999886337804047,0.8991772347974494,0.8456689437195946,0.5806579657362848,0.5804015634850642,0.8519931801575059,0.9506821380005821,0.9776436854882747,0.9755378203406662,0.722004661286145,0.8087591090852428,270,42705,31010 +torch:rotation30_pad15_3,coverage_70,genus,0.9804478883743286,52788,0.6999886337804047,0.9765122298670562,0.9212082467863876,0.6323255412674224,0.6760711493673188,0.9276880192687613,0.9530656934912801,0.9868260875650243,0.9869714825698337,0.7128497701246634,0.8100365271492445,210,46789,33975 +torch:rotation30_pad15_3,coverage_70,family,0.9972013235092164,52788,0.6999886337804047,0.9940919372828998,0.9105909518507277,0.6474373549878735,0.695180588011688,0.9994858055262374,0.904888479697919,0.9931590852749367,0.9923254128640772,0.6966954216249965,0.8129569140504668,19,52770,36945 +torch:rotation30_pad15_3,coverage_80,species,0.7864558100700378,52788,0.7999924225202698,0.8681525695853197,0.7256230124848712,0.6516322902727562,0.5638804990406792,0.8320625147999052,0.9506821380005821,0.964118819588285,0.9638007386543088,0.7943988204601052,0.857186007121519,282,43436,35175 +torch:rotation30_pad15_3,coverage_80,genus,0.8991661667823792,52788,0.7999924225202698,0.9690887320773804,0.8392267277587339,0.7280547849656653,0.6932378251822574,0.9128107980108927,0.9530656934912801,0.9788034405604307,0.9793962322786787,0.7879772281995084,0.8606213313448622,220,47497,38462 +torch:rotation30_pad15_3,coverage_80,family,0.9839562773704528,52788,0.7999924225202698,0.9893177583735553,0.8092924516803065,0.715811313718187,0.6613289841826895,0.9990054463651432,0.904888479697919,0.9876310886430639,0.9921524313351724,0.7754153149867931,0.8671339416025601,19,52770,42219 +torch:rotation30_pad15_3,coverage_90,species,0.4981422424316406,52788,0.8999962112601348,0.8275277881335519,0.5698267633908097,0.7148264203986453,0.49048063270161796,0.8008798332947441,0.9506821380005821,0.9332526939814978,0.939363112800583,0.8425608778485374,0.8754335683136774,295,44256,38822 +torch:rotation30_pad15_3,coverage_90,genus,0.5704049468040466,52788,0.8999962112601348,0.9323397607229976,0.6453578889070587,0.8030574959232933,0.5914681212088754,0.8852848933886212,0.9530656934912801,0.9539446830499735,0.9493471909350284,0.8504964110432653,0.8858621014410463,231,48032,42567 +torch:rotation30_pad15_3,coverage_90,family,0.8255183696746826,52788,0.8999962112601348,0.9662851300685152,0.6620438247654835,0.8161730537339364,0.6181949611573065,0.9956218821696942,0.904888479697919,0.9806985716582809,0.9658983715348495,0.8624928869086922,0.9082064719768487,19,52770,47456 +torch:rotation30_pad25_3,zero,species,0.0,52788,1.0,0.7493898333756177,0.3361085016262147,0.7493898333756177,0.3201483357303684,0.7508714101689778,0.9512236692214211,0.8695966338189322,0.8832470040020461,0.8695966338189322,0.8611832508395522,308,44643,41703 +torch:rotation30_pad25_3,zero,genus,0.0,52788,1.0,0.8472767012256567,0.3871858468468912,0.8472767012256567,0.38731172619778687,0.8324808668636812,0.9537143645936615,0.8812527981807469,0.8646719138069031,0.8812527981807469,0.855181947419072,242,52567,45974 +torch:rotation30_pad25_3,zero,family,0.0,52788,1.0,0.86366836103727,0.3473357735776554,0.86366836103727,0.35919021330288153,0.9622830946427219,0.9062358679592668,0.8932186151928605,0.8280730113019039,0.8932186151928605,0.8505612212541583,20,52783,52402 +torch:rotation30_pad25_3,optimized,species,0.7562050521373749,52788,0.8116049102068652,0.8633843418309688,0.7190416496691577,0.6588299780195079,0.566106644915547,0.8300772588287468,0.9512236692214211,0.963817038901828,0.961489880265137,0.8035377762915177,0.8618349502484031,272,42778,35185 +torch:rotation30_pad25_3,optimized,genus,0.7952321171760559,52788,0.8432030006819732,0.95774560113418,0.7891877764219916,0.7626880651777854,0.6776129515770067,0.9032149356338882,0.9537143645936615,0.9754640055183043,0.9744657384691411,0.8284961369731623,0.8857838500606222,215,46868,39827 +torch:rotation30_pad25_3,optimized,family,0.9765909910202026,52788,0.8209441539743881,0.9892254689058468,0.8402573230856973,0.7546408071160894,0.7073928412638566,0.9988231493446557,0.9062358679592668,0.9875242271541385,0.9919310736962174,0.7961036491000434,0.8802424586381118,19,52770,43325 +torch:rotation30_pad25_3,coverage_70,species,0.9330438375473022,52788,0.6999886337804047,0.8958773246343307,0.8488359655175162,0.575642556980122,0.5778389555534205,0.8523720602960677,0.9512236692214211,0.977274427695301,0.9759679510257172,0.7245807100491324,0.810278348194081,270,42705,31144 +torch:rotation30_pad25_3,coverage_70,genus,0.9808310866355896,52788,0.6999886337804047,0.9766589295185959,0.9346999594698736,0.6367137848251249,0.68706311679764,0.928012773673243,0.9537143645936615,0.9871863309136562,0.9865580047875915,0.7144975277360381,0.8109127926788642,210,46789,34055 +torch:rotation30_pad25_3,coverage_70,family,0.9974275231361388,52788,0.6999886337804047,0.9934599375766446,0.9498878737701825,0.6454812993243774,0.7241944754879999,0.9994858055262374,0.9062358679592668,0.992427296141378,0.9919695314060105,0.6902789817732341,0.8073158286865963,19,52770,36945 +torch:rotation30_pad25_3,coverage_80,species,0.7825590372085571,52788,0.7999924225202698,0.8685831581947409,0.7408341935752873,0.6520466646970331,0.5728841408568456,0.8331754676770069,0.9512236692214211,0.9653788722710366,0.9636915943413662,0.7956290746750607,0.8575515862096464,282,43436,35239 +torch:rotation30_pad25_3,coverage_80,genus,0.9008587002754213,52788,0.7999924225202698,0.9684925893463145,0.8495310596183734,0.7285668935695543,0.6990184834220075,0.9127397584655458,0.9537143645936615,0.9788881421171708,0.9794636846683936,0.7901320143472512,0.8618171291762662,220,47497,38506 +torch:rotation30_pad25_3,coverage_80,family,0.9850324392318726,52788,0.7999924225202698,0.989354070043887,0.9107072776433661,0.7405947769417649,0.7559779769818279,0.9991001657589391,0.9062358679592668,0.9876731337350272,0.9924723507074099,0.7791005599416505,0.8697078644497735,19,52770,42222 +torch:rotation30_pad25_3,coverage_90,species,0.5055776238441467,52788,0.8999962112601348,0.8259918976166272,0.5745198109152063,0.713123054577747,0.492042775668204,0.8011534656591383,0.9512236692214211,0.9350519930314937,0.9387344030835514,0.8431093052722285,0.8753944002330876,295,44256,38826 +torch:rotation30_pad25_3,coverage_90,genus,0.5816248059272766,52788,0.8999962112601348,0.9275599703862233,0.6663984622722228,0.8037295174574243,0.6076394789666649,0.885305942032036,0.9537143645936615,0.9576218533224137,0.9504064753538914,0.8531971719555743,0.8879077068258153,231,48032,42580 +torch:rotation30_pad25_3,coverage_90,family,0.8369399309158325,52788,0.8999962112601348,0.9632627273411767,0.6557361064788253,0.8187844116433781,0.6053891583355393,0.9960849523248226,0.9062358679592668,0.9771989474476782,0.981015342831644,0.8656540043780165,0.9169624562903813,19,52770,47470 +torch:wide_rotation_mixed_padding_5,zero,species,0.0,52788,1.0,0.7552353473768904,0.33652687002568266,0.7552353473768904,0.32157178232724193,0.753731908767144,0.9525401112314309,0.8715579516601252,0.883662054978781,0.8715579516601252,0.8628306472516105,308,44643,41807 +torch:wide_rotation_mixed_padding_5,zero,genus,0.0,52788,1.0,0.8526658727375439,0.3940356914835521,0.8526658727375439,0.3957580012454397,0.8360043949382435,0.9550597834064932,0.8853243404403656,0.8667563365049132,0.8853243404403656,0.8585900247512551,242,52567,46080 +torch:wide_rotation_mixed_padding_5,zero,family,0.0,52788,1.0,0.8682120684665646,0.34808262594697054,0.8682120684665646,0.3600973207633851,0.9631734485110253,0.9086734404521702,0.8984438787365493,0.8300148274621234,0.8984438787365493,0.8529197006514678,20,52783,52398 +torch:wide_rotation_mixed_padding_5,optimized,species,0.7889324426651001,52788,0.8034212320982042,0.8703941893724045,0.7403659908254208,0.6565552978086161,0.57525880404229,0.8329914408997666,0.9525401112314309,0.9641487530176069,0.9614697038990926,0.7971390965681312,0.8576154488683261,272,42778,34859 +torch:wide_rotation_mixed_padding_5,optimized,genus,0.810388594865799,52788,0.8446048344320679,0.9607022983572389,0.7909544340740902,0.7604445669279044,0.6825116641787987,0.9049456095099249,0.9550597834064932,0.975113981160547,0.9740507775184749,0.8280259319833198,0.8854528533073914,215,46868,39833 +torch:wide_rotation_mixed_padding_5,optimized,family,0.9926556646823883,52788,0.7671629915889975,0.9945725610665762,0.8742831111794982,0.6934443095310503,0.6990191600388408,0.9993332839469591,0.9086734404521702,0.9937155970244568,0.9924777778677608,0.7483394678128908,0.8490963944391154,19,52770,40489 +torch:wide_rotation_mixed_padding_5,coverage_70,species,0.9378145933151244,52788,0.6999886337804047,0.8981579179311403,0.8482357262407203,0.5783557942848305,0.5797706028761002,0.8516413628859841,0.9525401112314309,0.9779798176414025,0.9763347531347621,0.7251636762866198,0.8110997447784023,270,42705,31006 +torch:wide_rotation_mixed_padding_5,coverage_70,genus,0.9829131960868835,52788,0.6999886337804047,0.9772508883665877,0.9332838510987757,0.6363193807367752,0.6865936749446687,0.9270385104597981,0.9550597834064932,0.9877629577875913,0.9879968037128767,0.7139534005861962,0.8109341992830557,210,46789,33950 +torch:wide_rotation_mixed_padding_5,coverage_70,family,0.9976515173912048,52788,0.6999886337804047,0.9941883574173919,0.9104544472981865,0.649008190569088,0.6981880604454596,0.9995128683932776,0.9086734404521702,0.9932707296411906,0.9921529860608669,0.6945483764378839,0.8112123602352538,19,52770,36944 +torch:wide_rotation_mixed_padding_5,coverage_80,species,0.7969815731048584,52788,0.7999924225202698,0.8703860488155565,0.7478527799932727,0.6541611168700917,0.5769583914374429,0.8337437840397821,0.9525401112314309,0.9642272032183972,0.9621322595440107,0.7940774494750392,0.8559202478885654,282,43436,35208 +torch:wide_rotation_mixed_padding_5,coverage_80,genus,0.909421443939209,52788,0.7999924225202698,0.9702370068158972,0.8641071843621503,0.7311401849680091,0.7126052675987479,0.9137106322519536,0.9550597834064932,0.9798380770766145,0.9813582892523279,0.7881178200935575,0.8613988006364001,220,47497,38452 +torch:wide_rotation_mixed_padding_5,coverage_80,family,0.9860424399375916,52788,0.7999924225202698,0.9895760191358332,0.8401325897859828,0.7351839613471405,0.6968757347312367,0.9990764859104901,0.9086734404521702,0.9879301274204382,0.9917603860229236,0.7725506252744735,0.8652970967233362,19,52770,42219 +torch:wide_rotation_mixed_padding_5,coverage_90,species,0.513369619846344,52788,0.8999962112601348,0.8297329234230693,0.5765988016597196,0.7158386940830017,0.4952952124369994,0.8030057462796523,0.9525401112314309,0.934962103106059,0.9381498118770788,0.8439005661627716,0.8761809466681394,295,44256,38932 +torch:wide_rotation_mixed_padding_5,coverage_90,genus,0.5913177728652954,52788,0.8999962112601348,0.9371673280837497,0.6672605314057598,0.8028247469715531,0.6092459823242529,0.8878317792418279,0.9550597834064932,0.9564080257719563,0.9529007912283691,0.8523142992788373,0.8890123517529243,231,48032,42643 +torch:wide_rotation_mixed_padding_5,coverage_90,family,0.8463716506958008,52788,0.8999962112601348,0.9685322979359694,0.6394863690228767,0.8178052140525619,0.5946226332779055,0.996295438758972,0.9086734404521702,0.9786013073845059,0.9791079040923648,0.8644686599259757,0.9158065618920347,19,52770,47467 +onnx:rotation30_pad15_3,zero,species,0.0,52788,1.0,0.7513525957454966,0.3357177251908713,0.7513525957454966,0.32100616569668566,0.7501704932939305,0.9506293360700655,0.8681754725478049,0.8800706763295238,0.8681754725478049,0.8586965864033043,308,44643,41703 +onnx:rotation30_pad15_3,zero,genus,0.0,52788,1.0,0.8515498392515479,0.3869534389691655,0.8515498392515479,0.3880775533670641,0.8322724861710995,0.9530907894039403,0.8817732545623048,0.8625063923843291,0.8817732545623048,0.8541158274741251,242,52567,45983 +onnx:rotation30_pad15_3,zero,family,0.0,52788,1.0,0.8624898678796847,0.3360275595138312,0.8624898678796847,0.3485676456240567,0.9608812608926272,0.904985777478236,0.8918633480616375,0.8154730327116526,0.8918633480616375,0.840370927570417,20,52783,52372 +onnx:rotation30_pad15_3,optimized,species,0.770552396774292,52788,0.8067174357808593,0.864259698288895,0.7129414582230171,0.6581485418241365,0.5603296083270611,0.82996360220735,0.9506293360700655,0.9632906010281114,0.9619290738861205,0.7985746451092541,0.8589686091730018,272,42778,34924 +onnx:rotation30_pad15_3,optimized,genus,0.7823580801486969,52788,0.8480336440100023,0.9602256286013219,0.7545606744376422,0.7659093737952452,0.6569306030813745,0.902649332082384,0.9530907894039403,0.9746103739038117,0.9741038410766583,0.8283883340772565,0.885697418184335,215,46868,39933 +onnx:rotation30_pad15_3,optimized,family,0.9773475527763367,52788,0.8160566795483822,0.9891968996008379,0.8090777567603441,0.7291856145583755,0.6682212708489148,0.9988161010260458,0.904985777478236,0.9874911469062333,0.9918473385541731,0.7916052581091266,0.8772909956369972,19,52770,43066 +onnx:rotation30_pad15_3,coverage_70,species,0.9332101345062256,52788,0.6999886337804047,0.8993042897125594,0.8457863797403911,0.580673410297893,0.5804525856869176,0.8519661172904658,0.9506293360700655,0.9778664722783771,0.9755371093676788,0.7220718478185935,0.8088370437219299,270,42705,31014 +onnx:rotation30_pad15_3,coverage_70,genus,0.9805076718330384,52788,0.6999886337804047,0.9765118678772962,0.9212369149917536,0.6322483811758616,0.6760309577391611,0.9276609564017212,0.9530907894039403,0.9868259053778615,0.9870146798561634,0.7130376570404691,0.810235529476725,210,46789,33976 +onnx:rotation30_pad15_3,coverage_70,family,0.9972158670425416,52788,0.6999886337804047,0.9940916257004148,0.9104815309041331,0.6457444404845172,0.6942029367124118,0.9994858055262374,0.904985777478236,0.9931587244952169,0.9921871969315368,0.6946461040683022,0.8116705307619455,19,52770,36945 +onnx:rotation30_pad15_3,coverage_80,species,0.7865936160087585,52788,0.7999924225202698,0.8690130364323082,0.724230514194755,0.6526380166096016,0.5635018832857759,0.8319441155576605,0.9506293360700655,0.9638203303886238,0.9635345560148336,0.7944708639020808,0.8571265688892376,282,43436,35170 +onnx:rotation30_pad15_3,coverage_80,genus,0.8993590474128723,52788,0.7999924225202698,0.9690858326600882,0.8392258546323281,0.7280490051317001,0.693231705845092,0.9128344778593417,0.9530907894039403,0.9787994209137294,0.9793948511514551,0.7879687686243412,0.8606111788082011,220,47497,38463 +onnx:rotation30_pad15_3,coverage_80,family,0.98397696018219,52788,0.7999924225202698,0.9893179755256315,0.8092930222080731,0.7157724451265104,0.6613159259846374,0.9990054463651432,0.904985777478236,0.9876313400823101,0.9921532420851567,0.775368263533711,0.8671146979422726,19,52770,42219 +onnx:rotation30_pad15_3,coverage_90,species,0.4986054003238678,52788,0.8999962112601348,0.824975364170027,0.5675215824090611,0.7147823674053605,0.4885422007895161,0.8008377360079143,0.9506293360700655,0.9328288030848192,0.9394816322721306,0.8424987667797293,0.8753591320112727,295,44256,38821 +onnx:rotation30_pad15_3,coverage_90,genus,0.5710593461990356,52788,0.8999962112601348,0.9323193587651343,0.6453036088704217,0.8029731865161972,0.5914080450287946,0.8852217474583763,0.9530907894039403,0.9539171260637532,0.9492454452386484,0.8503788888394346,0.8857468904117138,231,48032,42566 +onnx:rotation30_pad15_3,coverage_90,family,0.8259501457214355,52788,0.8999962112601348,0.9662856355824953,0.6620438236169384,0.8162293842273993,0.6182197789183784,0.9956218821696942,0.904985777478236,0.9806991569902577,0.9658983696004576,0.8625610764534104,0.9082482703112855,19,52770,47456 +onnx:rotation30_pad25_3,zero,species,0.0,52788,1.0,0.7493378530417095,0.335607011455683,0.7493378530417095,0.31973098589694526,0.7507577479730242,0.9512268480417431,0.8698036966650652,0.883195544629941,0.8698036966650652,0.8612589983083873,308,44643,41703 +onnx:rotation30_pad25_3,zero,genus,0.0,52788,1.0,0.8472504239634208,0.38755157575495597,0.8472504239634208,0.38771743876773856,0.8323861483670532,0.9536588165415049,0.8812178342202511,0.864319570078447,0.8812178342202511,0.8548890385082205,242,52567,45971 +onnx:rotation30_pad25_3,zero,family,0.0,52788,1.0,0.8636665098420966,0.34712795694828363,0.8636665098420966,0.35905067781483396,0.9622830946427219,0.9062460655947492,0.8932164863184111,0.8275326880655373,0.8932164863184111,0.850198428985235,20,52783,52403 +onnx:rotation30_pad25_3,optimized,species,0.7529366910457611,52788,0.8132530120481928,0.8635268756201978,0.7198655161183526,0.6615516920144863,0.5675578092246022,0.8296529233636152,0.9512268480417431,0.963573617550616,0.9613612115206147,0.8049544911995276,0.8626739450453852,272,42778,35245 +onnx:rotation30_pad25_3,optimized,genus,0.7956856787204742,52788,0.843070394786694,0.9578599395148406,0.7876914346408369,0.7626601078847843,0.6759673575495095,0.9032895919467913,0.9536588165415049,0.975627801896181,0.9744124082410346,0.8284542660506211,0.8857427309465413,215,46868,39824 +onnx:rotation30_pad25_3,optimized,family,0.9765951335430146,52788,0.8212661968629233,0.9892268920132548,0.8402600553286454,0.7551948103314396,0.7076764729156302,0.9988236108227805,0.9062460655947492,0.987525874962716,0.9919348125549885,0.796774284571257,0.8806455141432638,19,52770,43342 +onnx:rotation30_pad25_3,coverage_70,species,0.9330078959465028,52788,0.6999886337804047,0.8958818981982676,0.8488301817076527,0.5755733928870285,0.5777980098982209,0.8522096830938269,0.9512268480417431,0.9772824895065618,0.9759576331858164,0.7244536661424917,0.8101974819931572,270,42705,31139 +onnx:rotation30_pad25_3,coverage_70,genus,0.9808727502822876,52788,0.6999886337804047,0.9766731633485423,0.9349450037960787,0.6367466549994095,0.6871119307217507,0.9280668994073232,0.9536588165415049,0.9872066649564367,0.9869220706436679,0.7145479286699414,0.8109908949574413,210,46789,34056 +onnx:rotation30_pad25_3,coverage_70,family,0.9974356293678284,52788,0.6999886337804047,0.9934599851689291,0.9498876210445948,0.6455188522788526,0.7242275050366153,0.9994858055262374,0.9062460655947492,0.9924273512482334,0.9919692254750357,0.690324440612862,0.8073575502216895,19,52770,36945 +onnx:rotation30_pad25_3,coverage_80,species,0.7826480269432068,52788,0.7999924225202698,0.8686288052834912,0.738927432680573,0.6516737035411767,0.5714027645948971,0.8331991475254559,0.9512268480417431,0.9653183066765808,0.9636871772572874,0.7956245433056017,0.8575482217269305,282,43436,35240 +onnx:rotation30_pad25_3,coverage_80,genus,0.900927484035492,52788,0.7999924225202698,0.9685256384356089,0.8470595060946164,0.7294362252336144,0.6978836889168124,0.9127397584655458,0.9536588165415049,0.9789418689306925,0.9794493441862221,0.7902786563673672,0.8619247098397643,220,47497,38507 +onnx:rotation30_pad25_3,coverage_80,family,0.9850951433181764,52788,0.7999924225202698,0.9893592346950689,0.9107134038486736,0.7408230332730312,0.7561339190719285,0.9991238456073881,0.9062460655947492,0.9876791138574482,0.9924800890720088,0.7793768702373942,0.8699130514104324,19,52770,42222 +onnx:rotation30_pad25_3,coverage_90,species,0.506381094455719,52788,0.8999962112601348,0.8258580566003837,0.5753514931278402,0.7130878850154326,0.4926253112229873,0.8011745143025532,0.9512268480417431,0.9350108762911535,0.9390448569451352,0.843502482502277,0.8756459313060244,295,44256,38828 +onnx:rotation30_pad25_3,coverage_90,genus,0.5820246338844299,52788,0.8999962112601348,0.9274427710014347,0.6679624600829293,0.8023516736810761,0.6083311670068455,0.8853480393188659,0.9536588165415049,0.9578232936969145,0.950365265908976,0.8534410434015306,0.8880107864781295,231,48032,42585 +onnx:rotation30_pad25_3,coverage_90,family,0.8370890021324158,52788,0.8999962112601348,0.9632609424279068,0.655704275245192,0.8188781084613986,0.6054171988779777,0.9960639036814077,0.9062460655947492,0.9771968807059972,0.9809600570048073,0.8657674268419359,0.9170111582851428,19,52770,47470 +onnx:wide_rotation_mixed_padding_5,zero,species,0.0,52788,1.0,0.755234026103822,0.33687151585862535,0.755234026103822,0.32185110296574626,0.7538455709630977,0.9525711652800813,0.8715557123596651,0.8834840123715941,0.8715557123596651,0.8627053901084056,308,44643,41811 +onnx:wide_rotation_mixed_padding_5,zero,genus,0.0,52788,1.0,0.8526484792215151,0.3940384661527601,0.8526484792215151,0.3957398655739386,0.835985451238918,0.9551413947992818,0.8853011970016827,0.8667635483517392,0.8853011970016827,0.8585426621711364,242,52567,46078 +onnx:wide_rotation_mixed_padding_5,zero,family,0.0,52788,1.0,0.8682812241104954,0.3481035571052136,0.8682812241104954,0.3601292312019684,0.9631923922103508,0.9087502982629312,0.8985234077270696,0.8300692484735555,0.8985234077270696,0.8530026677917844,20,52783,52397 +onnx:wide_rotation_mixed_padding_5,optimized,species,0.7873642444610596,52788,0.8043115859665075,0.8695089438155129,0.7394833663961508,0.6572822588494145,0.5750160386991705,0.8327523670450798,0.9525711652800813,0.9639295303005937,0.9614004632913131,0.7979042954631081,0.8581004496525564,272,42778,34889 +onnx:wide_rotation_mixed_padding_5,optimized,genus,0.8101237118244171,52788,0.8447563840266727,0.9606679222736707,0.7910805789285074,0.7604214628645327,0.6826130391618014,0.9048729621241002,0.9551413947992818,0.9750633809126213,0.9738767467913795,0.82798046241586,0.8853555685268851,215,46868,39838 +onnx:wide_rotation_mixed_padding_5,optimized,family,0.9925266802310944,52788,0.7681859513525802,0.9945735885843039,0.8742836172330374,0.6939901432993258,0.6993534817995831,0.9993341717836798,0.9087502982629312,0.9937167867818257,0.9924784437276808,0.749000213953435,0.849553887374868,19,52770,40543 +onnx:wide_rotation_mixed_padding_5,coverage_70,species,0.9377490878105164,52788,0.6999886337804047,0.8981484684758387,0.848225714611513,0.5783582894392819,0.5797842021095846,0.8515331114178236,0.9525711652800813,0.9779636889139668,0.9763167556362732,0.7251751735918991,0.8111347887875858,270,42705,31004 +onnx:wide_rotation_mixed_padding_5,coverage_70,genus,0.9829234480857848,52788,0.6999886337804047,0.9772528484978749,0.933284851520251,0.6360370412463672,0.686210878766654,0.9270385104597981,0.9551413947992818,0.9877665840630739,0.9879987085886791,0.7139705404842976,0.8109186480358266,210,46789,33953 +onnx:wide_rotation_mixed_padding_5,coverage_70,family,0.9976534247398376,52788,0.6999886337804047,0.9941884144043752,0.9104544641431674,0.6490372022402425,0.6982079283911002,0.9995128683932776,0.9087502982629312,0.9932707956261188,0.9921530073387378,0.6945834958292815,0.8112385022689916,19,52770,36944 +onnx:wide_rotation_mixed_padding_5,coverage_80,species,0.7969450950622559,52788,0.7999924225202698,0.870493077157555,0.747828534071083,0.6542467064292844,0.5770189946103015,0.8337911437366801,0.9525711652800813,0.9642930734756164,0.9620844555272111,0.7942358812122685,0.8560547783361164,282,43436,35209 +onnx:wide_rotation_mixed_padding_5,coverage_80,genus,0.9094918370246888,52788,0.7999924225202698,0.9702347124009509,0.8626430540125154,0.7311824992272253,0.7116937076075048,0.9137106322519536,0.9551413947992818,0.9798368925772063,0.9813682696210738,0.7881903730029471,0.8614467778949001,220,47497,38452 +onnx:wide_rotation_mixed_padding_5,coverage_80,family,0.9860803484916688,52788,0.7999924225202698,0.9895768602990621,0.8401327366486231,0.7354484625565733,0.6970330018229233,0.9990764859104901,0.9087502982629312,0.987931101398914,0.9917605869928529,0.7728708109490503,0.8655205815378383,19,52770,42219 +onnx:wide_rotation_mixed_padding_5,coverage_90,species,0.5132138729095459,52788,0.8999962112601348,0.8306881085608662,0.5780671544235811,0.7158430899566303,0.4965186149296989,0.8030267949230672,0.9525711652800813,0.93498406973104,0.9380106126608642,0.8440867567559296,0.8762121177514529,295,44256,38934 +onnx:wide_rotation_mixed_padding_5,coverage_90,genus,0.5910288095474243,52788,0.8999962112601348,0.9372401160760394,0.6644000128149382,0.8029277732982208,0.6066165586959505,0.8878528278852428,0.9551413947992818,0.9565060217269441,0.9534398462019361,0.852457911734192,0.8893584622879612,231,48032,42641 +onnx:wide_rotation_mixed_padding_5,coverage_90,family,0.8467361330986023,52788,0.8999962112601348,0.9685237018777774,0.6394279268346845,0.8178313547101703,0.5946051952129192,0.9962533414721422,0.9087502982629312,0.9785913540539676,0.9790063992391888,0.8645003038799225,0.9157762747265321,19,52770,47467 diff --git a/docs/assets/mambo-composed-tta.json b/docs/assets/mambo-composed-tta.json new file mode 100644 index 0000000..8af97ca --- /dev/null +++ b/docs/assets/mambo-composed-tta.json @@ -0,0 +1,34064 @@ +{ + "revision": "70cc69adc05362863439277048e06386c1f885e1", + "calibration": "MacroF1 eps=0.01 use_quantiles=True n_bootstraps=0; shared stratified seed42 90/10 report/calibration split", + "matched_coverage": "Label-free quantiles of reporting confidences; realized coverage computed by mini_metrics, ties retained. Diagnostic only, not deployable calibration.", + "support": "Full per-model class domain; >5 common truth and accepted-prediction support across all compared models separately per operating point", + "models": { + "v2": { + "source": "local-evidence/mambo-release-comparison-quality/v2-full/north_europe/mini_metric.csv", + "source_sha256": "1381e2b24fa5a36574b4e1a0d9dfcfa41a5daabce6516e7451757f6ed96a5414", + "identities": { + "full": "0f6e02db8e7eaaabc9617dcb0af5e0a7def4886578e46b4f919316b4ca6e7165", + "report": "80144bd4f34d9705bcae1dad496ccf13a7160b5709139b34710e5d75a3252fed", + "calibration": "07e2e6f88b36f3e9f348adaf4526ed62e8725eba4116780a0410bf5d18f5d3fd" + }, + "report_images": 52788, + "calibration_images": 5852, + "thresholds": [ + 0.7484260499477386, + 0.8759860098361969, + 0.9553309082984924 + ], + "operating_points": { + "zero": { + "thresholds": [ + 0.0, + 0.0, + 0.0 + ], + "full": { + "accuracy": { + "0": 0.6856229575537315, + "1": 0.7893807671430488, + "2": 0.8435038466784595 + }, + "precision": { + "0": 0.2795792585422393, + "1": 0.3234152967366764, + "2": 0.2610923881260793 + }, + "recall": { + "0": 0.6856229575537315, + "1": 0.7893807671430488, + "2": 0.8435038466784595 + }, + "f1": { + "0": 0.2619881841444525, + "1": 0.32128858585759745, + "2": 0.26968398140672784 + }, + "micro_accuracy": { + "0": 0.6871258619383193, + "1": 0.792225505796772, + "2": 0.9454610896415853 + }, + "theilU": { + "0": 0.9268446802176634, + "1": 0.9293295014713818, + "2": 0.8669636504107465 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 308, + "truth_images": 44643, + "accepted_predictions": 39243, + "metrics": { + "accuracy": 0.7950271126103922, + "precision": 0.8372379328631292, + "recall": 0.7950271126103922, + "f1": 0.7878300075502476 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 242, + "truth_images": 52567, + "accepted_predictions": 44953, + "metrics": { + "accuracy": 0.8206876060779148, + "precision": 0.8201078560326222, + "recall": 0.8206876060779148, + "f1": 0.7941995832133607 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images": 52783, + "accepted_predictions": 52241, + "metrics": { + "accuracy": 0.8700294236802284, + "precision": 0.8073706420034539, + "recall": 0.8700294236802284, + "f1": 0.8237730542270192 + } + } + } + }, + "optimized": { + "thresholds": [ + 0.7484260499477386, + 0.8759860098361969, + 0.9553309082984924 + ], + "full": { + "accuracy": { + "0": 0.8465208024160925, + "1": 0.9533632911945014, + "2": 0.9963653352691595 + }, + "precision": { + "0": 0.6381169943670084, + "1": 0.784792371905105, + "2": 0.841348645086206 + }, + "recall": { + "0": 0.5418132969389368, + "1": 0.6176629588211429, + "2": 0.6466603488658192 + }, + "f1": { + "0": 0.4466755276813756, + "1": 0.5868633065886133, + "2": 0.6545226053114057 + }, + "micro_accuracy": { + "0": 0.8340124966041836, + "1": 0.9258405014517136, + "2": 0.9986057092536875 + }, + "theilU": { + "0": 0.9268446802176634, + "1": 0.9293295014713818, + "2": 0.8669636504107465 + }, + "coverage": { + "0": 0.6973175721754944, + "1": 0.6981321512464954, + "2": 0.7744373721300295 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 272, + "truth_images": 42778, + "accepted_predictions": 31024, + "metrics": { + "accuracy": 0.9521428623131191, + "precision": 0.950834091298276, + "recall": 0.6967497218946193, + "f1": 0.7799317319854288 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 215, + "truth_images": 46868, + "accepted_predictions": 34160, + "metrics": { + "accuracy": 0.9754975181801082, + "precision": 0.96822735165948, + "recall": 0.6927141276824689, + "f1": 0.7874852435844386 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 40869, + "metrics": { + "accuracy": 0.9957914408379742, + "precision": 0.9859850593239553, + "recall": 0.6876576692748175, + "f1": 0.802095261069409 + } + } + } + }, + "coverage_70": { + "thresholds": [ + 0.7434713244438171, + 0.8737562894821167, + 0.98415607213974 + ], + "full": { + "accuracy": { + "0": 0.8482344975724038, + "1": 0.9531039745578903, + "2": 0.9984960251371973 + }, + "precision": { + "0": 0.6389619346119313, + "1": 0.7845297024249248, + "2": 0.9374379812137319 + }, + "recall": { + "0": 0.5468981617462098, + "1": 0.6206686411587036, + "2": 0.5742612899561486 + }, + "f1": { + "0": 0.44937087163076467, + "1": 0.5893305682633164, + "2": 0.6694678519956686 + }, + "micro_accuracy": { + "0": 0.8329409217612513, + "1": 0.9254418013044302, + "2": 0.9992963654569565 + }, + "theilU": { + "0": 0.9268446802176634, + "1": 0.9293295014713818, + "2": 0.8669636504107465 + }, + "coverage": { + "0": 0.6999886337804047, + "1": 0.6999886337804047, + "2": 0.6999886337804047 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 270, + "truth_images": 42705, + "accepted_predictions": 31043, + "metrics": { + "accuracy": 0.9525904825539635, + "precision": 0.9530383920489972, + "recall": 0.701565632554905, + "f1": 0.7839107916744207 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789246", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 210, + "truth_images": 46789, + "accepted_predictions": 34167, + "metrics": { + "accuracy": 0.9746620588690518, + "precision": 0.9765518838609734, + "recall": 0.7007712382965899, + "f1": 0.7966054093358439 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 36944, + "metrics": { + "accuracy": 0.9982585554220179, + "precision": 0.9900565035745176, + "recall": 0.6040652862222203, + "f1": 0.7393484528820418 + } + } + } + }, + "coverage_80": { + "thresholds": [ + 0.5681188702583313, + 0.6667134761810303, + 0.9347575902938844 + ], + "full": { + "accuracy": { + "0": 0.8048570287937525, + "1": 0.9313529816901988, + "2": 0.9927903326406756 + }, + "precision": { + "0": 0.5306305982463984, + "1": 0.6375035137033628, + "2": 0.7487148238957816 + }, + "recall": { + "0": 0.6058964372202109, + "1": 0.6996475066439409, + "2": 0.670547749394969 + }, + "f1": { + "0": 0.4161430255270702, + "1": 0.5320636902859176, + "2": 0.6204806481364462 + }, + "micro_accuracy": { + "0": 0.7869287236561686, + "1": 0.8951693109164102, + "2": 0.9979161733364906 + }, + "theilU": { + "0": 0.9268446802176634, + "1": 0.9293295014713818, + "2": 0.8669636504107465 + }, + "coverage": { + "0": 0.7999924225202698, + "1": 0.7999924225202698, + "2": 0.7999924225202698 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 282, + "truth_images": 43436, + "accepted_predictions": 34074, + "metrics": { + "accuracy": 0.9218031816400422, + "precision": 0.9314233316840236, + "recall": 0.7492859566639438, + "f1": 0.808804322038378 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 220, + "truth_images": 47497, + "accepted_predictions": 38066, + "metrics": { + "accuracy": 0.9495748403153426, + "precision": 0.9434952597958767, + "recall": 0.7611632950298957, + "f1": 0.8249046274137032 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 42212, + "metrics": { + "accuracy": 0.991651964110256, + "precision": 0.982316582583257, + "recall": 0.7165739962311568, + "f1": 0.820825282633827 + } + } + } + }, + "coverage_90": { + "thresholds": [ + 0.3602153062820434, + 0.4175159633159637, + 0.6952391862869263 + ], + "full": { + "accuracy": { + "0": 0.7565649535631609, + "1": 0.8750784339645986, + "2": 0.9701041183589592 + }, + "precision": { + "0": 0.42349111509646353, + "1": 0.4898323702122493, + "2": 0.5096266926670753 + }, + "recall": { + "0": 0.6607818075996174, + "1": 0.7565919852211191, + "2": 0.7859717639076295 + }, + "f1": { + "0": 0.365080834230572, + "1": 0.44838372230079665, + "2": 0.47323785280021996 + }, + "micro_accuracy": { + "0": 0.7413121724304869, + "1": 0.851628112568145, + "2": 0.9889073649203309 + }, + "theilU": { + "0": 0.9268446802176634, + "1": 0.9293295014713818, + "2": 0.8669636504107465 + }, + "coverage": { + "0": 0.8999962112601348, + "1": 0.8999962112601348, + "2": 0.8999962112601348 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 295, + "truth_images": 44256, + "accepted_predictions": 36932, + "metrics": { + "accuracy": 0.8722225832302668, + "precision": 0.894765673851891, + "recall": 0.7823544809151759, + "f1": 0.8117772424631506 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 231, + "truth_images": 48032, + "accepted_predictions": 41304, + "metrics": { + "accuracy": 0.9040361245609442, + "precision": 0.9005023638621836, + "recall": 0.8030735550598104, + "f1": 0.828518735633285 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 47443, + "metrics": { + "accuracy": 0.9653837159945841, + "precision": 0.9451986498604876, + "recall": 0.8218848478072115, + "f1": 0.8736386001087222 + } + } + } + } + } + }, + "torch": { + "source": "local-evidence/mambo-accelerated-quality/torch-cuda-0-prediction/north_europe/mini_metric.csv", + "source_sha256": "b6793f4f24ba092912a5d468a86f2f3402d1281a6e63190e623d1cadc13fc027", + "identities": { + "full": "0f6e02db8e7eaaabc9617dcb0af5e0a7def4886578e46b4f919316b4ca6e7165", + "report": "80144bd4f34d9705bcae1dad496ccf13a7160b5709139b34710e5d75a3252fed", + "calibration": "07e2e6f88b36f3e9f348adaf4526ed62e8725eba4116780a0410bf5d18f5d3fd" + }, + "report_images": 52788, + "calibration_images": 5852, + "thresholds": [ + 0.8099595010280609, + 0.82109534740448, + 0.970800906419754 + ], + "operating_points": { + "zero": { + "thresholds": [ + 0.0, + 0.0, + 0.0 + ], + "full": { + "accuracy": { + "0": 0.7135646156794592, + "1": 0.8053026558890463, + "2": 0.8104767092433202 + }, + "precision": { + "0": 0.2688723997356787, + "1": 0.3221313136590869, + "2": 0.2753352445359579 + }, + "recall": { + "0": 0.7135646156794592, + "1": 0.8053026558890463, + "2": 0.8104767092433202 + }, + "f1": { + "0": 0.2592869317361531, + "1": 0.32303518958457, + "2": 0.2804941988278224 + }, + "micro_accuracy": { + "0": 0.7077555505039024, + "1": 0.7939683261347276, + "2": 0.9298325376979617 + }, + "theilU": { + "0": 0.9292211983468999, + "1": 0.9278616328176507, + "2": 0.8486962980431905 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 308, + "truth_images": 44643, + "accepted_predictions": 39953, + "metrics": { + "accuracy": 0.8203118253354881, + "precision": 0.8392678347823381, + "recall": 0.8203118253354881, + "f1": 0.8100326163861944 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 242, + "truth_images": 52567, + "accepted_predictions": 44773, + "metrics": { + "accuracy": 0.8383310164872881, + "precision": 0.8166147950822779, + "recall": 0.8383310164872881, + "f1": 0.805657178112806 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images": 52783, + "accepted_predictions": 51891, + "metrics": { + "accuracy": 0.8570482156298184, + "precision": 0.7593390669412071, + "recall": 0.8570482156298184, + "f1": 0.7831492631501339 + } + } + } + }, + "optimized": { + "thresholds": [ + 0.8099595010280609, + 0.82109534740448, + 0.970800906419754 + ], + "full": { + "accuracy": { + "0": 0.8669405316273155, + "1": 0.9547996220084877, + "2": 0.9932547854813464 + }, + "precision": { + "0": 0.7028135267405738, + "1": 0.745381822803767, + "2": 0.74059226732527 + }, + "recall": { + "0": 0.5774611074285403, + "1": 0.678410498949023, + "2": 0.6535073068400129 + }, + "f1": { + "0": 0.5081384528044555, + "1": 0.6019267109931725, + "2": 0.5807455159791292 + }, + "micro_accuracy": { + "0": 0.8338193199753886, + "1": 0.9077246242716747, + "2": 0.997951563553389 + }, + "theilU": { + "0": 0.9292211983468999, + "1": 0.9278616328176507, + "2": 0.8486962980431905 + }, + "coverage": { + "0": 0.7081344244904145, + "1": 0.7575395923315905, + "2": 0.7305827081912556 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 272, + "truth_images": 42778, + "accepted_predictions": 30977, + "metrics": { + "accuracy": 0.963494109771882, + "precision": 0.9626322859838098, + "recall": 0.7171390330256306, + "f1": 0.8016422382706134 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 215, + "truth_images": 46868, + "accepted_predictions": 35966, + "metrics": { + "accuracy": 0.9730526458225819, + "precision": 0.9696226974149172, + "recall": 0.7475533077376153, + "f1": 0.8310650157210921 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 38530, + "metrics": { + "accuracy": 0.99218975160998, + "precision": 0.9900267939876928, + "recall": 0.7040432580775865, + "f1": 0.816089411195116 + } + } + } + }, + "coverage_70": { + "thresholds": [ + 0.8241381645202637, + 0.9218662977218628, + 0.9825798273086548 + ], + "full": { + "accuracy": { + "0": 0.86958680967719, + "1": 0.9660439693907655, + "2": 0.9952393276120065 + }, + "precision": { + "0": 0.7167252898445411, + "1": 0.8305261428723821, + "2": 0.7964173234185559 + }, + "recall": { + "0": 0.5705474537929165, + "1": 0.6273798603264148, + "2": 0.6300210433137761 + }, + "f1": { + "0": 0.5122730291185364, + "1": 0.6221364731441472, + "2": 0.6078073153329585 + }, + "micro_accuracy": { + "0": 0.8354577683959838, + "1": 0.9193255933533598, + "2": 0.9984844794457525 + }, + "theilU": { + "0": 0.9292211983468999, + "1": 0.9278616328176507, + "2": 0.8486962980431905 + }, + "coverage": { + "0": 0.6999886337804047, + "1": 0.6999886337804047, + "2": 0.6999886337804047 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 270, + "truth_images": 42705, + "accepted_predictions": 30647, + "metrics": { + "accuracy": 0.9672316998030942, + "precision": 0.9647766155724887, + "recall": 0.7128409633763704, + "f1": 0.7993028119491851 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789246", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 210, + "truth_images": 46789, + "accepted_predictions": 33607, + "metrics": { + "accuracy": 0.9824288448238584, + "precision": 0.9833895891353926, + "recall": 0.7075405452013525, + "f1": 0.8063455181681898 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 36926, + "metrics": { + "accuracy": 0.9944876424981127, + "precision": 0.9914000560860179, + "recall": 0.6756125180195103, + "f1": 0.7948388506661144 + } + } + } + }, + "coverage_80": { + "thresholds": [ + 0.6061448454856873, + 0.7092886567115784, + 0.9039735794067384 + ], + "full": { + "accuracy": { + "0": 0.8333841588302096, + "1": 0.9392760079927347, + "2": 0.9767480012163248 + }, + "precision": { + "0": 0.5485047799955343, + "1": 0.6547210280772727, + "2": 0.6257303180264047 + }, + "recall": { + "0": 0.6370545006054973, + "1": 0.7133811913319552, + "2": 0.7059032105438684 + }, + "f1": { + "0": 0.445901326225418, + "1": 0.5584780260317714, + "2": 0.5344474480496143 + }, + "micro_accuracy": { + "0": 0.804735969689794, + "1": 0.8955008287946957, + "2": 0.9955481884915937 + }, + "theilU": { + "0": 0.9292211983468999, + "1": 0.9278616328176507, + "2": 0.8486962980431905 + }, + "coverage": { + "0": 0.7999924225202698, + "1": 0.7999924225202698, + "2": 0.7999924225202698 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 282, + "truth_images": 43436, + "accepted_predictions": 34441, + "metrics": { + "accuracy": 0.941697838071395, + "precision": 0.9410961417102457, + "recall": 0.7691340926734198, + "f1": 0.8312080391987352 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 220, + "truth_images": 47497, + "accepted_predictions": 37907, + "metrics": { + "accuracy": 0.9649697784339673, + "precision": 0.9547964398255602, + "recall": 0.7703699933851422, + "f1": 0.8399359589724344 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 42152, + "metrics": { + "accuracy": 0.9862345277241655, + "precision": 0.9749910954156714, + "recall": 0.7634212953547233, + "f1": 0.8500844942394542 + } + } + } + }, + "coverage_90": { + "thresholds": [ + 0.3223742842674255, + 0.3692984879016876, + 0.5828610062599182 + ], + "full": { + "accuracy": { + "0": 0.7822620703147596, + "1": 0.8858347939502168, + "2": 0.9151360267321503 + }, + "precision": { + "0": 0.4110337432773394, + "1": 0.4723629331651541, + "2": 0.39997022219300904 + }, + "recall": { + "0": 0.6886066265817404, + "1": 0.7735925323689193, + "2": 0.7680035104129965 + }, + "f1": { + "0": 0.3648914489871293, + "1": 0.44134032210625124, + "2": 0.37744401953419926 + }, + "micro_accuracy": { + "0": 0.7621503294112695, + "1": 0.8531015176071902, + "2": 0.9795196699572712 + }, + "theilU": { + "0": 0.9292211983468999, + "1": 0.9278616328176507, + "2": 0.8486962980431905 + }, + "coverage": { + "0": 0.8999962112601348, + "1": 0.8999962112601348, + "2": 0.8999962112601348 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 295, + "truth_images": 44256, + "accepted_predictions": 37604, + "metrics": { + "accuracy": 0.891242198240585, + "precision": 0.898524732525704, + "recall": 0.8065329569944766, + "f1": 0.8353160761309999 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 231, + "truth_images": 48032, + "accepted_predictions": 41630, + "metrics": { + "accuracy": 0.9209837212851842, + "precision": 0.9006552910895744, + "recall": 0.8167651188996207, + "f1": 0.8434500014751452 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 47224, + "metrics": { + "accuracy": 0.9543680309530158, + "precision": 0.9164661252394816, + "recall": 0.834546759568769, + "f1": 0.8677728056848387 + } + } + } + } + } + }, + "onnx": { + "source": "local-evidence/mambo-accelerated-quality/onnx-cuda-0-prediction/north_europe/mini_metric.csv", + "source_sha256": "b8624ec148e1d67d6685be4e79e35b990a7692e4109f306430ddfc015e3d543f", + "identities": { + "full": "0f6e02db8e7eaaabc9617dcb0af5e0a7def4886578e46b4f919316b4ca6e7165", + "report": "80144bd4f34d9705bcae1dad496ccf13a7160b5709139b34710e5d75a3252fed", + "calibration": "07e2e6f88b36f3e9f348adaf4526ed62e8725eba4116780a0410bf5d18f5d3fd" + }, + "report_images": 52788, + "calibration_images": 5852, + "thresholds": [ + 0.8161613345146179, + 0.8301631808280945, + 0.9698503911495209 + ], + "operating_points": { + "zero": { + "thresholds": [ + 0.0, + 0.0, + 0.0 + ], + "full": { + "accuracy": { + "0": 0.7133861511997317, + "1": 0.8053599793321786, + "2": 0.8106325437578626 + }, + "precision": { + "0": 0.2689411284200973, + "1": 0.32303901654923844, + "2": 0.2756918885388057 + }, + "recall": { + "0": 0.7133861511997317, + "1": 0.8053599793321786, + "2": 0.8106325437578626 + }, + "f1": { + "0": 0.25936240461341026, + "1": 0.32445203101159487, + "2": 0.2808879232365721 + }, + "micro_accuracy": { + "0": 0.7078123816018792, + "1": 0.793949382435402, + "2": 0.9300409183905433 + }, + "theilU": { + "0": 0.9291859354966914, + "1": 0.9278774326101347, + "2": 0.8489407553438706 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 308, + "truth_images": 44643, + "accepted_predictions": 39968, + "metrics": { + "accuracy": 0.8208210511198463, + "precision": 0.8393910727128245, + "recall": 0.8208210511198463, + "f1": 0.8102958063278631 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 242, + "truth_images": 52567, + "accepted_predictions": 44776, + "metrics": { + "accuracy": 0.8384072898289766, + "precision": 0.8162946927109619, + "recall": 0.8384072898289766, + "f1": 0.8055261341500325 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images": 52783, + "accepted_predictions": 51893, + "metrics": { + "accuracy": 0.8572274253215421, + "precision": 0.7604089989497506, + "recall": 0.8572274253215421, + "f1": 0.784330436376383 + } + } + } + }, + "optimized": { + "thresholds": [ + 0.8161613345146179, + 0.8301631808280945, + 0.9698503911495209 + ], + "full": { + "accuracy": { + "0": 0.8695378035260483, + "1": 0.9551874761942367, + "2": 0.9932599551447033 + }, + "precision": { + "0": 0.7088741319668206, + "1": 0.7523387061411551, + "2": 0.7406007419898425 + }, + "recall": { + "0": 0.5752968296743217, + "1": 0.6745698413302063, + "2": 0.6548532928566179 + }, + "f1": { + "0": 0.5099648536812275, + "1": 0.6043210367725153, + "2": 0.5815679236552638 + }, + "micro_accuracy": { + "0": 0.8345029711489339, + "1": 0.908581339231852, + "2": 0.9979571783202317 + }, + "theilU": { + "0": 0.9291859354966914, + "1": 0.9278774326101347, + "2": 0.8489407553438706 + }, + "coverage": { + "0": 0.7045351216185497, + "1": 0.7536561339698417, + "2": 0.7325907403197697 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 272, + "truth_images": 42778, + "accepted_predictions": 30845, + "metrics": { + "accuracy": 0.9642506092928128, + "precision": 0.9626937682791291, + "recall": 0.7149144701582824, + "f1": 0.8001046982018766 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 215, + "truth_images": 46868, + "accepted_predictions": 35808, + "metrics": { + "accuracy": 0.9738759173936625, + "precision": 0.9708203215753252, + "recall": 0.7439396812388471, + "f1": 0.8289781701827877 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 38636, + "metrics": { + "accuracy": 0.9921957375359722, + "precision": 0.9900397290020405, + "recall": 0.7056726095713715, + "f1": 0.817387949631118 + } + } + } + }, + "coverage_70": { + "thresholds": [ + 0.8243970274925232, + 0.9216671586036682, + 0.982620656490326 + ], + "full": { + "accuracy": { + "0": 0.8696078641344749, + "1": 0.9661254181481168, + "2": 0.9952396475419057 + }, + "precision": { + "0": 0.7154987852188989, + "1": 0.8307688580940611, + "2": 0.7964181852175016 + }, + "recall": { + "0": 0.5707796582704833, + "1": 0.6277109684720645, + "2": 0.630096313240106 + }, + "f1": { + "0": 0.5116109757516245, + "1": 0.6224978354796963, + "2": 0.6078714628660602 + }, + "micro_accuracy": { + "0": 0.8354036426619036, + "1": 0.9192444047522395, + "2": 0.9984844794457525 + }, + "theilU": { + "0": 0.9291859354966914, + "1": 0.9278774326101347, + "2": 0.8489407553438706 + }, + "coverage": { + "0": 0.6999886337804047, + "1": 0.6999886337804047, + "2": 0.6999886337804047 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 270, + "truth_images": 42705, + "accepted_predictions": 30645, + "metrics": { + "accuracy": 0.9672641785336684, + "precision": 0.9648328354991503, + "recall": 0.7132879118596801, + "f1": 0.7996140862205406 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789246", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 210, + "truth_images": 46789, + "accepted_predictions": 33604, + "metrics": { + "accuracy": 0.9825450538711241, + "precision": 0.9833893298187405, + "recall": 0.7076905240002949, + "f1": 0.8064963735413154 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 36926, + "metrics": { + "accuracy": 0.9944880129432593, + "precision": 0.9914012807476776, + "recall": 0.6757036342461201, + "f1": 0.7949333838727902 + } + } + } + }, + "coverage_80": { + "thresholds": [ + 0.6067228317260742, + 0.7099964618682861, + 0.9041854739189148 + ], + "full": { + "accuracy": { + "0": 0.8328452370529146, + "1": 0.9392543348174218, + "2": 0.9767639732185658 + }, + "precision": { + "0": 0.5484999836385683, + "1": 0.654560571667988, + "2": 0.6257865447269096 + }, + "recall": { + "0": 0.6369039477216849, + "1": 0.7132182241768983, + "2": 0.7059843462574676 + }, + "f1": { + "0": 0.44584696550387404, + "1": 0.5583048362404305, + "2": 0.5345107480456108 + }, + "micro_accuracy": { + "0": 0.804759649538243, + "1": 0.8955245086431447, + "2": 0.9955718683400426 + }, + "theilU": { + "0": 0.9291859354966914, + "1": 0.9278774326101347, + "2": 0.8489407553438706 + }, + "coverage": { + "0": 0.7999924225202698, + "1": 0.7999924225202698, + "2": 0.7999924225202698 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 282, + "truth_images": 43436, + "accepted_predictions": 34446, + "metrics": { + "accuracy": 0.9418513574630873, + "precision": 0.9410921687024294, + "recall": 0.7693785658461272, + "f1": 0.8313117853878524 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 220, + "truth_images": 47497, + "accepted_predictions": 37907, + "metrics": { + "accuracy": 0.9649382493245952, + "precision": 0.9544211478616387, + "recall": 0.7704551175301809, + "f1": 0.8398638030564497 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 42152, + "metrics": { + "accuracy": 0.9862530216214973, + "precision": 0.9750917116165754, + "recall": 0.7635195122711856, + "f1": 0.8501977679165007 + } + } + } + }, + "coverage_90": { + "thresholds": [ + 0.3231773376464844, + 0.3690774440765381, + 0.5826917886734009 + ], + "full": { + "accuracy": { + "0": 0.7807145222813506, + "1": 0.8861895291699214, + "2": 0.9151606889053974 + }, + "precision": { + "0": 0.4112190997898548, + "1": 0.47246294916839016, + "2": 0.3990993533111283 + }, + "recall": { + "0": 0.6889577322256099, + "1": 0.7740196989711382, + "2": 0.7680131308693198 + }, + "f1": { + "0": 0.36507446215024497, + "1": 0.4415744427244726, + "2": 0.37693960009408994 + }, + "micro_accuracy": { + "0": 0.7621082321244396, + "1": 0.8532699067545096, + "2": 0.979603864530931 + }, + "theilU": { + "0": 0.9291859354966914, + "1": 0.9278774326101347, + "2": 0.8489407553438706 + }, + "coverage": { + "0": 0.8999962112601348, + "1": 0.8999962112601348, + "2": 0.8999962112601348 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 295, + "truth_images": 44256, + "accepted_predictions": 37602, + "metrics": { + "accuracy": 0.8914832210371341, + "precision": 0.8988812031034508, + "recall": 0.807154235455831, + "f1": 0.835765327942146 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 231, + "truth_images": 48032, + "accepted_predictions": 41634, + "metrics": { + "accuracy": 0.9214659032255056, + "precision": 0.9007912188383919, + "recall": 0.8173605632542287, + "f1": 0.8438589052760838 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 47228, + "metrics": { + "accuracy": 0.9543965871536181, + "precision": 0.914266035432625, + "recall": 0.8345584053843181, + "f1": 0.8664984828887731 + } + } + } + } + } + }, + "torch-tta": { + "source": "local-evidence/mambo-default-tta-quality/torch-cuda-0-prediction/north_europe/mini_metric.csv", + "source_sha256": "98cb30415e962f816c9cd978c5463d7c674fca47f95491f93e829a06d8dce2fa", + "identities": { + "full": "0f6e02db8e7eaaabc9617dcb0af5e0a7def4886578e46b4f919316b4ca6e7165", + "report": "80144bd4f34d9705bcae1dad496ccf13a7160b5709139b34710e5d75a3252fed", + "calibration": "07e2e6f88b36f3e9f348adaf4526ed62e8725eba4116780a0410bf5d18f5d3fd" + }, + "report_images": 52788, + "calibration_images": 5852, + "thresholds": [ + 0.7392672300338745, + 0.869922012090683, + 0.964760661125183 + ], + "operating_points": { + "zero": { + "thresholds": [ + 0.0, + 0.0, + 0.0 + ], + "full": { + "accuracy": { + "0": 0.7405864004487995, + "1": 0.8312879946116835, + "2": 0.8579010503993526 + }, + "precision": { + "0": 0.3117281910150932, + "1": 0.3578921081808225, + "2": 0.2856847483669441 + }, + "recall": { + "0": 0.7405864004487995, + "1": 0.8312879946116835, + "2": 0.8579010503993526 + }, + "f1": { + "0": 0.30013980437546733, + "1": 0.3600905137263133, + "2": 0.2970441402135782 + }, + "micro_accuracy": { + "0": 0.7321360915359552, + "1": 0.8163029476396151, + "2": 0.9478669394559369 + }, + "theilU": { + "0": 0.9416287278244636, + "1": 0.9429697597956094, + "2": 0.8802152497213216 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 308, + "truth_images": 44643, + "accepted_predictions": 40958, + "metrics": { + "accuracy": 0.8480295198511346, + "precision": 0.8592040363096476, + "recall": 0.8480295198511346, + "f1": 0.8369055759103206 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 242, + "truth_images": 52567, + "accepted_predictions": 45474, + "metrics": { + "accuracy": 0.8642419820735022, + "precision": 0.8426871013681415, + "recall": 0.8642419820735022, + "f1": 0.8341657275204103 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images": 52783, + "accepted_predictions": 52160, + "metrics": { + "accuracy": 0.8865862079592552, + "precision": 0.7945542451008321, + "recall": 0.8865862079592552, + "f1": 0.8211324206407348 + } + } + } + }, + "optimized": { + "thresholds": [ + 0.7392672300338745, + 0.869922012090683, + 0.964760661125183 + ], + "full": { + "accuracy": { + "0": 0.8659206758370823, + "1": 0.9627590640417357, + "2": 0.9955823574240963 + }, + "precision": { + "0": 0.6694908268387498, + "1": 0.8166841617561862, + "2": 0.7393905133847496 + }, + "recall": { + "0": 0.639254202340642, + "1": 0.7031449724257084, + "2": 0.700159197162577 + }, + "f1": { + "0": 0.5238581475082266, + "1": 0.6655108425187299, + "2": 0.6072565582310141 + }, + "micro_accuracy": { + "0": 0.8257020535519919, + "1": 0.9116055761356989, + "2": 0.998243799167609 + }, + "theilU": { + "0": 0.9416287278244636, + "1": 0.9429697597956094, + "2": 0.8802152497213216 + }, + "coverage": { + "0": 0.7831893612184587, + "1": 0.7772978707281958, + "2": 0.7874327498673941 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 272, + "truth_images": 42778, + "accepted_predictions": 33853, + "metrics": { + "accuracy": 0.9585814667783285, + "precision": 0.9585731812083509, + "recall": 0.7743974002343408, + "f1": 0.8413487263251 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 215, + "truth_images": 46868, + "accepted_predictions": 36949, + "metrics": { + "accuracy": 0.9771086466542604, + "precision": 0.9775547270341164, + "recall": 0.767268013502815, + "f1": 0.8477428518527236 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 41536, + "metrics": { + "accuracy": 0.9948848349121117, + "precision": 0.9917013099030386, + "recall": 0.7564680159984232, + "f1": 0.8535629866805485 + } + } + } + }, + "coverage_70": { + "thresholds": [ + 0.8902084827423096, + 0.9606042504310608, + 0.9924046397209167 + ], + "full": { + "accuracy": { + "0": 0.8906144707778789, + "1": 0.9753286103689284, + "2": 0.9955883069989272 + }, + "precision": { + "0": 0.7981732822929044, + "1": 0.8964480054302681, + "2": 0.8894957303016392 + }, + "recall": { + "0": 0.5796377324768266, + "1": 0.6333947441461268, + "2": 0.6322405391393889 + }, + "f1": { + "0": 0.5609290214340181, + "1": 0.6669758159190942, + "2": 0.68215984063641 + }, + "micro_accuracy": { + "0": 0.8444697031203485, + "1": 0.9231414576060187, + "2": 0.9989174853183946 + }, + "theilU": { + "0": 0.9416287278244636, + "1": 0.9429697597956094, + "2": 0.8802152497213216 + }, + "coverage": { + "0": 0.6999886337804047, + "1": 0.6999886337804047, + "2": 0.6999886337804047 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 270, + "truth_images": 42705, + "accepted_predictions": 30831, + "metrics": { + "accuracy": 0.9733088758873599, + "precision": 0.9705609441193396, + "recall": 0.7175113900443769, + "f1": 0.8041322816170898 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789246", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 210, + "truth_images": 46789, + "accepted_predictions": 33743, + "metrics": { + "accuracy": 0.9855571610067058, + "precision": 0.9869624081036315, + "recall": 0.7108155553452893, + "f1": 0.8092113545878005 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 36933, + "metrics": { + "accuracy": 0.9948917238934942, + "precision": 0.9919946066968074, + "recall": 0.6782992761241996, + "f1": 0.7974755385050802 + } + } + } + }, + "coverage_80": { + "thresholds": [ + 0.6967090368270874, + 0.818070650100708, + 0.9556875824928284 + ], + "full": { + "accuracy": { + "0": 0.8608792923180646, + "1": 0.9575457407732273, + "2": 0.980043657507525 + }, + "precision": { + "0": 0.6433940716376311, + "1": 0.7633603696735349, + "2": 0.7392855318346994 + }, + "recall": { + "0": 0.649735408471136, + "1": 0.7240369843261408, + "2": 0.7065130086457477 + }, + "f1": { + "0": 0.5139660613219256, + "1": 0.6403702471656528, + "2": 0.6105337132313392 + }, + "micro_accuracy": { + "0": 0.821193464361828, + "1": 0.907056594837793, + "2": 0.9979872128818376 + }, + "theilU": { + "0": 0.9416287278244636, + "1": 0.9429697597956094, + "2": 0.8802152497213216 + }, + "coverage": { + "0": 0.7999924225202698, + "1": 0.7999924225202698, + "2": 0.7999924225202698 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 282, + "truth_images": 43436, + "accepted_predictions": 34887, + "metrics": { + "accuracy": 0.9554226848332942, + "precision": 0.9554094003741878, + "recall": 0.7845211799685287, + "f1": 0.8473164347855004 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 220, + "truth_images": 47497, + "accepted_predictions": 38196, + "metrics": { + "accuracy": 0.974270531476802, + "precision": 0.9716244705685136, + "recall": 0.7802435176207189, + "f1": 0.8534011844503622 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 42196, + "metrics": { + "accuracy": 0.9900505507981868, + "precision": 0.9915410749055935, + "recall": 0.7641594720043668, + "f1": 0.8587374419442199 + } + } + } + }, + "coverage_90": { + "thresholds": [ + 0.4103786051273346, + 0.4679165780544281, + 0.7022547125816345 + ], + "full": { + "accuracy": { + "0": 0.8145174796850042, + "1": 0.9206265600944382, + "2": 0.9519711626779341 + }, + "precision": { + "0": 0.4925946020576832, + "1": 0.5628702690668548, + "2": 0.4890308893157449 + }, + "recall": { + "0": 0.7092768556597198, + "1": 0.7929657144502366, + "2": 0.7839285171996123 + }, + "f1": { + "0": 0.43138462249532483, + "1": 0.5213308664991891, + "2": 0.4572527582331337 + }, + "micro_accuracy": { + "0": 0.783914626702309, + "1": 0.8721294912542886, + "2": 0.9901702835252268 + }, + "theilU": { + "0": 0.9416287278244636, + "1": 0.9429697597956094, + "2": 0.8802152497213216 + }, + "coverage": { + "0": 0.8999962112601348, + "1": 0.8999962112601348, + "2": 0.8999962112601348 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 295, + "truth_images": 44256, + "accepted_predictions": 38345, + "metrics": { + "accuracy": 0.9175215805336097, + "precision": 0.9199110408254955, + "recall": 0.8271822185719119, + "f1": 0.8577180591837419 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 231, + "truth_images": 48032, + "accepted_predictions": 42116, + "metrics": { + "accuracy": 0.9452283281513972, + "precision": 0.9293840070922701, + "recall": 0.8394534910703915, + "f1": 0.8708704993487821 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 47370, + "metrics": { + "accuracy": 0.9707034515218184, + "precision": 0.9500140243129231, + "recall": 0.8497758163671418, + "f1": 0.8936445866068157 + } + } + } + } + } + }, + "onnx-tta": { + "source": "local-evidence/mambo-default-tta-quality/onnx-cuda-0-prediction/north_europe/mini_metric.csv", + "source_sha256": "bc5674dfd2130a75c94433b9efce5fc9bca07b6ac7668708d4a101a9c605e0e5", + "identities": { + "full": "0f6e02db8e7eaaabc9617dcb0af5e0a7def4886578e46b4f919316b4ca6e7165", + "report": "80144bd4f34d9705bcae1dad496ccf13a7160b5709139b34710e5d75a3252fed", + "calibration": "07e2e6f88b36f3e9f348adaf4526ed62e8725eba4116780a0410bf5d18f5d3fd" + }, + "report_images": 52788, + "calibration_images": 5852, + "thresholds": [ + 0.8280269503593445, + 0.8708856105804443, + 0.966471254825592 + ], + "operating_points": { + "zero": { + "thresholds": [ + 0.0, + 0.0, + 0.0 + ], + "full": { + "accuracy": { + "0": 0.7408884646998294, + "1": 0.831310673030869, + "2": 0.8580571051602935 + }, + "precision": { + "0": 0.3129592874854792, + "1": 0.35819829298724193, + "2": 0.2856706122641368 + }, + "recall": { + "0": 0.7408884646998294, + "1": 0.831310673030869, + "2": 0.8580571051602935 + }, + "f1": { + "0": 0.30114949302373306, + "1": 0.3604852264440997, + "2": 0.2970778194056521 + }, + "micro_accuracy": { + "0": 0.7322118663332575, + "1": 0.8163029476396151, + "2": 0.9479237705539137 + }, + "theilU": { + "0": 0.9416043541781303, + "1": 0.9429777628243508, + "2": 0.8802934722288728 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 308, + "truth_images": 44643, + "accepted_predictions": 40964, + "metrics": { + "accuracy": 0.8482708971423827, + "precision": 0.859125120067078, + "recall": 0.8482708971423827, + "f1": 0.8368704802655687 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 242, + "truth_images": 52567, + "accepted_predictions": 45478, + "metrics": { + "accuracy": 0.8642721574907657, + "precision": 0.8423837204350251, + "recall": 0.8642721574907657, + "f1": 0.8339715279038667 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images": 52783, + "accepted_predictions": 52160, + "metrics": { + "accuracy": 0.8867656709343373, + "precision": 0.7945118367924103, + "recall": 0.8867656709343373, + "f1": 0.821233458216956 + } + } + } + }, + "optimized": { + "thresholds": [ + 0.8280269503593445, + 0.8708856105804443, + 0.966471254825592 + ], + "full": { + "accuracy": { + "0": 0.8755166405852203, + "1": 0.9629823236784678, + "2": 0.9955854528269081 + }, + "precision": { + "0": 0.7362820959348587, + "1": 0.8168891977985718, + "2": 0.7395038777892725 + }, + "recall": { + "0": 0.6075669492667327, + "1": 0.703150166196618, + "2": 0.6986717712105687 + }, + "f1": { + "0": 0.5430735533140522, + "1": 0.6655370235633972, + "2": 0.6065093177805807 + }, + "micro_accuracy": { + "0": 0.8355803422957866, + "1": 0.911799848813675, + "2": 0.998285935010381 + }, + "theilU": { + "0": 0.9416043541781303, + "1": 0.9429777628243508, + "2": 0.8802934722288728 + }, + "coverage": { + "0": 0.7404902629385466, + "1": 0.7768621656437069, + "2": 0.7846859134651815 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 272, + "truth_images": 42778, + "accepted_predictions": 32341, + "metrics": { + "accuracy": 0.9650388599694326, + "precision": 0.9639006969879437, + "recall": 0.7443741514376615, + "f1": 0.8223569195026883 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 215, + "truth_images": 46868, + "accepted_predictions": 36936, + "metrics": { + "accuracy": 0.9774284415058453, + "precision": 0.9775831973986752, + "recall": 0.7672866592834245, + "f1": 0.8477266855996487 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 41392, + "metrics": { + "accuracy": 0.9948884190627355, + "precision": 0.9918743397836266, + "recall": 0.754667447740729, + "f1": 0.852383133337759 + } + } + } + }, + "coverage_70": { + "thresholds": [ + 0.8901577591896057, + 0.9606157541275024, + 0.9924092292785645 + ], + "full": { + "accuracy": { + "0": 0.8906299010400511, + "1": 0.9754350362986757, + "2": 0.9955876317644935 + }, + "precision": { + "0": 0.7966276731934266, + "1": 0.8965238930921287, + "2": 0.8894957438238706 + }, + "recall": { + "0": 0.5796284078643174, + "1": 0.6335466562733132, + "2": 0.6319719604359404 + }, + "f1": { + "0": 0.5599772016156898, + "1": 0.6671841623210293, + "2": 0.6819831887822367 + }, + "micro_accuracy": { + "0": 0.8443073259181078, + "1": 0.9231414576060187, + "2": 0.9989174853183946 + }, + "theilU": { + "0": 0.9416043541781303, + "1": 0.9429777628243508, + "2": 0.8802934722288728 + }, + "coverage": { + "0": 0.6999886337804047, + "1": 0.6999886337804047, + "2": 0.6999886337804047 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 270, + "truth_images": 42705, + "accepted_predictions": 30827, + "metrics": { + "accuracy": 0.9732493733693959, + "precision": 0.9705461373032799, + "recall": 0.7174933624601928, + "f1": 0.8041016918766225 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789246", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 210, + "truth_images": 46789, + "accepted_predictions": 33740, + "metrics": { + "accuracy": 0.9857081844689186, + "precision": 0.9870787691851511, + "recall": 0.7107978607072257, + "f1": 0.809253042786544 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 36933, + "metrics": { + "accuracy": 0.9948909420430975, + "precision": 0.9919946237775208, + "recall": 0.6779741545358146, + "f1": 0.797243101854852 + } + } + } + }, + "coverage_80": { + "thresholds": [ + 0.6970725059509277, + 0.8184317350387573, + 0.9559080004692078 + ], + "full": { + "accuracy": { + "0": 0.8605050796504391, + "1": 0.957481163977273, + "2": 0.9800427091207768 + }, + "precision": { + "0": 0.6425824308630953, + "1": 0.7612239102518993, + "2": 0.7392855395634923 + }, + "recall": { + "0": 0.6502626044247952, + "1": 0.7238724141381434, + "2": 0.7064178836065658 + }, + "f1": { + "0": 0.5141028667288083, + "1": 0.6402488255798201, + "2": 0.6104810675107896 + }, + "micro_accuracy": { + "0": 0.8211697845133791, + "1": 0.9069145157470992, + "2": 0.9979872128818376 + }, + "theilU": { + "0": 0.9416043541781303, + "1": 0.9429777628243508, + "2": 0.8802934722288728 + }, + "coverage": { + "0": 0.7999924225202698, + "1": 0.7999924225202698, + "2": 0.7999924225202698 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 282, + "truth_images": 43436, + "accepted_predictions": 34886, + "metrics": { + "accuracy": 0.95544016618753, + "precision": 0.9552347846466682, + "recall": 0.7851829659454762, + "f1": 0.8475942364745017 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 220, + "truth_images": 47497, + "accepted_predictions": 38190, + "metrics": { + "accuracy": 0.9741774842920884, + "precision": 0.9714040423387499, + "recall": 0.7799920264882948, + "f1": 0.8531731226964174 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 42196, + "metrics": { + "accuracy": 0.9900494526661626, + "precision": 0.9915410867021727, + "recall": 0.7640443206411466, + "f1": 0.8586543171222992 + } + } + } + }, + "coverage_90": { + "thresholds": [ + 0.4094218313694, + 0.4677167236804962, + 0.701670229434967 + ], + "full": { + "accuracy": { + "0": 0.8145125280066268, + "1": 0.9189803824252353, + "2": 0.9520347449957101 + }, + "precision": { + "0": 0.49342728859876867, + "1": 0.5617081860676382, + "2": 0.4890652942611772 + }, + "recall": { + "0": 0.7093314621998333, + "1": 0.7928671954824282, + "2": 0.7838848111299506 + }, + "f1": { + "0": 0.4322191163505195, + "1": 0.5202478106264234, + "2": 0.4572588673034217 + }, + "micro_accuracy": { + "0": 0.7838935780588941, + "1": 0.8720452966806289, + "2": 0.9902123808120566 + }, + "theilU": { + "0": 0.9416043541781303, + "1": 0.9429777628243508, + "2": 0.8802934722288728 + }, + "coverage": { + "0": 0.8999962112601348, + "1": 0.8999962112601348, + "2": 0.8999962112601348 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 295, + "truth_images": 44256, + "accepted_predictions": 38344, + "metrics": { + "accuracy": 0.9179067496797524, + "precision": 0.9195647545876909, + "recall": 0.8271376014440223, + "f1": 0.8573977653891341 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 231, + "truth_images": 48032, + "accepted_predictions": 42114, + "metrics": { + "accuracy": 0.945175513586682, + "precision": 0.9293802024440366, + "recall": 0.8393151839568592, + "f1": 0.870823331898205 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 47370, + "metrics": { + "accuracy": 0.9707770731529273, + "precision": 0.9500882665635927, + "recall": 0.8497229090196569, + "f1": 0.8936577693374371 + } + } + } + } + } + }, + "torch:rotation30_pad15_3": { + "source": "local-evidence/mambo-composed-full/torch/rotation30_pad15_3/mini_metric.csv", + "source_sha256": "b368dea7e789d47f3ab82f0f9b22a4f6e32392ec1ecc2a6b8452acc317c4800c", + "identities": { + "full": "0f6e02db8e7eaaabc9617dcb0af5e0a7def4886578e46b4f919316b4ca6e7165", + "report": "80144bd4f34d9705bcae1dad496ccf13a7160b5709139b34710e5d75a3252fed", + "calibration": "07e2e6f88b36f3e9f348adaf4526ed62e8725eba4116780a0410bf5d18f5d3fd" + }, + "report_images": 52788, + "calibration_images": 5852, + "thresholds": [ + 0.7703565061092377, + 0.797132283449173, + 0.9761196076869965 + ], + "operating_points": { + "zero": { + "thresholds": [ + 0.0, + 0.0, + 0.0 + ], + "full": { + "accuracy": { + "0": 0.7513310721181966, + "1": 0.8514761457282455, + "2": 0.8625346236914426 + }, + "precision": { + "0": 0.33541184570095794, + "1": 0.3869580883721579, + "2": 0.33597390634364505 + }, + "recall": { + "0": 0.7513310721181966, + "1": 0.8514761457282455, + "2": 0.8625346236914426 + }, + "f1": { + "0": 0.3207141524325515, + "1": 0.3880631831613022, + "2": 0.34855638987709453 + }, + "micro_accuracy": { + "0": 0.7501515495946048, + "1": 0.8322156550731227, + "2": 0.9608244297946503 + }, + "theilU": { + "0": 0.9506821380005821, + "1": 0.9530656934912801, + "2": 0.904888479697919 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 308, + "truth_images": 44643, + "accepted_predictions": 41699, + "metrics": { + "accuracy": 0.8681389941924458, + "precision": 0.8803148570115105, + "recall": 0.8681389941924458, + "f1": 0.8587890346597373 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 242, + "truth_images": 52567, + "accepted_predictions": 45979, + "metrics": { + "accuracy": 0.8816751995436959, + "precision": 0.862662277317664, + "recall": 0.8816751995436959, + "f1": 0.8542468147491235 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images": 52783, + "accepted_predictions": 52370, + "metrics": { + "accuracy": 0.8919148172451592, + "precision": 0.8153308518106595, + "recall": 0.8919148172451592, + "f1": 0.8403410998409673 + } + } + } + }, + "optimized": { + "thresholds": [ + 0.7703565061092377, + 0.797132283449173, + 0.9761196076869965 + ], + "full": { + "accuracy": { + "0": 0.8643190221276298, + "1": 0.9624906870799902, + "2": 0.989187457175979 + }, + "precision": { + "0": 0.7142382786297836, + "1": 0.7650612786044926, + "2": 0.8090769758102975 + }, + "recall": { + "0": 0.6585389181056288, + "1": 0.7634804910051127, + "2": 0.7304671232556951 + }, + "f1": { + "0": 0.5614510327382695, + "1": 0.66391037346047, + "2": 0.6688685629268447 + }, + "micro_accuracy": { + "0": 0.8301084863570187, + "1": 0.9039014742898238, + "2": 0.998750115730025 + }, + "theilU": { + "0": 0.9506821380005821, + "1": 0.9530656934912801, + "2": 0.904888479697919 + }, + "coverage": { + "0": 0.8067363794801848, + "1": 0.8429188451920892, + "2": 0.8184435856634084 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 272, + "truth_images": 42778, + "accepted_predictions": 34929, + "metrics": { + "accuracy": 0.9633823854628971, + "precision": 0.9620682860611799, + "recall": 0.7992089334141771, + "f1": 0.8594740388924278 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 215, + "truth_images": 46868, + "accepted_predictions": 39740, + "metrics": { + "accuracy": 0.9754344482950037, + "precision": 0.9752199938369727, + "recall": 0.8251593289180623, + "f1": 0.8840371546219599 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 43191, + "metrics": { + "accuracy": 0.9874802135721861, + "precision": 0.9918462287830544, + "recall": 0.7931565581111449, + "f1": 0.8782448997518413 + } + } + } + }, + "coverage_70": { + "thresholds": [ + 0.93315851688385, + 0.9804478883743286, + 0.9972013235092164 + ], + "full": { + "accuracy": { + "0": 0.8991772347974494, + "1": 0.9765122298670562, + "2": 0.9940919372828998 + }, + "precision": { + "0": 0.8456689437195946, + "1": 0.9212082467863876, + "2": 0.9105909518507277 + }, + "recall": { + "0": 0.5806579657362848, + "1": 0.6323255412674224, + "2": 0.6474373549878735 + }, + "f1": { + "0": 0.5804015634850642, + "1": 0.6760711493673188, + "2": 0.695180588011688 + }, + "micro_accuracy": { + "0": 0.8519931801575059, + "1": 0.9276880192687613, + "2": 0.9994858055262374 + }, + "theilU": { + "0": 0.9506821380005821, + "1": 0.9530656934912801, + "2": 0.904888479697919 + }, + "coverage": { + "0": 0.6999886337804047, + "1": 0.6999886337804047, + "2": 0.6999886337804047 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 270, + "truth_images": 42705, + "accepted_predictions": 31010, + "metrics": { + "accuracy": 0.9776436854882747, + "precision": 0.9755378203406662, + "recall": 0.722004661286145, + "f1": 0.8087591090852428 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789246", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 210, + "truth_images": 46789, + "accepted_predictions": 33975, + "metrics": { + "accuracy": 0.9868260875650243, + "precision": 0.9869714825698337, + "recall": 0.7128497701246634, + "f1": 0.8100365271492445 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 36945, + "metrics": { + "accuracy": 0.9931590852749367, + "precision": 0.9923254128640772, + "recall": 0.6966954216249965, + "f1": 0.8129569140504668 + } + } + } + }, + "coverage_80": { + "thresholds": [ + 0.7864558100700378, + 0.8991661667823792, + 0.9839562773704528 + ], + "full": { + "accuracy": { + "0": 0.8681525695853197, + "1": 0.9690887320773804, + "2": 0.9893177583735553 + }, + "precision": { + "0": 0.7256230124848712, + "1": 0.8392267277587339, + "2": 0.8092924516803065 + }, + "recall": { + "0": 0.6516322902727562, + "1": 0.7280547849656653, + "2": 0.715811313718187 + }, + "f1": { + "0": 0.5638804990406792, + "1": 0.6932378251822574, + "2": 0.6613289841826895 + }, + "micro_accuracy": { + "0": 0.8320625147999052, + "1": 0.9128107980108927, + "2": 0.9990054463651432 + }, + "theilU": { + "0": 0.9506821380005821, + "1": 0.9530656934912801, + "2": 0.904888479697919 + }, + "coverage": { + "0": 0.7999924225202698, + "1": 0.7999924225202698, + "2": 0.7999924225202698 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 282, + "truth_images": 43436, + "accepted_predictions": 35175, + "metrics": { + "accuracy": 0.964118819588285, + "precision": 0.9638007386543088, + "recall": 0.7943988204601052, + "f1": 0.857186007121519 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 220, + "truth_images": 47497, + "accepted_predictions": 38462, + "metrics": { + "accuracy": 0.9788034405604307, + "precision": 0.9793962322786787, + "recall": 0.7879772281995084, + "f1": 0.8606213313448622 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 42219, + "metrics": { + "accuracy": 0.9876310886430639, + "precision": 0.9921524313351724, + "recall": 0.7754153149867931, + "f1": 0.8671339416025601 + } + } + } + }, + "coverage_90": { + "thresholds": [ + 0.4981422424316406, + 0.5704049468040466, + 0.8255183696746826 + ], + "full": { + "accuracy": { + "0": 0.8275277881335519, + "1": 0.9323397607229976, + "2": 0.9662851300685152 + }, + "precision": { + "0": 0.5698267633908097, + "1": 0.6453578889070587, + "2": 0.6620438247654835 + }, + "recall": { + "0": 0.7148264203986453, + "1": 0.8030574959232933, + "2": 0.8161730537339364 + }, + "f1": { + "0": 0.49048063270161796, + "1": 0.5914681212088754, + "2": 0.6181949611573065 + }, + "micro_accuracy": { + "0": 0.8008798332947441, + "1": 0.8852848933886212, + "2": 0.9956218821696942 + }, + "theilU": { + "0": 0.9506821380005821, + "1": 0.9530656934912801, + "2": 0.904888479697919 + }, + "coverage": { + "0": 0.8999962112601348, + "1": 0.8999962112601348, + "2": 0.8999962112601348 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 295, + "truth_images": 44256, + "accepted_predictions": 38822, + "metrics": { + "accuracy": 0.9332526939814978, + "precision": 0.939363112800583, + "recall": 0.8425608778485374, + "f1": 0.8754335683136774 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 231, + "truth_images": 48032, + "accepted_predictions": 42567, + "metrics": { + "accuracy": 0.9539446830499735, + "precision": 0.9493471909350284, + "recall": 0.8504964110432653, + "f1": 0.8858621014410463 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 47456, + "metrics": { + "accuracy": 0.9806985716582809, + "precision": 0.9658983715348495, + "recall": 0.8624928869086922, + "f1": 0.9082064719768487 + } + } + } + } + } + }, + "torch:rotation30_pad25_3": { + "source": "local-evidence/mambo-composed-full/torch/rotation30_pad25_3/mini_metric.csv", + "source_sha256": "52ff1ecff46d20c955b51c17db9bc51b7c4c763741999573eb09bb566e1d75dc", + "identities": { + "full": "0f6e02db8e7eaaabc9617dcb0af5e0a7def4886578e46b4f919316b4ca6e7165", + "report": "80144bd4f34d9705bcae1dad496ccf13a7160b5709139b34710e5d75a3252fed", + "calibration": "07e2e6f88b36f3e9f348adaf4526ed62e8725eba4116780a0410bf5d18f5d3fd" + }, + "report_images": 52788, + "calibration_images": 5852, + "thresholds": [ + 0.7562050521373749, + 0.7952321171760559, + 0.9765909910202026 + ], + "operating_points": { + "zero": { + "thresholds": [ + 0.0, + 0.0, + 0.0 + ], + "full": { + "accuracy": { + "0": 0.7493898333756177, + "1": 0.8472767012256567, + "2": 0.86366836103727 + }, + "precision": { + "0": 0.3361085016262147, + "1": 0.3871858468468912, + "2": 0.3473357735776554 + }, + "recall": { + "0": 0.7493898333756177, + "1": 0.8472767012256567, + "2": 0.86366836103727 + }, + "f1": { + "0": 0.3201483357303684, + "1": 0.38731172619778687, + "2": 0.35919021330288153 + }, + "micro_accuracy": { + "0": 0.7508714101689778, + "1": 0.8324808668636812, + "2": 0.9622830946427219 + }, + "theilU": { + "0": 0.9512236692214211, + "1": 0.9537143645936615, + "2": 0.9062358679592668 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 308, + "truth_images": 44643, + "accepted_predictions": 41703, + "metrics": { + "accuracy": 0.8695966338189322, + "precision": 0.8832470040020461, + "recall": 0.8695966338189322, + "f1": 0.8611832508395522 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 242, + "truth_images": 52567, + "accepted_predictions": 45974, + "metrics": { + "accuracy": 0.8812527981807469, + "precision": 0.8646719138069031, + "recall": 0.8812527981807469, + "f1": 0.855181947419072 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images": 52783, + "accepted_predictions": 52402, + "metrics": { + "accuracy": 0.8932186151928605, + "precision": 0.8280730113019039, + "recall": 0.8932186151928605, + "f1": 0.8505612212541583 + } + } + } + }, + "optimized": { + "thresholds": [ + 0.7562050521373749, + 0.7952321171760559, + 0.9765909910202026 + ], + "full": { + "accuracy": { + "0": 0.8633843418309688, + "1": 0.95774560113418, + "2": 0.9892254689058468 + }, + "precision": { + "0": 0.7190416496691577, + "1": 0.7891877764219916, + "2": 0.8402573230856973 + }, + "recall": { + "0": 0.6588299780195079, + "1": 0.7626880651777854, + "2": 0.7546408071160894 + }, + "f1": { + "0": 0.566106644915547, + "1": 0.6776129515770067, + "2": 0.7073928412638566 + }, + "micro_accuracy": { + "0": 0.8300772588287468, + "1": 0.9032149356338882, + "2": 0.9988231493446557 + }, + "theilU": { + "0": 0.9512236692214211, + "1": 0.9537143645936615, + "2": 0.9062358679592668 + }, + "coverage": { + "0": 0.8116049102068652, + "1": 0.8432030006819732, + "2": 0.8209441539743881 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 272, + "truth_images": 42778, + "accepted_predictions": 35185, + "metrics": { + "accuracy": 0.963817038901828, + "precision": 0.961489880265137, + "recall": 0.8035377762915177, + "f1": 0.8618349502484031 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 215, + "truth_images": 46868, + "accepted_predictions": 39827, + "metrics": { + "accuracy": 0.9754640055183043, + "precision": 0.9744657384691411, + "recall": 0.8284961369731623, + "f1": 0.8857838500606222 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 43325, + "metrics": { + "accuracy": 0.9875242271541385, + "precision": 0.9919310736962174, + "recall": 0.7961036491000434, + "f1": 0.8802424586381118 + } + } + } + }, + "coverage_70": { + "thresholds": [ + 0.9330438375473022, + 0.9808310866355896, + 0.9974275231361388 + ], + "full": { + "accuracy": { + "0": 0.8958773246343307, + "1": 0.9766589295185959, + "2": 0.9934599375766446 + }, + "precision": { + "0": 0.8488359655175162, + "1": 0.9346999594698736, + "2": 0.9498878737701825 + }, + "recall": { + "0": 0.575642556980122, + "1": 0.6367137848251249, + "2": 0.6454812993243774 + }, + "f1": { + "0": 0.5778389555534205, + "1": 0.68706311679764, + "2": 0.7241944754879999 + }, + "micro_accuracy": { + "0": 0.8523720602960677, + "1": 0.928012773673243, + "2": 0.9994858055262374 + }, + "theilU": { + "0": 0.9512236692214211, + "1": 0.9537143645936615, + "2": 0.9062358679592668 + }, + "coverage": { + "0": 0.6999886337804047, + "1": 0.6999886337804047, + "2": 0.6999886337804047 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 270, + "truth_images": 42705, + "accepted_predictions": 31144, + "metrics": { + "accuracy": 0.977274427695301, + "precision": 0.9759679510257172, + "recall": 0.7245807100491324, + "f1": 0.810278348194081 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789246", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 210, + "truth_images": 46789, + "accepted_predictions": 34055, + "metrics": { + "accuracy": 0.9871863309136562, + "precision": 0.9865580047875915, + "recall": 0.7144975277360381, + "f1": 0.8109127926788642 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 36945, + "metrics": { + "accuracy": 0.992427296141378, + "precision": 0.9919695314060105, + "recall": 0.6902789817732341, + "f1": 0.8073158286865963 + } + } + } + }, + "coverage_80": { + "thresholds": [ + 0.7825590372085571, + 0.9008587002754213, + 0.9850324392318726 + ], + "full": { + "accuracy": { + "0": 0.8685831581947409, + "1": 0.9684925893463145, + "2": 0.989354070043887 + }, + "precision": { + "0": 0.7408341935752873, + "1": 0.8495310596183734, + "2": 0.9107072776433661 + }, + "recall": { + "0": 0.6520466646970331, + "1": 0.7285668935695543, + "2": 0.7405947769417649 + }, + "f1": { + "0": 0.5728841408568456, + "1": 0.6990184834220075, + "2": 0.7559779769818279 + }, + "micro_accuracy": { + "0": 0.8331754676770069, + "1": 0.9127397584655458, + "2": 0.9991001657589391 + }, + "theilU": { + "0": 0.9512236692214211, + "1": 0.9537143645936615, + "2": 0.9062358679592668 + }, + "coverage": { + "0": 0.7999924225202698, + "1": 0.7999924225202698, + "2": 0.7999924225202698 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 282, + "truth_images": 43436, + "accepted_predictions": 35239, + "metrics": { + "accuracy": 0.9653788722710366, + "precision": 0.9636915943413662, + "recall": 0.7956290746750607, + "f1": 0.8575515862096464 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 220, + "truth_images": 47497, + "accepted_predictions": 38506, + "metrics": { + "accuracy": 0.9788881421171708, + "precision": 0.9794636846683936, + "recall": 0.7901320143472512, + "f1": 0.8618171291762662 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 42222, + "metrics": { + "accuracy": 0.9876731337350272, + "precision": 0.9924723507074099, + "recall": 0.7791005599416505, + "f1": 0.8697078644497735 + } + } + } + }, + "coverage_90": { + "thresholds": [ + 0.5055776238441467, + 0.5816248059272766, + 0.8369399309158325 + ], + "full": { + "accuracy": { + "0": 0.8259918976166272, + "1": 0.9275599703862233, + "2": 0.9632627273411767 + }, + "precision": { + "0": 0.5745198109152063, + "1": 0.6663984622722228, + "2": 0.6557361064788253 + }, + "recall": { + "0": 0.713123054577747, + "1": 0.8037295174574243, + "2": 0.8187844116433781 + }, + "f1": { + "0": 0.492042775668204, + "1": 0.6076394789666649, + "2": 0.6053891583355393 + }, + "micro_accuracy": { + "0": 0.8011534656591383, + "1": 0.885305942032036, + "2": 0.9960849523248226 + }, + "theilU": { + "0": 0.9512236692214211, + "1": 0.9537143645936615, + "2": 0.9062358679592668 + }, + "coverage": { + "0": 0.8999962112601348, + "1": 0.8999962112601348, + "2": 0.8999962112601348 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 295, + "truth_images": 44256, + "accepted_predictions": 38826, + "metrics": { + "accuracy": 0.9350519930314937, + "precision": 0.9387344030835514, + "recall": 0.8431093052722285, + "f1": 0.8753944002330876 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 231, + "truth_images": 48032, + "accepted_predictions": 42580, + "metrics": { + "accuracy": 0.9576218533224137, + "precision": 0.9504064753538914, + "recall": 0.8531971719555743, + "f1": 0.8879077068258153 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 47470, + "metrics": { + "accuracy": 0.9771989474476782, + "precision": 0.981015342831644, + "recall": 0.8656540043780165, + "f1": 0.9169624562903813 + } + } + } + } + } + }, + "torch:wide_rotation_mixed_padding_5": { + "source": "local-evidence/mambo-composed-full/torch/wide_rotation_mixed_padding_5/mini_metric.csv", + "source_sha256": "6d0ddb34780461d1bb033b42b3d739e0bf134b914e90d6d6c47ba967ea1586f8", + "identities": { + "full": "0f6e02db8e7eaaabc9617dcb0af5e0a7def4886578e46b4f919316b4ca6e7165", + "report": "80144bd4f34d9705bcae1dad496ccf13a7160b5709139b34710e5d75a3252fed", + "calibration": "07e2e6f88b36f3e9f348adaf4526ed62e8725eba4116780a0410bf5d18f5d3fd" + }, + "report_images": 52788, + "calibration_images": 5852, + "thresholds": [ + 0.7889324426651001, + 0.810388594865799, + 0.9926556646823883 + ], + "operating_points": { + "zero": { + "thresholds": [ + 0.0, + 0.0, + 0.0 + ], + "full": { + "accuracy": { + "0": 0.7552353473768904, + "1": 0.8526658727375439, + "2": 0.8682120684665646 + }, + "precision": { + "0": 0.33652687002568266, + "1": 0.3940356914835521, + "2": 0.34808262594697054 + }, + "recall": { + "0": 0.7552353473768904, + "1": 0.8526658727375439, + "2": 0.8682120684665646 + }, + "f1": { + "0": 0.32157178232724193, + "1": 0.3957580012454397, + "2": 0.3600973207633851 + }, + "micro_accuracy": { + "0": 0.753731908767144, + "1": 0.8360043949382435, + "2": 0.9631734485110253 + }, + "theilU": { + "0": 0.9525401112314309, + "1": 0.9550597834064932, + "2": 0.9086734404521702 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 308, + "truth_images": 44643, + "accepted_predictions": 41807, + "metrics": { + "accuracy": 0.8715579516601252, + "precision": 0.883662054978781, + "recall": 0.8715579516601252, + "f1": 0.8628306472516105 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 242, + "truth_images": 52567, + "accepted_predictions": 46080, + "metrics": { + "accuracy": 0.8853243404403656, + "precision": 0.8667563365049132, + "recall": 0.8853243404403656, + "f1": 0.8585900247512551 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images": 52783, + "accepted_predictions": 52398, + "metrics": { + "accuracy": 0.8984438787365493, + "precision": 0.8300148274621234, + "recall": 0.8984438787365493, + "f1": 0.8529197006514678 + } + } + } + }, + "optimized": { + "thresholds": [ + 0.7889324426651001, + 0.810388594865799, + 0.9926556646823883 + ], + "full": { + "accuracy": { + "0": 0.8703941893724045, + "1": 0.9607022983572389, + "2": 0.9945725610665762 + }, + "precision": { + "0": 0.7403659908254208, + "1": 0.7909544340740902, + "2": 0.8742831111794982 + }, + "recall": { + "0": 0.6565552978086161, + "1": 0.7604445669279044, + "2": 0.6934443095310503 + }, + "f1": { + "0": 0.57525880404229, + "1": 0.6825116641787987, + "2": 0.6990191600388408 + }, + "micro_accuracy": { + "0": 0.8329914408997666, + "1": 0.9049456095099249, + "2": 0.9993332839469591 + }, + "theilU": { + "0": 0.9525401112314309, + "1": 0.9550597834064932, + "2": 0.9086734404521702 + }, + "coverage": { + "0": 0.8034212320982042, + "1": 0.8446048344320679, + "2": 0.7671629915889975 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 272, + "truth_images": 42778, + "accepted_predictions": 34859, + "metrics": { + "accuracy": 0.9641487530176069, + "precision": 0.9614697038990926, + "recall": 0.7971390965681312, + "f1": 0.8576154488683261 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 215, + "truth_images": 46868, + "accepted_predictions": 39833, + "metrics": { + "accuracy": 0.975113981160547, + "precision": 0.9740507775184749, + "recall": 0.8280259319833198, + "f1": 0.8854528533073914 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 40489, + "metrics": { + "accuracy": 0.9937155970244568, + "precision": 0.9924777778677608, + "recall": 0.7483394678128908, + "f1": 0.8490963944391154 + } + } + } + }, + "coverage_70": { + "thresholds": [ + 0.9378145933151244, + 0.9829131960868835, + 0.9976515173912048 + ], + "full": { + "accuracy": { + "0": 0.8981579179311403, + "1": 0.9772508883665877, + "2": 0.9941883574173919 + }, + "precision": { + "0": 0.8482357262407203, + "1": 0.9332838510987757, + "2": 0.9104544472981865 + }, + "recall": { + "0": 0.5783557942848305, + "1": 0.6363193807367752, + "2": 0.649008190569088 + }, + "f1": { + "0": 0.5797706028761002, + "1": 0.6865936749446687, + "2": 0.6981880604454596 + }, + "micro_accuracy": { + "0": 0.8516413628859841, + "1": 0.9270385104597981, + "2": 0.9995128683932776 + }, + "theilU": { + "0": 0.9525401112314309, + "1": 0.9550597834064932, + "2": 0.9086734404521702 + }, + "coverage": { + "0": 0.6999886337804047, + "1": 0.6999886337804047, + "2": 0.6999886337804047 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 270, + "truth_images": 42705, + "accepted_predictions": 31006, + "metrics": { + "accuracy": 0.9779798176414025, + "precision": 0.9763347531347621, + "recall": 0.7251636762866198, + "f1": 0.8110997447784023 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789246", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 210, + "truth_images": 46789, + "accepted_predictions": 33950, + "metrics": { + "accuracy": 0.9877629577875913, + "precision": 0.9879968037128767, + "recall": 0.7139534005861962, + "f1": 0.8109341992830557 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 36944, + "metrics": { + "accuracy": 0.9932707296411906, + "precision": 0.9921529860608669, + "recall": 0.6945483764378839, + "f1": 0.8112123602352538 + } + } + } + }, + "coverage_80": { + "thresholds": [ + 0.7969815731048584, + 0.909421443939209, + 0.9860424399375916 + ], + "full": { + "accuracy": { + "0": 0.8703860488155565, + "1": 0.9702370068158972, + "2": 0.9895760191358332 + }, + "precision": { + "0": 0.7478527799932727, + "1": 0.8641071843621503, + "2": 0.8401325897859828 + }, + "recall": { + "0": 0.6541611168700917, + "1": 0.7311401849680091, + "2": 0.7351839613471405 + }, + "f1": { + "0": 0.5769583914374429, + "1": 0.7126052675987479, + "2": 0.6968757347312367 + }, + "micro_accuracy": { + "0": 0.8337437840397821, + "1": 0.9137106322519536, + "2": 0.9990764859104901 + }, + "theilU": { + "0": 0.9525401112314309, + "1": 0.9550597834064932, + "2": 0.9086734404521702 + }, + "coverage": { + "0": 0.7999924225202698, + "1": 0.7999924225202698, + "2": 0.7999924225202698 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 282, + "truth_images": 43436, + "accepted_predictions": 35208, + "metrics": { + "accuracy": 0.9642272032183972, + "precision": 0.9621322595440107, + "recall": 0.7940774494750392, + "f1": 0.8559202478885654 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 220, + "truth_images": 47497, + "accepted_predictions": 38452, + "metrics": { + "accuracy": 0.9798380770766145, + "precision": 0.9813582892523279, + "recall": 0.7881178200935575, + "f1": 0.8613988006364001 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 42219, + "metrics": { + "accuracy": 0.9879301274204382, + "precision": 0.9917603860229236, + "recall": 0.7725506252744735, + "f1": 0.8652970967233362 + } + } + } + }, + "coverage_90": { + "thresholds": [ + 0.513369619846344, + 0.5913177728652954, + 0.8463716506958008 + ], + "full": { + "accuracy": { + "0": 0.8297329234230693, + "1": 0.9371673280837497, + "2": 0.9685322979359694 + }, + "precision": { + "0": 0.5765988016597196, + "1": 0.6672605314057598, + "2": 0.6394863690228767 + }, + "recall": { + "0": 0.7158386940830017, + "1": 0.8028247469715531, + "2": 0.8178052140525619 + }, + "f1": { + "0": 0.4952952124369994, + "1": 0.6092459823242529, + "2": 0.5946226332779055 + }, + "micro_accuracy": { + "0": 0.8030057462796523, + "1": 0.8878317792418279, + "2": 0.996295438758972 + }, + "theilU": { + "0": 0.9525401112314309, + "1": 0.9550597834064932, + "2": 0.9086734404521702 + }, + "coverage": { + "0": 0.8999962112601348, + "1": 0.8999962112601348, + "2": 0.8999962112601348 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 295, + "truth_images": 44256, + "accepted_predictions": 38932, + "metrics": { + "accuracy": 0.934962103106059, + "precision": 0.9381498118770788, + "recall": 0.8439005661627716, + "f1": 0.8761809466681394 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 231, + "truth_images": 48032, + "accepted_predictions": 42643, + "metrics": { + "accuracy": 0.9564080257719563, + "precision": 0.9529007912283691, + "recall": 0.8523142992788373, + "f1": 0.8890123517529243 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 47467, + "metrics": { + "accuracy": 0.9786013073845059, + "precision": 0.9791079040923648, + "recall": 0.8644686599259757, + "f1": 0.9158065618920347 + } + } + } + } + } + }, + "onnx:rotation30_pad15_3": { + "source": "local-evidence/mambo-composed-full/onnx/rotation30_pad15_3/mini_metric.csv", + "source_sha256": "ed98946456c97f788a7bbcd2d2dfdd449f39c272643df67916788979b388c788", + "identities": { + "full": "0f6e02db8e7eaaabc9617dcb0af5e0a7def4886578e46b4f919316b4ca6e7165", + "report": "80144bd4f34d9705bcae1dad496ccf13a7160b5709139b34710e5d75a3252fed", + "calibration": "07e2e6f88b36f3e9f348adaf4526ed62e8725eba4116780a0410bf5d18f5d3fd" + }, + "report_images": 52788, + "calibration_images": 5852, + "thresholds": [ + 0.770552396774292, + 0.7823580801486969, + 0.9773475527763367 + ], + "operating_points": { + "zero": { + "thresholds": [ + 0.0, + 0.0, + 0.0 + ], + "full": { + "accuracy": { + "0": 0.7513525957454966, + "1": 0.8515498392515479, + "2": 0.8624898678796847 + }, + "precision": { + "0": 0.3357177251908713, + "1": 0.3869534389691655, + "2": 0.3360275595138312 + }, + "recall": { + "0": 0.7513525957454966, + "1": 0.8515498392515479, + "2": 0.8624898678796847 + }, + "f1": { + "0": 0.32100616569668566, + "1": 0.3880775533670641, + "2": 0.3485676456240567 + }, + "micro_accuracy": { + "0": 0.7501704932939305, + "1": 0.8322724861710995, + "2": 0.9608812608926272 + }, + "theilU": { + "0": 0.9506293360700655, + "1": 0.9530907894039403, + "2": 0.904985777478236 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 308, + "truth_images": 44643, + "accepted_predictions": 41703, + "metrics": { + "accuracy": 0.8681754725478049, + "precision": 0.8800706763295238, + "recall": 0.8681754725478049, + "f1": 0.8586965864033043 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 242, + "truth_images": 52567, + "accepted_predictions": 45983, + "metrics": { + "accuracy": 0.8817732545623048, + "precision": 0.8625063923843291, + "recall": 0.8817732545623048, + "f1": 0.8541158274741251 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images": 52783, + "accepted_predictions": 52372, + "metrics": { + "accuracy": 0.8918633480616375, + "precision": 0.8154730327116526, + "recall": 0.8918633480616375, + "f1": 0.840370927570417 + } + } + } + }, + "optimized": { + "thresholds": [ + 0.770552396774292, + 0.7823580801486969, + 0.9773475527763367 + ], + "full": { + "accuracy": { + "0": 0.864259698288895, + "1": 0.9602256286013219, + "2": 0.9891968996008379 + }, + "precision": { + "0": 0.7129414582230171, + "1": 0.7545606744376422, + "2": 0.8090777567603441 + }, + "recall": { + "0": 0.6581485418241365, + "1": 0.7659093737952452, + "2": 0.7291856145583755 + }, + "f1": { + "0": 0.5603296083270611, + "1": 0.6569306030813745, + "2": 0.6682212708489148 + }, + "micro_accuracy": { + "0": 0.82996360220735, + "1": 0.902649332082384, + "2": 0.9988161010260458 + }, + "theilU": { + "0": 0.9506293360700655, + "1": 0.9530907894039403, + "2": 0.904985777478236 + }, + "coverage": { + "0": 0.8067174357808593, + "1": 0.8480336440100023, + "2": 0.8160566795483822 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 272, + "truth_images": 42778, + "accepted_predictions": 34924, + "metrics": { + "accuracy": 0.9632906010281114, + "precision": 0.9619290738861205, + "recall": 0.7985746451092541, + "f1": 0.8589686091730018 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 215, + "truth_images": 46868, + "accepted_predictions": 39933, + "metrics": { + "accuracy": 0.9746103739038117, + "precision": 0.9741038410766583, + "recall": 0.8283883340772565, + "f1": 0.885697418184335 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 43066, + "metrics": { + "accuracy": 0.9874911469062333, + "precision": 0.9918473385541731, + "recall": 0.7916052581091266, + "f1": 0.8772909956369972 + } + } + } + }, + "coverage_70": { + "thresholds": [ + 0.9332101345062256, + 0.9805076718330384, + 0.9972158670425416 + ], + "full": { + "accuracy": { + "0": 0.8993042897125594, + "1": 0.9765118678772962, + "2": 0.9940916257004148 + }, + "precision": { + "0": 0.8457863797403911, + "1": 0.9212369149917536, + "2": 0.9104815309041331 + }, + "recall": { + "0": 0.580673410297893, + "1": 0.6322483811758616, + "2": 0.6457444404845172 + }, + "f1": { + "0": 0.5804525856869176, + "1": 0.6760309577391611, + "2": 0.6942029367124118 + }, + "micro_accuracy": { + "0": 0.8519661172904658, + "1": 0.9276609564017212, + "2": 0.9994858055262374 + }, + "theilU": { + "0": 0.9506293360700655, + "1": 0.9530907894039403, + "2": 0.904985777478236 + }, + "coverage": { + "0": 0.6999886337804047, + "1": 0.6999886337804047, + "2": 0.6999886337804047 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 270, + "truth_images": 42705, + "accepted_predictions": 31014, + "metrics": { + "accuracy": 0.9778664722783771, + "precision": 0.9755371093676788, + "recall": 0.7220718478185935, + "f1": 0.8088370437219299 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789246", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 210, + "truth_images": 46789, + "accepted_predictions": 33976, + "metrics": { + "accuracy": 0.9868259053778615, + "precision": 0.9870146798561634, + "recall": 0.7130376570404691, + "f1": 0.810235529476725 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 36945, + "metrics": { + "accuracy": 0.9931587244952169, + "precision": 0.9921871969315368, + "recall": 0.6946461040683022, + "f1": 0.8116705307619455 + } + } + } + }, + "coverage_80": { + "thresholds": [ + 0.7865936160087585, + 0.8993590474128723, + 0.98397696018219 + ], + "full": { + "accuracy": { + "0": 0.8690130364323082, + "1": 0.9690858326600882, + "2": 0.9893179755256315 + }, + "precision": { + "0": 0.724230514194755, + "1": 0.8392258546323281, + "2": 0.8092930222080731 + }, + "recall": { + "0": 0.6526380166096016, + "1": 0.7280490051317001, + "2": 0.7157724451265104 + }, + "f1": { + "0": 0.5635018832857759, + "1": 0.693231705845092, + "2": 0.6613159259846374 + }, + "micro_accuracy": { + "0": 0.8319441155576605, + "1": 0.9128344778593417, + "2": 0.9990054463651432 + }, + "theilU": { + "0": 0.9506293360700655, + "1": 0.9530907894039403, + "2": 0.904985777478236 + }, + "coverage": { + "0": 0.7999924225202698, + "1": 0.7999924225202698, + "2": 0.7999924225202698 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 282, + "truth_images": 43436, + "accepted_predictions": 35170, + "metrics": { + "accuracy": 0.9638203303886238, + "precision": 0.9635345560148336, + "recall": 0.7944708639020808, + "f1": 0.8571265688892376 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 220, + "truth_images": 47497, + "accepted_predictions": 38463, + "metrics": { + "accuracy": 0.9787994209137294, + "precision": 0.9793948511514551, + "recall": 0.7879687686243412, + "f1": 0.8606111788082011 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 42219, + "metrics": { + "accuracy": 0.9876313400823101, + "precision": 0.9921532420851567, + "recall": 0.775368263533711, + "f1": 0.8671146979422726 + } + } + } + }, + "coverage_90": { + "thresholds": [ + 0.4986054003238678, + 0.5710593461990356, + 0.8259501457214355 + ], + "full": { + "accuracy": { + "0": 0.824975364170027, + "1": 0.9323193587651343, + "2": 0.9662856355824953 + }, + "precision": { + "0": 0.5675215824090611, + "1": 0.6453036088704217, + "2": 0.6620438236169384 + }, + "recall": { + "0": 0.7147823674053605, + "1": 0.8029731865161972, + "2": 0.8162293842273993 + }, + "f1": { + "0": 0.4885422007895161, + "1": 0.5914080450287946, + "2": 0.6182197789183784 + }, + "micro_accuracy": { + "0": 0.8008377360079143, + "1": 0.8852217474583763, + "2": 0.9956218821696942 + }, + "theilU": { + "0": 0.9506293360700655, + "1": 0.9530907894039403, + "2": 0.904985777478236 + }, + "coverage": { + "0": 0.8999962112601348, + "1": 0.8999962112601348, + "2": 0.8999962112601348 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 295, + "truth_images": 44256, + "accepted_predictions": 38821, + "metrics": { + "accuracy": 0.9328288030848192, + "precision": 0.9394816322721306, + "recall": 0.8424987667797293, + "f1": 0.8753591320112727 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 231, + "truth_images": 48032, + "accepted_predictions": 42566, + "metrics": { + "accuracy": 0.9539171260637532, + "precision": 0.9492454452386484, + "recall": 0.8503788888394346, + "f1": 0.8857468904117138 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 47456, + "metrics": { + "accuracy": 0.9806991569902577, + "precision": 0.9658983696004576, + "recall": 0.8625610764534104, + "f1": 0.9082482703112855 + } + } + } + } + }, + "native_threshold_alignment": { + "thresholds": [ + 0.7703565061092377, + 0.797132283449173, + 0.9761196076869965 + ], + "scores": { + "accuracy": { + "0": 0.86426052434185, + "1": 0.9624662292079148, + "2": 0.9891975467051032 + }, + "precision": { + "0": 0.7129390273470394, + "1": 0.7657638578159159, + "2": 0.809085199968088 + }, + "recall": { + "0": 0.6581794698627934, + "1": 0.763559424742198, + "2": 0.7304825952879369 + }, + "f1": { + "0": 0.5603471015576356, + "1": 0.6647801072084766, + "2": 0.6688791573982424 + }, + "micro_accuracy": { + "0": 0.8299366048368162, + "1": 0.9038651685393259, + "2": 0.9987966027169007 + }, + "theilU": { + "0": 0.9506293360700655, + "1": 0.9530907894039403, + "2": 0.904985777478236 + }, + "coverage": { + "0": 0.8068121542774873, + "1": 0.8429946199893915, + "2": 0.8185761915586875 + } + } + } + }, + "onnx:rotation30_pad25_3": { + "source": "local-evidence/mambo-composed-full/onnx/rotation30_pad25_3/mini_metric.csv", + "source_sha256": "581928fd3578c35463770a036ff08e6035ee0276c3fac64673868a1ced542444", + "identities": { + "full": "0f6e02db8e7eaaabc9617dcb0af5e0a7def4886578e46b4f919316b4ca6e7165", + "report": "80144bd4f34d9705bcae1dad496ccf13a7160b5709139b34710e5d75a3252fed", + "calibration": "07e2e6f88b36f3e9f348adaf4526ed62e8725eba4116780a0410bf5d18f5d3fd" + }, + "report_images": 52788, + "calibration_images": 5852, + "thresholds": [ + 0.7529366910457611, + 0.7956856787204742, + 0.9765951335430146 + ], + "operating_points": { + "zero": { + "thresholds": [ + 0.0, + 0.0, + 0.0 + ], + "full": { + "accuracy": { + "0": 0.7493378530417095, + "1": 0.8472504239634208, + "2": 0.8636665098420966 + }, + "precision": { + "0": 0.335607011455683, + "1": 0.38755157575495597, + "2": 0.34712795694828363 + }, + "recall": { + "0": 0.7493378530417095, + "1": 0.8472504239634208, + "2": 0.8636665098420966 + }, + "f1": { + "0": 0.31973098589694526, + "1": 0.38771743876773856, + "2": 0.35905067781483396 + }, + "micro_accuracy": { + "0": 0.7507577479730242, + "1": 0.8323861483670532, + "2": 0.9622830946427219 + }, + "theilU": { + "0": 0.9512268480417431, + "1": 0.9536588165415049, + "2": 0.9062460655947492 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 308, + "truth_images": 44643, + "accepted_predictions": 41703, + "metrics": { + "accuracy": 0.8698036966650652, + "precision": 0.883195544629941, + "recall": 0.8698036966650652, + "f1": 0.8612589983083873 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 242, + "truth_images": 52567, + "accepted_predictions": 45971, + "metrics": { + "accuracy": 0.8812178342202511, + "precision": 0.864319570078447, + "recall": 0.8812178342202511, + "f1": 0.8548890385082205 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images": 52783, + "accepted_predictions": 52403, + "metrics": { + "accuracy": 0.8932164863184111, + "precision": 0.8275326880655373, + "recall": 0.8932164863184111, + "f1": 0.850198428985235 + } + } + } + }, + "optimized": { + "thresholds": [ + 0.7529366910457611, + 0.7956856787204742, + 0.9765951335430146 + ], + "full": { + "accuracy": { + "0": 0.8635268756201978, + "1": 0.9578599395148406, + "2": 0.9892268920132548 + }, + "precision": { + "0": 0.7198655161183526, + "1": 0.7876914346408369, + "2": 0.8402600553286454 + }, + "recall": { + "0": 0.6615516920144863, + "1": 0.7626601078847843, + "2": 0.7551948103314396 + }, + "f1": { + "0": 0.5675578092246022, + "1": 0.6759673575495095, + "2": 0.7076764729156302 + }, + "micro_accuracy": { + "0": 0.8296529233636152, + "1": 0.9032895919467913, + "2": 0.9988236108227805 + }, + "theilU": { + "0": 0.9512268480417431, + "1": 0.9536588165415049, + "2": 0.9062460655947492 + }, + "coverage": { + "0": 0.8132530120481928, + "1": 0.843070394786694, + "2": 0.8212661968629233 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 272, + "truth_images": 42778, + "accepted_predictions": 35245, + "metrics": { + "accuracy": 0.963573617550616, + "precision": 0.9613612115206147, + "recall": 0.8049544911995276, + "f1": 0.8626739450453852 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 215, + "truth_images": 46868, + "accepted_predictions": 39824, + "metrics": { + "accuracy": 0.975627801896181, + "precision": 0.9744124082410346, + "recall": 0.8284542660506211, + "f1": 0.8857427309465413 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 43342, + "metrics": { + "accuracy": 0.987525874962716, + "precision": 0.9919348125549885, + "recall": 0.796774284571257, + "f1": 0.8806455141432638 + } + } + } + }, + "coverage_70": { + "thresholds": [ + 0.9330078959465028, + 0.9808727502822876, + 0.9974356293678284 + ], + "full": { + "accuracy": { + "0": 0.8958818981982676, + "1": 0.9766731633485423, + "2": 0.9934599851689291 + }, + "precision": { + "0": 0.8488301817076527, + "1": 0.9349450037960787, + "2": 0.9498876210445948 + }, + "recall": { + "0": 0.5755733928870285, + "1": 0.6367466549994095, + "2": 0.6455188522788526 + }, + "f1": { + "0": 0.5777980098982209, + "1": 0.6871119307217507, + "2": 0.7242275050366153 + }, + "micro_accuracy": { + "0": 0.8522096830938269, + "1": 0.9280668994073232, + "2": 0.9994858055262374 + }, + "theilU": { + "0": 0.9512268480417431, + "1": 0.9536588165415049, + "2": 0.9062460655947492 + }, + "coverage": { + "0": 0.6999886337804047, + "1": 0.6999886337804047, + "2": 0.6999886337804047 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 270, + "truth_images": 42705, + "accepted_predictions": 31139, + "metrics": { + "accuracy": 0.9772824895065618, + "precision": 0.9759576331858164, + "recall": 0.7244536661424917, + "f1": 0.8101974819931572 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789246", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 210, + "truth_images": 46789, + "accepted_predictions": 34056, + "metrics": { + "accuracy": 0.9872066649564367, + "precision": 0.9869220706436679, + "recall": 0.7145479286699414, + "f1": 0.8109908949574413 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 36945, + "metrics": { + "accuracy": 0.9924273512482334, + "precision": 0.9919692254750357, + "recall": 0.690324440612862, + "f1": 0.8073575502216895 + } + } + } + }, + "coverage_80": { + "thresholds": [ + 0.7826480269432068, + 0.900927484035492, + 0.9850951433181764 + ], + "full": { + "accuracy": { + "0": 0.8686288052834912, + "1": 0.9685256384356089, + "2": 0.9893592346950689 + }, + "precision": { + "0": 0.738927432680573, + "1": 0.8470595060946164, + "2": 0.9107134038486736 + }, + "recall": { + "0": 0.6516737035411767, + "1": 0.7294362252336144, + "2": 0.7408230332730312 + }, + "f1": { + "0": 0.5714027645948971, + "1": 0.6978836889168124, + "2": 0.7561339190719285 + }, + "micro_accuracy": { + "0": 0.8331991475254559, + "1": 0.9127397584655458, + "2": 0.9991238456073881 + }, + "theilU": { + "0": 0.9512268480417431, + "1": 0.9536588165415049, + "2": 0.9062460655947492 + }, + "coverage": { + "0": 0.7999924225202698, + "1": 0.7999924225202698, + "2": 0.7999924225202698 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 282, + "truth_images": 43436, + "accepted_predictions": 35240, + "metrics": { + "accuracy": 0.9653183066765808, + "precision": 0.9636871772572874, + "recall": 0.7956245433056017, + "f1": 0.8575482217269305 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 220, + "truth_images": 47497, + "accepted_predictions": 38507, + "metrics": { + "accuracy": 0.9789418689306925, + "precision": 0.9794493441862221, + "recall": 0.7902786563673672, + "f1": 0.8619247098397643 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 42222, + "metrics": { + "accuracy": 0.9876791138574482, + "precision": 0.9924800890720088, + "recall": 0.7793768702373942, + "f1": 0.8699130514104324 + } + } + } + }, + "coverage_90": { + "thresholds": [ + 0.506381094455719, + 0.5820246338844299, + 0.8370890021324158 + ], + "full": { + "accuracy": { + "0": 0.8258580566003837, + "1": 0.9274427710014347, + "2": 0.9632609424279068 + }, + "precision": { + "0": 0.5753514931278402, + "1": 0.6679624600829293, + "2": 0.655704275245192 + }, + "recall": { + "0": 0.7130878850154326, + "1": 0.8023516736810761, + "2": 0.8188781084613986 + }, + "f1": { + "0": 0.4926253112229873, + "1": 0.6083311670068455, + "2": 0.6054171988779777 + }, + "micro_accuracy": { + "0": 0.8011745143025532, + "1": 0.8853480393188659, + "2": 0.9960639036814077 + }, + "theilU": { + "0": 0.9512268480417431, + "1": 0.9536588165415049, + "2": 0.9062460655947492 + }, + "coverage": { + "0": 0.8999962112601348, + "1": 0.8999962112601348, + "2": 0.8999962112601348 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 295, + "truth_images": 44256, + "accepted_predictions": 38828, + "metrics": { + "accuracy": 0.9350108762911535, + "precision": 0.9390448569451352, + "recall": 0.843502482502277, + "f1": 0.8756459313060244 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 231, + "truth_images": 48032, + "accepted_predictions": 42585, + "metrics": { + "accuracy": 0.9578232936969145, + "precision": 0.950365265908976, + "recall": 0.8534410434015306, + "f1": 0.8880107864781295 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 47470, + "metrics": { + "accuracy": 0.9771968807059972, + "precision": 0.9809600570048073, + "recall": 0.8657674268419359, + "f1": 0.9170111582851428 + } + } + } + } + }, + "native_threshold_alignment": { + "thresholds": [ + 0.7562050521373749, + 0.7952321171760559, + 0.9765909910202026 + ], + "scores": { + "accuracy": { + "0": 0.8633950623295443, + "1": 0.9577182088953489, + "2": 0.9892268920132548 + }, + "precision": { + "0": 0.7190458657983405, + "1": 0.7876773050674551, + "2": 0.8402600553286454 + }, + "recall": { + "0": 0.6587922723184866, + "1": 0.7627253495053744, + "2": 0.7551948103314396 + }, + "f1": { + "0": 0.5660150187297233, + "1": 0.6759937887132027, + "2": 0.7076764729156302 + }, + "micro_accuracy": { + "0": 0.8299843636957689, + "1": 0.9032620416966212, + "2": 0.9988236108227805 + }, + "theilU": { + "0": 0.9512268480417431, + "1": 0.9536588165415049, + "2": 0.9062460655947492 + }, + "coverage": { + "0": 0.8117185724028189, + "1": 0.8432219443812988, + "2": 0.8212661968629233 + } + } + } + }, + "onnx:wide_rotation_mixed_padding_5": { + "source": "local-evidence/mambo-composed-full/onnx/wide_rotation_mixed_padding_5/mini_metric.csv", + "source_sha256": "48c8f7f6dddb93f35614454d6ffbb14ed525e2ae68f670b805a072b53567ab8d", + "identities": { + "full": "0f6e02db8e7eaaabc9617dcb0af5e0a7def4886578e46b4f919316b4ca6e7165", + "report": "80144bd4f34d9705bcae1dad496ccf13a7160b5709139b34710e5d75a3252fed", + "calibration": "07e2e6f88b36f3e9f348adaf4526ed62e8725eba4116780a0410bf5d18f5d3fd" + }, + "report_images": 52788, + "calibration_images": 5852, + "thresholds": [ + 0.7873642444610596, + 0.8101237118244171, + 0.9925266802310944 + ], + "operating_points": { + "zero": { + "thresholds": [ + 0.0, + 0.0, + 0.0 + ], + "full": { + "accuracy": { + "0": 0.755234026103822, + "1": 0.8526484792215151, + "2": 0.8682812241104954 + }, + "precision": { + "0": 0.33687151585862535, + "1": 0.3940384661527601, + "2": 0.3481035571052136 + }, + "recall": { + "0": 0.755234026103822, + "1": 0.8526484792215151, + "2": 0.8682812241104954 + }, + "f1": { + "0": 0.32185110296574626, + "1": 0.3957398655739386, + "2": 0.3601292312019684 + }, + "micro_accuracy": { + "0": 0.7538455709630977, + "1": 0.835985451238918, + "2": 0.9631923922103508 + }, + "theilU": { + "0": 0.9525711652800813, + "1": 0.9551413947992818, + "2": 0.9087502982629312 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 308, + "truth_images": 44643, + "accepted_predictions": 41811, + "metrics": { + "accuracy": 0.8715557123596651, + "precision": 0.8834840123715941, + "recall": 0.8715557123596651, + "f1": 0.8627053901084056 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 242, + "truth_images": 52567, + "accepted_predictions": 46078, + "metrics": { + "accuracy": 0.8853011970016827, + "precision": 0.8667635483517392, + "recall": 0.8853011970016827, + "f1": 0.8585426621711364 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images": 52783, + "accepted_predictions": 52397, + "metrics": { + "accuracy": 0.8985234077270696, + "precision": 0.8300692484735555, + "recall": 0.8985234077270696, + "f1": 0.8530026677917844 + } + } + } + }, + "optimized": { + "thresholds": [ + 0.7873642444610596, + 0.8101237118244171, + 0.9925266802310944 + ], + "full": { + "accuracy": { + "0": 0.8695089438155129, + "1": 0.9606679222736707, + "2": 0.9945735885843039 + }, + "precision": { + "0": 0.7394833663961508, + "1": 0.7910805789285074, + "2": 0.8742836172330374 + }, + "recall": { + "0": 0.6572822588494145, + "1": 0.7604214628645327, + "2": 0.6939901432993258 + }, + "f1": { + "0": 0.5750160386991705, + "1": 0.6826130391618014, + "2": 0.6993534817995831 + }, + "micro_accuracy": { + "0": 0.8327523670450798, + "1": 0.9048729621241002, + "2": 0.9993341717836798 + }, + "theilU": { + "0": 0.9525711652800813, + "1": 0.9551413947992818, + "2": 0.9087502982629312 + }, + "coverage": { + "0": 0.8043115859665075, + "1": 0.8447563840266727, + "2": 0.7681859513525802 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 272, + "truth_images": 42778, + "accepted_predictions": 34889, + "metrics": { + "accuracy": 0.9639295303005937, + "precision": 0.9614004632913131, + "recall": 0.7979042954631081, + "f1": 0.8581004496525564 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 215, + "truth_images": 46868, + "accepted_predictions": 39838, + "metrics": { + "accuracy": 0.9750633809126213, + "precision": 0.9738767467913795, + "recall": 0.82798046241586, + "f1": 0.8853555685268851 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 40543, + "metrics": { + "accuracy": 0.9937167867818257, + "precision": 0.9924784437276808, + "recall": 0.749000213953435, + "f1": 0.849553887374868 + } + } + } + }, + "coverage_70": { + "thresholds": [ + 0.9377490878105164, + 0.9829234480857848, + 0.9976534247398376 + ], + "full": { + "accuracy": { + "0": 0.8981484684758387, + "1": 0.9772528484978749, + "2": 0.9941884144043752 + }, + "precision": { + "0": 0.848225714611513, + "1": 0.933284851520251, + "2": 0.9104544641431674 + }, + "recall": { + "0": 0.5783582894392819, + "1": 0.6360370412463672, + "2": 0.6490372022402425 + }, + "f1": { + "0": 0.5797842021095846, + "1": 0.686210878766654, + "2": 0.6982079283911002 + }, + "micro_accuracy": { + "0": 0.8515331114178236, + "1": 0.9270385104597981, + "2": 0.9995128683932776 + }, + "theilU": { + "0": 0.9525711652800813, + "1": 0.9551413947992818, + "2": 0.9087502982629312 + }, + "coverage": { + "0": 0.6999886337804047, + "1": 0.6999886337804047, + "2": 0.6999886337804047 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 270, + "truth_images": 42705, + "accepted_predictions": 31004, + "metrics": { + "accuracy": 0.9779636889139668, + "precision": 0.9763167556362732, + "recall": 0.7251751735918991, + "f1": 0.8111347887875858 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789246", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 210, + "truth_images": 46789, + "accepted_predictions": 33953, + "metrics": { + "accuracy": 0.9877665840630739, + "precision": 0.9879987085886791, + "recall": 0.7139705404842976, + "f1": 0.8109186480358266 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 36944, + "metrics": { + "accuracy": 0.9932707956261188, + "precision": 0.9921530073387378, + "recall": 0.6945834958292815, + "f1": 0.8112385022689916 + } + } + } + }, + "coverage_80": { + "thresholds": [ + 0.7969450950622559, + 0.9094918370246888, + 0.9860803484916688 + ], + "full": { + "accuracy": { + "0": 0.870493077157555, + "1": 0.9702347124009509, + "2": 0.9895768602990621 + }, + "precision": { + "0": 0.747828534071083, + "1": 0.8626430540125154, + "2": 0.8401327366486231 + }, + "recall": { + "0": 0.6542467064292844, + "1": 0.7311824992272253, + "2": 0.7354484625565733 + }, + "f1": { + "0": 0.5770189946103015, + "1": 0.7116937076075048, + "2": 0.6970330018229233 + }, + "micro_accuracy": { + "0": 0.8337911437366801, + "1": 0.9137106322519536, + "2": 0.9990764859104901 + }, + "theilU": { + "0": 0.9525711652800813, + "1": 0.9551413947992818, + "2": 0.9087502982629312 + }, + "coverage": { + "0": 0.7999924225202698, + "1": 0.7999924225202698, + "2": 0.7999924225202698 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 282, + "truth_images": 43436, + "accepted_predictions": 35209, + "metrics": { + "accuracy": 0.9642930734756164, + "precision": 0.9620844555272111, + "recall": 0.7942358812122685, + "f1": 0.8560547783361164 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 220, + "truth_images": 47497, + "accepted_predictions": 38452, + "metrics": { + "accuracy": 0.9798368925772063, + "precision": 0.9813682696210738, + "recall": 0.7881903730029471, + "f1": 0.8614467778949001 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 42219, + "metrics": { + "accuracy": 0.987931101398914, + "precision": 0.9917605869928529, + "recall": 0.7728708109490503, + "f1": 0.8655205815378383 + } + } + } + }, + "coverage_90": { + "thresholds": [ + 0.5132138729095459, + 0.5910288095474243, + 0.8467361330986023 + ], + "full": { + "accuracy": { + "0": 0.8306881085608662, + "1": 0.9372401160760394, + "2": 0.9685237018777774 + }, + "precision": { + "0": 0.5780671544235811, + "1": 0.6644000128149382, + "2": 0.6394279268346845 + }, + "recall": { + "0": 0.7158430899566303, + "1": 0.8029277732982208, + "2": 0.8178313547101703 + }, + "f1": { + "0": 0.4965186149296989, + "1": 0.6066165586959505, + "2": 0.5946051952129192 + }, + "micro_accuracy": { + "0": 0.8030267949230672, + "1": 0.8878528278852428, + "2": 0.9962533414721422 + }, + "theilU": { + "0": 0.9525711652800813, + "1": 0.9551413947992818, + "2": 0.9087502982629312 + }, + "coverage": { + "0": 0.8999962112601348, + "1": 0.8999962112601348, + "2": 0.8999962112601348 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 295, + "truth_images": 44256, + "accepted_predictions": 38934, + "metrics": { + "accuracy": 0.93498406973104, + "precision": 0.9380106126608642, + "recall": 0.8440867567559296, + "f1": 0.8762121177514529 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 231, + "truth_images": 48032, + "accepted_predictions": 42641, + "metrics": { + "accuracy": 0.9565060217269441, + "precision": 0.9534398462019361, + "recall": 0.852457911734192, + "f1": 0.8893584622879612 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 47467, + "metrics": { + "accuracy": 0.9785913540539676, + "precision": 0.9790063992391888, + "recall": 0.8645003038799225, + "f1": 0.9157762747265321 + } + } + } + } + }, + "native_threshold_alignment": { + "thresholds": [ + 0.7889324426651001, + 0.810388594865799, + 0.9926556646823883 + ], + "scores": { + "accuracy": { + "0": 0.8703479707377185, + "1": 0.96067989127921, + "2": 0.9945795017525476 + }, + "precision": { + "0": 0.7403401572665786, + "1": 0.7911071747194021, + "2": 0.8742863897999358 + }, + "recall": { + "0": 0.6567271492564797, + "1": 0.7600610723177453, + "2": 0.6934517477758068 + }, + "f1": { + "0": 0.575343447122764, + "1": 0.682391475443265, + "2": 0.6990231546090787 + }, + "micro_accuracy": { + "0": 0.8330150647146192, + "1": 0.9048825890954763, + "2": 0.9993581197847232 + }, + "theilU": { + "0": 0.9525711652800813, + "1": 0.9551413947992818, + "2": 0.9087502982629312 + }, + "coverage": { + "0": 0.8035348942941578, + "1": 0.8446427218307191, + "2": 0.767333484882928 + } + } + } + } + } +} diff --git a/docs/assets/mambo-composed-tta.svg b/docs/assets/mambo-composed-tta.svg new file mode 100644 index 0000000..26277da --- /dev/null +++ b/docs/assets/mambo-composed-tta.svg @@ -0,0 +1,3013 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.10.9, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + MAMBO v2 + + + + + + + + + + + + + V3 single view + + + + + + + + + + + + + Previous padded scale + + + + + + + + + + + + + ±30° / pad15 · 3 views + + + + + + + + + + + + + ±30° / pad25 · 3 views + + + + + + + + + + + + + Mixed padding · 5 views + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Species · Unthresholded Macro-F1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Species · Calibrated Macro-F1 + + + + + + + + + + + + + + + + + + 70.0 + + + + + + + + + + + + + 72.5 + + + + + + + + + + + + + 75.0 + + + + + + + + + + + + + 77.5 + + + + + + + + + + + + + 80.0 + + + + + + + + + + + + + 82.5 + + + + + + + + + + + + + 85.0 + + + + + + + + + + + + + 87.5 + + + + + + + + + + + + + 90.0 + + + + Realized coverage (%) + + + + + + + + + + + + + + 0.40 + + + + + + + + + + + + + 0.45 + + + + + + + + + + + + + 0.50 + + + + + + + + + + + + + 0.55 + + + + Macro-F1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Species · Matched-coverage full F1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + MAMBO v2 + + + + + + + + + + + + + V3 single view + + + + + + + + + + + + + Previous padded scale + + + + + + + + + + + + + ±30° / pad15 · 3 views + + + + + + + + + + + + + ±30° / pad25 · 3 views + + + + + + + + + + + + + Mixed padding · 5 views + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Genus · Unthresholded Macro-F1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Genus · Calibrated Macro-F1 + + + + + + + + + + + + + + + + + + 70.0 + + + + + + + + + + + + + 72.5 + + + + + + + + + + + + + 75.0 + + + + + + + + + + + + + 77.5 + + + + + + + + + + + + + 80.0 + + + + + + + + + + + + + 82.5 + + + + + + + + + + + + + 85.0 + + + + + + + + + + + + + 87.5 + + + + + + + + + + + + + 90.0 + + + + Realized coverage (%) + + + + + + + + + + + + + + 0.45 + + + + + + + + + + + + + 0.50 + + + + + + + + + + + + + 0.55 + + + + + + + + + + + + + 0.60 + + + + + + + + + + + + + 0.65 + + + + + + + + + + + + + 0.70 + + + + Macro-F1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Genus · Matched-coverage full F1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + MAMBO v2 + + + + + + + + + + + + + V3 single view + + + + + + + + + + + + + Previous padded scale + + + + + + + + + + + + + ±30° / pad15 · 3 views + + + + + + + + + + + + + ±30° / pad25 · 3 views + + + + + + + + + + + + + Mixed padding · 5 views + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Family · Unthresholded Macro-F1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Family · Calibrated Macro-F1 + + + + + + + + + + + + + + + + + + 70.0 + + + + + + + + + + + + + 72.5 + + + + + + + + + + + + + 75.0 + + + + + + + + + + + + + 77.5 + + + + + + + + + + + + + 80.0 + + + + + + + + + + + + + 82.5 + + + + + + + + + + + + + 85.0 + + + + + + + + + + + + + 87.5 + + + + + + + + + + + + + 90.0 + + + + Realized coverage (%) + + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.5 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.7 + + + + Macro-F1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Family · Matched-coverage full F1 + + + + Composed TTA · shared 52,788-image reporting partition · native PyTorch + + + Calibration: 5,852 separate images, per-recipe/rank mini_metrics Macro-F1 thresholds. All truth; legacy northern Europe. + Matched-coverage points use label-free reporting confidences; actual coverage includes score ties. Lines are guides, not fitted curves. + Support >5 classes are common across all compared native/ONNX pipelines within each operating point; no evaluation rows removed. + Recipe exploration used this dataset. These are descriptive comparisons, not independent validation; CSV includes all metrics/backends. + + + + + + + Fill = averaging domain (left and middle columns) + + + + + + + + + + + Full support + + + + + + + + + + + Support >5 in truth and accepted predictions + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/mambo-defaults-comparison.json b/docs/assets/mambo-defaults-comparison.json new file mode 100644 index 0000000..f9f4370 --- /dev/null +++ b/docs/assets/mambo-defaults-comparison.json @@ -0,0 +1,3525 @@ +{ + "tta": "padded_scale: original + 8% / 15% edge padding; FP32 mean leaf logits", + "selection": "Chosen for highest subset macro accuracy and lower cost than D4/padded rotations; not optimal for every metric.", + "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", + "policy": "threshold=0; optimal=False; simple=True; hierarchical=False", + "quality": [ + { + "model": "v2", + "preset": "north_europe", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.68712482946794, + "micro_accuracy_known": 0.7963358235503379, + "macro_accuracy_all": 0.6852063621352951, + "macro_accuracy_known": 0.706872966471589, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58639, + "list_coverage": 0.9999829467939972, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7922919508867667, + "micro_accuracy_known": 0.7923054622350313, + "macro_accuracy_all": 0.7890053947525617, + "macro_accuracy_known": 0.7914633554838781, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9449351978171896, + "micro_accuracy_known": 0.9449351978171896, + "macro_accuracy_all": 0.8440271040813301, + "macro_accuracy_known": 0.8440271040813301, + "abstention_coverage": 1.0 + } + }, + "macro_f1_all": 0.25753800338546967, + "scores": { + "all": { + "accuracy": { + "0": 0.6852063621352951, + "1": 0.7890053947525617, + "2": 0.8440271040813301 + }, + "precision": { + "0": 0.2742104381019442, + "1": 0.3188818859364664, + "2": 0.26007435892237385 + }, + "recall": { + "0": 0.6852063621352951, + "1": 0.7890053947525617, + "2": 0.8440271040813301 + }, + "f1": { + "0": 0.25753800338546967, + "1": 0.3169285074452811, + "2": 0.2691037692533918 + }, + "micro_accuracy": { + "0": 0.68712482946794, + "1": 0.7922919508867667, + "2": 0.9449351978171896 + }, + "theilU": { + "0": 0.9259639612074944, + "1": 0.9286450152404832, + "2": 0.865726913911594 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.706872966471589, + "1": 0.7914633554838781, + "2": 0.8440271040813301 + }, + "precision": { + "0": 0.27934832747314936, + "1": 0.3189462554934523, + "2": 0.26007435892237385 + }, + "recall": { + "0": 0.706872966471589, + "1": 0.7914633554838781, + "2": 0.8440271040813301 + }, + "f1": { + "0": 0.26468747200295195, + "1": 0.3174198331740771, + "2": 0.2691037692533918 + }, + "micro_accuracy": { + "0": 0.7963358235503379, + "1": 0.7923054622350313, + "2": 0.9449351978171896 + }, + "theilU": { + "0": 0.9284675700829689, + "1": 0.9286569914847851, + "2": 0.865726913911594 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + }, + "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", + "sample_ids_sha256": "51a9e4ae7818a96f935527a984a61f4fd31e43f60987ca23792f2bcafd27631a", + "list_sha256": "065bb3ade45c970ca129c7507b56ed62fe16b84251961bf53352f5098b8b2be6" + }, + { + "model": "v2", + "preset": "europe", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.669594133697135, + "micro_accuracy_known": 0.7760188149729238, + "macro_accuracy_all": 0.6604260262269301, + "macro_accuracy_known": 0.6813090626293627, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7764495225102319, + "micro_accuracy_known": 0.7764495225102319, + "macro_accuracy_all": 0.7728971632770847, + "macro_accuracy_known": 0.7728971632770847, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9423090040927694, + "micro_accuracy_known": 0.9423090040927694, + "macro_accuracy_all": 0.8353711166095457, + "macro_accuracy_known": 0.8353711166095457, + "abstention_coverage": 1.0 + } + }, + "macro_f1_all": 0.19998360830548284, + "scores": { + "all": { + "accuracy": { + "0": 0.6604260262269301, + "1": 0.7728971632770847, + "2": 0.8353711166095457 + }, + "precision": { + "0": 0.220093475997043, + "1": 0.26145460355851485, + "2": 0.24311183116521895 + }, + "recall": { + "0": 0.6604260262269301, + "1": 0.7728971632770847, + "2": 0.8353711166095457 + }, + "f1": { + "0": 0.19998360830548284, + "1": 0.25527668172822016, + "2": 0.2512650593074731 + }, + "micro_accuracy": { + "0": 0.669594133697135, + "1": 0.7764495225102319, + "2": 0.9423090040927694 + }, + "theilU": { + "0": 0.9298644970123321, + "1": 0.9304037751304223, + "2": 0.858730608498533 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.6813090626293627, + "1": 0.7728971632770847, + "2": 0.8353711166095457 + }, + "precision": { + "0": 0.22455003199982063, + "1": 0.26145460355851485, + "2": 0.24311183116521895 + }, + "recall": { + "0": 0.6813090626293627, + "1": 0.7728971632770847, + "2": 0.8353711166095457 + }, + "f1": { + "0": 0.20496609487323514, + "1": 0.25527668172822016, + "2": 0.2512650593074731 + }, + "micro_accuracy": { + "0": 0.7760188149729238, + "1": 0.7764495225102319, + "2": 0.9423090040927694 + }, + "theilU": { + "0": 0.9324736395684865, + "1": 0.9304037751304223, + "2": 0.858730608498533 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + }, + "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", + "sample_ids_sha256": "51a9e4ae7818a96f935527a984a61f4fd31e43f60987ca23792f2bcafd27631a", + "list_sha256": "df66152ba29ba979b32741db4a0dc7c85db18fa65eac5602ca4aab702343de90" + }, + { + "model": "v2", + "preset": "full", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.5936050477489768, + "micro_accuracy_known": 0.6879520929681016, + "macro_accuracy_all": 0.5720627970250876, + "macro_accuracy_known": 0.5901517392235093, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7285129604365621, + "micro_accuracy_known": 0.7285129604365621, + "macro_accuracy_all": 0.7168278641037727, + "macro_accuracy_known": 0.7168278641037727, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9265006821282401, + "micro_accuracy_known": 0.9265006821282401, + "macro_accuracy_all": 0.8069699178640561, + "macro_accuracy_known": 0.8069699178640561, + "abstention_coverage": 1.0 + } + }, + "macro_f1_all": 0.08990868448899282, + "scores": { + "all": { + "accuracy": { + "0": 0.5720627970250876, + "1": 0.7168278641037727, + "2": 0.8069699178640561 + }, + "precision": { + "0": 0.1100618404698789, + "1": 0.1327201662316462, + "2": 0.19682625488877242 + }, + "recall": { + "0": 0.5720627970250876, + "1": 0.7168278641037727, + "2": 0.8069699178640561 + }, + "f1": { + "0": 0.08990868448899282, + "1": 0.12210675669894289, + "2": 0.20522430973656694 + }, + "micro_accuracy": { + "0": 0.5936050477489768, + "1": 0.7285129604365621, + "2": 0.9265006821282401 + }, + "theilU": { + "0": 0.9424989337241723, + "1": 0.9364867523141058, + "2": 0.8320049778627998 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.5901517392235093, + "1": 0.7168278641037727, + "2": 0.8069699178640561 + }, + "precision": { + "0": 0.11296990063684895, + "1": 0.1327201662316462, + "2": 0.19682625488877242 + }, + "recall": { + "0": 0.5901517392235093, + "1": 0.7168278641037727, + "2": 0.8069699178640561 + }, + "f1": { + "0": 0.09231932892005533, + "1": 0.12210675669894289, + "2": 0.20522430973656694 + }, + "micro_accuracy": { + "0": 0.6879520929681016, + "1": 0.7285129604365621, + "2": 0.9265006821282401 + }, + "theilU": { + "0": 0.9472050810666933, + "1": 0.9364867523141058, + "2": 0.8320049778627998 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + }, + "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", + "sample_ids_sha256": "51a9e4ae7818a96f935527a984a61f4fd31e43f60987ca23792f2bcafd27631a", + "list_sha256": "8a256b140c3ec3389329e6f3cb6c4d50e1634c49907a9caef099cdfd5c378ca5" + }, + { + "model": "torch", + "precision": "fp16", + "preset": "north_europe", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.7078274215552524, + "micro_accuracy_known": 0.8203288667536266, + "macro_accuracy_all": 0.7124755690715492, + "macro_accuracy_known": 0.7350044408208473, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58639, + "list_coverage": 0.9999829467939972, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7936903137789905, + "micro_accuracy_known": 0.7937038489742322, + "macro_accuracy_all": 0.8053483819748223, + "macro_accuracy_known": 0.8078572554389183, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9296896316507504, + "micro_accuracy_known": 0.9296896316507504, + "macro_accuracy_all": 0.8105098078966045, + "macro_accuracy_known": 0.8105098078966045, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.7124755690715492, + "1": 0.8053483819748223, + "2": 0.8105098078966045 + }, + "precision": { + "0": 0.2634270457338045, + "1": 0.31893660877341173, + "2": 0.27535126159560075 + }, + "recall": { + "0": 0.7124755690715492, + "1": 0.8053483819748223, + "2": 0.8105098078966045 + }, + "f1": { + "0": 0.25428952382168735, + "1": 0.3204124099108478, + "2": 0.2804463369346697 + }, + "micro_accuracy": { + "0": 0.7078274215552524, + "1": 0.7936903137789905, + "2": 0.9296896316507504 + }, + "theilU": { + "0": 0.928300449968092, + "1": 0.9269683891259273, + "2": 0.848717056770075 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7350044408208473, + "1": 0.8078572554389183, + "2": 0.8105098078966045 + }, + "precision": { + "0": 0.2676065928162877, + "1": 0.31896401442542444, + "2": 0.27535126159560075 + }, + "recall": { + "0": 0.7350044408208473, + "1": 0.8078572554389183, + "2": 0.8105098078966045 + }, + "f1": { + "0": 0.2606923077861283, + "1": 0.32088253381207055, + "2": 0.2804463369346697 + }, + "micro_accuracy": { + "0": 0.8203288667536266, + "1": 0.7937038489742322, + "2": 0.9296896316507504 + }, + "theilU": { + "0": 0.9313351406548803, + "1": 0.9269818797430123, + "2": 0.848717056770075 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + }, + { + "model": "torch", + "precision": "fp16", + "preset": "europe", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.6894270122783083, + "micro_accuracy_known": 0.7990039131981501, + "macro_accuracy_all": 0.6904573601499047, + "macro_accuracy_known": 0.7122900039491111, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7794167803547067, + "micro_accuracy_known": 0.7794167803547067, + "macro_accuracy_all": 0.7927569371584571, + "macro_accuracy_known": 0.7927569371584571, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9285300136425648, + "micro_accuracy_known": 0.9285300136425648, + "macro_accuracy_all": 0.8061547662632332, + "macro_accuracy_known": 0.8061547662632332, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.6904573601499047, + "1": 0.7927569371584571, + "2": 0.8061547662632332 + }, + "precision": { + "0": 0.21308377178370788, + "1": 0.2577674325030351, + "2": 0.2517251364434932 + }, + "recall": { + "0": 0.6904573601499047, + "1": 0.7927569371584571, + "2": 0.8061547662632332 + }, + "f1": { + "0": 0.19974835307971503, + "1": 0.25521877922468866, + "2": 0.2555840946637753 + }, + "micro_accuracy": { + "0": 0.6894270122783083, + "1": 0.7794167803547067, + "2": 0.9285300136425648 + }, + "theilU": { + "0": 0.9327685730735747, + "1": 0.9303872077924281, + "2": 0.8414042795502794 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7122900039491111, + "1": 0.7927569371584571, + "2": 0.8061547662632332 + }, + "precision": { + "0": 0.21751022464426337, + "1": 0.2577674325030351, + "2": 0.2517251364434932 + }, + "recall": { + "0": 0.7122900039491111, + "1": 0.7927569371584571, + "2": 0.8061547662632332 + }, + "f1": { + "0": 0.2052193214139764, + "1": 0.25521877922468866, + "2": 0.2555840946637753 + }, + "micro_accuracy": { + "0": 0.7990039131981501, + "1": 0.7794167803547067, + "2": 0.9285300136425648 + }, + "theilU": { + "0": 0.9362130669456851, + "1": 0.9303872077924281, + "2": 0.8414042795502794 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + }, + { + "model": "torch", + "precision": "fp16", + "preset": "full", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.5842087312414734, + "micro_accuracy_known": 0.6770623344796237, + "macro_accuracy_all": 0.5800914186056899, + "macro_accuracy_known": 0.5984342302612058, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7057128240109141, + "micro_accuracy_known": 0.7057128240109141, + "macro_accuracy_all": 0.7129759960732965, + "macro_accuracy_known": 0.7129759960732965, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9029502046384721, + "micro_accuracy_known": 0.9029502046384721, + "macro_accuracy_all": 0.784246040298466, + "macro_accuracy_known": 0.784246040298466, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.5800914186056899, + "1": 0.7129759960732965, + "2": 0.784246040298466 + }, + "precision": { + "0": 0.11941327816354223, + "1": 0.1394431837512301, + "2": 0.1882961794945315 + }, + "recall": { + "0": 0.5800914186056899, + "1": 0.7129759960732965, + "2": 0.784246040298466 + }, + "f1": { + "0": 0.09729142790239681, + "1": 0.1268067151804599, + "2": 0.19361355430273816 + }, + "micro_accuracy": { + "0": 0.5842087312414734, + "1": 0.7057128240109141, + "2": 0.9029502046384721 + }, + "theilU": { + "0": 0.9380984507134764, + "1": 0.9278203586503335, + "2": 0.8029884477926725 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.5984342302612058, + "1": 0.7129759960732965, + "2": 0.784246040298466 + }, + "precision": { + "0": 0.12352484541958572, + "1": 0.1394431837512301, + "2": 0.1882961794945315 + }, + "recall": { + "0": 0.5984342302612058, + "1": 0.7129759960732965, + "2": 0.784246040298466 + }, + "f1": { + "0": 0.10067516090358233, + "1": 0.1268067151804599, + "2": 0.19361355430273816 + }, + "micro_accuracy": { + "0": 0.6770623344796237, + "1": 0.7057128240109141, + "2": 0.9029502046384721 + }, + "theilU": { + "0": 0.9436338812191157, + "1": 0.9278203586503335, + "2": 0.8029884477926725 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + }, + { + "model": "torch", + "precision": "fp16", + "preset": "north_europe_v3", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.7031548431105048, + "micro_accuracy_known": 0.8149136329499189, + "macro_accuracy_all": 0.704628249754435, + "macro_accuracy_known": 0.7269089849245357, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7888472032742155, + "micro_accuracy_known": 0.7888472032742155, + "macro_accuracy_all": 0.8000993660812793, + "macro_accuracy_known": 0.8000993660812793, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9288540245566167, + "micro_accuracy_known": 0.9288540245566167, + "macro_accuracy_all": 0.8066151835359162, + "macro_accuracy_known": 0.8066151835359162, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.704628249754435, + "1": 0.8000993660812793, + "2": 0.8066151835359162 + }, + "precision": { + "0": 0.24730856379330513, + "1": 0.30404516864512815, + "2": 0.26911334290120537 + }, + "recall": { + "0": 0.704628249754435, + "1": 0.8000993660812793, + "2": 0.8066151835359162 + }, + "f1": { + "0": 0.2368364750172347, + "1": 0.30405829620707303, + "2": 0.27317213148165537 + }, + "micro_accuracy": { + "0": 0.7031548431105048, + "1": 0.7888472032742155, + "2": 0.9288540245566167 + }, + "theilU": { + "0": 0.9297081356830714, + "1": 0.9278811825938204, + "2": 0.8463131556985152 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7269089849245357, + "1": 0.8000993660812793, + "2": 0.8066151835359162 + }, + "precision": { + "0": 0.2516551965945558, + "1": 0.30404516864512815, + "2": 0.26911334290120537 + }, + "recall": { + "0": 0.7269089849245357, + "1": 0.8000993660812793, + "2": 0.8066151835359162 + }, + "f1": { + "0": 0.24302911458287843, + "1": 0.30405829620707303, + "2": 0.27317213148165537 + }, + "micro_accuracy": { + "0": 0.8149136329499189, + "1": 0.7888472032742155, + "2": 0.9288540245566167 + }, + "theilU": { + "0": 0.9329238752080722, + "1": 0.9278811825938204, + "2": 0.8463131556985152 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + }, + { + "model": "torch", + "precision": "fp16", + "preset": "europe_v3", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.6879945429740791, + "micro_accuracy_known": 0.7973437685284004, + "macro_accuracy_all": 0.6886240058738285, + "macro_accuracy_known": 0.7103986779963212, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7779331514324693, + "micro_accuracy_known": 0.7779331514324693, + "macro_accuracy_all": 0.7907596138745981, + "macro_accuracy_known": 0.7907596138745981, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9252899045020464, + "micro_accuracy_known": 0.9252899045020464, + "macro_accuracy_all": 0.804801469829159, + "macro_accuracy_known": 0.804801469829159, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.6886240058738285, + "1": 0.7907596138745981, + "2": 0.804801469829159 + }, + "precision": { + "0": 0.21178593938637336, + "1": 0.25597447312765065, + "2": 0.25018741937505296 + }, + "recall": { + "0": 0.6886240058738285, + "1": 0.7907596138745981, + "2": 0.804801469829159 + }, + "f1": { + "0": 0.1978902721150327, + "1": 0.25283249885833836, + "2": 0.25394065720716125 + }, + "micro_accuracy": { + "0": 0.6879945429740791, + "1": 0.7779331514324693, + "2": 0.9252899045020464 + }, + "theilU": { + "0": 0.9323203923796567, + "1": 0.9297196214314329, + "2": 0.8382838670363196 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7103986779963212, + "1": 0.7907596138745981, + "2": 0.804801469829159 + }, + "precision": { + "0": 0.2164221653533803, + "1": 0.25597447312765065, + "2": 0.25018741937505296 + }, + "recall": { + "0": 0.7103986779963212, + "1": 0.7907596138745981, + "2": 0.804801469829159 + }, + "f1": { + "0": 0.20351606400355202, + "1": 0.25283249885833836, + "2": 0.25394065720716125 + }, + "micro_accuracy": { + "0": 0.7973437685284004, + "1": 0.7779331514324693, + "2": 0.9252899045020464 + }, + "theilU": { + "0": 0.9362292436999937, + "1": 0.9297196214314329, + "2": 0.8382838670363196 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + }, + { + "model": "onnx", + "precision": "tf32", + "preset": "north_europe", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.7078444747612551, + "micro_accuracy_known": 0.8203486303806474, + "macro_accuracy_all": 0.7123551106111988, + "macro_accuracy_known": 0.7348801733973236, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58639, + "list_coverage": 0.9999829467939972, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7936221009549795, + "micro_accuracy_known": 0.7936356349869541, + "macro_accuracy_all": 0.805001260196705, + "macro_accuracy_known": 0.8075090522845452, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9298601637107776, + "micro_accuracy_known": 0.9298601637107776, + "macro_accuracy_all": 0.8106416408810809, + "macro_accuracy_known": 0.8106416408810809, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.7123551106111988, + "1": 0.805001260196705, + "2": 0.8106416408810809 + }, + "precision": { + "0": 0.2634302800489512, + "1": 0.3188298295664697, + "2": 0.27563597431734277 + }, + "recall": { + "0": 0.7123551106111988, + "1": 0.805001260196705, + "2": 0.8106416408810809 + }, + "f1": { + "0": 0.25432102340018437, + "1": 0.3212342539755369, + "2": 0.28076917349510716 + }, + "micro_accuracy": { + "0": 0.7078444747612551, + "1": 0.7936221009549795, + "2": 0.9298601637107776 + }, + "theilU": { + "0": 0.9282787583085454, + "1": 0.9270081304640697, + "2": 0.8488811049574605 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7348801733973236, + "1": 0.8075090522845452, + "2": 0.8106416408810809 + }, + "precision": { + "0": 0.26759865685833206, + "1": 0.31885723521848236, + "2": 0.27563597431734277 + }, + "recall": { + "0": 0.7348801733973236, + "1": 0.8075090522845452, + "2": 0.8106416408810809 + }, + "f1": { + "0": 0.26071387372659355, + "1": 0.32170684925385246, + "2": 0.28076917349510716 + }, + "micro_accuracy": { + "0": 0.8203486303806474, + "1": 0.7936356349869541, + "2": 0.9298601637107776 + }, + "theilU": { + "0": 0.931297601666784, + "1": 0.9270216229111814, + "2": 0.8488811049574605 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + }, + { + "model": "onnx", + "precision": "tf32", + "preset": "europe", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.6894952251023192, + "micro_accuracy_known": 0.7990829677062334, + "macro_accuracy_all": 0.6906260019361401, + "macro_accuracy_known": 0.712463978281947, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7794338335607094, + "micro_accuracy_known": 0.7794338335607094, + "macro_accuracy_all": 0.7928148275159873, + "macro_accuracy_known": 0.7928148275159873, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.928581173260573, + "micro_accuracy_known": 0.928581173260573, + "macro_accuracy_all": 0.8063031248841592, + "macro_accuracy_known": 0.8063031248841592, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.6906260019361401, + "1": 0.7928148275159873, + "2": 0.8063031248841592 + }, + "precision": { + "0": 0.21297537840475272, + "1": 0.25814705246049136, + "2": 0.25176260717979065 + }, + "recall": { + "0": 0.6906260019361401, + "1": 0.7928148275159873, + "2": 0.8063031248841592 + }, + "f1": { + "0": 0.19968247097445052, + "1": 0.2556792223856105, + "2": 0.25564879210539354 + }, + "micro_accuracy": { + "0": 0.6894952251023192, + "1": 0.7794338335607094, + "2": 0.928581173260573 + }, + "theilU": { + "0": 0.9327107183368355, + "1": 0.9303898466600729, + "2": 0.8413915880115065 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.712463978281947, + "1": 0.7928148275159873, + "2": 0.8063031248841592 + }, + "precision": { + "0": 0.21739674629675512, + "1": 0.25814705246049136, + "2": 0.25176260717979065 + }, + "recall": { + "0": 0.712463978281947, + "1": 0.7928148275159873, + "2": 0.8063031248841592 + }, + "f1": { + "0": 0.2051505331795797, + "1": 0.2556792223856105, + "2": 0.25564879210539354 + }, + "micro_accuracy": { + "0": 0.7990829677062334, + "1": 0.7794338335607094, + "2": 0.928581173260573 + }, + "theilU": { + "0": 0.9360902428349954, + "1": 0.9303898466600729, + "2": 0.8413915880115065 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + }, + { + "model": "onnx", + "precision": "tf32", + "preset": "full", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.5842769440654844, + "micro_accuracy_known": 0.677141388987707, + "macro_accuracy_all": 0.5803258635150937, + "macro_accuracy_known": 0.5986760884483774, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7058321964529332, + "micro_accuracy_known": 0.7058321964529332, + "macro_accuracy_all": 0.7132927172304062, + "macro_accuracy_known": 0.7132927172304062, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9030695770804912, + "micro_accuracy_known": 0.9030695770804912, + "macro_accuracy_all": 0.7842061134551048, + "macro_accuracy_known": 0.7842061134551048, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.5803258635150937, + "1": 0.7132927172304062, + "2": 0.7842061134551048 + }, + "precision": { + "0": 0.11940183392320727, + "1": 0.139506013324115, + "2": 0.18845606769929624 + }, + "recall": { + "0": 0.5803258635150937, + "1": 0.7132927172304062, + "2": 0.7842061134551048 + }, + "f1": { + "0": 0.09730444648358827, + "1": 0.12688882216850472, + "2": 0.1937730887900641 + }, + "micro_accuracy": { + "0": 0.5842769440654844, + "1": 0.7058321964529332, + "2": 0.9030695770804912 + }, + "theilU": { + "0": 0.9381877433883671, + "1": 0.9279129375668055, + "2": 0.8032163508659165 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.5986760884483774, + "1": 0.7132927172304062, + "2": 0.7842061134551048 + }, + "precision": { + "0": 0.12359009712973944, + "1": 0.139506013324115, + "2": 0.18845606769929624 + }, + "recall": { + "0": 0.5986760884483774, + "1": 0.7132927172304062, + "2": 0.7842061134551048 + }, + "f1": { + "0": 0.10075026693576739, + "1": 0.12688882216850472, + "2": 0.1937730887900641 + }, + "micro_accuracy": { + "0": 0.677141388987707, + "1": 0.7058321964529332, + "2": 0.9030695770804912 + }, + "theilU": { + "0": 0.9437018925013999, + "1": 0.9279129375668055, + "2": 0.8032163508659165 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + }, + { + "model": "onnx", + "precision": "tf32", + "preset": "north_europe_v3", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.703206002728513, + "micro_accuracy_known": 0.8149729238309814, + "macro_accuracy_all": 0.70490721102182, + "macro_accuracy_known": 0.7271967671015613, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7889324693042292, + "micro_accuracy_known": 0.7889324693042292, + "macro_accuracy_all": 0.7998011634423278, + "macro_accuracy_known": 0.7998011634423278, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9289392905866303, + "micro_accuracy_known": 0.9289392905866303, + "macro_accuracy_all": 0.8066719936597678, + "macro_accuracy_known": 0.8066719936597678, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.70490721102182, + "1": 0.7998011634423278, + "2": 0.8066719936597678 + }, + "precision": { + "0": 0.24693597388838318, + "1": 0.304018206726156, + "2": 0.26915209911986615 + }, + "recall": { + "0": 0.70490721102182, + "1": 0.7998011634423278, + "2": 0.8066719936597678 + }, + "f1": { + "0": 0.23654830838429805, + "1": 0.3048604148769131, + "2": 0.2732530547620374 + }, + "micro_accuracy": { + "0": 0.703206002728513, + "1": 0.7889324693042292, + "2": 0.9289392905866303 + }, + "theilU": { + "0": 0.9297283074523651, + "1": 0.9279871144012297, + "2": 0.8462225486926431 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7271967671015613, + "1": 0.7998011634423278, + "2": 0.8066719936597678 + }, + "precision": { + "0": 0.2512627097909782, + "1": 0.304018206726156, + "2": 0.26915209911986615 + }, + "recall": { + "0": 0.7271967671015613, + "1": 0.7998011634423278, + "2": 0.8066719936597678 + }, + "f1": { + "0": 0.24271540486034088, + "1": 0.3048604148769131, + "2": 0.2732530547620374 + }, + "micro_accuracy": { + "0": 0.8149729238309814, + "1": 0.7889324693042292, + "2": 0.9289392905866303 + }, + "theilU": { + "0": 0.9329324973505538, + "1": 0.9279871144012297, + "2": 0.8462225486926431 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + }, + { + "model": "onnx", + "precision": "tf32", + "preset": "europe_v3", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.6880627557980901, + "micro_accuracy_known": 0.7974228230364837, + "macro_accuracy_all": 0.6887960648645841, + "macro_accuracy_known": 0.710576177587575, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7779672578444747, + "micro_accuracy_known": 0.7779672578444747, + "macro_accuracy_all": 0.7908120470589387, + "macro_accuracy_known": 0.7908120470589387, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9254774897680764, + "micro_accuracy_known": 0.9254774897680764, + "macro_accuracy_all": 0.805164255187583, + "macro_accuracy_known": 0.805164255187583, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.6887960648645841, + "1": 0.7908120470589387, + "2": 0.805164255187583 + }, + "precision": { + "0": 0.21168953424574674, + "1": 0.2560315293300679, + "2": 0.25025960445781553 + }, + "recall": { + "0": 0.6887960648645841, + "1": 0.7908120470589387, + "2": 0.805164255187583 + }, + "f1": { + "0": 0.19783273588838454, + "1": 0.2529767781457853, + "2": 0.2540572988243291 + }, + "micro_accuracy": { + "0": 0.6880627557980901, + "1": 0.7779672578444747, + "2": 0.9254774897680764 + }, + "theilU": { + "0": 0.9322918377735964, + "1": 0.9297404742905871, + "2": 0.838470274037207 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.710576177587575, + "1": 0.7908120470589387, + "2": 0.805164255187583 + }, + "precision": { + "0": 0.21632075786236368, + "1": 0.2560315293300679, + "2": 0.25025960445781553 + }, + "recall": { + "0": 0.710576177587575, + "1": 0.7908120470589387, + "2": 0.805164255187583 + }, + "f1": { + "0": 0.2034558161613722, + "1": 0.2529767781457853, + "2": 0.2540572988243291 + }, + "micro_accuracy": { + "0": 0.7974228230364837, + "1": 0.7779672578444747, + "2": 0.9254774897680764 + }, + "theilU": { + "0": 0.9361375391213514, + "1": 0.9297404742905871, + "2": 0.838470274037207 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + }, + { + "model": "torch-tta", + "precision": "fp16", + "preset": "north_europe", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.7318724420190996, + "micro_accuracy_known": 0.8481955808529982, + "macro_accuracy_all": 0.7394942213066358, + "macro_accuracy_known": 0.7628774377906401, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58639, + "list_coverage": 0.9999829467939972, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.8158594815825375, + "micro_accuracy_known": 0.8158733948396119, + "macro_accuracy_all": 0.8303908427754559, + "macro_accuracy_known": 0.8329777301361272, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9476637107776262, + "micro_accuracy_known": 0.9476637107776262, + "macro_accuracy_all": 0.857176291043506, + "macro_accuracy_known": 0.857176291043506, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.7394942213066358, + "1": 0.8303908427754559, + "2": 0.857176291043506 + }, + "precision": { + "0": 0.3045154257441182, + "1": 0.3505904633143813, + "2": 0.2854195568227899 + }, + "recall": { + "0": 0.7394942213066358, + "1": 0.8303908427754559, + "2": 0.857176291043506 + }, + "f1": { + "0": 0.29354423320755, + "1": 0.353208999336762, + "2": 0.2967297720520215 + }, + "micro_accuracy": { + "0": 0.7318724420190996, + "1": 0.8158594815825375, + "2": 0.9476637107776262 + }, + "theilU": { + "0": 0.9406189646961585, + "1": 0.9419385064155936, + "2": 0.8801009206026382 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7628774377906401, + "1": 0.8329777301361272, + "2": 0.857176291043506 + }, + "precision": { + "0": 0.31130376488612155, + "1": 0.3506444171806519, + "2": 0.2854195568227899 + }, + "recall": { + "0": 0.7628774377906401, + "1": 0.8329777301361272, + "2": 0.857176291043506 + }, + "f1": { + "0": 0.30320298151377173, + "1": 0.353759732820872, + "2": 0.2967297720520215 + }, + "micro_accuracy": { + "0": 0.8481955808529982, + "1": 0.8158733948396119, + "2": 0.9476637107776262 + }, + "theilU": { + "0": 0.9430153185488799, + "1": 0.9419514702058922, + "2": 0.8801009206026382 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + }, + { + "model": "torch-tta", + "precision": "fp16", + "preset": "europe", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.7156548431105048, + "micro_accuracy_known": 0.829400371556188, + "macro_accuracy_all": 0.718077691416366, + "macro_accuracy_known": 0.7407837053741958, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.804024556616644, + "micro_accuracy_known": 0.804024556616644, + "macro_accuracy_all": 0.8293085814992414, + "macro_accuracy_known": 0.8293085814992414, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9472032742155525, + "micro_accuracy_known": 0.9472032742155525, + "macro_accuracy_all": 0.8563266688215283, + "macro_accuracy_known": 0.8563266688215283, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.718077691416366, + "1": 0.8293085814992414, + "2": 0.8563266688215283 + }, + "precision": { + "0": 0.2429470820689653, + "1": 0.28385324239562887, + "2": 0.2653959371196337 + }, + "recall": { + "0": 0.718077691416366, + "1": 0.8293085814992414, + "2": 0.8563266688215283 + }, + "f1": { + "0": 0.22757154948143235, + "1": 0.28200483380977825, + "2": 0.27529463404409366 + }, + "micro_accuracy": { + "0": 0.7156548431105048, + "1": 0.804024556616644, + "2": 0.9472032742155525 + }, + "theilU": { + "0": 0.944413998137816, + "1": 0.9441314851902275, + "2": 0.87467980248827 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7407837053741958, + "1": 0.8293085814992414, + "2": 0.8563266688215283 + }, + "precision": { + "0": 0.24775255855583658, + "1": 0.28385324239562887, + "2": 0.2653959371196337 + }, + "recall": { + "0": 0.7407837053741958, + "1": 0.8293085814992414, + "2": 0.8563266688215283 + }, + "f1": { + "0": 0.23384828180126666, + "1": 0.28200483380977825, + "2": 0.27529463404409366 + }, + "micro_accuracy": { + "0": 0.829400371556188, + "1": 0.804024556616644, + "2": 0.9472032742155525 + }, + "theilU": { + "0": 0.9470276431963978, + "1": 0.9441314851902275, + "2": 0.87467980248827 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + }, + { + "model": "torch-tta", + "precision": "fp16", + "preset": "full", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.6262619372442019, + "micro_accuracy_known": 0.7257994387129926, + "macro_accuracy_all": 0.6173142553970794, + "macro_accuracy_known": 0.6368340737495563, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7451739427012278, + "micro_accuracy_known": 0.7451739427012278, + "macro_accuracy_all": 0.7510468819168783, + "macro_accuracy_known": 0.7510468819168783, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9275068212824011, + "micro_accuracy_known": 0.9275068212824011, + "macro_accuracy_all": 0.8145939456784087, + "macro_accuracy_known": 0.8145939456784087, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.6173142553970794, + "1": 0.7510468819168783, + "2": 0.8145939456784087 + }, + "precision": { + "0": 0.13138339990786518, + "1": 0.15667958535770124, + "2": 0.21261476235886365 + }, + "recall": { + "0": 0.6173142553970794, + "1": 0.7510468819168783, + "2": 0.8145939456784087 + }, + "f1": { + "0": 0.11096250944892755, + "1": 0.14574565079611349, + "2": 0.2183082373459294 + }, + "micro_accuracy": { + "0": 0.6262619372442019, + "1": 0.7451739427012278, + "2": 0.9275068212824011 + }, + "theilU": { + "0": 0.9508870287194768, + "1": 0.9443425774705536, + "2": 0.8448686499703433 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.6368340737495563, + "1": 0.7510468819168783, + "2": 0.8145939456784087 + }, + "precision": { + "0": 0.13564757725358406, + "1": 0.15667958535770124, + "2": 0.21261476235886365 + }, + "recall": { + "0": 0.6368340737495563, + "1": 0.7510468819168783, + "2": 0.8145939456784087 + }, + "f1": { + "0": 0.11490466732444428, + "1": 0.14574565079611349, + "2": 0.2183082373459294 + }, + "micro_accuracy": { + "0": 0.7257994387129926, + "1": 0.7451739427012278, + "2": 0.9275068212824011 + }, + "theilU": { + "0": 0.9551144723608224, + "1": 0.9443425774705536, + "2": 0.8448686499703433 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + }, + { + "model": "torch-tta", + "precision": "fp16", + "preset": "north_europe_v3", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.727575034106412, + "micro_accuracy_known": 0.8432151468437488, + "macro_accuracy_all": 0.7309514872176466, + "macro_accuracy_known": 0.7540645777225524, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.8116132332878582, + "micro_accuracy_known": 0.8116132332878582, + "macro_accuracy_all": 0.8277669590594472, + "macro_accuracy_known": 0.8277669590594472, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9469304229195089, + "micro_accuracy_known": 0.9469304229195089, + "macro_accuracy_all": 0.8346576161414683, + "macro_accuracy_known": 0.8346576161414683, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.7309514872176466, + "1": 0.8277669590594472, + "2": 0.8346576161414683 + }, + "precision": { + "0": 0.2836262314662556, + "1": 0.3334921424445981, + "2": 0.27245649076352374 + }, + "recall": { + "0": 0.7309514872176466, + "1": 0.8277669590594472, + "2": 0.8346576161414683 + }, + "f1": { + "0": 0.2712624922442485, + "1": 0.3337289068163522, + "2": 0.27776074959879515 + }, + "micro_accuracy": { + "0": 0.727575034106412, + "1": 0.8116132332878582, + "2": 0.9469304229195089 + }, + "theilU": { + "0": 0.9419128470540503, + "1": 0.9427305687063423, + "2": 0.8781254078254616 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7540645777225524, + "1": 0.8277669590594472, + "2": 0.8346576161414683 + }, + "precision": { + "0": 0.28991904052186485, + "1": 0.3334921424445981, + "2": 0.27245649076352374 + }, + "recall": { + "0": 0.7540645777225524, + "1": 0.8277669590594472, + "2": 0.8346576161414683 + }, + "f1": { + "0": 0.2798828148296063, + "1": 0.3337289068163522, + "2": 0.27776074959879515 + }, + "micro_accuracy": { + "0": 0.8432151468437488, + "1": 0.8116132332878582, + "2": 0.9469304229195089 + }, + "theilU": { + "0": 0.9444028505698309, + "1": 0.9427305687063423, + "2": 0.8781254078254616 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + }, + { + "model": "torch-tta", + "precision": "fp16", + "preset": "europe_v3", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.7144270122783083, + "micro_accuracy_known": 0.8279773904106882, + "macro_accuracy_all": 0.7166090539144668, + "macro_accuracy_known": 0.7392686287418017, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.8029331514324693, + "micro_accuracy_known": 0.8029331514324693, + "macro_accuracy_all": 0.8268147188498062, + "macro_accuracy_known": 0.8268147188498062, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9449693042291951, + "micro_accuracy_known": 0.9449693042291951, + "macro_accuracy_all": 0.8335264497898153, + "macro_accuracy_known": 0.8335264497898153, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.7166090539144668, + "1": 0.8268147188498062, + "2": 0.8335264497898153 + }, + "precision": { + "0": 0.24106168297359762, + "1": 0.2834023411805787, + "2": 0.2678618299824677 + }, + "recall": { + "0": 0.7166090539144668, + "1": 0.8268147188498062, + "2": 0.8335264497898153 + }, + "f1": { + "0": 0.2253220208562535, + "1": 0.2803332160378765, + "2": 0.2729237571963636 + }, + "micro_accuracy": { + "0": 0.7144270122783083, + "1": 0.8029331514324693, + "2": 0.9449693042291951 + }, + "theilU": { + "0": 0.944113343442953, + "1": 0.9437905591277826, + "2": 0.8721280753438848 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7392686287418017, + "1": 0.8268147188498062, + "2": 0.8335264497898153 + }, + "precision": { + "0": 0.24579080574948112, + "1": 0.2834023411805787, + "2": 0.2678618299824677 + }, + "recall": { + "0": 0.7392686287418017, + "1": 0.8268147188498062, + "2": 0.8335264497898153 + }, + "f1": { + "0": 0.23148434630648257, + "1": 0.2803332160378765, + "2": 0.2729237571963636 + }, + "micro_accuracy": { + "0": 0.8279773904106882, + "1": 0.8029331514324693, + "2": 0.9449693042291951 + }, + "theilU": { + "0": 0.9469432695851171, + "1": 0.9437905591277826, + "2": 0.8721280753438848 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + }, + { + "model": "onnx-tta", + "precision": "tf32", + "preset": "north_europe", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.7319406548431105, + "micro_accuracy_known": 0.8482746353610815, + "macro_accuracy_all": 0.7398002960321982, + "macro_accuracy_known": 0.7631931907683942, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58639, + "list_coverage": 0.9999829467939972, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.8158594815825375, + "micro_accuracy_known": 0.8158733948396119, + "macro_accuracy_all": 0.8304111700220072, + "macro_accuracy_known": 0.832998120707434, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9476978171896316, + "micro_accuracy_known": 0.9476978171896316, + "macro_accuracy_all": 0.8573137738657032, + "macro_accuracy_known": 0.8573137738657032, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.7398002960321982, + "1": 0.8304111700220072, + "2": 0.8573137738657032 + }, + "precision": { + "0": 0.30560509035336597, + "1": 0.35093141039439896, + "2": 0.2853888893805401 + }, + "recall": { + "0": 0.7398002960321982, + "1": 0.8304111700220072, + "2": 0.8573137738657032 + }, + "f1": { + "0": 0.29443636070255313, + "1": 0.35360877971608107, + "2": 0.2967466662087087 + }, + "micro_accuracy": { + "0": 0.7319406548431105, + "1": 0.8158594815825375, + "2": 0.9476978171896316 + }, + "theilU": { + "0": 0.9406019271139017, + "1": 0.9419354628293558, + "2": 0.8801548412074369 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7631931907683942, + "1": 0.832998120707434, + "2": 0.8573137738657032 + }, + "precision": { + "0": 0.31216254534687643, + "1": 0.3509854434880796, + "2": 0.2853888893805401 + }, + "recall": { + "0": 0.7631931907683942, + "1": 0.832998120707434, + "2": 0.8573137738657032 + }, + "f1": { + "0": 0.30388844140667753, + "1": 0.35416090691553337, + "2": 0.2967466662087087 + }, + "micro_accuracy": { + "0": 0.8482746353610815, + "1": 0.8158733948396119, + "2": 0.9476978171896316 + }, + "theilU": { + "0": 0.9430067345925155, + "1": 0.9419484264795018, + "2": 0.8801548412074369 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + }, + { + "model": "onnx-tta", + "precision": "tf32", + "preset": "europe", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.715637789904502, + "micro_accuracy_known": 0.8293806079291671, + "macro_accuracy_all": 0.7184729389376375, + "macro_accuracy_known": 0.741191450840804, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.8039733969986358, + "micro_accuracy_known": 0.8039733969986358, + "macro_accuracy_all": 0.8297204053618472, + "macro_accuracy_known": 0.8297204053618472, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9473226466575716, + "micro_accuracy_known": 0.9473226466575716, + "macro_accuracy_all": 0.8563774763022645, + "macro_accuracy_known": 0.8563774763022645, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.7184729389376375, + "1": 0.8297204053618472, + "2": 0.8563774763022645 + }, + "precision": { + "0": 0.24372650581041436, + "1": 0.2845980888173239, + "2": 0.26558303107014986 + }, + "recall": { + "0": 0.7184729389376375, + "1": 0.8297204053618472, + "2": 0.8563774763022645 + }, + "f1": { + "0": 0.22830834852570925, + "1": 0.28278130491705644, + "2": 0.27545873472892135 + }, + "micro_accuracy": { + "0": 0.715637789904502, + "1": 0.8039733969986358, + "2": 0.9473226466575716 + }, + "theilU": { + "0": 0.9443265822955385, + "1": 0.9441410149358417, + "2": 0.8748020450770366 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.741191450840804, + "1": 0.8297204053618472, + "2": 0.8563774763022645 + }, + "precision": { + "0": 0.24838776385935504, + "1": 0.2845980888173239, + "2": 0.26558303107014986 + }, + "recall": { + "0": 0.741191450840804, + "1": 0.8297204053618472, + "2": 0.8563774763022645 + }, + "f1": { + "0": 0.23446467584989356, + "1": 0.28278130491705644, + "2": 0.27545873472892135 + }, + "micro_accuracy": { + "0": 0.8293806079291671, + "1": 0.8039733969986358, + "2": 0.9473226466575716 + }, + "theilU": { + "0": 0.9469465408012699, + "1": 0.9441410149358417, + "2": 0.8748020450770366 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + }, + { + "model": "onnx-tta", + "precision": "tf32", + "preset": "full", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.6261425648021828, + "micro_accuracy_known": 0.7256610933238468, + "macro_accuracy_all": 0.6174475873691395, + "macro_accuracy_known": 0.6369716217523534, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7451568894952251, + "micro_accuracy_known": 0.7451568894952251, + "macro_accuracy_all": 0.7510220833093467, + "macro_accuracy_known": 0.7510220833093467, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9275238744884038, + "micro_accuracy_known": 0.9275238744884038, + "macro_accuracy_all": 0.8145187008621275, + "macro_accuracy_known": 0.8145187008621275, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.6174475873691395, + "1": 0.7510220833093467, + "2": 0.8145187008621275 + }, + "precision": { + "0": 0.13160765012851372, + "1": 0.15697625283734776, + "2": 0.2126777336514247 + }, + "recall": { + "0": 0.6174475873691395, + "1": 0.7510220833093467, + "2": 0.8145187008621275 + }, + "f1": { + "0": 0.11115707584052233, + "1": 0.14605018175665105, + "2": 0.21830567803410023 + }, + "micro_accuracy": { + "0": 0.6261425648021828, + "1": 0.7451568894952251, + "2": 0.9275238744884038 + }, + "theilU": { + "0": 0.9508514561757678, + "1": 0.9443370637895987, + "2": 0.8446531494151259 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.6369716217523534, + "1": 0.7510220833093467, + "2": 0.8145187008621275 + }, + "precision": { + "0": 0.13589123854540153, + "1": 0.15697625283734776, + "2": 0.2126777336514247 + }, + "recall": { + "0": 0.6369716217523534, + "1": 0.7510220833093467, + "2": 0.8145187008621275 + }, + "f1": { + "0": 0.11511288629482906, + "1": 0.14605018175665105, + "2": 0.21830567803410023 + }, + "micro_accuracy": { + "0": 0.7256610933238468, + "1": 0.7451568894952251, + "2": 0.9275238744884038 + }, + "theilU": { + "0": 0.9550252355096324, + "1": 0.9443370637895987, + "2": 0.8446531494151259 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + }, + { + "model": "onnx-tta", + "precision": "tf32", + "preset": "north_europe_v3", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.7276261937244202, + "micro_accuracy_known": 0.8432744377248113, + "macro_accuracy_all": 0.731249034719374, + "macro_accuracy_known": 0.7543715338409351, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.8115961800818554, + "micro_accuracy_known": 0.8115961800818554, + "macro_accuracy_all": 0.8277501260203206, + "macro_accuracy_known": 0.8277501260203206, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9469815825375171, + "micro_accuracy_known": 0.9469815825375171, + "macro_accuracy_all": 0.8346677390702247, + "macro_accuracy_known": 0.8346677390702247, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.731249034719374, + "1": 0.8277501260203206, + "2": 0.8346677390702247 + }, + "precision": { + "0": 0.28460861709588325, + "1": 0.3338821217092504, + "2": 0.27237041484255897 + }, + "recall": { + "0": 0.731249034719374, + "1": 0.8277501260203206, + "2": 0.8346677390702247 + }, + "f1": { + "0": 0.2720585446067734, + "1": 0.334119400397056, + "2": 0.27775524799008994 + }, + "micro_accuracy": { + "0": 0.7276261937244202, + "1": 0.8115961800818554, + "2": 0.9469815825375171 + }, + "theilU": { + "0": 0.9418634558142434, + "1": 0.94272656175805, + "2": 0.8782213541986774 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7543715338409351, + "1": 0.8277501260203206, + "2": 0.8346677390702247 + }, + "precision": { + "0": 0.29070206429216244, + "1": 0.3338821217092504, + "2": 0.27237041484255897 + }, + "recall": { + "0": 0.7543715338409351, + "1": 0.8277501260203206, + "2": 0.8346677390702247 + }, + "f1": { + "0": 0.2805010841484588, + "1": 0.334119400397056, + "2": 0.27775524799008994 + }, + "micro_accuracy": { + "0": 0.8432744377248113, + "1": 0.8115961800818554, + "2": 0.9469815825375171 + }, + "theilU": { + "0": 0.9443618486684395, + "1": 0.94272656175805, + "2": 0.8782213541986774 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + }, + { + "model": "onnx-tta", + "precision": "tf32", + "preset": "europe_v3", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.7144270122783083, + "micro_accuracy_known": 0.8279773904106882, + "macro_accuracy_all": 0.7170052282421303, + "macro_accuracy_known": 0.7396773303209329, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.8028819918144611, + "micro_accuracy_known": 0.8028819918144611, + "macro_accuracy_all": 0.827226542712412, + "macro_accuracy_known": 0.827226542712412, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9451909959072305, + "micro_accuracy_known": 0.9451909959072305, + "macro_accuracy_all": 0.833675211353022, + "macro_accuracy_known": 0.833675211353022, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.7170052282421303, + "1": 0.827226542712412, + "2": 0.833675211353022 + }, + "precision": { + "0": 0.2418596950431791, + "1": 0.2835769897348559, + "2": 0.2679310249615683 + }, + "recall": { + "0": 0.7170052282421303, + "1": 0.827226542712412, + "2": 0.833675211353022 + }, + "f1": { + "0": 0.22605849020602678, + "1": 0.2809063608793024, + "2": 0.2730381805189929 + }, + "micro_accuracy": { + "0": 0.7144270122783083, + "1": 0.8028819918144611, + "2": 0.9451909959072305 + }, + "theilU": { + "0": 0.9440413851876268, + "1": 0.9437976224349767, + "2": 0.8724817175710519 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7396773303209329, + "1": 0.827226542712412, + "2": 0.833675211353022 + }, + "precision": { + "0": 0.24644726654619223, + "1": 0.2835769897348559, + "2": 0.2679310249615683 + }, + "recall": { + "0": 0.7396773303209329, + "1": 0.827226542712412, + "2": 0.833675211353022 + }, + "f1": { + "0": 0.23210275866823382, + "1": 0.2809063608793024, + "2": 0.2730381805189929 + }, + "micro_accuracy": { + "0": 0.8279773904106882, + "1": 0.8028819918144611, + "2": 0.9451909959072305 + }, + "theilU": { + "0": 0.9468751626112113, + "1": 0.9437976224349767, + "2": 0.8724817175710519 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + } + ], + "speed": [ + { + "model": "v2", + "device": "cpu", + "preset": "europe", + "batch": 1, + "median_ms": 779.0169740001147, + "p95_ms": 844.8682549969817, + "trial_min_ms": 765.1125749980565, + "trial_max_ms": 795.3343949993723, + "images_per_second": 1.2836690770230288, + "trial_min_ips": 1.2573327725890557, + "trial_max_ips": 1.3069972088781054 + }, + { + "model": "v2", + "device": "cpu", + "preset": "europe", + "batch": 8, + "median_ms": 5850.575989999925, + "p95_ms": 5944.596474997525, + "trial_min_ms": 5746.777247000864, + "trial_max_ms": 5879.015160000563, + "images_per_second": 1.3673867348572124, + "trial_min_ips": 1.3607721331338145, + "trial_max_ips": 1.392084581697516 + }, + { + "model": "v2", + "device": "cpu", + "preset": "full", + "batch": 1, + "median_ms": 786.2400800004252, + "p95_ms": 878.9685310002824, + "trial_min_ms": 761.7254659999162, + "trial_max_ms": 859.430982000049, + "images_per_second": 1.271876142462057, + "trial_min_ips": 1.1635605661699813, + "trial_max_ips": 1.3128089379121664 + }, + { + "model": "v2", + "device": "cpu", + "preset": "full", + "batch": 8, + "median_ms": 5863.136789001146, + "p95_ms": 6006.966568002099, + "trial_min_ms": 5482.436258000234, + "trial_max_ms": 5984.705701001076, + "images_per_second": 1.3644573353648284, + "trial_min_ips": 1.3367407521245065, + "trial_max_ips": 1.459205291867464 + }, + { + "model": "v2", + "device": "cpu", + "preset": "north_europe", + "batch": 1, + "median_ms": 796.1964119967888, + "p95_ms": 855.2797960001044, + "trial_min_ms": 780.1338070021302, + "trial_max_ms": 827.1140280012332, + "images_per_second": 1.255971497651051, + "trial_min_ips": 1.2090231408800491, + "trial_max_ips": 1.2818313871600613 + }, + { + "model": "v2", + "device": "cpu", + "preset": "north_europe", + "batch": 8, + "median_ms": 5765.8902689981915, + "p95_ms": 5890.259110001352, + "trial_min_ms": 5732.572058997903, + "trial_max_ms": 5802.123346998997, + "images_per_second": 1.387470039624944, + "trial_min_ips": 1.3788055719528611, + "trial_max_ips": 1.395534136800447 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "europe", + "batch": 1, + "median_ms": 21.484739001607522, + "p95_ms": 29.487491003237665, + "trial_min_ms": 20.258914999431, + "trial_max_ms": 25.015052997332532, + "images_per_second": 46.5446659568533, + "trial_min_ips": 39.975929697475934, + "trial_max_ips": 49.3609850294592 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "europe", + "batch": 8, + "median_ms": 184.61432399999467, + "p95_ms": 205.47707299920148, + "trial_min_ms": 180.04209799983073, + "trial_max_ms": 199.17996799995308, + "images_per_second": 43.33358228476481, + "trial_min_ips": 40.164681621004604, + "trial_max_ips": 44.43405230707499 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "europe", + "batch": 32, + "median_ms": 386.83066299927304, + "p95_ms": 396.4832749989, + "trial_min_ms": 371.3045529984811, + "trial_max_ms": 390.7396550021076, + "images_per_second": 82.72353528515431, + "trial_min_ips": 81.89596215881235, + "trial_max_ips": 86.18262216712141 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "full", + "batch": 1, + "median_ms": 24.006794999877457, + "p95_ms": 30.195898001693422, + "trial_min_ms": 22.45696499812766, + "trial_max_ms": 26.05628300079843, + "images_per_second": 41.654873130924166, + "trial_min_ips": 38.378459428359655, + "trial_max_ips": 44.52961475797707 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "full", + "batch": 8, + "median_ms": 182.16871000186075, + "p95_ms": 210.70991599845001, + "trial_min_ms": 174.61328799981857, + "trial_max_ms": 198.96718300151406, + "images_per_second": 43.915335404846886, + "trial_min_ips": 40.20763564783004, + "trial_max_ips": 45.81552808288171 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "full", + "batch": 32, + "median_ms": 384.66329000220867, + "p95_ms": 399.98923299935996, + "trial_min_ms": 375.0903689979168, + "trial_max_ms": 393.06417599800625, + "images_per_second": 83.18963839730134, + "trial_min_ips": 81.41164205247317, + "trial_max_ips": 85.31277432020048 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "north_europe", + "batch": 1, + "median_ms": 22.129188000690192, + "p95_ms": 28.487998999480624, + "trial_min_ms": 21.078697001939872, + "trial_max_ms": 23.72169799855328, + "images_per_second": 45.18918633475439, + "trial_min_ips": 42.155498314706946, + "trial_max_ips": 47.44126261257847 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "north_europe", + "batch": 8, + "median_ms": 178.38607100202353, + "p95_ms": 190.12071899851435, + "trial_min_ms": 173.67241900137742, + "trial_max_ms": 178.83818200061796, + "images_per_second": 44.84655082688184, + "trial_min_ips": 44.73317672158151, + "trial_max_ips": 46.063733355015636 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "north_europe", + "batch": 32, + "median_ms": 383.29957200039644, + "p95_ms": 395.5446789987036, + "trial_min_ms": 365.05659100293997, + "trial_max_ms": 387.3802570014959, + "images_per_second": 83.48561370156422, + "trial_min_ips": 82.60617164048303, + "trial_max_ips": 87.65764209895416 + }, + { + "model": "onnx", + "device": "cpu", + "preset": "europe", + "batch": 1, + "images_per_second": 10.347520653711559, + "trial_min_ips": 9.449655199391756, + "trial_max_ips": 10.812101015895683 + }, + { + "model": "onnx", + "device": "cpu", + "preset": "europe", + "batch": 8, + "images_per_second": 10.52727820435193, + "trial_min_ips": 10.355297439131876, + "trial_max_ips": 10.65744350194588 + }, + { + "model": "onnx", + "device": "cpu", + "preset": "full", + "batch": 1, + "images_per_second": 9.872555672482052, + "trial_min_ips": 9.739427177477546, + "trial_max_ips": 9.922526205578436 + }, + { + "model": "onnx", + "device": "cpu", + "preset": "full", + "batch": 8, + "images_per_second": 10.733118494348869, + "trial_min_ips": 10.56679692428927, + "trial_max_ips": 10.763173933865195 + }, + { + "model": "onnx", + "device": "cpu", + "preset": "north_europe", + "batch": 1, + "images_per_second": 10.076177412511877, + "trial_min_ips": 9.60250986545771, + "trial_max_ips": 11.353111385069457 + }, + { + "model": "onnx", + "device": "cpu", + "preset": "north_europe", + "batch": 8, + "images_per_second": 10.80969808387532, + "trial_min_ips": 10.570796505012908, + "trial_max_ips": 11.102500782573706 + }, + { + "model": "onnx", + "device": "cuda:0", + "preset": "europe", + "batch": 1, + "images_per_second": 44.90623220673182, + "trial_min_ips": 42.40445111731503, + "trial_max_ips": 49.82361940898542 + }, + { + "model": "onnx", + "device": "cuda:0", + "preset": "europe", + "batch": 8, + "images_per_second": 116.40713454105308, + "trial_min_ips": 110.31223298386196, + "trial_max_ips": 118.96776369619226 + }, + { + "model": "onnx", + "device": "cuda:0", + "preset": "europe", + "batch": 32, + "images_per_second": 111.8052747339908, + "trial_min_ips": 106.42003928900061, + "trial_max_ips": 116.63412022082476 + }, + { + "model": "onnx", + "device": "cuda:0", + "preset": "full", + "batch": 1, + "images_per_second": 35.75541977678956, + "trial_min_ips": 31.557083953590467, + "trial_max_ips": 40.90267960770997 + }, + { + "model": "onnx", + "device": "cuda:0", + "preset": "full", + "batch": 8, + "images_per_second": 88.21443464701524, + "trial_min_ips": 77.52627983150244, + "trial_max_ips": 100.02293651107108 + }, + { + "model": "onnx", + "device": "cuda:0", + "preset": "full", + "batch": 32, + "images_per_second": 91.63275276401218, + "trial_min_ips": 89.34198103795067, + "trial_max_ips": 95.64585858346106 + }, + { + "model": "onnx", + "device": "cuda:0", + "preset": "north_europe", + "batch": 1, + "images_per_second": 46.70691057432178, + "trial_min_ips": 41.11976015977681, + "trial_max_ips": 49.97505245293308 + }, + { + "model": "onnx", + "device": "cuda:0", + "preset": "north_europe", + "batch": 8, + "images_per_second": 114.11464013589269, + "trial_min_ips": 107.34320509031689, + "trial_max_ips": 115.69758682083888 + }, + { + "model": "onnx", + "device": "cuda:0", + "preset": "north_europe", + "batch": 32, + "images_per_second": 111.27186960045317, + "trial_min_ips": 104.95228749163802, + "trial_max_ips": 118.23092267562323 + }, + { + "model": "torch", + "device": "cpu", + "preset": "europe", + "batch": 1, + "images_per_second": 6.172664042716186, + "trial_min_ips": 5.627297914052408, + "trial_max_ips": 6.828606710641469 + }, + { + "model": "torch", + "device": "cpu", + "preset": "europe", + "batch": 8, + "images_per_second": 8.025987344454904, + "trial_min_ips": 7.857073739438581, + "trial_max_ips": 8.619013897827697 + }, + { + "model": "torch", + "device": "cpu", + "preset": "full", + "batch": 1, + "images_per_second": 6.041894204300364, + "trial_min_ips": 5.731894027251844, + "trial_max_ips": 6.9101794079583225 + }, + { + "model": "torch", + "device": "cpu", + "preset": "full", + "batch": 8, + "images_per_second": 8.113175364445661, + "trial_min_ips": 7.88456031532421, + "trial_max_ips": 8.7687304782976 + }, + { + "model": "torch", + "device": "cpu", + "preset": "north_europe", + "batch": 1, + "images_per_second": 5.695199765540664, + "trial_min_ips": 5.453077416494641, + "trial_max_ips": 6.445979740616736 + }, + { + "model": "torch", + "device": "cpu", + "preset": "north_europe", + "batch": 8, + "images_per_second": 7.839122148750051, + "trial_min_ips": 6.663612338884881, + "trial_max_ips": 9.242605998110642 + }, + { + "model": "torch", + "device": "cuda:0", + "preset": "europe", + "batch": 1, + "images_per_second": 28.83568538372905, + "trial_min_ips": 22.725586903841528, + "trial_max_ips": 31.210095944870968 + }, + { + "model": "torch", + "device": "cuda:0", + "preset": "europe", + "batch": 8, + "images_per_second": 125.82158545438949, + "trial_min_ips": 119.8725311439004, + "trial_max_ips": 129.27090257523392 + }, + { + "model": "torch", + "device": "cuda:0", + "preset": "europe", + "batch": 32, + "images_per_second": 130.40128489292832, + "trial_min_ips": 127.11801504041274, + "trial_max_ips": 137.8194417258879 + }, + { + "model": "torch", + "device": "cuda:0", + "preset": "full", + "batch": 1, + "images_per_second": 25.264118675077682, + "trial_min_ips": 18.90083587705983, + "trial_max_ips": 26.779560009971277 + }, + { + "model": "torch", + "device": "cuda:0", + "preset": "full", + "batch": 8, + "images_per_second": 99.47971239936308, + "trial_min_ips": 93.39931185101867, + "trial_max_ips": 108.8844098127304 + }, + { + "model": "torch", + "device": "cuda:0", + "preset": "full", + "batch": 32, + "images_per_second": 114.91888491933366, + "trial_min_ips": 113.26886770155022, + "trial_max_ips": 117.92808882913475 + }, + { + "model": "torch", + "device": "cuda:0", + "preset": "north_europe", + "batch": 1, + "images_per_second": 29.838347764184938, + "trial_min_ips": 28.22843215050167, + "trial_max_ips": 32.58000010949372 + }, + { + "model": "torch", + "device": "cuda:0", + "preset": "north_europe", + "batch": 8, + "images_per_second": 126.73135226080092, + "trial_min_ips": 125.63045484784077, + "trial_max_ips": 134.262307658797 + }, + { + "model": "torch", + "device": "cuda:0", + "preset": "north_europe", + "batch": 32, + "images_per_second": 136.24360110822388, + "trial_min_ips": 134.1900518259908, + "trial_max_ips": 142.79165057586877 + }, + { + "model": "onnx-tta", + "device": "cpu", + "preset": "europe", + "batch": 1, + "images_per_second": 3.61616895023553, + "trial_min_ips": 3.309972079957367, + "trial_max_ips": 3.8287960728282546 + }, + { + "model": "onnx-tta", + "device": "cpu", + "preset": "europe", + "batch": 8, + "images_per_second": 3.7831526647157214, + "trial_min_ips": 3.6048412478956644, + "trial_max_ips": 4.082189305392044 + }, + { + "model": "onnx-tta", + "device": "cpu", + "preset": "full", + "batch": 1, + "images_per_second": 3.426725175627511, + "trial_min_ips": 3.2045152080974075, + "trial_max_ips": 3.767653836566608 + }, + { + "model": "onnx-tta", + "device": "cpu", + "preset": "full", + "batch": 8, + "images_per_second": 3.7782707990925255, + "trial_min_ips": 3.5553114857944736, + "trial_max_ips": 3.9089525024116125 + }, + { + "model": "onnx-tta", + "device": "cpu", + "preset": "north_europe", + "batch": 1, + "images_per_second": 3.561175286432469, + "trial_min_ips": 3.3503635775897, + "trial_max_ips": 3.886995328284915 + }, + { + "model": "onnx-tta", + "device": "cpu", + "preset": "north_europe", + "batch": 8, + "images_per_second": 3.6563573228202517, + "trial_min_ips": 3.5873525040903167, + "trial_max_ips": 3.7129079750674214 + }, + { + "model": "onnx-tta", + "device": "cuda:0", + "preset": "europe", + "batch": 1, + "images_per_second": 17.212647840331343, + "trial_min_ips": 16.034761308791516, + "trial_max_ips": 19.639395943527212 + }, + { + "model": "onnx-tta", + "device": "cuda:0", + "preset": "europe", + "batch": 8, + "images_per_second": 40.674625059153556, + "trial_min_ips": 39.791527214723196, + "trial_max_ips": 41.396650116654875 + }, + { + "model": "onnx-tta", + "device": "cuda:0", + "preset": "europe", + "batch": 32, + "images_per_second": 39.53910119809616, + "trial_min_ips": 38.76763306113256, + "trial_max_ips": 39.9450587171705 + }, + { + "model": "onnx-tta", + "device": "cuda:0", + "preset": "full", + "batch": 1, + "images_per_second": 16.988359085008785, + "trial_min_ips": 16.483448739171447, + "trial_max_ips": 18.538046291746998 + }, + { + "model": "onnx-tta", + "device": "cuda:0", + "preset": "full", + "batch": 8, + "images_per_second": 37.88373034283034, + "trial_min_ips": 37.111930975686874, + "trial_max_ips": 38.69510247278414 + }, + { + "model": "onnx-tta", + "device": "cuda:0", + "preset": "full", + "batch": 32, + "images_per_second": 36.95819763023284, + "trial_min_ips": 36.37204595255475, + "trial_max_ips": 37.630858561833776 + }, + { + "model": "onnx-tta", + "device": "cuda:0", + "preset": "north_europe", + "batch": 1, + "images_per_second": 16.806574961016018, + "trial_min_ips": 16.162127342042172, + "trial_max_ips": 18.97217735757236 + }, + { + "model": "onnx-tta", + "device": "cuda:0", + "preset": "north_europe", + "batch": 8, + "images_per_second": 41.71013731980595, + "trial_min_ips": 40.925373232178444, + "trial_max_ips": 43.18896638486406 + }, + { + "model": "onnx-tta", + "device": "cuda:0", + "preset": "north_europe", + "batch": 32, + "images_per_second": 39.4235302663773, + "trial_min_ips": 39.06681027295766, + "trial_max_ips": 40.37331819506116 + }, + { + "model": "torch-tta", + "device": "cpu", + "preset": "europe", + "batch": 1, + "images_per_second": 2.287118613138587, + "trial_min_ips": 2.1851129300562864, + "trial_max_ips": 2.482005528177684 + }, + { + "model": "torch-tta", + "device": "cpu", + "preset": "europe", + "batch": 8, + "images_per_second": 2.7049487075161327, + "trial_min_ips": 2.622606402663152, + "trial_max_ips": 2.898235536271152 + }, + { + "model": "torch-tta", + "device": "cpu", + "preset": "full", + "batch": 1, + "images_per_second": 2.278081582463175, + "trial_min_ips": 2.0602624500227362, + "trial_max_ips": 2.6011388935773456 + }, + { + "model": "torch-tta", + "device": "cpu", + "preset": "full", + "batch": 8, + "images_per_second": 2.8280494369344615, + "trial_min_ips": 2.659458409424666, + "trial_max_ips": 2.9373585340775206 + }, + { + "model": "torch-tta", + "device": "cpu", + "preset": "north_europe", + "batch": 1, + "images_per_second": 2.288530218830576, + "trial_min_ips": 2.155690346260477, + "trial_max_ips": 2.3532725837100927 + }, + { + "model": "torch-tta", + "device": "cpu", + "preset": "north_europe", + "batch": 8, + "images_per_second": 2.632002994220812, + "trial_min_ips": 2.6257158336095183, + "trial_max_ips": 2.667819183229088 + }, + { + "model": "torch-tta", + "device": "cuda:0", + "preset": "europe", + "batch": 1, + "images_per_second": 9.741307784970735, + "trial_min_ips": 6.800286401032054, + "trial_max_ips": 10.34051919058783 + }, + { + "model": "torch-tta", + "device": "cuda:0", + "preset": "europe", + "batch": 8, + "images_per_second": 43.69933938962156, + "trial_min_ips": 43.241157850181594, + "trial_max_ips": 44.366008299944276 + }, + { + "model": "torch-tta", + "device": "cuda:0", + "preset": "europe", + "batch": 32, + "images_per_second": 49.69719614883462, + "trial_min_ips": 47.84022965943082, + "trial_max_ips": 51.650194666057004 + }, + { + "model": "torch-tta", + "device": "cuda:0", + "preset": "full", + "batch": 1, + "images_per_second": 9.0244513904008, + "trial_min_ips": 6.641401535478677, + "trial_max_ips": 10.127693298641633 + }, + { + "model": "torch-tta", + "device": "cuda:0", + "preset": "full", + "batch": 8, + "images_per_second": 39.62892269354411, + "trial_min_ips": 39.00789960569874, + "trial_max_ips": 41.17620445680809 + }, + { + "model": "torch-tta", + "device": "cuda:0", + "preset": "full", + "batch": 32, + "images_per_second": 45.352411694806676, + "trial_min_ips": 43.615200272239626, + "trial_max_ips": 46.34152205515856 + }, + { + "model": "torch-tta", + "device": "cuda:0", + "preset": "north_europe", + "batch": 1, + "images_per_second": 8.487978285416776, + "trial_min_ips": 6.5431811352091485, + "trial_max_ips": 10.45855732845488 + }, + { + "model": "torch-tta", + "device": "cuda:0", + "preset": "north_europe", + "batch": 8, + "images_per_second": 42.707279353003095, + "trial_min_ips": 42.11852472915729, + "trial_max_ips": 44.92890559371275 + }, + { + "model": "torch-tta", + "device": "cuda:0", + "preset": "north_europe", + "batch": 32, + "images_per_second": 50.43291019095829, + "trial_min_ips": 50.35437457596695, + "trial_max_ips": 51.25424002515836 + } + ], + "resources": [ + { + "model": "torch", + "device": "cuda:0", + "rss_mib": 2511.96484375, + "load_first_seconds": 42.957718928999384, + "allocated_mib": 597.53125 + }, + { + "model": "onnx", + "device": "cuda:0", + "rss_mib": 1618.86328125, + "load_first_seconds": 1.4639206969950465, + "allocated_mib": null + }, + { + "model": "torch", + "device": "cpu", + "rss_mib": 1618.265625, + "load_first_seconds": 42.038206298006116, + "allocated_mib": null + }, + { + "model": "onnx", + "device": "cpu", + "rss_mib": 688.5390625, + "load_first_seconds": 0.3738440049928613, + "allocated_mib": null + }, + { + "model": "v2", + "device": "cpu", + "rss_mib": 4122.8125, + "load_first_seconds": 209.39651592600057, + "allocated_mib": null + }, + { + "model": "v2", + "device": "cuda:0", + "rss_mib": 4122.58203125, + "load_first_seconds": 209.60287212600088, + "allocated_mib": 1935.630859375 + }, + { + "model": "torch-tta", + "device": "cuda:0", + "rss_mib": 2442.46875, + "load_first_seconds": 44.04954374099907, + "allocated_mib": 597.46044921875 + }, + { + "model": "onnx-tta", + "device": "cuda:0", + "rss_mib": 1628.76171875, + "load_first_seconds": 1.7244672899978468, + "allocated_mib": null + }, + { + "model": "torch-tta", + "device": "cpu", + "rss_mib": 1638.64453125, + "load_first_seconds": 43.274880386001314, + "allocated_mib": null + }, + { + "model": "onnx-tta", + "device": "cpu", + "rss_mib": 671.12890625, + "load_first_seconds": 0.5310090099956142, + "allocated_mib": null + } + ], + "sources_sha256": { + "docs/assets/mambo-accelerated-comparison.json": "c42b21e6b3e0c337457e3d9df9e4b30c02c5611dd1f2ec8fa66efe444dae941a", + "docs/assets/mambo-release-comparison.json": "b54cb1a592c2410913fc883818bf4f496a8d3a12a3da552b8b352a180d428414", + "local-evidence/mambo-default-tta-quality/torch-cuda-0-prediction/north_europe/metrics.json": "b9ebcaae7cd3eee5fffd79cd48d42ff185efb051455afc24f047dcb2819e6be2", + "local-evidence/mambo-default-tta-quality/torch-cuda-0-prediction/europe/metrics.json": "281d586dfb7712042d3cd3449fc68871c2f77b7ce1dab5b433e34ad49bef5664", + "local-evidence/mambo-default-tta-quality/torch-cuda-0-prediction/full/metrics.json": "97b38f29832145e64ca8b55327247b43fdbc3b98125b94cdeed8c2a559be8ce7", + "local-evidence/mambo-default-tta-quality/torch-cuda-0-prediction/north_europe_v3/metrics.json": "bea5465b6f1f12be1227bbc98f07a8c01783c7bce9e0bcfa9487226ec746f2e9", + "local-evidence/mambo-default-tta-quality/torch-cuda-0-prediction/europe_v3/metrics.json": "a02355914aac8e5a4245b32d1a739c6688b53002d8ab7eb63d997592c5f92037", + "local-evidence/mambo-default-tta-quality/torch-cuda-0-prediction/report.json": "be8c81bb5a12d8d516186f9c9e3978f957f4cce4c19fa4865e666e837308d067", + "local-evidence/mambo-default-tta-quality/onnx-cuda-0-prediction/north_europe/metrics.json": "f40b179ee0f5bd123954558df09632ed54acec0abdc4d6db187d71f9dc543c81", + "local-evidence/mambo-default-tta-quality/onnx-cuda-0-prediction/europe/metrics.json": "22eab90ec022c85a5843852f6122540f1a78e7031c4273e3be117a5046d224da", + "local-evidence/mambo-default-tta-quality/onnx-cuda-0-prediction/full/metrics.json": "a2c20f05e02d1cab911b9074f0ea9588b8ead8189fe97b0d8495cc040388f33c", + "local-evidence/mambo-default-tta-quality/onnx-cuda-0-prediction/north_europe_v3/metrics.json": "d67e2c451d69e2c68bc8ebcb533b187e7bfdb29fd052947275eec62bf4b91d99", + "local-evidence/mambo-default-tta-quality/onnx-cuda-0-prediction/europe_v3/metrics.json": "8c5bf2a1c6f39b53ee74ee2a73e9dff30d3346cee4c0875c20b15c61244347bb", + "local-evidence/mambo-default-tta-quality/onnx-cuda-0-prediction/report.json": "bb65c66c618f03b1309d4fceeea73a7d02452f2c95ffb29ac5e3c58d44760cde", + "local-evidence/mambo-default-tta-performance/trial-0-torch-cuda-0/report.json": "551ac51fdfd7447fa91d108fa0d8623d529d7cefd935c140eb6dc68a1d9093bb", + "local-evidence/mambo-default-tta-performance/trial-0-onnx-cuda-0/report.json": "317bc0f4dc02e1c54c023403ae50428dba5f8777aef46da7d63cf9fb2dc38ce8", + "local-evidence/mambo-default-tta-performance/trial-0-torch-cpu/report.json": "d8dc923857471613ba463397854b1826374a2d8c4ee39d31e128685aea96dcc9", + "local-evidence/mambo-default-tta-performance/trial-0-onnx-cpu/report.json": "c87fb33ad7465ed4a58dfdb0a1e8d788c42e93aa7df624b7395d5ac2c9158907", + "local-evidence/mambo-default-tta-performance/trial-1-onnx-cpu/report.json": "e6cc87602a81abc6ebed118da401fc2bb82b7646b4b452ff6ae2a4193b807251", + "local-evidence/mambo-default-tta-performance/trial-1-torch-cpu/report.json": "064f6a0db3534ddc0c49760b639141a45b575f37d833e06e3e3819d6ec42895e", + "local-evidence/mambo-default-tta-performance/trial-1-onnx-cuda-0/report.json": "54de36559b35f5c96f6a14692e22e903b531d20cc8dd73d5d221f6f8dcbc9202", + "local-evidence/mambo-default-tta-performance/trial-1-torch-cuda-0/report.json": "5df9b9cd792f2f1e95a4d48b8905f7c16436da05dbf7e8581c3b71692b47058c", + "local-evidence/mambo-default-tta-performance/trial-2-torch-cuda-0/report.json": "f72cce7a227ad057d6f0cc15b2fb7b7e2285aadda79c1af9b139ec46dcfa3eb0", + "local-evidence/mambo-default-tta-performance/trial-2-onnx-cuda-0/report.json": "dda47be5a2b4a819b8a569f554c04ef024791597b05e20571070de4c6f7c3f29", + "local-evidence/mambo-default-tta-performance/trial-2-torch-cpu/report.json": "9fd5b141fa709121a29fa458b566a4b12a4dffa6776a62656f54574d6a6f102a", + "local-evidence/mambo-default-tta-performance/trial-2-onnx-cpu/report.json": "8b4ebcaf066548faf433bf14baa89615508acbf6aef39b1846f3f4b713d8d2ed" + }, + "bundle_sha256": "c576f53f404575bb9301de16427dd4feee9b03e48292180e184e0385052ee49b", + "manifest_sha256": "04e56e9189933b6758b192f587e296e49012fd935baa00c04ca91e0a3ce3795f", + "timing_bank_sha256": "aa2aea4ecd76bbce46a38a4787f632763fe60b6296d27aa6a2ed633c59e15b63" +} diff --git a/docs/assets/mambo-defaults-metrics.csv b/docs/assets/mambo-defaults-metrics.csv new file mode 100644 index 0000000..c6c316f --- /dev/null +++ b/docs/assets/mambo-defaults-metrics.csv @@ -0,0 +1,139 @@ +variant,preset,scope,rank,images,accuracy,precision,recall,f1,micro_accuracy,theilU,coverage +v2,north_europe,all,species,58640,0.6852063621352951,0.2742104381019442,0.6852063621352951,0.25753800338546967,0.68712482946794,0.9259639612074944,1.0 +v2,north_europe,all,genus,58640,0.7890053947525617,0.3188818859364664,0.7890053947525617,0.3169285074452811,0.7922919508867667,0.9286450152404832,1.0 +v2,north_europe,all,family,58640,0.8440271040813301,0.26007435892237385,0.8440271040813301,0.2691037692533918,0.9449351978171896,0.865726913911594,1.0 +v2,north_europe,known,species,50598,0.706872966471589,0.27934832747314936,0.706872966471589,0.26468747200295195,0.7963358235503379,0.9284675700829689,1.0 +v2,north_europe,known,genus,58639,0.7914633554838781,0.3189462554934523,0.7914633554838781,0.3174198331740771,0.7923054622350313,0.9286569914847851,1.0 +v2,north_europe,known,family,58640,0.8440271040813301,0.26007435892237385,0.8440271040813301,0.2691037692533918,0.9449351978171896,0.865726913911594,1.0 +v2,europe,all,species,58640,0.6604260262269301,0.220093475997043,0.6604260262269301,0.19998360830548284,0.669594133697135,0.9298644970123321,1.0 +v2,europe,all,genus,58640,0.7728971632770847,0.26145460355851485,0.7728971632770847,0.25527668172822016,0.7764495225102319,0.9304037751304223,1.0 +v2,europe,all,family,58640,0.8353711166095457,0.24311183116521895,0.8353711166095457,0.2512650593074731,0.9423090040927694,0.858730608498533,1.0 +v2,europe,known,species,50598,0.6813090626293627,0.22455003199982063,0.6813090626293627,0.20496609487323514,0.7760188149729238,0.9324736395684865,1.0 +v2,europe,known,genus,58640,0.7728971632770847,0.26145460355851485,0.7728971632770847,0.25527668172822016,0.7764495225102319,0.9304037751304223,1.0 +v2,europe,known,family,58640,0.8353711166095457,0.24311183116521895,0.8353711166095457,0.2512650593074731,0.9423090040927694,0.858730608498533,1.0 +v2,full,all,species,58640,0.5720627970250876,0.1100618404698789,0.5720627970250876,0.08990868448899282,0.5936050477489768,0.9424989337241723,1.0 +v2,full,all,genus,58640,0.7168278641037727,0.1327201662316462,0.7168278641037727,0.12210675669894289,0.7285129604365621,0.9364867523141058,1.0 +v2,full,all,family,58640,0.8069699178640561,0.19682625488877242,0.8069699178640561,0.20522430973656694,0.9265006821282401,0.8320049778627998,1.0 +v2,full,known,species,50598,0.5901517392235093,0.11296990063684895,0.5901517392235093,0.09231932892005533,0.6879520929681016,0.9472050810666933,1.0 +v2,full,known,genus,58640,0.7168278641037727,0.1327201662316462,0.7168278641037727,0.12210675669894289,0.7285129604365621,0.9364867523141058,1.0 +v2,full,known,family,58640,0.8069699178640561,0.19682625488877242,0.8069699178640561,0.20522430973656694,0.9265006821282401,0.8320049778627998,1.0 +torch,north_europe,all,species,58640,0.7124755690715492,0.2634270457338045,0.7124755690715492,0.25428952382168735,0.7078274215552524,0.928300449968092,1.0 +torch,north_europe,all,genus,58640,0.8053483819748223,0.31893660877341173,0.8053483819748223,0.3204124099108478,0.7936903137789905,0.9269683891259273,1.0 +torch,north_europe,all,family,58640,0.8105098078966045,0.27535126159560075,0.8105098078966045,0.2804463369346697,0.9296896316507504,0.848717056770075,1.0 +torch,north_europe,known,species,50598,0.7350044408208473,0.2676065928162877,0.7350044408208473,0.2606923077861283,0.8203288667536266,0.9313351406548803,1.0 +torch,north_europe,known,genus,58639,0.8078572554389183,0.31896401442542444,0.8078572554389183,0.32088253381207055,0.7937038489742322,0.9269818797430123,1.0 +torch,north_europe,known,family,58640,0.8105098078966045,0.27535126159560075,0.8105098078966045,0.2804463369346697,0.9296896316507504,0.848717056770075,1.0 +torch,europe,all,species,58640,0.6904573601499047,0.21308377178370788,0.6904573601499047,0.19974835307971503,0.6894270122783083,0.9327685730735747,1.0 +torch,europe,all,genus,58640,0.7927569371584571,0.2577674325030351,0.7927569371584571,0.25521877922468866,0.7794167803547067,0.9303872077924281,1.0 +torch,europe,all,family,58640,0.8061547662632332,0.2517251364434932,0.8061547662632332,0.2555840946637753,0.9285300136425648,0.8414042795502794,1.0 +torch,europe,known,species,50598,0.7122900039491111,0.21751022464426337,0.7122900039491111,0.2052193214139764,0.7990039131981501,0.9362130669456851,1.0 +torch,europe,known,genus,58640,0.7927569371584571,0.2577674325030351,0.7927569371584571,0.25521877922468866,0.7794167803547067,0.9303872077924281,1.0 +torch,europe,known,family,58640,0.8061547662632332,0.2517251364434932,0.8061547662632332,0.2555840946637753,0.9285300136425648,0.8414042795502794,1.0 +torch,full,all,species,58640,0.5800914186056899,0.11941327816354223,0.5800914186056899,0.09729142790239681,0.5842087312414734,0.9380984507134764,1.0 +torch,full,all,genus,58640,0.7129759960732965,0.1394431837512301,0.7129759960732965,0.1268067151804599,0.7057128240109141,0.9278203586503335,1.0 +torch,full,all,family,58640,0.784246040298466,0.1882961794945315,0.784246040298466,0.19361355430273816,0.9029502046384721,0.8029884477926725,1.0 +torch,full,known,species,50598,0.5984342302612058,0.12352484541958572,0.5984342302612058,0.10067516090358233,0.6770623344796237,0.9436338812191157,1.0 +torch,full,known,genus,58640,0.7129759960732965,0.1394431837512301,0.7129759960732965,0.1268067151804599,0.7057128240109141,0.9278203586503335,1.0 +torch,full,known,family,58640,0.784246040298466,0.1882961794945315,0.784246040298466,0.19361355430273816,0.9029502046384721,0.8029884477926725,1.0 +torch,north_europe_v3,all,species,58640,0.704628249754435,0.24730856379330513,0.704628249754435,0.2368364750172347,0.7031548431105048,0.9297081356830714,1.0 +torch,north_europe_v3,all,genus,58640,0.8000993660812793,0.30404516864512815,0.8000993660812793,0.30405829620707303,0.7888472032742155,0.9278811825938204,1.0 +torch,north_europe_v3,all,family,58640,0.8066151835359162,0.26911334290120537,0.8066151835359162,0.27317213148165537,0.9288540245566167,0.8463131556985152,1.0 +torch,north_europe_v3,known,species,50598,0.7269089849245357,0.2516551965945558,0.7269089849245357,0.24302911458287843,0.8149136329499189,0.9329238752080722,1.0 +torch,north_europe_v3,known,genus,58640,0.8000993660812793,0.30404516864512815,0.8000993660812793,0.30405829620707303,0.7888472032742155,0.9278811825938204,1.0 +torch,north_europe_v3,known,family,58640,0.8066151835359162,0.26911334290120537,0.8066151835359162,0.27317213148165537,0.9288540245566167,0.8463131556985152,1.0 +torch,europe_v3,all,species,58640,0.6886240058738285,0.21178593938637336,0.6886240058738285,0.1978902721150327,0.6879945429740791,0.9323203923796567,1.0 +torch,europe_v3,all,genus,58640,0.7907596138745981,0.25597447312765065,0.7907596138745981,0.25283249885833836,0.7779331514324693,0.9297196214314329,1.0 +torch,europe_v3,all,family,58640,0.804801469829159,0.25018741937505296,0.804801469829159,0.25394065720716125,0.9252899045020464,0.8382838670363196,1.0 +torch,europe_v3,known,species,50598,0.7103986779963212,0.2164221653533803,0.7103986779963212,0.20351606400355202,0.7973437685284004,0.9362292436999937,1.0 +torch,europe_v3,known,genus,58640,0.7907596138745981,0.25597447312765065,0.7907596138745981,0.25283249885833836,0.7779331514324693,0.9297196214314329,1.0 +torch,europe_v3,known,family,58640,0.804801469829159,0.25018741937505296,0.804801469829159,0.25394065720716125,0.9252899045020464,0.8382838670363196,1.0 +onnx,north_europe,all,species,58640,0.7123551106111988,0.2634302800489512,0.7123551106111988,0.25432102340018437,0.7078444747612551,0.9282787583085454,1.0 +onnx,north_europe,all,genus,58640,0.805001260196705,0.3188298295664697,0.805001260196705,0.3212342539755369,0.7936221009549795,0.9270081304640697,1.0 +onnx,north_europe,all,family,58640,0.8106416408810809,0.27563597431734277,0.8106416408810809,0.28076917349510716,0.9298601637107776,0.8488811049574605,1.0 +onnx,north_europe,known,species,50598,0.7348801733973236,0.26759865685833206,0.7348801733973236,0.26071387372659355,0.8203486303806474,0.931297601666784,1.0 +onnx,north_europe,known,genus,58639,0.8075090522845452,0.31885723521848236,0.8075090522845452,0.32170684925385246,0.7936356349869541,0.9270216229111814,1.0 +onnx,north_europe,known,family,58640,0.8106416408810809,0.27563597431734277,0.8106416408810809,0.28076917349510716,0.9298601637107776,0.8488811049574605,1.0 +onnx,europe,all,species,58640,0.6906260019361401,0.21297537840475272,0.6906260019361401,0.19968247097445052,0.6894952251023192,0.9327107183368355,1.0 +onnx,europe,all,genus,58640,0.7928148275159873,0.25814705246049136,0.7928148275159873,0.2556792223856105,0.7794338335607094,0.9303898466600729,1.0 +onnx,europe,all,family,58640,0.8063031248841592,0.25176260717979065,0.8063031248841592,0.25564879210539354,0.928581173260573,0.8413915880115065,1.0 +onnx,europe,known,species,50598,0.712463978281947,0.21739674629675512,0.712463978281947,0.2051505331795797,0.7990829677062334,0.9360902428349954,1.0 +onnx,europe,known,genus,58640,0.7928148275159873,0.25814705246049136,0.7928148275159873,0.2556792223856105,0.7794338335607094,0.9303898466600729,1.0 +onnx,europe,known,family,58640,0.8063031248841592,0.25176260717979065,0.8063031248841592,0.25564879210539354,0.928581173260573,0.8413915880115065,1.0 +onnx,full,all,species,58640,0.5803258635150937,0.11940183392320727,0.5803258635150937,0.09730444648358827,0.5842769440654844,0.9381877433883671,1.0 +onnx,full,all,genus,58640,0.7132927172304062,0.139506013324115,0.7132927172304062,0.12688882216850472,0.7058321964529332,0.9279129375668055,1.0 +onnx,full,all,family,58640,0.7842061134551048,0.18845606769929624,0.7842061134551048,0.1937730887900641,0.9030695770804912,0.8032163508659165,1.0 +onnx,full,known,species,50598,0.5986760884483774,0.12359009712973944,0.5986760884483774,0.10075026693576739,0.677141388987707,0.9437018925013999,1.0 +onnx,full,known,genus,58640,0.7132927172304062,0.139506013324115,0.7132927172304062,0.12688882216850472,0.7058321964529332,0.9279129375668055,1.0 +onnx,full,known,family,58640,0.7842061134551048,0.18845606769929624,0.7842061134551048,0.1937730887900641,0.9030695770804912,0.8032163508659165,1.0 +onnx,north_europe_v3,all,species,58640,0.70490721102182,0.24693597388838318,0.70490721102182,0.23654830838429805,0.703206002728513,0.9297283074523651,1.0 +onnx,north_europe_v3,all,genus,58640,0.7998011634423278,0.304018206726156,0.7998011634423278,0.3048604148769131,0.7889324693042292,0.9279871144012297,1.0 +onnx,north_europe_v3,all,family,58640,0.8066719936597678,0.26915209911986615,0.8066719936597678,0.2732530547620374,0.9289392905866303,0.8462225486926431,1.0 +onnx,north_europe_v3,known,species,50598,0.7271967671015613,0.2512627097909782,0.7271967671015613,0.24271540486034088,0.8149729238309814,0.9329324973505538,1.0 +onnx,north_europe_v3,known,genus,58640,0.7998011634423278,0.304018206726156,0.7998011634423278,0.3048604148769131,0.7889324693042292,0.9279871144012297,1.0 +onnx,north_europe_v3,known,family,58640,0.8066719936597678,0.26915209911986615,0.8066719936597678,0.2732530547620374,0.9289392905866303,0.8462225486926431,1.0 +onnx,europe_v3,all,species,58640,0.6887960648645841,0.21168953424574674,0.6887960648645841,0.19783273588838454,0.6880627557980901,0.9322918377735964,1.0 +onnx,europe_v3,all,genus,58640,0.7908120470589387,0.2560315293300679,0.7908120470589387,0.2529767781457853,0.7779672578444747,0.9297404742905871,1.0 +onnx,europe_v3,all,family,58640,0.805164255187583,0.25025960445781553,0.805164255187583,0.2540572988243291,0.9254774897680764,0.838470274037207,1.0 +onnx,europe_v3,known,species,50598,0.710576177587575,0.21632075786236368,0.710576177587575,0.2034558161613722,0.7974228230364837,0.9361375391213514,1.0 +onnx,europe_v3,known,genus,58640,0.7908120470589387,0.2560315293300679,0.7908120470589387,0.2529767781457853,0.7779672578444747,0.9297404742905871,1.0 +onnx,europe_v3,known,family,58640,0.805164255187583,0.25025960445781553,0.805164255187583,0.2540572988243291,0.9254774897680764,0.838470274037207,1.0 +torch-tta,north_europe,all,species,58640,0.7394942213066358,0.3045154257441182,0.7394942213066358,0.29354423320755,0.7318724420190996,0.9406189646961585,1.0 +torch-tta,north_europe,all,genus,58640,0.8303908427754559,0.3505904633143813,0.8303908427754559,0.353208999336762,0.8158594815825375,0.9419385064155936,1.0 +torch-tta,north_europe,all,family,58640,0.857176291043506,0.2854195568227899,0.857176291043506,0.2967297720520215,0.9476637107776262,0.8801009206026382,1.0 +torch-tta,north_europe,known,species,50598,0.7628774377906401,0.31130376488612155,0.7628774377906401,0.30320298151377173,0.8481955808529982,0.9430153185488799,1.0 +torch-tta,north_europe,known,genus,58639,0.8329777301361272,0.3506444171806519,0.8329777301361272,0.353759732820872,0.8158733948396119,0.9419514702058922,1.0 +torch-tta,north_europe,known,family,58640,0.857176291043506,0.2854195568227899,0.857176291043506,0.2967297720520215,0.9476637107776262,0.8801009206026382,1.0 +torch-tta,europe,all,species,58640,0.718077691416366,0.2429470820689653,0.718077691416366,0.22757154948143235,0.7156548431105048,0.944413998137816,1.0 +torch-tta,europe,all,genus,58640,0.8293085814992414,0.28385324239562887,0.8293085814992414,0.28200483380977825,0.804024556616644,0.9441314851902275,1.0 +torch-tta,europe,all,family,58640,0.8563266688215283,0.2653959371196337,0.8563266688215283,0.27529463404409366,0.9472032742155525,0.87467980248827,1.0 +torch-tta,europe,known,species,50598,0.7407837053741958,0.24775255855583658,0.7407837053741958,0.23384828180126666,0.829400371556188,0.9470276431963978,1.0 +torch-tta,europe,known,genus,58640,0.8293085814992414,0.28385324239562887,0.8293085814992414,0.28200483380977825,0.804024556616644,0.9441314851902275,1.0 +torch-tta,europe,known,family,58640,0.8563266688215283,0.2653959371196337,0.8563266688215283,0.27529463404409366,0.9472032742155525,0.87467980248827,1.0 +torch-tta,full,all,species,58640,0.6173142553970794,0.13138339990786518,0.6173142553970794,0.11096250944892755,0.6262619372442019,0.9508870287194768,1.0 +torch-tta,full,all,genus,58640,0.7510468819168783,0.15667958535770124,0.7510468819168783,0.14574565079611349,0.7451739427012278,0.9443425774705536,1.0 +torch-tta,full,all,family,58640,0.8145939456784087,0.21261476235886365,0.8145939456784087,0.2183082373459294,0.9275068212824011,0.8448686499703433,1.0 +torch-tta,full,known,species,50598,0.6368340737495563,0.13564757725358406,0.6368340737495563,0.11490466732444428,0.7257994387129926,0.9551144723608224,1.0 +torch-tta,full,known,genus,58640,0.7510468819168783,0.15667958535770124,0.7510468819168783,0.14574565079611349,0.7451739427012278,0.9443425774705536,1.0 +torch-tta,full,known,family,58640,0.8145939456784087,0.21261476235886365,0.8145939456784087,0.2183082373459294,0.9275068212824011,0.8448686499703433,1.0 +torch-tta,north_europe_v3,all,species,58640,0.7309514872176466,0.2836262314662556,0.7309514872176466,0.2712624922442485,0.727575034106412,0.9419128470540503,1.0 +torch-tta,north_europe_v3,all,genus,58640,0.8277669590594472,0.3334921424445981,0.8277669590594472,0.3337289068163522,0.8116132332878582,0.9427305687063423,1.0 +torch-tta,north_europe_v3,all,family,58640,0.8346576161414683,0.27245649076352374,0.8346576161414683,0.27776074959879515,0.9469304229195089,0.8781254078254616,1.0 +torch-tta,north_europe_v3,known,species,50598,0.7540645777225524,0.28991904052186485,0.7540645777225524,0.2798828148296063,0.8432151468437488,0.9444028505698309,1.0 +torch-tta,north_europe_v3,known,genus,58640,0.8277669590594472,0.3334921424445981,0.8277669590594472,0.3337289068163522,0.8116132332878582,0.9427305687063423,1.0 +torch-tta,north_europe_v3,known,family,58640,0.8346576161414683,0.27245649076352374,0.8346576161414683,0.27776074959879515,0.9469304229195089,0.8781254078254616,1.0 +torch-tta,europe_v3,all,species,58640,0.7166090539144668,0.24106168297359762,0.7166090539144668,0.2253220208562535,0.7144270122783083,0.944113343442953,1.0 +torch-tta,europe_v3,all,genus,58640,0.8268147188498062,0.2834023411805787,0.8268147188498062,0.2803332160378765,0.8029331514324693,0.9437905591277826,1.0 +torch-tta,europe_v3,all,family,58640,0.8335264497898153,0.2678618299824677,0.8335264497898153,0.2729237571963636,0.9449693042291951,0.8721280753438848,1.0 +torch-tta,europe_v3,known,species,50598,0.7392686287418017,0.24579080574948112,0.7392686287418017,0.23148434630648257,0.8279773904106882,0.9469432695851171,1.0 +torch-tta,europe_v3,known,genus,58640,0.8268147188498062,0.2834023411805787,0.8268147188498062,0.2803332160378765,0.8029331514324693,0.9437905591277826,1.0 +torch-tta,europe_v3,known,family,58640,0.8335264497898153,0.2678618299824677,0.8335264497898153,0.2729237571963636,0.9449693042291951,0.8721280753438848,1.0 +onnx-tta,north_europe,all,species,58640,0.7398002960321982,0.30560509035336597,0.7398002960321982,0.29443636070255313,0.7319406548431105,0.9406019271139017,1.0 +onnx-tta,north_europe,all,genus,58640,0.8304111700220072,0.35093141039439896,0.8304111700220072,0.35360877971608107,0.8158594815825375,0.9419354628293558,1.0 +onnx-tta,north_europe,all,family,58640,0.8573137738657032,0.2853888893805401,0.8573137738657032,0.2967466662087087,0.9476978171896316,0.8801548412074369,1.0 +onnx-tta,north_europe,known,species,50598,0.7631931907683942,0.31216254534687643,0.7631931907683942,0.30388844140667753,0.8482746353610815,0.9430067345925155,1.0 +onnx-tta,north_europe,known,genus,58639,0.832998120707434,0.3509854434880796,0.832998120707434,0.35416090691553337,0.8158733948396119,0.9419484264795018,1.0 +onnx-tta,north_europe,known,family,58640,0.8573137738657032,0.2853888893805401,0.8573137738657032,0.2967466662087087,0.9476978171896316,0.8801548412074369,1.0 +onnx-tta,europe,all,species,58640,0.7184729389376375,0.24372650581041436,0.7184729389376375,0.22830834852570925,0.715637789904502,0.9443265822955385,1.0 +onnx-tta,europe,all,genus,58640,0.8297204053618472,0.2845980888173239,0.8297204053618472,0.28278130491705644,0.8039733969986358,0.9441410149358417,1.0 +onnx-tta,europe,all,family,58640,0.8563774763022645,0.26558303107014986,0.8563774763022645,0.27545873472892135,0.9473226466575716,0.8748020450770366,1.0 +onnx-tta,europe,known,species,50598,0.741191450840804,0.24838776385935504,0.741191450840804,0.23446467584989356,0.8293806079291671,0.9469465408012699,1.0 +onnx-tta,europe,known,genus,58640,0.8297204053618472,0.2845980888173239,0.8297204053618472,0.28278130491705644,0.8039733969986358,0.9441410149358417,1.0 +onnx-tta,europe,known,family,58640,0.8563774763022645,0.26558303107014986,0.8563774763022645,0.27545873472892135,0.9473226466575716,0.8748020450770366,1.0 +onnx-tta,full,all,species,58640,0.6174475873691395,0.13160765012851372,0.6174475873691395,0.11115707584052233,0.6261425648021828,0.9508514561757678,1.0 +onnx-tta,full,all,genus,58640,0.7510220833093467,0.15697625283734776,0.7510220833093467,0.14605018175665105,0.7451568894952251,0.9443370637895987,1.0 +onnx-tta,full,all,family,58640,0.8145187008621275,0.2126777336514247,0.8145187008621275,0.21830567803410023,0.9275238744884038,0.8446531494151259,1.0 +onnx-tta,full,known,species,50598,0.6369716217523534,0.13589123854540153,0.6369716217523534,0.11511288629482906,0.7256610933238468,0.9550252355096324,1.0 +onnx-tta,full,known,genus,58640,0.7510220833093467,0.15697625283734776,0.7510220833093467,0.14605018175665105,0.7451568894952251,0.9443370637895987,1.0 +onnx-tta,full,known,family,58640,0.8145187008621275,0.2126777336514247,0.8145187008621275,0.21830567803410023,0.9275238744884038,0.8446531494151259,1.0 +onnx-tta,north_europe_v3,all,species,58640,0.731249034719374,0.28460861709588325,0.731249034719374,0.2720585446067734,0.7276261937244202,0.9418634558142434,1.0 +onnx-tta,north_europe_v3,all,genus,58640,0.8277501260203206,0.3338821217092504,0.8277501260203206,0.334119400397056,0.8115961800818554,0.94272656175805,1.0 +onnx-tta,north_europe_v3,all,family,58640,0.8346677390702247,0.27237041484255897,0.8346677390702247,0.27775524799008994,0.9469815825375171,0.8782213541986774,1.0 +onnx-tta,north_europe_v3,known,species,50598,0.7543715338409351,0.29070206429216244,0.7543715338409351,0.2805010841484588,0.8432744377248113,0.9443618486684395,1.0 +onnx-tta,north_europe_v3,known,genus,58640,0.8277501260203206,0.3338821217092504,0.8277501260203206,0.334119400397056,0.8115961800818554,0.94272656175805,1.0 +onnx-tta,north_europe_v3,known,family,58640,0.8346677390702247,0.27237041484255897,0.8346677390702247,0.27775524799008994,0.9469815825375171,0.8782213541986774,1.0 +onnx-tta,europe_v3,all,species,58640,0.7170052282421303,0.2418596950431791,0.7170052282421303,0.22605849020602678,0.7144270122783083,0.9440413851876268,1.0 +onnx-tta,europe_v3,all,genus,58640,0.827226542712412,0.2835769897348559,0.827226542712412,0.2809063608793024,0.8028819918144611,0.9437976224349767,1.0 +onnx-tta,europe_v3,all,family,58640,0.833675211353022,0.2679310249615683,0.833675211353022,0.2730381805189929,0.9451909959072305,0.8724817175710519,1.0 +onnx-tta,europe_v3,known,species,50598,0.7396773303209329,0.24644726654619223,0.7396773303209329,0.23210275866823382,0.8279773904106882,0.9468751626112113,1.0 +onnx-tta,europe_v3,known,genus,58640,0.827226542712412,0.2835769897348559,0.827226542712412,0.2809063608793024,0.8028819918144611,0.9437976224349767,1.0 +onnx-tta,europe_v3,known,family,58640,0.833675211353022,0.2679310249615683,0.833675211353022,0.2730381805189929,0.9451909959072305,0.8724817175710519,1.0 diff --git a/docs/assets/mambo-defaults-regional-effect.svg b/docs/assets/mambo-defaults-regional-effect.svg new file mode 100644 index 0000000..a7ad324 --- /dev/null +++ b/docs/assets/mambo-defaults-regional-effect.svg @@ -0,0 +1,1522 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.10.9, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + −2 + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 2 + + + + + + + + + + + + + 4 + + + + + + + + + + + + + 6 + + + + + + + + + + + + + 8 + + + + + + + + + + + + + 10 + + + + + + + + + + + + + 12 + + + + Macro accuracy change (percentage points) + + + + + + + + + + + + + + Global → Europe + + + + + + + + + + Europe → N. Europe + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + median +10.10 + + + median +2.17 + + + Species + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.000 + + + + + + + + + + + + + 0.025 + + + + + + + + + + + + + 0.050 + + + + + + + + + + + + + 0.075 + + + + + + + + + + + + + 0.100 + + + + + + + + + + + + + 0.125 + + + + Macro-F1 change + + + + + + + + + + + Global → Europe + + + + + + + + + + Europe → N. Europe + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + median +0.1101 + + + median +0.0576 + + + Species + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 2 + + + + + + + + + + + + + 4 + + + + + + + + + + + + + 6 + + + + + + + + + + + + + 8 + + + + Macro accuracy change (percentage points) + + + + + + + + + + + Global → Europe + + + + + + + + + + Europe → N. Europe + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + median +7.87 + + + median +1.22 + + + Genus + + + + + + + + + + + + + + + + + + + + + + + + + + + + −0.025 + + + + + + + + + + + + + 0.000 + + + + + + + + + + + + + 0.025 + + + + + + + + + + + + + 0.050 + + + + + + + + + + + + + 0.075 + + + + + + + + + + + + + 0.100 + + + + + + + + + + + + + 0.125 + + + + + + + + + + + + + 0.150 + + + + Macro-F1 change + + + + + + + + + + + Global → Europe + + + + + + + + + + Europe → N. Europe + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + median +0.1332 + + + median +0.0656 + + + Genus + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 1 + + + + + + + + + + + + + 2 + + + + + + + + + + + + + 3 + + + + + + + + + + + + + 4 + + + + + + + + + + + + + 5 + + + + Macro accuracy change (percentage points) + + + + + + + + + + + Global → Europe + + + + + + + + + + Europe → N. Europe + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + median +2.84 + + + median +0.43 + + + Family + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.00 + + + + + + + + + + + + + 0.02 + + + + + + + + + + + + + 0.04 + + + + + + + + + + + + + 0.06 + + + + Macro-F1 change + + + + + + + + + + + Global → Europe + + + + + + + + + + Europe → N. Europe + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + median +0.0572 + + + median +0.0214 + + + Family + + + + + + + + + + + + + + Effect of regional filtering · paired changes within each pipeline + + + Black mark: median of five pipeline changes; grey line: min–max; coloured dots: individual pipelines. + Descriptive spread, not confidence intervals or independent replicates. Legacy lists; same 58,640 images, all truth, threshold 0. + Differences summarize retained mini_metrics outputs; ranks and metric scales are never pooled. + + + + + + + + + MAMBO v2 + + + + + + + + V3 PyTorch + + + + + + + + V3 ONNX + + + + + + + + V3 PyTorch + TTA + + + + + + + + V3 ONNX + TTA + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/mambo-family-precision.csv b/docs/assets/mambo-family-precision.csv new file mode 100644 index 0000000..35621d7 --- /dev/null +++ b/docs/assets/mambo-family-precision.csv @@ -0,0 +1,913 @@ +model,scope,threshold,family_id,family,truth_images,accepted_predictions,precision,precision_weight,recall,recall_weight,f1,f1_weight +v2,zero,0,3528,Incurvariidae,0,3,0.0,1.0,,0,0.0,1.0 +v2,zero,0,3530,Lasiocampidae,728,636,0.9465408805031447,1.0,0.8269230769230769,1.0,0.8826979472140762,1.0 +v2,zero,0,3552,Ethmiidae,48,58,0.6896551724137931,1.0,0.8333333333333334,1.0,0.7547169811320755,1.0 +v2,zero,0,3553,Gelechiidae,2,119,0.0,1.0,0.0,1.0,0.0,1.0 +v2,zero,0,3554,Glyphipterigidae,0,4,0.0,1.0,,0,0.0,1.0 +v2,zero,0,3556,Hepialidae,14,23,0.6086956521739131,1.0,1.0,1.0,0.7567567567567568,1.0 +v2,zero,0,3563,Endromidae,0,3,0.0,1.0,,0,0.0,1.0 +v2,zero,0,4300664,Autostichidae,0,4,0.0,1.0,,0,0.0,1.0 +v2,zero,0,4300668,Peleopodidae,24,25,0.88,1.0,0.9166666666666666,1.0,0.8979591836734693,1.0 +v2,zero,0,4525436,Praydidae,0,5,0.0,1.0,,0,0.0,1.0 +v2,zero,0,4525465,Argyresthiidae,0,7,0.0,1.0,,0,0.0,1.0 +v2,zero,0,4527533,Stathmopodidae,2,4,0.5,1.0,1.0,1.0,0.6666666666666666,1.0 +v2,zero,0,4528997,Lypusidae,0,2,0.0,1.0,,0,0.0,1.0 +v2,zero,0,4532185,Erebidae,15241,14845,0.9810710676995621,1.0,0.9555803424972115,1.0,0.9681579472179751,1.0 +v2,zero,0,4538,Adelidae,0,5,0.0,1.0,,0,0.0,1.0 +v2,zero,0,4542,Alucitidae,1,16,0.0625,1.0,1.0,1.0,0.11764705882352941,1.0 +v2,zero,0,4554,Batrachedridae,0,5,0.0,1.0,,0,0.0,1.0 +v2,zero,0,4705755,Depressariidae,0,32,0.0,1.0,,0,0.0,1.0 +v2,zero,0,4864,Bedelliidae,0,7,0.0,1.0,,0,0.0,1.0 +v2,zero,0,4865,Blastobasidae,0,10,0.0,1.0,,0,0.0,1.0 +v2,zero,0,4867,Bucculatricidae,0,2,0.0,1.0,,0,0.0,1.0 +v2,zero,0,4870,Choreutidae,0,1,0.0,1.0,,0,0.0,1.0 +v2,zero,0,5336,Pyralidae,365,590,0.5779661016949152,1.0,0.9342465753424658,1.0,0.7141361256544502,1.0 +v2,zero,0,5338,Roeslerstammiidae,0,1,0.0,1.0,,0,0.0,1.0 +v2,zero,0,5340,Sesiidae,0,1,0.0,1.0,,0,0.0,1.0 +v2,zero,0,5343,Tortricidae,632,887,0.6617812852311161,1.0,0.9287974683544303,1.0,0.7728768926925609,1.0 +v2,zero,0,5345,Ypsolophidae,46,55,0.6909090909090909,1.0,0.8260869565217391,1.0,0.7524752475247525,1.0 +v2,zero,0,5473,Lycaenidae,0,1,0.0,1.0,,0,0.0,1.0 +v2,zero,0,5474,Limacodidae,475,345,0.991304347826087,1.0,0.72,1.0,0.8341463414634147,1.0 +v2,zero,0,5481,Pieridae,0,9,0.0,1.0,,0,0.0,1.0 +v2,zero,0,5487,Gracillariidae,0,16,0.0,1.0,,0,0.0,1.0 +v2,zero,0,6166,Opostegidae,0,15,0.0,1.0,,0,0.0,1.0 +v2,zero,0,6946,Eriocraniidae,0,1,0.0,1.0,,0,0.0,1.0 +v2,zero,0,6950,Geometridae,15047,14892,0.9837496642492614,1.0,0.9736160031900046,1.0,0.9786566017569057,1.0 +v2,zero,0,6953,Hesperiidae,0,4,0.0,1.0,,0,0.0,1.0 +v2,zero,0,6954,Epermeniidae,0,1,0.0,1.0,,0,0.0,1.0 +v2,zero,0,7014,Nepticulidae,0,22,0.0,1.0,,0,0.0,1.0 +v2,zero,0,7015,Noctuidae,9243,9278,0.9372709635697348,1.0,0.9408200800605864,1.0,0.9390421683494412,1.0 +v2,zero,0,7016,Notodontidae,3321,3382,0.9278533412182141,1.0,0.9448961156278229,1.0,0.9362971803669999,1.0 +v2,zero,0,7017,Nymphalidae,0,23,0.0,1.0,,0,0.0,1.0 +v2,zero,0,7294,Drepanidae,1604,1447,0.972356599861783,1.0,0.8771820448877805,1.0,0.9223205506391349,1.0 +v2,zero,0,7297,Elachistidae,0,24,0.0,1.0,,0,0.0,1.0 +v2,zero,0,8838,Coleophoridae,0,1,0.0,1.0,,0,0.0,1.0 +v2,zero,0,8839,Cosmopterigidae,0,4,0.0,1.0,,0,0.0,1.0 +v2,zero,0,8840,Cossidae,0,19,0.0,1.0,,0,0.0,1.0 +v2,zero,0,8841,Crambidae,4542,4339,0.9504494123069832,1.0,0.9079700572435051,1.0,0.9287242427654544,1.0 +v2,zero,0,8855,Momphidae,0,2,0.0,1.0,,0,0.0,1.0 +v2,zero,0,8860,Plutellidae,14,45,0.24444444444444444,1.0,0.7857142857142857,1.0,0.3728813559322034,1.0 +v2,zero,0,8861,Psychidae,0,22,0.0,1.0,,0,0.0,1.0 +v2,zero,0,8863,Pterophoridae,79,74,0.9459459459459459,1.0,0.8860759493670886,1.0,0.915032679738562,1.0 +v2,zero,0,8864,Saturniidae,0,3,0.0,1.0,,0,0.0,1.0 +v2,zero,0,8865,Schreckensteiniidae,0,5,0.0,1.0,,0,0.0,1.0 +v2,zero,0,8866,Scythrididae,0,3,0.0,1.0,,0,0.0,1.0 +v2,zero,0,8868,Sphingidae,1124,1090,0.9697247706422019,1.0,0.9403914590747331,1.0,0.95483288166215,1.0 +v2,zero,0,8870,Thyrididae,0,4,0.0,1.0,,0,0.0,1.0 +v2,zero,0,8871,Tischeriidae,0,3,0.0,1.0,,0,0.0,1.0 +v2,zero,0,8874,Yponomeutidae,13,14,0.6428571428571429,1.0,0.6923076923076923,1.0,0.6666666666666666,1.0 +v2,zero,0,9408,Micropterigidae,0,2,0.0,1.0,,0,0.0,1.0 +v2,zero,0,9410,Lyonetiidae,0,12,0.0,1.0,,0,0.0,1.0 +v2,zero,0,9412,Tineidae,0,114,0.0,1.0,,0,0.0,1.0 +v2,zero,0,9417,Papilionidae,0,2,0.0,1.0,,0,0.0,1.0 +v2,zero,0,9541689,Meessiidae,0,4,0.0,1.0,,0,0.0,1.0 +v2,zero,0,9689,Oecophoridae,32,32,0.59375,1.0,0.59375,1.0,0.59375,1.0 +v2,zero,0,9717,Nolidae,191,184,0.9510869565217391,1.0,0.9162303664921466,1.0,0.9333333333333333,1.0 +v2,optimized,0.9553309082984924,3528,Incurvariidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,3530,Lasiocampidae,728,458,0.9978165938864629,1.0,0.6277472527472527,1.0,0.7706576728499157,1.0 +v2,optimized,0.9553309082984924,3552,Ethmiidae,48,28,1.0,1.0,0.5833333333333334,1.0,0.7368421052631579,1.0 +v2,optimized,0.9553309082984924,3553,Gelechiidae,2,0,1.0,0.0,0.0,1.0,0.0,1.0 +v2,optimized,0.9553309082984924,3554,Glyphipterigidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,3556,Hepialidae,14,13,1.0,1.0,0.9285714285714286,1.0,0.9629629629629631,1.0 +v2,optimized,0.9553309082984924,3563,Endromidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,4300664,Autostichidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,4300668,Peleopodidae,24,19,0.9473684210526315,1.0,0.75,1.0,0.8372093023255814,1.0 +v2,optimized,0.9553309082984924,4525436,Praydidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,4525465,Argyresthiidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,4527533,Stathmopodidae,2,1,1.0,1.0,0.5,1.0,0.6666666666666666,1.0 +v2,optimized,0.9553309082984924,4528997,Lypusidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,4532185,Erebidae,15241,12512,0.9989609974424553,1.0,0.8200905452398136,1.0,0.9007314524555905,1.0 +v2,optimized,0.9553309082984924,4538,Adelidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,4542,Alucitidae,1,2,0.5,1.0,1.0,1.0,0.6666666666666666,1.0 +v2,optimized,0.9553309082984924,4554,Batrachedridae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,4705755,Depressariidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,4864,Bedelliidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,4865,Blastobasidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,4867,Bucculatricidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,4870,Choreutidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,5336,Pyralidae,365,278,0.9820143884892086,1.0,0.7479452054794521,1.0,0.8491446345256611,1.0 +v2,optimized,0.9553309082984924,5338,Roeslerstammiidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,5340,Sesiidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,5343,Tortricidae,632,399,0.9949874686716792,1.0,0.6281645569620253,1.0,0.7701260911736179,1.0 +v2,optimized,0.9553309082984924,5345,Ypsolophidae,46,22,1.0,1.0,0.4782608695652174,1.0,0.6470588235294118,1.0 +v2,optimized,0.9553309082984924,5473,Lycaenidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,5474,Limacodidae,475,218,1.0,1.0,0.4589473684210526,1.0,0.6291486291486291,1.0 +v2,optimized,0.9553309082984924,5481,Pieridae,0,2,0.0,1.0,,0,0.0,1.0 +v2,optimized,0.9553309082984924,5487,Gracillariidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,6166,Opostegidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,6946,Eriocraniidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,6950,Geometridae,15047,12194,0.9995079547318353,1.0,0.8099953479098824,1.0,0.894827649498917,1.0 +v2,optimized,0.9553309082984924,6953,Hesperiidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,6954,Epermeniidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,7014,Nepticulidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,7015,Noctuidae,9243,6765,0.9983739837398374,1.0,0.730715135778427,1.0,0.8438280859570216,1.0 +v2,optimized,0.9553309082984924,7016,Notodontidae,3321,2804,0.9985734664764622,1.0,0.8431195423065342,1.0,0.9142857142857143,1.0 +v2,optimized,0.9553309082984924,7017,Nymphalidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,7294,Drepanidae,1604,1103,1.0,1.0,0.6876558603491272,1.0,0.814924270410048,1.0 +v2,optimized,0.9553309082984924,7297,Elachistidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,8838,Coleophoridae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,8839,Cosmopterigidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,8840,Cossidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,8841,Crambidae,4542,2900,0.9979310344827587,1.0,0.6371642448260678,1.0,0.777747917226552,1.0 +v2,optimized,0.9553309082984924,8855,Momphidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,8860,Plutellidae,14,11,0.8181818181818182,1.0,0.6428571428571429,1.0,0.72,1.0 +v2,optimized,0.9553309082984924,8861,Psychidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,8863,Pterophoridae,79,48,1.0,1.0,0.6075949367088608,1.0,0.7559055118110237,1.0 +v2,optimized,0.9553309082984924,8864,Saturniidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,8865,Schreckensteiniidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,8866,Scythrididae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,8868,Sphingidae,1124,926,1.0,1.0,0.8238434163701067,1.0,0.9034146341463414,1.0 +v2,optimized,0.9553309082984924,8870,Thyrididae,0,1,0.0,1.0,,0,0.0,1.0 +v2,optimized,0.9553309082984924,8871,Tischeriidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,8874,Yponomeutidae,13,5,0.8,1.0,0.3076923076923077,1.0,0.4444444444444444,1.0 +v2,optimized,0.9553309082984924,9408,Micropterigidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,9410,Lyonetiidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,9412,Tineidae,0,1,0.0,1.0,,0,0.0,1.0 +v2,optimized,0.9553309082984924,9417,Papilionidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,9541689,Meessiidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,9689,Oecophoridae,32,14,1.0,1.0,0.4375,1.0,0.6086956521739131,1.0 +v2,optimized,0.9553309082984924,9717,Nolidae,191,157,1.0,1.0,0.8219895287958116,1.0,0.9022988505747127,1.0 +v2,common_0.96,0.96,3528,Incurvariidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,3530,Lasiocampidae,728,450,0.9977777777777778,1.0,0.6167582417582418,1.0,0.7623089983022072,1.0 +v2,common_0.96,0.96,3552,Ethmiidae,48,28,1.0,1.0,0.5833333333333334,1.0,0.7368421052631579,1.0 +v2,common_0.96,0.96,3553,Gelechiidae,2,0,1.0,0.0,0.0,1.0,0.0,1.0 +v2,common_0.96,0.96,3554,Glyphipterigidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,3556,Hepialidae,14,13,1.0,1.0,0.9285714285714286,1.0,0.9629629629629631,1.0 +v2,common_0.96,0.96,3563,Endromidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,4300664,Autostichidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,4300668,Peleopodidae,24,18,0.9444444444444444,1.0,0.7083333333333334,1.0,0.8095238095238095,1.0 +v2,common_0.96,0.96,4525436,Praydidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,4525465,Argyresthiidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,4527533,Stathmopodidae,2,1,1.0,1.0,0.5,1.0,0.6666666666666666,1.0 +v2,common_0.96,0.96,4528997,Lypusidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,4532185,Erebidae,15241,12417,0.9990335829910606,1.0,0.8139229709336657,1.0,0.8970279846698965,1.0 +v2,common_0.96,0.96,4538,Adelidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,4542,Alucitidae,1,2,0.5,1.0,1.0,1.0,0.6666666666666666,1.0 +v2,common_0.96,0.96,4554,Batrachedridae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,4705755,Depressariidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,4864,Bedelliidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,4865,Blastobasidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,4867,Bucculatricidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,4870,Choreutidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,5336,Pyralidae,365,269,0.9814126394052045,1.0,0.7232876712328767,1.0,0.832807570977918,1.0 +v2,common_0.96,0.96,5338,Roeslerstammiidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,5340,Sesiidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,5343,Tortricidae,632,391,0.9948849104859335,1.0,0.615506329113924,1.0,0.7605083088954057,1.0 +v2,common_0.96,0.96,5345,Ypsolophidae,46,21,1.0,1.0,0.45652173913043476,1.0,0.626865671641791,1.0 +v2,common_0.96,0.96,5473,Lycaenidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,5474,Limacodidae,475,214,1.0,1.0,0.45052631578947366,1.0,0.6211901306240929,1.0 +v2,common_0.96,0.96,5481,Pieridae,0,2,0.0,1.0,,0,0.0,1.0 +v2,common_0.96,0.96,5487,Gracillariidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,6166,Opostegidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,6946,Eriocraniidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,6950,Geometridae,15047,12079,0.9995032701382565,1.0,0.8023526284309165,1.0,0.890142298901423,1.0 +v2,common_0.96,0.96,6953,Hesperiidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,6954,Epermeniidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,7014,Nepticulidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,7015,Noctuidae,9243,6683,0.9985036660182552,1.0,0.721951747268203,1.0,0.8380007534848675,1.0 +v2,common_0.96,0.96,7016,Notodontidae,3321,2789,0.9985657941914665,1.0,0.8386028304727492,1.0,0.9116202945990179,1.0 +v2,common_0.96,0.96,7017,Nymphalidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,7294,Drepanidae,1604,1089,1.0,1.0,0.678927680798005,1.0,0.8087634608243596,1.0 +v2,common_0.96,0.96,7297,Elachistidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,8838,Coleophoridae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,8839,Cosmopterigidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,8840,Cossidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,8841,Crambidae,4542,2861,0.9979028311779098,1.0,0.6285777190664905,1.0,0.7713089288126435,1.0 +v2,common_0.96,0.96,8855,Momphidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,8860,Plutellidae,14,11,0.8181818181818182,1.0,0.6428571428571429,1.0,0.72,1.0 +v2,common_0.96,0.96,8861,Psychidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,8863,Pterophoridae,79,48,1.0,1.0,0.6075949367088608,1.0,0.7559055118110237,1.0 +v2,common_0.96,0.96,8864,Saturniidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,8865,Schreckensteiniidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,8866,Scythrididae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,8868,Sphingidae,1124,921,1.0,1.0,0.8193950177935944,1.0,0.9007334963325184,1.0 +v2,common_0.96,0.96,8870,Thyrididae,0,1,0.0,1.0,,0,0.0,1.0 +v2,common_0.96,0.96,8871,Tischeriidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,8874,Yponomeutidae,13,5,0.8,1.0,0.3076923076923077,1.0,0.4444444444444444,1.0 +v2,common_0.96,0.96,9408,Micropterigidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,9410,Lyonetiidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,9412,Tineidae,0,1,0.0,1.0,,0,0.0,1.0 +v2,common_0.96,0.96,9417,Papilionidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,9541689,Meessiidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,9689,Oecophoridae,32,14,1.0,1.0,0.4375,1.0,0.6086956521739131,1.0 +v2,common_0.96,0.96,9717,Nolidae,191,156,1.0,1.0,0.8167539267015707,1.0,0.899135446685879,1.0 +torch,zero,0,3528,Incurvariidae,0,6,0.0,1.0,,0,0.0,1.0 +torch,zero,0,3530,Lasiocampidae,728,614,0.9413680781758957,1.0,0.7939560439560439,1.0,0.8614008941877793,1.0 +torch,zero,0,3552,Ethmiidae,48,49,0.8571428571428571,1.0,0.875,1.0,0.865979381443299,1.0 +torch,zero,0,3553,Gelechiidae,2,137,0.0,1.0,0.0,1.0,0.0,1.0 +torch,zero,0,3554,Glyphipterigidae,0,6,0.0,1.0,,0,0.0,1.0 +torch,zero,0,3556,Hepialidae,14,42,0.30952380952380953,1.0,0.9285714285714286,1.0,0.4642857142857143,1.0 +torch,zero,0,3563,Endromidae,0,1,0.0,1.0,,0,0.0,1.0 +torch,zero,0,4300664,Autostichidae,0,11,0.0,1.0,,0,0.0,1.0 +torch,zero,0,4300668,Peleopodidae,24,27,0.7407407407407407,1.0,0.8333333333333334,1.0,0.7843137254901962,1.0 +torch,zero,0,4525436,Praydidae,0,2,0.0,1.0,,0,0.0,1.0 +torch,zero,0,4525465,Argyresthiidae,0,1,0.0,1.0,,0,0.0,1.0 +torch,zero,0,4527533,Stathmopodidae,2,1,1.0,1.0,0.5,1.0,0.6666666666666666,1.0 +torch,zero,0,4528997,Lypusidae,0,7,0.0,1.0,,0,0.0,1.0 +torch,zero,0,4532185,Erebidae,15241,14478,0.983008702859511,1.0,0.9337969949478381,1.0,0.9577711228507017,1.0 +torch,zero,0,4538,Adelidae,0,22,0.0,1.0,,0,0.0,1.0 +torch,zero,0,4542,Alucitidae,1,3,0.3333333333333333,1.0,1.0,1.0,0.5,1.0 +torch,zero,0,4554,Batrachedridae,0,4,0.0,1.0,,0,0.0,1.0 +torch,zero,0,4705755,Depressariidae,0,51,0.0,1.0,,0,0.0,1.0 +torch,zero,0,4864,Bedelliidae,0,132,0.0,1.0,,0,0.0,1.0 +torch,zero,0,4865,Blastobasidae,0,20,0.0,1.0,,0,0.0,1.0 +torch,zero,0,4867,Bucculatricidae,0,1,0.0,1.0,,0,0.0,1.0 +torch,zero,0,4870,Choreutidae,0,15,0.0,1.0,,0,0.0,1.0 +torch,zero,0,5320,Douglasiidae,0,1,0.0,1.0,,0,0.0,1.0 +torch,zero,0,5336,Pyralidae,365,560,0.6,1.0,0.9205479452054794,1.0,0.7264864864864864,1.0 +torch,zero,0,5340,Sesiidae,0,5,0.0,1.0,,0,0.0,1.0 +torch,zero,0,5343,Tortricidae,632,1311,0.463768115942029,1.0,0.9620253164556962,1.0,0.6258363355635614,1.0 +torch,zero,0,5345,Ypsolophidae,46,49,0.8571428571428571,1.0,0.9130434782608695,1.0,0.8842105263157894,1.0 +torch,zero,0,5474,Limacodidae,475,383,0.9608355091383812,1.0,0.7747368421052632,1.0,0.8578088578088578,1.0 +torch,zero,0,5481,Pieridae,0,5,0.0,1.0,,0,0.0,1.0 +torch,zero,0,5487,Gracillariidae,0,23,0.0,1.0,,0,0.0,1.0 +torch,zero,0,6166,Opostegidae,0,30,0.0,1.0,,0,0.0,1.0 +torch,zero,0,6946,Eriocraniidae,0,1,0.0,1.0,,0,0.0,1.0 +torch,zero,0,6950,Geometridae,15047,14847,0.9781774095776925,1.0,0.9651757825480162,1.0,0.971633103632836,1.0 +torch,zero,0,6954,Epermeniidae,0,2,0.0,1.0,,0,0.0,1.0 +torch,zero,0,7014,Nepticulidae,0,4,0.0,1.0,,0,0.0,1.0 +torch,zero,0,7015,Noctuidae,9243,9175,0.9238147138964578,1.0,0.9170182841068917,1.0,0.9204039526550114,1.0 +torch,zero,0,7016,Notodontidae,3321,3217,0.9518184644078334,1.0,0.9220114423366456,1.0,0.9366778831446925,1.0 +torch,zero,0,7017,Nymphalidae,0,6,0.0,1.0,,0,0.0,1.0 +torch,zero,0,7294,Drepanidae,1604,1414,0.9759547383309759,1.0,0.8603491271820449,1.0,0.9145129224652088,1.0 +torch,zero,0,7297,Elachistidae,0,23,0.0,1.0,,0,0.0,1.0 +torch,zero,0,8838,Coleophoridae,0,118,0.0,1.0,,0,0.0,1.0 +torch,zero,0,8839,Cosmopterigidae,0,2,0.0,1.0,,0,0.0,1.0 +torch,zero,0,8840,Cossidae,0,28,0.0,1.0,,0,0.0,1.0 +torch,zero,0,8841,Crambidae,4542,4309,0.9554420979345556,1.0,0.9064288859533245,1.0,0.9302903626708845,1.0 +torch,zero,0,8855,Momphidae,0,3,0.0,1.0,,0,0.0,1.0 +torch,zero,0,8860,Plutellidae,14,32,0.375,1.0,0.8571428571428571,1.0,0.5217391304347826,1.0 +torch,zero,0,8861,Psychidae,0,41,0.0,1.0,,0,0.0,1.0 +torch,zero,0,8863,Pterophoridae,79,82,0.8780487804878049,1.0,0.9113924050632911,1.0,0.8944099378881988,1.0 +torch,zero,0,8864,Saturniidae,0,1,0.0,1.0,,0,0.0,1.0 +torch,zero,0,8865,Schreckensteiniidae,0,2,0.0,1.0,,0,0.0,1.0 +torch,zero,0,8866,Scythrididae,0,4,0.0,1.0,,0,0.0,1.0 +torch,zero,0,8868,Sphingidae,1124,1021,0.9794319294809011,1.0,0.8896797153024911,1.0,0.9324009324009326,1.0 +torch,zero,0,8871,Tischeriidae,0,53,0.0,1.0,,0,0.0,1.0 +torch,zero,0,8874,Yponomeutidae,13,41,0.14634146341463414,1.0,0.46153846153846156,1.0,0.2222222222222222,1.0 +torch,zero,0,9408,Micropterigidae,0,2,0.0,1.0,,0,0.0,1.0 +torch,zero,0,9410,Lyonetiidae,0,5,0.0,1.0,,0,0.0,1.0 +torch,zero,0,9412,Tineidae,0,117,0.0,1.0,,0,0.0,1.0 +torch,zero,0,9541689,Meessiidae,0,1,0.0,1.0,,0,0.0,1.0 +torch,zero,0,9689,Oecophoridae,32,49,0.3877551020408163,1.0,0.59375,1.0,0.4691358024691358,1.0 +torch,zero,0,9717,Nolidae,191,191,0.9214659685863874,1.0,0.9214659685863874,1.0,0.9214659685863874,1.0 +torch,optimized,0.970800906419754,3528,Incurvariidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,3530,Lasiocampidae,728,374,1.0,1.0,0.5137362637362637,1.0,0.6787658802177858,1.0 +torch,optimized,0.970800906419754,3552,Ethmiidae,48,41,1.0,1.0,0.8541666666666666,1.0,0.9213483146067415,1.0 +torch,optimized,0.970800906419754,3553,Gelechiidae,2,0,1.0,0.0,0.0,1.0,0.0,1.0 +torch,optimized,0.970800906419754,3554,Glyphipterigidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,3556,Hepialidae,14,12,1.0,1.0,0.8571428571428571,1.0,0.9230769230769229,1.0 +torch,optimized,0.970800906419754,3563,Endromidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,4300664,Autostichidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,4300668,Peleopodidae,24,18,0.9444444444444444,1.0,0.7083333333333334,1.0,0.8095238095238095,1.0 +torch,optimized,0.970800906419754,4525436,Praydidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,4525465,Argyresthiidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,4527533,Stathmopodidae,2,1,1.0,1.0,0.5,1.0,0.6666666666666666,1.0 +torch,optimized,0.970800906419754,4528997,Lypusidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,4532185,Erebidae,15241,11359,0.9992957126507616,1.0,0.7447674037136671,1.0,0.8534586466165415,1.0 +torch,optimized,0.970800906419754,4538,Adelidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,4542,Alucitidae,1,1,1.0,1.0,1.0,1.0,1.0,1.0 +torch,optimized,0.970800906419754,4554,Batrachedridae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,4705755,Depressariidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,4864,Bedelliidae,0,21,0.0,1.0,,0,0.0,1.0 +torch,optimized,0.970800906419754,4865,Blastobasidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,4867,Bucculatricidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,4870,Choreutidae,0,2,0.0,1.0,,0,0.0,1.0 +torch,optimized,0.970800906419754,5320,Douglasiidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,5336,Pyralidae,365,261,0.9885057471264368,1.0,0.7068493150684931,1.0,0.8242811501597445,1.0 +torch,optimized,0.970800906419754,5340,Sesiidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,5343,Tortricidae,632,455,0.9868131868131869,1.0,0.7104430379746836,1.0,0.8261269549218031,1.0 +torch,optimized,0.970800906419754,5345,Ypsolophidae,46,27,1.0,1.0,0.5869565217391305,1.0,0.7397260273972603,1.0 +torch,optimized,0.970800906419754,5474,Limacodidae,475,205,0.9951219512195122,1.0,0.42947368421052634,1.0,0.6000000000000001,1.0 +torch,optimized,0.970800906419754,5481,Pieridae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,5487,Gracillariidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,6166,Opostegidae,0,2,0.0,1.0,,0,0.0,1.0 +torch,optimized,0.970800906419754,6946,Eriocraniidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,6950,Geometridae,15047,12182,0.999179116729601,1.0,0.8089320130258524,1.0,0.8940467883506555,1.0 +torch,optimized,0.970800906419754,6954,Epermeniidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,7014,Nepticulidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,7015,Noctuidae,9243,6331,0.9987363765597852,1.0,0.6840852537055069,1.0,0.811994349556954,1.0 +torch,optimized,0.970800906419754,7016,Notodontidae,3321,2622,0.9988558352402745,1.0,0.7886178861788617,1.0,0.8813730439172136,1.0 +torch,optimized,0.970800906419754,7017,Nymphalidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,7294,Drepanidae,1604,1119,0.998212689901698,1.0,0.6963840399002493,1.0,0.8204186558942343,1.0 +torch,optimized,0.970800906419754,7297,Elachistidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,8838,Coleophoridae,0,2,0.0,1.0,,0,0.0,1.0 +torch,optimized,0.970800906419754,8839,Cosmopterigidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,8840,Cossidae,0,1,0.0,1.0,,0,0.0,1.0 +torch,optimized,0.970800906419754,8841,Crambidae,4542,2423,0.9987618654560462,1.0,0.5328049317481286,1.0,0.6949030868628859,1.0 +torch,optimized,0.970800906419754,8855,Momphidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,8860,Plutellidae,14,12,0.9166666666666666,1.0,0.7857142857142857,1.0,0.8461538461538461,1.0 +torch,optimized,0.970800906419754,8861,Psychidae,0,1,0.0,1.0,,0,0.0,1.0 +torch,optimized,0.970800906419754,8863,Pterophoridae,79,71,0.9859154929577465,1.0,0.8860759493670886,1.0,0.9333333333333333,1.0 +torch,optimized,0.970800906419754,8864,Saturniidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,8865,Schreckensteiniidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,8866,Scythrididae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,8868,Sphingidae,1124,855,1.0,1.0,0.7606761565836299,1.0,0.8640727640222333,1.0 +torch,optimized,0.970800906419754,8871,Tischeriidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,8874,Yponomeutidae,13,3,0.6666666666666666,1.0,0.15384615384615385,1.0,0.25,1.0 +torch,optimized,0.970800906419754,9408,Micropterigidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,9410,Lyonetiidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,9412,Tineidae,0,2,0.0,1.0,,0,0.0,1.0 +torch,optimized,0.970800906419754,9541689,Meessiidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,9689,Oecophoridae,32,18,1.0,1.0,0.5625,1.0,0.72,1.0 +torch,optimized,0.970800906419754,9717,Nolidae,191,145,1.0,1.0,0.7591623036649214,1.0,0.863095238095238,1.0 +torch,common_0.96,0.96,3528,Incurvariidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,3530,Lasiocampidae,728,387,1.0,1.0,0.5315934065934066,1.0,0.694170403587444,1.0 +torch,common_0.96,0.96,3552,Ethmiidae,48,41,1.0,1.0,0.8541666666666666,1.0,0.9213483146067415,1.0 +torch,common_0.96,0.96,3553,Gelechiidae,2,1,0.0,1.0,0.0,1.0,0.0,1.0 +torch,common_0.96,0.96,3554,Glyphipterigidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,3556,Hepialidae,14,12,1.0,1.0,0.8571428571428571,1.0,0.9230769230769229,1.0 +torch,common_0.96,0.96,3563,Endromidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,4300664,Autostichidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,4300668,Peleopodidae,24,19,0.9473684210526315,1.0,0.75,1.0,0.8372093023255814,1.0 +torch,common_0.96,0.96,4525436,Praydidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,4525465,Argyresthiidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,4527533,Stathmopodidae,2,1,1.0,1.0,0.5,1.0,0.6666666666666666,1.0 +torch,common_0.96,0.96,4528997,Lypusidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,4532185,Erebidae,15241,11634,0.9990544954443872,1.0,0.7626140017059249,1.0,0.8649674418604651,1.0 +torch,common_0.96,0.96,4538,Adelidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,4542,Alucitidae,1,1,1.0,1.0,1.0,1.0,1.0,1.0 +torch,common_0.96,0.96,4554,Batrachedridae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,4705755,Depressariidae,0,1,0.0,1.0,,0,0.0,1.0 +torch,common_0.96,0.96,4864,Bedelliidae,0,24,0.0,1.0,,0,0.0,1.0 +torch,common_0.96,0.96,4865,Blastobasidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,4867,Bucculatricidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,4870,Choreutidae,0,3,0.0,1.0,,0,0.0,1.0 +torch,common_0.96,0.96,5320,Douglasiidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,5336,Pyralidae,365,269,0.9888475836431226,1.0,0.7287671232876712,1.0,0.8391167192429022,1.0 +torch,common_0.96,0.96,5340,Sesiidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,5343,Tortricidae,632,468,0.9829059829059829,1.0,0.7278481012658228,1.0,0.8363636363636364,1.0 +torch,common_0.96,0.96,5345,Ypsolophidae,46,27,1.0,1.0,0.5869565217391305,1.0,0.7397260273972603,1.0 +torch,common_0.96,0.96,5474,Limacodidae,475,217,0.9953917050691244,1.0,0.45473684210526316,1.0,0.624277456647399,1.0 +torch,common_0.96,0.96,5481,Pieridae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,5487,Gracillariidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,6166,Opostegidae,0,2,0.0,1.0,,0,0.0,1.0 +torch,common_0.96,0.96,6946,Eriocraniidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,6950,Geometridae,15047,12469,0.9987970166011709,1.0,0.8276732903568818,1.0,0.9052187817996801,1.0 +torch,common_0.96,0.96,6954,Epermeniidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,7014,Nepticulidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,7015,Noctuidae,9243,6525,0.9983141762452107,1.0,0.7047495401925782,1.0,0.8262303399289701,1.0 +torch,common_0.96,0.96,7016,Notodontidae,3321,2661,0.9984968057121383,1.0,0.8000602228244504,1.0,0.8883316616516214,1.0 +torch,common_0.96,0.96,7017,Nymphalidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,7294,Drepanidae,1604,1140,0.9982456140350877,1.0,0.7094763092269327,1.0,0.8294460641399417,1.0 +torch,common_0.96,0.96,7297,Elachistidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,8838,Coleophoridae,0,2,0.0,1.0,,0,0.0,1.0 +torch,common_0.96,0.96,8839,Cosmopterigidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,8840,Cossidae,0,1,0.0,1.0,,0,0.0,1.0 +torch,common_0.96,0.96,8841,Crambidae,4542,2550,0.9988235294117647,1.0,0.5607661822985469,1.0,0.7182741116751269,1.0 +torch,common_0.96,0.96,8855,Momphidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,8860,Plutellidae,14,12,0.9166666666666666,1.0,0.7857142857142857,1.0,0.8461538461538461,1.0 +torch,common_0.96,0.96,8861,Psychidae,0,1,0.0,1.0,,0,0.0,1.0 +torch,common_0.96,0.96,8863,Pterophoridae,79,71,0.9859154929577465,1.0,0.8860759493670886,1.0,0.9333333333333333,1.0 +torch,common_0.96,0.96,8864,Saturniidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,8865,Schreckensteiniidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,8866,Scythrididae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,8868,Sphingidae,1124,861,1.0,1.0,0.7660142348754448,1.0,0.8675062972292191,1.0 +torch,common_0.96,0.96,8871,Tischeriidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,8874,Yponomeutidae,13,3,0.6666666666666666,1.0,0.15384615384615385,1.0,0.25,1.0 +torch,common_0.96,0.96,9408,Micropterigidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,9410,Lyonetiidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,9412,Tineidae,0,4,0.0,1.0,,0,0.0,1.0 +torch,common_0.96,0.96,9541689,Meessiidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,9689,Oecophoridae,32,18,1.0,1.0,0.5625,1.0,0.72,1.0 +torch,common_0.96,0.96,9717,Nolidae,191,146,1.0,1.0,0.7643979057591623,1.0,0.8664688427299703,1.0 +onnx,zero,0,3528,Incurvariidae,0,6,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,3530,Lasiocampidae,728,616,0.939935064935065,1.0,0.7953296703296703,1.0,0.8616071428571428,1.0 +onnx,zero,0,3552,Ethmiidae,48,49,0.8571428571428571,1.0,0.875,1.0,0.865979381443299,1.0 +onnx,zero,0,3553,Gelechiidae,2,135,0.0,1.0,0.0,1.0,0.0,1.0 +onnx,zero,0,3554,Glyphipterigidae,0,6,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,3556,Hepialidae,14,42,0.30952380952380953,1.0,0.9285714285714286,1.0,0.4642857142857143,1.0 +onnx,zero,0,3563,Endromidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,4300664,Autostichidae,0,11,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,4300668,Peleopodidae,24,27,0.7407407407407407,1.0,0.8333333333333334,1.0,0.7843137254901962,1.0 +onnx,zero,0,4525436,Praydidae,0,2,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,4525465,Argyresthiidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,4527533,Stathmopodidae,2,1,1.0,1.0,0.5,1.0,0.6666666666666666,1.0 +onnx,zero,0,4528997,Lypusidae,0,7,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,4532185,Erebidae,15241,14480,0.9831491712707182,1.0,0.9340594449183125,1.0,0.9579758419972411,1.0 +onnx,zero,0,4538,Adelidae,0,22,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,4542,Alucitidae,1,3,0.3333333333333333,1.0,1.0,1.0,0.5,1.0 +onnx,zero,0,4554,Batrachedridae,0,4,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,4705755,Depressariidae,0,52,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,4864,Bedelliidae,0,132,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,4865,Blastobasidae,0,19,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,4867,Bucculatricidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,4870,Choreutidae,0,15,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,5320,Douglasiidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,5336,Pyralidae,365,559,0.6010733452593918,1.0,0.9205479452054794,1.0,0.7272727272727273,1.0 +onnx,zero,0,5340,Sesiidae,0,5,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,5343,Tortricidae,632,1308,0.46559633027522934,1.0,0.9636075949367089,1.0,0.6278350515463917,1.0 +onnx,zero,0,5345,Ypsolophidae,46,49,0.8571428571428571,1.0,0.9130434782608695,1.0,0.8842105263157894,1.0 +onnx,zero,0,5474,Limacodidae,475,383,0.9608355091383812,1.0,0.7747368421052632,1.0,0.8578088578088578,1.0 +onnx,zero,0,5481,Pieridae,0,5,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,5487,Gracillariidae,0,23,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,6166,Opostegidae,0,30,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,6946,Eriocraniidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,6950,Geometridae,15047,14855,0.9778525748906092,1.0,0.9653751578387718,1.0,0.9715738077720553,1.0 +onnx,zero,0,6954,Epermeniidae,0,2,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,7014,Nepticulidae,0,4,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,7015,Noctuidae,9243,9171,0.9243266819321775,1.0,0.9171264740884995,1.0,0.9207125013576627,1.0 +onnx,zero,0,7016,Notodontidae,3321,3215,0.9517884914463453,1.0,0.9214092140921409,1.0,0.9363525091799266,1.0 +onnx,zero,0,7017,Nymphalidae,0,6,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,7294,Drepanidae,1604,1414,0.9759547383309759,1.0,0.8603491271820449,1.0,0.9145129224652088,1.0 +onnx,zero,0,7297,Elachistidae,0,23,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,8838,Coleophoridae,0,118,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,8839,Cosmopterigidae,0,2,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,8840,Cossidae,0,28,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,8841,Crambidae,4542,4312,0.9554730983302412,1.0,0.9070893879348305,1.0,0.9306528122882314,1.0 +onnx,zero,0,8855,Momphidae,0,3,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,8860,Plutellidae,14,31,0.3870967741935484,1.0,0.8571428571428571,1.0,0.5333333333333333,1.0 +onnx,zero,0,8861,Psychidae,0,42,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,8863,Pterophoridae,79,82,0.8780487804878049,1.0,0.9113924050632911,1.0,0.8944099378881988,1.0 +onnx,zero,0,8864,Saturniidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,8865,Schreckensteiniidae,0,2,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,8866,Scythrididae,0,4,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,8868,Sphingidae,1124,1021,0.9794319294809011,1.0,0.8896797153024911,1.0,0.9324009324009326,1.0 +onnx,zero,0,8871,Tischeriidae,0,53,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,8874,Yponomeutidae,13,39,0.15384615384615385,1.0,0.46153846153846156,1.0,0.23076923076923078,1.0 +onnx,zero,0,9408,Micropterigidae,0,2,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,9410,Lyonetiidae,0,4,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,9412,Tineidae,0,117,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,9541689,Meessiidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,9689,Oecophoridae,32,49,0.3877551020408163,1.0,0.59375,1.0,0.4691358024691358,1.0 +onnx,zero,0,9717,Nolidae,191,191,0.9214659685863874,1.0,0.9214659685863874,1.0,0.9214659685863874,1.0 +onnx,optimized,0.9698503911495209,3528,Incurvariidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,3530,Lasiocampidae,728,376,1.0,1.0,0.5164835164835165,1.0,0.6811594202898551,1.0 +onnx,optimized,0.9698503911495209,3552,Ethmiidae,48,41,1.0,1.0,0.8541666666666666,1.0,0.9213483146067415,1.0 +onnx,optimized,0.9698503911495209,3553,Gelechiidae,2,0,1.0,0.0,0.0,1.0,0.0,1.0 +onnx,optimized,0.9698503911495209,3554,Glyphipterigidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,3556,Hepialidae,14,12,1.0,1.0,0.8571428571428571,1.0,0.9230769230769229,1.0 +onnx,optimized,0.9698503911495209,3563,Endromidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,4300664,Autostichidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,4300668,Peleopodidae,24,18,0.9444444444444444,1.0,0.7083333333333334,1.0,0.8095238095238095,1.0 +onnx,optimized,0.9698503911495209,4525436,Praydidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,4525465,Argyresthiidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,4527533,Stathmopodidae,2,1,1.0,1.0,0.5,1.0,0.6666666666666666,1.0 +onnx,optimized,0.9698503911495209,4528997,Lypusidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,4532185,Erebidae,15241,11389,0.9992975678286066,1.0,0.7467357784922249,1.0,0.8547502816372513,1.0 +onnx,optimized,0.9698503911495209,4538,Adelidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,4542,Alucitidae,1,1,1.0,1.0,1.0,1.0,1.0,1.0 +onnx,optimized,0.9698503911495209,4554,Batrachedridae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,4705755,Depressariidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,4864,Bedelliidae,0,21,0.0,1.0,,0,0.0,1.0 +onnx,optimized,0.9698503911495209,4865,Blastobasidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,4867,Bucculatricidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,4870,Choreutidae,0,2,0.0,1.0,,0,0.0,1.0 +onnx,optimized,0.9698503911495209,5320,Douglasiidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,5336,Pyralidae,365,262,0.9885496183206107,1.0,0.7095890410958904,1.0,0.8261562998405104,1.0 +onnx,optimized,0.9698503911495209,5340,Sesiidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,5343,Tortricidae,632,458,0.9868995633187773,1.0,0.7151898734177216,1.0,0.8293577981651375,1.0 +onnx,optimized,0.9698503911495209,5345,Ypsolophidae,46,27,1.0,1.0,0.5869565217391305,1.0,0.7397260273972603,1.0 +onnx,optimized,0.9698503911495209,5474,Limacodidae,475,209,0.9952153110047847,1.0,0.4378947368421053,1.0,0.608187134502924,1.0 +onnx,optimized,0.9698503911495209,5481,Pieridae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,5487,Gracillariidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,6166,Opostegidae,0,2,0.0,1.0,,0,0.0,1.0 +onnx,optimized,0.9698503911495209,6946,Eriocraniidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,6950,Geometridae,15047,12205,0.9991806636624334,1.0,0.8104605569216455,1.0,0.8949801849405549,1.0 +onnx,optimized,0.9698503911495209,6954,Epermeniidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,7014,Nepticulidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,7015,Noctuidae,9243,6347,0.9987395619977942,1.0,0.6858162934112301,1.0,0.8132135984605516,1.0 +onnx,optimized,0.9698503911495209,7016,Notodontidae,3321,2626,0.9988575780654989,1.0,0.7898223426678711,1.0,0.8821254413990248,1.0 +onnx,optimized,0.9698503911495209,7017,Nymphalidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,7294,Drepanidae,1604,1121,0.9982158786797503,1.0,0.6976309226932669,1.0,0.8212844036697247,1.0 +onnx,optimized,0.9698503911495209,7297,Elachistidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,8838,Coleophoridae,0,2,0.0,1.0,,0,0.0,1.0 +onnx,optimized,0.9698503911495209,8839,Cosmopterigidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,8840,Cossidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx,optimized,0.9698503911495209,8841,Crambidae,4542,2444,0.9987725040916531,1.0,0.5374284456186702,1.0,0.6988262238763241,1.0 +onnx,optimized,0.9698503911495209,8855,Momphidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,8860,Plutellidae,14,12,0.9166666666666666,1.0,0.7857142857142857,1.0,0.8461538461538461,1.0 +onnx,optimized,0.9698503911495209,8861,Psychidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx,optimized,0.9698503911495209,8863,Pterophoridae,79,71,0.9859154929577465,1.0,0.8860759493670886,1.0,0.9333333333333333,1.0 +onnx,optimized,0.9698503911495209,8864,Saturniidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,8865,Schreckensteiniidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,8866,Scythrididae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,8868,Sphingidae,1124,855,1.0,1.0,0.7606761565836299,1.0,0.8640727640222333,1.0 +onnx,optimized,0.9698503911495209,8871,Tischeriidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,8874,Yponomeutidae,13,3,0.6666666666666666,1.0,0.15384615384615385,1.0,0.25,1.0 +onnx,optimized,0.9698503911495209,9408,Micropterigidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,9410,Lyonetiidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,9412,Tineidae,0,2,0.0,1.0,,0,0.0,1.0 +onnx,optimized,0.9698503911495209,9541689,Meessiidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,9689,Oecophoridae,32,18,1.0,1.0,0.5625,1.0,0.72,1.0 +onnx,optimized,0.9698503911495209,9717,Nolidae,191,145,1.0,1.0,0.7591623036649214,1.0,0.863095238095238,1.0 +onnx,common_0.96,0.96,3528,Incurvariidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,3530,Lasiocampidae,728,387,1.0,1.0,0.5315934065934066,1.0,0.694170403587444,1.0 +onnx,common_0.96,0.96,3552,Ethmiidae,48,41,1.0,1.0,0.8541666666666666,1.0,0.9213483146067415,1.0 +onnx,common_0.96,0.96,3553,Gelechiidae,2,1,0.0,1.0,0.0,1.0,0.0,1.0 +onnx,common_0.96,0.96,3554,Glyphipterigidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,3556,Hepialidae,14,12,1.0,1.0,0.8571428571428571,1.0,0.9230769230769229,1.0 +onnx,common_0.96,0.96,3563,Endromidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,4300664,Autostichidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,4300668,Peleopodidae,24,19,0.9473684210526315,1.0,0.75,1.0,0.8372093023255814,1.0 +onnx,common_0.96,0.96,4525436,Praydidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,4525465,Argyresthiidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,4527533,Stathmopodidae,2,1,1.0,1.0,0.5,1.0,0.6666666666666666,1.0 +onnx,common_0.96,0.96,4528997,Lypusidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,4532185,Erebidae,15241,11640,0.9990549828178694,1.0,0.7630076766616364,1.0,0.8652207879171162,1.0 +onnx,common_0.96,0.96,4538,Adelidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,4542,Alucitidae,1,1,1.0,1.0,1.0,1.0,1.0,1.0 +onnx,common_0.96,0.96,4554,Batrachedridae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,4705755,Depressariidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx,common_0.96,0.96,4864,Bedelliidae,0,25,0.0,1.0,,0,0.0,1.0 +onnx,common_0.96,0.96,4865,Blastobasidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,4867,Bucculatricidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,4870,Choreutidae,0,3,0.0,1.0,,0,0.0,1.0 +onnx,common_0.96,0.96,5320,Douglasiidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,5336,Pyralidae,365,269,0.9888475836431226,1.0,0.7287671232876712,1.0,0.8391167192429022,1.0 +onnx,common_0.96,0.96,5340,Sesiidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,5343,Tortricidae,632,468,0.9829059829059829,1.0,0.7278481012658228,1.0,0.8363636363636364,1.0 +onnx,common_0.96,0.96,5345,Ypsolophidae,46,27,1.0,1.0,0.5869565217391305,1.0,0.7397260273972603,1.0 +onnx,common_0.96,0.96,5474,Limacodidae,475,218,0.9954128440366973,1.0,0.4568421052631579,1.0,0.6262626262626263,1.0 +onnx,common_0.96,0.96,5481,Pieridae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,5487,Gracillariidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,6166,Opostegidae,0,2,0.0,1.0,,0,0.0,1.0 +onnx,common_0.96,0.96,6946,Eriocraniidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,6950,Geometridae,15047,12468,0.9987969201154957,1.0,0.8276068319266299,1.0,0.9051789932763946,1.0 +onnx,common_0.96,0.96,6954,Epermeniidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,7014,Nepticulidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,7015,Noctuidae,9243,6523,0.9983136593591906,1.0,0.7045331602293627,1.0,0.8260814410757326,1.0 +onnx,common_0.96,0.96,7016,Notodontidae,3321,2660,0.9984962406015038,1.0,0.7997591087021981,1.0,0.8881457950175556,1.0 +onnx,common_0.96,0.96,7017,Nymphalidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,7294,Drepanidae,1604,1140,0.9982456140350877,1.0,0.7094763092269327,1.0,0.8294460641399417,1.0 +onnx,common_0.96,0.96,7297,Elachistidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,8838,Coleophoridae,0,2,0.0,1.0,,0,0.0,1.0 +onnx,common_0.96,0.96,8839,Cosmopterigidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,8840,Cossidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx,common_0.96,0.96,8841,Crambidae,4542,2553,0.9988249118683902,1.0,0.5614266842800528,1.0,0.718816067653277,1.0 +onnx,common_0.96,0.96,8855,Momphidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,8860,Plutellidae,14,12,0.9166666666666666,1.0,0.7857142857142857,1.0,0.8461538461538461,1.0 +onnx,common_0.96,0.96,8861,Psychidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx,common_0.96,0.96,8863,Pterophoridae,79,71,0.9859154929577465,1.0,0.8860759493670886,1.0,0.9333333333333333,1.0 +onnx,common_0.96,0.96,8864,Saturniidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,8865,Schreckensteiniidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,8866,Scythrididae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,8868,Sphingidae,1124,862,1.0,1.0,0.7669039145907474,1.0,0.8680765357502517,1.0 +onnx,common_0.96,0.96,8871,Tischeriidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,8874,Yponomeutidae,13,3,0.6666666666666666,1.0,0.15384615384615385,1.0,0.25,1.0 +onnx,common_0.96,0.96,9408,Micropterigidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,9410,Lyonetiidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,9412,Tineidae,0,4,0.0,1.0,,0,0.0,1.0 +onnx,common_0.96,0.96,9541689,Meessiidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,9689,Oecophoridae,32,18,1.0,1.0,0.5625,1.0,0.72,1.0 +onnx,common_0.96,0.96,9717,Nolidae,191,146,1.0,1.0,0.7643979057591623,1.0,0.8664688427299703,1.0 +torch-tta,zero,0,3528,Incurvariidae,0,5,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,3530,Lasiocampidae,728,634,0.9589905362776026,1.0,0.8351648351648352,1.0,0.8928046989721,1.0 +torch-tta,zero,0,3552,Ethmiidae,48,49,0.8571428571428571,1.0,0.875,1.0,0.865979381443299,1.0 +torch-tta,zero,0,3553,Gelechiidae,2,87,0.0,1.0,0.0,1.0,0.0,1.0 +torch-tta,zero,0,3554,Glyphipterigidae,0,3,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,3556,Hepialidae,14,35,0.4,1.0,1.0,1.0,0.5714285714285714,1.0 +torch-tta,zero,0,4300664,Autostichidae,0,6,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,4300668,Peleopodidae,24,26,0.8461538461538461,1.0,0.9166666666666666,1.0,0.8799999999999999,1.0 +torch-tta,zero,0,4525436,Praydidae,0,3,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,4525465,Argyresthiidae,0,1,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,4527533,Stathmopodidae,2,2,1.0,1.0,1.0,1.0,1.0,1.0 +torch-tta,zero,0,4528997,Lypusidae,0,3,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,4532185,Erebidae,15241,14747,0.9858954363599376,1.0,0.9539400301817466,1.0,0.9696545284780579,1.0 +torch-tta,zero,0,4538,Adelidae,0,23,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,4542,Alucitidae,1,4,0.25,1.0,1.0,1.0,0.4,1.0 +torch-tta,zero,0,4554,Batrachedridae,0,4,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,4705755,Depressariidae,0,31,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,4864,Bedelliidae,0,95,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,4865,Blastobasidae,0,11,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,4867,Bucculatricidae,0,2,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,4870,Choreutidae,0,8,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,5320,Douglasiidae,0,1,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,5336,Pyralidae,365,517,0.6653771760154739,1.0,0.9424657534246575,1.0,0.780045351473923,1.0 +torch-tta,zero,0,5338,Roeslerstammiidae,0,1,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,5340,Sesiidae,0,5,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,5343,Tortricidae,632,1091,0.5637030247479377,1.0,0.9731012658227848,1.0,0.713871154962275,1.0 +torch-tta,zero,0,5345,Ypsolophidae,46,46,0.9130434782608695,1.0,0.9130434782608695,1.0,0.9130434782608695,1.0 +torch-tta,zero,0,5474,Limacodidae,475,411,0.9781021897810219,1.0,0.8463157894736842,1.0,0.9074492099322798,1.0 +torch-tta,zero,0,5481,Pieridae,0,4,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,5487,Gracillariidae,0,19,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,6166,Opostegidae,0,14,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,6946,Eriocraniidae,0,1,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,6950,Geometridae,15047,14889,0.9834777352407817,1.0,0.9731507941782415,1.0,0.9782870122928914,1.0 +torch-tta,zero,0,6953,Hesperiidae,0,1,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,6954,Epermeniidae,0,1,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,7014,Nepticulidae,0,4,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,7015,Noctuidae,9243,9196,0.9413875598086124,1.0,0.936600670777886,1.0,0.9389880145344109,1.0 +torch-tta,zero,0,7016,Notodontidae,3321,3266,0.9611145131659522,1.0,0.9451972297500753,1.0,0.9530894185516927,1.0 +torch-tta,zero,0,7017,Nymphalidae,0,10,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,7294,Drepanidae,1604,1472,0.9823369565217391,1.0,0.9014962593516209,1.0,0.9401820546163849,1.0 +torch-tta,zero,0,7297,Elachistidae,0,15,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,8838,Coleophoridae,0,90,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,8839,Cosmopterigidae,0,1,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,8840,Cossidae,0,19,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,8841,Crambidae,4542,4373,0.9634118454150469,1.0,0.9275649493615148,1.0,0.9451486259113854,1.0 +torch-tta,zero,0,8855,Momphidae,0,1,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,8860,Plutellidae,14,27,0.48148148148148145,1.0,0.9285714285714286,1.0,0.6341463414634145,1.0 +torch-tta,zero,0,8861,Psychidae,0,22,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,8863,Pterophoridae,79,83,0.891566265060241,1.0,0.9367088607594937,1.0,0.9135802469135801,1.0 +torch-tta,zero,0,8864,Saturniidae,0,1,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,8865,Schreckensteiniidae,0,2,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,8866,Scythrididae,0,6,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,8868,Sphingidae,1124,1024,0.9912109375,1.0,0.9030249110320284,1.0,0.9450651769087522,1.0 +torch-tta,zero,0,8871,Tischeriidae,0,35,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,8874,Yponomeutidae,13,38,0.15789473684210525,1.0,0.46153846153846156,1.0,0.23529411764705882,1.0 +torch-tta,zero,0,9408,Micropterigidae,0,1,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,9410,Lyonetiidae,0,2,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,9412,Tineidae,0,84,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,9689,Oecophoridae,32,48,0.4166666666666667,1.0,0.625,1.0,0.5,1.0 +torch-tta,zero,0,9717,Nolidae,191,188,0.9521276595744681,1.0,0.93717277486911,1.0,0.9445910290237466,1.0 +torch-tta,optimized,0.964760661125183,3528,Incurvariidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,3530,Lasiocampidae,728,433,1.0,1.0,0.5947802197802198,1.0,0.7459086993970714,1.0 +torch-tta,optimized,0.964760661125183,3552,Ethmiidae,48,41,1.0,1.0,0.8541666666666666,1.0,0.9213483146067415,1.0 +torch-tta,optimized,0.964760661125183,3553,Gelechiidae,2,0,1.0,0.0,0.0,1.0,0.0,1.0 +torch-tta,optimized,0.964760661125183,3554,Glyphipterigidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,3556,Hepialidae,14,12,1.0,1.0,0.8571428571428571,1.0,0.9230769230769229,1.0 +torch-tta,optimized,0.964760661125183,4300664,Autostichidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,4300668,Peleopodidae,24,20,0.95,1.0,0.7916666666666666,1.0,0.8636363636363636,1.0 +torch-tta,optimized,0.964760661125183,4525436,Praydidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,4525465,Argyresthiidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,4527533,Stathmopodidae,2,1,1.0,1.0,0.5,1.0,0.6666666666666666,1.0 +torch-tta,optimized,0.964760661125183,4528997,Lypusidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,4532185,Erebidae,15241,12406,0.9991939384168951,1.0,0.8133324585000984,1.0,0.8967338228379209,1.0 +torch-tta,optimized,0.964760661125183,4538,Adelidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,4542,Alucitidae,1,1,1.0,1.0,1.0,1.0,1.0,1.0 +torch-tta,optimized,0.964760661125183,4554,Batrachedridae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,4705755,Depressariidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,4864,Bedelliidae,0,17,0.0,1.0,,0,0.0,1.0 +torch-tta,optimized,0.964760661125183,4865,Blastobasidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,4867,Bucculatricidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,4870,Choreutidae,0,2,0.0,1.0,,0,0.0,1.0 +torch-tta,optimized,0.964760661125183,5320,Douglasiidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,5336,Pyralidae,365,295,0.9830508474576272,1.0,0.7945205479452054,1.0,0.8787878787878789,1.0 +torch-tta,optimized,0.964760661125183,5338,Roeslerstammiidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,5340,Sesiidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,5343,Tortricidae,632,501,0.9920159680638723,1.0,0.7863924050632911,1.0,0.8773168578993822,1.0 +torch-tta,optimized,0.964760661125183,5345,Ypsolophidae,46,30,1.0,1.0,0.6521739130434783,1.0,0.7894736842105263,1.0 +torch-tta,optimized,0.964760661125183,5474,Limacodidae,475,262,1.0,1.0,0.5515789473684211,1.0,0.7109905020352781,1.0 +torch-tta,optimized,0.964760661125183,5481,Pieridae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,5487,Gracillariidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,6166,Opostegidae,0,1,0.0,1.0,,0,0.0,1.0 +torch-tta,optimized,0.964760661125183,6946,Eriocraniidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,6950,Geometridae,15047,12791,0.9991400203267923,1.0,0.8493387386189938,1.0,0.918169408721891,1.0 +torch-tta,optimized,0.964760661125183,6953,Hesperiidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,6954,Epermeniidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,7014,Nepticulidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,7015,Noctuidae,9243,6860,0.9988338192419826,1.0,0.7413177539759819,1.0,0.8510215487797305,1.0 +torch-tta,optimized,0.964760661125183,7016,Notodontidae,3321,2778,0.9992800575953924,1.0,0.8358928033724782,1.0,0.910313166092802,1.0 +torch-tta,optimized,0.964760661125183,7017,Nymphalidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,7294,Drepanidae,1604,1211,0.9991742361684558,1.0,0.7543640897755611,1.0,0.8596802841918295,1.0 +torch-tta,optimized,0.964760661125183,7297,Elachistidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,8838,Coleophoridae,0,1,0.0,1.0,,0,0.0,1.0 +torch-tta,optimized,0.964760661125183,8839,Cosmopterigidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,8840,Cossidae,0,1,0.0,1.0,,0,0.0,1.0 +torch-tta,optimized,0.964760661125183,8841,Crambidae,4542,2776,0.9985590778097982,1.0,0.6103038309114928,1.0,0.757584039355015,1.0 +torch-tta,optimized,0.964760661125183,8855,Momphidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,8860,Plutellidae,14,13,0.9230769230769231,1.0,0.8571428571428571,1.0,0.8888888888888888,1.0 +torch-tta,optimized,0.964760661125183,8861,Psychidae,0,1,0.0,1.0,,0,0.0,1.0 +torch-tta,optimized,0.964760661125183,8863,Pterophoridae,79,70,1.0,1.0,0.8860759493670886,1.0,0.9395973154362416,1.0 +torch-tta,optimized,0.964760661125183,8864,Saturniidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,8865,Schreckensteiniidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,8866,Scythrididae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,8868,Sphingidae,1124,864,1.0,1.0,0.7686832740213523,1.0,0.8692152917505029,1.0 +torch-tta,optimized,0.964760661125183,8871,Tischeriidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,8874,Yponomeutidae,13,5,0.6,1.0,0.23076923076923078,1.0,0.3333333333333333,1.0 +torch-tta,optimized,0.964760661125183,9408,Micropterigidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,9410,Lyonetiidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,9412,Tineidae,0,1,0.0,1.0,,0,0.0,1.0 +torch-tta,optimized,0.964760661125183,9689,Oecophoridae,32,18,1.0,1.0,0.5625,1.0,0.72,1.0 +torch-tta,optimized,0.964760661125183,9717,Nolidae,191,155,1.0,1.0,0.8115183246073299,1.0,0.8959537572254335,1.0 +torch-tta,common_0.96,0.96,3528,Incurvariidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,3530,Lasiocampidae,728,439,1.0,1.0,0.603021978021978,1.0,0.7523564695801199,1.0 +torch-tta,common_0.96,0.96,3552,Ethmiidae,48,41,1.0,1.0,0.8541666666666666,1.0,0.9213483146067415,1.0 +torch-tta,common_0.96,0.96,3553,Gelechiidae,2,0,1.0,0.0,0.0,1.0,0.0,1.0 +torch-tta,common_0.96,0.96,3554,Glyphipterigidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,3556,Hepialidae,14,12,1.0,1.0,0.8571428571428571,1.0,0.9230769230769229,1.0 +torch-tta,common_0.96,0.96,4300664,Autostichidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,4300668,Peleopodidae,24,20,0.95,1.0,0.7916666666666666,1.0,0.8636363636363636,1.0 +torch-tta,common_0.96,0.96,4525436,Praydidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,4525465,Argyresthiidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,4527533,Stathmopodidae,2,1,1.0,1.0,0.5,1.0,0.6666666666666666,1.0 +torch-tta,common_0.96,0.96,4528997,Lypusidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,4532185,Erebidae,15241,12523,0.9992014692964944,1.0,0.821009120136474,1.0,0.9013830860106613,1.0 +torch-tta,common_0.96,0.96,4538,Adelidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,4542,Alucitidae,1,1,1.0,1.0,1.0,1.0,1.0,1.0 +torch-tta,common_0.96,0.96,4554,Batrachedridae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,4705755,Depressariidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,4864,Bedelliidae,0,17,0.0,1.0,,0,0.0,1.0 +torch-tta,common_0.96,0.96,4865,Blastobasidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,4867,Bucculatricidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,4870,Choreutidae,0,2,0.0,1.0,,0,0.0,1.0 +torch-tta,common_0.96,0.96,5320,Douglasiidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,5336,Pyralidae,365,296,0.9831081081081081,1.0,0.7972602739726027,1.0,0.8804841149773072,1.0 +torch-tta,common_0.96,0.96,5338,Roeslerstammiidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,5340,Sesiidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,5343,Tortricidae,632,506,0.9920948616600791,1.0,0.7943037974683544,1.0,0.882249560632689,1.0 +torch-tta,common_0.96,0.96,5345,Ypsolophidae,46,30,1.0,1.0,0.6521739130434783,1.0,0.7894736842105263,1.0 +torch-tta,common_0.96,0.96,5474,Limacodidae,475,268,1.0,1.0,0.5642105263157895,1.0,0.721399730820996,1.0 +torch-tta,common_0.96,0.96,5481,Pieridae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,5487,Gracillariidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,6166,Opostegidae,0,1,0.0,1.0,,0,0.0,1.0 +torch-tta,common_0.96,0.96,6946,Eriocraniidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,6950,Geometridae,15047,12884,0.9991462278795405,1.0,0.8555193726324184,1.0,0.9217715083598869,1.0 +torch-tta,common_0.96,0.96,6953,Hesperiidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,6954,Epermeniidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,7014,Nepticulidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,7015,Noctuidae,9243,6930,0.9985569985569985,1.0,0.7486746727253056,1.0,0.8557472330427255,1.0 +torch-tta,common_0.96,0.96,7016,Notodontidae,3321,2789,0.9992828970957333,1.0,0.8392050587172538,1.0,0.9122749590834697,1.0 +torch-tta,common_0.96,0.96,7017,Nymphalidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,7294,Drepanidae,1604,1226,0.9975530179445351,1.0,0.7624688279301746,1.0,0.8643109540636043,1.0 +torch-tta,common_0.96,0.96,7297,Elachistidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,8838,Coleophoridae,0,1,0.0,1.0,,0,0.0,1.0 +torch-tta,common_0.96,0.96,8839,Cosmopterigidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,8840,Cossidae,0,1,0.0,1.0,,0,0.0,1.0 +torch-tta,common_0.96,0.96,8841,Crambidae,4542,2829,0.9975256274301874,1.0,0.6213121972699251,1.0,0.765703432370099,1.0 +torch-tta,common_0.96,0.96,8855,Momphidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,8860,Plutellidae,14,13,0.9230769230769231,1.0,0.8571428571428571,1.0,0.8888888888888888,1.0 +torch-tta,common_0.96,0.96,8861,Psychidae,0,1,0.0,1.0,,0,0.0,1.0 +torch-tta,common_0.96,0.96,8863,Pterophoridae,79,70,1.0,1.0,0.8860759493670886,1.0,0.9395973154362416,1.0 +torch-tta,common_0.96,0.96,8864,Saturniidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,8865,Schreckensteiniidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,8866,Scythrididae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,8868,Sphingidae,1124,865,1.0,1.0,0.7695729537366548,1.0,0.8697838109602816,1.0 +torch-tta,common_0.96,0.96,8871,Tischeriidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,8874,Yponomeutidae,13,5,0.6,1.0,0.23076923076923078,1.0,0.3333333333333333,1.0 +torch-tta,common_0.96,0.96,9408,Micropterigidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,9410,Lyonetiidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,9412,Tineidae,0,1,0.0,1.0,,0,0.0,1.0 +torch-tta,common_0.96,0.96,9689,Oecophoridae,32,18,1.0,1.0,0.5625,1.0,0.72,1.0 +torch-tta,common_0.96,0.96,9717,Nolidae,191,158,1.0,1.0,0.8272251308900523,1.0,0.9054441260744984,1.0 +onnx-tta,zero,0,3528,Incurvariidae,0,5,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,3530,Lasiocampidae,728,635,0.9590551181102362,1.0,0.8365384615384616,1.0,0.8936170212765957,1.0 +onnx-tta,zero,0,3552,Ethmiidae,48,49,0.8571428571428571,1.0,0.875,1.0,0.865979381443299,1.0 +onnx-tta,zero,0,3553,Gelechiidae,2,87,0.0,1.0,0.0,1.0,0.0,1.0 +onnx-tta,zero,0,3554,Glyphipterigidae,0,3,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,3556,Hepialidae,14,35,0.4,1.0,1.0,1.0,0.5714285714285714,1.0 +onnx-tta,zero,0,4300664,Autostichidae,0,6,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,4300668,Peleopodidae,24,26,0.8461538461538461,1.0,0.9166666666666666,1.0,0.8799999999999999,1.0 +onnx-tta,zero,0,4525436,Praydidae,0,3,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,4525465,Argyresthiidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,4527533,Stathmopodidae,2,2,1.0,1.0,1.0,1.0,1.0,1.0 +onnx-tta,zero,0,4528997,Lypusidae,0,3,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,4532185,Erebidae,15241,14751,0.9858314690529456,1.0,0.9541368676596024,1.0,0.9697252600693519,1.0 +onnx-tta,zero,0,4538,Adelidae,0,23,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,4542,Alucitidae,1,4,0.25,1.0,1.0,1.0,0.4,1.0 +onnx-tta,zero,0,4554,Batrachedridae,0,4,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,4705755,Depressariidae,0,31,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,4864,Bedelliidae,0,96,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,4865,Blastobasidae,0,11,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,4867,Bucculatricidae,0,2,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,4870,Choreutidae,0,8,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,5320,Douglasiidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,5336,Pyralidae,365,517,0.6673114119922631,1.0,0.9452054794520548,1.0,0.782312925170068,1.0 +onnx-tta,zero,0,5338,Roeslerstammiidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,5340,Sesiidae,0,5,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,5343,Tortricidae,632,1087,0.5657773689052438,1.0,0.9731012658227848,1.0,0.7155322862129145,1.0 +onnx-tta,zero,0,5345,Ypsolophidae,46,46,0.9130434782608695,1.0,0.9130434782608695,1.0,0.9130434782608695,1.0 +onnx-tta,zero,0,5474,Limacodidae,475,411,0.9781021897810219,1.0,0.8463157894736842,1.0,0.9074492099322798,1.0 +onnx-tta,zero,0,5481,Pieridae,0,4,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,5487,Gracillariidae,0,19,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,6166,Opostegidae,0,14,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,6946,Eriocraniidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,6950,Geometridae,15047,14888,0.9834766254701773,1.0,0.9730843357479896,1.0,0.9782528812426925,1.0 +onnx-tta,zero,0,6953,Hesperiidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,6954,Epermeniidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,7014,Nepticulidae,0,4,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,7015,Noctuidae,9243,9198,0.9412915851272016,1.0,0.9367088607594937,1.0,0.9389946315275743,1.0 +onnx-tta,zero,0,7016,Notodontidae,3321,3266,0.9614206981016534,1.0,0.9454983438723276,1.0,0.9533930469105814,1.0 +onnx-tta,zero,0,7017,Nymphalidae,0,10,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,7294,Drepanidae,1604,1471,0.982324949014276,1.0,0.9008728179551122,1.0,0.9398373983739837,1.0 +onnx-tta,zero,0,7297,Elachistidae,0,15,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,8838,Coleophoridae,0,87,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,8839,Cosmopterigidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,8840,Cossidae,0,19,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,8841,Crambidae,4542,4371,0.9633951040951727,1.0,0.9271246147071774,1.0,0.944911926399641,1.0 +onnx-tta,zero,0,8855,Momphidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,8860,Plutellidae,14,27,0.48148148148148145,1.0,0.9285714285714286,1.0,0.6341463414634145,1.0 +onnx-tta,zero,0,8861,Psychidae,0,22,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,8863,Pterophoridae,79,83,0.891566265060241,1.0,0.9367088607594937,1.0,0.9135802469135801,1.0 +onnx-tta,zero,0,8864,Saturniidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,8865,Schreckensteiniidae,0,2,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,8866,Scythrididae,0,6,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,8868,Sphingidae,1124,1024,0.9912109375,1.0,0.9030249110320284,1.0,0.9450651769087522,1.0 +onnx-tta,zero,0,8871,Tischeriidae,0,36,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,8874,Yponomeutidae,13,38,0.15789473684210525,1.0,0.46153846153846156,1.0,0.23529411764705882,1.0 +onnx-tta,zero,0,9408,Micropterigidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,9410,Lyonetiidae,0,2,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,9412,Tineidae,0,85,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,9689,Oecophoridae,32,48,0.4166666666666667,1.0,0.625,1.0,0.5,1.0 +onnx-tta,zero,0,9717,Nolidae,191,189,0.9470899470899471,1.0,0.93717277486911,1.0,0.9421052631578947,1.0 +onnx-tta,optimized,0.966471254825592,3528,Incurvariidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,3530,Lasiocampidae,728,431,1.0,1.0,0.592032967032967,1.0,0.7437446074201899,1.0 +onnx-tta,optimized,0.966471254825592,3552,Ethmiidae,48,41,1.0,1.0,0.8541666666666666,1.0,0.9213483146067415,1.0 +onnx-tta,optimized,0.966471254825592,3553,Gelechiidae,2,0,1.0,0.0,0.0,1.0,0.0,1.0 +onnx-tta,optimized,0.966471254825592,3554,Glyphipterigidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,3556,Hepialidae,14,12,1.0,1.0,0.8571428571428571,1.0,0.9230769230769229,1.0 +onnx-tta,optimized,0.966471254825592,4300664,Autostichidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,4300668,Peleopodidae,24,20,0.95,1.0,0.7916666666666666,1.0,0.8636363636363636,1.0 +onnx-tta,optimized,0.966471254825592,4525436,Praydidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,4525465,Argyresthiidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,4527533,Stathmopodidae,2,1,1.0,1.0,0.5,1.0,0.6666666666666666,1.0 +onnx-tta,optimized,0.966471254825592,4528997,Lypusidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,4532185,Erebidae,15241,12376,0.9991919844861021,1.0,0.8113640837215406,1.0,0.8955353586559004,1.0 +onnx-tta,optimized,0.966471254825592,4538,Adelidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,4542,Alucitidae,1,1,1.0,1.0,1.0,1.0,1.0,1.0 +onnx-tta,optimized,0.966471254825592,4554,Batrachedridae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,4705755,Depressariidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,4864,Bedelliidae,0,16,0.0,1.0,,0,0.0,1.0 +onnx-tta,optimized,0.966471254825592,4865,Blastobasidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,4867,Bucculatricidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,4870,Choreutidae,0,2,0.0,1.0,,0,0.0,1.0 +onnx-tta,optimized,0.966471254825592,5320,Douglasiidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,5336,Pyralidae,365,294,0.9863945578231292,1.0,0.7945205479452054,1.0,0.8801213960546284,1.0 +onnx-tta,optimized,0.966471254825592,5338,Roeslerstammiidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,5340,Sesiidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,5343,Tortricidae,632,499,0.9919839679358717,1.0,0.7832278481012658,1.0,0.8753315649867373,1.0 +onnx-tta,optimized,0.966471254825592,5345,Ypsolophidae,46,30,1.0,1.0,0.6521739130434783,1.0,0.7894736842105263,1.0 +onnx-tta,optimized,0.966471254825592,5474,Limacodidae,475,259,1.0,1.0,0.5452631578947369,1.0,0.7057220708446866,1.0 +onnx-tta,optimized,0.966471254825592,5481,Pieridae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,5487,Gracillariidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,6166,Opostegidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx-tta,optimized,0.966471254825592,6946,Eriocraniidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,6950,Geometridae,15047,12755,0.9991375931007448,1.0,0.8469462351299263,1.0,0.9167685778001583,1.0 +onnx-tta,optimized,0.966471254825592,6953,Hesperiidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,6954,Epermeniidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,7014,Nepticulidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,7015,Noctuidae,9243,6816,0.9988262910798122,1.0,0.7365573947852428,1.0,0.8478734665919422,1.0 +onnx-tta,optimized,0.966471254825592,7016,Notodontidae,3321,2775,0.9992792792792793,1.0,0.8349894610057211,1.0,0.9097769028871392,1.0 +onnx-tta,optimized,0.966471254825592,7017,Nymphalidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,7294,Drepanidae,1604,1208,0.9991721854304636,1.0,0.7524937655860349,1.0,0.8584637268847795,1.0 +onnx-tta,optimized,0.966471254825592,7297,Elachistidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,8838,Coleophoridae,0,1,0.0,1.0,,0,0.0,1.0 +onnx-tta,optimized,0.966471254825592,8839,Cosmopterigidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,8840,Cossidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx-tta,optimized,0.966471254825592,8841,Crambidae,4542,2758,0.9985496736765772,1.0,0.6063408190224571,1.0,0.7545205479452055,1.0 +onnx-tta,optimized,0.966471254825592,8855,Momphidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,8860,Plutellidae,14,13,0.9230769230769231,1.0,0.8571428571428571,1.0,0.8888888888888888,1.0 +onnx-tta,optimized,0.966471254825592,8861,Psychidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx-tta,optimized,0.966471254825592,8863,Pterophoridae,79,70,1.0,1.0,0.8860759493670886,1.0,0.9395973154362416,1.0 +onnx-tta,optimized,0.966471254825592,8864,Saturniidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,8865,Schreckensteiniidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,8866,Scythrididae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,8868,Sphingidae,1124,863,1.0,1.0,0.7677935943060499,1.0,0.8686462003019627,1.0 +onnx-tta,optimized,0.966471254825592,8871,Tischeriidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,8874,Yponomeutidae,13,5,0.6,1.0,0.23076923076923078,1.0,0.3333333333333333,1.0 +onnx-tta,optimized,0.966471254825592,9408,Micropterigidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,9410,Lyonetiidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,9412,Tineidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx-tta,optimized,0.966471254825592,9689,Oecophoridae,32,18,1.0,1.0,0.5625,1.0,0.72,1.0 +onnx-tta,optimized,0.966471254825592,9717,Nolidae,191,154,1.0,1.0,0.806282722513089,1.0,0.8927536231884057,1.0 +onnx-tta,common_0.96,0.96,3528,Incurvariidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,3530,Lasiocampidae,728,439,1.0,1.0,0.603021978021978,1.0,0.7523564695801199,1.0 +onnx-tta,common_0.96,0.96,3552,Ethmiidae,48,41,1.0,1.0,0.8541666666666666,1.0,0.9213483146067415,1.0 +onnx-tta,common_0.96,0.96,3553,Gelechiidae,2,0,1.0,0.0,0.0,1.0,0.0,1.0 +onnx-tta,common_0.96,0.96,3554,Glyphipterigidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,3556,Hepialidae,14,12,1.0,1.0,0.8571428571428571,1.0,0.9230769230769229,1.0 +onnx-tta,common_0.96,0.96,4300664,Autostichidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,4300668,Peleopodidae,24,20,0.95,1.0,0.7916666666666666,1.0,0.8636363636363636,1.0 +onnx-tta,common_0.96,0.96,4525436,Praydidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,4525465,Argyresthiidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,4527533,Stathmopodidae,2,1,1.0,1.0,0.5,1.0,0.6666666666666666,1.0 +onnx-tta,common_0.96,0.96,4528997,Lypusidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,4532185,Erebidae,15241,12528,0.9992017879948915,1.0,0.821337182599567,1.0,0.9015808995642624,1.0 +onnx-tta,common_0.96,0.96,4538,Adelidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,4542,Alucitidae,1,1,1.0,1.0,1.0,1.0,1.0,1.0 +onnx-tta,common_0.96,0.96,4554,Batrachedridae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,4705755,Depressariidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,4864,Bedelliidae,0,17,0.0,1.0,,0,0.0,1.0 +onnx-tta,common_0.96,0.96,4865,Blastobasidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,4867,Bucculatricidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,4870,Choreutidae,0,2,0.0,1.0,,0,0.0,1.0 +onnx-tta,common_0.96,0.96,5320,Douglasiidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,5336,Pyralidae,365,296,0.9831081081081081,1.0,0.7972602739726027,1.0,0.8804841149773072,1.0 +onnx-tta,common_0.96,0.96,5338,Roeslerstammiidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,5340,Sesiidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,5343,Tortricidae,632,507,0.9921104536489151,1.0,0.7958860759493671,1.0,0.8832309043020192,1.0 +onnx-tta,common_0.96,0.96,5345,Ypsolophidae,46,30,1.0,1.0,0.6521739130434783,1.0,0.7894736842105263,1.0 +onnx-tta,common_0.96,0.96,5474,Limacodidae,475,269,1.0,1.0,0.5663157894736842,1.0,0.7231182795698925,1.0 +onnx-tta,common_0.96,0.96,5481,Pieridae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,5487,Gracillariidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,6166,Opostegidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx-tta,common_0.96,0.96,6946,Eriocraniidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,6950,Geometridae,15047,12882,0.9991460953268126,1.0,0.8553864557719146,1.0,0.9216942962512084,1.0 +onnx-tta,common_0.96,0.96,6953,Hesperiidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,6954,Epermeniidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,7014,Nepticulidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,7015,Noctuidae,9243,6926,0.9987005486572336,1.0,0.7483501027804825,1.0,0.8555878532995239,1.0 +onnx-tta,common_0.96,0.96,7016,Notodontidae,3321,2788,0.9992826398852224,1.0,0.8389039445950015,1.0,0.9120969062039614,1.0 +onnx-tta,common_0.96,0.96,7017,Nymphalidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,7294,Drepanidae,1604,1227,0.9975550122249389,1.0,0.7630922693266833,1.0,0.86471211586012,1.0 +onnx-tta,common_0.96,0.96,7297,Elachistidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,8838,Coleophoridae,0,1,0.0,1.0,,0,0.0,1.0 +onnx-tta,common_0.96,0.96,8839,Cosmopterigidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,8840,Cossidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx-tta,common_0.96,0.96,8841,Crambidae,4542,2832,0.9978813559322034,1.0,0.6221928665785997,1.0,0.7664768104149715,1.0 +onnx-tta,common_0.96,0.96,8855,Momphidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,8860,Plutellidae,14,13,0.9230769230769231,1.0,0.8571428571428571,1.0,0.8888888888888888,1.0 +onnx-tta,common_0.96,0.96,8861,Psychidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx-tta,common_0.96,0.96,8863,Pterophoridae,79,70,1.0,1.0,0.8860759493670886,1.0,0.9395973154362416,1.0 +onnx-tta,common_0.96,0.96,8864,Saturniidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,8865,Schreckensteiniidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,8866,Scythrididae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,8868,Sphingidae,1124,865,1.0,1.0,0.7695729537366548,1.0,0.8697838109602816,1.0 +onnx-tta,common_0.96,0.96,8871,Tischeriidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,8874,Yponomeutidae,13,5,0.6,1.0,0.23076923076923078,1.0,0.3333333333333333,1.0 +onnx-tta,common_0.96,0.96,9408,Micropterigidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,9410,Lyonetiidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,9412,Tineidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx-tta,common_0.96,0.96,9689,Oecophoridae,32,18,1.0,1.0,0.5625,1.0,0.72,1.0 +onnx-tta,common_0.96,0.96,9717,Nolidae,191,158,1.0,1.0,0.8272251308900523,1.0,0.9054441260744984,1.0 diff --git a/docs/assets/mambo-family-precision.json b/docs/assets/mambo-family-precision.json new file mode 100644 index 0000000..bd11fd6 --- /dev/null +++ b/docs/assets/mambo-family-precision.json @@ -0,0 +1,19758 @@ +{ + "revision": "70cc69adc05362863439277048e06386c1f885e1", + "study_sha256": "9c5f37e9c2aeb2d05de28f74d254fd913f184981057cef94cce1d4f28481dd6a", + "taxonomy": { + "names": { + "5481": "Pieridae", + "7017": "Nymphalidae", + "5473": "Lycaenidae", + "4532185": "Erebidae", + "8868": "Sphingidae", + "8863": "Pterophoridae", + "6953": "Hesperiidae", + "9417": "Papilionidae", + "6950": "Geometridae", + "7015": "Noctuidae", + "9717": "Nolidae", + "8866": "Scythrididae", + "3530": "Lasiocampidae", + "8841": "Crambidae", + "5343": "Tortricidae", + "7294": "Drepanidae", + "8840": "Cossidae", + "7016": "Notodontidae", + "8875": "Zygaenidae", + "8864": "Saturniidae", + "5336": "Pyralidae", + "1933999": "Riodinidae", + "3563": "Endromidae", + "8834": "Carposinidae", + "4528997": "Lypusidae", + "3528": "Incurvariidae", + "8870": "Thyrididae", + "9689": "Oecophoridae", + "8860": "Plutellidae", + "5340": "Sesiidae", + "4538": "Adelidae", + "8839": "Cosmopterigidae", + "5474": "Limacodidae", + "9412": "Tineidae", + "3552": "Ethmiidae", + "3553": "Gelechiidae", + "8874": "Yponomeutidae", + "4870": "Choreutidae", + "3556": "Hepialidae", + "5487": "Gracillariidae", + "5345": "Ypsolophidae", + "4705755": "Depressariidae", + "4866": "Brahmaeidae", + "3554": "Glyphipterigidae", + "4534947": "Euteliidae", + "8873": "Urodidae", + "3531": "Lecithoceridae", + "7014": "Nepticulidae", + "7297": "Elachistidae", + "4300668": "Peleopodidae", + "8861": "Psychidae", + "6954": "Epermeniidae", + "4525465": "Argyresthiidae", + "4527533": "Stathmopodidae", + "8838": "Coleophoridae", + "4864": "Bedelliidae", + "5338": "Roeslerstammiidae", + "6166": "Opostegidae", + "8871": "Tischeriidae", + "6946": "Eriocraniidae", + "5320": "Douglasiidae", + "4554": "Batrachedridae", + "9410": "Lyonetiidae", + "4525436": "Praydidae", + "4867": "Bucculatricidae", + "4865": "Blastobasidae", + "8836": "Castniidae", + "4547": "Anthelidae", + "6165": "Oenosandridae", + "4300662": "Xyloryctidae", + "9122734": "Attevidae", + "8872": "Uraniidae", + "4542": "Alucitidae", + "9409": "Megalopygidae", + "4300664": "Autostichidae", + "3256826": "Apatelodidae", + "5734720": "Phaudidae", + "9541689": "Meessiidae", + "3527": "Hyblaeidae", + "6956": "Epicopeiidae", + "9408": "Micropterigidae", + "3551": "Epipyropidae", + "6949": "Galacticidae", + "3529": "Lacturidae", + "5333": "Palaephatidae", + "3555": "Heliodinidae", + "8855": "Momphidae", + "8832": "Bombycidae", + "9407": "Mimallonidae", + "5339": "Sematuridae", + "6948": "Eupterotidae", + "8025": "Cimeliidae", + "4868": "Callidulidae", + "8865": "Schreckensteiniidae", + "6929": "Immidae", + "6947": "Eriocottidae", + "4871": "Copromorphidae", + "9414744": "Dryadaulidae", + "8833": "Brachodidae", + "6951": "Hedylidae", + "5318": "Dalceridae", + "8856": "Neopseustidae", + "3558": "Heterogynidae", + "10820875": "Ashinagidae" + }, + "sources": { + "examples/global_lepi/0032836-250426092105405_processing_metadata_postprocessed_quality_filtered.parquet": "094afa30bab25daad6583d33055bf7c61bcbade2f7f3c5e212d6b16fbf4429fe", + "local-evidence/mambo-v3/MAMBO/hierarchical_bioclip2_ft_neu_v1.pt": "34fe04302877de5540ed847859efb6b676876d5efc9401cd3336905e10ead568", + "local-evidence/mambo-bundle-final/classes.json": "8359b0ea67b6111ccd1897b1296f5bbeff1137cd306f1345136650e366f328db" + }, + "taxonomy": { + "all_species_parent_mappings_identical": true, + "species": 12632, + "global_families": 104, + "north_europe_families": [ + "1933999", + "3528", + "3530", + "3552", + "3553", + "3554", + "3556", + "3563", + "4300664", + "4300668", + "4525436", + "4525465", + "4527533", + "4528997", + "4532185", + "4538", + "4542", + "4554", + "4705755", + "4864", + "4865", + "4867", + "4870", + "5320", + "5336", + "5338", + "5340", + "5343", + "5345", + "5473", + "5474", + "5481", + "5487", + "6166", + "6946", + "6950", + "6953", + "6954", + "7014", + "7015", + "7016", + "7017", + "7294", + "7297", + "8838", + "8839", + "8840", + "8841", + "8855", + "8860", + "8861", + "8863", + "8864", + "8865", + "8866", + "8868", + "8870", + "8871", + "8874", + "8875", + "9408", + "9410", + "9412", + "9417", + "9541689", + "9689", + "9717" + ] + } + }, + "models": { + "v2": { + "zero": { + "threshold": 0, + "images": 52788, + "accepted": 52788, + "truth_counts": { + "7015": 9243, + "3530": 728, + "5343": 632, + "4532185": 15241, + "9717": 191, + "7016": 3321, + "3556": 14, + "8874": 13, + "8860": 14, + "4527533": 2, + "9689": 32, + "4300668": 24, + "3552": 48, + "3553": 2, + "8868": 1124, + "5336": 365, + "8841": 4542, + "7294": 1604, + "6950": 15047, + "8863": 79, + "4542": 1, + "5474": 475, + "5345": 46 + }, + "predicted_counts": { + "7015": 9278, + "3553": 119, + "3530": 636, + "7016": 3382, + "4300664": 4, + "3554": 4, + "5336": 590, + "4870": 1, + "7014": 22, + "8868": 1090, + "5343": 887, + "4532185": 14845, + "9412": 114, + "8861": 22, + "8841": 4339, + "4705755": 32, + "6950": 14892, + "9689": 32, + "7294": 1447, + "8840": 19, + "5345": 55, + "9717": 184, + "4525465": 7, + "9541689": 4, + "4538": 5, + "3556": 23, + "8863": 74, + "4528997": 2, + "5481": 9, + "3528": 3, + "4525436": 5, + "6946": 1, + "7017": 23, + "9417": 2, + "8860": 45, + "5487": 16, + "7297": 24, + "9410": 12, + "6166": 15, + "8874": 14, + "4864": 7, + "4527533": 4, + "4300668": 25, + "3552": 58, + "4865": 10, + "8865": 5, + "8839": 4, + "5474": 345, + "8871": 3, + "9408": 2, + "4867": 2, + "8866": 3, + "4542": 16, + "8870": 4, + "6953": 4, + "4554": 5, + "8855": 2, + "3563": 3, + "5473": 1, + "6954": 1, + "8864": 3, + "8838": 1, + "5338": 1, + "5340": 1 + }, + "official": { + "precision": { + "2": 0.2610923881260793 + }, + "recall": { + "2": 0.8435038466784595 + }, + "f1": { + "2": 0.2696839814067278 + }, + "micro_accuracy": { + "2": 0.9454610896415853 + }, + "coverage": { + "2": 1.0 + } + }, + "truth_group_diagnostic": { + "precision": 0.7265179495682207, + "recall": 0.8435038466784595, + "f1": 0.75042499174046 + }, + "groups": { + "precision": { + "7015": [ + 0.9372709635697348, + 1.0 + ], + "3530": [ + 0.9465408805031447, + 1.0 + ], + "5343": [ + 0.6617812852311161, + 1.0 + ], + "4532185": [ + 0.9810710676995621, + 1.0 + ], + "9717": [ + 0.9510869565217391, + 1.0 + ], + "7016": [ + 0.9278533412182141, + 1.0 + ], + "3556": [ + 0.6086956521739131, + 1.0 + ], + "8874": [ + 0.6428571428571429, + 1.0 + ], + "8860": [ + 0.24444444444444444, + 1.0 + ], + "4527533": [ + 0.5, + 1.0 + ], + "9689": [ + 0.59375, + 1.0 + ], + "4300668": [ + 0.88, + 1.0 + ], + "3552": [ + 0.6896551724137931, + 1.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8868": [ + 0.9697247706422019, + 1.0 + ], + "5336": [ + 0.5779661016949152, + 1.0 + ], + "8841": [ + 0.9504494123069832, + 1.0 + ], + "7294": [ + 0.972356599861783, + 1.0 + ], + "6950": [ + 0.9837496642492614, + 1.0 + ], + "8863": [ + 0.9459459459459459, + 1.0 + ], + "4542": [ + 0.0625, + 1.0 + ], + "5474": [ + 0.991304347826087, + 1.0 + ], + "5345": [ + 0.6909090909090909, + 1.0 + ], + "4300664": [ + 0.0, + 1.0 + ], + "3554": [ + 0.0, + 1.0 + ], + "4870": [ + 0.0, + 1.0 + ], + "7014": [ + 0.0, + 1.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "8861": [ + 0.0, + 1.0 + ], + "4705755": [ + 0.0, + 1.0 + ], + "8840": [ + 0.0, + 1.0 + ], + "4525465": [ + 0.0, + 1.0 + ], + "9541689": [ + 0.0, + 1.0 + ], + "4538": [ + 0.0, + 1.0 + ], + "4528997": [ + 0.0, + 1.0 + ], + "5481": [ + 0.0, + 1.0 + ], + "3528": [ + 0.0, + 1.0 + ], + "4525436": [ + 0.0, + 1.0 + ], + "6946": [ + 0.0, + 1.0 + ], + "7017": [ + 0.0, + 1.0 + ], + "9417": [ + 0.0, + 1.0 + ], + "5487": [ + 0.0, + 1.0 + ], + "7297": [ + 0.0, + 1.0 + ], + "9410": [ + 0.0, + 1.0 + ], + "6166": [ + 0.0, + 1.0 + ], + "4864": [ + 0.0, + 1.0 + ], + "4865": [ + 0.0, + 1.0 + ], + "8865": [ + 0.0, + 1.0 + ], + "8839": [ + 0.0, + 1.0 + ], + "8871": [ + 0.0, + 1.0 + ], + "9408": [ + 0.0, + 1.0 + ], + "4867": [ + 0.0, + 1.0 + ], + "8866": [ + 0.0, + 1.0 + ], + "8870": [ + 0.0, + 1.0 + ], + "6953": [ + 0.0, + 1.0 + ], + "4554": [ + 0.0, + 1.0 + ], + "8855": [ + 0.0, + 1.0 + ], + "3563": [ + 0.0, + 1.0 + ], + "5473": [ + 0.0, + 1.0 + ], + "6954": [ + 0.0, + 1.0 + ], + "8864": [ + 0.0, + 1.0 + ], + "8838": [ + 0.0, + 1.0 + ], + "5338": [ + 0.0, + 1.0 + ], + "5340": [ + 0.0, + 1.0 + ] + }, + "recall": { + "7015": [ + 0.9408200800605864, + 1.0 + ], + "3530": [ + 0.8269230769230769, + 1.0 + ], + "5343": [ + 0.9287974683544303, + 1.0 + ], + "4532185": [ + 0.9555803424972115, + 1.0 + ], + "9717": [ + 0.9162303664921466, + 1.0 + ], + "7016": [ + 0.9448961156278229, + 1.0 + ], + "3556": [ + 1.0, + 1.0 + ], + "8874": [ + 0.6923076923076923, + 1.0 + ], + "8860": [ + 0.7857142857142857, + 1.0 + ], + "4527533": [ + 1.0, + 1.0 + ], + "9689": [ + 0.59375, + 1.0 + ], + "4300668": [ + 0.9166666666666666, + 1.0 + ], + "3552": [ + 0.8333333333333334, + 1.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8868": [ + 0.9403914590747331, + 1.0 + ], + "5336": [ + 0.9342465753424658, + 1.0 + ], + "8841": [ + 0.9079700572435051, + 1.0 + ], + "7294": [ + 0.8771820448877805, + 1.0 + ], + "6950": [ + 0.9736160031900046, + 1.0 + ], + "8863": [ + 0.8860759493670886, + 1.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "5474": [ + 0.72, + 1.0 + ], + "5345": [ + 0.8260869565217391, + 1.0 + ] + }, + "f1": { + "4864": [ + 0.0, + 1.0 + ], + "8865": [ + 0.0, + 1.0 + ], + "3552": [ + 0.7547169811320755, + 1.0 + ], + "8868": [ + 0.95483288166215, + 1.0 + ], + "8866": [ + 0.0, + 1.0 + ], + "4705755": [ + 0.0, + 1.0 + ], + "4527533": [ + 0.6666666666666666, + 1.0 + ], + "7294": [ + 0.9223205506391349, + 1.0 + ], + "5345": [ + 0.7524752475247525, + 1.0 + ], + "6954": [ + 0.0, + 1.0 + ], + "9417": [ + 0.0, + 1.0 + ], + "5336": [ + 0.7141361256544502, + 1.0 + ], + "8839": [ + 0.0, + 1.0 + ], + "4554": [ + 0.0, + 1.0 + ], + "8860": [ + 0.3728813559322034, + 1.0 + ], + "4300664": [ + 0.0, + 1.0 + ], + "6946": [ + 0.0, + 1.0 + ], + "9410": [ + 0.0, + 1.0 + ], + "6166": [ + 0.0, + 1.0 + ], + "5481": [ + 0.0, + 1.0 + ], + "8840": [ + 0.0, + 1.0 + ], + "4532185": [ + 0.9681579472179751, + 1.0 + ], + "6950": [ + 0.9786566017569057, + 1.0 + ], + "9408": [ + 0.0, + 1.0 + ], + "4867": [ + 0.0, + 1.0 + ], + "8864": [ + 0.0, + 1.0 + ], + "4870": [ + 0.0, + 1.0 + ], + "3563": [ + 0.0, + 1.0 + ], + "8861": [ + 0.0, + 1.0 + ], + "8870": [ + 0.0, + 1.0 + ], + "8838": [ + 0.0, + 1.0 + ], + "8855": [ + 0.0, + 1.0 + ], + "9689": [ + 0.59375, + 1.0 + ], + "4300668": [ + 0.8979591836734693, + 1.0 + ], + "4525465": [ + 0.0, + 1.0 + ], + "5474": [ + 0.8341463414634147, + 1.0 + ], + "3556": [ + 0.7567567567567568, + 1.0 + ], + "3530": [ + 0.8826979472140762, + 1.0 + ], + "3528": [ + 0.0, + 1.0 + ], + "7014": [ + 0.0, + 1.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "4528997": [ + 0.0, + 1.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8841": [ + 0.9287242427654544, + 1.0 + ], + "7017": [ + 0.0, + 1.0 + ], + "5340": [ + 0.0, + 1.0 + ], + "8874": [ + 0.6666666666666666, + 1.0 + ], + "7015": [ + 0.9390421683494412, + 1.0 + ], + "7016": [ + 0.9362971803669999, + 1.0 + ], + "5338": [ + 0.0, + 1.0 + ], + "7297": [ + 0.0, + 1.0 + ], + "5343": [ + 0.7728768926925609, + 1.0 + ], + "8863": [ + 0.915032679738562, + 1.0 + ], + "8871": [ + 0.0, + 1.0 + ], + "6953": [ + 0.0, + 1.0 + ], + "4865": [ + 0.0, + 1.0 + ], + "3554": [ + 0.0, + 1.0 + ], + "5473": [ + 0.0, + 1.0 + ], + "4542": [ + 0.11764705882352941, + 1.0 + ], + "9717": [ + 0.9333333333333333, + 1.0 + ], + "4525436": [ + 0.0, + 1.0 + ], + "9541689": [ + 0.0, + 1.0 + ], + "4538": [ + 0.0, + 1.0 + ], + "5487": [ + 0.0, + 1.0 + ] + } + }, + "predicted_only": { + "4300664": 4, + "3554": 4, + "4870": 1, + "7014": 22, + "9412": 114, + "8861": 22, + "4705755": 32, + "8840": 19, + "4525465": 7, + "9541689": 4, + "4538": 5, + "4528997": 2, + "5481": 9, + "3528": 3, + "4525436": 5, + "6946": 1, + "7017": 23, + "9417": 2, + "5487": 16, + "7297": 24, + "9410": 12, + "6166": 15, + "4864": 7, + "4865": 10, + "8865": 5, + "8839": 4, + "8871": 3, + "9408": 2, + "4867": 2, + "8866": 3, + "8870": 4, + "6953": 4, + "4554": 5, + "8855": 2, + "3563": 3, + "5473": 1, + "6954": 1, + "8864": 3, + "8838": 1, + "5338": 1, + "5340": 1 + }, + "truth_families_without_accepted_predictions": [], + "false_positive_pairs": [ + { + "truth": "7015", + "prediction": "4532185", + "images": 146 + }, + { + "truth": "4532185", + "prediction": "7016", + "images": 130 + }, + { + "truth": "7015", + "prediction": "5343", + "images": 124 + }, + { + "truth": "8841", + "prediction": "5336", + "images": 123 + }, + { + "truth": "4532185", + "prediction": "7015", + "images": 113 + }, + { + "truth": "7016", + "prediction": "7015", + "images": 109 + }, + { + "truth": "6950", + "prediction": "8841", + "images": 96 + }, + { + "truth": "6950", + "prediction": "7015", + "images": 86 + }, + { + "truth": "7294", + "prediction": "7015", + "images": 83 + }, + { + "truth": "7015", + "prediction": "6950", + "images": 71 + }, + { + "truth": "4532185", + "prediction": "5336", + "images": 67 + }, + { + "truth": "6950", + "prediction": "4532185", + "images": 64 + }, + { + "truth": "4532185", + "prediction": "9412", + "images": 59 + }, + { + "truth": "4532185", + "prediction": "8841", + "images": 57 + }, + { + "truth": "8841", + "prediction": "7015", + "images": 55 + }, + { + "truth": "4532185", + "prediction": "6950", + "images": 49 + }, + { + "truth": "8841", + "prediction": "6950", + "images": 48 + }, + { + "truth": "8841", + "prediction": "5343", + "images": 48 + }, + { + "truth": "5474", + "prediction": "7015", + "images": 46 + }, + { + "truth": "3530", + "prediction": "7015", + "images": 45 + }, + { + "truth": "7015", + "prediction": "7016", + "images": 42 + }, + { + "truth": "3530", + "prediction": "7016", + "images": 40 + }, + { + "truth": "8841", + "prediction": "4532185", + "images": 39 + }, + { + "truth": "7294", + "prediction": "6950", + "images": 39 + }, + { + "truth": "7015", + "prediction": "3553", + "images": 37 + }, + { + "truth": "8868", + "prediction": "7015", + "images": 36 + }, + { + "truth": "6950", + "prediction": "5343", + "images": 30 + }, + { + "truth": "7015", + "prediction": "8841", + "images": 27 + }, + { + "truth": "7015", + "prediction": "5336", + "images": 27 + }, + { + "truth": "8841", + "prediction": "3553", + "images": 26 + }, + { + "truth": "5474", + "prediction": "5343", + "images": 25 + }, + { + "truth": "4532185", + "prediction": "4705755", + "images": 22 + }, + { + "truth": "4532185", + "prediction": "3553", + "images": 19 + }, + { + "truth": "7294", + "prediction": "5343", + "images": 17 + }, + { + "truth": "7294", + "prediction": "7016", + "images": 17 + }, + { + "truth": "6950", + "prediction": "9412", + "images": 16 + }, + { + "truth": "5474", + "prediction": "7294", + "images": 16 + }, + { + "truth": "8841", + "prediction": "8860", + "images": 15 + }, + { + "truth": "6950", + "prediction": "4542", + "images": 15 + }, + { + "truth": "4532185", + "prediction": "3552", + "images": 15 + }, + { + "truth": "4532185", + "prediction": "8868", + "images": 14 + }, + { + "truth": "7016", + "prediction": "5343", + "images": 14 + }, + { + "truth": "7294", + "prediction": "4532185", + "images": 14 + }, + { + "truth": "5474", + "prediction": "6950", + "images": 14 + }, + { + "truth": "7016", + "prediction": "7294", + "images": 13 + }, + { + "truth": "3530", + "prediction": "7014", + "images": 12 + }, + { + "truth": "7015", + "prediction": "9412", + "images": 12 + }, + { + "truth": "4532185", + "prediction": "5343", + "images": 12 + }, + { + "truth": "6950", + "prediction": "3553", + "images": 11 + }, + { + "truth": "7015", + "prediction": "3530", + "images": 11 + }, + { + "truth": "4532185", + "prediction": "3530", + "images": 10 + }, + { + "truth": "4532185", + "prediction": "7297", + "images": 10 + }, + { + "truth": "4532185", + "prediction": "8840", + "images": 9 + }, + { + "truth": "8841", + "prediction": "9412", + "images": 9 + }, + { + "truth": "7294", + "prediction": "5336", + "images": 9 + }, + { + "truth": "6950", + "prediction": "5487", + "images": 9 + }, + { + "truth": "6950", + "prediction": "5336", + "images": 9 + }, + { + "truth": "5343", + "prediction": "3553", + "images": 8 + }, + { + "truth": "4532185", + "prediction": "8860", + "images": 8 + }, + { + "truth": "8841", + "prediction": "5345", + "images": 8 + }, + { + "truth": "8868", + "prediction": "5343", + "images": 8 + }, + { + "truth": "5336", + "prediction": "5343", + "images": 7 + }, + { + "truth": "7015", + "prediction": "7017", + "images": 7 + }, + { + "truth": "4532185", + "prediction": "4865", + "images": 7 + }, + { + "truth": "5336", + "prediction": "8841", + "images": 7 + }, + { + "truth": "7015", + "prediction": "8868", + "images": 6 + }, + { + "truth": "9717", + "prediction": "5481", + "images": 6 + }, + { + "truth": "7016", + "prediction": "5336", + "images": 6 + }, + { + "truth": "7016", + "prediction": "3553", + "images": 6 + }, + { + "truth": "9689", + "prediction": "8841", + "images": 6 + }, + { + "truth": "6950", + "prediction": "8861", + "images": 6 + }, + { + "truth": "6950", + "prediction": "7017", + "images": 6 + }, + { + "truth": "5345", + "prediction": "8860", + "images": 6 + }, + { + "truth": "4532185", + "prediction": "9689", + "images": 6 + }, + { + "truth": "8868", + "prediction": "6950", + "images": 6 + }, + { + "truth": "5343", + "prediction": "7014", + "images": 5 + }, + { + "truth": "5343", + "prediction": "8841", + "images": 5 + }, + { + "truth": "4532185", + "prediction": "7294", + "images": 5 + }, + { + "truth": "7015", + "prediction": "9717", + "images": 5 + }, + { + "truth": "4532185", + "prediction": "8861", + "images": 5 + }, + { + "truth": "7016", + "prediction": "9412", + "images": 5 + }, + { + "truth": "6950", + "prediction": "7016", + "images": 5 + }, + { + "truth": "5474", + "prediction": "3530", + "images": 5 + }, + { + "truth": "4532185", + "prediction": "4864", + "images": 5 + }, + { + "truth": "3530", + "prediction": "3553", + "images": 4 + }, + { + "truth": "3530", + "prediction": "5336", + "images": 4 + }, + { + "truth": "3530", + "prediction": "5343", + "images": 4 + }, + { + "truth": "3530", + "prediction": "4532185", + "images": 4 + }, + { + "truth": "7015", + "prediction": "7294", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "5345", + "images": 4 + }, + { + "truth": "7015", + "prediction": "9541689", + "images": 4 + }, + { + "truth": "9717", + "prediction": "5343", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "6166", + "images": 4 + }, + { + "truth": "7016", + "prediction": "8840", + "images": 4 + }, + { + "truth": "7016", + "prediction": "6950", + "images": 4 + }, + { + "truth": "7016", + "prediction": "8841", + "images": 4 + }, + { + "truth": "7016", + "prediction": "4532185", + "images": 4 + }, + { + "truth": "7016", + "prediction": "3556", + "images": 4 + }, + { + "truth": "8841", + "prediction": "8865", + "images": 4 + }, + { + "truth": "8841", + "prediction": "8868", + "images": 4 + }, + { + "truth": "6950", + "prediction": "3530", + "images": 4 + }, + { + "truth": "8863", + "prediction": "6950", + "images": 4 + }, + { + "truth": "5474", + "prediction": "7016", + "images": 4 + }, + { + "truth": "6950", + "prediction": "6953", + "images": 4 + }, + { + "truth": "3552", + "prediction": "5343", + "images": 4 + }, + { + "truth": "5343", + "prediction": "7297", + "images": 4 + }, + { + "truth": "5343", + "prediction": "6166", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "7014", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "4554", + "images": 4 + }, + { + "truth": "8868", + "prediction": "4532185", + "images": 4 + }, + { + "truth": "3530", + "prediction": "8868", + "images": 3 + }, + { + "truth": "5343", + "prediction": "7015", + "images": 3 + }, + { + "truth": "5343", + "prediction": "4532185", + "images": 3 + }, + { + "truth": "5343", + "prediction": "4705755", + "images": 3 + }, + { + "truth": "9717", + "prediction": "7015", + "images": 3 + }, + { + "truth": "4532185", + "prediction": "4525436", + "images": 3 + }, + { + "truth": "4532185", + "prediction": "5487", + "images": 3 + }, + { + "truth": "4532185", + "prediction": "9410", + "images": 3 + }, + { + "truth": "8868", + "prediction": "7016", + "images": 3 + }, + { + "truth": "8868", + "prediction": "8841", + "images": 3 + }, + { + "truth": "8841", + "prediction": "6166", + "images": 3 + }, + { + "truth": "8841", + "prediction": "8861", + "images": 3 + }, + { + "truth": "8841", + "prediction": "7017", + "images": 3 + }, + { + "truth": "8841", + "prediction": "5487", + "images": 3 + }, + { + "truth": "8841", + "prediction": "4538", + "images": 3 + }, + { + "truth": "8841", + "prediction": "7297", + "images": 3 + }, + { + "truth": "7294", + "prediction": "3553", + "images": 3 + }, + { + "truth": "6950", + "prediction": "5345", + "images": 3 + }, + { + "truth": "6950", + "prediction": "8860", + "images": 3 + }, + { + "truth": "8863", + "prediction": "8841", + "images": 3 + }, + { + "truth": "6950", + "prediction": "8868", + "images": 3 + }, + { + "truth": "6950", + "prediction": "8870", + "images": 3 + }, + { + "truth": "5474", + "prediction": "8861", + "images": 3 + }, + { + "truth": "4532185", + "prediction": "3563", + "images": 3 + }, + { + "truth": "3530", + "prediction": "6950", + "images": 3 + }, + { + "truth": "5343", + "prediction": "9412", + "images": 3 + }, + { + "truth": "5474", + "prediction": "9689", + "images": 3 + }, + { + "truth": "4532185", + "prediction": "8874", + "images": 3 + }, + { + "truth": "4532185", + "prediction": "8839", + "images": 3 + }, + { + "truth": "5336", + "prediction": "6950", + "images": 3 + }, + { + "truth": "3530", + "prediction": "9412", + "images": 2 + }, + { + "truth": "5343", + "prediction": "5336", + "images": 2 + }, + { + "truth": "7015", + "prediction": "8840", + "images": 2 + }, + { + "truth": "7015", + "prediction": "4705755", + "images": 2 + }, + { + "truth": "7015", + "prediction": "8861", + "images": 2 + }, + { + "truth": "7015", + "prediction": "3556", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "8863", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "3528", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "7017", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "5481", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "4525465", + "images": 2 + }, + { + "truth": "7016", + "prediction": "8861", + "images": 2 + }, + { + "truth": "9689", + "prediction": "9412", + "images": 2 + }, + { + "truth": "9689", + "prediction": "8860", + "images": 2 + }, + { + "truth": "3553", + "prediction": "8841", + "images": 2 + }, + { + "truth": "8868", + "prediction": "7017", + "images": 2 + }, + { + "truth": "5336", + "prediction": "4865", + "images": 2 + }, + { + "truth": "5336", + "prediction": "7015", + "images": 2 + }, + { + "truth": "8841", + "prediction": "7016", + "images": 2 + }, + { + "truth": "8841", + "prediction": "4300668", + "images": 2 + }, + { + "truth": "8841", + "prediction": "5474", + "images": 2 + }, + { + "truth": "8841", + "prediction": "8840", + "images": 2 + }, + { + "truth": "8841", + "prediction": "3554", + "images": 2 + }, + { + "truth": "8841", + "prediction": "8871", + "images": 2 + }, + { + "truth": "7294", + "prediction": "9412", + "images": 2 + }, + { + "truth": "7294", + "prediction": "6166", + "images": 2 + }, + { + "truth": "7294", + "prediction": "8841", + "images": 2 + }, + { + "truth": "6950", + "prediction": "4705755", + "images": 2 + }, + { + "truth": "6950", + "prediction": "4525465", + "images": 2 + }, + { + "truth": "6950", + "prediction": "7297", + "images": 2 + }, + { + "truth": "6950", + "prediction": "8866", + "images": 2 + }, + { + "truth": "6950", + "prediction": "7294", + "images": 2 + }, + { + "truth": "6950", + "prediction": "9410", + "images": 2 + }, + { + "truth": "5336", + "prediction": "3553", + "images": 2 + }, + { + "truth": "5474", + "prediction": "8841", + "images": 2 + }, + { + "truth": "5474", + "prediction": "8840", + "images": 2 + }, + { + "truth": "5474", + "prediction": "4527533", + "images": 2 + }, + { + "truth": "5474", + "prediction": "4532185", + "images": 2 + }, + { + "truth": "7016", + "prediction": "8868", + "images": 2 + }, + { + "truth": "8868", + "prediction": "3530", + "images": 2 + }, + { + "truth": "7294", + "prediction": "7297", + "images": 2 + }, + { + "truth": "3530", + "prediction": "4300664", + "images": 1 + }, + { + "truth": "3530", + "prediction": "3554", + "images": 1 + }, + { + "truth": "3530", + "prediction": "4870", + "images": 1 + }, + { + "truth": "3530", + "prediction": "8861", + "images": 1 + }, + { + "truth": "5343", + "prediction": "6950", + "images": 1 + }, + { + "truth": "5343", + "prediction": "9689", + "images": 1 + }, + { + "truth": "7015", + "prediction": "4525465", + "images": 1 + }, + { + "truth": "7015", + "prediction": "4300664", + "images": 1 + }, + { + "truth": "7015", + "prediction": "4538", + "images": 1 + }, + { + "truth": "7015", + "prediction": "4528997", + "images": 1 + }, + { + "truth": "9717", + "prediction": "5336", + "images": 1 + }, + { + "truth": "9717", + "prediction": "8841", + "images": 1 + }, + { + "truth": "9717", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "4528997", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "6946", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "4538", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "9417", + "images": 1 + }, + { + "truth": "7016", + "prediction": "8863", + "images": 1 + }, + { + "truth": "7016", + "prediction": "9410", + "images": 1 + }, + { + "truth": "7016", + "prediction": "6166", + "images": 1 + }, + { + "truth": "8874", + "prediction": "7297", + "images": 1 + }, + { + "truth": "8874", + "prediction": "9410", + "images": 1 + }, + { + "truth": "8874", + "prediction": "9412", + "images": 1 + }, + { + "truth": "8874", + "prediction": "4864", + "images": 1 + }, + { + "truth": "8860", + "prediction": "4525465", + "images": 1 + }, + { + "truth": "8860", + "prediction": "3553", + "images": 1 + }, + { + "truth": "8860", + "prediction": "5343", + "images": 1 + }, + { + "truth": "9689", + "prediction": "5345", + "images": 1 + }, + { + "truth": "9689", + "prediction": "5343", + "images": 1 + }, + { + "truth": "9689", + "prediction": "5336", + "images": 1 + }, + { + "truth": "4300668", + "prediction": "5343", + "images": 1 + }, + { + "truth": "4300668", + "prediction": "7017", + "images": 1 + }, + { + "truth": "8841", + "prediction": "4705755", + "images": 1 + }, + { + "truth": "8841", + "prediction": "4525465", + "images": 1 + }, + { + "truth": "8841", + "prediction": "9689", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8839", + "images": 1 + }, + { + "truth": "8841", + "prediction": "9717", + "images": 1 + }, + { + "truth": "8841", + "prediction": "4865", + "images": 1 + }, + { + "truth": "8841", + "prediction": "5481", + "images": 1 + }, + { + "truth": "8841", + "prediction": "9410", + "images": 1 + }, + { + "truth": "8841", + "prediction": "3530", + "images": 1 + }, + { + "truth": "7294", + "prediction": "9410", + "images": 1 + }, + { + "truth": "7294", + "prediction": "8874", + "images": 1 + }, + { + "truth": "7294", + "prediction": "9408", + "images": 1 + }, + { + "truth": "7294", + "prediction": "4705755", + "images": 1 + }, + { + "truth": "7294", + "prediction": "9717", + "images": 1 + }, + { + "truth": "7294", + "prediction": "7017", + "images": 1 + }, + { + "truth": "6950", + "prediction": "4867", + "images": 1 + }, + { + "truth": "6950", + "prediction": "3552", + "images": 1 + }, + { + "truth": "8863", + "prediction": "7016", + "images": 1 + }, + { + "truth": "8863", + "prediction": "7015", + "images": 1 + }, + { + "truth": "6950", + "prediction": "9417", + "images": 1 + }, + { + "truth": "6950", + "prediction": "6166", + "images": 1 + }, + { + "truth": "6950", + "prediction": "9689", + "images": 1 + }, + { + "truth": "6950", + "prediction": "4300668", + "images": 1 + }, + { + "truth": "6950", + "prediction": "5474", + "images": 1 + }, + { + "truth": "6950", + "prediction": "4554", + "images": 1 + }, + { + "truth": "5345", + "prediction": "9412", + "images": 1 + }, + { + "truth": "5345", + "prediction": "5487", + "images": 1 + }, + { + "truth": "3552", + "prediction": "9410", + "images": 1 + }, + { + "truth": "3552", + "prediction": "4525436", + "images": 1 + }, + { + "truth": "3552", + "prediction": "8855", + "images": 1 + }, + { + "truth": "3552", + "prediction": "4705755", + "images": 1 + }, + { + "truth": "5336", + "prediction": "3552", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "3556", + "images": 1 + }, + { + "truth": "7015", + "prediction": "4525436", + "images": 1 + }, + { + "truth": "7015", + "prediction": "8855", + "images": 1 + }, + { + "truth": "7015", + "prediction": "8874", + "images": 1 + }, + { + "truth": "7015", + "prediction": "3528", + "images": 1 + }, + { + "truth": "7015", + "prediction": "7297", + "images": 1 + }, + { + "truth": "7015", + "prediction": "5473", + "images": 1 + }, + { + "truth": "7015", + "prediction": "8863", + "images": 1 + }, + { + "truth": "3530", + "prediction": "3556", + "images": 1 + }, + { + "truth": "5343", + "prediction": "9717", + "images": 1 + }, + { + "truth": "5343", + "prediction": "8871", + "images": 1 + }, + { + "truth": "5474", + "prediction": "8868", + "images": 1 + }, + { + "truth": "5474", + "prediction": "3556", + "images": 1 + }, + { + "truth": "5474", + "prediction": "9412", + "images": 1 + }, + { + "truth": "5474", + "prediction": "6954", + "images": 1 + }, + { + "truth": "5474", + "prediction": "3553", + "images": 1 + }, + { + "truth": "5474", + "prediction": "9410", + "images": 1 + }, + { + "truth": "5474", + "prediction": "8864", + "images": 1 + }, + { + "truth": "5474", + "prediction": "3554", + "images": 1 + }, + { + "truth": "5474", + "prediction": "7017", + "images": 1 + }, + { + "truth": "7015", + "prediction": "8870", + "images": 1 + }, + { + "truth": "7015", + "prediction": "9410", + "images": 1 + }, + { + "truth": "7015", + "prediction": "5345", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "4300664", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "4867", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "8838", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "9408", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "5338", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "9717", + "images": 1 + }, + { + "truth": "7016", + "prediction": "9689", + "images": 1 + }, + { + "truth": "7016", + "prediction": "3530", + "images": 1 + }, + { + "truth": "7016", + "prediction": "7297", + "images": 1 + }, + { + "truth": "8868", + "prediction": "9412", + "images": 1 + }, + { + "truth": "8868", + "prediction": "3553", + "images": 1 + }, + { + "truth": "8868", + "prediction": "4300664", + "images": 1 + }, + { + "truth": "7294", + "prediction": "8864", + "images": 1 + }, + { + "truth": "6950", + "prediction": "4864", + "images": 1 + }, + { + "truth": "6950", + "prediction": "8865", + "images": 1 + }, + { + "truth": "6950", + "prediction": "5340", + "images": 1 + }, + { + "truth": "5343", + "prediction": "3552", + "images": 1 + }, + { + "truth": "7015", + "prediction": "8866", + "images": 1 + }, + { + "truth": "6950", + "prediction": "8864", + "images": 1 + }, + { + "truth": "7015", + "prediction": "7014", + "images": 1 + } + ] + }, + "optimized": { + "threshold": 0.9553309082984924, + "images": 52788, + "accepted": 40881, + "truth_counts": { + "7015": 9243, + "3530": 728, + "5343": 632, + "4532185": 15241, + "9717": 191, + "7016": 3321, + "3556": 14, + "8874": 13, + "8860": 14, + "4527533": 2, + "9689": 32, + "4300668": 24, + "3552": 48, + "3553": 2, + "8868": 1124, + "5336": 365, + "8841": 4542, + "7294": 1604, + "6950": 15047, + "8863": 79, + "4542": 1, + "5474": 475, + "5345": 46 + }, + "predicted_counts": { + "3530": 458, + "7016": 2804, + "5343": 399, + "5336": 278, + "7015": 6765, + "4532185": 12512, + "8841": 2900, + "6950": 12194, + "9717": 157, + "5481": 2, + "3556": 13, + "8874": 5, + "8860": 11, + "4527533": 1, + "9689": 14, + "4300668": 19, + "3552": 28, + "8868": 926, + "7294": 1103, + "8863": 48, + "4542": 2, + "5474": 218, + "5345": 22, + "9412": 1, + "8870": 1 + }, + "official": { + "precision": { + "2": 0.841348645086206 + }, + "recall": { + "2": 0.6466603488658192 + }, + "f1": { + "2": 0.6545226053114058 + }, + "micro_accuracy": { + "2": 0.9986057092536875 + }, + "coverage": { + "2": 0.7744373721300295 + } + }, + "truth_group_diagnostic": { + "precision": 0.9560780057797795, + "recall": 0.6466603488658192, + "f1": 0.7398951190476761 + }, + "groups": { + "precision": { + "7015": [ + 0.9983739837398374, + 1.0 + ], + "3530": [ + 0.9978165938864629, + 1.0 + ], + "5343": [ + 0.9949874686716792, + 1.0 + ], + "4532185": [ + 0.9989609974424553, + 1.0 + ], + "9717": [ + 1.0, + 1.0 + ], + "7016": [ + 0.9985734664764622, + 1.0 + ], + "3556": [ + 1.0, + 1.0 + ], + "8874": [ + 0.8, + 1.0 + ], + "8860": [ + 0.8181818181818182, + 1.0 + ], + "4527533": [ + 1.0, + 1.0 + ], + "9689": [ + 1.0, + 1.0 + ], + "4300668": [ + 0.9473684210526315, + 1.0 + ], + "3552": [ + 1.0, + 1.0 + ], + "3553": [ + 1.0, + 0.0 + ], + "8868": [ + 1.0, + 1.0 + ], + "5336": [ + 0.9820143884892086, + 1.0 + ], + "8841": [ + 0.9979310344827587, + 1.0 + ], + "7294": [ + 1.0, + 1.0 + ], + "6950": [ + 0.9995079547318353, + 1.0 + ], + "8863": [ + 1.0, + 1.0 + ], + "4542": [ + 0.5, + 1.0 + ], + "5474": [ + 1.0, + 1.0 + ], + "5345": [ + 1.0, + 1.0 + ], + "4300664": [ + 1.0, + 0.0 + ], + "3554": [ + 1.0, + 0.0 + ], + "4870": [ + 1.0, + 0.0 + ], + "7014": [ + 1.0, + 0.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "8861": [ + 1.0, + 0.0 + ], + "4705755": [ + 1.0, + 0.0 + ], + "8840": [ + 1.0, + 0.0 + ], + "4525465": [ + 1.0, + 0.0 + ], + "9541689": [ + 1.0, + 0.0 + ], + "4538": [ + 1.0, + 0.0 + ], + "4528997": [ + 1.0, + 0.0 + ], + "5481": [ + 0.0, + 1.0 + ], + "3528": [ + 1.0, + 0.0 + ], + "4525436": [ + 1.0, + 0.0 + ], + "6946": [ + 1.0, + 0.0 + ], + "7017": [ + 1.0, + 0.0 + ], + "9417": [ + 1.0, + 0.0 + ], + "5487": [ + 1.0, + 0.0 + ], + "7297": [ + 1.0, + 0.0 + ], + "9410": [ + 1.0, + 0.0 + ], + "6166": [ + 1.0, + 0.0 + ], + "4864": [ + 1.0, + 0.0 + ], + "4865": [ + 1.0, + 0.0 + ], + "8865": [ + 1.0, + 0.0 + ], + "8839": [ + 1.0, + 0.0 + ], + "8871": [ + 1.0, + 0.0 + ], + "9408": [ + 1.0, + 0.0 + ], + "4867": [ + 1.0, + 0.0 + ], + "8866": [ + 1.0, + 0.0 + ], + "8870": [ + 0.0, + 1.0 + ], + "6953": [ + 1.0, + 0.0 + ], + "4554": [ + 1.0, + 0.0 + ], + "8855": [ + 1.0, + 0.0 + ], + "3563": [ + 1.0, + 0.0 + ], + "5473": [ + 1.0, + 0.0 + ], + "6954": [ + 1.0, + 0.0 + ], + "8864": [ + 1.0, + 0.0 + ], + "8838": [ + 1.0, + 0.0 + ], + "5338": [ + 1.0, + 0.0 + ], + "5340": [ + 1.0, + 0.0 + ] + }, + "recall": { + "7015": [ + 0.730715135778427, + 1.0 + ], + "3530": [ + 0.6277472527472527, + 1.0 + ], + "5343": [ + 0.6281645569620253, + 1.0 + ], + "4532185": [ + 0.8200905452398136, + 1.0 + ], + "9717": [ + 0.8219895287958116, + 1.0 + ], + "7016": [ + 0.8431195423065342, + 1.0 + ], + "3556": [ + 0.9285714285714286, + 1.0 + ], + "8874": [ + 0.3076923076923077, + 1.0 + ], + "8860": [ + 0.6428571428571429, + 1.0 + ], + "4527533": [ + 0.5, + 1.0 + ], + "9689": [ + 0.4375, + 1.0 + ], + "4300668": [ + 0.75, + 1.0 + ], + "3552": [ + 0.5833333333333334, + 1.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8868": [ + 0.8238434163701067, + 1.0 + ], + "5336": [ + 0.7479452054794521, + 1.0 + ], + "8841": [ + 0.6371642448260678, + 1.0 + ], + "7294": [ + 0.6876558603491272, + 1.0 + ], + "6950": [ + 0.8099953479098824, + 1.0 + ], + "8863": [ + 0.6075949367088608, + 1.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "5474": [ + 0.4589473684210526, + 1.0 + ], + "5345": [ + 0.4782608695652174, + 1.0 + ] + }, + "f1": { + "4864": [ + 1.0, + 0.0 + ], + "8865": [ + 1.0, + 0.0 + ], + "3552": [ + 0.7368421052631579, + 1.0 + ], + "8868": [ + 0.9034146341463414, + 1.0 + ], + "8866": [ + 1.0, + 0.0 + ], + "4705755": [ + 1.0, + 0.0 + ], + "4527533": [ + 0.6666666666666666, + 1.0 + ], + "7294": [ + 0.814924270410048, + 1.0 + ], + "5345": [ + 0.6470588235294118, + 1.0 + ], + "6954": [ + 1.0, + 0.0 + ], + "9417": [ + 1.0, + 0.0 + ], + "5336": [ + 0.8491446345256611, + 1.0 + ], + "8839": [ + 1.0, + 0.0 + ], + "4554": [ + 1.0, + 0.0 + ], + "8860": [ + 0.72, + 1.0 + ], + "4300664": [ + 1.0, + 0.0 + ], + "6946": [ + 1.0, + 0.0 + ], + "9410": [ + 1.0, + 0.0 + ], + "6166": [ + 1.0, + 0.0 + ], + "5481": [ + 0.0, + 1.0 + ], + "8840": [ + 1.0, + 0.0 + ], + "4532185": [ + 0.9007314524555905, + 1.0 + ], + "6950": [ + 0.894827649498917, + 1.0 + ], + "9408": [ + 1.0, + 0.0 + ], + "4867": [ + 1.0, + 0.0 + ], + "8864": [ + 1.0, + 0.0 + ], + "4870": [ + 1.0, + 0.0 + ], + "3563": [ + 1.0, + 0.0 + ], + "8861": [ + 1.0, + 0.0 + ], + "8870": [ + 0.0, + 1.0 + ], + "8838": [ + 1.0, + 0.0 + ], + "8855": [ + 1.0, + 0.0 + ], + "9689": [ + 0.6086956521739131, + 1.0 + ], + "4300668": [ + 0.8372093023255814, + 1.0 + ], + "4525465": [ + 1.0, + 0.0 + ], + "5474": [ + 0.6291486291486291, + 1.0 + ], + "3556": [ + 0.9629629629629631, + 1.0 + ], + "3530": [ + 0.7706576728499157, + 1.0 + ], + "3528": [ + 1.0, + 0.0 + ], + "7014": [ + 1.0, + 0.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "4528997": [ + 1.0, + 0.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8841": [ + 0.777747917226552, + 1.0 + ], + "7017": [ + 1.0, + 0.0 + ], + "5340": [ + 1.0, + 0.0 + ], + "8874": [ + 0.4444444444444444, + 1.0 + ], + "7015": [ + 0.8438280859570216, + 1.0 + ], + "7016": [ + 0.9142857142857143, + 1.0 + ], + "5338": [ + 1.0, + 0.0 + ], + "7297": [ + 1.0, + 0.0 + ], + "5343": [ + 0.7701260911736179, + 1.0 + ], + "8863": [ + 0.7559055118110237, + 1.0 + ], + "8871": [ + 1.0, + 0.0 + ], + "6953": [ + 1.0, + 0.0 + ], + "4865": [ + 1.0, + 0.0 + ], + "3554": [ + 1.0, + 0.0 + ], + "5473": [ + 1.0, + 0.0 + ], + "4542": [ + 0.6666666666666666, + 1.0 + ], + "9717": [ + 0.9022988505747127, + 1.0 + ], + "4525436": [ + 1.0, + 0.0 + ], + "9541689": [ + 1.0, + 0.0 + ], + "4538": [ + 1.0, + 0.0 + ], + "5487": [ + 1.0, + 0.0 + ] + } + }, + "predicted_only": { + "5481": 2, + "9412": 1, + "8870": 1 + }, + "truth_families_without_accepted_predictions": [ + "3553" + ], + "false_positive_pairs": [ + { + "truth": "7015", + "prediction": "4532185", + "images": 5 + }, + { + "truth": "8841", + "prediction": "4532185", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "8841", + "images": 3 + }, + { + "truth": "4532185", + "prediction": "6950", + "images": 3 + }, + { + "truth": "8841", + "prediction": "7015", + "images": 3 + }, + { + "truth": "5474", + "prediction": "7015", + "images": 3 + }, + { + "truth": "9717", + "prediction": "5481", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "7016", + "images": 2 + }, + { + "truth": "8841", + "prediction": "5336", + "images": 2 + }, + { + "truth": "6950", + "prediction": "8841", + "images": 2 + }, + { + "truth": "8868", + "prediction": "7015", + "images": 2 + }, + { + "truth": "8868", + "prediction": "4532185", + "images": 2 + }, + { + "truth": "7294", + "prediction": "7015", + "images": 2 + }, + { + "truth": "3530", + "prediction": "7016", + "images": 1 + }, + { + "truth": "5343", + "prediction": "5336", + "images": 1 + }, + { + "truth": "7015", + "prediction": "5336", + "images": 1 + }, + { + "truth": "8841", + "prediction": "5343", + "images": 1 + }, + { + "truth": "8841", + "prediction": "4300668", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8860", + "images": 1 + }, + { + "truth": "6950", + "prediction": "7015", + "images": 1 + }, + { + "truth": "8863", + "prediction": "6950", + "images": 1 + }, + { + "truth": "6950", + "prediction": "8860", + "images": 1 + }, + { + "truth": "3530", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "3530", + "prediction": "6950", + "images": 1 + }, + { + "truth": "5474", + "prediction": "3530", + "images": 1 + }, + { + "truth": "5474", + "prediction": "5343", + "images": 1 + }, + { + "truth": "7015", + "prediction": "7016", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "5336", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "9412", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "8874", + "images": 1 + }, + { + "truth": "8868", + "prediction": "8841", + "images": 1 + }, + { + "truth": "7294", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "7294", + "prediction": "6950", + "images": 1 + }, + { + "truth": "6950", + "prediction": "4542", + "images": 1 + }, + { + "truth": "6950", + "prediction": "8870", + "images": 1 + } + ] + }, + "common_0.96": { + "threshold": 0.96, + "images": 52788, + "accepted": 40484, + "truth_counts": { + "7015": 9243, + "3530": 728, + "5343": 632, + "4532185": 15241, + "9717": 191, + "7016": 3321, + "3556": 14, + "8874": 13, + "8860": 14, + "4527533": 2, + "9689": 32, + "4300668": 24, + "3552": 48, + "3553": 2, + "8868": 1124, + "5336": 365, + "8841": 4542, + "7294": 1604, + "6950": 15047, + "8863": 79, + "4542": 1, + "5474": 475, + "5345": 46 + }, + "predicted_counts": { + "3530": 450, + "7016": 2789, + "5343": 391, + "5336": 269, + "7015": 6683, + "4532185": 12417, + "8841": 2861, + "6950": 12079, + "9717": 156, + "5481": 2, + "3556": 13, + "8874": 5, + "8860": 11, + "4527533": 1, + "9689": 14, + "4300668": 18, + "3552": 28, + "8868": 921, + "7294": 1089, + "8863": 48, + "4542": 2, + "5474": 214, + "5345": 21, + "9412": 1, + "8870": 1 + }, + "official": { + "precision": { + "2": 0.8412084293924852 + }, + "recall": { + "2": 0.6390855348255022 + }, + "f1": { + "2": 0.6496969678563335 + }, + "micro_accuracy": { + "2": 0.9986414385930245 + }, + "coverage": { + "2": 0.7669167234977646 + } + }, + "truth_group_diagnostic": { + "precision": 0.9559186697641877, + "recall": 0.6390855348255022, + "f1": 0.734440050620203 + }, + "groups": { + "precision": { + "7015": [ + 0.9985036660182552, + 1.0 + ], + "3530": [ + 0.9977777777777778, + 1.0 + ], + "5343": [ + 0.9948849104859335, + 1.0 + ], + "4532185": [ + 0.9990335829910606, + 1.0 + ], + "9717": [ + 1.0, + 1.0 + ], + "7016": [ + 0.9985657941914665, + 1.0 + ], + "3556": [ + 1.0, + 1.0 + ], + "8874": [ + 0.8, + 1.0 + ], + "8860": [ + 0.8181818181818182, + 1.0 + ], + "4527533": [ + 1.0, + 1.0 + ], + "9689": [ + 1.0, + 1.0 + ], + "4300668": [ + 0.9444444444444444, + 1.0 + ], + "3552": [ + 1.0, + 1.0 + ], + "3553": [ + 1.0, + 0.0 + ], + "8868": [ + 1.0, + 1.0 + ], + "5336": [ + 0.9814126394052045, + 1.0 + ], + "8841": [ + 0.9979028311779098, + 1.0 + ], + "7294": [ + 1.0, + 1.0 + ], + "6950": [ + 0.9995032701382565, + 1.0 + ], + "8863": [ + 1.0, + 1.0 + ], + "4542": [ + 0.5, + 1.0 + ], + "5474": [ + 1.0, + 1.0 + ], + "5345": [ + 1.0, + 1.0 + ], + "4300664": [ + 1.0, + 0.0 + ], + "3554": [ + 1.0, + 0.0 + ], + "4870": [ + 1.0, + 0.0 + ], + "7014": [ + 1.0, + 0.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "8861": [ + 1.0, + 0.0 + ], + "4705755": [ + 1.0, + 0.0 + ], + "8840": [ + 1.0, + 0.0 + ], + "4525465": [ + 1.0, + 0.0 + ], + "9541689": [ + 1.0, + 0.0 + ], + "4538": [ + 1.0, + 0.0 + ], + "4528997": [ + 1.0, + 0.0 + ], + "5481": [ + 0.0, + 1.0 + ], + "3528": [ + 1.0, + 0.0 + ], + "4525436": [ + 1.0, + 0.0 + ], + "6946": [ + 1.0, + 0.0 + ], + "7017": [ + 1.0, + 0.0 + ], + "9417": [ + 1.0, + 0.0 + ], + "5487": [ + 1.0, + 0.0 + ], + "7297": [ + 1.0, + 0.0 + ], + "9410": [ + 1.0, + 0.0 + ], + "6166": [ + 1.0, + 0.0 + ], + "4864": [ + 1.0, + 0.0 + ], + "4865": [ + 1.0, + 0.0 + ], + "8865": [ + 1.0, + 0.0 + ], + "8839": [ + 1.0, + 0.0 + ], + "8871": [ + 1.0, + 0.0 + ], + "9408": [ + 1.0, + 0.0 + ], + "4867": [ + 1.0, + 0.0 + ], + "8866": [ + 1.0, + 0.0 + ], + "8870": [ + 0.0, + 1.0 + ], + "6953": [ + 1.0, + 0.0 + ], + "4554": [ + 1.0, + 0.0 + ], + "8855": [ + 1.0, + 0.0 + ], + "3563": [ + 1.0, + 0.0 + ], + "5473": [ + 1.0, + 0.0 + ], + "6954": [ + 1.0, + 0.0 + ], + "8864": [ + 1.0, + 0.0 + ], + "8838": [ + 1.0, + 0.0 + ], + "5338": [ + 1.0, + 0.0 + ], + "5340": [ + 1.0, + 0.0 + ] + }, + "recall": { + "7015": [ + 0.721951747268203, + 1.0 + ], + "3530": [ + 0.6167582417582418, + 1.0 + ], + "5343": [ + 0.615506329113924, + 1.0 + ], + "4532185": [ + 0.8139229709336657, + 1.0 + ], + "9717": [ + 0.8167539267015707, + 1.0 + ], + "7016": [ + 0.8386028304727492, + 1.0 + ], + "3556": [ + 0.9285714285714286, + 1.0 + ], + "8874": [ + 0.3076923076923077, + 1.0 + ], + "8860": [ + 0.6428571428571429, + 1.0 + ], + "4527533": [ + 0.5, + 1.0 + ], + "9689": [ + 0.4375, + 1.0 + ], + "4300668": [ + 0.7083333333333334, + 1.0 + ], + "3552": [ + 0.5833333333333334, + 1.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8868": [ + 0.8193950177935944, + 1.0 + ], + "5336": [ + 0.7232876712328767, + 1.0 + ], + "8841": [ + 0.6285777190664905, + 1.0 + ], + "7294": [ + 0.678927680798005, + 1.0 + ], + "6950": [ + 0.8023526284309165, + 1.0 + ], + "8863": [ + 0.6075949367088608, + 1.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "5474": [ + 0.45052631578947366, + 1.0 + ], + "5345": [ + 0.45652173913043476, + 1.0 + ] + }, + "f1": { + "4864": [ + 1.0, + 0.0 + ], + "8865": [ + 1.0, + 0.0 + ], + "3552": [ + 0.7368421052631579, + 1.0 + ], + "8868": [ + 0.9007334963325184, + 1.0 + ], + "8866": [ + 1.0, + 0.0 + ], + "4705755": [ + 1.0, + 0.0 + ], + "4527533": [ + 0.6666666666666666, + 1.0 + ], + "7294": [ + 0.8087634608243596, + 1.0 + ], + "5345": [ + 0.626865671641791, + 1.0 + ], + "6954": [ + 1.0, + 0.0 + ], + "9417": [ + 1.0, + 0.0 + ], + "5336": [ + 0.832807570977918, + 1.0 + ], + "8839": [ + 1.0, + 0.0 + ], + "4554": [ + 1.0, + 0.0 + ], + "8860": [ + 0.72, + 1.0 + ], + "4300664": [ + 1.0, + 0.0 + ], + "6946": [ + 1.0, + 0.0 + ], + "9410": [ + 1.0, + 0.0 + ], + "6166": [ + 1.0, + 0.0 + ], + "5481": [ + 0.0, + 1.0 + ], + "8840": [ + 1.0, + 0.0 + ], + "4532185": [ + 0.8970279846698965, + 1.0 + ], + "6950": [ + 0.890142298901423, + 1.0 + ], + "9408": [ + 1.0, + 0.0 + ], + "4867": [ + 1.0, + 0.0 + ], + "8864": [ + 1.0, + 0.0 + ], + "4870": [ + 1.0, + 0.0 + ], + "3563": [ + 1.0, + 0.0 + ], + "8861": [ + 1.0, + 0.0 + ], + "8870": [ + 0.0, + 1.0 + ], + "8838": [ + 1.0, + 0.0 + ], + "8855": [ + 1.0, + 0.0 + ], + "9689": [ + 0.6086956521739131, + 1.0 + ], + "4300668": [ + 0.8095238095238095, + 1.0 + ], + "4525465": [ + 1.0, + 0.0 + ], + "5474": [ + 0.6211901306240929, + 1.0 + ], + "3556": [ + 0.9629629629629631, + 1.0 + ], + "3530": [ + 0.7623089983022072, + 1.0 + ], + "3528": [ + 1.0, + 0.0 + ], + "7014": [ + 1.0, + 0.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "4528997": [ + 1.0, + 0.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8841": [ + 0.7713089288126435, + 1.0 + ], + "7017": [ + 1.0, + 0.0 + ], + "5340": [ + 1.0, + 0.0 + ], + "8874": [ + 0.4444444444444444, + 1.0 + ], + "7015": [ + 0.8380007534848675, + 1.0 + ], + "7016": [ + 0.9116202945990179, + 1.0 + ], + "5338": [ + 1.0, + 0.0 + ], + "7297": [ + 1.0, + 0.0 + ], + "5343": [ + 0.7605083088954057, + 1.0 + ], + "8863": [ + 0.7559055118110237, + 1.0 + ], + "8871": [ + 1.0, + 0.0 + ], + "6953": [ + 1.0, + 0.0 + ], + "4865": [ + 1.0, + 0.0 + ], + "3554": [ + 1.0, + 0.0 + ], + "5473": [ + 1.0, + 0.0 + ], + "4542": [ + 0.6666666666666666, + 1.0 + ], + "9717": [ + 0.899135446685879, + 1.0 + ], + "4525436": [ + 1.0, + 0.0 + ], + "9541689": [ + 1.0, + 0.0 + ], + "4538": [ + 1.0, + 0.0 + ], + "5487": [ + 1.0, + 0.0 + ] + } + }, + "predicted_only": { + "5481": 2, + "9412": 1, + "8870": 1 + }, + "truth_families_without_accepted_predictions": [ + "3553" + ], + "false_positive_pairs": [ + { + "truth": "8841", + "prediction": "4532185", + "images": 4 + }, + { + "truth": "7015", + "prediction": "4532185", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "8841", + "images": 3 + }, + { + "truth": "4532185", + "prediction": "6950", + "images": 3 + }, + { + "truth": "5474", + "prediction": "7015", + "images": 3 + }, + { + "truth": "9717", + "prediction": "5481", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "7016", + "images": 2 + }, + { + "truth": "8841", + "prediction": "7015", + "images": 2 + }, + { + "truth": "8841", + "prediction": "5336", + "images": 2 + }, + { + "truth": "6950", + "prediction": "8841", + "images": 2 + }, + { + "truth": "8868", + "prediction": "7015", + "images": 2 + }, + { + "truth": "8868", + "prediction": "4532185", + "images": 2 + }, + { + "truth": "7294", + "prediction": "7015", + "images": 2 + }, + { + "truth": "3530", + "prediction": "7016", + "images": 1 + }, + { + "truth": "5343", + "prediction": "5336", + "images": 1 + }, + { + "truth": "7015", + "prediction": "5336", + "images": 1 + }, + { + "truth": "8841", + "prediction": "5343", + "images": 1 + }, + { + "truth": "8841", + "prediction": "4300668", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8860", + "images": 1 + }, + { + "truth": "6950", + "prediction": "7015", + "images": 1 + }, + { + "truth": "8863", + "prediction": "6950", + "images": 1 + }, + { + "truth": "6950", + "prediction": "8860", + "images": 1 + }, + { + "truth": "3530", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "3530", + "prediction": "6950", + "images": 1 + }, + { + "truth": "5474", + "prediction": "3530", + "images": 1 + }, + { + "truth": "5474", + "prediction": "5343", + "images": 1 + }, + { + "truth": "7015", + "prediction": "7016", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "5336", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "9412", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "8874", + "images": 1 + }, + { + "truth": "8868", + "prediction": "8841", + "images": 1 + }, + { + "truth": "7294", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "7294", + "prediction": "6950", + "images": 1 + }, + { + "truth": "6950", + "prediction": "4542", + "images": 1 + }, + { + "truth": "6950", + "prediction": "8870", + "images": 1 + } + ] + } + }, + "torch": { + "zero": { + "threshold": 0, + "images": 52788, + "accepted": 52788, + "truth_counts": { + "7015": 9243, + "3530": 728, + "5343": 632, + "4532185": 15241, + "9717": 191, + "7016": 3321, + "3556": 14, + "8874": 13, + "8860": 14, + "4527533": 2, + "9689": 32, + "4300668": 24, + "3552": 48, + "3553": 2, + "8868": 1124, + "5336": 365, + "8841": 4542, + "7294": 1604, + "6950": 15047, + "8863": 79, + "4542": 1, + "5474": 475, + "5345": 46 + }, + "predicted_counts": { + "7015": 9175, + "7016": 3217, + "3530": 614, + "9717": 191, + "5336": 560, + "3556": 42, + "8861": 41, + "4532185": 14478, + "6950": 14847, + "5343": 1311, + "3553": 137, + "8840": 28, + "6166": 30, + "4705755": 51, + "7294": 1414, + "8868": 1021, + "8841": 4309, + "9412": 117, + "5340": 5, + "9541689": 1, + "8860": 32, + "8874": 41, + "4528997": 7, + "5474": 383, + "8838": 118, + "3552": 49, + "4300668": 27, + "4870": 15, + "3528": 6, + "5487": 23, + "4300664": 11, + "4538": 22, + "5345": 49, + "8871": 53, + "8863": 82, + "9408": 2, + "5481": 5, + "9689": 49, + "4525465": 1, + "7297": 23, + "6954": 2, + "9410": 5, + "8855": 3, + "4527533": 1, + "8864": 1, + "4865": 20, + "5320": 1, + "8865": 2, + "4864": 132, + "3554": 6, + "8866": 4, + "7017": 6, + "3563": 1, + "4554": 4, + "4525436": 2, + "6946": 1, + "7014": 4, + "4542": 3, + "4867": 1, + "8839": 2 + }, + "official": { + "precision": { + "2": 0.2753352445359579 + }, + "recall": { + "2": 0.8104767092433202 + }, + "f1": { + "2": 0.2804941988278224 + }, + "micro_accuracy": { + "2": 0.9298325376979617 + }, + "coverage": { + "2": 1.0 + } + }, + "truth_group_diagnostic": { + "precision": 0.7182658553111946, + "recall": 0.8104767092433202, + "f1": 0.7317239969421453 + }, + "groups": { + "precision": { + "7015": [ + 0.9238147138964578, + 1.0 + ], + "3530": [ + 0.9413680781758957, + 1.0 + ], + "5343": [ + 0.463768115942029, + 1.0 + ], + "4532185": [ + 0.983008702859511, + 1.0 + ], + "9717": [ + 0.9214659685863874, + 1.0 + ], + "7016": [ + 0.9518184644078334, + 1.0 + ], + "3556": [ + 0.30952380952380953, + 1.0 + ], + "8874": [ + 0.14634146341463414, + 1.0 + ], + "8860": [ + 0.375, + 1.0 + ], + "4527533": [ + 1.0, + 1.0 + ], + "9689": [ + 0.3877551020408163, + 1.0 + ], + "4300668": [ + 0.7407407407407407, + 1.0 + ], + "3552": [ + 0.8571428571428571, + 1.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8868": [ + 0.9794319294809011, + 1.0 + ], + "5336": [ + 0.6, + 1.0 + ], + "8841": [ + 0.9554420979345556, + 1.0 + ], + "7294": [ + 0.9759547383309759, + 1.0 + ], + "6950": [ + 0.9781774095776925, + 1.0 + ], + "8863": [ + 0.8780487804878049, + 1.0 + ], + "4542": [ + 0.3333333333333333, + 1.0 + ], + "5474": [ + 0.9608355091383812, + 1.0 + ], + "5345": [ + 0.8571428571428571, + 1.0 + ], + "8861": [ + 0.0, + 1.0 + ], + "8840": [ + 0.0, + 1.0 + ], + "6166": [ + 0.0, + 1.0 + ], + "4705755": [ + 0.0, + 1.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "5340": [ + 0.0, + 1.0 + ], + "9541689": [ + 0.0, + 1.0 + ], + "4528997": [ + 0.0, + 1.0 + ], + "8838": [ + 0.0, + 1.0 + ], + "4870": [ + 0.0, + 1.0 + ], + "3528": [ + 0.0, + 1.0 + ], + "5487": [ + 0.0, + 1.0 + ], + "4300664": [ + 0.0, + 1.0 + ], + "4538": [ + 0.0, + 1.0 + ], + "8871": [ + 0.0, + 1.0 + ], + "9408": [ + 0.0, + 1.0 + ], + "5481": [ + 0.0, + 1.0 + ], + "4525465": [ + 0.0, + 1.0 + ], + "7297": [ + 0.0, + 1.0 + ], + "6954": [ + 0.0, + 1.0 + ], + "9410": [ + 0.0, + 1.0 + ], + "8855": [ + 0.0, + 1.0 + ], + "8864": [ + 0.0, + 1.0 + ], + "4865": [ + 0.0, + 1.0 + ], + "5320": [ + 0.0, + 1.0 + ], + "8865": [ + 0.0, + 1.0 + ], + "4864": [ + 0.0, + 1.0 + ], + "3554": [ + 0.0, + 1.0 + ], + "8866": [ + 0.0, + 1.0 + ], + "7017": [ + 0.0, + 1.0 + ], + "3563": [ + 0.0, + 1.0 + ], + "4554": [ + 0.0, + 1.0 + ], + "4525436": [ + 0.0, + 1.0 + ], + "6946": [ + 0.0, + 1.0 + ], + "7014": [ + 0.0, + 1.0 + ], + "4867": [ + 0.0, + 1.0 + ], + "8839": [ + 0.0, + 1.0 + ] + }, + "recall": { + "7015": [ + 0.9170182841068917, + 1.0 + ], + "3530": [ + 0.7939560439560439, + 1.0 + ], + "5343": [ + 0.9620253164556962, + 1.0 + ], + "4532185": [ + 0.9337969949478381, + 1.0 + ], + "9717": [ + 0.9214659685863874, + 1.0 + ], + "7016": [ + 0.9220114423366456, + 1.0 + ], + "3556": [ + 0.9285714285714286, + 1.0 + ], + "8874": [ + 0.46153846153846156, + 1.0 + ], + "8860": [ + 0.8571428571428571, + 1.0 + ], + "4527533": [ + 0.5, + 1.0 + ], + "9689": [ + 0.59375, + 1.0 + ], + "4300668": [ + 0.8333333333333334, + 1.0 + ], + "3552": [ + 0.875, + 1.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8868": [ + 0.8896797153024911, + 1.0 + ], + "5336": [ + 0.9205479452054794, + 1.0 + ], + "8841": [ + 0.9064288859533245, + 1.0 + ], + "7294": [ + 0.8603491271820449, + 1.0 + ], + "6950": [ + 0.9651757825480162, + 1.0 + ], + "8863": [ + 0.9113924050632911, + 1.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "5474": [ + 0.7747368421052632, + 1.0 + ], + "5345": [ + 0.9130434782608695, + 1.0 + ] + }, + "f1": { + "4864": [ + 0.0, + 1.0 + ], + "8865": [ + 0.0, + 1.0 + ], + "3552": [ + 0.865979381443299, + 1.0 + ], + "8868": [ + 0.9324009324009326, + 1.0 + ], + "8866": [ + 0.0, + 1.0 + ], + "4705755": [ + 0.0, + 1.0 + ], + "4527533": [ + 0.6666666666666666, + 1.0 + ], + "7294": [ + 0.9145129224652088, + 1.0 + ], + "5345": [ + 0.8842105263157894, + 1.0 + ], + "6954": [ + 0.0, + 1.0 + ], + "5336": [ + 0.7264864864864864, + 1.0 + ], + "8839": [ + 0.0, + 1.0 + ], + "4554": [ + 0.0, + 1.0 + ], + "8860": [ + 0.5217391304347826, + 1.0 + ], + "4300664": [ + 0.0, + 1.0 + ], + "9410": [ + 0.0, + 1.0 + ], + "6946": [ + 0.0, + 1.0 + ], + "6166": [ + 0.0, + 1.0 + ], + "5481": [ + 0.0, + 1.0 + ], + "8840": [ + 0.0, + 1.0 + ], + "4532185": [ + 0.9577711228507017, + 1.0 + ], + "6950": [ + 0.971633103632836, + 1.0 + ], + "9408": [ + 0.0, + 1.0 + ], + "8864": [ + 0.0, + 1.0 + ], + "4867": [ + 0.0, + 1.0 + ], + "4870": [ + 0.0, + 1.0 + ], + "3563": [ + 0.0, + 1.0 + ], + "8861": [ + 0.0, + 1.0 + ], + "8838": [ + 0.0, + 1.0 + ], + "8855": [ + 0.0, + 1.0 + ], + "9689": [ + 0.4691358024691358, + 1.0 + ], + "4300668": [ + 0.7843137254901962, + 1.0 + ], + "4525465": [ + 0.0, + 1.0 + ], + "5474": [ + 0.8578088578088578, + 1.0 + ], + "3556": [ + 0.4642857142857143, + 1.0 + ], + "3530": [ + 0.8614008941877793, + 1.0 + ], + "3528": [ + 0.0, + 1.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "4528997": [ + 0.0, + 1.0 + ], + "7014": [ + 0.0, + 1.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8841": [ + 0.9302903626708845, + 1.0 + ], + "7017": [ + 0.0, + 1.0 + ], + "5340": [ + 0.0, + 1.0 + ], + "8874": [ + 0.2222222222222222, + 1.0 + ], + "7015": [ + 0.9204039526550114, + 1.0 + ], + "7016": [ + 0.9366778831446925, + 1.0 + ], + "7297": [ + 0.0, + 1.0 + ], + "5343": [ + 0.6258363355635614, + 1.0 + ], + "8863": [ + 0.8944099378881988, + 1.0 + ], + "8871": [ + 0.0, + 1.0 + ], + "4865": [ + 0.0, + 1.0 + ], + "5320": [ + 0.0, + 1.0 + ], + "3554": [ + 0.0, + 1.0 + ], + "4542": [ + 0.5, + 1.0 + ], + "9717": [ + 0.9214659685863874, + 1.0 + ], + "4525436": [ + 0.0, + 1.0 + ], + "9541689": [ + 0.0, + 1.0 + ], + "4538": [ + 0.0, + 1.0 + ], + "5487": [ + 0.0, + 1.0 + ] + } + }, + "predicted_only": { + "8861": 41, + "8840": 28, + "6166": 30, + "4705755": 51, + "9412": 117, + "5340": 5, + "9541689": 1, + "4528997": 7, + "8838": 118, + "4870": 15, + "3528": 6, + "5487": 23, + "4300664": 11, + "4538": 22, + "8871": 53, + "9408": 2, + "5481": 5, + "4525465": 1, + "7297": 23, + "6954": 2, + "9410": 5, + "8855": 3, + "8864": 1, + "4865": 20, + "5320": 1, + "8865": 2, + "4864": 132, + "3554": 6, + "8866": 4, + "7017": 6, + "3563": 1, + "4554": 4, + "4525436": 2, + "6946": 1, + "7014": 4, + "4867": 1, + "8839": 2 + }, + "truth_families_without_accepted_predictions": [], + "false_positive_pairs": [ + { + "truth": "7015", + "prediction": "5343", + "images": 338 + }, + { + "truth": "4532185", + "prediction": "7015", + "images": 214 + }, + { + "truth": "6950", + "prediction": "7015", + "images": 116 + }, + { + "truth": "7015", + "prediction": "4532185", + "images": 106 + }, + { + "truth": "4532185", + "prediction": "4864", + "images": 103 + }, + { + "truth": "6950", + "prediction": "8841", + "images": 94 + }, + { + "truth": "7015", + "prediction": "6950", + "images": 92 + }, + { + "truth": "7016", + "prediction": "7015", + "images": 84 + }, + { + "truth": "4532185", + "prediction": "7016", + "images": 78 + }, + { + "truth": "4532185", + "prediction": "5336", + "images": 75 + }, + { + "truth": "7294", + "prediction": "7015", + "images": 74 + }, + { + "truth": "6950", + "prediction": "5343", + "images": 72 + }, + { + "truth": "3530", + "prediction": "7015", + "images": 67 + }, + { + "truth": "4532185", + "prediction": "5343", + "images": 67 + }, + { + "truth": "8841", + "prediction": "5336", + "images": 66 + }, + { + "truth": "8841", + "prediction": "5343", + "images": 64 + }, + { + "truth": "4532185", + "prediction": "9412", + "images": 59 + }, + { + "truth": "8841", + "prediction": "7015", + "images": 59 + }, + { + "truth": "4532185", + "prediction": "8838", + "images": 58 + }, + { + "truth": "4532185", + "prediction": "6950", + "images": 57 + }, + { + "truth": "7294", + "prediction": "6950", + "images": 56 + }, + { + "truth": "8841", + "prediction": "6950", + "images": 54 + }, + { + "truth": "7016", + "prediction": "5343", + "images": 51 + }, + { + "truth": "4532185", + "prediction": "8841", + "images": 49 + }, + { + "truth": "8868", + "prediction": "7015", + "images": 48 + }, + { + "truth": "7015", + "prediction": "3553", + "images": 44 + }, + { + "truth": "5474", + "prediction": "5343", + "images": 44 + }, + { + "truth": "8841", + "prediction": "8838", + "images": 43 + }, + { + "truth": "6950", + "prediction": "4532185", + "images": 42 + }, + { + "truth": "7294", + "prediction": "5343", + "images": 35 + }, + { + "truth": "3530", + "prediction": "7016", + "images": 32 + }, + { + "truth": "5474", + "prediction": "7015", + "images": 31 + }, + { + "truth": "7015", + "prediction": "5336", + "images": 30 + }, + { + "truth": "7015", + "prediction": "7016", + "images": 29 + }, + { + "truth": "4532185", + "prediction": "4705755", + "images": 29 + }, + { + "truth": "8841", + "prediction": "3553", + "images": 28 + }, + { + "truth": "8841", + "prediction": "4532185", + "images": 27 + }, + { + "truth": "7016", + "prediction": "4532185", + "images": 25 + }, + { + "truth": "8868", + "prediction": "6950", + "images": 25 + }, + { + "truth": "4532185", + "prediction": "8871", + "images": 24 + }, + { + "truth": "6950", + "prediction": "4864", + "images": 24 + }, + { + "truth": "7015", + "prediction": "8841", + "images": 23 + }, + { + "truth": "4532185", + "prediction": "3553", + "images": 22 + }, + { + "truth": "8841", + "prediction": "8871", + "images": 22 + }, + { + "truth": "6950", + "prediction": "5336", + "images": 22 + }, + { + "truth": "4532185", + "prediction": "7294", + "images": 21 + }, + { + "truth": "4532185", + "prediction": "8874", + "images": 20 + }, + { + "truth": "7016", + "prediction": "5336", + "images": 20 + }, + { + "truth": "6950", + "prediction": "8861", + "images": 20 + }, + { + "truth": "6950", + "prediction": "3553", + "images": 20 + }, + { + "truth": "7015", + "prediction": "9412", + "images": 19 + }, + { + "truth": "4532185", + "prediction": "7297", + "images": 19 + }, + { + "truth": "4532185", + "prediction": "6166", + "images": 19 + }, + { + "truth": "6950", + "prediction": "9412", + "images": 18 + }, + { + "truth": "8868", + "prediction": "4532185", + "images": 16 + }, + { + "truth": "7016", + "prediction": "3556", + "images": 14 + }, + { + "truth": "3530", + "prediction": "4532185", + "images": 13 + }, + { + "truth": "7016", + "prediction": "6950", + "images": 13 + }, + { + "truth": "4532185", + "prediction": "3530", + "images": 12 + }, + { + "truth": "3530", + "prediction": "3556", + "images": 11 + }, + { + "truth": "7016", + "prediction": "3530", + "images": 11 + }, + { + "truth": "7294", + "prediction": "4532185", + "images": 11 + }, + { + "truth": "4532185", + "prediction": "4538", + "images": 11 + }, + { + "truth": "6950", + "prediction": "5487", + "images": 10 + }, + { + "truth": "7015", + "prediction": "9689", + "images": 10 + }, + { + "truth": "4532185", + "prediction": "4865", + "images": 10 + }, + { + "truth": "7015", + "prediction": "3530", + "images": 9 + }, + { + "truth": "9717", + "prediction": "5343", + "images": 9 + }, + { + "truth": "4532185", + "prediction": "8840", + "images": 9 + }, + { + "truth": "7016", + "prediction": "3553", + "images": 9 + }, + { + "truth": "3530", + "prediction": "5343", + "images": 8 + }, + { + "truth": "7015", + "prediction": "8840", + "images": 8 + }, + { + "truth": "4532185", + "prediction": "9689", + "images": 8 + }, + { + "truth": "7016", + "prediction": "8874", + "images": 8 + }, + { + "truth": "9689", + "prediction": "8841", + "images": 8 + }, + { + "truth": "8841", + "prediction": "8861", + "images": 8 + }, + { + "truth": "6950", + "prediction": "4870", + "images": 8 + }, + { + "truth": "6950", + "prediction": "4705755", + "images": 8 + }, + { + "truth": "7294", + "prediction": "8838", + "images": 7 + }, + { + "truth": "7294", + "prediction": "7016", + "images": 7 + }, + { + "truth": "7294", + "prediction": "5474", + "images": 7 + }, + { + "truth": "6950", + "prediction": "8868", + "images": 7 + }, + { + "truth": "5474", + "prediction": "6950", + "images": 7 + }, + { + "truth": "3530", + "prediction": "6950", + "images": 6 + }, + { + "truth": "7015", + "prediction": "4705755", + "images": 6 + }, + { + "truth": "8874", + "prediction": "9412", + "images": 6 + }, + { + "truth": "5336", + "prediction": "4865", + "images": 6 + }, + { + "truth": "5336", + "prediction": "6950", + "images": 6 + }, + { + "truth": "8841", + "prediction": "6166", + "images": 6 + }, + { + "truth": "8841", + "prediction": "8860", + "images": 6 + }, + { + "truth": "8841", + "prediction": "9689", + "images": 6 + }, + { + "truth": "6950", + "prediction": "7016", + "images": 6 + }, + { + "truth": "6950", + "prediction": "9717", + "images": 6 + }, + { + "truth": "3530", + "prediction": "8861", + "images": 5 + }, + { + "truth": "7015", + "prediction": "8868", + "images": 5 + }, + { + "truth": "7015", + "prediction": "4300664", + "images": 5 + }, + { + "truth": "8868", + "prediction": "4538", + "images": 5 + }, + { + "truth": "5336", + "prediction": "5343", + "images": 5 + }, + { + "truth": "8841", + "prediction": "4705755", + "images": 5 + }, + { + "truth": "8841", + "prediction": "5487", + "images": 5 + }, + { + "truth": "8863", + "prediction": "6950", + "images": 5 + }, + { + "truth": "8868", + "prediction": "5343", + "images": 5 + }, + { + "truth": "3530", + "prediction": "8840", + "images": 4 + }, + { + "truth": "7015", + "prediction": "8860", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "8863", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "8860", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "4528997", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "5487", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "9717", + "images": 4 + }, + { + "truth": "7016", + "prediction": "7294", + "images": 4 + }, + { + "truth": "4300668", + "prediction": "5343", + "images": 4 + }, + { + "truth": "7294", + "prediction": "8841", + "images": 4 + }, + { + "truth": "6950", + "prediction": "8863", + "images": 4 + }, + { + "truth": "6950", + "prediction": "7294", + "images": 4 + }, + { + "truth": "5474", + "prediction": "8838", + "images": 4 + }, + { + "truth": "5474", + "prediction": "5336", + "images": 4 + }, + { + "truth": "5343", + "prediction": "3553", + "images": 4 + }, + { + "truth": "7294", + "prediction": "4865", + "images": 4 + }, + { + "truth": "5343", + "prediction": "9412", + "images": 4 + }, + { + "truth": "5343", + "prediction": "6166", + "images": 3 + }, + { + "truth": "7015", + "prediction": "7294", + "images": 3 + }, + { + "truth": "7015", + "prediction": "8861", + "images": 3 + }, + { + "truth": "7015", + "prediction": "5474", + "images": 3 + }, + { + "truth": "7015", + "prediction": "4300668", + "images": 3 + }, + { + "truth": "7015", + "prediction": "3528", + "images": 3 + }, + { + "truth": "4532185", + "prediction": "8868", + "images": 3 + }, + { + "truth": "4532185", + "prediction": "5481", + "images": 3 + }, + { + "truth": "8841", + "prediction": "8840", + "images": 3 + }, + { + "truth": "8841", + "prediction": "3554", + "images": 3 + }, + { + "truth": "7294", + "prediction": "4864", + "images": 3 + }, + { + "truth": "7294", + "prediction": "5336", + "images": 3 + }, + { + "truth": "6950", + "prediction": "8871", + "images": 3 + }, + { + "truth": "6950", + "prediction": "5474", + "images": 3 + }, + { + "truth": "6950", + "prediction": "7017", + "images": 3 + }, + { + "truth": "5336", + "prediction": "9412", + "images": 3 + }, + { + "truth": "5343", + "prediction": "6950", + "images": 3 + }, + { + "truth": "5474", + "prediction": "8841", + "images": 3 + }, + { + "truth": "5474", + "prediction": "4532185", + "images": 3 + }, + { + "truth": "8868", + "prediction": "3553", + "images": 3 + }, + { + "truth": "8868", + "prediction": "8841", + "images": 3 + }, + { + "truth": "5343", + "prediction": "4705755", + "images": 2 + }, + { + "truth": "7015", + "prediction": "8874", + "images": 2 + }, + { + "truth": "7015", + "prediction": "4528997", + "images": 2 + }, + { + "truth": "7015", + "prediction": "3556", + "images": 2 + }, + { + "truth": "7015", + "prediction": "3552", + "images": 2 + }, + { + "truth": "7015", + "prediction": "4870", + "images": 2 + }, + { + "truth": "7015", + "prediction": "4538", + "images": 2 + }, + { + "truth": "7015", + "prediction": "5345", + "images": 2 + }, + { + "truth": "9717", + "prediction": "7015", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "3528", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "5474", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "8861", + "images": 2 + }, + { + "truth": "7016", + "prediction": "9410", + "images": 2 + }, + { + "truth": "7016", + "prediction": "8868", + "images": 2 + }, + { + "truth": "7016", + "prediction": "9412", + "images": 2 + }, + { + "truth": "7016", + "prediction": "4300664", + "images": 2 + }, + { + "truth": "7016", + "prediction": "9689", + "images": 2 + }, + { + "truth": "9689", + "prediction": "8860", + "images": 2 + }, + { + "truth": "8868", + "prediction": "5345", + "images": 2 + }, + { + "truth": "8868", + "prediction": "5340", + "images": 2 + }, + { + "truth": "8868", + "prediction": "9689", + "images": 2 + }, + { + "truth": "5336", + "prediction": "3553", + "images": 2 + }, + { + "truth": "8841", + "prediction": "8874", + "images": 2 + }, + { + "truth": "8841", + "prediction": "4300668", + "images": 2 + }, + { + "truth": "8841", + "prediction": "4538", + "images": 2 + }, + { + "truth": "8841", + "prediction": "9412", + "images": 2 + }, + { + "truth": "8841", + "prediction": "8866", + "images": 2 + }, + { + "truth": "7294", + "prediction": "9717", + "images": 2 + }, + { + "truth": "7294", + "prediction": "8868", + "images": 2 + }, + { + "truth": "7294", + "prediction": "8861", + "images": 2 + }, + { + "truth": "6950", + "prediction": "4554", + "images": 2 + }, + { + "truth": "6950", + "prediction": "4538", + "images": 2 + }, + { + "truth": "6950", + "prediction": "5340", + "images": 2 + }, + { + "truth": "6950", + "prediction": "8838", + "images": 2 + }, + { + "truth": "6950", + "prediction": "3554", + "images": 2 + }, + { + "truth": "6950", + "prediction": "9689", + "images": 2 + }, + { + "truth": "6950", + "prediction": "5345", + "images": 2 + }, + { + "truth": "6950", + "prediction": "4300664", + "images": 2 + }, + { + "truth": "6950", + "prediction": "4542", + "images": 2 + }, + { + "truth": "6950", + "prediction": "8860", + "images": 2 + }, + { + "truth": "5336", + "prediction": "7015", + "images": 2 + }, + { + "truth": "5343", + "prediction": "7297", + "images": 2 + }, + { + "truth": "5474", + "prediction": "7294", + "images": 2 + }, + { + "truth": "5474", + "prediction": "8871", + "images": 2 + }, + { + "truth": "5474", + "prediction": "8868", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "4554", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "3552", + "images": 2 + }, + { + "truth": "7016", + "prediction": "8841", + "images": 2 + }, + { + "truth": "7016", + "prediction": "4870", + "images": 2 + }, + { + "truth": "8868", + "prediction": "3530", + "images": 2 + }, + { + "truth": "8868", + "prediction": "7014", + "images": 2 + }, + { + "truth": "8868", + "prediction": "4870", + "images": 2 + }, + { + "truth": "5336", + "prediction": "5487", + "images": 2 + }, + { + "truth": "3530", + "prediction": "9717", + "images": 1 + }, + { + "truth": "3530", + "prediction": "5336", + "images": 1 + }, + { + "truth": "3530", + "prediction": "3553", + "images": 1 + }, + { + "truth": "5343", + "prediction": "5336", + "images": 1 + }, + { + "truth": "5343", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "7015", + "prediction": "5340", + "images": 1 + }, + { + "truth": "7015", + "prediction": "9717", + "images": 1 + }, + { + "truth": "7015", + "prediction": "9541689", + "images": 1 + }, + { + "truth": "7015", + "prediction": "5487", + "images": 1 + }, + { + "truth": "7015", + "prediction": "8871", + "images": 1 + }, + { + "truth": "7015", + "prediction": "8863", + "images": 1 + }, + { + "truth": "7015", + "prediction": "9408", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "4300664", + "images": 1 + }, + { + "truth": "9717", + "prediction": "5481", + "images": 1 + }, + { + "truth": "9717", + "prediction": "8863", + "images": 1 + }, + { + "truth": "9717", + "prediction": "5336", + "images": 1 + }, + { + "truth": "9717", + "prediction": "8841", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "4525465", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "6954", + "images": 1 + }, + { + "truth": "7016", + "prediction": "8838", + "images": 1 + }, + { + "truth": "7016", + "prediction": "6166", + "images": 1 + }, + { + "truth": "7016", + "prediction": "8855", + "images": 1 + }, + { + "truth": "8874", + "prediction": "7297", + "images": 1 + }, + { + "truth": "8860", + "prediction": "7015", + "images": 1 + }, + { + "truth": "8860", + "prediction": "5345", + "images": 1 + }, + { + "truth": "4527533", + "prediction": "8838", + "images": 1 + }, + { + "truth": "9689", + "prediction": "9412", + "images": 1 + }, + { + "truth": "9689", + "prediction": "8838", + "images": 1 + }, + { + "truth": "9689", + "prediction": "3553", + "images": 1 + }, + { + "truth": "3553", + "prediction": "8871", + "images": 1 + }, + { + "truth": "3553", + "prediction": "8841", + "images": 1 + }, + { + "truth": "8868", + "prediction": "9412", + "images": 1 + }, + { + "truth": "8868", + "prediction": "8840", + "images": 1 + }, + { + "truth": "8868", + "prediction": "8864", + "images": 1 + }, + { + "truth": "5336", + "prediction": "8874", + "images": 1 + }, + { + "truth": "5336", + "prediction": "3552", + "images": 1 + }, + { + "truth": "8841", + "prediction": "3552", + "images": 1 + }, + { + "truth": "8841", + "prediction": "5320", + "images": 1 + }, + { + "truth": "8841", + "prediction": "4528997", + "images": 1 + }, + { + "truth": "8841", + "prediction": "4300664", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8865", + "images": 1 + }, + { + "truth": "8841", + "prediction": "4864", + "images": 1 + }, + { + "truth": "8841", + "prediction": "7016", + "images": 1 + }, + { + "truth": "8841", + "prediction": "7297", + "images": 1 + }, + { + "truth": "8841", + "prediction": "9717", + "images": 1 + }, + { + "truth": "8841", + "prediction": "9410", + "images": 1 + }, + { + "truth": "7294", + "prediction": "6166", + "images": 1 + }, + { + "truth": "7294", + "prediction": "3556", + "images": 1 + }, + { + "truth": "7294", + "prediction": "4870", + "images": 1 + }, + { + "truth": "7294", + "prediction": "9412", + "images": 1 + }, + { + "truth": "7294", + "prediction": "3553", + "images": 1 + }, + { + "truth": "7294", + "prediction": "7017", + "images": 1 + }, + { + "truth": "6950", + "prediction": "3530", + "images": 1 + }, + { + "truth": "6950", + "prediction": "3563", + "images": 1 + }, + { + "truth": "6950", + "prediction": "4300668", + "images": 1 + }, + { + "truth": "6950", + "prediction": "8865", + "images": 1 + }, + { + "truth": "6950", + "prediction": "4525436", + "images": 1 + }, + { + "truth": "6950", + "prediction": "8874", + "images": 1 + }, + { + "truth": "8863", + "prediction": "8841", + "images": 1 + }, + { + "truth": "8863", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "6950", + "prediction": "8840", + "images": 1 + }, + { + "truth": "6950", + "prediction": "9410", + "images": 1 + }, + { + "truth": "6950", + "prediction": "6946", + "images": 1 + }, + { + "truth": "6950", + "prediction": "7014", + "images": 1 + }, + { + "truth": "5474", + "prediction": "7016", + "images": 1 + }, + { + "truth": "6950", + "prediction": "8866", + "images": 1 + }, + { + "truth": "6950", + "prediction": "8855", + "images": 1 + }, + { + "truth": "5345", + "prediction": "8874", + "images": 1 + }, + { + "truth": "5345", + "prediction": "8860", + "images": 1 + }, + { + "truth": "5345", + "prediction": "8866", + "images": 1 + }, + { + "truth": "5345", + "prediction": "3553", + "images": 1 + }, + { + "truth": "3552", + "prediction": "7015", + "images": 1 + }, + { + "truth": "3552", + "prediction": "9412", + "images": 1 + }, + { + "truth": "3552", + "prediction": "8838", + "images": 1 + }, + { + "truth": "3552", + "prediction": "3553", + "images": 1 + }, + { + "truth": "3552", + "prediction": "5343", + "images": 1 + }, + { + "truth": "3552", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "4300668", + "images": 1 + }, + { + "truth": "7015", + "prediction": "8855", + "images": 1 + }, + { + "truth": "7015", + "prediction": "7017", + "images": 1 + }, + { + "truth": "3530", + "prediction": "8841", + "images": 1 + }, + { + "truth": "5343", + "prediction": "8841", + "images": 1 + }, + { + "truth": "5343", + "prediction": "4867", + "images": 1 + }, + { + "truth": "5474", + "prediction": "3528", + "images": 1 + }, + { + "truth": "5474", + "prediction": "4864", + "images": 1 + }, + { + "truth": "5474", + "prediction": "3530", + "images": 1 + }, + { + "truth": "5474", + "prediction": "8840", + "images": 1 + }, + { + "truth": "7015", + "prediction": "7014", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "7017", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "3554", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "9408", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "8839", + "images": 1 + }, + { + "truth": "7016", + "prediction": "8861", + "images": 1 + }, + { + "truth": "7016", + "prediction": "6954", + "images": 1 + }, + { + "truth": "7016", + "prediction": "4705755", + "images": 1 + }, + { + "truth": "8868", + "prediction": "7016", + "images": 1 + }, + { + "truth": "8868", + "prediction": "8860", + "images": 1 + }, + { + "truth": "8868", + "prediction": "5336", + "images": 1 + }, + { + "truth": "8868", + "prediction": "5487", + "images": 1 + }, + { + "truth": "5336", + "prediction": "8841", + "images": 1 + }, + { + "truth": "7294", + "prediction": "9410", + "images": 1 + }, + { + "truth": "6950", + "prediction": "8839", + "images": 1 + }, + { + "truth": "6950", + "prediction": "5481", + "images": 1 + }, + { + "truth": "3556", + "prediction": "8840", + "images": 1 + }, + { + "truth": "5343", + "prediction": "3552", + "images": 1 + }, + { + "truth": "5343", + "prediction": "4525436", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "3556", + "images": 1 + } + ] + }, + "optimized": { + "threshold": 0.970800906419754, + "images": 52788, + "accepted": 38566, + "truth_counts": { + "7015": 9243, + "3530": 728, + "5343": 632, + "4532185": 15241, + "9717": 191, + "7016": 3321, + "3556": 14, + "8874": 13, + "8860": 14, + "4527533": 2, + "9689": 32, + "4300668": 24, + "3552": 48, + "3553": 2, + "8868": 1124, + "5336": 365, + "8841": 4542, + "7294": 1604, + "6950": 15047, + "8863": 79, + "4542": 1, + "5474": 475, + "5345": 46 + }, + "predicted_counts": { + "3530": 374, + "5343": 455, + "7015": 6331, + "4532185": 11359, + "6950": 12182, + "8863": 71, + "9717": 145, + "7016": 2622, + "7294": 1119, + "6166": 2, + "5336": 261, + "3556": 12, + "8874": 3, + "8860": 12, + "4527533": 1, + "9689": 18, + "9412": 2, + "8841": 2423, + "4300668": 18, + "3552": 41, + "8868": 855, + "8861": 1, + "8838": 2, + "4864": 21, + "5474": 205, + "4542": 1, + "5345": 27, + "4870": 2, + "8840": 1 + }, + "official": { + "precision": { + "2": 0.74059226732527 + }, + "recall": { + "2": 0.6535073068400129 + }, + "f1": { + "2": 0.5807455159791289 + }, + "micro_accuracy": { + "2": 0.997951563553389 + }, + "coverage": { + "2": 0.7305827081912556 + } + }, + "truth_group_diagnostic": { + "precision": 0.9762352614742195, + "recall": 0.6535073068400129, + "f1": 0.7574941512771247 + }, + "groups": { + "precision": { + "7015": [ + 0.9987363765597852, + 1.0 + ], + "3530": [ + 1.0, + 1.0 + ], + "5343": [ + 0.9868131868131869, + 1.0 + ], + "4532185": [ + 0.9992957126507616, + 1.0 + ], + "9717": [ + 1.0, + 1.0 + ], + "7016": [ + 0.9988558352402745, + 1.0 + ], + "3556": [ + 1.0, + 1.0 + ], + "8874": [ + 0.6666666666666666, + 1.0 + ], + "8860": [ + 0.9166666666666666, + 1.0 + ], + "4527533": [ + 1.0, + 1.0 + ], + "9689": [ + 1.0, + 1.0 + ], + "4300668": [ + 0.9444444444444444, + 1.0 + ], + "3552": [ + 1.0, + 1.0 + ], + "3553": [ + 1.0, + 0.0 + ], + "8868": [ + 1.0, + 1.0 + ], + "5336": [ + 0.9885057471264368, + 1.0 + ], + "8841": [ + 0.9987618654560462, + 1.0 + ], + "7294": [ + 0.998212689901698, + 1.0 + ], + "6950": [ + 0.999179116729601, + 1.0 + ], + "8863": [ + 0.9859154929577465, + 1.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "5474": [ + 0.9951219512195122, + 1.0 + ], + "5345": [ + 1.0, + 1.0 + ], + "8861": [ + 0.0, + 1.0 + ], + "8840": [ + 0.0, + 1.0 + ], + "6166": [ + 0.0, + 1.0 + ], + "4705755": [ + 1.0, + 0.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "5340": [ + 1.0, + 0.0 + ], + "9541689": [ + 1.0, + 0.0 + ], + "4528997": [ + 1.0, + 0.0 + ], + "8838": [ + 0.0, + 1.0 + ], + "4870": [ + 0.0, + 1.0 + ], + "3528": [ + 1.0, + 0.0 + ], + "5487": [ + 1.0, + 0.0 + ], + "4300664": [ + 1.0, + 0.0 + ], + "4538": [ + 1.0, + 0.0 + ], + "8871": [ + 1.0, + 0.0 + ], + "9408": [ + 1.0, + 0.0 + ], + "5481": [ + 1.0, + 0.0 + ], + "4525465": [ + 1.0, + 0.0 + ], + "7297": [ + 1.0, + 0.0 + ], + "6954": [ + 1.0, + 0.0 + ], + "9410": [ + 1.0, + 0.0 + ], + "8855": [ + 1.0, + 0.0 + ], + "8864": [ + 1.0, + 0.0 + ], + "4865": [ + 1.0, + 0.0 + ], + "5320": [ + 1.0, + 0.0 + ], + "8865": [ + 1.0, + 0.0 + ], + "4864": [ + 0.0, + 1.0 + ], + "3554": [ + 1.0, + 0.0 + ], + "8866": [ + 1.0, + 0.0 + ], + "7017": [ + 1.0, + 0.0 + ], + "3563": [ + 1.0, + 0.0 + ], + "4554": [ + 1.0, + 0.0 + ], + "4525436": [ + 1.0, + 0.0 + ], + "6946": [ + 1.0, + 0.0 + ], + "7014": [ + 1.0, + 0.0 + ], + "4867": [ + 1.0, + 0.0 + ], + "8839": [ + 1.0, + 0.0 + ] + }, + "recall": { + "7015": [ + 0.6840852537055069, + 1.0 + ], + "3530": [ + 0.5137362637362637, + 1.0 + ], + "5343": [ + 0.7104430379746836, + 1.0 + ], + "4532185": [ + 0.7447674037136671, + 1.0 + ], + "9717": [ + 0.7591623036649214, + 1.0 + ], + "7016": [ + 0.7886178861788617, + 1.0 + ], + "3556": [ + 0.8571428571428571, + 1.0 + ], + "8874": [ + 0.15384615384615385, + 1.0 + ], + "8860": [ + 0.7857142857142857, + 1.0 + ], + "4527533": [ + 0.5, + 1.0 + ], + "9689": [ + 0.5625, + 1.0 + ], + "4300668": [ + 0.7083333333333334, + 1.0 + ], + "3552": [ + 0.8541666666666666, + 1.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8868": [ + 0.7606761565836299, + 1.0 + ], + "5336": [ + 0.7068493150684931, + 1.0 + ], + "8841": [ + 0.5328049317481286, + 1.0 + ], + "7294": [ + 0.6963840399002493, + 1.0 + ], + "6950": [ + 0.8089320130258524, + 1.0 + ], + "8863": [ + 0.8860759493670886, + 1.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "5474": [ + 0.42947368421052634, + 1.0 + ], + "5345": [ + 0.5869565217391305, + 1.0 + ] + }, + "f1": { + "4864": [ + 0.0, + 1.0 + ], + "8865": [ + 1.0, + 0.0 + ], + "3552": [ + 0.9213483146067415, + 1.0 + ], + "8868": [ + 0.8640727640222333, + 1.0 + ], + "8866": [ + 1.0, + 0.0 + ], + "4705755": [ + 1.0, + 0.0 + ], + "4527533": [ + 0.6666666666666666, + 1.0 + ], + "7294": [ + 0.8204186558942343, + 1.0 + ], + "5345": [ + 0.7397260273972603, + 1.0 + ], + "6954": [ + 1.0, + 0.0 + ], + "5336": [ + 0.8242811501597445, + 1.0 + ], + "8839": [ + 1.0, + 0.0 + ], + "4554": [ + 1.0, + 0.0 + ], + "8860": [ + 0.8461538461538461, + 1.0 + ], + "4300664": [ + 1.0, + 0.0 + ], + "9410": [ + 1.0, + 0.0 + ], + "6946": [ + 1.0, + 0.0 + ], + "6166": [ + 0.0, + 1.0 + ], + "5481": [ + 1.0, + 0.0 + ], + "8840": [ + 0.0, + 1.0 + ], + "4532185": [ + 0.8534586466165415, + 1.0 + ], + "6950": [ + 0.8940467883506555, + 1.0 + ], + "9408": [ + 1.0, + 0.0 + ], + "8864": [ + 1.0, + 0.0 + ], + "4867": [ + 1.0, + 0.0 + ], + "4870": [ + 0.0, + 1.0 + ], + "3563": [ + 1.0, + 0.0 + ], + "8861": [ + 0.0, + 1.0 + ], + "8838": [ + 0.0, + 1.0 + ], + "8855": [ + 1.0, + 0.0 + ], + "9689": [ + 0.72, + 1.0 + ], + "4300668": [ + 0.8095238095238095, + 1.0 + ], + "4525465": [ + 1.0, + 0.0 + ], + "5474": [ + 0.6000000000000001, + 1.0 + ], + "3556": [ + 0.9230769230769229, + 1.0 + ], + "3530": [ + 0.6787658802177858, + 1.0 + ], + "3528": [ + 1.0, + 0.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "4528997": [ + 1.0, + 0.0 + ], + "7014": [ + 1.0, + 0.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8841": [ + 0.6949030868628859, + 1.0 + ], + "7017": [ + 1.0, + 0.0 + ], + "5340": [ + 1.0, + 0.0 + ], + "8874": [ + 0.25, + 1.0 + ], + "7015": [ + 0.811994349556954, + 1.0 + ], + "7016": [ + 0.8813730439172136, + 1.0 + ], + "7297": [ + 1.0, + 0.0 + ], + "5343": [ + 0.8261269549218031, + 1.0 + ], + "8863": [ + 0.9333333333333333, + 1.0 + ], + "8871": [ + 1.0, + 0.0 + ], + "4865": [ + 1.0, + 0.0 + ], + "5320": [ + 1.0, + 0.0 + ], + "3554": [ + 1.0, + 0.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "9717": [ + 0.863095238095238, + 1.0 + ], + "4525436": [ + 1.0, + 0.0 + ], + "9541689": [ + 1.0, + 0.0 + ], + "4538": [ + 1.0, + 0.0 + ], + "5487": [ + 1.0, + 0.0 + ] + } + }, + "predicted_only": { + "6166": 2, + "9412": 2, + "8861": 1, + "8838": 2, + "4864": 21, + "4870": 2, + "8840": 1 + }, + "truth_families_without_accepted_predictions": [ + "3553" + ], + "false_positive_pairs": [ + { + "truth": "4532185", + "prediction": "4864", + "images": 15 + }, + { + "truth": "6950", + "prediction": "4864", + "images": 6 + }, + { + "truth": "7015", + "prediction": "5343", + "images": 5 + }, + { + "truth": "7015", + "prediction": "4532185", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "6950", + "images": 3 + }, + { + "truth": "4532185", + "prediction": "7015", + "images": 3 + }, + { + "truth": "7015", + "prediction": "6950", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "6166", + "images": 2 + }, + { + "truth": "8841", + "prediction": "5336", + "images": 2 + }, + { + "truth": "8841", + "prediction": "8838", + "images": 2 + }, + { + "truth": "7294", + "prediction": "7016", + "images": 2 + }, + { + "truth": "7294", + "prediction": "6950", + "images": 2 + }, + { + "truth": "8868", + "prediction": "7015", + "images": 2 + }, + { + "truth": "8868", + "prediction": "4532185", + "images": 2 + }, + { + "truth": "7294", + "prediction": "7015", + "images": 2 + }, + { + "truth": "6950", + "prediction": "4870", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "8863", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "7016", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "7294", + "images": 1 + }, + { + "truth": "7016", + "prediction": "5336", + "images": 1 + }, + { + "truth": "9689", + "prediction": "9412", + "images": 1 + }, + { + "truth": "9689", + "prediction": "8841", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8874", + "images": 1 + }, + { + "truth": "8841", + "prediction": "5343", + "images": 1 + }, + { + "truth": "8841", + "prediction": "4300668", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8861", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8860", + "images": 1 + }, + { + "truth": "8863", + "prediction": "6950", + "images": 1 + }, + { + "truth": "6950", + "prediction": "7294", + "images": 1 + }, + { + "truth": "6950", + "prediction": "5474", + "images": 1 + }, + { + "truth": "6950", + "prediction": "7015", + "images": 1 + }, + { + "truth": "3530", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "3530", + "prediction": "6950", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "9412", + "images": 1 + }, + { + "truth": "8868", + "prediction": "8841", + "images": 1 + }, + { + "truth": "5336", + "prediction": "8841", + "images": 1 + }, + { + "truth": "5336", + "prediction": "6950", + "images": 1 + }, + { + "truth": "7294", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "7015", + "prediction": "8840", + "images": 1 + } + ] + }, + "common_0.96": { + "threshold": 0.96, + "images": 52788, + "accepted": 39571, + "truth_counts": { + "7015": 9243, + "3530": 728, + "5343": 632, + "4532185": 15241, + "9717": 191, + "7016": 3321, + "3556": 14, + "8874": 13, + "8860": 14, + "4527533": 2, + "9689": 32, + "4300668": 24, + "3552": 48, + "3553": 2, + "8868": 1124, + "5336": 365, + "8841": 4542, + "7294": 1604, + "6950": 15047, + "8863": 79, + "4542": 1, + "5474": 475, + "5345": 46 + }, + "predicted_counts": { + "3530": 387, + "5343": 468, + "7015": 6525, + "9412": 4, + "4532185": 11634, + "3553": 1, + "6950": 12469, + "8863": 71, + "9717": 146, + "7016": 2661, + "7294": 1140, + "6166": 2, + "5336": 269, + "3556": 12, + "8874": 3, + "8860": 12, + "4527533": 1, + "9689": 18, + "8841": 2550, + "4300668": 19, + "3552": 41, + "8868": 861, + "8861": 1, + "8838": 2, + "4864": 24, + "5474": 217, + "4542": 1, + "5345": 27, + "4705755": 1, + "4870": 3, + "8840": 1 + }, + "official": { + "precision": { + "2": 0.6927578760132808 + }, + "recall": { + "2": 0.6641347649986203 + }, + "f1": { + "2": 0.5676737474327976 + }, + "micro_accuracy": { + "2": 0.9974476257865609 + }, + "coverage": { + "2": 0.749621126013488 + } + }, + "truth_group_diagnostic": { + "precision": 0.9337171372352914, + "recall": 0.6641347649986203, + "f1": 0.7651254856702924 + }, + "groups": { + "precision": { + "7015": [ + 0.9983141762452107, + 1.0 + ], + "3530": [ + 1.0, + 1.0 + ], + "5343": [ + 0.9829059829059829, + 1.0 + ], + "4532185": [ + 0.9990544954443872, + 1.0 + ], + "9717": [ + 1.0, + 1.0 + ], + "7016": [ + 0.9984968057121383, + 1.0 + ], + "3556": [ + 1.0, + 1.0 + ], + "8874": [ + 0.6666666666666666, + 1.0 + ], + "8860": [ + 0.9166666666666666, + 1.0 + ], + "4527533": [ + 1.0, + 1.0 + ], + "9689": [ + 1.0, + 1.0 + ], + "4300668": [ + 0.9473684210526315, + 1.0 + ], + "3552": [ + 1.0, + 1.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8868": [ + 1.0, + 1.0 + ], + "5336": [ + 0.9888475836431226, + 1.0 + ], + "8841": [ + 0.9988235294117647, + 1.0 + ], + "7294": [ + 0.9982456140350877, + 1.0 + ], + "6950": [ + 0.9987970166011709, + 1.0 + ], + "8863": [ + 0.9859154929577465, + 1.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "5474": [ + 0.9953917050691244, + 1.0 + ], + "5345": [ + 1.0, + 1.0 + ], + "8861": [ + 0.0, + 1.0 + ], + "8840": [ + 0.0, + 1.0 + ], + "6166": [ + 0.0, + 1.0 + ], + "4705755": [ + 0.0, + 1.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "5340": [ + 1.0, + 0.0 + ], + "9541689": [ + 1.0, + 0.0 + ], + "4528997": [ + 1.0, + 0.0 + ], + "8838": [ + 0.0, + 1.0 + ], + "4870": [ + 0.0, + 1.0 + ], + "3528": [ + 1.0, + 0.0 + ], + "5487": [ + 1.0, + 0.0 + ], + "4300664": [ + 1.0, + 0.0 + ], + "4538": [ + 1.0, + 0.0 + ], + "8871": [ + 1.0, + 0.0 + ], + "9408": [ + 1.0, + 0.0 + ], + "5481": [ + 1.0, + 0.0 + ], + "4525465": [ + 1.0, + 0.0 + ], + "7297": [ + 1.0, + 0.0 + ], + "6954": [ + 1.0, + 0.0 + ], + "9410": [ + 1.0, + 0.0 + ], + "8855": [ + 1.0, + 0.0 + ], + "8864": [ + 1.0, + 0.0 + ], + "4865": [ + 1.0, + 0.0 + ], + "5320": [ + 1.0, + 0.0 + ], + "8865": [ + 1.0, + 0.0 + ], + "4864": [ + 0.0, + 1.0 + ], + "3554": [ + 1.0, + 0.0 + ], + "8866": [ + 1.0, + 0.0 + ], + "7017": [ + 1.0, + 0.0 + ], + "3563": [ + 1.0, + 0.0 + ], + "4554": [ + 1.0, + 0.0 + ], + "4525436": [ + 1.0, + 0.0 + ], + "6946": [ + 1.0, + 0.0 + ], + "7014": [ + 1.0, + 0.0 + ], + "4867": [ + 1.0, + 0.0 + ], + "8839": [ + 1.0, + 0.0 + ] + }, + "recall": { + "7015": [ + 0.7047495401925782, + 1.0 + ], + "3530": [ + 0.5315934065934066, + 1.0 + ], + "5343": [ + 0.7278481012658228, + 1.0 + ], + "4532185": [ + 0.7626140017059249, + 1.0 + ], + "9717": [ + 0.7643979057591623, + 1.0 + ], + "7016": [ + 0.8000602228244504, + 1.0 + ], + "3556": [ + 0.8571428571428571, + 1.0 + ], + "8874": [ + 0.15384615384615385, + 1.0 + ], + "8860": [ + 0.7857142857142857, + 1.0 + ], + "4527533": [ + 0.5, + 1.0 + ], + "9689": [ + 0.5625, + 1.0 + ], + "4300668": [ + 0.75, + 1.0 + ], + "3552": [ + 0.8541666666666666, + 1.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8868": [ + 0.7660142348754448, + 1.0 + ], + "5336": [ + 0.7287671232876712, + 1.0 + ], + "8841": [ + 0.5607661822985469, + 1.0 + ], + "7294": [ + 0.7094763092269327, + 1.0 + ], + "6950": [ + 0.8276732903568818, + 1.0 + ], + "8863": [ + 0.8860759493670886, + 1.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "5474": [ + 0.45473684210526316, + 1.0 + ], + "5345": [ + 0.5869565217391305, + 1.0 + ] + }, + "f1": { + "4864": [ + 0.0, + 1.0 + ], + "8865": [ + 1.0, + 0.0 + ], + "3552": [ + 0.9213483146067415, + 1.0 + ], + "8868": [ + 0.8675062972292191, + 1.0 + ], + "8866": [ + 1.0, + 0.0 + ], + "4705755": [ + 0.0, + 1.0 + ], + "4527533": [ + 0.6666666666666666, + 1.0 + ], + "7294": [ + 0.8294460641399417, + 1.0 + ], + "5345": [ + 0.7397260273972603, + 1.0 + ], + "6954": [ + 1.0, + 0.0 + ], + "5336": [ + 0.8391167192429022, + 1.0 + ], + "8839": [ + 1.0, + 0.0 + ], + "4554": [ + 1.0, + 0.0 + ], + "8860": [ + 0.8461538461538461, + 1.0 + ], + "4300664": [ + 1.0, + 0.0 + ], + "9410": [ + 1.0, + 0.0 + ], + "6946": [ + 1.0, + 0.0 + ], + "6166": [ + 0.0, + 1.0 + ], + "5481": [ + 1.0, + 0.0 + ], + "8840": [ + 0.0, + 1.0 + ], + "4532185": [ + 0.8649674418604651, + 1.0 + ], + "6950": [ + 0.9052187817996801, + 1.0 + ], + "9408": [ + 1.0, + 0.0 + ], + "8864": [ + 1.0, + 0.0 + ], + "4867": [ + 1.0, + 0.0 + ], + "4870": [ + 0.0, + 1.0 + ], + "3563": [ + 1.0, + 0.0 + ], + "8861": [ + 0.0, + 1.0 + ], + "8838": [ + 0.0, + 1.0 + ], + "8855": [ + 1.0, + 0.0 + ], + "9689": [ + 0.72, + 1.0 + ], + "4300668": [ + 0.8372093023255814, + 1.0 + ], + "4525465": [ + 1.0, + 0.0 + ], + "5474": [ + 0.624277456647399, + 1.0 + ], + "3556": [ + 0.9230769230769229, + 1.0 + ], + "3530": [ + 0.694170403587444, + 1.0 + ], + "3528": [ + 1.0, + 0.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "4528997": [ + 1.0, + 0.0 + ], + "7014": [ + 1.0, + 0.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8841": [ + 0.7182741116751269, + 1.0 + ], + "7017": [ + 1.0, + 0.0 + ], + "5340": [ + 1.0, + 0.0 + ], + "8874": [ + 0.25, + 1.0 + ], + "7015": [ + 0.8262303399289701, + 1.0 + ], + "7016": [ + 0.8883316616516214, + 1.0 + ], + "7297": [ + 1.0, + 0.0 + ], + "5343": [ + 0.8363636363636364, + 1.0 + ], + "8863": [ + 0.9333333333333333, + 1.0 + ], + "8871": [ + 1.0, + 0.0 + ], + "4865": [ + 1.0, + 0.0 + ], + "5320": [ + 1.0, + 0.0 + ], + "3554": [ + 1.0, + 0.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "9717": [ + 0.8664688427299703, + 1.0 + ], + "4525436": [ + 1.0, + 0.0 + ], + "9541689": [ + 1.0, + 0.0 + ], + "4538": [ + 1.0, + 0.0 + ], + "5487": [ + 1.0, + 0.0 + ] + } + }, + "predicted_only": { + "9412": 4, + "6166": 2, + "8861": 1, + "8838": 2, + "4864": 24, + "4705755": 1, + "4870": 3, + "8840": 1 + }, + "truth_families_without_accepted_predictions": [], + "false_positive_pairs": [ + { + "truth": "4532185", + "prediction": "4864", + "images": 18 + }, + { + "truth": "7015", + "prediction": "4532185", + "images": 6 + }, + { + "truth": "6950", + "prediction": "4864", + "images": 6 + }, + { + "truth": "7015", + "prediction": "5343", + "images": 6 + }, + { + "truth": "4532185", + "prediction": "7015", + "images": 5 + }, + { + "truth": "7294", + "prediction": "6950", + "images": 5 + }, + { + "truth": "4532185", + "prediction": "6950", + "images": 4 + }, + { + "truth": "6950", + "prediction": "4870", + "images": 3 + }, + { + "truth": "7015", + "prediction": "9412", + "images": 2 + }, + { + "truth": "7015", + "prediction": "6950", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "7016", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "6166", + "images": 2 + }, + { + "truth": "8841", + "prediction": "5336", + "images": 2 + }, + { + "truth": "8841", + "prediction": "8838", + "images": 2 + }, + { + "truth": "7294", + "prediction": "7016", + "images": 2 + }, + { + "truth": "6950", + "prediction": "7015", + "images": 2 + }, + { + "truth": "8868", + "prediction": "7015", + "images": 2 + }, + { + "truth": "8868", + "prediction": "4532185", + "images": 2 + }, + { + "truth": "7294", + "prediction": "7015", + "images": 2 + }, + { + "truth": "7015", + "prediction": "3553", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "8863", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "7294", + "images": 1 + }, + { + "truth": "7016", + "prediction": "5336", + "images": 1 + }, + { + "truth": "9689", + "prediction": "9412", + "images": 1 + }, + { + "truth": "9689", + "prediction": "8841", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8874", + "images": 1 + }, + { + "truth": "8841", + "prediction": "5343", + "images": 1 + }, + { + "truth": "8841", + "prediction": "4300668", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8861", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8860", + "images": 1 + }, + { + "truth": "8841", + "prediction": "6950", + "images": 1 + }, + { + "truth": "7294", + "prediction": "5343", + "images": 1 + }, + { + "truth": "8863", + "prediction": "6950", + "images": 1 + }, + { + "truth": "6950", + "prediction": "7294", + "images": 1 + }, + { + "truth": "6950", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "6950", + "prediction": "5474", + "images": 1 + }, + { + "truth": "3530", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "3530", + "prediction": "6950", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "9412", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "4705755", + "images": 1 + }, + { + "truth": "8868", + "prediction": "8841", + "images": 1 + }, + { + "truth": "5336", + "prediction": "8841", + "images": 1 + }, + { + "truth": "5336", + "prediction": "6950", + "images": 1 + }, + { + "truth": "7294", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "7015", + "prediction": "8840", + "images": 1 + } + ] + } + }, + "onnx": { + "zero": { + "threshold": 0, + "images": 52788, + "accepted": 52788, + "truth_counts": { + "7015": 9243, + "3530": 728, + "5343": 632, + "4532185": 15241, + "9717": 191, + "7016": 3321, + "3556": 14, + "8874": 13, + "8860": 14, + "4527533": 2, + "9689": 32, + "4300668": 24, + "3552": 48, + "3553": 2, + "8868": 1124, + "5336": 365, + "8841": 4542, + "7294": 1604, + "6950": 15047, + "8863": 79, + "4542": 1, + "5474": 475, + "5345": 46 + }, + "predicted_counts": { + "7015": 9171, + "7016": 3215, + "3530": 616, + "9717": 191, + "5336": 559, + "3556": 42, + "8861": 42, + "4532185": 14480, + "6950": 14855, + "5343": 1308, + "3553": 135, + "8840": 28, + "6166": 30, + "4705755": 52, + "7294": 1414, + "8868": 1021, + "8841": 4312, + "9412": 117, + "5340": 5, + "9541689": 1, + "8860": 31, + "8874": 39, + "4528997": 7, + "5474": 383, + "8838": 118, + "3552": 49, + "4300668": 27, + "4870": 15, + "3528": 6, + "5487": 23, + "4300664": 11, + "4538": 22, + "5345": 49, + "8871": 53, + "8863": 82, + "9408": 2, + "5481": 5, + "9689": 49, + "4525465": 1, + "7297": 23, + "6954": 2, + "9410": 4, + "8855": 3, + "4527533": 1, + "8864": 1, + "4865": 19, + "5320": 1, + "8865": 2, + "4864": 132, + "3554": 6, + "8866": 4, + "7017": 6, + "3563": 1, + "4554": 4, + "4525436": 2, + "6946": 1, + "7014": 4, + "4542": 3, + "4867": 1, + "8839": 2 + }, + "official": { + "precision": { + "2": 0.2756918885388057 + }, + "recall": { + "2": 0.8106325437578626 + }, + "f1": { + "2": 0.28088792323657213 + }, + "micro_accuracy": { + "2": 0.9300409183905433 + }, + "coverage": { + "2": 1.0 + } + }, + "truth_group_diagnostic": { + "precision": 0.7191962309707975, + "recall": 0.8106325437578626, + "f1": 0.7327511040954056 + }, + "groups": { + "precision": { + "7015": [ + 0.9243266819321775, + 1.0 + ], + "3530": [ + 0.939935064935065, + 1.0 + ], + "5343": [ + 0.46559633027522934, + 1.0 + ], + "4532185": [ + 0.9831491712707182, + 1.0 + ], + "9717": [ + 0.9214659685863874, + 1.0 + ], + "7016": [ + 0.9517884914463453, + 1.0 + ], + "3556": [ + 0.30952380952380953, + 1.0 + ], + "8874": [ + 0.15384615384615385, + 1.0 + ], + "8860": [ + 0.3870967741935484, + 1.0 + ], + "4527533": [ + 1.0, + 1.0 + ], + "9689": [ + 0.3877551020408163, + 1.0 + ], + "4300668": [ + 0.7407407407407407, + 1.0 + ], + "3552": [ + 0.8571428571428571, + 1.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8868": [ + 0.9794319294809011, + 1.0 + ], + "5336": [ + 0.6010733452593918, + 1.0 + ], + "8841": [ + 0.9554730983302412, + 1.0 + ], + "7294": [ + 0.9759547383309759, + 1.0 + ], + "6950": [ + 0.9778525748906092, + 1.0 + ], + "8863": [ + 0.8780487804878049, + 1.0 + ], + "4542": [ + 0.3333333333333333, + 1.0 + ], + "5474": [ + 0.9608355091383812, + 1.0 + ], + "5345": [ + 0.8571428571428571, + 1.0 + ], + "8861": [ + 0.0, + 1.0 + ], + "8840": [ + 0.0, + 1.0 + ], + "6166": [ + 0.0, + 1.0 + ], + "4705755": [ + 0.0, + 1.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "5340": [ + 0.0, + 1.0 + ], + "9541689": [ + 0.0, + 1.0 + ], + "4528997": [ + 0.0, + 1.0 + ], + "8838": [ + 0.0, + 1.0 + ], + "4870": [ + 0.0, + 1.0 + ], + "3528": [ + 0.0, + 1.0 + ], + "5487": [ + 0.0, + 1.0 + ], + "4300664": [ + 0.0, + 1.0 + ], + "4538": [ + 0.0, + 1.0 + ], + "8871": [ + 0.0, + 1.0 + ], + "9408": [ + 0.0, + 1.0 + ], + "5481": [ + 0.0, + 1.0 + ], + "4525465": [ + 0.0, + 1.0 + ], + "7297": [ + 0.0, + 1.0 + ], + "6954": [ + 0.0, + 1.0 + ], + "9410": [ + 0.0, + 1.0 + ], + "8855": [ + 0.0, + 1.0 + ], + "8864": [ + 0.0, + 1.0 + ], + "4865": [ + 0.0, + 1.0 + ], + "5320": [ + 0.0, + 1.0 + ], + "8865": [ + 0.0, + 1.0 + ], + "4864": [ + 0.0, + 1.0 + ], + "3554": [ + 0.0, + 1.0 + ], + "8866": [ + 0.0, + 1.0 + ], + "7017": [ + 0.0, + 1.0 + ], + "3563": [ + 0.0, + 1.0 + ], + "4554": [ + 0.0, + 1.0 + ], + "4525436": [ + 0.0, + 1.0 + ], + "6946": [ + 0.0, + 1.0 + ], + "7014": [ + 0.0, + 1.0 + ], + "4867": [ + 0.0, + 1.0 + ], + "8839": [ + 0.0, + 1.0 + ] + }, + "recall": { + "7015": [ + 0.9171264740884995, + 1.0 + ], + "3530": [ + 0.7953296703296703, + 1.0 + ], + "5343": [ + 0.9636075949367089, + 1.0 + ], + "4532185": [ + 0.9340594449183125, + 1.0 + ], + "9717": [ + 0.9214659685863874, + 1.0 + ], + "7016": [ + 0.9214092140921409, + 1.0 + ], + "3556": [ + 0.9285714285714286, + 1.0 + ], + "8874": [ + 0.46153846153846156, + 1.0 + ], + "8860": [ + 0.8571428571428571, + 1.0 + ], + "4527533": [ + 0.5, + 1.0 + ], + "9689": [ + 0.59375, + 1.0 + ], + "4300668": [ + 0.8333333333333334, + 1.0 + ], + "3552": [ + 0.875, + 1.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8868": [ + 0.8896797153024911, + 1.0 + ], + "5336": [ + 0.9205479452054794, + 1.0 + ], + "8841": [ + 0.9070893879348305, + 1.0 + ], + "7294": [ + 0.8603491271820449, + 1.0 + ], + "6950": [ + 0.9653751578387718, + 1.0 + ], + "8863": [ + 0.9113924050632911, + 1.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "5474": [ + 0.7747368421052632, + 1.0 + ], + "5345": [ + 0.9130434782608695, + 1.0 + ] + }, + "f1": { + "4864": [ + 0.0, + 1.0 + ], + "8865": [ + 0.0, + 1.0 + ], + "3552": [ + 0.865979381443299, + 1.0 + ], + "8868": [ + 0.9324009324009326, + 1.0 + ], + "8866": [ + 0.0, + 1.0 + ], + "4705755": [ + 0.0, + 1.0 + ], + "4527533": [ + 0.6666666666666666, + 1.0 + ], + "7294": [ + 0.9145129224652088, + 1.0 + ], + "5345": [ + 0.8842105263157894, + 1.0 + ], + "6954": [ + 0.0, + 1.0 + ], + "5336": [ + 0.7272727272727273, + 1.0 + ], + "8839": [ + 0.0, + 1.0 + ], + "4554": [ + 0.0, + 1.0 + ], + "8860": [ + 0.5333333333333333, + 1.0 + ], + "4300664": [ + 0.0, + 1.0 + ], + "9410": [ + 0.0, + 1.0 + ], + "6946": [ + 0.0, + 1.0 + ], + "6166": [ + 0.0, + 1.0 + ], + "5481": [ + 0.0, + 1.0 + ], + "8840": [ + 0.0, + 1.0 + ], + "4532185": [ + 0.9579758419972411, + 1.0 + ], + "6950": [ + 0.9715738077720553, + 1.0 + ], + "9408": [ + 0.0, + 1.0 + ], + "8864": [ + 0.0, + 1.0 + ], + "4867": [ + 0.0, + 1.0 + ], + "4870": [ + 0.0, + 1.0 + ], + "3563": [ + 0.0, + 1.0 + ], + "8861": [ + 0.0, + 1.0 + ], + "8838": [ + 0.0, + 1.0 + ], + "8855": [ + 0.0, + 1.0 + ], + "9689": [ + 0.4691358024691358, + 1.0 + ], + "4300668": [ + 0.7843137254901962, + 1.0 + ], + "4525465": [ + 0.0, + 1.0 + ], + "5474": [ + 0.8578088578088578, + 1.0 + ], + "3556": [ + 0.4642857142857143, + 1.0 + ], + "3530": [ + 0.8616071428571428, + 1.0 + ], + "3528": [ + 0.0, + 1.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "4528997": [ + 0.0, + 1.0 + ], + "7014": [ + 0.0, + 1.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8841": [ + 0.9306528122882314, + 1.0 + ], + "7017": [ + 0.0, + 1.0 + ], + "5340": [ + 0.0, + 1.0 + ], + "8874": [ + 0.23076923076923078, + 1.0 + ], + "7015": [ + 0.9207125013576627, + 1.0 + ], + "7016": [ + 0.9363525091799266, + 1.0 + ], + "7297": [ + 0.0, + 1.0 + ], + "5343": [ + 0.6278350515463917, + 1.0 + ], + "8863": [ + 0.8944099378881988, + 1.0 + ], + "8871": [ + 0.0, + 1.0 + ], + "4865": [ + 0.0, + 1.0 + ], + "5320": [ + 0.0, + 1.0 + ], + "3554": [ + 0.0, + 1.0 + ], + "4542": [ + 0.5, + 1.0 + ], + "9717": [ + 0.9214659685863874, + 1.0 + ], + "4525436": [ + 0.0, + 1.0 + ], + "9541689": [ + 0.0, + 1.0 + ], + "4538": [ + 0.0, + 1.0 + ], + "5487": [ + 0.0, + 1.0 + ] + } + }, + "predicted_only": { + "8861": 42, + "8840": 28, + "6166": 30, + "4705755": 52, + "9412": 117, + "5340": 5, + "9541689": 1, + "4528997": 7, + "8838": 118, + "4870": 15, + "3528": 6, + "5487": 23, + "4300664": 11, + "4538": 22, + "8871": 53, + "9408": 2, + "5481": 5, + "4525465": 1, + "7297": 23, + "6954": 2, + "9410": 4, + "8855": 3, + "8864": 1, + "4865": 19, + "5320": 1, + "8865": 2, + "4864": 132, + "3554": 6, + "8866": 4, + "7017": 6, + "3563": 1, + "4554": 4, + "4525436": 2, + "6946": 1, + "7014": 4, + "4867": 1, + "8839": 2 + }, + "truth_families_without_accepted_predictions": [], + "false_positive_pairs": [ + { + "truth": "7015", + "prediction": "5343", + "images": 338 + }, + { + "truth": "4532185", + "prediction": "7015", + "images": 211 + }, + { + "truth": "6950", + "prediction": "7015", + "images": 114 + }, + { + "truth": "7015", + "prediction": "4532185", + "images": 105 + }, + { + "truth": "4532185", + "prediction": "4864", + "images": 103 + }, + { + "truth": "6950", + "prediction": "8841", + "images": 94 + }, + { + "truth": "7015", + "prediction": "6950", + "images": 93 + }, + { + "truth": "7016", + "prediction": "7015", + "images": 86 + }, + { + "truth": "4532185", + "prediction": "7016", + "images": 78 + }, + { + "truth": "4532185", + "prediction": "5336", + "images": 75 + }, + { + "truth": "7294", + "prediction": "7015", + "images": 74 + }, + { + "truth": "6950", + "prediction": "5343", + "images": 71 + }, + { + "truth": "3530", + "prediction": "7015", + "images": 68 + }, + { + "truth": "4532185", + "prediction": "5343", + "images": 67 + }, + { + "truth": "8841", + "prediction": "5336", + "images": 66 + }, + { + "truth": "8841", + "prediction": "5343", + "images": 64 + }, + { + "truth": "4532185", + "prediction": "9412", + "images": 59 + }, + { + "truth": "4532185", + "prediction": "6950", + "images": 58 + }, + { + "truth": "4532185", + "prediction": "8838", + "images": 58 + }, + { + "truth": "7294", + "prediction": "6950", + "images": 58 + }, + { + "truth": "8841", + "prediction": "7015", + "images": 56 + }, + { + "truth": "8841", + "prediction": "6950", + "images": 55 + }, + { + "truth": "7016", + "prediction": "5343", + "images": 51 + }, + { + "truth": "4532185", + "prediction": "8841", + "images": 49 + }, + { + "truth": "8868", + "prediction": "7015", + "images": 48 + }, + { + "truth": "7015", + "prediction": "3553", + "images": 43 + }, + { + "truth": "8841", + "prediction": "8838", + "images": 43 + }, + { + "truth": "5474", + "prediction": "5343", + "images": 43 + }, + { + "truth": "6950", + "prediction": "4532185", + "images": 42 + }, + { + "truth": "7294", + "prediction": "5343", + "images": 34 + }, + { + "truth": "3530", + "prediction": "7016", + "images": 32 + }, + { + "truth": "5474", + "prediction": "7015", + "images": 31 + }, + { + "truth": "7015", + "prediction": "5336", + "images": 30 + }, + { + "truth": "4532185", + "prediction": "4705755", + "images": 30 + }, + { + "truth": "7015", + "prediction": "7016", + "images": 29 + }, + { + "truth": "8841", + "prediction": "3553", + "images": 28 + }, + { + "truth": "8841", + "prediction": "4532185", + "images": 27 + }, + { + "truth": "7016", + "prediction": "4532185", + "images": 25 + }, + { + "truth": "8868", + "prediction": "6950", + "images": 25 + }, + { + "truth": "4532185", + "prediction": "8871", + "images": 24 + }, + { + "truth": "6950", + "prediction": "4864", + "images": 24 + }, + { + "truth": "7015", + "prediction": "8841", + "images": 22 + }, + { + "truth": "4532185", + "prediction": "3553", + "images": 22 + }, + { + "truth": "8841", + "prediction": "8871", + "images": 22 + }, + { + "truth": "6950", + "prediction": "5336", + "images": 22 + }, + { + "truth": "4532185", + "prediction": "7294", + "images": 21 + }, + { + "truth": "7016", + "prediction": "5336", + "images": 20 + }, + { + "truth": "6950", + "prediction": "8861", + "images": 20 + }, + { + "truth": "6950", + "prediction": "3553", + "images": 20 + }, + { + "truth": "7015", + "prediction": "9412", + "images": 19 + }, + { + "truth": "4532185", + "prediction": "7297", + "images": 19 + }, + { + "truth": "4532185", + "prediction": "6166", + "images": 19 + }, + { + "truth": "4532185", + "prediction": "8874", + "images": 18 + }, + { + "truth": "6950", + "prediction": "9412", + "images": 18 + }, + { + "truth": "8868", + "prediction": "4532185", + "images": 16 + }, + { + "truth": "7016", + "prediction": "3556", + "images": 14 + }, + { + "truth": "4532185", + "prediction": "3530", + "images": 13 + }, + { + "truth": "7016", + "prediction": "6950", + "images": 13 + }, + { + "truth": "3530", + "prediction": "4532185", + "images": 12 + }, + { + "truth": "7016", + "prediction": "3530", + "images": 11 + }, + { + "truth": "7294", + "prediction": "4532185", + "images": 11 + }, + { + "truth": "4532185", + "prediction": "4538", + "images": 11 + }, + { + "truth": "3530", + "prediction": "3556", + "images": 10 + }, + { + "truth": "6950", + "prediction": "5487", + "images": 10 + }, + { + "truth": "7015", + "prediction": "9689", + "images": 10 + }, + { + "truth": "7015", + "prediction": "3530", + "images": 9 + }, + { + "truth": "9717", + "prediction": "5343", + "images": 9 + }, + { + "truth": "4532185", + "prediction": "8840", + "images": 9 + }, + { + "truth": "7016", + "prediction": "3553", + "images": 9 + }, + { + "truth": "4532185", + "prediction": "4865", + "images": 9 + }, + { + "truth": "7015", + "prediction": "8840", + "images": 8 + }, + { + "truth": "4532185", + "prediction": "9689", + "images": 8 + }, + { + "truth": "7016", + "prediction": "8874", + "images": 8 + }, + { + "truth": "9689", + "prediction": "8841", + "images": 8 + }, + { + "truth": "8841", + "prediction": "8861", + "images": 8 + }, + { + "truth": "6950", + "prediction": "4870", + "images": 8 + }, + { + "truth": "6950", + "prediction": "4705755", + "images": 8 + }, + { + "truth": "3530", + "prediction": "5343", + "images": 7 + }, + { + "truth": "7294", + "prediction": "8838", + "images": 7 + }, + { + "truth": "7294", + "prediction": "7016", + "images": 7 + }, + { + "truth": "7294", + "prediction": "5474", + "images": 7 + }, + { + "truth": "6950", + "prediction": "8868", + "images": 7 + }, + { + "truth": "5474", + "prediction": "6950", + "images": 7 + }, + { + "truth": "3530", + "prediction": "6950", + "images": 6 + }, + { + "truth": "7015", + "prediction": "4705755", + "images": 6 + }, + { + "truth": "8874", + "prediction": "9412", + "images": 6 + }, + { + "truth": "5336", + "prediction": "4865", + "images": 6 + }, + { + "truth": "5336", + "prediction": "6950", + "images": 6 + }, + { + "truth": "8841", + "prediction": "6166", + "images": 6 + }, + { + "truth": "8841", + "prediction": "8860", + "images": 6 + }, + { + "truth": "8841", + "prediction": "9689", + "images": 6 + }, + { + "truth": "6950", + "prediction": "7016", + "images": 6 + }, + { + "truth": "6950", + "prediction": "9717", + "images": 6 + }, + { + "truth": "3530", + "prediction": "8861", + "images": 5 + }, + { + "truth": "7015", + "prediction": "8868", + "images": 5 + }, + { + "truth": "7015", + "prediction": "4300664", + "images": 5 + }, + { + "truth": "8868", + "prediction": "4538", + "images": 5 + }, + { + "truth": "5336", + "prediction": "5343", + "images": 5 + }, + { + "truth": "8841", + "prediction": "4705755", + "images": 5 + }, + { + "truth": "8841", + "prediction": "5487", + "images": 5 + }, + { + "truth": "8863", + "prediction": "6950", + "images": 5 + }, + { + "truth": "8868", + "prediction": "5343", + "images": 5 + }, + { + "truth": "3530", + "prediction": "8840", + "images": 4 + }, + { + "truth": "7015", + "prediction": "8861", + "images": 4 + }, + { + "truth": "7015", + "prediction": "8860", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "8863", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "4528997", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "5487", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "9717", + "images": 4 + }, + { + "truth": "7016", + "prediction": "7294", + "images": 4 + }, + { + "truth": "4300668", + "prediction": "5343", + "images": 4 + }, + { + "truth": "7294", + "prediction": "8841", + "images": 4 + }, + { + "truth": "6950", + "prediction": "8863", + "images": 4 + }, + { + "truth": "6950", + "prediction": "7294", + "images": 4 + }, + { + "truth": "5474", + "prediction": "8838", + "images": 4 + }, + { + "truth": "5474", + "prediction": "5336", + "images": 4 + }, + { + "truth": "7294", + "prediction": "4865", + "images": 4 + }, + { + "truth": "5343", + "prediction": "9412", + "images": 4 + }, + { + "truth": "5343", + "prediction": "6166", + "images": 3 + }, + { + "truth": "7015", + "prediction": "7294", + "images": 3 + }, + { + "truth": "7015", + "prediction": "5474", + "images": 3 + }, + { + "truth": "7015", + "prediction": "4300668", + "images": 3 + }, + { + "truth": "7015", + "prediction": "3528", + "images": 3 + }, + { + "truth": "4532185", + "prediction": "8868", + "images": 3 + }, + { + "truth": "4532185", + "prediction": "5481", + "images": 3 + }, + { + "truth": "8841", + "prediction": "8840", + "images": 3 + }, + { + "truth": "8841", + "prediction": "3554", + "images": 3 + }, + { + "truth": "7294", + "prediction": "4864", + "images": 3 + }, + { + "truth": "6950", + "prediction": "8871", + "images": 3 + }, + { + "truth": "6950", + "prediction": "5474", + "images": 3 + }, + { + "truth": "6950", + "prediction": "7017", + "images": 3 + }, + { + "truth": "5336", + "prediction": "9412", + "images": 3 + }, + { + "truth": "5343", + "prediction": "3553", + "images": 3 + }, + { + "truth": "5343", + "prediction": "6950", + "images": 3 + }, + { + "truth": "5474", + "prediction": "8841", + "images": 3 + }, + { + "truth": "5474", + "prediction": "4532185", + "images": 3 + }, + { + "truth": "4532185", + "prediction": "8860", + "images": 3 + }, + { + "truth": "8868", + "prediction": "3553", + "images": 3 + }, + { + "truth": "8868", + "prediction": "8841", + "images": 3 + }, + { + "truth": "5343", + "prediction": "4705755", + "images": 2 + }, + { + "truth": "7015", + "prediction": "8874", + "images": 2 + }, + { + "truth": "7015", + "prediction": "4528997", + "images": 2 + }, + { + "truth": "7015", + "prediction": "3556", + "images": 2 + }, + { + "truth": "7015", + "prediction": "3552", + "images": 2 + }, + { + "truth": "7015", + "prediction": "4870", + "images": 2 + }, + { + "truth": "7015", + "prediction": "4538", + "images": 2 + }, + { + "truth": "7015", + "prediction": "5345", + "images": 2 + }, + { + "truth": "9717", + "prediction": "7015", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "3528", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "5474", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "8861", + "images": 2 + }, + { + "truth": "7016", + "prediction": "9410", + "images": 2 + }, + { + "truth": "7016", + "prediction": "8868", + "images": 2 + }, + { + "truth": "7016", + "prediction": "9412", + "images": 2 + }, + { + "truth": "7016", + "prediction": "4300664", + "images": 2 + }, + { + "truth": "7016", + "prediction": "9689", + "images": 2 + }, + { + "truth": "9689", + "prediction": "8860", + "images": 2 + }, + { + "truth": "8868", + "prediction": "5345", + "images": 2 + }, + { + "truth": "8868", + "prediction": "5340", + "images": 2 + }, + { + "truth": "8868", + "prediction": "9689", + "images": 2 + }, + { + "truth": "5336", + "prediction": "3553", + "images": 2 + }, + { + "truth": "8841", + "prediction": "8874", + "images": 2 + }, + { + "truth": "8841", + "prediction": "4300668", + "images": 2 + }, + { + "truth": "8841", + "prediction": "4538", + "images": 2 + }, + { + "truth": "8841", + "prediction": "9412", + "images": 2 + }, + { + "truth": "8841", + "prediction": "8866", + "images": 2 + }, + { + "truth": "7294", + "prediction": "9717", + "images": 2 + }, + { + "truth": "7294", + "prediction": "5336", + "images": 2 + }, + { + "truth": "7294", + "prediction": "8868", + "images": 2 + }, + { + "truth": "7294", + "prediction": "8861", + "images": 2 + }, + { + "truth": "6950", + "prediction": "4554", + "images": 2 + }, + { + "truth": "6950", + "prediction": "4538", + "images": 2 + }, + { + "truth": "6950", + "prediction": "5340", + "images": 2 + }, + { + "truth": "6950", + "prediction": "8838", + "images": 2 + }, + { + "truth": "6950", + "prediction": "3554", + "images": 2 + }, + { + "truth": "6950", + "prediction": "9689", + "images": 2 + }, + { + "truth": "6950", + "prediction": "5345", + "images": 2 + }, + { + "truth": "6950", + "prediction": "4300664", + "images": 2 + }, + { + "truth": "6950", + "prediction": "4542", + "images": 2 + }, + { + "truth": "6950", + "prediction": "8860", + "images": 2 + }, + { + "truth": "5336", + "prediction": "7015", + "images": 2 + }, + { + "truth": "3530", + "prediction": "8841", + "images": 2 + }, + { + "truth": "5343", + "prediction": "7297", + "images": 2 + }, + { + "truth": "5474", + "prediction": "7294", + "images": 2 + }, + { + "truth": "5474", + "prediction": "8871", + "images": 2 + }, + { + "truth": "5474", + "prediction": "8868", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "4554", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "3552", + "images": 2 + }, + { + "truth": "7016", + "prediction": "8841", + "images": 2 + }, + { + "truth": "7016", + "prediction": "4870", + "images": 2 + }, + { + "truth": "8868", + "prediction": "3530", + "images": 2 + }, + { + "truth": "8868", + "prediction": "7014", + "images": 2 + }, + { + "truth": "8868", + "prediction": "4870", + "images": 2 + }, + { + "truth": "5336", + "prediction": "5487", + "images": 2 + }, + { + "truth": "3530", + "prediction": "9717", + "images": 1 + }, + { + "truth": "3530", + "prediction": "5336", + "images": 1 + }, + { + "truth": "3530", + "prediction": "3553", + "images": 1 + }, + { + "truth": "5343", + "prediction": "5336", + "images": 1 + }, + { + "truth": "5343", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "7015", + "prediction": "5340", + "images": 1 + }, + { + "truth": "7015", + "prediction": "9717", + "images": 1 + }, + { + "truth": "7015", + "prediction": "9541689", + "images": 1 + }, + { + "truth": "7015", + "prediction": "5487", + "images": 1 + }, + { + "truth": "7015", + "prediction": "8871", + "images": 1 + }, + { + "truth": "7015", + "prediction": "8863", + "images": 1 + }, + { + "truth": "7015", + "prediction": "9408", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "4300664", + "images": 1 + }, + { + "truth": "9717", + "prediction": "5481", + "images": 1 + }, + { + "truth": "9717", + "prediction": "8863", + "images": 1 + }, + { + "truth": "9717", + "prediction": "5336", + "images": 1 + }, + { + "truth": "9717", + "prediction": "8841", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "4525465", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "6954", + "images": 1 + }, + { + "truth": "7016", + "prediction": "8838", + "images": 1 + }, + { + "truth": "7016", + "prediction": "6166", + "images": 1 + }, + { + "truth": "7016", + "prediction": "8855", + "images": 1 + }, + { + "truth": "8874", + "prediction": "7297", + "images": 1 + }, + { + "truth": "8860", + "prediction": "7015", + "images": 1 + }, + { + "truth": "8860", + "prediction": "5345", + "images": 1 + }, + { + "truth": "4527533", + "prediction": "8838", + "images": 1 + }, + { + "truth": "9689", + "prediction": "9412", + "images": 1 + }, + { + "truth": "9689", + "prediction": "8838", + "images": 1 + }, + { + "truth": "9689", + "prediction": "3553", + "images": 1 + }, + { + "truth": "3553", + "prediction": "8871", + "images": 1 + }, + { + "truth": "3553", + "prediction": "8841", + "images": 1 + }, + { + "truth": "8868", + "prediction": "9412", + "images": 1 + }, + { + "truth": "8868", + "prediction": "8840", + "images": 1 + }, + { + "truth": "8868", + "prediction": "8864", + "images": 1 + }, + { + "truth": "5336", + "prediction": "8874", + "images": 1 + }, + { + "truth": "5336", + "prediction": "3552", + "images": 1 + }, + { + "truth": "8841", + "prediction": "3552", + "images": 1 + }, + { + "truth": "8841", + "prediction": "5320", + "images": 1 + }, + { + "truth": "8841", + "prediction": "4528997", + "images": 1 + }, + { + "truth": "8841", + "prediction": "4300664", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8865", + "images": 1 + }, + { + "truth": "8841", + "prediction": "4864", + "images": 1 + }, + { + "truth": "8841", + "prediction": "7016", + "images": 1 + }, + { + "truth": "8841", + "prediction": "7297", + "images": 1 + }, + { + "truth": "8841", + "prediction": "9717", + "images": 1 + }, + { + "truth": "7294", + "prediction": "6166", + "images": 1 + }, + { + "truth": "7294", + "prediction": "3556", + "images": 1 + }, + { + "truth": "7294", + "prediction": "4870", + "images": 1 + }, + { + "truth": "7294", + "prediction": "9412", + "images": 1 + }, + { + "truth": "7294", + "prediction": "3553", + "images": 1 + }, + { + "truth": "7294", + "prediction": "7017", + "images": 1 + }, + { + "truth": "6950", + "prediction": "3530", + "images": 1 + }, + { + "truth": "6950", + "prediction": "3563", + "images": 1 + }, + { + "truth": "6950", + "prediction": "4300668", + "images": 1 + }, + { + "truth": "6950", + "prediction": "8865", + "images": 1 + }, + { + "truth": "6950", + "prediction": "4525436", + "images": 1 + }, + { + "truth": "6950", + "prediction": "8874", + "images": 1 + }, + { + "truth": "8863", + "prediction": "8841", + "images": 1 + }, + { + "truth": "8863", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "6950", + "prediction": "8840", + "images": 1 + }, + { + "truth": "6950", + "prediction": "9410", + "images": 1 + }, + { + "truth": "6950", + "prediction": "6946", + "images": 1 + }, + { + "truth": "6950", + "prediction": "7014", + "images": 1 + }, + { + "truth": "5474", + "prediction": "7016", + "images": 1 + }, + { + "truth": "6950", + "prediction": "8866", + "images": 1 + }, + { + "truth": "6950", + "prediction": "8855", + "images": 1 + }, + { + "truth": "5345", + "prediction": "8874", + "images": 1 + }, + { + "truth": "5345", + "prediction": "8860", + "images": 1 + }, + { + "truth": "5345", + "prediction": "8866", + "images": 1 + }, + { + "truth": "5345", + "prediction": "3553", + "images": 1 + }, + { + "truth": "3552", + "prediction": "7015", + "images": 1 + }, + { + "truth": "3552", + "prediction": "9412", + "images": 1 + }, + { + "truth": "3552", + "prediction": "8838", + "images": 1 + }, + { + "truth": "3552", + "prediction": "3553", + "images": 1 + }, + { + "truth": "3552", + "prediction": "5343", + "images": 1 + }, + { + "truth": "3552", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "4300668", + "images": 1 + }, + { + "truth": "7015", + "prediction": "8855", + "images": 1 + }, + { + "truth": "7015", + "prediction": "7017", + "images": 1 + }, + { + "truth": "5343", + "prediction": "8841", + "images": 1 + }, + { + "truth": "5343", + "prediction": "4867", + "images": 1 + }, + { + "truth": "5474", + "prediction": "3556", + "images": 1 + }, + { + "truth": "5474", + "prediction": "3528", + "images": 1 + }, + { + "truth": "5474", + "prediction": "4864", + "images": 1 + }, + { + "truth": "5474", + "prediction": "3530", + "images": 1 + }, + { + "truth": "5474", + "prediction": "8840", + "images": 1 + }, + { + "truth": "7015", + "prediction": "7014", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "7017", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "3554", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "9408", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "8839", + "images": 1 + }, + { + "truth": "7016", + "prediction": "8861", + "images": 1 + }, + { + "truth": "7016", + "prediction": "6954", + "images": 1 + }, + { + "truth": "7016", + "prediction": "4705755", + "images": 1 + }, + { + "truth": "8868", + "prediction": "7016", + "images": 1 + }, + { + "truth": "8868", + "prediction": "8860", + "images": 1 + }, + { + "truth": "8868", + "prediction": "5336", + "images": 1 + }, + { + "truth": "8868", + "prediction": "5487", + "images": 1 + }, + { + "truth": "5336", + "prediction": "8841", + "images": 1 + }, + { + "truth": "7294", + "prediction": "9410", + "images": 1 + }, + { + "truth": "6950", + "prediction": "8839", + "images": 1 + }, + { + "truth": "6950", + "prediction": "5481", + "images": 1 + }, + { + "truth": "3556", + "prediction": "8840", + "images": 1 + }, + { + "truth": "5343", + "prediction": "3552", + "images": 1 + }, + { + "truth": "5343", + "prediction": "4525436", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "3556", + "images": 1 + } + ] + }, + "optimized": { + "threshold": 0.9698503911495209, + "images": 52788, + "accepted": 38672, + "truth_counts": { + "7015": 9243, + "3530": 728, + "5343": 632, + "4532185": 15241, + "9717": 191, + "7016": 3321, + "3556": 14, + "8874": 13, + "8860": 14, + "4527533": 2, + "9689": 32, + "4300668": 24, + "3552": 48, + "3553": 2, + "8868": 1124, + "5336": 365, + "8841": 4542, + "7294": 1604, + "6950": 15047, + "8863": 79, + "4542": 1, + "5474": 475, + "5345": 46 + }, + "predicted_counts": { + "3530": 376, + "5343": 458, + "7015": 6347, + "4532185": 11389, + "6950": 12205, + "8863": 71, + "9717": 145, + "7016": 2626, + "7294": 1121, + "6166": 2, + "5336": 262, + "3556": 12, + "8874": 3, + "8860": 12, + "4527533": 1, + "9689": 18, + "9412": 2, + "8841": 2444, + "4300668": 18, + "3552": 41, + "8868": 855, + "8861": 1, + "8838": 2, + "4864": 21, + "5474": 209, + "4542": 1, + "5345": 27, + "4870": 2, + "8840": 1 + }, + "official": { + "precision": { + "2": 0.7406007419898425 + }, + "recall": { + "2": 0.6548532928566179 + }, + "f1": { + "2": 0.5815679236552637 + }, + "micro_accuracy": { + "2": 0.9979571783202317 + }, + "coverage": { + "2": 0.7325907403197697 + } + }, + "truth_group_diagnostic": { + "precision": 0.9762464326229743, + "recall": 0.6548532928566179, + "f1": 0.7585668569416483 + }, + "groups": { + "precision": { + "7015": [ + 0.9987395619977942, + 1.0 + ], + "3530": [ + 1.0, + 1.0 + ], + "5343": [ + 0.9868995633187773, + 1.0 + ], + "4532185": [ + 0.9992975678286066, + 1.0 + ], + "9717": [ + 1.0, + 1.0 + ], + "7016": [ + 0.9988575780654989, + 1.0 + ], + "3556": [ + 1.0, + 1.0 + ], + "8874": [ + 0.6666666666666666, + 1.0 + ], + "8860": [ + 0.9166666666666666, + 1.0 + ], + "4527533": [ + 1.0, + 1.0 + ], + "9689": [ + 1.0, + 1.0 + ], + "4300668": [ + 0.9444444444444444, + 1.0 + ], + "3552": [ + 1.0, + 1.0 + ], + "3553": [ + 1.0, + 0.0 + ], + "8868": [ + 1.0, + 1.0 + ], + "5336": [ + 0.9885496183206107, + 1.0 + ], + "8841": [ + 0.9987725040916531, + 1.0 + ], + "7294": [ + 0.9982158786797503, + 1.0 + ], + "6950": [ + 0.9991806636624334, + 1.0 + ], + "8863": [ + 0.9859154929577465, + 1.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "5474": [ + 0.9952153110047847, + 1.0 + ], + "5345": [ + 1.0, + 1.0 + ], + "8861": [ + 0.0, + 1.0 + ], + "8840": [ + 0.0, + 1.0 + ], + "6166": [ + 0.0, + 1.0 + ], + "4705755": [ + 1.0, + 0.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "5340": [ + 1.0, + 0.0 + ], + "9541689": [ + 1.0, + 0.0 + ], + "4528997": [ + 1.0, + 0.0 + ], + "8838": [ + 0.0, + 1.0 + ], + "4870": [ + 0.0, + 1.0 + ], + "3528": [ + 1.0, + 0.0 + ], + "5487": [ + 1.0, + 0.0 + ], + "4300664": [ + 1.0, + 0.0 + ], + "4538": [ + 1.0, + 0.0 + ], + "8871": [ + 1.0, + 0.0 + ], + "9408": [ + 1.0, + 0.0 + ], + "5481": [ + 1.0, + 0.0 + ], + "4525465": [ + 1.0, + 0.0 + ], + "7297": [ + 1.0, + 0.0 + ], + "6954": [ + 1.0, + 0.0 + ], + "9410": [ + 1.0, + 0.0 + ], + "8855": [ + 1.0, + 0.0 + ], + "8864": [ + 1.0, + 0.0 + ], + "4865": [ + 1.0, + 0.0 + ], + "5320": [ + 1.0, + 0.0 + ], + "8865": [ + 1.0, + 0.0 + ], + "4864": [ + 0.0, + 1.0 + ], + "3554": [ + 1.0, + 0.0 + ], + "8866": [ + 1.0, + 0.0 + ], + "7017": [ + 1.0, + 0.0 + ], + "3563": [ + 1.0, + 0.0 + ], + "4554": [ + 1.0, + 0.0 + ], + "4525436": [ + 1.0, + 0.0 + ], + "6946": [ + 1.0, + 0.0 + ], + "7014": [ + 1.0, + 0.0 + ], + "4867": [ + 1.0, + 0.0 + ], + "8839": [ + 1.0, + 0.0 + ] + }, + "recall": { + "7015": [ + 0.6858162934112301, + 1.0 + ], + "3530": [ + 0.5164835164835165, + 1.0 + ], + "5343": [ + 0.7151898734177216, + 1.0 + ], + "4532185": [ + 0.7467357784922249, + 1.0 + ], + "9717": [ + 0.7591623036649214, + 1.0 + ], + "7016": [ + 0.7898223426678711, + 1.0 + ], + "3556": [ + 0.8571428571428571, + 1.0 + ], + "8874": [ + 0.15384615384615385, + 1.0 + ], + "8860": [ + 0.7857142857142857, + 1.0 + ], + "4527533": [ + 0.5, + 1.0 + ], + "9689": [ + 0.5625, + 1.0 + ], + "4300668": [ + 0.7083333333333334, + 1.0 + ], + "3552": [ + 0.8541666666666666, + 1.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8868": [ + 0.7606761565836299, + 1.0 + ], + "5336": [ + 0.7095890410958904, + 1.0 + ], + "8841": [ + 0.5374284456186702, + 1.0 + ], + "7294": [ + 0.6976309226932669, + 1.0 + ], + "6950": [ + 0.8104605569216455, + 1.0 + ], + "8863": [ + 0.8860759493670886, + 1.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "5474": [ + 0.4378947368421053, + 1.0 + ], + "5345": [ + 0.5869565217391305, + 1.0 + ] + }, + "f1": { + "4864": [ + 0.0, + 1.0 + ], + "8865": [ + 1.0, + 0.0 + ], + "3552": [ + 0.9213483146067415, + 1.0 + ], + "8868": [ + 0.8640727640222333, + 1.0 + ], + "8866": [ + 1.0, + 0.0 + ], + "4705755": [ + 1.0, + 0.0 + ], + "4527533": [ + 0.6666666666666666, + 1.0 + ], + "7294": [ + 0.8212844036697247, + 1.0 + ], + "5345": [ + 0.7397260273972603, + 1.0 + ], + "6954": [ + 1.0, + 0.0 + ], + "5336": [ + 0.8261562998405104, + 1.0 + ], + "8839": [ + 1.0, + 0.0 + ], + "4554": [ + 1.0, + 0.0 + ], + "8860": [ + 0.8461538461538461, + 1.0 + ], + "4300664": [ + 1.0, + 0.0 + ], + "9410": [ + 1.0, + 0.0 + ], + "6946": [ + 1.0, + 0.0 + ], + "6166": [ + 0.0, + 1.0 + ], + "5481": [ + 1.0, + 0.0 + ], + "8840": [ + 0.0, + 1.0 + ], + "4532185": [ + 0.8547502816372513, + 1.0 + ], + "6950": [ + 0.8949801849405549, + 1.0 + ], + "9408": [ + 1.0, + 0.0 + ], + "8864": [ + 1.0, + 0.0 + ], + "4867": [ + 1.0, + 0.0 + ], + "4870": [ + 0.0, + 1.0 + ], + "3563": [ + 1.0, + 0.0 + ], + "8861": [ + 0.0, + 1.0 + ], + "8838": [ + 0.0, + 1.0 + ], + "8855": [ + 1.0, + 0.0 + ], + "9689": [ + 0.72, + 1.0 + ], + "4300668": [ + 0.8095238095238095, + 1.0 + ], + "4525465": [ + 1.0, + 0.0 + ], + "5474": [ + 0.608187134502924, + 1.0 + ], + "3556": [ + 0.9230769230769229, + 1.0 + ], + "3530": [ + 0.6811594202898551, + 1.0 + ], + "3528": [ + 1.0, + 0.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "4528997": [ + 1.0, + 0.0 + ], + "7014": [ + 1.0, + 0.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8841": [ + 0.6988262238763241, + 1.0 + ], + "7017": [ + 1.0, + 0.0 + ], + "5340": [ + 1.0, + 0.0 + ], + "8874": [ + 0.25, + 1.0 + ], + "7015": [ + 0.8132135984605516, + 1.0 + ], + "7016": [ + 0.8821254413990248, + 1.0 + ], + "7297": [ + 1.0, + 0.0 + ], + "5343": [ + 0.8293577981651375, + 1.0 + ], + "8863": [ + 0.9333333333333333, + 1.0 + ], + "8871": [ + 1.0, + 0.0 + ], + "4865": [ + 1.0, + 0.0 + ], + "5320": [ + 1.0, + 0.0 + ], + "3554": [ + 1.0, + 0.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "9717": [ + 0.863095238095238, + 1.0 + ], + "4525436": [ + 1.0, + 0.0 + ], + "9541689": [ + 1.0, + 0.0 + ], + "4538": [ + 1.0, + 0.0 + ], + "5487": [ + 1.0, + 0.0 + ] + } + }, + "predicted_only": { + "6166": 2, + "9412": 2, + "8861": 1, + "8838": 2, + "4864": 21, + "4870": 2, + "8840": 1 + }, + "truth_families_without_accepted_predictions": [ + "3553" + ], + "false_positive_pairs": [ + { + "truth": "4532185", + "prediction": "4864", + "images": 15 + }, + { + "truth": "6950", + "prediction": "4864", + "images": 6 + }, + { + "truth": "7015", + "prediction": "5343", + "images": 5 + }, + { + "truth": "7015", + "prediction": "4532185", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "6950", + "images": 3 + }, + { + "truth": "4532185", + "prediction": "7015", + "images": 3 + }, + { + "truth": "7015", + "prediction": "6950", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "6166", + "images": 2 + }, + { + "truth": "8841", + "prediction": "5336", + "images": 2 + }, + { + "truth": "8841", + "prediction": "8838", + "images": 2 + }, + { + "truth": "7294", + "prediction": "7016", + "images": 2 + }, + { + "truth": "7294", + "prediction": "6950", + "images": 2 + }, + { + "truth": "8868", + "prediction": "7015", + "images": 2 + }, + { + "truth": "8868", + "prediction": "4532185", + "images": 2 + }, + { + "truth": "7294", + "prediction": "7015", + "images": 2 + }, + { + "truth": "6950", + "prediction": "4870", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "8863", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "7016", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "7294", + "images": 1 + }, + { + "truth": "7016", + "prediction": "5336", + "images": 1 + }, + { + "truth": "9689", + "prediction": "9412", + "images": 1 + }, + { + "truth": "9689", + "prediction": "8841", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8874", + "images": 1 + }, + { + "truth": "8841", + "prediction": "5343", + "images": 1 + }, + { + "truth": "8841", + "prediction": "4300668", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8861", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8860", + "images": 1 + }, + { + "truth": "8863", + "prediction": "6950", + "images": 1 + }, + { + "truth": "6950", + "prediction": "7294", + "images": 1 + }, + { + "truth": "6950", + "prediction": "5474", + "images": 1 + }, + { + "truth": "6950", + "prediction": "7015", + "images": 1 + }, + { + "truth": "3530", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "3530", + "prediction": "6950", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "9412", + "images": 1 + }, + { + "truth": "8868", + "prediction": "8841", + "images": 1 + }, + { + "truth": "5336", + "prediction": "8841", + "images": 1 + }, + { + "truth": "5336", + "prediction": "6950", + "images": 1 + }, + { + "truth": "7294", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "7015", + "prediction": "8840", + "images": 1 + } + ] + }, + "common_0.96": { + "threshold": 0.96, + "images": 52788, + "accepted": 39579, + "truth_counts": { + "7015": 9243, + "3530": 728, + "5343": 632, + "4532185": 15241, + "9717": 191, + "7016": 3321, + "3556": 14, + "8874": 13, + "8860": 14, + "4527533": 2, + "9689": 32, + "4300668": 24, + "3552": 48, + "3553": 2, + "8868": 1124, + "5336": 365, + "8841": 4542, + "7294": 1604, + "6950": 15047, + "8863": 79, + "4542": 1, + "5474": 475, + "5345": 46 + }, + "predicted_counts": { + "3530": 387, + "5343": 468, + "7015": 6523, + "9412": 4, + "4532185": 11640, + "3553": 1, + "6950": 12468, + "8863": 71, + "9717": 146, + "7016": 2660, + "7294": 1140, + "6166": 2, + "5336": 269, + "3556": 12, + "8874": 3, + "8860": 12, + "4527533": 1, + "9689": 18, + "8841": 2553, + "4300668": 19, + "3552": 41, + "8868": 862, + "8861": 1, + "8838": 2, + "4864": 25, + "5474": 218, + "4542": 1, + "5345": 27, + "4705755": 1, + "4870": 3, + "8840": 1 + }, + "official": { + "precision": { + "2": 0.6927585802170017 + }, + "recall": { + "2": 0.6642854244462157 + }, + "f1": { + "2": 0.5677697524702323 + }, + "micro_accuracy": { + "2": 0.9974228757674525 + }, + "coverage": { + "2": 0.7497726756080928 + } + }, + "truth_group_diagnostic": { + "precision": 0.933718086379437, + "recall": 0.6642854244462157, + "f1": 0.7652548837642261 + }, + "groups": { + "precision": { + "7015": [ + 0.9983136593591906, + 1.0 + ], + "3530": [ + 1.0, + 1.0 + ], + "5343": [ + 0.9829059829059829, + 1.0 + ], + "4532185": [ + 0.9990549828178694, + 1.0 + ], + "9717": [ + 1.0, + 1.0 + ], + "7016": [ + 0.9984962406015038, + 1.0 + ], + "3556": [ + 1.0, + 1.0 + ], + "8874": [ + 0.6666666666666666, + 1.0 + ], + "8860": [ + 0.9166666666666666, + 1.0 + ], + "4527533": [ + 1.0, + 1.0 + ], + "9689": [ + 1.0, + 1.0 + ], + "4300668": [ + 0.9473684210526315, + 1.0 + ], + "3552": [ + 1.0, + 1.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8868": [ + 1.0, + 1.0 + ], + "5336": [ + 0.9888475836431226, + 1.0 + ], + "8841": [ + 0.9988249118683902, + 1.0 + ], + "7294": [ + 0.9982456140350877, + 1.0 + ], + "6950": [ + 0.9987969201154957, + 1.0 + ], + "8863": [ + 0.9859154929577465, + 1.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "5474": [ + 0.9954128440366973, + 1.0 + ], + "5345": [ + 1.0, + 1.0 + ], + "8861": [ + 0.0, + 1.0 + ], + "8840": [ + 0.0, + 1.0 + ], + "6166": [ + 0.0, + 1.0 + ], + "4705755": [ + 0.0, + 1.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "5340": [ + 1.0, + 0.0 + ], + "9541689": [ + 1.0, + 0.0 + ], + "4528997": [ + 1.0, + 0.0 + ], + "8838": [ + 0.0, + 1.0 + ], + "4870": [ + 0.0, + 1.0 + ], + "3528": [ + 1.0, + 0.0 + ], + "5487": [ + 1.0, + 0.0 + ], + "4300664": [ + 1.0, + 0.0 + ], + "4538": [ + 1.0, + 0.0 + ], + "8871": [ + 1.0, + 0.0 + ], + "9408": [ + 1.0, + 0.0 + ], + "5481": [ + 1.0, + 0.0 + ], + "4525465": [ + 1.0, + 0.0 + ], + "7297": [ + 1.0, + 0.0 + ], + "6954": [ + 1.0, + 0.0 + ], + "9410": [ + 1.0, + 0.0 + ], + "8855": [ + 1.0, + 0.0 + ], + "8864": [ + 1.0, + 0.0 + ], + "4865": [ + 1.0, + 0.0 + ], + "5320": [ + 1.0, + 0.0 + ], + "8865": [ + 1.0, + 0.0 + ], + "4864": [ + 0.0, + 1.0 + ], + "3554": [ + 1.0, + 0.0 + ], + "8866": [ + 1.0, + 0.0 + ], + "7017": [ + 1.0, + 0.0 + ], + "3563": [ + 1.0, + 0.0 + ], + "4554": [ + 1.0, + 0.0 + ], + "4525436": [ + 1.0, + 0.0 + ], + "6946": [ + 1.0, + 0.0 + ], + "7014": [ + 1.0, + 0.0 + ], + "4867": [ + 1.0, + 0.0 + ], + "8839": [ + 1.0, + 0.0 + ] + }, + "recall": { + "7015": [ + 0.7045331602293627, + 1.0 + ], + "3530": [ + 0.5315934065934066, + 1.0 + ], + "5343": [ + 0.7278481012658228, + 1.0 + ], + "4532185": [ + 0.7630076766616364, + 1.0 + ], + "9717": [ + 0.7643979057591623, + 1.0 + ], + "7016": [ + 0.7997591087021981, + 1.0 + ], + "3556": [ + 0.8571428571428571, + 1.0 + ], + "8874": [ + 0.15384615384615385, + 1.0 + ], + "8860": [ + 0.7857142857142857, + 1.0 + ], + "4527533": [ + 0.5, + 1.0 + ], + "9689": [ + 0.5625, + 1.0 + ], + "4300668": [ + 0.75, + 1.0 + ], + "3552": [ + 0.8541666666666666, + 1.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8868": [ + 0.7669039145907474, + 1.0 + ], + "5336": [ + 0.7287671232876712, + 1.0 + ], + "8841": [ + 0.5614266842800528, + 1.0 + ], + "7294": [ + 0.7094763092269327, + 1.0 + ], + "6950": [ + 0.8276068319266299, + 1.0 + ], + "8863": [ + 0.8860759493670886, + 1.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "5474": [ + 0.4568421052631579, + 1.0 + ], + "5345": [ + 0.5869565217391305, + 1.0 + ] + }, + "f1": { + "4864": [ + 0.0, + 1.0 + ], + "8865": [ + 1.0, + 0.0 + ], + "3552": [ + 0.9213483146067415, + 1.0 + ], + "8868": [ + 0.8680765357502517, + 1.0 + ], + "8866": [ + 1.0, + 0.0 + ], + "4705755": [ + 0.0, + 1.0 + ], + "4527533": [ + 0.6666666666666666, + 1.0 + ], + "7294": [ + 0.8294460641399417, + 1.0 + ], + "5345": [ + 0.7397260273972603, + 1.0 + ], + "6954": [ + 1.0, + 0.0 + ], + "5336": [ + 0.8391167192429022, + 1.0 + ], + "8839": [ + 1.0, + 0.0 + ], + "4554": [ + 1.0, + 0.0 + ], + "8860": [ + 0.8461538461538461, + 1.0 + ], + "4300664": [ + 1.0, + 0.0 + ], + "9410": [ + 1.0, + 0.0 + ], + "6946": [ + 1.0, + 0.0 + ], + "6166": [ + 0.0, + 1.0 + ], + "5481": [ + 1.0, + 0.0 + ], + "8840": [ + 0.0, + 1.0 + ], + "4532185": [ + 0.8652207879171162, + 1.0 + ], + "6950": [ + 0.9051789932763946, + 1.0 + ], + "9408": [ + 1.0, + 0.0 + ], + "8864": [ + 1.0, + 0.0 + ], + "4867": [ + 1.0, + 0.0 + ], + "4870": [ + 0.0, + 1.0 + ], + "3563": [ + 1.0, + 0.0 + ], + "8861": [ + 0.0, + 1.0 + ], + "8838": [ + 0.0, + 1.0 + ], + "8855": [ + 1.0, + 0.0 + ], + "9689": [ + 0.72, + 1.0 + ], + "4300668": [ + 0.8372093023255814, + 1.0 + ], + "4525465": [ + 1.0, + 0.0 + ], + "5474": [ + 0.6262626262626263, + 1.0 + ], + "3556": [ + 0.9230769230769229, + 1.0 + ], + "3530": [ + 0.694170403587444, + 1.0 + ], + "3528": [ + 1.0, + 0.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "4528997": [ + 1.0, + 0.0 + ], + "7014": [ + 1.0, + 0.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8841": [ + 0.718816067653277, + 1.0 + ], + "7017": [ + 1.0, + 0.0 + ], + "5340": [ + 1.0, + 0.0 + ], + "8874": [ + 0.25, + 1.0 + ], + "7015": [ + 0.8260814410757326, + 1.0 + ], + "7016": [ + 0.8881457950175556, + 1.0 + ], + "7297": [ + 1.0, + 0.0 + ], + "5343": [ + 0.8363636363636364, + 1.0 + ], + "8863": [ + 0.9333333333333333, + 1.0 + ], + "8871": [ + 1.0, + 0.0 + ], + "4865": [ + 1.0, + 0.0 + ], + "5320": [ + 1.0, + 0.0 + ], + "3554": [ + 1.0, + 0.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "9717": [ + 0.8664688427299703, + 1.0 + ], + "4525436": [ + 1.0, + 0.0 + ], + "9541689": [ + 1.0, + 0.0 + ], + "4538": [ + 1.0, + 0.0 + ], + "5487": [ + 1.0, + 0.0 + ] + } + }, + "predicted_only": { + "9412": 4, + "6166": 2, + "8861": 1, + "8838": 2, + "4864": 25, + "4705755": 1, + "4870": 3, + "8840": 1 + }, + "truth_families_without_accepted_predictions": [], + "false_positive_pairs": [ + { + "truth": "4532185", + "prediction": "4864", + "images": 18 + }, + { + "truth": "6950", + "prediction": "4864", + "images": 7 + }, + { + "truth": "7015", + "prediction": "4532185", + "images": 6 + }, + { + "truth": "7015", + "prediction": "5343", + "images": 6 + }, + { + "truth": "4532185", + "prediction": "7015", + "images": 5 + }, + { + "truth": "7294", + "prediction": "6950", + "images": 5 + }, + { + "truth": "4532185", + "prediction": "6950", + "images": 4 + }, + { + "truth": "6950", + "prediction": "4870", + "images": 3 + }, + { + "truth": "7015", + "prediction": "9412", + "images": 2 + }, + { + "truth": "7015", + "prediction": "6950", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "7016", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "6166", + "images": 2 + }, + { + "truth": "8841", + "prediction": "5336", + "images": 2 + }, + { + "truth": "8841", + "prediction": "8838", + "images": 2 + }, + { + "truth": "7294", + "prediction": "7016", + "images": 2 + }, + { + "truth": "6950", + "prediction": "7015", + "images": 2 + }, + { + "truth": "8868", + "prediction": "7015", + "images": 2 + }, + { + "truth": "8868", + "prediction": "4532185", + "images": 2 + }, + { + "truth": "7294", + "prediction": "7015", + "images": 2 + }, + { + "truth": "7015", + "prediction": "3553", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "8863", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "7294", + "images": 1 + }, + { + "truth": "7016", + "prediction": "5336", + "images": 1 + }, + { + "truth": "9689", + "prediction": "9412", + "images": 1 + }, + { + "truth": "9689", + "prediction": "8841", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8874", + "images": 1 + }, + { + "truth": "8841", + "prediction": "5343", + "images": 1 + }, + { + "truth": "8841", + "prediction": "4300668", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8861", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8860", + "images": 1 + }, + { + "truth": "8841", + "prediction": "6950", + "images": 1 + }, + { + "truth": "7294", + "prediction": "5343", + "images": 1 + }, + { + "truth": "8863", + "prediction": "6950", + "images": 1 + }, + { + "truth": "6950", + "prediction": "7294", + "images": 1 + }, + { + "truth": "6950", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "6950", + "prediction": "5474", + "images": 1 + }, + { + "truth": "3530", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "3530", + "prediction": "6950", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "9412", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "4705755", + "images": 1 + }, + { + "truth": "8868", + "prediction": "8841", + "images": 1 + }, + { + "truth": "5336", + "prediction": "8841", + "images": 1 + }, + { + "truth": "5336", + "prediction": "6950", + "images": 1 + }, + { + "truth": "7294", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "7015", + "prediction": "8840", + "images": 1 + } + ] + } + }, + "torch-tta": { + "zero": { + "threshold": 0, + "images": 52788, + "accepted": 52788, + "truth_counts": { + "7015": 9243, + "3530": 728, + "5343": 632, + "4532185": 15241, + "9717": 191, + "7016": 3321, + "3556": 14, + "8874": 13, + "8860": 14, + "4527533": 2, + "9689": 32, + "4300668": 24, + "3552": 48, + "3553": 2, + "8868": 1124, + "5336": 365, + "8841": 4542, + "7294": 1604, + "6950": 15047, + "8863": 79, + "4542": 1, + "5474": 475, + "5345": 46 + }, + "predicted_counts": { + "7015": 9196, + "7016": 3266, + "3530": 634, + "5336": 517, + "5340": 5, + "8861": 22, + "4532185": 14747, + "6950": 14889, + "5343": 1091, + "3556": 35, + "8840": 19, + "8841": 4373, + "6166": 14, + "4705755": 31, + "7294": 1472, + "9412": 84, + "9717": 188, + "5345": 46, + "3553": 87, + "8860": 27, + "4528997": 3, + "8868": 1024, + "3552": 49, + "4300668": 26, + "3528": 5, + "4300664": 6, + "4538": 23, + "8838": 90, + "8871": 35, + "9689": 48, + "8863": 83, + "8874": 38, + "5481": 4, + "7297": 15, + "7014": 4, + "5474": 411, + "5487": 19, + "4527533": 2, + "8864": 1, + "4865": 11, + "5320": 1, + "9410": 2, + "4867": 2, + "8865": 2, + "4554": 4, + "3554": 3, + "8866": 6, + "7017": 10, + "4525465": 1, + "4870": 8, + "4864": 95, + "6946": 1, + "4542": 4, + "6953": 1, + "8855": 1, + "4525436": 3, + "6954": 1, + "5338": 1, + "9408": 1, + "8839": 1 + }, + "official": { + "precision": { + "2": 0.2856847483669441 + }, + "recall": { + "2": 0.8579010503993526 + }, + "f1": { + "2": 0.29704414021357817 + }, + "micro_accuracy": { + "2": 0.9478669394559369 + }, + "coverage": { + "2": 1.0 + } + }, + "truth_group_diagnostic": { + "precision": 0.7452645609572454, + "recall": 0.8579010503993526, + "f1": 0.7748977570788995 + }, + "groups": { + "precision": { + "7015": [ + 0.9413875598086124, + 1.0 + ], + "3530": [ + 0.9589905362776026, + 1.0 + ], + "5343": [ + 0.5637030247479377, + 1.0 + ], + "4532185": [ + 0.9858954363599376, + 1.0 + ], + "9717": [ + 0.9521276595744681, + 1.0 + ], + "7016": [ + 0.9611145131659522, + 1.0 + ], + "3556": [ + 0.4, + 1.0 + ], + "8874": [ + 0.15789473684210525, + 1.0 + ], + "8860": [ + 0.48148148148148145, + 1.0 + ], + "4527533": [ + 1.0, + 1.0 + ], + "9689": [ + 0.4166666666666667, + 1.0 + ], + "4300668": [ + 0.8461538461538461, + 1.0 + ], + "3552": [ + 0.8571428571428571, + 1.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8868": [ + 0.9912109375, + 1.0 + ], + "5336": [ + 0.6653771760154739, + 1.0 + ], + "8841": [ + 0.9634118454150469, + 1.0 + ], + "7294": [ + 0.9823369565217391, + 1.0 + ], + "6950": [ + 0.9834777352407817, + 1.0 + ], + "8863": [ + 0.891566265060241, + 1.0 + ], + "4542": [ + 0.25, + 1.0 + ], + "5474": [ + 0.9781021897810219, + 1.0 + ], + "5345": [ + 0.9130434782608695, + 1.0 + ], + "5340": [ + 0.0, + 1.0 + ], + "8861": [ + 0.0, + 1.0 + ], + "8840": [ + 0.0, + 1.0 + ], + "6166": [ + 0.0, + 1.0 + ], + "4705755": [ + 0.0, + 1.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "4528997": [ + 0.0, + 1.0 + ], + "3528": [ + 0.0, + 1.0 + ], + "4300664": [ + 0.0, + 1.0 + ], + "4538": [ + 0.0, + 1.0 + ], + "8838": [ + 0.0, + 1.0 + ], + "8871": [ + 0.0, + 1.0 + ], + "5481": [ + 0.0, + 1.0 + ], + "7297": [ + 0.0, + 1.0 + ], + "7014": [ + 0.0, + 1.0 + ], + "5487": [ + 0.0, + 1.0 + ], + "8864": [ + 0.0, + 1.0 + ], + "4865": [ + 0.0, + 1.0 + ], + "5320": [ + 0.0, + 1.0 + ], + "9410": [ + 0.0, + 1.0 + ], + "4867": [ + 0.0, + 1.0 + ], + "8865": [ + 0.0, + 1.0 + ], + "4554": [ + 0.0, + 1.0 + ], + "3554": [ + 0.0, + 1.0 + ], + "8866": [ + 0.0, + 1.0 + ], + "7017": [ + 0.0, + 1.0 + ], + "4525465": [ + 0.0, + 1.0 + ], + "4870": [ + 0.0, + 1.0 + ], + "4864": [ + 0.0, + 1.0 + ], + "6946": [ + 0.0, + 1.0 + ], + "6953": [ + 0.0, + 1.0 + ], + "8855": [ + 0.0, + 1.0 + ], + "4525436": [ + 0.0, + 1.0 + ], + "6954": [ + 0.0, + 1.0 + ], + "5338": [ + 0.0, + 1.0 + ], + "9408": [ + 0.0, + 1.0 + ], + "8839": [ + 0.0, + 1.0 + ] + }, + "recall": { + "7015": [ + 0.936600670777886, + 1.0 + ], + "3530": [ + 0.8351648351648352, + 1.0 + ], + "5343": [ + 0.9731012658227848, + 1.0 + ], + "4532185": [ + 0.9539400301817466, + 1.0 + ], + "9717": [ + 0.93717277486911, + 1.0 + ], + "7016": [ + 0.9451972297500753, + 1.0 + ], + "3556": [ + 1.0, + 1.0 + ], + "8874": [ + 0.46153846153846156, + 1.0 + ], + "8860": [ + 0.9285714285714286, + 1.0 + ], + "4527533": [ + 1.0, + 1.0 + ], + "9689": [ + 0.625, + 1.0 + ], + "4300668": [ + 0.9166666666666666, + 1.0 + ], + "3552": [ + 0.875, + 1.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8868": [ + 0.9030249110320284, + 1.0 + ], + "5336": [ + 0.9424657534246575, + 1.0 + ], + "8841": [ + 0.9275649493615148, + 1.0 + ], + "7294": [ + 0.9014962593516209, + 1.0 + ], + "6950": [ + 0.9731507941782415, + 1.0 + ], + "8863": [ + 0.9367088607594937, + 1.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "5474": [ + 0.8463157894736842, + 1.0 + ], + "5345": [ + 0.9130434782608695, + 1.0 + ] + }, + "f1": { + "4864": [ + 0.0, + 1.0 + ], + "8865": [ + 0.0, + 1.0 + ], + "3552": [ + 0.865979381443299, + 1.0 + ], + "8868": [ + 0.9450651769087522, + 1.0 + ], + "8866": [ + 0.0, + 1.0 + ], + "4705755": [ + 0.0, + 1.0 + ], + "4527533": [ + 1.0, + 1.0 + ], + "7294": [ + 0.9401820546163849, + 1.0 + ], + "5345": [ + 0.9130434782608695, + 1.0 + ], + "6954": [ + 0.0, + 1.0 + ], + "5336": [ + 0.780045351473923, + 1.0 + ], + "8839": [ + 0.0, + 1.0 + ], + "4554": [ + 0.0, + 1.0 + ], + "8860": [ + 0.6341463414634145, + 1.0 + ], + "4300664": [ + 0.0, + 1.0 + ], + "9410": [ + 0.0, + 1.0 + ], + "6946": [ + 0.0, + 1.0 + ], + "6166": [ + 0.0, + 1.0 + ], + "5481": [ + 0.0, + 1.0 + ], + "8840": [ + 0.0, + 1.0 + ], + "4532185": [ + 0.9696545284780579, + 1.0 + ], + "6950": [ + 0.9782870122928914, + 1.0 + ], + "8864": [ + 0.0, + 1.0 + ], + "4867": [ + 0.0, + 1.0 + ], + "9408": [ + 0.0, + 1.0 + ], + "4870": [ + 0.0, + 1.0 + ], + "8861": [ + 0.0, + 1.0 + ], + "8838": [ + 0.0, + 1.0 + ], + "8855": [ + 0.0, + 1.0 + ], + "9689": [ + 0.5, + 1.0 + ], + "4300668": [ + 0.8799999999999999, + 1.0 + ], + "4525465": [ + 0.0, + 1.0 + ], + "5474": [ + 0.9074492099322798, + 1.0 + ], + "3556": [ + 0.5714285714285714, + 1.0 + ], + "3530": [ + 0.8928046989721, + 1.0 + ], + "3528": [ + 0.0, + 1.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "4528997": [ + 0.0, + 1.0 + ], + "7014": [ + 0.0, + 1.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8841": [ + 0.9451486259113854, + 1.0 + ], + "7017": [ + 0.0, + 1.0 + ], + "5340": [ + 0.0, + 1.0 + ], + "8874": [ + 0.23529411764705882, + 1.0 + ], + "7015": [ + 0.9389880145344109, + 1.0 + ], + "7016": [ + 0.9530894185516927, + 1.0 + ], + "5338": [ + 0.0, + 1.0 + ], + "7297": [ + 0.0, + 1.0 + ], + "5343": [ + 0.713871154962275, + 1.0 + ], + "8863": [ + 0.9135802469135801, + 1.0 + ], + "8871": [ + 0.0, + 1.0 + ], + "6953": [ + 0.0, + 1.0 + ], + "4865": [ + 0.0, + 1.0 + ], + "5320": [ + 0.0, + 1.0 + ], + "3554": [ + 0.0, + 1.0 + ], + "4542": [ + 0.4, + 1.0 + ], + "9717": [ + 0.9445910290237466, + 1.0 + ], + "4525436": [ + 0.0, + 1.0 + ], + "4538": [ + 0.0, + 1.0 + ], + "5487": [ + 0.0, + 1.0 + ] + } + }, + "predicted_only": { + "5340": 5, + "8861": 22, + "8840": 19, + "6166": 14, + "4705755": 31, + "9412": 84, + "4528997": 3, + "3528": 5, + "4300664": 6, + "4538": 23, + "8838": 90, + "8871": 35, + "5481": 4, + "7297": 15, + "7014": 4, + "5487": 19, + "8864": 1, + "4865": 11, + "5320": 1, + "9410": 2, + "4867": 2, + "8865": 2, + "4554": 4, + "3554": 3, + "8866": 6, + "7017": 10, + "4525465": 1, + "4870": 8, + "4864": 95, + "6946": 1, + "6953": 1, + "8855": 1, + "4525436": 3, + "6954": 1, + "5338": 1, + "9408": 1, + "8839": 1 + }, + "truth_families_without_accepted_predictions": [], + "false_positive_pairs": [ + { + "truth": "7015", + "prediction": "5343", + "images": 247 + }, + { + "truth": "4532185", + "prediction": "7015", + "images": 142 + }, + { + "truth": "7015", + "prediction": "4532185", + "images": 95 + }, + { + "truth": "6950", + "prediction": "7015", + "images": 95 + }, + { + "truth": "6950", + "prediction": "8841", + "images": 80 + }, + { + "truth": "4532185", + "prediction": "4864", + "images": 74 + }, + { + "truth": "7016", + "prediction": "7015", + "images": 68 + }, + { + "truth": "7015", + "prediction": "6950", + "images": 64 + }, + { + "truth": "4532185", + "prediction": "7016", + "images": 63 + }, + { + "truth": "4532185", + "prediction": "5336", + "images": 61 + }, + { + "truth": "7294", + "prediction": "7015", + "images": 57 + }, + { + "truth": "6950", + "prediction": "5343", + "images": 57 + }, + { + "truth": "3530", + "prediction": "7015", + "images": 52 + }, + { + "truth": "8841", + "prediction": "5336", + "images": 52 + }, + { + "truth": "4532185", + "prediction": "6950", + "images": 50 + }, + { + "truth": "8868", + "prediction": "7015", + "images": 49 + }, + { + "truth": "8841", + "prediction": "6950", + "images": 47 + }, + { + "truth": "8841", + "prediction": "5343", + "images": 46 + }, + { + "truth": "8841", + "prediction": "7015", + "images": 46 + }, + { + "truth": "4532185", + "prediction": "8838", + "images": 45 + }, + { + "truth": "4532185", + "prediction": "9412", + "images": 42 + }, + { + "truth": "4532185", + "prediction": "8841", + "images": 38 + }, + { + "truth": "7015", + "prediction": "3553", + "images": 36 + }, + { + "truth": "7294", + "prediction": "6950", + "images": 36 + }, + { + "truth": "8841", + "prediction": "8838", + "images": 34 + }, + { + "truth": "4532185", + "prediction": "5343", + "images": 31 + }, + { + "truth": "3530", + "prediction": "7016", + "images": 30 + }, + { + "truth": "6950", + "prediction": "4532185", + "images": 30 + }, + { + "truth": "7016", + "prediction": "5343", + "images": 30 + }, + { + "truth": "5474", + "prediction": "7015", + "images": 27 + }, + { + "truth": "8841", + "prediction": "4532185", + "images": 25 + }, + { + "truth": "7294", + "prediction": "5343", + "images": 24 + }, + { + "truth": "7015", + "prediction": "5336", + "images": 22 + }, + { + "truth": "8868", + "prediction": "6950", + "images": 22 + }, + { + "truth": "5474", + "prediction": "5343", + "images": 22 + }, + { + "truth": "7015", + "prediction": "7016", + "images": 21 + }, + { + "truth": "7016", + "prediction": "4532185", + "images": 20 + }, + { + "truth": "6950", + "prediction": "4864", + "images": 20 + }, + { + "truth": "7015", + "prediction": "8841", + "images": 18 + }, + { + "truth": "4532185", + "prediction": "4705755", + "images": 18 + }, + { + "truth": "8841", + "prediction": "8871", + "images": 18 + }, + { + "truth": "7016", + "prediction": "5336", + "images": 15 + }, + { + "truth": "4532185", + "prediction": "7294", + "images": 14 + }, + { + "truth": "7015", + "prediction": "9689", + "images": 13 + }, + { + "truth": "4532185", + "prediction": "8874", + "images": 13 + }, + { + "truth": "4532185", + "prediction": "8871", + "images": 13 + }, + { + "truth": "6950", + "prediction": "5336", + "images": 13 + }, + { + "truth": "6950", + "prediction": "9412", + "images": 13 + }, + { + "truth": "7015", + "prediction": "9412", + "images": 12 + }, + { + "truth": "7294", + "prediction": "4532185", + "images": 12 + }, + { + "truth": "6950", + "prediction": "3553", + "images": 12 + }, + { + "truth": "3530", + "prediction": "4532185", + "images": 11 + }, + { + "truth": "4532185", + "prediction": "3530", + "images": 11 + }, + { + "truth": "8841", + "prediction": "3553", + "images": 11 + }, + { + "truth": "3530", + "prediction": "3556", + "images": 10 + }, + { + "truth": "4532185", + "prediction": "7297", + "images": 10 + }, + { + "truth": "7016", + "prediction": "6950", + "images": 10 + }, + { + "truth": "4532185", + "prediction": "3553", + "images": 10 + }, + { + "truth": "4532185", + "prediction": "6166", + "images": 9 + }, + { + "truth": "9689", + "prediction": "8841", + "images": 9 + }, + { + "truth": "6950", + "prediction": "8861", + "images": 9 + }, + { + "truth": "7016", + "prediction": "3553", + "images": 8 + }, + { + "truth": "4532185", + "prediction": "8863", + "images": 7 + }, + { + "truth": "7016", + "prediction": "3556", + "images": 7 + }, + { + "truth": "8868", + "prediction": "4532185", + "images": 7 + }, + { + "truth": "8841", + "prediction": "9689", + "images": 7 + }, + { + "truth": "6950", + "prediction": "4538", + "images": 7 + }, + { + "truth": "7015", + "prediction": "8861", + "images": 6 + }, + { + "truth": "4532185", + "prediction": "8868", + "images": 6 + }, + { + "truth": "4532185", + "prediction": "8840", + "images": 6 + }, + { + "truth": "7016", + "prediction": "8874", + "images": 6 + }, + { + "truth": "8874", + "prediction": "9412", + "images": 6 + }, + { + "truth": "8868", + "prediction": "4538", + "images": 6 + }, + { + "truth": "8841", + "prediction": "8860", + "images": 6 + }, + { + "truth": "7294", + "prediction": "7016", + "images": 6 + }, + { + "truth": "6950", + "prediction": "5487", + "images": 6 + }, + { + "truth": "7015", + "prediction": "3530", + "images": 6 + }, + { + "truth": "3530", + "prediction": "5343", + "images": 5 + }, + { + "truth": "7016", + "prediction": "3530", + "images": 5 + }, + { + "truth": "8841", + "prediction": "4538", + "images": 5 + }, + { + "truth": "7294", + "prediction": "8838", + "images": 5 + }, + { + "truth": "7294", + "prediction": "5474", + "images": 5 + }, + { + "truth": "6950", + "prediction": "4870", + "images": 5 + }, + { + "truth": "6950", + "prediction": "4705755", + "images": 5 + }, + { + "truth": "5474", + "prediction": "6950", + "images": 5 + }, + { + "truth": "8868", + "prediction": "5343", + "images": 5 + }, + { + "truth": "7015", + "prediction": "9717", + "images": 4 + }, + { + "truth": "7015", + "prediction": "3528", + "images": 4 + }, + { + "truth": "7015", + "prediction": "8840", + "images": 4 + }, + { + "truth": "9717", + "prediction": "5343", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "5487", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "3552", + "images": 4 + }, + { + "truth": "7016", + "prediction": "7294", + "images": 4 + }, + { + "truth": "7016", + "prediction": "9412", + "images": 4 + }, + { + "truth": "8868", + "prediction": "7016", + "images": 4 + }, + { + "truth": "5336", + "prediction": "4865", + "images": 4 + }, + { + "truth": "8841", + "prediction": "8874", + "images": 4 + }, + { + "truth": "8841", + "prediction": "5487", + "images": 4 + }, + { + "truth": "8841", + "prediction": "4705755", + "images": 4 + }, + { + "truth": "6950", + "prediction": "8874", + "images": 4 + }, + { + "truth": "6950", + "prediction": "9689", + "images": 4 + }, + { + "truth": "8863", + "prediction": "6950", + "images": 4 + }, + { + "truth": "6950", + "prediction": "7294", + "images": 4 + }, + { + "truth": "5474", + "prediction": "4532185", + "images": 4 + }, + { + "truth": "6950", + "prediction": "7017", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "4538", + "images": 4 + }, + { + "truth": "7015", + "prediction": "7017", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "4865", + "images": 4 + }, + { + "truth": "5336", + "prediction": "6950", + "images": 4 + }, + { + "truth": "3530", + "prediction": "8861", + "images": 3 + }, + { + "truth": "3530", + "prediction": "8840", + "images": 3 + }, + { + "truth": "5343", + "prediction": "4705755", + "images": 3 + }, + { + "truth": "7015", + "prediction": "3556", + "images": 3 + }, + { + "truth": "7015", + "prediction": "8868", + "images": 3 + }, + { + "truth": "7015", + "prediction": "4300668", + "images": 3 + }, + { + "truth": "8868", + "prediction": "8841", + "images": 3 + }, + { + "truth": "8841", + "prediction": "6166", + "images": 3 + }, + { + "truth": "7294", + "prediction": "8841", + "images": 3 + }, + { + "truth": "7294", + "prediction": "5336", + "images": 3 + }, + { + "truth": "6950", + "prediction": "7016", + "images": 3 + }, + { + "truth": "6950", + "prediction": "9717", + "images": 3 + }, + { + "truth": "6950", + "prediction": "8860", + "images": 3 + }, + { + "truth": "6950", + "prediction": "4542", + "images": 3 + }, + { + "truth": "5474", + "prediction": "5336", + "images": 3 + }, + { + "truth": "4532185", + "prediction": "9689", + "images": 3 + }, + { + "truth": "8868", + "prediction": "3530", + "images": 3 + }, + { + "truth": "8868", + "prediction": "3553", + "images": 3 + }, + { + "truth": "5336", + "prediction": "3553", + "images": 3 + }, + { + "truth": "7294", + "prediction": "4865", + "images": 3 + }, + { + "truth": "3530", + "prediction": "5336", + "images": 2 + }, + { + "truth": "3530", + "prediction": "6950", + "images": 2 + }, + { + "truth": "5343", + "prediction": "8841", + "images": 2 + }, + { + "truth": "5343", + "prediction": "6166", + "images": 2 + }, + { + "truth": "7015", + "prediction": "7294", + "images": 2 + }, + { + "truth": "7015", + "prediction": "5345", + "images": 2 + }, + { + "truth": "7015", + "prediction": "8860", + "images": 2 + }, + { + "truth": "7015", + "prediction": "3552", + "images": 2 + }, + { + "truth": "7015", + "prediction": "4300664", + "images": 2 + }, + { + "truth": "9717", + "prediction": "8874", + "images": 2 + }, + { + "truth": "9717", + "prediction": "8841", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "7014", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "5474", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "4528997", + "images": 2 + }, + { + "truth": "7016", + "prediction": "4300664", + "images": 2 + }, + { + "truth": "4300668", + "prediction": "5343", + "images": 2 + }, + { + "truth": "8868", + "prediction": "8840", + "images": 2 + }, + { + "truth": "5336", + "prediction": "5343", + "images": 2 + }, + { + "truth": "8841", + "prediction": "8861", + "images": 2 + }, + { + "truth": "8841", + "prediction": "8840", + "images": 2 + }, + { + "truth": "8841", + "prediction": "8866", + "images": 2 + }, + { + "truth": "6950", + "prediction": "4554", + "images": 2 + }, + { + "truth": "6950", + "prediction": "8863", + "images": 2 + }, + { + "truth": "6950", + "prediction": "5340", + "images": 2 + }, + { + "truth": "6950", + "prediction": "8838", + "images": 2 + }, + { + "truth": "5474", + "prediction": "8838", + "images": 2 + }, + { + "truth": "6950", + "prediction": "8866", + "images": 2 + }, + { + "truth": "5336", + "prediction": "7015", + "images": 2 + }, + { + "truth": "7015", + "prediction": "4870", + "images": 2 + }, + { + "truth": "5343", + "prediction": "6950", + "images": 2 + }, + { + "truth": "5474", + "prediction": "7294", + "images": 2 + }, + { + "truth": "5474", + "prediction": "8840", + "images": 2 + }, + { + "truth": "5474", + "prediction": "8841", + "images": 2 + }, + { + "truth": "5336", + "prediction": "5487", + "images": 2 + }, + { + "truth": "6950", + "prediction": "5481", + "images": 2 + }, + { + "truth": "5343", + "prediction": "7014", + "images": 2 + }, + { + "truth": "3530", + "prediction": "5340", + "images": 1 + }, + { + "truth": "5343", + "prediction": "5336", + "images": 1 + }, + { + "truth": "5343", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "7015", + "prediction": "5340", + "images": 1 + }, + { + "truth": "7015", + "prediction": "4528997", + "images": 1 + }, + { + "truth": "7015", + "prediction": "4538", + "images": 1 + }, + { + "truth": "7015", + "prediction": "8838", + "images": 1 + }, + { + "truth": "7015", + "prediction": "8871", + "images": 1 + }, + { + "truth": "9717", + "prediction": "5481", + "images": 1 + }, + { + "truth": "9717", + "prediction": "7015", + "images": 1 + }, + { + "truth": "9717", + "prediction": "5336", + "images": 1 + }, + { + "truth": "9717", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "3528", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "5481", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "9717", + "images": 1 + }, + { + "truth": "7016", + "prediction": "7297", + "images": 1 + }, + { + "truth": "7016", + "prediction": "9689", + "images": 1 + }, + { + "truth": "8874", + "prediction": "7297", + "images": 1 + }, + { + "truth": "8860", + "prediction": "3553", + "images": 1 + }, + { + "truth": "9689", + "prediction": "9412", + "images": 1 + }, + { + "truth": "9689", + "prediction": "8860", + "images": 1 + }, + { + "truth": "9689", + "prediction": "3553", + "images": 1 + }, + { + "truth": "3553", + "prediction": "8871", + "images": 1 + }, + { + "truth": "3553", + "prediction": "8841", + "images": 1 + }, + { + "truth": "8868", + "prediction": "9412", + "images": 1 + }, + { + "truth": "8868", + "prediction": "8864", + "images": 1 + }, + { + "truth": "8868", + "prediction": "5340", + "images": 1 + }, + { + "truth": "5336", + "prediction": "8874", + "images": 1 + }, + { + "truth": "5336", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "8841", + "prediction": "3552", + "images": 1 + }, + { + "truth": "8841", + "prediction": "4300664", + "images": 1 + }, + { + "truth": "8841", + "prediction": "5320", + "images": 1 + }, + { + "truth": "8841", + "prediction": "9410", + "images": 1 + }, + { + "truth": "8841", + "prediction": "4867", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8865", + "images": 1 + }, + { + "truth": "8841", + "prediction": "4300668", + "images": 1 + }, + { + "truth": "8841", + "prediction": "4554", + "images": 1 + }, + { + "truth": "8841", + "prediction": "7297", + "images": 1 + }, + { + "truth": "8841", + "prediction": "3554", + "images": 1 + }, + { + "truth": "8841", + "prediction": "9412", + "images": 1 + }, + { + "truth": "7294", + "prediction": "9717", + "images": 1 + }, + { + "truth": "7294", + "prediction": "9412", + "images": 1 + }, + { + "truth": "7294", + "prediction": "5487", + "images": 1 + }, + { + "truth": "7294", + "prediction": "7017", + "images": 1 + }, + { + "truth": "6950", + "prediction": "8865", + "images": 1 + }, + { + "truth": "6950", + "prediction": "4525465", + "images": 1 + }, + { + "truth": "6950", + "prediction": "7297", + "images": 1 + }, + { + "truth": "8863", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "6950", + "prediction": "3554", + "images": 1 + }, + { + "truth": "6950", + "prediction": "9410", + "images": 1 + }, + { + "truth": "6950", + "prediction": "5345", + "images": 1 + }, + { + "truth": "6950", + "prediction": "8871", + "images": 1 + }, + { + "truth": "6950", + "prediction": "5474", + "images": 1 + }, + { + "truth": "6950", + "prediction": "6946", + "images": 1 + }, + { + "truth": "6950", + "prediction": "4300664", + "images": 1 + }, + { + "truth": "6950", + "prediction": "6953", + "images": 1 + }, + { + "truth": "6950", + "prediction": "8855", + "images": 1 + }, + { + "truth": "5345", + "prediction": "8874", + "images": 1 + }, + { + "truth": "5345", + "prediction": "8860", + "images": 1 + }, + { + "truth": "5345", + "prediction": "8866", + "images": 1 + }, + { + "truth": "5345", + "prediction": "5487", + "images": 1 + }, + { + "truth": "3552", + "prediction": "4705755", + "images": 1 + }, + { + "truth": "3552", + "prediction": "9412", + "images": 1 + }, + { + "truth": "3552", + "prediction": "8838", + "images": 1 + }, + { + "truth": "3552", + "prediction": "3553", + "images": 1 + }, + { + "truth": "3552", + "prediction": "5343", + "images": 1 + }, + { + "truth": "3552", + "prediction": "4525436", + "images": 1 + }, + { + "truth": "5336", + "prediction": "9412", + "images": 1 + }, + { + "truth": "7015", + "prediction": "8874", + "images": 1 + }, + { + "truth": "7015", + "prediction": "6954", + "images": 1 + }, + { + "truth": "7015", + "prediction": "7297", + "images": 1 + }, + { + "truth": "7015", + "prediction": "5474", + "images": 1 + }, + { + "truth": "3530", + "prediction": "8841", + "images": 1 + }, + { + "truth": "5343", + "prediction": "3553", + "images": 1 + }, + { + "truth": "5343", + "prediction": "4867", + "images": 1 + }, + { + "truth": "5474", + "prediction": "4864", + "images": 1 + }, + { + "truth": "5474", + "prediction": "8861", + "images": 1 + }, + { + "truth": "5474", + "prediction": "3530", + "images": 1 + }, + { + "truth": "5474", + "prediction": "8871", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "7017", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "8860", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "4525436", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "8866", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "4554", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "5338", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "9408", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "5345", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "8839", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "3554", + "images": 1 + }, + { + "truth": "7016", + "prediction": "8861", + "images": 1 + }, + { + "truth": "8868", + "prediction": "4870", + "images": 1 + }, + { + "truth": "8868", + "prediction": "5487", + "images": 1 + }, + { + "truth": "5336", + "prediction": "8841", + "images": 1 + }, + { + "truth": "5343", + "prediction": "4525436", + "images": 1 + }, + { + "truth": "5343", + "prediction": "9412", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "3556", + "images": 1 + } + ] + }, + "optimized": { + "threshold": 0.964760661125183, + "images": 52788, + "accepted": 41567, + "truth_counts": { + "7015": 9243, + "3530": 728, + "5343": 632, + "4532185": 15241, + "9717": 191, + "7016": 3321, + "3556": 14, + "8874": 13, + "8860": 14, + "4527533": 2, + "9689": 32, + "4300668": 24, + "3552": 48, + "3553": 2, + "8868": 1124, + "5336": 365, + "8841": 4542, + "7294": 1604, + "6950": 15047, + "8863": 79, + "4542": 1, + "5474": 475, + "5345": 46 + }, + "predicted_counts": { + "3530": 433, + "8840": 1, + "5343": 501, + "7015": 6860, + "4532185": 12406, + "6950": 12791, + "9717": 155, + "8841": 2776, + "6166": 1, + "7016": 2778, + "5336": 295, + "3556": 12, + "8874": 5, + "8860": 13, + "4527533": 1, + "9689": 18, + "4300668": 20, + "3552": 41, + "8868": 864, + "8861": 1, + "8838": 1, + "7294": 1211, + "8863": 70, + "4864": 17, + "4542": 1, + "5474": 262, + "5345": 30, + "9412": 1, + "4870": 2 + }, + "official": { + "precision": { + "2": 0.7393905133847496 + }, + "recall": { + "2": 0.700159197162577 + }, + "f1": { + "2": 0.6072565582310141 + }, + "micro_accuracy": { + "2": 0.998243799167609 + }, + "coverage": { + "2": 0.7874327498673941 + } + }, + "truth_group_diagnostic": { + "precision": 0.9746511312798972, + "recall": 0.700159197162577, + "f1": 0.7920737716056705 + }, + "groups": { + "precision": { + "7015": [ + 0.9988338192419826, + 1.0 + ], + "3530": [ + 1.0, + 1.0 + ], + "5343": [ + 0.9920159680638723, + 1.0 + ], + "4532185": [ + 0.9991939384168951, + 1.0 + ], + "9717": [ + 1.0, + 1.0 + ], + "7016": [ + 0.9992800575953924, + 1.0 + ], + "3556": [ + 1.0, + 1.0 + ], + "8874": [ + 0.6, + 1.0 + ], + "8860": [ + 0.9230769230769231, + 1.0 + ], + "4527533": [ + 1.0, + 1.0 + ], + "9689": [ + 1.0, + 1.0 + ], + "4300668": [ + 0.95, + 1.0 + ], + "3552": [ + 1.0, + 1.0 + ], + "3553": [ + 1.0, + 0.0 + ], + "8868": [ + 1.0, + 1.0 + ], + "5336": [ + 0.9830508474576272, + 1.0 + ], + "8841": [ + 0.9985590778097982, + 1.0 + ], + "7294": [ + 0.9991742361684558, + 1.0 + ], + "6950": [ + 0.9991400203267923, + 1.0 + ], + "8863": [ + 1.0, + 1.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "5474": [ + 1.0, + 1.0 + ], + "5345": [ + 1.0, + 1.0 + ], + "5340": [ + 1.0, + 0.0 + ], + "8861": [ + 0.0, + 1.0 + ], + "8840": [ + 0.0, + 1.0 + ], + "6166": [ + 0.0, + 1.0 + ], + "4705755": [ + 1.0, + 0.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "4528997": [ + 1.0, + 0.0 + ], + "3528": [ + 1.0, + 0.0 + ], + "4300664": [ + 1.0, + 0.0 + ], + "4538": [ + 1.0, + 0.0 + ], + "8838": [ + 0.0, + 1.0 + ], + "8871": [ + 1.0, + 0.0 + ], + "5481": [ + 1.0, + 0.0 + ], + "7297": [ + 1.0, + 0.0 + ], + "7014": [ + 1.0, + 0.0 + ], + "5487": [ + 1.0, + 0.0 + ], + "8864": [ + 1.0, + 0.0 + ], + "4865": [ + 1.0, + 0.0 + ], + "5320": [ + 1.0, + 0.0 + ], + "9410": [ + 1.0, + 0.0 + ], + "4867": [ + 1.0, + 0.0 + ], + "8865": [ + 1.0, + 0.0 + ], + "4554": [ + 1.0, + 0.0 + ], + "3554": [ + 1.0, + 0.0 + ], + "8866": [ + 1.0, + 0.0 + ], + "7017": [ + 1.0, + 0.0 + ], + "4525465": [ + 1.0, + 0.0 + ], + "4870": [ + 0.0, + 1.0 + ], + "4864": [ + 0.0, + 1.0 + ], + "6946": [ + 1.0, + 0.0 + ], + "6953": [ + 1.0, + 0.0 + ], + "8855": [ + 1.0, + 0.0 + ], + "4525436": [ + 1.0, + 0.0 + ], + "6954": [ + 1.0, + 0.0 + ], + "5338": [ + 1.0, + 0.0 + ], + "9408": [ + 1.0, + 0.0 + ], + "8839": [ + 1.0, + 0.0 + ] + }, + "recall": { + "7015": [ + 0.7413177539759819, + 1.0 + ], + "3530": [ + 0.5947802197802198, + 1.0 + ], + "5343": [ + 0.7863924050632911, + 1.0 + ], + "4532185": [ + 0.8133324585000984, + 1.0 + ], + "9717": [ + 0.8115183246073299, + 1.0 + ], + "7016": [ + 0.8358928033724782, + 1.0 + ], + "3556": [ + 0.8571428571428571, + 1.0 + ], + "8874": [ + 0.23076923076923078, + 1.0 + ], + "8860": [ + 0.8571428571428571, + 1.0 + ], + "4527533": [ + 0.5, + 1.0 + ], + "9689": [ + 0.5625, + 1.0 + ], + "4300668": [ + 0.7916666666666666, + 1.0 + ], + "3552": [ + 0.8541666666666666, + 1.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8868": [ + 0.7686832740213523, + 1.0 + ], + "5336": [ + 0.7945205479452054, + 1.0 + ], + "8841": [ + 0.6103038309114928, + 1.0 + ], + "7294": [ + 0.7543640897755611, + 1.0 + ], + "6950": [ + 0.8493387386189938, + 1.0 + ], + "8863": [ + 0.8860759493670886, + 1.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "5474": [ + 0.5515789473684211, + 1.0 + ], + "5345": [ + 0.6521739130434783, + 1.0 + ] + }, + "f1": { + "4864": [ + 0.0, + 1.0 + ], + "8865": [ + 1.0, + 0.0 + ], + "3552": [ + 0.9213483146067415, + 1.0 + ], + "8868": [ + 0.8692152917505029, + 1.0 + ], + "8866": [ + 1.0, + 0.0 + ], + "4705755": [ + 1.0, + 0.0 + ], + "4527533": [ + 0.6666666666666666, + 1.0 + ], + "7294": [ + 0.8596802841918295, + 1.0 + ], + "5345": [ + 0.7894736842105263, + 1.0 + ], + "6954": [ + 1.0, + 0.0 + ], + "5336": [ + 0.8787878787878789, + 1.0 + ], + "8839": [ + 1.0, + 0.0 + ], + "4554": [ + 1.0, + 0.0 + ], + "8860": [ + 0.8888888888888888, + 1.0 + ], + "4300664": [ + 1.0, + 0.0 + ], + "9410": [ + 1.0, + 0.0 + ], + "6946": [ + 1.0, + 0.0 + ], + "6166": [ + 0.0, + 1.0 + ], + "5481": [ + 1.0, + 0.0 + ], + "8840": [ + 0.0, + 1.0 + ], + "4532185": [ + 0.8967338228379209, + 1.0 + ], + "6950": [ + 0.918169408721891, + 1.0 + ], + "8864": [ + 1.0, + 0.0 + ], + "4867": [ + 1.0, + 0.0 + ], + "9408": [ + 1.0, + 0.0 + ], + "4870": [ + 0.0, + 1.0 + ], + "8861": [ + 0.0, + 1.0 + ], + "8838": [ + 0.0, + 1.0 + ], + "8855": [ + 1.0, + 0.0 + ], + "9689": [ + 0.72, + 1.0 + ], + "4300668": [ + 0.8636363636363636, + 1.0 + ], + "4525465": [ + 1.0, + 0.0 + ], + "5474": [ + 0.7109905020352781, + 1.0 + ], + "3556": [ + 0.9230769230769229, + 1.0 + ], + "3530": [ + 0.7459086993970714, + 1.0 + ], + "3528": [ + 1.0, + 0.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "4528997": [ + 1.0, + 0.0 + ], + "7014": [ + 1.0, + 0.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8841": [ + 0.757584039355015, + 1.0 + ], + "7017": [ + 1.0, + 0.0 + ], + "5340": [ + 1.0, + 0.0 + ], + "8874": [ + 0.3333333333333333, + 1.0 + ], + "7015": [ + 0.8510215487797305, + 1.0 + ], + "7016": [ + 0.910313166092802, + 1.0 + ], + "5338": [ + 1.0, + 0.0 + ], + "7297": [ + 1.0, + 0.0 + ], + "5343": [ + 0.8773168578993822, + 1.0 + ], + "8863": [ + 0.9395973154362416, + 1.0 + ], + "8871": [ + 1.0, + 0.0 + ], + "6953": [ + 1.0, + 0.0 + ], + "4865": [ + 1.0, + 0.0 + ], + "5320": [ + 1.0, + 0.0 + ], + "3554": [ + 1.0, + 0.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "9717": [ + 0.8959537572254335, + 1.0 + ], + "4525436": [ + 1.0, + 0.0 + ], + "4538": [ + 1.0, + 0.0 + ], + "5487": [ + 1.0, + 0.0 + ] + } + }, + "predicted_only": { + "8840": 1, + "6166": 1, + "8861": 1, + "8838": 1, + "4864": 17, + "9412": 1, + "4870": 2 + }, + "truth_families_without_accepted_predictions": [ + "3553" + ], + "false_positive_pairs": [ + { + "truth": "4532185", + "prediction": "4864", + "images": 13 + }, + { + "truth": "7015", + "prediction": "4532185", + "images": 5 + }, + { + "truth": "6950", + "prediction": "4864", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "6950", + "images": 3 + }, + { + "truth": "7294", + "prediction": "6950", + "images": 3 + }, + { + "truth": "7015", + "prediction": "5343", + "images": 3 + }, + { + "truth": "7015", + "prediction": "6950", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "7015", + "images": 2 + }, + { + "truth": "8841", + "prediction": "5336", + "images": 2 + }, + { + "truth": "7294", + "prediction": "7016", + "images": 2 + }, + { + "truth": "6950", + "prediction": "7015", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "5336", + "images": 2 + }, + { + "truth": "8868", + "prediction": "7015", + "images": 2 + }, + { + "truth": "8868", + "prediction": "4532185", + "images": 2 + }, + { + "truth": "7294", + "prediction": "7015", + "images": 2 + }, + { + "truth": "6950", + "prediction": "4870", + "images": 2 + }, + { + "truth": "3530", + "prediction": "8840", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "8841", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "6166", + "images": 1 + }, + { + "truth": "7016", + "prediction": "5336", + "images": 1 + }, + { + "truth": "9689", + "prediction": "8841", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8874", + "images": 1 + }, + { + "truth": "8841", + "prediction": "5343", + "images": 1 + }, + { + "truth": "8841", + "prediction": "4300668", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8861", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8860", + "images": 1 + }, + { + "truth": "8841", + "prediction": "6950", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8838", + "images": 1 + }, + { + "truth": "8863", + "prediction": "6950", + "images": 1 + }, + { + "truth": "6950", + "prediction": "7294", + "images": 1 + }, + { + "truth": "7015", + "prediction": "8874", + "images": 1 + }, + { + "truth": "3530", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "3530", + "prediction": "6950", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "9412", + "images": 1 + }, + { + "truth": "8868", + "prediction": "8841", + "images": 1 + }, + { + "truth": "5336", + "prediction": "8841", + "images": 1 + }, + { + "truth": "7294", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "6950", + "prediction": "4532185", + "images": 1 + } + ] + }, + "common_0.96": { + "threshold": 0.96, + "images": 52788, + "accepted": 41948, + "truth_counts": { + "7015": 9243, + "3530": 728, + "5343": 632, + "4532185": 15241, + "9717": 191, + "7016": 3321, + "3556": 14, + "8874": 13, + "8860": 14, + "4527533": 2, + "9689": 32, + "4300668": 24, + "3552": 48, + "3553": 2, + "8868": 1124, + "5336": 365, + "8841": 4542, + "7294": 1604, + "6950": 15047, + "8863": 79, + "4542": 1, + "5474": 475, + "5345": 46 + }, + "predicted_counts": { + "3530": 439, + "8840": 1, + "5343": 506, + "7015": 6930, + "4532185": 12523, + "6950": 12884, + "9717": 158, + "8841": 2829, + "7294": 1226, + "6166": 1, + "7016": 2789, + "5336": 296, + "3556": 12, + "8874": 5, + "8860": 13, + "4527533": 1, + "9689": 18, + "4300668": 20, + "3552": 41, + "8868": 865, + "8861": 1, + "8838": 1, + "8863": 70, + "4864": 17, + "4542": 1, + "5474": 268, + "5345": 30, + "9412": 1, + "4870": 2 + }, + "official": { + "precision": { + "2": 0.7392946941740896 + }, + "recall": { + "2": 0.7041487848093837 + }, + "f1": { + "2": 0.6092976825277342 + }, + "micro_accuracy": { + "2": 0.9980928768952035 + }, + "coverage": { + "2": 0.7946502993104494 + } + }, + "truth_group_diagnostic": { + "precision": 0.9745248241385727, + "recall": 0.7041487848093837, + "f1": 0.7947361076448708 + }, + "groups": { + "precision": { + "7015": [ + 0.9985569985569985, + 1.0 + ], + "3530": [ + 1.0, + 1.0 + ], + "5343": [ + 0.9920948616600791, + 1.0 + ], + "4532185": [ + 0.9992014692964944, + 1.0 + ], + "9717": [ + 1.0, + 1.0 + ], + "7016": [ + 0.9992828970957333, + 1.0 + ], + "3556": [ + 1.0, + 1.0 + ], + "8874": [ + 0.6, + 1.0 + ], + "8860": [ + 0.9230769230769231, + 1.0 + ], + "4527533": [ + 1.0, + 1.0 + ], + "9689": [ + 1.0, + 1.0 + ], + "4300668": [ + 0.95, + 1.0 + ], + "3552": [ + 1.0, + 1.0 + ], + "3553": [ + 1.0, + 0.0 + ], + "8868": [ + 1.0, + 1.0 + ], + "5336": [ + 0.9831081081081081, + 1.0 + ], + "8841": [ + 0.9975256274301874, + 1.0 + ], + "7294": [ + 0.9975530179445351, + 1.0 + ], + "6950": [ + 0.9991462278795405, + 1.0 + ], + "8863": [ + 1.0, + 1.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "5474": [ + 1.0, + 1.0 + ], + "5345": [ + 1.0, + 1.0 + ], + "5340": [ + 1.0, + 0.0 + ], + "8861": [ + 0.0, + 1.0 + ], + "8840": [ + 0.0, + 1.0 + ], + "6166": [ + 0.0, + 1.0 + ], + "4705755": [ + 1.0, + 0.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "4528997": [ + 1.0, + 0.0 + ], + "3528": [ + 1.0, + 0.0 + ], + "4300664": [ + 1.0, + 0.0 + ], + "4538": [ + 1.0, + 0.0 + ], + "8838": [ + 0.0, + 1.0 + ], + "8871": [ + 1.0, + 0.0 + ], + "5481": [ + 1.0, + 0.0 + ], + "7297": [ + 1.0, + 0.0 + ], + "7014": [ + 1.0, + 0.0 + ], + "5487": [ + 1.0, + 0.0 + ], + "8864": [ + 1.0, + 0.0 + ], + "4865": [ + 1.0, + 0.0 + ], + "5320": [ + 1.0, + 0.0 + ], + "9410": [ + 1.0, + 0.0 + ], + "4867": [ + 1.0, + 0.0 + ], + "8865": [ + 1.0, + 0.0 + ], + "4554": [ + 1.0, + 0.0 + ], + "3554": [ + 1.0, + 0.0 + ], + "8866": [ + 1.0, + 0.0 + ], + "7017": [ + 1.0, + 0.0 + ], + "4525465": [ + 1.0, + 0.0 + ], + "4870": [ + 0.0, + 1.0 + ], + "4864": [ + 0.0, + 1.0 + ], + "6946": [ + 1.0, + 0.0 + ], + "6953": [ + 1.0, + 0.0 + ], + "8855": [ + 1.0, + 0.0 + ], + "4525436": [ + 1.0, + 0.0 + ], + "6954": [ + 1.0, + 0.0 + ], + "5338": [ + 1.0, + 0.0 + ], + "9408": [ + 1.0, + 0.0 + ], + "8839": [ + 1.0, + 0.0 + ] + }, + "recall": { + "7015": [ + 0.7486746727253056, + 1.0 + ], + "3530": [ + 0.603021978021978, + 1.0 + ], + "5343": [ + 0.7943037974683544, + 1.0 + ], + "4532185": [ + 0.821009120136474, + 1.0 + ], + "9717": [ + 0.8272251308900523, + 1.0 + ], + "7016": [ + 0.8392050587172538, + 1.0 + ], + "3556": [ + 0.8571428571428571, + 1.0 + ], + "8874": [ + 0.23076923076923078, + 1.0 + ], + "8860": [ + 0.8571428571428571, + 1.0 + ], + "4527533": [ + 0.5, + 1.0 + ], + "9689": [ + 0.5625, + 1.0 + ], + "4300668": [ + 0.7916666666666666, + 1.0 + ], + "3552": [ + 0.8541666666666666, + 1.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8868": [ + 0.7695729537366548, + 1.0 + ], + "5336": [ + 0.7972602739726027, + 1.0 + ], + "8841": [ + 0.6213121972699251, + 1.0 + ], + "7294": [ + 0.7624688279301746, + 1.0 + ], + "6950": [ + 0.8555193726324184, + 1.0 + ], + "8863": [ + 0.8860759493670886, + 1.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "5474": [ + 0.5642105263157895, + 1.0 + ], + "5345": [ + 0.6521739130434783, + 1.0 + ] + }, + "f1": { + "4864": [ + 0.0, + 1.0 + ], + "8865": [ + 1.0, + 0.0 + ], + "3552": [ + 0.9213483146067415, + 1.0 + ], + "8868": [ + 0.8697838109602816, + 1.0 + ], + "8866": [ + 1.0, + 0.0 + ], + "4705755": [ + 1.0, + 0.0 + ], + "4527533": [ + 0.6666666666666666, + 1.0 + ], + "7294": [ + 0.8643109540636043, + 1.0 + ], + "5345": [ + 0.7894736842105263, + 1.0 + ], + "6954": [ + 1.0, + 0.0 + ], + "5336": [ + 0.8804841149773072, + 1.0 + ], + "8839": [ + 1.0, + 0.0 + ], + "4554": [ + 1.0, + 0.0 + ], + "8860": [ + 0.8888888888888888, + 1.0 + ], + "4300664": [ + 1.0, + 0.0 + ], + "9410": [ + 1.0, + 0.0 + ], + "6946": [ + 1.0, + 0.0 + ], + "6166": [ + 0.0, + 1.0 + ], + "5481": [ + 1.0, + 0.0 + ], + "8840": [ + 0.0, + 1.0 + ], + "4532185": [ + 0.9013830860106613, + 1.0 + ], + "6950": [ + 0.9217715083598869, + 1.0 + ], + "8864": [ + 1.0, + 0.0 + ], + "4867": [ + 1.0, + 0.0 + ], + "9408": [ + 1.0, + 0.0 + ], + "4870": [ + 0.0, + 1.0 + ], + "8861": [ + 0.0, + 1.0 + ], + "8838": [ + 0.0, + 1.0 + ], + "8855": [ + 1.0, + 0.0 + ], + "9689": [ + 0.72, + 1.0 + ], + "4300668": [ + 0.8636363636363636, + 1.0 + ], + "4525465": [ + 1.0, + 0.0 + ], + "5474": [ + 0.721399730820996, + 1.0 + ], + "3556": [ + 0.9230769230769229, + 1.0 + ], + "3530": [ + 0.7523564695801199, + 1.0 + ], + "3528": [ + 1.0, + 0.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "4528997": [ + 1.0, + 0.0 + ], + "7014": [ + 1.0, + 0.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8841": [ + 0.765703432370099, + 1.0 + ], + "7017": [ + 1.0, + 0.0 + ], + "5340": [ + 1.0, + 0.0 + ], + "8874": [ + 0.3333333333333333, + 1.0 + ], + "7015": [ + 0.8557472330427255, + 1.0 + ], + "7016": [ + 0.9122749590834697, + 1.0 + ], + "5338": [ + 1.0, + 0.0 + ], + "7297": [ + 1.0, + 0.0 + ], + "5343": [ + 0.882249560632689, + 1.0 + ], + "8863": [ + 0.9395973154362416, + 1.0 + ], + "8871": [ + 1.0, + 0.0 + ], + "6953": [ + 1.0, + 0.0 + ], + "4865": [ + 1.0, + 0.0 + ], + "5320": [ + 1.0, + 0.0 + ], + "3554": [ + 1.0, + 0.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "9717": [ + 0.9054441260744984, + 1.0 + ], + "4525436": [ + 1.0, + 0.0 + ], + "4538": [ + 1.0, + 0.0 + ], + "5487": [ + 1.0, + 0.0 + ] + } + }, + "predicted_only": { + "8840": 1, + "6166": 1, + "8861": 1, + "8838": 1, + "4864": 17, + "9412": 1, + "4870": 2 + }, + "truth_families_without_accepted_predictions": [ + "3553" + ], + "false_positive_pairs": [ + { + "truth": "4532185", + "prediction": "4864", + "images": 13 + }, + { + "truth": "7015", + "prediction": "4532185", + "images": 5 + }, + { + "truth": "6950", + "prediction": "4864", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "6950", + "images": 3 + }, + { + "truth": "4532185", + "prediction": "7015", + "images": 3 + }, + { + "truth": "9689", + "prediction": "8841", + "images": 3 + }, + { + "truth": "7294", + "prediction": "6950", + "images": 3 + }, + { + "truth": "7015", + "prediction": "5343", + "images": 3 + }, + { + "truth": "7294", + "prediction": "7015", + "images": 3 + }, + { + "truth": "7015", + "prediction": "6950", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "7294", + "images": 2 + }, + { + "truth": "8841", + "prediction": "5336", + "images": 2 + }, + { + "truth": "7294", + "prediction": "7016", + "images": 2 + }, + { + "truth": "6950", + "prediction": "7015", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "5336", + "images": 2 + }, + { + "truth": "8868", + "prediction": "7015", + "images": 2 + }, + { + "truth": "8868", + "prediction": "4532185", + "images": 2 + }, + { + "truth": "6950", + "prediction": "4870", + "images": 2 + }, + { + "truth": "3530", + "prediction": "8840", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "8841", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "6166", + "images": 1 + }, + { + "truth": "7016", + "prediction": "5336", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8874", + "images": 1 + }, + { + "truth": "8841", + "prediction": "5343", + "images": 1 + }, + { + "truth": "8841", + "prediction": "4300668", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8861", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8860", + "images": 1 + }, + { + "truth": "8841", + "prediction": "6950", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8838", + "images": 1 + }, + { + "truth": "8863", + "prediction": "6950", + "images": 1 + }, + { + "truth": "6950", + "prediction": "7294", + "images": 1 + }, + { + "truth": "7015", + "prediction": "8874", + "images": 1 + }, + { + "truth": "3530", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "3530", + "prediction": "6950", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "9412", + "images": 1 + }, + { + "truth": "8868", + "prediction": "8841", + "images": 1 + }, + { + "truth": "5336", + "prediction": "8841", + "images": 1 + }, + { + "truth": "7294", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "6950", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "6950", + "prediction": "8841", + "images": 1 + } + ] + } + }, + "onnx-tta": { + "zero": { + "threshold": 0, + "images": 52788, + "accepted": 52788, + "truth_counts": { + "7015": 9243, + "3530": 728, + "5343": 632, + "4532185": 15241, + "9717": 191, + "7016": 3321, + "3556": 14, + "8874": 13, + "8860": 14, + "4527533": 2, + "9689": 32, + "4300668": 24, + "3552": 48, + "3553": 2, + "8868": 1124, + "5336": 365, + "8841": 4542, + "7294": 1604, + "6950": 15047, + "8863": 79, + "4542": 1, + "5474": 475, + "5345": 46 + }, + "predicted_counts": { + "7015": 9198, + "7016": 3266, + "3530": 635, + "5336": 517, + "5340": 5, + "8861": 22, + "4532185": 14751, + "6950": 14888, + "5343": 1087, + "3556": 35, + "8840": 19, + "8841": 4371, + "6166": 14, + "4705755": 31, + "7294": 1471, + "9412": 85, + "9717": 189, + "5345": 46, + "3553": 87, + "8860": 27, + "4528997": 3, + "8868": 1024, + "3552": 49, + "4300668": 26, + "3528": 5, + "4300664": 6, + "4538": 23, + "8838": 87, + "8871": 36, + "9689": 48, + "8863": 83, + "8874": 38, + "5481": 4, + "7297": 15, + "7014": 4, + "5474": 411, + "5487": 19, + "4527533": 2, + "8864": 1, + "4865": 11, + "5320": 1, + "9410": 2, + "4867": 2, + "8865": 2, + "4554": 4, + "3554": 3, + "8866": 6, + "7017": 10, + "4525465": 1, + "4870": 8, + "4864": 96, + "6946": 1, + "4542": 4, + "6953": 1, + "8855": 1, + "4525436": 3, + "6954": 1, + "5338": 1, + "9408": 1, + "8839": 1 + }, + "official": { + "precision": { + "2": 0.2856706122641368 + }, + "recall": { + "2": 0.8580571051602935 + }, + "f1": { + "2": 0.297077819405652 + }, + "micro_accuracy": { + "2": 0.9479237705539137 + }, + "coverage": { + "2": 1.0 + } + }, + "truth_group_diagnostic": { + "precision": 0.7452276841673134, + "recall": 0.8580571051602935, + "f1": 0.7749856158408314 + }, + "groups": { + "precision": { + "7015": [ + 0.9412915851272016, + 1.0 + ], + "3530": [ + 0.9590551181102362, + 1.0 + ], + "5343": [ + 0.5657773689052438, + 1.0 + ], + "4532185": [ + 0.9858314690529456, + 1.0 + ], + "9717": [ + 0.9470899470899471, + 1.0 + ], + "7016": [ + 0.9614206981016534, + 1.0 + ], + "3556": [ + 0.4, + 1.0 + ], + "8874": [ + 0.15789473684210525, + 1.0 + ], + "8860": [ + 0.48148148148148145, + 1.0 + ], + "4527533": [ + 1.0, + 1.0 + ], + "9689": [ + 0.4166666666666667, + 1.0 + ], + "4300668": [ + 0.8461538461538461, + 1.0 + ], + "3552": [ + 0.8571428571428571, + 1.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8868": [ + 0.9912109375, + 1.0 + ], + "5336": [ + 0.6673114119922631, + 1.0 + ], + "8841": [ + 0.9633951040951727, + 1.0 + ], + "7294": [ + 0.982324949014276, + 1.0 + ], + "6950": [ + 0.9834766254701773, + 1.0 + ], + "8863": [ + 0.891566265060241, + 1.0 + ], + "4542": [ + 0.25, + 1.0 + ], + "5474": [ + 0.9781021897810219, + 1.0 + ], + "5345": [ + 0.9130434782608695, + 1.0 + ], + "5340": [ + 0.0, + 1.0 + ], + "8861": [ + 0.0, + 1.0 + ], + "8840": [ + 0.0, + 1.0 + ], + "6166": [ + 0.0, + 1.0 + ], + "4705755": [ + 0.0, + 1.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "4528997": [ + 0.0, + 1.0 + ], + "3528": [ + 0.0, + 1.0 + ], + "4300664": [ + 0.0, + 1.0 + ], + "4538": [ + 0.0, + 1.0 + ], + "8838": [ + 0.0, + 1.0 + ], + "8871": [ + 0.0, + 1.0 + ], + "5481": [ + 0.0, + 1.0 + ], + "7297": [ + 0.0, + 1.0 + ], + "7014": [ + 0.0, + 1.0 + ], + "5487": [ + 0.0, + 1.0 + ], + "8864": [ + 0.0, + 1.0 + ], + "4865": [ + 0.0, + 1.0 + ], + "5320": [ + 0.0, + 1.0 + ], + "9410": [ + 0.0, + 1.0 + ], + "4867": [ + 0.0, + 1.0 + ], + "8865": [ + 0.0, + 1.0 + ], + "4554": [ + 0.0, + 1.0 + ], + "3554": [ + 0.0, + 1.0 + ], + "8866": [ + 0.0, + 1.0 + ], + "7017": [ + 0.0, + 1.0 + ], + "4525465": [ + 0.0, + 1.0 + ], + "4870": [ + 0.0, + 1.0 + ], + "4864": [ + 0.0, + 1.0 + ], + "6946": [ + 0.0, + 1.0 + ], + "6953": [ + 0.0, + 1.0 + ], + "8855": [ + 0.0, + 1.0 + ], + "4525436": [ + 0.0, + 1.0 + ], + "6954": [ + 0.0, + 1.0 + ], + "5338": [ + 0.0, + 1.0 + ], + "9408": [ + 0.0, + 1.0 + ], + "8839": [ + 0.0, + 1.0 + ] + }, + "recall": { + "7015": [ + 0.9367088607594937, + 1.0 + ], + "3530": [ + 0.8365384615384616, + 1.0 + ], + "5343": [ + 0.9731012658227848, + 1.0 + ], + "4532185": [ + 0.9541368676596024, + 1.0 + ], + "9717": [ + 0.93717277486911, + 1.0 + ], + "7016": [ + 0.9454983438723276, + 1.0 + ], + "3556": [ + 1.0, + 1.0 + ], + "8874": [ + 0.46153846153846156, + 1.0 + ], + "8860": [ + 0.9285714285714286, + 1.0 + ], + "4527533": [ + 1.0, + 1.0 + ], + "9689": [ + 0.625, + 1.0 + ], + "4300668": [ + 0.9166666666666666, + 1.0 + ], + "3552": [ + 0.875, + 1.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8868": [ + 0.9030249110320284, + 1.0 + ], + "5336": [ + 0.9452054794520548, + 1.0 + ], + "8841": [ + 0.9271246147071774, + 1.0 + ], + "7294": [ + 0.9008728179551122, + 1.0 + ], + "6950": [ + 0.9730843357479896, + 1.0 + ], + "8863": [ + 0.9367088607594937, + 1.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "5474": [ + 0.8463157894736842, + 1.0 + ], + "5345": [ + 0.9130434782608695, + 1.0 + ] + }, + "f1": { + "4864": [ + 0.0, + 1.0 + ], + "8865": [ + 0.0, + 1.0 + ], + "3552": [ + 0.865979381443299, + 1.0 + ], + "8868": [ + 0.9450651769087522, + 1.0 + ], + "8866": [ + 0.0, + 1.0 + ], + "4705755": [ + 0.0, + 1.0 + ], + "4527533": [ + 1.0, + 1.0 + ], + "7294": [ + 0.9398373983739837, + 1.0 + ], + "5345": [ + 0.9130434782608695, + 1.0 + ], + "6954": [ + 0.0, + 1.0 + ], + "5336": [ + 0.782312925170068, + 1.0 + ], + "8839": [ + 0.0, + 1.0 + ], + "4554": [ + 0.0, + 1.0 + ], + "8860": [ + 0.6341463414634145, + 1.0 + ], + "4300664": [ + 0.0, + 1.0 + ], + "9410": [ + 0.0, + 1.0 + ], + "6946": [ + 0.0, + 1.0 + ], + "6166": [ + 0.0, + 1.0 + ], + "5481": [ + 0.0, + 1.0 + ], + "8840": [ + 0.0, + 1.0 + ], + "4532185": [ + 0.9697252600693519, + 1.0 + ], + "6950": [ + 0.9782528812426925, + 1.0 + ], + "8864": [ + 0.0, + 1.0 + ], + "4867": [ + 0.0, + 1.0 + ], + "9408": [ + 0.0, + 1.0 + ], + "4870": [ + 0.0, + 1.0 + ], + "8861": [ + 0.0, + 1.0 + ], + "8838": [ + 0.0, + 1.0 + ], + "8855": [ + 0.0, + 1.0 + ], + "9689": [ + 0.5, + 1.0 + ], + "4300668": [ + 0.8799999999999999, + 1.0 + ], + "4525465": [ + 0.0, + 1.0 + ], + "5474": [ + 0.9074492099322798, + 1.0 + ], + "3556": [ + 0.5714285714285714, + 1.0 + ], + "3530": [ + 0.8936170212765957, + 1.0 + ], + "3528": [ + 0.0, + 1.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "4528997": [ + 0.0, + 1.0 + ], + "7014": [ + 0.0, + 1.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8841": [ + 0.944911926399641, + 1.0 + ], + "7017": [ + 0.0, + 1.0 + ], + "5340": [ + 0.0, + 1.0 + ], + "8874": [ + 0.23529411764705882, + 1.0 + ], + "7015": [ + 0.9389946315275743, + 1.0 + ], + "7016": [ + 0.9533930469105814, + 1.0 + ], + "5338": [ + 0.0, + 1.0 + ], + "7297": [ + 0.0, + 1.0 + ], + "5343": [ + 0.7155322862129145, + 1.0 + ], + "8863": [ + 0.9135802469135801, + 1.0 + ], + "8871": [ + 0.0, + 1.0 + ], + "6953": [ + 0.0, + 1.0 + ], + "4865": [ + 0.0, + 1.0 + ], + "5320": [ + 0.0, + 1.0 + ], + "3554": [ + 0.0, + 1.0 + ], + "4542": [ + 0.4, + 1.0 + ], + "9717": [ + 0.9421052631578947, + 1.0 + ], + "4525436": [ + 0.0, + 1.0 + ], + "4538": [ + 0.0, + 1.0 + ], + "5487": [ + 0.0, + 1.0 + ] + } + }, + "predicted_only": { + "5340": 5, + "8861": 22, + "8840": 19, + "6166": 14, + "4705755": 31, + "9412": 85, + "4528997": 3, + "3528": 5, + "4300664": 6, + "4538": 23, + "8838": 87, + "8871": 36, + "5481": 4, + "7297": 15, + "7014": 4, + "5487": 19, + "8864": 1, + "4865": 11, + "5320": 1, + "9410": 2, + "4867": 2, + "8865": 2, + "4554": 4, + "3554": 3, + "8866": 6, + "7017": 10, + "4525465": 1, + "4870": 8, + "4864": 96, + "6946": 1, + "6953": 1, + "8855": 1, + "4525436": 3, + "6954": 1, + "5338": 1, + "9408": 1, + "8839": 1 + }, + "truth_families_without_accepted_predictions": [], + "false_positive_pairs": [ + { + "truth": "7015", + "prediction": "5343", + "images": 245 + }, + { + "truth": "4532185", + "prediction": "7015", + "images": 141 + }, + { + "truth": "7015", + "prediction": "4532185", + "images": 95 + }, + { + "truth": "6950", + "prediction": "7015", + "images": 95 + }, + { + "truth": "6950", + "prediction": "8841", + "images": 80 + }, + { + "truth": "4532185", + "prediction": "4864", + "images": 75 + }, + { + "truth": "7016", + "prediction": "7015", + "images": 68 + }, + { + "truth": "7015", + "prediction": "6950", + "images": 65 + }, + { + "truth": "4532185", + "prediction": "7016", + "images": 63 + }, + { + "truth": "4532185", + "prediction": "5336", + "images": 59 + }, + { + "truth": "7294", + "prediction": "7015", + "images": 59 + }, + { + "truth": "6950", + "prediction": "5343", + "images": 57 + }, + { + "truth": "8841", + "prediction": "5336", + "images": 53 + }, + { + "truth": "3530", + "prediction": "7015", + "images": 52 + }, + { + "truth": "4532185", + "prediction": "6950", + "images": 50 + }, + { + "truth": "8868", + "prediction": "7015", + "images": 49 + }, + { + "truth": "8841", + "prediction": "6950", + "images": 47 + }, + { + "truth": "8841", + "prediction": "7015", + "images": 47 + }, + { + "truth": "8841", + "prediction": "5343", + "images": 45 + }, + { + "truth": "4532185", + "prediction": "8838", + "images": 44 + }, + { + "truth": "4532185", + "prediction": "9412", + "images": 42 + }, + { + "truth": "4532185", + "prediction": "8841", + "images": 38 + }, + { + "truth": "7015", + "prediction": "3553", + "images": 36 + }, + { + "truth": "7294", + "prediction": "6950", + "images": 35 + }, + { + "truth": "8841", + "prediction": "8838", + "images": 33 + }, + { + "truth": "6950", + "prediction": "4532185", + "images": 31 + }, + { + "truth": "3530", + "prediction": "7016", + "images": 30 + }, + { + "truth": "4532185", + "prediction": "5343", + "images": 30 + }, + { + "truth": "7016", + "prediction": "5343", + "images": 29 + }, + { + "truth": "5474", + "prediction": "7015", + "images": 27 + }, + { + "truth": "8841", + "prediction": "4532185", + "images": 26 + }, + { + "truth": "7294", + "prediction": "5343", + "images": 25 + }, + { + "truth": "7015", + "prediction": "5336", + "images": 22 + }, + { + "truth": "8868", + "prediction": "6950", + "images": 22 + }, + { + "truth": "5474", + "prediction": "5343", + "images": 22 + }, + { + "truth": "7015", + "prediction": "7016", + "images": 21 + }, + { + "truth": "7016", + "prediction": "4532185", + "images": 20 + }, + { + "truth": "6950", + "prediction": "4864", + "images": 20 + }, + { + "truth": "8841", + "prediction": "8871", + "images": 19 + }, + { + "truth": "7015", + "prediction": "8841", + "images": 18 + }, + { + "truth": "4532185", + "prediction": "4705755", + "images": 18 + }, + { + "truth": "7016", + "prediction": "5336", + "images": 15 + }, + { + "truth": "4532185", + "prediction": "7294", + "images": 14 + }, + { + "truth": "7015", + "prediction": "9689", + "images": 13 + }, + { + "truth": "4532185", + "prediction": "8874", + "images": 13 + }, + { + "truth": "4532185", + "prediction": "8871", + "images": 13 + }, + { + "truth": "6950", + "prediction": "5336", + "images": 13 + }, + { + "truth": "6950", + "prediction": "9412", + "images": 13 + }, + { + "truth": "7015", + "prediction": "9412", + "images": 12 + }, + { + "truth": "7294", + "prediction": "4532185", + "images": 12 + }, + { + "truth": "6950", + "prediction": "3553", + "images": 12 + }, + { + "truth": "4532185", + "prediction": "3530", + "images": 11 + }, + { + "truth": "8841", + "prediction": "3553", + "images": 11 + }, + { + "truth": "3530", + "prediction": "4532185", + "images": 10 + }, + { + "truth": "3530", + "prediction": "3556", + "images": 10 + }, + { + "truth": "4532185", + "prediction": "7297", + "images": 10 + }, + { + "truth": "7016", + "prediction": "6950", + "images": 10 + }, + { + "truth": "4532185", + "prediction": "3553", + "images": 10 + }, + { + "truth": "4532185", + "prediction": "6166", + "images": 9 + }, + { + "truth": "9689", + "prediction": "8841", + "images": 9 + }, + { + "truth": "6950", + "prediction": "8861", + "images": 9 + }, + { + "truth": "7016", + "prediction": "3553", + "images": 8 + }, + { + "truth": "4532185", + "prediction": "8863", + "images": 7 + }, + { + "truth": "7016", + "prediction": "3556", + "images": 7 + }, + { + "truth": "8868", + "prediction": "4532185", + "images": 7 + }, + { + "truth": "8841", + "prediction": "9689", + "images": 7 + }, + { + "truth": "6950", + "prediction": "4538", + "images": 7 + }, + { + "truth": "7015", + "prediction": "8861", + "images": 6 + }, + { + "truth": "4532185", + "prediction": "8868", + "images": 6 + }, + { + "truth": "4532185", + "prediction": "8840", + "images": 6 + }, + { + "truth": "7016", + "prediction": "8874", + "images": 6 + }, + { + "truth": "8874", + "prediction": "9412", + "images": 6 + }, + { + "truth": "8868", + "prediction": "4538", + "images": 6 + }, + { + "truth": "8841", + "prediction": "8860", + "images": 6 + }, + { + "truth": "6950", + "prediction": "5487", + "images": 6 + }, + { + "truth": "7015", + "prediction": "3530", + "images": 6 + }, + { + "truth": "3530", + "prediction": "5343", + "images": 5 + }, + { + "truth": "7016", + "prediction": "3530", + "images": 5 + }, + { + "truth": "8841", + "prediction": "4538", + "images": 5 + }, + { + "truth": "7294", + "prediction": "8838", + "images": 5 + }, + { + "truth": "7294", + "prediction": "7016", + "images": 5 + }, + { + "truth": "7294", + "prediction": "5474", + "images": 5 + }, + { + "truth": "6950", + "prediction": "4870", + "images": 5 + }, + { + "truth": "6950", + "prediction": "4705755", + "images": 5 + }, + { + "truth": "5474", + "prediction": "6950", + "images": 5 + }, + { + "truth": "8868", + "prediction": "5343", + "images": 5 + }, + { + "truth": "7015", + "prediction": "9717", + "images": 4 + }, + { + "truth": "7015", + "prediction": "3528", + "images": 4 + }, + { + "truth": "7015", + "prediction": "8840", + "images": 4 + }, + { + "truth": "9717", + "prediction": "5343", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "5487", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "3552", + "images": 4 + }, + { + "truth": "7016", + "prediction": "7294", + "images": 4 + }, + { + "truth": "7016", + "prediction": "9412", + "images": 4 + }, + { + "truth": "8868", + "prediction": "7016", + "images": 4 + }, + { + "truth": "5336", + "prediction": "4865", + "images": 4 + }, + { + "truth": "8841", + "prediction": "8874", + "images": 4 + }, + { + "truth": "8841", + "prediction": "5487", + "images": 4 + }, + { + "truth": "8841", + "prediction": "4705755", + "images": 4 + }, + { + "truth": "6950", + "prediction": "8874", + "images": 4 + }, + { + "truth": "6950", + "prediction": "9689", + "images": 4 + }, + { + "truth": "8863", + "prediction": "6950", + "images": 4 + }, + { + "truth": "6950", + "prediction": "7294", + "images": 4 + }, + { + "truth": "5474", + "prediction": "4532185", + "images": 4 + }, + { + "truth": "6950", + "prediction": "7017", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "4538", + "images": 4 + }, + { + "truth": "7015", + "prediction": "7017", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "4865", + "images": 4 + }, + { + "truth": "5336", + "prediction": "6950", + "images": 4 + }, + { + "truth": "3530", + "prediction": "8861", + "images": 3 + }, + { + "truth": "3530", + "prediction": "8840", + "images": 3 + }, + { + "truth": "5343", + "prediction": "4705755", + "images": 3 + }, + { + "truth": "7015", + "prediction": "3556", + "images": 3 + }, + { + "truth": "7015", + "prediction": "8868", + "images": 3 + }, + { + "truth": "7015", + "prediction": "4300668", + "images": 3 + }, + { + "truth": "8868", + "prediction": "8841", + "images": 3 + }, + { + "truth": "8841", + "prediction": "6166", + "images": 3 + }, + { + "truth": "7294", + "prediction": "8841", + "images": 3 + }, + { + "truth": "7294", + "prediction": "5336", + "images": 3 + }, + { + "truth": "6950", + "prediction": "7016", + "images": 3 + }, + { + "truth": "6950", + "prediction": "9717", + "images": 3 + }, + { + "truth": "6950", + "prediction": "8860", + "images": 3 + }, + { + "truth": "6950", + "prediction": "4542", + "images": 3 + }, + { + "truth": "5474", + "prediction": "5336", + "images": 3 + }, + { + "truth": "4532185", + "prediction": "9689", + "images": 3 + }, + { + "truth": "8868", + "prediction": "3530", + "images": 3 + }, + { + "truth": "8868", + "prediction": "3553", + "images": 3 + }, + { + "truth": "5336", + "prediction": "3553", + "images": 3 + }, + { + "truth": "7294", + "prediction": "4865", + "images": 3 + }, + { + "truth": "3530", + "prediction": "5336", + "images": 2 + }, + { + "truth": "3530", + "prediction": "6950", + "images": 2 + }, + { + "truth": "5343", + "prediction": "8841", + "images": 2 + }, + { + "truth": "5343", + "prediction": "6166", + "images": 2 + }, + { + "truth": "7015", + "prediction": "7294", + "images": 2 + }, + { + "truth": "7015", + "prediction": "5345", + "images": 2 + }, + { + "truth": "7015", + "prediction": "8860", + "images": 2 + }, + { + "truth": "7015", + "prediction": "3552", + "images": 2 + }, + { + "truth": "7015", + "prediction": "4300664", + "images": 2 + }, + { + "truth": "9717", + "prediction": "8874", + "images": 2 + }, + { + "truth": "9717", + "prediction": "8841", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "7014", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "5474", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "4528997", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "9717", + "images": 2 + }, + { + "truth": "7016", + "prediction": "4300664", + "images": 2 + }, + { + "truth": "4300668", + "prediction": "5343", + "images": 2 + }, + { + "truth": "8868", + "prediction": "8840", + "images": 2 + }, + { + "truth": "5336", + "prediction": "5343", + "images": 2 + }, + { + "truth": "8841", + "prediction": "8861", + "images": 2 + }, + { + "truth": "8841", + "prediction": "8840", + "images": 2 + }, + { + "truth": "8841", + "prediction": "8866", + "images": 2 + }, + { + "truth": "6950", + "prediction": "4554", + "images": 2 + }, + { + "truth": "6950", + "prediction": "8863", + "images": 2 + }, + { + "truth": "6950", + "prediction": "5340", + "images": 2 + }, + { + "truth": "6950", + "prediction": "8838", + "images": 2 + }, + { + "truth": "5474", + "prediction": "8838", + "images": 2 + }, + { + "truth": "6950", + "prediction": "8866", + "images": 2 + }, + { + "truth": "3552", + "prediction": "9412", + "images": 2 + }, + { + "truth": "7015", + "prediction": "4870", + "images": 2 + }, + { + "truth": "5343", + "prediction": "6950", + "images": 2 + }, + { + "truth": "5474", + "prediction": "7294", + "images": 2 + }, + { + "truth": "5474", + "prediction": "8840", + "images": 2 + }, + { + "truth": "5474", + "prediction": "8841", + "images": 2 + }, + { + "truth": "5336", + "prediction": "5487", + "images": 2 + }, + { + "truth": "6950", + "prediction": "5481", + "images": 2 + }, + { + "truth": "5343", + "prediction": "7014", + "images": 2 + }, + { + "truth": "3530", + "prediction": "5340", + "images": 1 + }, + { + "truth": "5343", + "prediction": "5336", + "images": 1 + }, + { + "truth": "5343", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "7015", + "prediction": "5340", + "images": 1 + }, + { + "truth": "7015", + "prediction": "4528997", + "images": 1 + }, + { + "truth": "7015", + "prediction": "4538", + "images": 1 + }, + { + "truth": "7015", + "prediction": "8838", + "images": 1 + }, + { + "truth": "7015", + "prediction": "8871", + "images": 1 + }, + { + "truth": "9717", + "prediction": "5481", + "images": 1 + }, + { + "truth": "9717", + "prediction": "7015", + "images": 1 + }, + { + "truth": "9717", + "prediction": "5336", + "images": 1 + }, + { + "truth": "9717", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "3528", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "5481", + "images": 1 + }, + { + "truth": "7016", + "prediction": "7297", + "images": 1 + }, + { + "truth": "7016", + "prediction": "9689", + "images": 1 + }, + { + "truth": "8874", + "prediction": "7297", + "images": 1 + }, + { + "truth": "8860", + "prediction": "3553", + "images": 1 + }, + { + "truth": "9689", + "prediction": "9412", + "images": 1 + }, + { + "truth": "9689", + "prediction": "8860", + "images": 1 + }, + { + "truth": "9689", + "prediction": "3553", + "images": 1 + }, + { + "truth": "3553", + "prediction": "8871", + "images": 1 + }, + { + "truth": "3553", + "prediction": "8841", + "images": 1 + }, + { + "truth": "8868", + "prediction": "9412", + "images": 1 + }, + { + "truth": "8868", + "prediction": "8864", + "images": 1 + }, + { + "truth": "8868", + "prediction": "5340", + "images": 1 + }, + { + "truth": "5336", + "prediction": "8874", + "images": 1 + }, + { + "truth": "5336", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "8841", + "prediction": "3552", + "images": 1 + }, + { + "truth": "8841", + "prediction": "4300664", + "images": 1 + }, + { + "truth": "8841", + "prediction": "5320", + "images": 1 + }, + { + "truth": "8841", + "prediction": "9410", + "images": 1 + }, + { + "truth": "8841", + "prediction": "4867", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8865", + "images": 1 + }, + { + "truth": "8841", + "prediction": "4300668", + "images": 1 + }, + { + "truth": "8841", + "prediction": "4554", + "images": 1 + }, + { + "truth": "8841", + "prediction": "7297", + "images": 1 + }, + { + "truth": "8841", + "prediction": "3554", + "images": 1 + }, + { + "truth": "8841", + "prediction": "9412", + "images": 1 + }, + { + "truth": "7294", + "prediction": "9717", + "images": 1 + }, + { + "truth": "7294", + "prediction": "9412", + "images": 1 + }, + { + "truth": "7294", + "prediction": "5487", + "images": 1 + }, + { + "truth": "7294", + "prediction": "7017", + "images": 1 + }, + { + "truth": "6950", + "prediction": "8865", + "images": 1 + }, + { + "truth": "6950", + "prediction": "4525465", + "images": 1 + }, + { + "truth": "6950", + "prediction": "7297", + "images": 1 + }, + { + "truth": "8863", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "6950", + "prediction": "3554", + "images": 1 + }, + { + "truth": "6950", + "prediction": "9410", + "images": 1 + }, + { + "truth": "6950", + "prediction": "5345", + "images": 1 + }, + { + "truth": "6950", + "prediction": "8871", + "images": 1 + }, + { + "truth": "6950", + "prediction": "5474", + "images": 1 + }, + { + "truth": "6950", + "prediction": "6946", + "images": 1 + }, + { + "truth": "6950", + "prediction": "4300664", + "images": 1 + }, + { + "truth": "6950", + "prediction": "6953", + "images": 1 + }, + { + "truth": "6950", + "prediction": "8855", + "images": 1 + }, + { + "truth": "5345", + "prediction": "8874", + "images": 1 + }, + { + "truth": "5345", + "prediction": "8860", + "images": 1 + }, + { + "truth": "5345", + "prediction": "8866", + "images": 1 + }, + { + "truth": "5345", + "prediction": "5487", + "images": 1 + }, + { + "truth": "3552", + "prediction": "4705755", + "images": 1 + }, + { + "truth": "3552", + "prediction": "3553", + "images": 1 + }, + { + "truth": "3552", + "prediction": "5343", + "images": 1 + }, + { + "truth": "3552", + "prediction": "4525436", + "images": 1 + }, + { + "truth": "5336", + "prediction": "7015", + "images": 1 + }, + { + "truth": "5336", + "prediction": "9412", + "images": 1 + }, + { + "truth": "7015", + "prediction": "8874", + "images": 1 + }, + { + "truth": "7015", + "prediction": "6954", + "images": 1 + }, + { + "truth": "7015", + "prediction": "7297", + "images": 1 + }, + { + "truth": "7015", + "prediction": "5474", + "images": 1 + }, + { + "truth": "3530", + "prediction": "8841", + "images": 1 + }, + { + "truth": "5343", + "prediction": "3553", + "images": 1 + }, + { + "truth": "5343", + "prediction": "4867", + "images": 1 + }, + { + "truth": "5474", + "prediction": "4864", + "images": 1 + }, + { + "truth": "5474", + "prediction": "8861", + "images": 1 + }, + { + "truth": "5474", + "prediction": "3530", + "images": 1 + }, + { + "truth": "5474", + "prediction": "8871", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "7017", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "8860", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "4525436", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "8866", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "4554", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "5338", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "9408", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "5345", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "8839", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "3554", + "images": 1 + }, + { + "truth": "7016", + "prediction": "8861", + "images": 1 + }, + { + "truth": "8868", + "prediction": "4870", + "images": 1 + }, + { + "truth": "8868", + "prediction": "5487", + "images": 1 + }, + { + "truth": "5336", + "prediction": "8841", + "images": 1 + }, + { + "truth": "5343", + "prediction": "4525436", + "images": 1 + }, + { + "truth": "5343", + "prediction": "9412", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "3556", + "images": 1 + } + ] + }, + "optimized": { + "threshold": 0.966471254825592, + "images": 52788, + "accepted": 41422, + "truth_counts": { + "7015": 9243, + "3530": 728, + "5343": 632, + "4532185": 15241, + "9717": 191, + "7016": 3321, + "3556": 14, + "8874": 13, + "8860": 14, + "4527533": 2, + "9689": 32, + "4300668": 24, + "3552": 48, + "3553": 2, + "8868": 1124, + "5336": 365, + "8841": 4542, + "7294": 1604, + "6950": 15047, + "8863": 79, + "4542": 1, + "5474": 475, + "5345": 46 + }, + "predicted_counts": { + "3530": 431, + "8840": 1, + "5343": 499, + "7015": 6816, + "4532185": 12376, + "6950": 12755, + "9717": 154, + "8841": 2758, + "6166": 1, + "7016": 2775, + "5336": 294, + "3556": 12, + "8874": 5, + "8860": 13, + "4527533": 1, + "9689": 18, + "4300668": 20, + "3552": 41, + "8868": 863, + "8861": 1, + "8838": 1, + "7294": 1208, + "8863": 70, + "4864": 16, + "4542": 1, + "5474": 259, + "5345": 30, + "9412": 1, + "4870": 2 + }, + "official": { + "precision": { + "2": 0.7395038777892725 + }, + "recall": { + "2": 0.6986717712105687 + }, + "f1": { + "2": 0.6065093177805807 + }, + "micro_accuracy": { + "2": 0.998285935010381 + }, + "coverage": { + "2": 0.7846859134651815 + } + }, + "truth_group_diagnostic": { + "precision": 0.9748005661767682, + "recall": 0.6986717712105687, + "f1": 0.7910991101485835 + }, + "groups": { + "precision": { + "7015": [ + 0.9988262910798122, + 1.0 + ], + "3530": [ + 1.0, + 1.0 + ], + "5343": [ + 0.9919839679358717, + 1.0 + ], + "4532185": [ + 0.9991919844861021, + 1.0 + ], + "9717": [ + 1.0, + 1.0 + ], + "7016": [ + 0.9992792792792793, + 1.0 + ], + "3556": [ + 1.0, + 1.0 + ], + "8874": [ + 0.6, + 1.0 + ], + "8860": [ + 0.9230769230769231, + 1.0 + ], + "4527533": [ + 1.0, + 1.0 + ], + "9689": [ + 1.0, + 1.0 + ], + "4300668": [ + 0.95, + 1.0 + ], + "3552": [ + 1.0, + 1.0 + ], + "3553": [ + 1.0, + 0.0 + ], + "8868": [ + 1.0, + 1.0 + ], + "5336": [ + 0.9863945578231292, + 1.0 + ], + "8841": [ + 0.9985496736765772, + 1.0 + ], + "7294": [ + 0.9991721854304636, + 1.0 + ], + "6950": [ + 0.9991375931007448, + 1.0 + ], + "8863": [ + 1.0, + 1.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "5474": [ + 1.0, + 1.0 + ], + "5345": [ + 1.0, + 1.0 + ], + "5340": [ + 1.0, + 0.0 + ], + "8861": [ + 0.0, + 1.0 + ], + "8840": [ + 0.0, + 1.0 + ], + "6166": [ + 0.0, + 1.0 + ], + "4705755": [ + 1.0, + 0.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "4528997": [ + 1.0, + 0.0 + ], + "3528": [ + 1.0, + 0.0 + ], + "4300664": [ + 1.0, + 0.0 + ], + "4538": [ + 1.0, + 0.0 + ], + "8838": [ + 0.0, + 1.0 + ], + "8871": [ + 1.0, + 0.0 + ], + "5481": [ + 1.0, + 0.0 + ], + "7297": [ + 1.0, + 0.0 + ], + "7014": [ + 1.0, + 0.0 + ], + "5487": [ + 1.0, + 0.0 + ], + "8864": [ + 1.0, + 0.0 + ], + "4865": [ + 1.0, + 0.0 + ], + "5320": [ + 1.0, + 0.0 + ], + "9410": [ + 1.0, + 0.0 + ], + "4867": [ + 1.0, + 0.0 + ], + "8865": [ + 1.0, + 0.0 + ], + "4554": [ + 1.0, + 0.0 + ], + "3554": [ + 1.0, + 0.0 + ], + "8866": [ + 1.0, + 0.0 + ], + "7017": [ + 1.0, + 0.0 + ], + "4525465": [ + 1.0, + 0.0 + ], + "4870": [ + 0.0, + 1.0 + ], + "4864": [ + 0.0, + 1.0 + ], + "6946": [ + 1.0, + 0.0 + ], + "6953": [ + 1.0, + 0.0 + ], + "8855": [ + 1.0, + 0.0 + ], + "4525436": [ + 1.0, + 0.0 + ], + "6954": [ + 1.0, + 0.0 + ], + "5338": [ + 1.0, + 0.0 + ], + "9408": [ + 1.0, + 0.0 + ], + "8839": [ + 1.0, + 0.0 + ] + }, + "recall": { + "7015": [ + 0.7365573947852428, + 1.0 + ], + "3530": [ + 0.592032967032967, + 1.0 + ], + "5343": [ + 0.7832278481012658, + 1.0 + ], + "4532185": [ + 0.8113640837215406, + 1.0 + ], + "9717": [ + 0.806282722513089, + 1.0 + ], + "7016": [ + 0.8349894610057211, + 1.0 + ], + "3556": [ + 0.8571428571428571, + 1.0 + ], + "8874": [ + 0.23076923076923078, + 1.0 + ], + "8860": [ + 0.8571428571428571, + 1.0 + ], + "4527533": [ + 0.5, + 1.0 + ], + "9689": [ + 0.5625, + 1.0 + ], + "4300668": [ + 0.7916666666666666, + 1.0 + ], + "3552": [ + 0.8541666666666666, + 1.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8868": [ + 0.7677935943060499, + 1.0 + ], + "5336": [ + 0.7945205479452054, + 1.0 + ], + "8841": [ + 0.6063408190224571, + 1.0 + ], + "7294": [ + 0.7524937655860349, + 1.0 + ], + "6950": [ + 0.8469462351299263, + 1.0 + ], + "8863": [ + 0.8860759493670886, + 1.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "5474": [ + 0.5452631578947369, + 1.0 + ], + "5345": [ + 0.6521739130434783, + 1.0 + ] + }, + "f1": { + "4864": [ + 0.0, + 1.0 + ], + "8865": [ + 1.0, + 0.0 + ], + "3552": [ + 0.9213483146067415, + 1.0 + ], + "8868": [ + 0.8686462003019627, + 1.0 + ], + "8866": [ + 1.0, + 0.0 + ], + "4705755": [ + 1.0, + 0.0 + ], + "4527533": [ + 0.6666666666666666, + 1.0 + ], + "7294": [ + 0.8584637268847795, + 1.0 + ], + "5345": [ + 0.7894736842105263, + 1.0 + ], + "6954": [ + 1.0, + 0.0 + ], + "5336": [ + 0.8801213960546284, + 1.0 + ], + "8839": [ + 1.0, + 0.0 + ], + "4554": [ + 1.0, + 0.0 + ], + "8860": [ + 0.8888888888888888, + 1.0 + ], + "4300664": [ + 1.0, + 0.0 + ], + "9410": [ + 1.0, + 0.0 + ], + "6946": [ + 1.0, + 0.0 + ], + "6166": [ + 0.0, + 1.0 + ], + "5481": [ + 1.0, + 0.0 + ], + "8840": [ + 0.0, + 1.0 + ], + "4532185": [ + 0.8955353586559004, + 1.0 + ], + "6950": [ + 0.9167685778001583, + 1.0 + ], + "8864": [ + 1.0, + 0.0 + ], + "4867": [ + 1.0, + 0.0 + ], + "9408": [ + 1.0, + 0.0 + ], + "4870": [ + 0.0, + 1.0 + ], + "8861": [ + 0.0, + 1.0 + ], + "8838": [ + 0.0, + 1.0 + ], + "8855": [ + 1.0, + 0.0 + ], + "9689": [ + 0.72, + 1.0 + ], + "4300668": [ + 0.8636363636363636, + 1.0 + ], + "4525465": [ + 1.0, + 0.0 + ], + "5474": [ + 0.7057220708446866, + 1.0 + ], + "3556": [ + 0.9230769230769229, + 1.0 + ], + "3530": [ + 0.7437446074201899, + 1.0 + ], + "3528": [ + 1.0, + 0.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "4528997": [ + 1.0, + 0.0 + ], + "7014": [ + 1.0, + 0.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8841": [ + 0.7545205479452055, + 1.0 + ], + "7017": [ + 1.0, + 0.0 + ], + "5340": [ + 1.0, + 0.0 + ], + "8874": [ + 0.3333333333333333, + 1.0 + ], + "7015": [ + 0.8478734665919422, + 1.0 + ], + "7016": [ + 0.9097769028871392, + 1.0 + ], + "5338": [ + 1.0, + 0.0 + ], + "7297": [ + 1.0, + 0.0 + ], + "5343": [ + 0.8753315649867373, + 1.0 + ], + "8863": [ + 0.9395973154362416, + 1.0 + ], + "8871": [ + 1.0, + 0.0 + ], + "6953": [ + 1.0, + 0.0 + ], + "4865": [ + 1.0, + 0.0 + ], + "5320": [ + 1.0, + 0.0 + ], + "3554": [ + 1.0, + 0.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "9717": [ + 0.8927536231884057, + 1.0 + ], + "4525436": [ + 1.0, + 0.0 + ], + "4538": [ + 1.0, + 0.0 + ], + "5487": [ + 1.0, + 0.0 + ] + } + }, + "predicted_only": { + "8840": 1, + "6166": 1, + "8861": 1, + "8838": 1, + "4864": 16, + "9412": 1, + "4870": 2 + }, + "truth_families_without_accepted_predictions": [ + "3553" + ], + "false_positive_pairs": [ + { + "truth": "4532185", + "prediction": "4864", + "images": 12 + }, + { + "truth": "7015", + "prediction": "4532185", + "images": 5 + }, + { + "truth": "6950", + "prediction": "4864", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "6950", + "images": 3 + }, + { + "truth": "7294", + "prediction": "6950", + "images": 3 + }, + { + "truth": "7015", + "prediction": "5343", + "images": 3 + }, + { + "truth": "7015", + "prediction": "6950", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "7015", + "images": 2 + }, + { + "truth": "8841", + "prediction": "5336", + "images": 2 + }, + { + "truth": "7294", + "prediction": "7016", + "images": 2 + }, + { + "truth": "6950", + "prediction": "7015", + "images": 2 + }, + { + "truth": "8868", + "prediction": "7015", + "images": 2 + }, + { + "truth": "8868", + "prediction": "4532185", + "images": 2 + }, + { + "truth": "7294", + "prediction": "7015", + "images": 2 + }, + { + "truth": "6950", + "prediction": "4870", + "images": 2 + }, + { + "truth": "3530", + "prediction": "8840", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "8841", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "6166", + "images": 1 + }, + { + "truth": "7016", + "prediction": "5336", + "images": 1 + }, + { + "truth": "9689", + "prediction": "8841", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8874", + "images": 1 + }, + { + "truth": "8841", + "prediction": "5343", + "images": 1 + }, + { + "truth": "8841", + "prediction": "4300668", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8861", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8860", + "images": 1 + }, + { + "truth": "8841", + "prediction": "6950", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8838", + "images": 1 + }, + { + "truth": "8863", + "prediction": "6950", + "images": 1 + }, + { + "truth": "6950", + "prediction": "7294", + "images": 1 + }, + { + "truth": "7015", + "prediction": "8874", + "images": 1 + }, + { + "truth": "3530", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "3530", + "prediction": "6950", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "9412", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "5336", + "images": 1 + }, + { + "truth": "8868", + "prediction": "8841", + "images": 1 + }, + { + "truth": "5336", + "prediction": "8841", + "images": 1 + }, + { + "truth": "7294", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "6950", + "prediction": "4532185", + "images": 1 + } + ] + }, + "common_0.96": { + "threshold": 0.96, + "images": 52788, + "accepted": 41952, + "truth_counts": { + "7015": 9243, + "3530": 728, + "5343": 632, + "4532185": 15241, + "9717": 191, + "7016": 3321, + "3556": 14, + "8874": 13, + "8860": 14, + "4527533": 2, + "9689": 32, + "4300668": 24, + "3552": 48, + "3553": 2, + "8868": 1124, + "5336": 365, + "8841": 4542, + "7294": 1604, + "6950": 15047, + "8863": 79, + "4542": 1, + "5474": 475, + "5345": 46 + }, + "predicted_counts": { + "3530": 439, + "8840": 1, + "5343": 507, + "7015": 6926, + "4532185": 12528, + "6950": 12882, + "9717": 158, + "8841": 2832, + "7294": 1227, + "6166": 1, + "7016": 2788, + "5336": 296, + "3556": 12, + "8874": 5, + "8860": 13, + "4527533": 1, + "9689": 18, + "4300668": 20, + "3552": 41, + "8868": 865, + "8861": 1, + "8838": 1, + "8863": 70, + "4864": 17, + "4542": 1, + "5474": 269, + "5345": 30, + "9412": 1, + "4870": 2 + }, + "official": { + "precision": { + "2": 0.739312514650181 + }, + "recall": { + "2": 0.7043557897606709 + }, + "f1": { + "2": 0.609419602563795 + }, + "micro_accuracy": { + "2": 0.9981407322654462 + }, + "coverage": { + "2": 0.7947260741077518 + } + }, + "truth_group_diagnostic": { + "precision": 0.9745483147661477, + "recall": 0.7043557897606709, + "f1": 0.794895133778863 + }, + "groups": { + "precision": { + "7015": [ + 0.9987005486572336, + 1.0 + ], + "3530": [ + 1.0, + 1.0 + ], + "5343": [ + 0.9921104536489151, + 1.0 + ], + "4532185": [ + 0.9992017879948915, + 1.0 + ], + "9717": [ + 1.0, + 1.0 + ], + "7016": [ + 0.9992826398852224, + 1.0 + ], + "3556": [ + 1.0, + 1.0 + ], + "8874": [ + 0.6, + 1.0 + ], + "8860": [ + 0.9230769230769231, + 1.0 + ], + "4527533": [ + 1.0, + 1.0 + ], + "9689": [ + 1.0, + 1.0 + ], + "4300668": [ + 0.95, + 1.0 + ], + "3552": [ + 1.0, + 1.0 + ], + "3553": [ + 1.0, + 0.0 + ], + "8868": [ + 1.0, + 1.0 + ], + "5336": [ + 0.9831081081081081, + 1.0 + ], + "8841": [ + 0.9978813559322034, + 1.0 + ], + "7294": [ + 0.9975550122249389, + 1.0 + ], + "6950": [ + 0.9991460953268126, + 1.0 + ], + "8863": [ + 1.0, + 1.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "5474": [ + 1.0, + 1.0 + ], + "5345": [ + 1.0, + 1.0 + ], + "5340": [ + 1.0, + 0.0 + ], + "8861": [ + 0.0, + 1.0 + ], + "8840": [ + 0.0, + 1.0 + ], + "6166": [ + 0.0, + 1.0 + ], + "4705755": [ + 1.0, + 0.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "4528997": [ + 1.0, + 0.0 + ], + "3528": [ + 1.0, + 0.0 + ], + "4300664": [ + 1.0, + 0.0 + ], + "4538": [ + 1.0, + 0.0 + ], + "8838": [ + 0.0, + 1.0 + ], + "8871": [ + 1.0, + 0.0 + ], + "5481": [ + 1.0, + 0.0 + ], + "7297": [ + 1.0, + 0.0 + ], + "7014": [ + 1.0, + 0.0 + ], + "5487": [ + 1.0, + 0.0 + ], + "8864": [ + 1.0, + 0.0 + ], + "4865": [ + 1.0, + 0.0 + ], + "5320": [ + 1.0, + 0.0 + ], + "9410": [ + 1.0, + 0.0 + ], + "4867": [ + 1.0, + 0.0 + ], + "8865": [ + 1.0, + 0.0 + ], + "4554": [ + 1.0, + 0.0 + ], + "3554": [ + 1.0, + 0.0 + ], + "8866": [ + 1.0, + 0.0 + ], + "7017": [ + 1.0, + 0.0 + ], + "4525465": [ + 1.0, + 0.0 + ], + "4870": [ + 0.0, + 1.0 + ], + "4864": [ + 0.0, + 1.0 + ], + "6946": [ + 1.0, + 0.0 + ], + "6953": [ + 1.0, + 0.0 + ], + "8855": [ + 1.0, + 0.0 + ], + "4525436": [ + 1.0, + 0.0 + ], + "6954": [ + 1.0, + 0.0 + ], + "5338": [ + 1.0, + 0.0 + ], + "9408": [ + 1.0, + 0.0 + ], + "8839": [ + 1.0, + 0.0 + ] + }, + "recall": { + "7015": [ + 0.7483501027804825, + 1.0 + ], + "3530": [ + 0.603021978021978, + 1.0 + ], + "5343": [ + 0.7958860759493671, + 1.0 + ], + "4532185": [ + 0.821337182599567, + 1.0 + ], + "9717": [ + 0.8272251308900523, + 1.0 + ], + "7016": [ + 0.8389039445950015, + 1.0 + ], + "3556": [ + 0.8571428571428571, + 1.0 + ], + "8874": [ + 0.23076923076923078, + 1.0 + ], + "8860": [ + 0.8571428571428571, + 1.0 + ], + "4527533": [ + 0.5, + 1.0 + ], + "9689": [ + 0.5625, + 1.0 + ], + "4300668": [ + 0.7916666666666666, + 1.0 + ], + "3552": [ + 0.8541666666666666, + 1.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8868": [ + 0.7695729537366548, + 1.0 + ], + "5336": [ + 0.7972602739726027, + 1.0 + ], + "8841": [ + 0.6221928665785997, + 1.0 + ], + "7294": [ + 0.7630922693266833, + 1.0 + ], + "6950": [ + 0.8553864557719146, + 1.0 + ], + "8863": [ + 0.8860759493670886, + 1.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "5474": [ + 0.5663157894736842, + 1.0 + ], + "5345": [ + 0.6521739130434783, + 1.0 + ] + }, + "f1": { + "4864": [ + 0.0, + 1.0 + ], + "8865": [ + 1.0, + 0.0 + ], + "3552": [ + 0.9213483146067415, + 1.0 + ], + "8868": [ + 0.8697838109602816, + 1.0 + ], + "8866": [ + 1.0, + 0.0 + ], + "4705755": [ + 1.0, + 0.0 + ], + "4527533": [ + 0.6666666666666666, + 1.0 + ], + "7294": [ + 0.86471211586012, + 1.0 + ], + "5345": [ + 0.7894736842105263, + 1.0 + ], + "6954": [ + 1.0, + 0.0 + ], + "5336": [ + 0.8804841149773072, + 1.0 + ], + "8839": [ + 1.0, + 0.0 + ], + "4554": [ + 1.0, + 0.0 + ], + "8860": [ + 0.8888888888888888, + 1.0 + ], + "4300664": [ + 1.0, + 0.0 + ], + "9410": [ + 1.0, + 0.0 + ], + "6946": [ + 1.0, + 0.0 + ], + "6166": [ + 0.0, + 1.0 + ], + "5481": [ + 1.0, + 0.0 + ], + "8840": [ + 0.0, + 1.0 + ], + "4532185": [ + 0.9015808995642624, + 1.0 + ], + "6950": [ + 0.9216942962512084, + 1.0 + ], + "8864": [ + 1.0, + 0.0 + ], + "4867": [ + 1.0, + 0.0 + ], + "9408": [ + 1.0, + 0.0 + ], + "4870": [ + 0.0, + 1.0 + ], + "8861": [ + 0.0, + 1.0 + ], + "8838": [ + 0.0, + 1.0 + ], + "8855": [ + 1.0, + 0.0 + ], + "9689": [ + 0.72, + 1.0 + ], + "4300668": [ + 0.8636363636363636, + 1.0 + ], + "4525465": [ + 1.0, + 0.0 + ], + "5474": [ + 0.7231182795698925, + 1.0 + ], + "3556": [ + 0.9230769230769229, + 1.0 + ], + "3530": [ + 0.7523564695801199, + 1.0 + ], + "3528": [ + 1.0, + 0.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "4528997": [ + 1.0, + 0.0 + ], + "7014": [ + 1.0, + 0.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8841": [ + 0.7664768104149715, + 1.0 + ], + "7017": [ + 1.0, + 0.0 + ], + "5340": [ + 1.0, + 0.0 + ], + "8874": [ + 0.3333333333333333, + 1.0 + ], + "7015": [ + 0.8555878532995239, + 1.0 + ], + "7016": [ + 0.9120969062039614, + 1.0 + ], + "5338": [ + 1.0, + 0.0 + ], + "7297": [ + 1.0, + 0.0 + ], + "5343": [ + 0.8832309043020192, + 1.0 + ], + "8863": [ + 0.9395973154362416, + 1.0 + ], + "8871": [ + 1.0, + 0.0 + ], + "6953": [ + 1.0, + 0.0 + ], + "4865": [ + 1.0, + 0.0 + ], + "5320": [ + 1.0, + 0.0 + ], + "3554": [ + 1.0, + 0.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "9717": [ + 0.9054441260744984, + 1.0 + ], + "4525436": [ + 1.0, + 0.0 + ], + "4538": [ + 1.0, + 0.0 + ], + "5487": [ + 1.0, + 0.0 + ] + } + }, + "predicted_only": { + "8840": 1, + "6166": 1, + "8861": 1, + "8838": 1, + "4864": 17, + "9412": 1, + "4870": 2 + }, + "truth_families_without_accepted_predictions": [ + "3553" + ], + "false_positive_pairs": [ + { + "truth": "4532185", + "prediction": "4864", + "images": 13 + }, + { + "truth": "7015", + "prediction": "4532185", + "images": 5 + }, + { + "truth": "6950", + "prediction": "4864", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "6950", + "images": 3 + }, + { + "truth": "7294", + "prediction": "6950", + "images": 3 + }, + { + "truth": "7015", + "prediction": "5343", + "images": 3 + }, + { + "truth": "7294", + "prediction": "7015", + "images": 3 + }, + { + "truth": "7015", + "prediction": "6950", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "7015", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "7294", + "images": 2 + }, + { + "truth": "9689", + "prediction": "8841", + "images": 2 + }, + { + "truth": "8841", + "prediction": "5336", + "images": 2 + }, + { + "truth": "7294", + "prediction": "7016", + "images": 2 + }, + { + "truth": "6950", + "prediction": "7015", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "5336", + "images": 2 + }, + { + "truth": "8868", + "prediction": "7015", + "images": 2 + }, + { + "truth": "8868", + "prediction": "4532185", + "images": 2 + }, + { + "truth": "6950", + "prediction": "4870", + "images": 2 + }, + { + "truth": "3530", + "prediction": "8840", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "8841", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "6166", + "images": 1 + }, + { + "truth": "7016", + "prediction": "5336", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8874", + "images": 1 + }, + { + "truth": "8841", + "prediction": "5343", + "images": 1 + }, + { + "truth": "8841", + "prediction": "4300668", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8861", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8860", + "images": 1 + }, + { + "truth": "8841", + "prediction": "6950", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8838", + "images": 1 + }, + { + "truth": "8863", + "prediction": "6950", + "images": 1 + }, + { + "truth": "6950", + "prediction": "7294", + "images": 1 + }, + { + "truth": "7015", + "prediction": "8874", + "images": 1 + }, + { + "truth": "3530", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "3530", + "prediction": "6950", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "9412", + "images": 1 + }, + { + "truth": "8868", + "prediction": "8841", + "images": 1 + }, + { + "truth": "5336", + "prediction": "8841", + "images": 1 + }, + { + "truth": "7294", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "6950", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "6950", + "prediction": "8841", + "images": 1 + } + ] + } + } + } +} diff --git a/docs/assets/mambo-frequency-accuracy.svg b/docs/assets/mambo-frequency-accuracy.svg new file mode 100644 index 0000000..205520f --- /dev/null +++ b/docs/assets/mambo-frequency-accuracy.svg @@ -0,0 +1,1465 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.10.9, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + n=16 + + + + + + + + + + 1–24 + n=0 + + + + + + + + + + 25–99 + n=7 + + + + + + + + + + 100–499 + n=68 + + + + + + + + + + 500–1999 + n=425 + + + + + + + + + + 2000–9999 + n=6 + + + + + + + + + + 10000+ + n=0 + + + + V3 training metadata rows / species + + + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + Macro species accuracy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + + + + + + 0 + n=16 + + + + + + + + + + 1–24 + n=0 + + + + + + + + + + 25–99 + n=7 + + + + + + + + + + 100–499 + n=68 + + + + + + + + + + 500–1999 + n=425 + + + + + + + + + + 2000–9999 + n=6 + + + + + + + + + + 10000+ + n=0 + + + + V3 training metadata rows / species + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Europe + + + + + + + + + + + + + + + 0 + n=16 + + + + + + + + + + 1–24 + n=0 + + + + + + + + + + 25–99 + n=7 + + + + + + + + + + 100–499 + n=68 + + + + + + + + + + 500–1999 + n=425 + + + + + + + + + + 2000–9999 + n=6 + + + + + + + + + + 10000+ + n=0 + + + + V3 training metadata rows / species + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Global + + + + + + + + + + + + + + + 1–4 + n=143 + + + + + + + + + + 5–19 + n=114 + + + + + + + + + + 20–99 + n=149 + + + + + + + + + + 100–499 + n=90 + + + + + + + + + + 500+ + n=26 + + + + Flemming images / species + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + Macro species accuracy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + + + + + + 1–4 + n=143 + + + + + + + + + + 5–19 + n=114 + + + + + + + + + + 20–99 + n=149 + + + + + + + + + + 100–499 + n=90 + + + + + + + + + + 500+ + n=26 + + + + Flemming images / species + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Europe + + + + + + + + + + + + + + + 1–4 + n=143 + + + + + + + + + + 5–19 + n=114 + + + + + + + + + + 20–99 + n=149 + + + + + + + + + + 100–499 + n=90 + + + + + + + + + + 500+ + n=26 + + + + Flemming images / species + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Global + + + + Accuracy versus class frequency · all Flemming truth + + + Pinned mini_metrics, no threshold optimization. n = species per bin; gaps = empty bins. All 522 truth species retained. + Training axis uses the common V3 source split (set 2–9), not verified V2 training exposure. Curves are descriptive; small bins are uncertain. + + + + + + + + + + V2 + + + + + + + + + V3 PyTorch + + + + + + + + + V3 ONNX + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/mambo-frequency-comparison.json b/docs/assets/mambo-frequency-comparison.json new file mode 100644 index 0000000..d10449d --- /dev/null +++ b/docs/assets/mambo-frequency-comparison.json @@ -0,0 +1,4657 @@ +{ + "revision": "70cc69adc05362863439277048e06386c1f885e1", + "policy": "threshold=0; optimal=False; simple=True; hierarchical=False", + "training_definition": "V3 source metadata rows with set 2..9; 0=test, 1=validation; no extra deduplication. Common reference axis, not a claim about V2 effective training exposures.", + "metadata_sha256": "094afa30bab25daad6583d33055bf7c61bcbade2f7f3c5e212d6b16fbf4429fe", + "training_rows": 5063857, + "bins": { + "training": [ + [ + 0, + 1 + ], + [ + 1, + 25 + ], + [ + 25, + 100 + ], + [ + 100, + 500 + ], + [ + 500, + 2000 + ], + [ + 2000, + 10000 + ], + [ + 10000, + null + ] + ], + "flemming": [ + [ + 1, + 5 + ], + [ + 5, + 20 + ], + [ + 20, + 100 + ], + [ + 100, + 500 + ], + [ + 500, + null + ] + ] + }, + "cells": [ + { + "model": "v2", + "preset": "north_europe", + "axis": "training", + "lower": 0, + "upper": 1, + "images": 8042, + "species": 16, + "known_images": 0, + "all": { + "accuracy": { + "0": 0.0 + }, + "micro_accuracy": { + "0": 0.0 + } + }, + "known": null + }, + { + "model": "v2", + "preset": "north_europe", + "axis": "training", + "lower": 1, + "upper": 25, + "images": 0, + "species": 0, + "known_images": 0, + "all": null, + "known": null + }, + { + "model": "v2", + "preset": "north_europe", + "axis": "training", + "lower": 25, + "upper": 100, + "images": 12, + "species": 7, + "known_images": 12, + "all": { + "accuracy": { + "0": 0.37142857142857144 + }, + "micro_accuracy": { + "0": 0.4166666666666667 + } + }, + "known": { + "accuracy": { + "0": 0.37142857142857144 + }, + "micro_accuracy": { + "0": 0.4166666666666667 + } + } + }, + { + "model": "v2", + "preset": "north_europe", + "axis": "training", + "lower": 100, + "upper": 500, + "images": 2181, + "species": 68, + "known_images": 2181, + "all": { + "accuracy": { + "0": 0.5142850661750477 + }, + "micro_accuracy": { + "0": 0.5286565795506648 + } + }, + "known": { + "accuracy": { + "0": 0.5142850661750477 + }, + "micro_accuracy": { + "0": 0.5286565795506648 + } + } + }, + { + "model": "v2", + "preset": "north_europe", + "axis": "training", + "lower": 500, + "upper": 2000, + "images": 44306, + "species": 425, + "known_images": 44306, + "all": { + "accuracy": { + "0": 0.7472193324343406 + }, + "micro_accuracy": { + "0": 0.8057148016070058 + } + }, + "known": { + "accuracy": { + "0": 0.7472193324343406 + }, + "micro_accuracy": { + "0": 0.8057148016070058 + } + } + }, + { + "model": "v2", + "preset": "north_europe", + "axis": "training", + "lower": 2000, + "upper": 10000, + "images": 4099, + "species": 6, + "known_images": 4099, + "all": { + "accuracy": { + "0": 0.42302004168769275 + }, + "micro_accuracy": { + "0": 0.8384971944376677 + } + }, + "known": { + "accuracy": { + "0": 0.42302004168769275 + }, + "micro_accuracy": { + "0": 0.8384971944376677 + } + } + }, + { + "model": "v2", + "preset": "north_europe", + "axis": "training", + "lower": 10000, + "upper": null, + "images": 0, + "species": 0, + "known_images": 0, + "all": null, + "known": null + }, + { + "model": "v2", + "preset": "north_europe", + "axis": "flemming", + "lower": 1, + "upper": 5, + "images": 277, + "species": 143, + "known_images": 268, + "all": { + "accuracy": { + "0": 0.5716783216783218 + }, + "micro_accuracy": { + "0": 0.592057761732852 + } + }, + "known": { + "accuracy": { + "0": 0.5923913043478262 + }, + "micro_accuracy": { + "0": 0.6119402985074627 + } + } + }, + { + "model": "v2", + "preset": "north_europe", + "axis": "flemming", + "lower": 5, + "upper": 20, + "images": 1167, + "species": 114, + "known_images": 1167, + "all": { + "accuracy": { + "0": 0.7024792928888983 + }, + "micro_accuracy": { + "0": 0.7180805484147387 + } + }, + "known": { + "accuracy": { + "0": 0.7024792928888983 + }, + "micro_accuracy": { + "0": 0.7180805484147387 + } + } + }, + { + "model": "v2", + "preset": "north_europe", + "axis": "flemming", + "lower": 20, + "upper": 100, + "images": 6850, + "species": 149, + "known_images": 6770, + "all": { + "accuracy": { + "0": 0.7423169463149213 + }, + "micro_accuracy": { + "0": 0.743941605839416 + } + }, + "known": { + "accuracy": { + "0": 0.7524164966049202 + }, + "micro_accuracy": { + "0": 0.7527326440177252 + } + } + }, + { + "model": "v2", + "preset": "north_europe", + "axis": "flemming", + "lower": 100, + "upper": 500, + "images": 21268, + "species": 90, + "known_images": 20094, + "all": { + "accuracy": { + "0": 0.759559314485011 + }, + "micro_accuracy": { + "0": 0.7495298100432575 + } + }, + "known": { + "accuracy": { + "0": 0.7948876546936162 + }, + "micro_accuracy": { + "0": 0.7933213894694934 + } + } + }, + { + "model": "v2", + "preset": "north_europe", + "axis": "flemming", + "lower": 500, + "upper": null, + "images": 29078, + "species": 26, + "known_images": 22299, + "all": { + "accuracy": { + "0": 0.649212243873666 + }, + "micro_accuracy": { + "0": 0.6277598184194236 + } + }, + "known": { + "accuracy": { + "0": 0.8037865876531104 + }, + "micro_accuracy": { + "0": 0.8186017310193282 + } + } + }, + { + "model": "v2", + "preset": "europe", + "axis": "training", + "lower": 0, + "upper": 1, + "images": 8042, + "species": 16, + "known_images": 0, + "all": { + "accuracy": { + "0": 0.0 + }, + "micro_accuracy": { + "0": 0.0 + } + }, + "known": null + }, + { + "model": "v2", + "preset": "europe", + "axis": "training", + "lower": 1, + "upper": 25, + "images": 0, + "species": 0, + "known_images": 0, + "all": null, + "known": null + }, + { + "model": "v2", + "preset": "europe", + "axis": "training", + "lower": 25, + "upper": 100, + "images": 12, + "species": 7, + "known_images": 12, + "all": { + "accuracy": { + "0": 0.2857142857142857 + }, + "micro_accuracy": { + "0": 0.16666666666666666 + } + }, + "known": { + "accuracy": { + "0": 0.2857142857142857 + }, + "micro_accuracy": { + "0": 0.16666666666666666 + } + } + }, + { + "model": "v2", + "preset": "europe", + "axis": "training", + "lower": 100, + "upper": 500, + "images": 2181, + "species": 68, + "known_images": 2181, + "all": { + "accuracy": { + "0": 0.49142442644041084 + }, + "micro_accuracy": { + "0": 0.49931224209078406 + } + }, + "known": { + "accuracy": { + "0": 0.49142442644041084 + }, + "micro_accuracy": { + "0": 0.49931224209078406 + } + } + }, + { + "model": "v2", + "preset": "europe", + "axis": "training", + "lower": 500, + "upper": 2000, + "images": 44306, + "species": 425, + "known_images": 44306, + "all": { + "accuracy": { + "0": 0.7219435616502283 + }, + "micro_accuracy": { + "0": 0.7847469868640816 + } + }, + "known": { + "accuracy": { + "0": 0.7219435616502283 + }, + "micro_accuracy": { + "0": 0.7847469868640816 + } + } + }, + { + "model": "v2", + "preset": "europe", + "axis": "training", + "lower": 2000, + "upper": 10000, + "images": 4099, + "species": 6, + "known_images": 4099, + "all": { + "accuracy": { + "0": 0.41658516519375216 + }, + "micro_accuracy": { + "0": 0.8306904122956819 + } + }, + "known": { + "accuracy": { + "0": 0.41658516519375216 + }, + "micro_accuracy": { + "0": 0.8306904122956819 + } + } + }, + { + "model": "v2", + "preset": "europe", + "axis": "training", + "lower": 10000, + "upper": null, + "images": 0, + "species": 0, + "known_images": 0, + "all": null, + "known": null + }, + { + "model": "v2", + "preset": "europe", + "axis": "flemming", + "lower": 1, + "upper": 5, + "images": 277, + "species": 143, + "known_images": 268, + "all": { + "accuracy": { + "0": 0.5594405594405595 + }, + "micro_accuracy": { + "0": 0.5776173285198556 + } + }, + "known": { + "accuracy": { + "0": 0.5797101449275363 + }, + "micro_accuracy": { + "0": 0.5970149253731343 + } + } + }, + { + "model": "v2", + "preset": "europe", + "axis": "flemming", + "lower": 5, + "upper": 20, + "images": 1167, + "species": 114, + "known_images": 1167, + "all": { + "accuracy": { + "0": 0.6636656428472464 + }, + "micro_accuracy": { + "0": 0.6846615252784919 + } + }, + "known": { + "accuracy": { + "0": 0.6636656428472464 + }, + "micro_accuracy": { + "0": 0.6846615252784919 + } + } + }, + { + "model": "v2", + "preset": "europe", + "axis": "flemming", + "lower": 20, + "upper": 100, + "images": 6850, + "species": 149, + "known_images": 6770, + "all": { + "accuracy": { + "0": 0.714096583377111 + }, + "micro_accuracy": { + "0": 0.7096350364963504 + } + }, + "known": { + "accuracy": { + "0": 0.7238121831509492 + }, + "micro_accuracy": { + "0": 0.7180206794682422 + } + } + }, + { + "model": "v2", + "preset": "europe", + "axis": "flemming", + "lower": 100, + "upper": 500, + "images": 21268, + "species": 90, + "known_images": 20094, + "all": { + "accuracy": { + "0": 0.735043508544543 + }, + "micro_accuracy": { + "0": 0.729687793868723 + } + }, + "known": { + "accuracy": { + "0": 0.7692315787094055 + }, + "micro_accuracy": { + "0": 0.7723200955509107 + } + } + }, + { + "model": "v2", + "preset": "europe", + "axis": "flemming", + "lower": 500, + "upper": null, + "images": 29078, + "species": 26, + "known_images": 22299, + "all": { + "accuracy": { + "0": 0.6357767582181892 + }, + "micro_accuracy": { + "0": 0.616479812916982 + } + }, + "known": { + "accuracy": { + "0": 0.7871521768415677 + }, + "micro_accuracy": { + "0": 0.8038925512354814 + } + } + }, + { + "model": "v2", + "preset": "full", + "axis": "training", + "lower": 0, + "upper": 1, + "images": 8042, + "species": 16, + "known_images": 0, + "all": { + "accuracy": { + "0": 0.0 + }, + "micro_accuracy": { + "0": 0.0 + } + }, + "known": null + }, + { + "model": "v2", + "preset": "full", + "axis": "training", + "lower": 1, + "upper": 25, + "images": 0, + "species": 0, + "known_images": 0, + "all": null, + "known": null + }, + { + "model": "v2", + "preset": "full", + "axis": "training", + "lower": 25, + "upper": 100, + "images": 12, + "species": 7, + "known_images": 12, + "all": { + "accuracy": { + "0": 0.2857142857142857 + }, + "micro_accuracy": { + "0": 0.16666666666666666 + } + }, + "known": { + "accuracy": { + "0": 0.2857142857142857 + }, + "micro_accuracy": { + "0": 0.16666666666666666 + } + } + }, + { + "model": "v2", + "preset": "full", + "axis": "training", + "lower": 100, + "upper": 500, + "images": 2181, + "species": 68, + "known_images": 2181, + "all": { + "accuracy": { + "0": 0.4221811243161066 + }, + "micro_accuracy": { + "0": 0.4442916093535076 + } + }, + "known": { + "accuracy": { + "0": 0.4221811243161066 + }, + "micro_accuracy": { + "0": 0.4442916093535076 + } + } + }, + { + "model": "v2", + "preset": "full", + "axis": "training", + "lower": 500, + "upper": 2000, + "images": 44306, + "species": 425, + "known_images": 44306, + "all": { + "accuracy": { + "0": 0.6255201934340949 + }, + "micro_accuracy": { + "0": 0.6952105809596895 + } + }, + "known": { + "accuracy": { + "0": 0.6255201934340949 + }, + "micro_accuracy": { + "0": 0.6952105809596895 + } + } + }, + { + "model": "v2", + "preset": "full", + "axis": "training", + "lower": 2000, + "upper": 10000, + "images": 4099, + "species": 6, + "known_images": 4099, + "all": { + "accuracy": { + "0": 0.343730230685024 + }, + "micro_accuracy": { + "0": 0.7406684557209076 + } + }, + "known": { + "accuracy": { + "0": 0.343730230685024 + }, + "micro_accuracy": { + "0": 0.7406684557209076 + } + } + }, + { + "model": "v2", + "preset": "full", + "axis": "training", + "lower": 10000, + "upper": null, + "images": 0, + "species": 0, + "known_images": 0, + "all": null, + "known": null + }, + { + "model": "v2", + "preset": "full", + "axis": "flemming", + "lower": 1, + "upper": 5, + "images": 277, + "species": 143, + "known_images": 268, + "all": { + "accuracy": { + "0": 0.48426573426573427 + }, + "micro_accuracy": { + "0": 0.5054151624548736 + } + }, + "known": { + "accuracy": { + "0": 0.5018115942028986 + }, + "micro_accuracy": { + "0": 0.5223880597014925 + } + } + }, + { + "model": "v2", + "preset": "full", + "axis": "flemming", + "lower": 5, + "upper": 20, + "images": 1167, + "species": 114, + "known_images": 1167, + "all": { + "accuracy": { + "0": 0.558859427910878 + }, + "micro_accuracy": { + "0": 0.5801199657240789 + } + }, + "known": { + "accuracy": { + "0": 0.558859427910878 + }, + "micro_accuracy": { + "0": 0.5801199657240789 + } + } + }, + { + "model": "v2", + "preset": "full", + "axis": "flemming", + "lower": 20, + "upper": 100, + "images": 6850, + "species": 149, + "known_images": 6770, + "all": { + "accuracy": { + "0": 0.6198802522227109 + }, + "micro_accuracy": { + "0": 0.6169343065693431 + } + }, + "known": { + "accuracy": { + "0": 0.6283139971509111 + }, + "micro_accuracy": { + "0": 0.6242245199409158 + } + } + }, + { + "model": "v2", + "preset": "full", + "axis": "flemming", + "lower": 100, + "upper": 500, + "images": 21268, + "species": 90, + "known_images": 20094, + "all": { + "accuracy": { + "0": 0.6541954896565274 + }, + "micro_accuracy": { + "0": 0.6529057739326688 + } + }, + "known": { + "accuracy": { + "0": 0.6846231868498542 + }, + "micro_accuracy": { + "0": 0.6910520553399024 + } + } + }, + { + "model": "v2", + "preset": "full", + "axis": "flemming", + "lower": 500, + "upper": null, + "images": 29078, + "species": 26, + "known_images": 22299, + "all": { + "accuracy": { + "0": 0.5545020621147803 + }, + "micro_accuracy": { + "0": 0.546117339569434 + } + }, + "known": { + "accuracy": { + "0": 0.6865263626182994 + }, + "micro_accuracy": { + "0": 0.7121395578277053 + } + } + }, + { + "model": "v3-torch", + "preset": "north_europe", + "axis": "training", + "lower": 0, + "upper": 1, + "images": 8042, + "species": 16, + "known_images": 0, + "all": { + "accuracy": { + "0": 0.0 + }, + "micro_accuracy": { + "0": 0.0 + } + }, + "known": null + }, + { + "model": "v3-torch", + "preset": "north_europe", + "axis": "training", + "lower": 1, + "upper": 25, + "images": 0, + "species": 0, + "known_images": 0, + "all": null, + "known": null + }, + { + "model": "v3-torch", + "preset": "north_europe", + "axis": "training", + "lower": 25, + "upper": 100, + "images": 12, + "species": 7, + "known_images": 12, + "all": { + "accuracy": { + "0": 0.4571428571428572 + }, + "micro_accuracy": { + "0": 0.3333333333333333 + } + }, + "known": { + "accuracy": { + "0": 0.4571428571428572 + }, + "micro_accuracy": { + "0": 0.3333333333333333 + } + } + }, + { + "model": "v3-torch", + "preset": "north_europe", + "axis": "training", + "lower": 100, + "upper": 500, + "images": 2181, + "species": 68, + "known_images": 2181, + "all": { + "accuracy": { + "0": 0.5294764906586549 + }, + "micro_accuracy": { + "0": 0.5396607060981201 + } + }, + "known": { + "accuracy": { + "0": 0.5294764906586549 + }, + "micro_accuracy": { + "0": 0.5396607060981201 + } + } + }, + { + "model": "v3-torch", + "preset": "north_europe", + "axis": "training", + "lower": 500, + "upper": 2000, + "images": 44306, + "species": 425, + "known_images": 44306, + "all": { + "accuracy": { + "0": 0.7741614686935845 + }, + "micro_accuracy": { + "0": 0.8308355527468063 + } + }, + "known": { + "accuracy": { + "0": 0.7741614686935845 + }, + "micro_accuracy": { + "0": 0.8308355527468063 + } + } + }, + { + "model": "v3-torch", + "preset": "north_europe", + "axis": "training", + "lower": 2000, + "upper": 10000, + "images": 4099, + "species": 6, + "known_images": 4099, + "all": { + "accuracy": { + "0": 0.6148702492977822 + }, + "micro_accuracy": { + "0": 0.8575262259087583 + } + }, + "known": { + "accuracy": { + "0": 0.6148702492977822 + }, + "micro_accuracy": { + "0": 0.8575262259087583 + } + } + }, + { + "model": "v3-torch", + "preset": "north_europe", + "axis": "training", + "lower": 10000, + "upper": null, + "images": 0, + "species": 0, + "known_images": 0, + "all": null, + "known": null + }, + { + "model": "v3-torch", + "preset": "north_europe", + "axis": "flemming", + "lower": 1, + "upper": 5, + "images": 277, + "species": 143, + "known_images": 268, + "all": { + "accuracy": { + "0": 0.618881118881119 + }, + "micro_accuracy": { + "0": 0.6064981949458483 + } + }, + "known": { + "accuracy": { + "0": 0.641304347826087 + }, + "micro_accuracy": { + "0": 0.6268656716417911 + } + } + }, + { + "model": "v3-torch", + "preset": "north_europe", + "axis": "flemming", + "lower": 5, + "upper": 20, + "images": 1167, + "species": 114, + "known_images": 1167, + "all": { + "accuracy": { + "0": 0.7068550945852561 + }, + "micro_accuracy": { + "0": 0.7206512425021423 + } + }, + "known": { + "accuracy": { + "0": 0.7068550945852561 + }, + "micro_accuracy": { + "0": 0.7206512425021423 + } + } + }, + { + "model": "v3-torch", + "preset": "north_europe", + "axis": "flemming", + "lower": 20, + "upper": 100, + "images": 6850, + "species": 149, + "known_images": 6770, + "all": { + "accuracy": { + "0": 0.7712642164467741 + }, + "micro_accuracy": { + "0": 0.7662773722627737 + } + }, + "known": { + "accuracy": { + "0": 0.7817576071467303 + }, + "micro_accuracy": { + "0": 0.7753323485967504 + } + } + }, + { + "model": "v3-torch", + "preset": "north_europe", + "axis": "flemming", + "lower": 100, + "upper": 500, + "images": 21268, + "species": 90, + "known_images": 20094, + "all": { + "accuracy": { + "0": 0.7805686204738644 + }, + "micro_accuracy": { + "0": 0.7753902576640963 + } + }, + "known": { + "accuracy": { + "0": 0.8168741377052069 + }, + "micro_accuracy": { + "0": 0.8206927441027172 + } + } + }, + { + "model": "v3-torch", + "preset": "north_europe", + "axis": "flemming", + "lower": 500, + "upper": null, + "images": 29078, + "species": 26, + "known_images": 22299, + "all": { + "accuracy": { + "0": 0.6792777761312336 + }, + "micro_accuracy": { + "0": 0.6450925098012243 + } + }, + "known": { + "accuracy": { + "0": 0.8410105799720036 + }, + "micro_accuracy": { + "0": 0.8412036414188977 + } + } + }, + { + "model": "v3-torch", + "preset": "europe", + "axis": "training", + "lower": 0, + "upper": 1, + "images": 8042, + "species": 16, + "known_images": 0, + "all": { + "accuracy": { + "0": 0.0 + }, + "micro_accuracy": { + "0": 0.0 + } + }, + "known": null + }, + { + "model": "v3-torch", + "preset": "europe", + "axis": "training", + "lower": 1, + "upper": 25, + "images": 0, + "species": 0, + "known_images": 0, + "all": null, + "known": null + }, + { + "model": "v3-torch", + "preset": "europe", + "axis": "training", + "lower": 25, + "upper": 100, + "images": 12, + "species": 7, + "known_images": 12, + "all": { + "accuracy": { + "0": 0.42857142857142855 + }, + "micro_accuracy": { + "0": 0.25 + } + }, + "known": { + "accuracy": { + "0": 0.42857142857142855 + }, + "micro_accuracy": { + "0": 0.25 + } + } + }, + { + "model": "v3-torch", + "preset": "europe", + "axis": "training", + "lower": 100, + "upper": 500, + "images": 2181, + "species": 68, + "known_images": 2181, + "all": { + "accuracy": { + "0": 0.5027782329312693 + }, + "micro_accuracy": { + "0": 0.5153599266391563 + } + }, + "known": { + "accuracy": { + "0": 0.5027782329312693 + }, + "micro_accuracy": { + "0": 0.5153599266391563 + } + } + }, + { + "model": "v3-torch", + "preset": "europe", + "axis": "training", + "lower": 500, + "upper": 2000, + "images": 44306, + "species": 425, + "known_images": 44306, + "all": { + "accuracy": { + "0": 0.7518730716685684 + }, + "micro_accuracy": { + "0": 0.8079266916444725 + } + }, + "known": { + "accuracy": { + "0": 0.7518730716685684 + }, + "micro_accuracy": { + "0": 0.8079266916444725 + } + } + }, + { + "model": "v3-torch", + "preset": "europe", + "axis": "training", + "lower": 2000, + "upper": 10000, + "images": 4099, + "species": 6, + "known_images": 4099, + "all": { + "accuracy": { + "0": 0.6139611166303579 + }, + "micro_accuracy": { + "0": 0.8550866064893876 + } + }, + "known": { + "accuracy": { + "0": 0.6139611166303579 + }, + "micro_accuracy": { + "0": 0.8550866064893876 + } + } + }, + { + "model": "v3-torch", + "preset": "europe", + "axis": "training", + "lower": 10000, + "upper": null, + "images": 0, + "species": 0, + "known_images": 0, + "all": null, + "known": null + }, + { + "model": "v3-torch", + "preset": "europe", + "axis": "flemming", + "lower": 1, + "upper": 5, + "images": 277, + "species": 143, + "known_images": 268, + "all": { + "accuracy": { + "0": 0.5996503496503498 + }, + "micro_accuracy": { + "0": 0.592057761732852 + } + }, + "known": { + "accuracy": { + "0": 0.621376811594203 + }, + "micro_accuracy": { + "0": 0.6119402985074627 + } + } + }, + { + "model": "v3-torch", + "preset": "europe", + "axis": "flemming", + "lower": 5, + "upper": 20, + "images": 1167, + "species": 114, + "known_images": 1167, + "all": { + "accuracy": { + "0": 0.6857834978119727 + }, + "micro_accuracy": { + "0": 0.702656383890317 + } + }, + "known": { + "accuracy": { + "0": 0.6857834978119727 + }, + "micro_accuracy": { + "0": 0.702656383890317 + } + } + }, + { + "model": "v3-torch", + "preset": "europe", + "axis": "flemming", + "lower": 20, + "upper": 100, + "images": 6850, + "species": 149, + "known_images": 6770, + "all": { + "accuracy": { + "0": 0.7458012717335286 + }, + "micro_accuracy": { + "0": 0.7416058394160584 + } + }, + "known": { + "accuracy": { + "0": 0.7559482278115358 + }, + "micro_accuracy": { + "0": 0.7503692762186115 + } + } + }, + { + "model": "v3-torch", + "preset": "europe", + "axis": "flemming", + "lower": 100, + "upper": 500, + "images": 21268, + "species": 90, + "known_images": 20094, + "all": { + "accuracy": { + "0": 0.7576738641751809 + }, + "micro_accuracy": { + "0": 0.7546078615760767 + } + }, + "known": { + "accuracy": { + "0": 0.7929145090205382 + }, + "micro_accuracy": { + "0": 0.7986961281974719 + } + } + }, + { + "model": "v3-torch", + "preset": "europe", + "axis": "flemming", + "lower": 500, + "upper": null, + "images": 29078, + "species": 26, + "known_images": 22299, + "all": { + "accuracy": { + "0": 0.6605533070624363 + }, + "micro_accuracy": { + "0": 0.6298576243207924 + } + }, + "known": { + "accuracy": { + "0": 0.8178279039820641 + }, + "micro_accuracy": { + "0": 0.8213372796986412 + } + } + }, + { + "model": "v3-torch", + "preset": "full", + "axis": "training", + "lower": 0, + "upper": 1, + "images": 8042, + "species": 16, + "known_images": 0, + "all": { + "accuracy": { + "0": 0.0 + }, + "micro_accuracy": { + "0": 0.0 + } + }, + "known": null + }, + { + "model": "v3-torch", + "preset": "full", + "axis": "training", + "lower": 1, + "upper": 25, + "images": 0, + "species": 0, + "known_images": 0, + "all": null, + "known": null + }, + { + "model": "v3-torch", + "preset": "full", + "axis": "training", + "lower": 25, + "upper": 100, + "images": 12, + "species": 7, + "known_images": 12, + "all": { + "accuracy": { + "0": 0.2857142857142857 + }, + "micro_accuracy": { + "0": 0.16666666666666666 + } + }, + "known": { + "accuracy": { + "0": 0.2857142857142857 + }, + "micro_accuracy": { + "0": 0.16666666666666666 + } + } + }, + { + "model": "v3-torch", + "preset": "full", + "axis": "training", + "lower": 100, + "upper": 500, + "images": 2181, + "species": 68, + "known_images": 2181, + "all": { + "accuracy": { + "0": 0.40810341985056175 + }, + "micro_accuracy": { + "0": 0.4039431453461715 + } + }, + "known": { + "accuracy": { + "0": 0.40810341985056175 + }, + "micro_accuracy": { + "0": 0.4039431453461715 + } + } + }, + { + "model": "v3-torch", + "preset": "full", + "axis": "training", + "lower": 500, + "upper": 2000, + "images": 44306, + "species": 425, + "known_images": 44306, + "all": { + "accuracy": { + "0": 0.6347917204341529 + }, + "micro_accuracy": { + "0": 0.6878978016521464 + } + }, + "known": { + "accuracy": { + "0": 0.6347917204341529 + }, + "micro_accuracy": { + "0": 0.6878978016521464 + } + } + }, + { + "model": "v3-torch", + "preset": "full", + "axis": "training", + "lower": 2000, + "upper": 10000, + "images": 4099, + "species": 6, + "known_images": 4099, + "all": { + "accuracy": { + "0": 0.5450344629694924 + }, + "micro_accuracy": { + "0": 0.7067577457916565 + } + }, + "known": { + "accuracy": { + "0": 0.5450344629694924 + }, + "micro_accuracy": { + "0": 0.7067577457916565 + } + } + }, + { + "model": "v3-torch", + "preset": "full", + "axis": "training", + "lower": 10000, + "upper": null, + "images": 0, + "species": 0, + "known_images": 0, + "all": null, + "known": null + }, + { + "model": "v3-torch", + "preset": "full", + "axis": "flemming", + "lower": 1, + "upper": 5, + "images": 277, + "species": 143, + "known_images": 268, + "all": { + "accuracy": { + "0": 0.5087412587412588 + }, + "micro_accuracy": { + "0": 0.5018050541516246 + } + }, + "known": { + "accuracy": { + "0": 0.5271739130434783 + }, + "micro_accuracy": { + "0": 0.5186567164179104 + } + } + }, + { + "model": "v3-torch", + "preset": "full", + "axis": "flemming", + "lower": 5, + "upper": 20, + "images": 1167, + "species": 114, + "known_images": 1167, + "all": { + "accuracy": { + "0": 0.5648057090119578 + }, + "micro_accuracy": { + "0": 0.5895458440445587 + } + }, + "known": { + "accuracy": { + "0": 0.5648057090119578 + }, + "micro_accuracy": { + "0": 0.5895458440445587 + } + } + }, + { + "model": "v3-torch", + "preset": "full", + "axis": "flemming", + "lower": 20, + "upper": 100, + "images": 6850, + "species": 149, + "known_images": 6770, + "all": { + "accuracy": { + "0": 0.617352684421439 + }, + "micro_accuracy": { + "0": 0.614014598540146 + } + }, + "known": { + "accuracy": { + "0": 0.6257520406720708 + }, + "micro_accuracy": { + "0": 0.6212703101920236 + } + } + }, + { + "model": "v3-torch", + "preset": "full", + "axis": "flemming", + "lower": 100, + "upper": 500, + "images": 21268, + "species": 90, + "known_images": 20094, + "all": { + "accuracy": { + "0": 0.6556269093929604 + }, + "micro_accuracy": { + "0": 0.6509309761143502 + } + }, + "known": { + "accuracy": { + "0": 0.6861211842484469 + }, + "micro_accuracy": { + "0": 0.6889618791679109 + } + } + }, + { + "model": "v3-torch", + "preset": "full", + "axis": "flemming", + "lower": 500, + "upper": null, + "images": 29078, + "species": 26, + "known_images": 22299, + "all": { + "accuracy": { + "0": 0.564534533101768 + }, + "micro_accuracy": { + "0": 0.5289565994910241 + } + }, + "known": { + "accuracy": { + "0": 0.6989475171736176 + }, + "micro_accuracy": { + "0": 0.6897618727297188 + } + } + }, + { + "model": "v3-onnx", + "preset": "north_europe", + "axis": "training", + "lower": 0, + "upper": 1, + "images": 8042, + "species": 16, + "known_images": 0, + "all": { + "accuracy": { + "0": 0.0 + }, + "micro_accuracy": { + "0": 0.0 + } + }, + "known": null + }, + { + "model": "v3-onnx", + "preset": "north_europe", + "axis": "training", + "lower": 1, + "upper": 25, + "images": 0, + "species": 0, + "known_images": 0, + "all": null, + "known": null + }, + { + "model": "v3-onnx", + "preset": "north_europe", + "axis": "training", + "lower": 25, + "upper": 100, + "images": 12, + "species": 7, + "known_images": 12, + "all": { + "accuracy": { + "0": 0.4571428571428572 + }, + "micro_accuracy": { + "0": 0.3333333333333333 + } + }, + "known": { + "accuracy": { + "0": 0.4571428571428572 + }, + "micro_accuracy": { + "0": 0.3333333333333333 + } + } + }, + { + "model": "v3-onnx", + "preset": "north_europe", + "axis": "training", + "lower": 100, + "upper": 500, + "images": 2181, + "species": 68, + "known_images": 2181, + "all": { + "accuracy": { + "0": 0.5297053122217539 + }, + "micro_accuracy": { + "0": 0.5392022008253095 + } + }, + "known": { + "accuracy": { + "0": 0.5297053122217539 + }, + "micro_accuracy": { + "0": 0.5392022008253095 + } + } + }, + { + "model": "v3-onnx", + "preset": "north_europe", + "axis": "training", + "lower": 500, + "upper": 2000, + "images": 44306, + "species": 425, + "known_images": 44306, + "all": { + "accuracy": { + "0": 0.7739755383195107 + }, + "micro_accuracy": { + "0": 0.8308355527468063 + } + }, + "known": { + "accuracy": { + "0": 0.7739755383195107 + }, + "micro_accuracy": { + "0": 0.8308355527468063 + } + } + }, + { + "model": "v3-onnx", + "preset": "north_europe", + "axis": "training", + "lower": 2000, + "upper": 10000, + "images": 4099, + "species": 6, + "known_images": 4099, + "all": { + "accuracy": { + "0": 0.6149671203623952 + }, + "micro_accuracy": { + "0": 0.8580141497926324 + } + }, + "known": { + "accuracy": { + "0": 0.6149671203623952 + }, + "micro_accuracy": { + "0": 0.8580141497926324 + } + } + }, + { + "model": "v3-onnx", + "preset": "north_europe", + "axis": "training", + "lower": 10000, + "upper": null, + "images": 0, + "species": 0, + "known_images": 0, + "all": null, + "known": null + }, + { + "model": "v3-onnx", + "preset": "north_europe", + "axis": "flemming", + "lower": 1, + "upper": 5, + "images": 277, + "species": 143, + "known_images": 268, + "all": { + "accuracy": { + "0": 0.618881118881119 + }, + "micro_accuracy": { + "0": 0.6064981949458483 + } + }, + "known": { + "accuracy": { + "0": 0.641304347826087 + }, + "micro_accuracy": { + "0": 0.6268656716417911 + } + } + }, + { + "model": "v3-onnx", + "preset": "north_europe", + "axis": "flemming", + "lower": 5, + "upper": 20, + "images": 1167, + "species": 114, + "known_images": 1167, + "all": { + "accuracy": { + "0": 0.7051007086203438 + }, + "micro_accuracy": { + "0": 0.7197943444730077 + } + }, + "known": { + "accuracy": { + "0": 0.7051007086203438 + }, + "micro_accuracy": { + "0": 0.7197943444730077 + } + } + }, + { + "model": "v3-onnx", + "preset": "north_europe", + "axis": "flemming", + "lower": 20, + "upper": 100, + "images": 6850, + "species": 149, + "known_images": 6770, + "all": { + "accuracy": { + "0": 0.7721266730609904 + }, + "micro_accuracy": { + "0": 0.7668613138686131 + } + }, + "known": { + "accuracy": { + "0": 0.7826317978645413 + }, + "micro_accuracy": { + "0": 0.7759231905465288 + } + } + }, + { + "model": "v3-onnx", + "preset": "north_europe", + "axis": "flemming", + "lower": 100, + "upper": 500, + "images": 21268, + "species": 90, + "known_images": 20094, + "all": { + "accuracy": { + "0": 0.7807117101111073 + }, + "micro_accuracy": { + "0": 0.775343238668422 + } + }, + "known": { + "accuracy": { + "0": 0.8170238826744146 + }, + "micro_accuracy": { + "0": 0.8206429780033841 + } + } + }, + { + "model": "v3-onnx", + "preset": "north_europe", + "axis": "flemming", + "lower": 500, + "upper": null, + "images": 29078, + "species": 26, + "known_images": 22299, + "all": { + "accuracy": { + "0": 0.6791137984707333 + }, + "micro_accuracy": { + "0": 0.6450581195405461 + } + }, + "known": { + "accuracy": { + "0": 0.840807560011384 + }, + "micro_accuracy": { + "0": 0.8411587963585812 + } + } + }, + { + "model": "v3-onnx", + "preset": "europe", + "axis": "training", + "lower": 0, + "upper": 1, + "images": 8042, + "species": 16, + "known_images": 0, + "all": { + "accuracy": { + "0": 0.0 + }, + "micro_accuracy": { + "0": 0.0 + } + }, + "known": null + }, + { + "model": "v3-onnx", + "preset": "europe", + "axis": "training", + "lower": 1, + "upper": 25, + "images": 0, + "species": 0, + "known_images": 0, + "all": null, + "known": null + }, + { + "model": "v3-onnx", + "preset": "europe", + "axis": "training", + "lower": 25, + "upper": 100, + "images": 12, + "species": 7, + "known_images": 12, + "all": { + "accuracy": { + "0": 0.42857142857142855 + }, + "micro_accuracy": { + "0": 0.25 + } + }, + "known": { + "accuracy": { + "0": 0.42857142857142855 + }, + "micro_accuracy": { + "0": 0.25 + } + } + }, + { + "model": "v3-onnx", + "preset": "europe", + "axis": "training", + "lower": 100, + "upper": 500, + "images": 2181, + "species": 68, + "known_images": 2181, + "all": { + "accuracy": { + "0": 0.5030070544943686 + }, + "micro_accuracy": { + "0": 0.5149014213663458 + } + }, + "known": { + "accuracy": { + "0": 0.5030070544943686 + }, + "micro_accuracy": { + "0": 0.5149014213663458 + } + } + }, + { + "model": "v3-onnx", + "preset": "europe", + "axis": "training", + "lower": 500, + "upper": 2000, + "images": 44306, + "species": 425, + "known_images": 44306, + "all": { + "accuracy": { + "0": 0.7520422244208899 + }, + "micro_accuracy": { + "0": 0.8079944025639868 + } + }, + "known": { + "accuracy": { + "0": 0.7520422244208899 + }, + "micro_accuracy": { + "0": 0.8079944025639868 + } + } + }, + { + "model": "v3-onnx", + "preset": "europe", + "axis": "training", + "lower": 2000, + "upper": 10000, + "images": 4099, + "species": 6, + "known_images": 4099, + "all": { + "accuracy": { + "0": 0.6140579876949709 + }, + "micro_accuracy": { + "0": 0.8555745303732618 + } + }, + "known": { + "accuracy": { + "0": 0.6140579876949709 + }, + "micro_accuracy": { + "0": 0.8555745303732618 + } + } + }, + { + "model": "v3-onnx", + "preset": "europe", + "axis": "training", + "lower": 10000, + "upper": null, + "images": 0, + "species": 0, + "known_images": 0, + "all": null, + "known": null + }, + { + "model": "v3-onnx", + "preset": "europe", + "axis": "flemming", + "lower": 1, + "upper": 5, + "images": 277, + "species": 143, + "known_images": 268, + "all": { + "accuracy": { + "0": 0.5996503496503498 + }, + "micro_accuracy": { + "0": 0.592057761732852 + } + }, + "known": { + "accuracy": { + "0": 0.621376811594203 + }, + "micro_accuracy": { + "0": 0.6119402985074627 + } + } + }, + { + "model": "v3-onnx", + "preset": "europe", + "axis": "flemming", + "lower": 5, + "upper": 20, + "images": 1167, + "species": 114, + "known_images": 1167, + "all": { + "accuracy": { + "0": 0.6857834978119727 + }, + "micro_accuracy": { + "0": 0.702656383890317 + } + }, + "known": { + "accuracy": { + "0": 0.6857834978119727 + }, + "micro_accuracy": { + "0": 0.702656383890317 + } + } + }, + { + "model": "v3-onnx", + "preset": "europe", + "axis": "flemming", + "lower": 20, + "upper": 100, + "images": 6850, + "species": 149, + "known_images": 6770, + "all": { + "accuracy": { + "0": 0.746151051241108 + }, + "micro_accuracy": { + "0": 0.7417518248175182 + } + }, + "known": { + "accuracy": { + "0": 0.7563027662239802 + }, + "micro_accuracy": { + "0": 0.7505169867060562 + } + } + }, + { + "model": "v3-onnx", + "preset": "europe", + "axis": "flemming", + "lower": 100, + "upper": 500, + "images": 21268, + "species": 90, + "known_images": 20094, + "all": { + "accuracy": { + "0": 0.7580992662369584 + }, + "micro_accuracy": { + "0": 0.7547489185630994 + } + }, + "known": { + "accuracy": { + "0": 0.793359697224724 + }, + "micro_accuracy": { + "0": 0.7988454264954713 + } + } + }, + { + "model": "v3-onnx", + "preset": "europe", + "axis": "flemming", + "lower": 500, + "upper": null, + "images": 29078, + "species": 26, + "known_images": 22299, + "all": { + "accuracy": { + "0": 0.6604620639941903 + }, + "micro_accuracy": { + "0": 0.6298576243207924 + } + }, + "known": { + "accuracy": { + "0": 0.8177149363737594 + }, + "micro_accuracy": { + "0": 0.8213372796986412 + } + } + }, + { + "model": "v3-onnx", + "preset": "full", + "axis": "training", + "lower": 0, + "upper": 1, + "images": 8042, + "species": 16, + "known_images": 0, + "all": { + "accuracy": { + "0": 0.0 + }, + "micro_accuracy": { + "0": 0.0 + } + }, + "known": null + }, + { + "model": "v3-onnx", + "preset": "full", + "axis": "training", + "lower": 1, + "upper": 25, + "images": 0, + "species": 0, + "known_images": 0, + "all": null, + "known": null + }, + { + "model": "v3-onnx", + "preset": "full", + "axis": "training", + "lower": 25, + "upper": 100, + "images": 12, + "species": 7, + "known_images": 12, + "all": { + "accuracy": { + "0": 0.2857142857142857 + }, + "micro_accuracy": { + "0": 0.16666666666666666 + } + }, + "known": { + "accuracy": { + "0": 0.2857142857142857 + }, + "micro_accuracy": { + "0": 0.16666666666666666 + } + } + }, + { + "model": "v3-onnx", + "preset": "full", + "axis": "training", + "lower": 100, + "upper": 500, + "images": 2181, + "species": 68, + "known_images": 2181, + "all": { + "accuracy": { + "0": 0.40857535296735414 + }, + "micro_accuracy": { + "0": 0.4034846400733608 + } + }, + "known": { + "accuracy": { + "0": 0.40857535296735414 + }, + "micro_accuracy": { + "0": 0.4034846400733608 + } + } + }, + { + "model": "v3-onnx", + "preset": "full", + "axis": "training", + "lower": 500, + "upper": 2000, + "images": 44306, + "species": 425, + "known_images": 44306, + "all": { + "accuracy": { + "0": 0.6350041646477221 + }, + "micro_accuracy": { + "0": 0.6880106531846703 + } + }, + "known": { + "accuracy": { + "0": 0.6350041646477221 + }, + "micro_accuracy": { + "0": 0.6880106531846703 + } + } + }, + { + "model": "v3-onnx", + "preset": "full", + "axis": "training", + "lower": 2000, + "upper": 10000, + "images": 4099, + "species": 6, + "known_images": 4099, + "all": { + "accuracy": { + "0": 0.5450344629694924 + }, + "micro_accuracy": { + "0": 0.7067577457916565 + } + }, + "known": { + "accuracy": { + "0": 0.5450344629694924 + }, + "micro_accuracy": { + "0": 0.7067577457916565 + } + } + }, + { + "model": "v3-onnx", + "preset": "full", + "axis": "training", + "lower": 10000, + "upper": null, + "images": 0, + "species": 0, + "known_images": 0, + "all": null, + "known": null + }, + { + "model": "v3-onnx", + "preset": "full", + "axis": "flemming", + "lower": 1, + "upper": 5, + "images": 277, + "species": 143, + "known_images": 268, + "all": { + "accuracy": { + "0": 0.5087412587412588 + }, + "micro_accuracy": { + "0": 0.5018050541516246 + } + }, + "known": { + "accuracy": { + "0": 0.5271739130434783 + }, + "micro_accuracy": { + "0": 0.5186567164179104 + } + } + }, + { + "model": "v3-onnx", + "preset": "full", + "axis": "flemming", + "lower": 5, + "upper": 20, + "images": 1167, + "species": 114, + "known_images": 1167, + "all": { + "accuracy": { + "0": 0.5648057090119578 + }, + "micro_accuracy": { + "0": 0.5895458440445587 + } + }, + "known": { + "accuracy": { + "0": 0.5648057090119578 + }, + "micro_accuracy": { + "0": 0.5895458440445587 + } + } + }, + { + "model": "v3-onnx", + "preset": "full", + "axis": "flemming", + "lower": 20, + "upper": 100, + "images": 6850, + "species": 149, + "known_images": 6770, + "all": { + "accuracy": { + "0": 0.6180226583330307 + }, + "micro_accuracy": { + "0": 0.6144525547445255 + } + }, + "known": { + "accuracy": { + "0": 0.6264311298749766 + }, + "micro_accuracy": { + "0": 0.6217134416543575 + } + } + }, + { + "model": "v3-onnx", + "preset": "full", + "axis": "flemming", + "lower": 100, + "upper": 500, + "images": 21268, + "species": 90, + "known_images": 20094, + "all": { + "accuracy": { + "0": 0.6559409331536423 + }, + "micro_accuracy": { + "0": 0.6511190520970472 + } + }, + "known": { + "accuracy": { + "0": 0.6864498137654397 + }, + "micro_accuracy": { + "0": 0.6891609435652434 + } + } + }, + { + "model": "v3-onnx", + "preset": "full", + "axis": "flemming", + "lower": 500, + "upper": null, + "images": 29078, + "species": 26, + "known_images": 22299, + "all": { + "accuracy": { + "0": 0.5643149943102423 + }, + "micro_accuracy": { + "0": 0.5288534287089897 + } + }, + "known": { + "accuracy": { + "0": 0.6986757072412525 + }, + "micro_accuracy": { + "0": 0.689627337548769 + } + } + } + ], + "source_sha256": { + "local-evidence/mambo-release-comparison-quality/v2-full/north_europe/mini_metric.csv": "1381e2b24fa5a36574b4e1a0d9dfcfa41a5daabce6516e7451757f6ed96a5414", + "local-evidence/mambo-release-comparison-quality/v2-full/europe/mini_metric.csv": "05d76b1f47e294e51378905c27694438eaeeaf11b724bfbb8995eae984a1b410", + "local-evidence/mambo-release-comparison-quality/v2-full/full/mini_metric.csv": "fd0f436cc4d2cd23c1ebf628783f23b06663b8aacc8263a04ddf078dfbddd21a", + "local-evidence/mambo-accelerated-quality/torch-cuda-0-prediction/north_europe/mini_metric.csv": "b6793f4f24ba092912a5d468a86f2f3402d1281a6e63190e623d1cadc13fc027", + "local-evidence/mambo-accelerated-quality/torch-cuda-0-prediction/europe/mini_metric.csv": "189de0dafdd98830f6ab8690937ea287c4acee82e6f09a4c7151a7d62904d67d", + "local-evidence/mambo-accelerated-quality/torch-cuda-0-prediction/full/mini_metric.csv": "9c9b44c7a44f550d3a2a78f489a97c283d251e4c9c14d2123d3494fe19f3888a", + "local-evidence/mambo-accelerated-quality/onnx-cuda-0-prediction/north_europe/mini_metric.csv": "b8624ec148e1d67d6685be4e79e35b990a7692e4109f306430ddfc015e3d543f", + "local-evidence/mambo-accelerated-quality/onnx-cuda-0-prediction/europe/mini_metric.csv": "a25befd30a3187e30baf62d01b267dfd5ed0adfe36b58cc6ee57595e22241dc4", + "local-evidence/mambo-accelerated-quality/onnx-cuda-0-prediction/full/mini_metric.csv": "24159c3f10dd63a7b53ba927530d04eb331d96329d5d8395a8295c9ee233507a" + }, + "species_support": { + "11478679": { + "flemming": 1, + "training": 1236 + }, + "1732063": { + "flemming": 236, + "training": 1305 + }, + "1732416": { + "flemming": 95, + "training": 438 + }, + "1734453": { + "flemming": 201, + "training": 503 + }, + "1734704": { + "flemming": 27, + "training": 781 + }, + "1734826": { + "flemming": 8, + "training": 585 + }, + "1737491": { + "flemming": 12, + "training": 1201 + }, + "1737542": { + "flemming": 12, + "training": 1203 + }, + "1737650": { + "flemming": 1, + "training": 181 + }, + "1737775": { + "flemming": 9, + "training": 1451 + }, + "1737776": { + "flemming": 2, + "training": 1401 + }, + "1737847": { + "flemming": 1, + "training": 1440 + }, + "1738050": { + "flemming": 1, + "training": 59 + }, + "1739833": { + "flemming": 2, + "training": 1285 + }, + "1739922": { + "flemming": 14, + "training": 1462 + }, + "1740005": { + "flemming": 2, + "training": 236 + }, + "1740069": { + "flemming": 1, + "training": 849 + }, + "1740185": { + "flemming": 2, + "training": 937 + }, + "1741341": { + "flemming": 23, + "training": 1292 + }, + "1741752": { + "flemming": 1, + "training": 636 + }, + "1742142": { + "flemming": 41, + "training": 513 + }, + "1743532": { + "flemming": 36, + "training": 1357 + }, + "1743775": { + "flemming": 6, + "training": 1514 + }, + "1744071": { + "flemming": 1, + "training": 1127 + }, + "1744782": { + "flemming": 16, + "training": 391 + }, + "1745079": { + "flemming": 1, + "training": 153 + }, + "1746027": { + "flemming": 2, + "training": 230 + }, + "1746440": { + "flemming": 12, + "training": 1321 + }, + "1746775": { + "flemming": 25, + "training": 499 + }, + "1746832": { + "flemming": 35, + "training": 1482 + }, + "1746876": { + "flemming": 18, + "training": 1268 + }, + "1758878": { + "flemming": 24, + "training": 1317 + }, + "1759069": { + "flemming": 3, + "training": 1433 + }, + "1759083": { + "flemming": 12, + "training": 1338 + }, + "1759153": { + "flemming": 99, + "training": 1485 + }, + "1760104": { + "flemming": 23, + "training": 1556 + }, + "1760593": { + "flemming": 1, + "training": 1457 + }, + "1761041": { + "flemming": 12, + "training": 1500 + }, + "1762244": { + "flemming": 22, + "training": 484 + }, + "1763610": { + "flemming": 158, + "training": 1496 + }, + "1765011": { + "flemming": 8, + "training": 1455 + }, + "1766137": { + "flemming": 17, + "training": 1391 + }, + "1766210": { + "flemming": 26, + "training": 1534 + }, + "1766274": { + "flemming": 330, + "training": 1121 + }, + "1766510": { + "flemming": 2, + "training": 1317 + }, + "1767597": { + "flemming": 13, + "training": 1262 + }, + "1767625": { + "flemming": 3, + "training": 1418 + }, + "1768117": { + "flemming": 1, + "training": 1529 + }, + "1768341": { + "flemming": 5, + "training": 1282 + }, + "1769103": { + "flemming": 47, + "training": 1566 + }, + "1769505": { + "flemming": 3, + "training": 1053 + }, + "1769566": { + "flemming": 113, + "training": 1533 + }, + "1769897": { + "flemming": 607, + "training": 1548 + }, + "1769958": { + "flemming": 1, + "training": 1489 + }, + "1770150": { + "flemming": 2, + "training": 1318 + }, + "1770307": { + "flemming": 48, + "training": 1563 + }, + "1770477": { + "flemming": 83, + "training": 1460 + }, + "1770772": { + "flemming": 1, + "training": 1524 + }, + "1770880": { + "flemming": 103, + "training": 1231 + }, + "1771040": { + "flemming": 8, + "training": 1578 + }, + "1771214": { + "flemming": 21, + "training": 1543 + }, + "1771509": { + "flemming": 77, + "training": 1531 + }, + "1771698": { + "flemming": 53, + "training": 1311 + }, + "1772169": { + "flemming": 78, + "training": 945 + }, + "1772179": { + "flemming": 150, + "training": 1242 + }, + "1772940": { + "flemming": 4, + "training": 372 + }, + "1773309": { + "flemming": 1, + "training": 197 + }, + "1775152": { + "flemming": 1, + "training": 0 + }, + "1775891": { + "flemming": 2, + "training": 341 + }, + "1776330": { + "flemming": 4, + "training": 1187 + }, + "1776862": { + "flemming": 3, + "training": 1377 + }, + "1777253": { + "flemming": 19, + "training": 775 + }, + "1778074": { + "flemming": 23, + "training": 1566 + }, + "1779690": { + "flemming": 4, + "training": 1034 + }, + "1780150": { + "flemming": 10, + "training": 1227 + }, + "1781694": { + "flemming": 10, + "training": 142 + }, + "1782560": { + "flemming": 1, + "training": 1345 + }, + "1782615": { + "flemming": 1, + "training": 614 + }, + "1782627": { + "flemming": 1, + "training": 1211 + }, + "1782672": { + "flemming": 21, + "training": 947 + }, + "1782726": { + "flemming": 4, + "training": 940 + }, + "1782763": { + "flemming": 140, + "training": 734 + }, + "1782777": { + "flemming": 639, + "training": 2511 + }, + "1782841": { + "flemming": 2, + "training": 230 + }, + "1782927": { + "flemming": 61, + "training": 712 + }, + "1782948": { + "flemming": 51, + "training": 413 + }, + "1783037": { + "flemming": 1, + "training": 321 + }, + "1783043": { + "flemming": 16, + "training": 1181 + }, + "1785286": { + "flemming": 395, + "training": 1561 + }, + "1785888": { + "flemming": 68, + "training": 1218 + }, + "1785895": { + "flemming": 36, + "training": 813 + }, + "1786902": { + "flemming": 9, + "training": 735 + }, + "1787112": { + "flemming": 1, + "training": 89 + }, + "1787610": { + "flemming": 14, + "training": 473 + }, + "1789267": { + "flemming": 11, + "training": 1297 + }, + "1789580": { + "flemming": 1, + "training": 863 + }, + "1789694": { + "flemming": 4, + "training": 1304 + }, + "1789695": { + "flemming": 192, + "training": 1443 + }, + "1789730": { + "flemming": 17, + "training": 1486 + }, + "1789745": { + "flemming": 94, + "training": 1406 + }, + "1789783": { + "flemming": 21, + "training": 216 + }, + "1789785": { + "flemming": 32, + "training": 1199 + }, + "1789982": { + "flemming": 5, + "training": 1491 + }, + "1790002": { + "flemming": 9, + "training": 851 + }, + "1790072": { + "flemming": 2, + "training": 1325 + }, + "1790160": { + "flemming": 1, + "training": 53 + }, + "1791422": { + "flemming": 145, + "training": 1549 + }, + "1792383": { + "flemming": 367, + "training": 497 + }, + "1792411": { + "flemming": 22, + "training": 1389 + }, + "1792418": { + "flemming": 219, + "training": 1514 + }, + "1793877": { + "flemming": 3, + "training": 1274 + }, + "1794590": { + "flemming": 187, + "training": 1302 + }, + "1795215": { + "flemming": 46, + "training": 1555 + }, + "1795854": { + "flemming": 2, + "training": 958 + }, + "1796117": { + "flemming": 3, + "training": 1462 + }, + "1796145": { + "flemming": 38, + "training": 1534 + }, + "1796169": { + "flemming": 1, + "training": 1312 + }, + "1796668": { + "flemming": 1, + "training": 0 + }, + "1796678": { + "flemming": 15, + "training": 1508 + }, + "1797178": { + "flemming": 2, + "training": 878 + }, + "1797258": { + "flemming": 33, + "training": 1507 + }, + "1797367": { + "flemming": 1, + "training": 1120 + }, + "1797479": { + "flemming": 56, + "training": 1346 + }, + "1798346": { + "flemming": 1, + "training": 1155 + }, + "1798449": { + "flemming": 2, + "training": 1462 + }, + "1798807": { + "flemming": 1146, + "training": 1551 + }, + "1798974": { + "flemming": 19, + "training": 1541 + }, + "1799132": { + "flemming": 14, + "training": 787 + }, + "1799135": { + "flemming": 3, + "training": 1549 + }, + "1799701": { + "flemming": 4, + "training": 997 + }, + "1799708": { + "flemming": 5, + "training": 516 + }, + "1800004": { + "flemming": 16, + "training": 1256 + }, + "1800032": { + "flemming": 137, + "training": 1232 + }, + "1801896": { + "flemming": 33, + "training": 1139 + }, + "1802280": { + "flemming": 136, + "training": 1431 + }, + "1803012": { + "flemming": 1, + "training": 432 + }, + "1803073": { + "flemming": 37, + "training": 1253 + }, + "1804071": { + "flemming": 447, + "training": 1179 + }, + "1804906": { + "flemming": 460, + "training": 1236 + }, + "1807206": { + "flemming": 36, + "training": 0 + }, + "1810099": { + "flemming": 43, + "training": 1367 + }, + "1811789": { + "flemming": 325, + "training": 0 + }, + "1811896": { + "flemming": 2074, + "training": 0 + }, + "1812394": { + "flemming": 35, + "training": 637 + }, + "1813114": { + "flemming": 368, + "training": 1512 + }, + "1819145": { + "flemming": 1335, + "training": 912 + }, + "1819873": { + "flemming": 21, + "training": 553 + }, + "1820039": { + "flemming": 28, + "training": 1240 + }, + "1820372": { + "flemming": 198, + "training": 1492 + }, + "1821911": { + "flemming": 476, + "training": 529 + }, + "1822346": { + "flemming": 176, + "training": 1366 + }, + "1822587": { + "flemming": 9, + "training": 711 + }, + "1822610": { + "flemming": 24, + "training": 1235 + }, + "1822613": { + "flemming": 6, + "training": 894 + }, + "1822796": { + "flemming": 41, + "training": 1276 + }, + "1822819": { + "flemming": 24, + "training": 1204 + }, + "1822830": { + "flemming": 1, + "training": 465 + }, + "1823726": { + "flemming": 32, + "training": 1280 + }, + "1825064": { + "flemming": 36, + "training": 1450 + }, + "1825077": { + "flemming": 132, + "training": 1481 + }, + "1825156": { + "flemming": 54, + "training": 943 + }, + "1825971": { + "flemming": 567, + "training": 1253 + }, + "1825983": { + "flemming": 1068, + "training": 1412 + }, + "1826022": { + "flemming": 18, + "training": 482 + }, + "1827125": { + "flemming": 7, + "training": 1325 + }, + "1828162": { + "flemming": 223, + "training": 1331 + }, + "1828637": { + "flemming": 13, + "training": 1206 + }, + "1830410": { + "flemming": 14, + "training": 1284 + }, + "1830937": { + "flemming": 12, + "training": 1245 + }, + "1830962": { + "flemming": 2, + "training": 110 + }, + "1831136": { + "flemming": 1, + "training": 1480 + }, + "1831643": { + "flemming": 2, + "training": 750 + }, + "1835156": { + "flemming": 16, + "training": 1173 + }, + "1836899": { + "flemming": 5, + "training": 1470 + }, + "1839893": { + "flemming": 16, + "training": 718 + }, + "1841261": { + "flemming": 27, + "training": 1519 + }, + "1845270": { + "flemming": 10, + "training": 1422 + }, + "1847407": { + "flemming": 2, + "training": 396 + }, + "1862580": { + "flemming": 125, + "training": 1162 + }, + "1862837": { + "flemming": 3, + "training": 841 + }, + "1864377": { + "flemming": 164, + "training": 1079 + }, + "1870250": { + "flemming": 5, + "training": 1526 + }, + "1871252": { + "flemming": 1, + "training": 1566 + }, + "1871407": { + "flemming": 5, + "training": 1486 + }, + "1872368": { + "flemming": 32, + "training": 1492 + }, + "1872901": { + "flemming": 1, + "training": 1513 + }, + "1875008": { + "flemming": 147, + "training": 1301 + }, + "1875327": { + "flemming": 38, + "training": 1327 + }, + "1875869": { + "flemming": 20, + "training": 143 + }, + "1876329": { + "flemming": 20, + "training": 1216 + }, + "1876542": { + "flemming": 1, + "training": 1436 + }, + "1879252": { + "flemming": 617, + "training": 1173 + }, + "1879970": { + "flemming": 72, + "training": 1749 + }, + "1881151": { + "flemming": 53, + "training": 1544 + }, + "1882210": { + "flemming": 42, + "training": 1548 + }, + "1883161": { + "flemming": 42, + "training": 1248 + }, + "1884212": { + "flemming": 6, + "training": 365 + }, + "1884255": { + "flemming": 72, + "training": 1324 + }, + "1884273": { + "flemming": 5, + "training": 985 + }, + "1884370": { + "flemming": 262, + "training": 1220 + }, + "1884403": { + "flemming": 47, + "training": 1483 + }, + "1884465": { + "flemming": 728, + "training": 1552 + }, + "1884970": { + "flemming": 54, + "training": 1206 + }, + "1886579": { + "flemming": 2, + "training": 1519 + }, + "1886587": { + "flemming": 1, + "training": 1569 + }, + "1887108": { + "flemming": 28, + "training": 1305 + }, + "1887290": { + "flemming": 2067, + "training": 1469 + }, + "1888743": { + "flemming": 5, + "training": 185 + }, + "1888759": { + "flemming": 23, + "training": 1550 + }, + "1888826": { + "flemming": 90, + "training": 427 + }, + "1889942": { + "flemming": 10, + "training": 249 + }, + "1890187": { + "flemming": 121, + "training": 1351 + }, + "1890534": { + "flemming": 1, + "training": 1500 + }, + "1890576": { + "flemming": 168, + "training": 1563 + }, + "1890656": { + "flemming": 4, + "training": 324 + }, + "1891059": { + "flemming": 1, + "training": 257 + }, + "1891326": { + "flemming": 1, + "training": 592 + }, + "1891473": { + "flemming": 19, + "training": 1201 + }, + "1891493": { + "flemming": 12, + "training": 1494 + }, + "1951557": { + "flemming": 59, + "training": 1265 + }, + "1951649": { + "flemming": 13, + "training": 856 + }, + "1952014": { + "flemming": 254, + "training": 1188 + }, + "1952062": { + "flemming": 1, + "training": 1491 + }, + "1952532": { + "flemming": 483, + "training": 1302 + }, + "1952806": { + "flemming": 108, + "training": 1573 + }, + "1952812": { + "flemming": 98, + "training": 1378 + }, + "1956440": { + "flemming": 3, + "training": 2457 + }, + "1956524": { + "flemming": 1, + "training": 1432 + }, + "1956599": { + "flemming": 421, + "training": 941 + }, + "1957570": { + "flemming": 33, + "training": 1265 + }, + "1957572": { + "flemming": 118, + "training": 1525 + }, + "1957816": { + "flemming": 9, + "training": 1559 + }, + "1957845": { + "flemming": 303, + "training": 1359 + }, + "1957852": { + "flemming": 8, + "training": 874 + }, + "1958024": { + "flemming": 6, + "training": 1260 + }, + "1959383": { + "flemming": 10, + "training": 898 + }, + "1959395": { + "flemming": 8, + "training": 996 + }, + "1959914": { + "flemming": 55, + "training": 1226 + }, + "1960617": { + "flemming": 14, + "training": 1528 + }, + "1961040": { + "flemming": 4, + "training": 555 + }, + "1962204": { + "flemming": 17, + "training": 1472 + }, + "1962265": { + "flemming": 83, + "training": 1339 + }, + "1962434": { + "flemming": 220, + "training": 1899 + }, + "1962516": { + "flemming": 1, + "training": 1502 + }, + "1962636": { + "flemming": 18, + "training": 1449 + }, + "1962990": { + "flemming": 41, + "training": 829 + }, + "1963011": { + "flemming": 13, + "training": 439 + }, + "1963306": { + "flemming": 28, + "training": 1361 + }, + "1963446": { + "flemming": 117, + "training": 1561 + }, + "1964653": { + "flemming": 69, + "training": 1213 + }, + "1964657": { + "flemming": 59, + "training": 498 + }, + "1965166": { + "flemming": 36, + "training": 947 + }, + "1965208": { + "flemming": 41, + "training": 503 + }, + "1965763": { + "flemming": 75, + "training": 1380 + }, + "1965777": { + "flemming": 4, + "training": 763 + }, + "1965825": { + "flemming": 5, + "training": 1316 + }, + "1965841": { + "flemming": 21, + "training": 1343 + }, + "1965913": { + "flemming": 1, + "training": 1503 + }, + "1965996": { + "flemming": 20, + "training": 326 + }, + "1966017": { + "flemming": 95, + "training": 1450 + }, + "1966351": { + "flemming": 5, + "training": 1406 + }, + "1967245": { + "flemming": 6, + "training": 1165 + }, + "1967815": { + "flemming": 14, + "training": 1350 + }, + "1968678": { + "flemming": 170, + "training": 126 + }, + "1968867": { + "flemming": 280, + "training": 1421 + }, + "1970213": { + "flemming": 67, + "training": 1545 + }, + "1970284": { + "flemming": 31, + "training": 920 + }, + "1972120": { + "flemming": 3, + "training": 395 + }, + "1972187": { + "flemming": 181, + "training": 338 + }, + "1972234": { + "flemming": 1, + "training": 1293 + }, + "1972250": { + "flemming": 128, + "training": 1547 + }, + "1972342": { + "flemming": 10, + "training": 244 + }, + "1972434": { + "flemming": 6, + "training": 941 + }, + "1972449": { + "flemming": 6, + "training": 1475 + }, + "1973414": { + "flemming": 29, + "training": 1192 + }, + "1973467": { + "flemming": 88, + "training": 1559 + }, + "1975546": { + "flemming": 1, + "training": 1176 + }, + "1975553": { + "flemming": 10, + "training": 413 + }, + "1975571": { + "flemming": 8, + "training": 516 + }, + "1975897": { + "flemming": 688, + "training": 1552 + }, + "1975903": { + "flemming": 3, + "training": 1546 + }, + "1976163": { + "flemming": 70, + "training": 1306 + }, + "1977003": { + "flemming": 15, + "training": 1474 + }, + "1978114": { + "flemming": 347, + "training": 1287 + }, + "1978375": { + "flemming": 4, + "training": 320 + }, + "1978445": { + "flemming": 698, + "training": 1559 + }, + "1978776": { + "flemming": 229, + "training": 1524 + }, + "1978977": { + "flemming": 8, + "training": 397 + }, + "1979308": { + "flemming": 139, + "training": 1240 + }, + "1979430": { + "flemming": 4, + "training": 392 + }, + "1979473": { + "flemming": 320, + "training": 1400 + }, + "1979781": { + "flemming": 4, + "training": 621 + }, + "1982500": { + "flemming": 228, + "training": 1382 + }, + "1982525": { + "flemming": 50, + "training": 165 + }, + "1982529": { + "flemming": 2, + "training": 338 + }, + "1982541": { + "flemming": 229, + "training": 1463 + }, + "1982542": { + "flemming": 5, + "training": 1269 + }, + "1982592": { + "flemming": 1, + "training": 47 + }, + "1982636": { + "flemming": 35, + "training": 1238 + }, + "1982671": { + "flemming": 3, + "training": 669 + }, + "1982746": { + "flemming": 5, + "training": 525 + }, + "1982885": { + "flemming": 14, + "training": 1221 + }, + "1983170": { + "flemming": 4, + "training": 1152 + }, + "1983260": { + "flemming": 4, + "training": 544 + }, + "1983288": { + "flemming": 1, + "training": 1164 + }, + "1983387": { + "flemming": 3, + "training": 278 + }, + "1983441": { + "flemming": 23, + "training": 623 + }, + "1983442": { + "flemming": 35, + "training": 656 + }, + "1983525": { + "flemming": 318, + "training": 1398 + }, + "1983548": { + "flemming": 3, + "training": 233 + }, + "1983648": { + "flemming": 96, + "training": 865 + }, + "1983694": { + "flemming": 2, + "training": 0 + }, + "1983705": { + "flemming": 2, + "training": 889 + }, + "1983755": { + "flemming": 49, + "training": 444 + }, + "1983896": { + "flemming": 128, + "training": 1180 + }, + "1984117": { + "flemming": 19, + "training": 1256 + }, + "1984954": { + "flemming": 5, + "training": 648 + }, + "1985522": { + "flemming": 334, + "training": 909 + }, + "1986052": { + "flemming": 6, + "training": 1399 + }, + "1986056": { + "flemming": 1, + "training": 1499 + }, + "1986157": { + "flemming": 24, + "training": 1556 + }, + "1986166": { + "flemming": 118, + "training": 1338 + }, + "1986220": { + "flemming": 99, + "training": 1522 + }, + "1986522": { + "flemming": 18, + "training": 1361 + }, + "1986575": { + "flemming": 26, + "training": 1357 + }, + "1987527": { + "flemming": 4, + "training": 685 + }, + "1987744": { + "flemming": 2, + "training": 995 + }, + "1988593": { + "flemming": 114, + "training": 1537 + }, + "1988881": { + "flemming": 168, + "training": 1185 + }, + "1989428": { + "flemming": 157, + "training": 1530 + }, + "1990066": { + "flemming": 1, + "training": 1317 + }, + "1990150": { + "flemming": 79, + "training": 1198 + }, + "1990551": { + "flemming": 1, + "training": 1554 + }, + "1991371": { + "flemming": 52, + "training": 1525 + }, + "1992066": { + "flemming": 441, + "training": 1540 + }, + "1992504": { + "flemming": 1, + "training": 1447 + }, + "4522322": { + "flemming": 42, + "training": 134 + }, + "4523522": { + "flemming": 28, + "training": 1246 + }, + "4523885": { + "flemming": 70, + "training": 1482 + }, + "4524054": { + "flemming": 263, + "training": 1441 + }, + "4524072": { + "flemming": 5, + "training": 1013 + }, + "4524376": { + "flemming": 47, + "training": 1492 + }, + "4524393": { + "flemming": 2, + "training": 632 + }, + "4524421": { + "flemming": 272, + "training": 1441 + }, + "4524426": { + "flemming": 33, + "training": 1319 + }, + "4524636": { + "flemming": 282, + "training": 1512 + }, + "4524638": { + "flemming": 341, + "training": 1837 + }, + "4525078": { + "flemming": 377, + "training": 1524 + }, + "4525500": { + "flemming": 1, + "training": 156 + }, + "4525510": { + "flemming": 10, + "training": 996 + }, + "4525530": { + "flemming": 1, + "training": 468 + }, + "4525540": { + "flemming": 33, + "training": 1347 + }, + "4525547": { + "flemming": 6, + "training": 138 + }, + "4529566": { + "flemming": 43, + "training": 1242 + }, + "4530151": { + "flemming": 4, + "training": 1280 + }, + "4531284": { + "flemming": 27, + "training": 686 + }, + "4531402": { + "flemming": 1, + "training": 1335 + }, + "4531517": { + "flemming": 73, + "training": 320 + }, + "4531687": { + "flemming": 7, + "training": 1116 + }, + "4531690": { + "flemming": 133, + "training": 1286 + }, + "4532022": { + "flemming": 5, + "training": 1269 + }, + "4532095": { + "flemming": 5, + "training": 1466 + }, + "4532253": { + "flemming": 2, + "training": 68 + }, + "4532297": { + "flemming": 94, + "training": 495 + }, + "4532357": { + "flemming": 6, + "training": 1236 + }, + "4532544": { + "flemming": 163, + "training": 1515 + }, + "4532886": { + "flemming": 208, + "training": 644 + }, + "4532888": { + "flemming": 5, + "training": 1193 + }, + "4532890": { + "flemming": 3441, + "training": 2481 + }, + "4533115": { + "flemming": 3, + "training": 1583 + }, + "4533136": { + "flemming": 54, + "training": 1352 + }, + "4533202": { + "flemming": 17, + "training": 1149 + }, + "4533273": { + "flemming": 17, + "training": 1324 + }, + "4533360": { + "flemming": 3, + "training": 1248 + }, + "4533431": { + "flemming": 1, + "training": 1352 + }, + "4533433": { + "flemming": 2, + "training": 1460 + }, + "4533442": { + "flemming": 1, + "training": 65 + }, + "4533671": { + "flemming": 1, + "training": 1626 + }, + "4533952": { + "flemming": 5, + "training": 1313 + }, + "4534057": { + "flemming": 3, + "training": 1139 + }, + "4534166": { + "flemming": 20, + "training": 1550 + }, + "4534207": { + "flemming": 32, + "training": 740 + }, + "4534290": { + "flemming": 51, + "training": 1575 + }, + "4534299": { + "flemming": 7, + "training": 2571 + }, + "4534398": { + "flemming": 15, + "training": 144 + }, + "4534408": { + "flemming": 1, + "training": 743 + }, + "4534463": { + "flemming": 1, + "training": 480 + }, + "4534485": { + "flemming": 9, + "training": 418 + }, + "4534533": { + "flemming": 5, + "training": 1355 + }, + "4534538": { + "flemming": 10, + "training": 495 + }, + "4534540": { + "flemming": 114, + "training": 959 + }, + "4534719": { + "flemming": 38, + "training": 1449 + }, + "4534872": { + "flemming": 59, + "training": 1253 + }, + "4534909": { + "flemming": 116, + "training": 1350 + }, + "5101678": { + "flemming": 238, + "training": 270 + }, + "5101745": { + "flemming": 4, + "training": 728 + }, + "5102951": { + "flemming": 168, + "training": 1484 + }, + "5103451": { + "flemming": 27, + "training": 1212 + }, + "5104442": { + "flemming": 46, + "training": 1454 + }, + "5104558": { + "flemming": 14, + "training": 952 + }, + "5105339": { + "flemming": 486, + "training": 1316 + }, + "5109821": { + "flemming": 11, + "training": 465 + }, + "5110200": { + "flemming": 46, + "training": 979 + }, + "5110213": { + "flemming": 42, + "training": 1557 + }, + "5110670": { + "flemming": 33, + "training": 1256 + }, + "5110885": { + "flemming": 31, + "training": 1431 + }, + "5111574": { + "flemming": 14, + "training": 1269 + }, + "5112155": { + "flemming": 3, + "training": 1317 + }, + "5112283": { + "flemming": 64, + "training": 1554 + }, + "5112291": { + "flemming": 3, + "training": 1535 + }, + "5112362": { + "flemming": 4, + "training": 0 + }, + "5113036": { + "flemming": 4, + "training": 1410 + }, + "5113078": { + "flemming": 15, + "training": 1332 + }, + "5113234": { + "flemming": 7, + "training": 1382 + }, + "5114198": { + "flemming": 837, + "training": 1474 + }, + "5114327": { + "flemming": 6, + "training": 1237 + }, + "5115771": { + "flemming": 77, + "training": 1372 + }, + "5115777": { + "flemming": 33, + "training": 929 + }, + "5115874": { + "flemming": 518, + "training": 1009 + }, + "5116475": { + "flemming": 2, + "training": 376 + }, + "5116609": { + "flemming": 1901, + "training": 0 + }, + "5116669": { + "flemming": 1, + "training": 0 + }, + "5116850": { + "flemming": 213, + "training": 0 + }, + "5116941": { + "flemming": 878, + "training": 0 + }, + "5117049": { + "flemming": 1232, + "training": 0 + }, + "5117089": { + "flemming": 393, + "training": 0 + }, + "5117400": { + "flemming": 2843, + "training": 1546 + }, + "5118892": { + "flemming": 7, + "training": 1356 + }, + "5118996": { + "flemming": 712, + "training": 1417 + }, + "5119245": { + "flemming": 338, + "training": 605 + }, + "5124007": { + "flemming": 248, + "training": 1373 + }, + "5124143": { + "flemming": 27, + "training": 991 + }, + "5124233": { + "flemming": 682, + "training": 1223 + }, + "5125689": { + "flemming": 141, + "training": 1559 + }, + "5126212": { + "flemming": 8, + "training": 961 + }, + "5126680": { + "flemming": 1, + "training": 1353 + }, + "5142870": { + "flemming": 30, + "training": 1533 + }, + "5142971": { + "flemming": 243, + "training": 0 + }, + "5143048": { + "flemming": 9, + "training": 1351 + }, + "5143129": { + "flemming": 301, + "training": 1511 + }, + "5143147": { + "flemming": 182, + "training": 1280 + }, + "5143380": { + "flemming": 180, + "training": 1526 + }, + "5143651": { + "flemming": 63, + "training": 1322 + }, + "5143675": { + "flemming": 72, + "training": 1476 + }, + "5143697": { + "flemming": 247, + "training": 1479 + }, + "5144190": { + "flemming": 10, + "training": 1181 + }, + "5144426": { + "flemming": 23, + "training": 1320 + }, + "5144534": { + "flemming": 229, + "training": 1508 + }, + "5144543": { + "flemming": 23, + "training": 1549 + }, + "5145009": { + "flemming": 131, + "training": 1326 + }, + "5145136": { + "flemming": 1, + "training": 740 + }, + "5145409": { + "flemming": 4, + "training": 1302 + }, + "5146342": { + "flemming": 13, + "training": 439 + }, + "5146379": { + "flemming": 85, + "training": 1252 + }, + "5146412": { + "flemming": 24, + "training": 1100 + }, + "5146496": { + "flemming": 1, + "training": 307 + }, + "5146559": { + "flemming": 345, + "training": 1672 + }, + "5146677": { + "flemming": 1, + "training": 1505 + }, + "5146961": { + "flemming": 74, + "training": 1505 + }, + "5147039": { + "flemming": 1, + "training": 2449 + }, + "5147062": { + "flemming": 1, + "training": 1078 + }, + "5147193": { + "flemming": 2, + "training": 1503 + }, + "5147208": { + "flemming": 26, + "training": 1369 + }, + "5147245": { + "flemming": 5, + "training": 1197 + }, + "5147608": { + "flemming": 30, + "training": 1326 + }, + "5148286": { + "flemming": 1, + "training": 1387 + }, + "5148424": { + "flemming": 120, + "training": 1171 + }, + "5148436": { + "flemming": 263, + "training": 454 + }, + "5148462": { + "flemming": 34, + "training": 1380 + }, + "5148486": { + "flemming": 60, + "training": 900 + }, + "5148487": { + "flemming": 570, + "training": 1293 + }, + "5149438": { + "flemming": 398, + "training": 1497 + }, + "5149665": { + "flemming": 48, + "training": 1475 + }, + "5149746": { + "flemming": 40, + "training": 1176 + }, + "5714973": { + "flemming": 199, + "training": 1526 + }, + "5768880": { + "flemming": 22, + "training": 1268 + }, + "5769068": { + "flemming": 17, + "training": 1564 + }, + "5769072": { + "flemming": 313, + "training": 1202 + }, + "5769272": { + "flemming": 1, + "training": 210 + }, + "5771259": { + "flemming": 2, + "training": 567 + }, + "5771350": { + "flemming": 163, + "training": 1007 + }, + "5771982": { + "flemming": 12, + "training": 725 + }, + "5772063": { + "flemming": 8, + "training": 2371 + }, + "5772176": { + "flemming": 2, + "training": 1564 + }, + "5772196": { + "flemming": 76, + "training": 1501 + }, + "5772202": { + "flemming": 2, + "training": 481 + }, + "5772205": { + "flemming": 2, + "training": 563 + }, + "5772210": { + "flemming": 44, + "training": 1325 + }, + "5772351": { + "flemming": 26, + "training": 1551 + }, + "5880533": { + "flemming": 406, + "training": 1539 + }, + "5880545": { + "flemming": 6, + "training": 1657 + }, + "5880552": { + "flemming": 41, + "training": 1370 + }, + "5880559": { + "flemming": 67, + "training": 1306 + }, + "5880563": { + "flemming": 2, + "training": 973 + }, + "5884851": { + "flemming": 96, + "training": 1527 + }, + "6097214": { + "flemming": 86, + "training": 1483 + }, + "6097236": { + "flemming": 1, + "training": 1524 + }, + "7438067": { + "flemming": 1, + "training": 785 + }, + "7443518": { + "flemming": 28, + "training": 1535 + }, + "7446048": { + "flemming": 1, + "training": 312 + }, + "7681733": { + "flemming": 36, + "training": 1427 + }, + "7730078": { + "flemming": 694, + "training": 0 + }, + "7752082": { + "flemming": 8, + "training": 443 + }, + "7780930": { + "flemming": 22, + "training": 1213 + }, + "7825213": { + "flemming": 44, + "training": 0 + }, + "7895336": { + "flemming": 2, + "training": 1245 + }, + "7940536": { + "flemming": 5, + "training": 1536 + }, + "7960566": { + "flemming": 8, + "training": 1266 + }, + "7972792": { + "flemming": 1, + "training": 185 + }, + "8007222": { + "flemming": 2, + "training": 492 + }, + "8015895": { + "flemming": 953, + "training": 1159 + }, + "8105817": { + "flemming": 2, + "training": 1343 + }, + "8223165": { + "flemming": 27, + "training": 1567 + }, + "8262357": { + "flemming": 30, + "training": 694 + }, + "8361848": { + "flemming": 678, + "training": 1547 + }, + "8361973": { + "flemming": 5, + "training": 40 + }, + "8397564": { + "flemming": 41, + "training": 1433 + }, + "8407461": { + "flemming": 1, + "training": 1382 + }, + "8421569": { + "flemming": 905, + "training": 1487 + }, + "8537359": { + "flemming": 21, + "training": 1302 + }, + "8581601": { + "flemming": 3, + "training": 515 + }, + "9101339": { + "flemming": 86, + "training": 757 + } + } +} diff --git a/docs/assets/mambo-hpc-current-provenance.json b/docs/assets/mambo-hpc-current-provenance.json new file mode 100644 index 0000000..20f6846 --- /dev/null +++ b/docs/assets/mambo-hpc-current-provenance.json @@ -0,0 +1,201 @@ +{ + "environment": { + "commit": "503de96ad0cc1e30662600fa766cd35ca30427e5", + "gpu": "Fri Sep 25 12:30:33 2026 \n+-----------------------------------------------------------------------------------------+\n| NVIDIA-SMI 610.57.04 KMD Version: 610.57.04 CUDA UMD Version: 13.3 |\n+-----------------------------------------+------------------------+----------------------+\n| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |\n| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |\n| | | MIG M. |\n|=========================================+========================+======================|\n| 0 NVIDIA B200 Off | 00000000:F6:00.0 Off | 0 |\n| N/A 31C P0 156W / 1000W | 0MiB / 183359MiB | 0% Default |\n| | | Disabled |\n+-----------------------------------------+------------------------+----------------------+\n\n+-----------------------------------------------------------------------------------------+\n| Processes: |\n| GPU GI CI PID Type Process name GPU Memory |\n| ID ID Usage |\n|=========================================================================================|\n| No running processes found |\n+-----------------------------------------------------------------------------------------+\n", + "gpu_instances": "GPU 0: NVIDIA B200 (UUID: GPU-af8d94b4-7e48-9570-1f4b-5476a933901c)\n", + "cuda_visible_devices": null, + "cpu_max": "4800000 100000\n", + "prepare_workers": 48, + "metadata_sha256": "094afa30bab25daad6583d33055bf7c61bcbade2f7f3c5e212d6b16fbf4429fe", + "sample_sha256": "a5814a7f9ac9111c7ea0288ef0c507d83c6449067392028dc2df2788439f1b43" + }, + "reports": { + "torch": { + "sha256": "f6620b0cd43caeb35c257cbbc31c86ab88ec278e422fb0e7e637b94dc33a48ee", + "runtime": { + "threads": 4, + "tf32": false, + "autocast": true, + "precision": "fp16", + "platform": "Linux-6.12.0-211.40.1.el10_2.x86_64-x86_64-with-glibc2.39", + "torch": "2.14.0+cu132", + "cuda": "13.2" + }, + "settings": { + "bundle": "/work/mambo-cache/9da887e131bd95a8", + "manifest": "/work/mambo-speed/b200-full-gather/sample.json", + "root": "/work/datasets/global_lepi", + "output": "/work/mambo-speed/b200-full-gather/torch", + "backend": "torch", + "device": "cuda:0", + "precision": "auto", + "tta": "none", + "embeddings": false, + "threads": 4, + "batches": [ + 256 + ], + "presets": [ + "full" + ], + "warmup": 2, + "repeats": 3, + "bank_size": 256, + "seed": 20260923, + "no_device_prefetch": false, + "stream_images": 4096, + "stream_workers": 48, + "read_workers": 128, + "read_window": 4096, + "prefetch_batches": 2, + "encoded_budget_mib": 1024 + }, + "bundle_sha256": "f0d42b3803829c03cbbc54982bec7bae880a76bfc400ae9b5fa309548de2aa5e", + "manifest_sha256": "a5814a7f9ac9111c7ea0288ef0c507d83c6449067392028dc2df2788439f1b43", + "effective_precision": "fp16", + "list_sha256": "8a256b140c3ec3389329e6f3cb6c4d50e1634c49907a9caef099cdfd5c378ca5", + "peak_host_gib": 4.011272430419922 + }, + "onnx": { + "sha256": "5370c34ccb48d15582da8360d20dfd23658607a3a39aa2596e7d59bd1c28a37e", + "runtime": { + "threads": 4, + "tf32": true, + "autocast": false, + "precision": "tf32", + "platform": "Linux-6.12.0-211.40.1.el10_2.x86_64-x86_64-with-glibc2.39", + "onnxruntime": "1.22.0" + }, + "settings": { + "bundle": "/work/mambo-cache/9da887e131bd95a8", + "manifest": "/work/mambo-speed/b200-full-gather/sample.json", + "root": "/work/datasets/global_lepi", + "output": "/work/mambo-speed/b200-full-gather/onnx", + "backend": "onnx", + "device": "cuda:0", + "precision": "auto", + "tta": "none", + "embeddings": false, + "threads": 4, + "batches": [ + 256 + ], + "presets": [ + "full" + ], + "warmup": 2, + "repeats": 3, + "bank_size": 256, + "seed": 20260923, + "no_device_prefetch": false, + "stream_images": 4096, + "stream_workers": 48, + "read_workers": 128, + "read_window": 4096, + "prefetch_batches": 2, + "encoded_budget_mib": 1024 + }, + "bundle_sha256": "f0d42b3803829c03cbbc54982bec7bae880a76bfc400ae9b5fa309548de2aa5e", + "manifest_sha256": "a5814a7f9ac9111c7ea0288ef0c507d83c6449067392028dc2df2788439f1b43", + "effective_precision": "tf32", + "list_sha256": "8a256b140c3ec3389329e6f3cb6c4d50e1634c49907a9caef099cdfd5c378ca5", + "peak_host_gib": 4.750694274902344 + }, + "torch-tta": { + "sha256": "31e5a4d3be24f11108def9d337376d047f194691c4c06023a03362015530c70f", + "runtime": { + "threads": 4, + "tf32": false, + "autocast": true, + "precision": "fp16", + "platform": "Linux-6.12.0-211.40.1.el10_2.x86_64-x86_64-with-glibc2.39", + "torch": "2.14.0+cu132", + "cuda": "13.2" + }, + "settings": { + "bundle": "/work/mambo-cache/9da887e131bd95a8", + "manifest": "/work/mambo-speed/b200-full-gather/sample.json", + "root": "/work/datasets/global_lepi", + "output": "/work/mambo-speed/b200-full-gather/torch-tta", + "backend": "torch", + "device": "cuda:0", + "precision": "auto", + "tta": "rotation30_pad25_3", + "embeddings": false, + "threads": 4, + "batches": [ + 256 + ], + "presets": [ + "full" + ], + "warmup": 2, + "repeats": 3, + "bank_size": 256, + "seed": 20260923, + "no_device_prefetch": false, + "stream_images": 4096, + "stream_workers": 48, + "read_workers": 128, + "read_window": 4096, + "prefetch_batches": 2, + "encoded_budget_mib": 1024 + }, + "bundle_sha256": "f0d42b3803829c03cbbc54982bec7bae880a76bfc400ae9b5fa309548de2aa5e", + "manifest_sha256": "a5814a7f9ac9111c7ea0288ef0c507d83c6449067392028dc2df2788439f1b43", + "effective_precision": "fp16", + "list_sha256": "8a256b140c3ec3389329e6f3cb6c4d50e1634c49907a9caef099cdfd5c378ca5", + "peak_host_gib": 5.841754913330078 + }, + "onnx-tta": { + "sha256": "bcab5433a4c10c6dac1f9c6d748ad64507f3449122d94a162916fc19539156a9", + "runtime": { + "threads": 4, + "tf32": true, + "autocast": false, + "precision": "tf32", + "platform": "Linux-6.12.0-211.40.1.el10_2.x86_64-x86_64-with-glibc2.39", + "onnxruntime": "1.22.0" + }, + "settings": { + "bundle": "/work/mambo-cache/9da887e131bd95a8", + "manifest": "/work/mambo-speed/b200-full-gather/sample.json", + "root": "/work/datasets/global_lepi", + "output": "/work/mambo-speed/b200-full-gather/onnx-tta", + "backend": "onnx", + "device": "cuda:0", + "precision": "auto", + "tta": "rotation30_pad25_3", + "embeddings": false, + "threads": 4, + "batches": [ + 256 + ], + "presets": [ + "full" + ], + "warmup": 2, + "repeats": 3, + "bank_size": 256, + "seed": 20260923, + "no_device_prefetch": false, + "stream_images": 4096, + "stream_workers": 48, + "read_workers": 128, + "read_window": 4096, + "prefetch_batches": 2, + "encoded_budget_mib": 1024 + }, + "bundle_sha256": "f0d42b3803829c03cbbc54982bec7bae880a76bfc400ae9b5fa309548de2aa5e", + "manifest_sha256": "a5814a7f9ac9111c7ea0288ef0c507d83c6449067392028dc2df2788439f1b43", + "effective_precision": "tf32", + "list_sha256": "8a256b140c3ec3389329e6f3cb6c4d50e1634c49907a9caef099cdfd5c378ca5", + "peak_host_gib": 7.350887298583984 + } + }, + "retained_request_baseline": { + "file": "mambo-indomain-speed.csv", + "sha256": "604180640f24d7ed180832d0b2ac4fbfea4dbf7a5b8be173edb760388e51820f", + "scope": "CPU and smaller GPU batches; earlier campaign, not rerun" + } +} diff --git a/docs/assets/mambo-hpc-current-speed.csv b/docs/assets/mambo-hpc-current-speed.csv new file mode 100644 index 0000000..e606af3 --- /dev/null +++ b/docs/assets/mambo-hpc-current-speed.csv @@ -0,0 +1,25 @@ +variant,mode,repetition,images,seconds,images_per_second +torch,end_to_end,1,256,0.17301857308484614,1479.6099368734292 +torch,end_to_end,2,256,0.17668779799714684,1448.883300951738 +torch,end_to_end,3,256,0.17422763700596988,1469.3420883119031 +torch,streaming,1,4096,2.073168557137251,1975.7197194115224 +torch,streaming,2,4096,2.281771891983226,1795.0961769626842 +torch,streaming,3,4096,1.942014266969636,2109.1503134997524 +onnx,end_to_end,1,256,0.33658771589398384,760.5743998115285 +onnx,end_to_end,2,256,0.32307914597913623,792.3755005113575 +onnx,end_to_end,3,256,0.33601783006452024,761.8643330648387 +onnx,streaming,1,4096,3.9595700660720468,1034.455744348854 +onnx,streaming,2,4096,4.432902649976313,923.9995378698169 +onnx,streaming,3,4096,4.110354200005531,996.5077948743415 +torch-tta,end_to_end,1,256,0.6653069949243218,384.7847714709806 +torch-tta,end_to_end,2,256,0.6480720441322774,395.01781062438187 +torch-tta,end_to_end,3,256,0.6541442449670285,391.35099325517024 +torch-tta,streaming,1,4096,7.125840627821162,574.8093753329446 +torch-tta,streaming,2,4096,6.513772226171568,628.8214966348924 +torch-tta,streaming,3,4096,6.565300341928378,623.8861570188138 +onnx-tta,end_to_end,1,256,1.2232836210168898,209.27280934832808 +onnx-tta,end_to_end,2,256,1.175656639970839,217.75065210055703 +onnx-tta,end_to_end,3,256,1.2088225970510393,211.7763190599845 +onnx-tta,streaming,1,4096,9.869592084083706,415.0120861231392 +onnx-tta,streaming,2,4096,10.341743794968352,396.06473349232056 +onnx-tta,streaming,3,4096,10.501273917034268,390.0479153634702 diff --git a/docs/assets/mambo-hpc-current-speed.svg b/docs/assets/mambo-hpc-current-speed.svg new file mode 100644 index 0000000..0dcf3e4 --- /dev/null +++ b/docs/assets/mambo-hpc-current-speed.svg @@ -0,0 +1,1590 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.10.9, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + + + + + + + + + + + 8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Batch size + + + + + + + + + + + + + + + + + 5 + + + + + + + + + + + + + 10 + + + + + + + + + + + + + 15 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 25 + + + + + + + + + + + + + 30 + + + + + + + + + + + + + 35 + + + + Images/s + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + EPYC CPU · request + + + + + + + + + + + + + + + + + + 1 + + + + + + + + + + + + + 8 + + + + + + + + + + + + + 32 + + + + + + + + + + + + + 256 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Batch size + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 200 + + + + + + + + + + + + + 400 + + + + + + + + + + + + + 600 + + + + + + + + + + + + + 800 + + + + + + + + + + + + + 1000 + + + + + + + + + + + + + 1200 + + + + + + + + + + + + + 1400 + + + + Images/s + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + B200 · request + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 500 + + + + + + + + + + + + + 1000 + + + + + + + + + + + + + 1500 + + + + + + + + + + + + + 2000 + + + + Images/s + + + + + + + + + + + + + + V3 PyTorch + + + + + + + + + + + + + V3 ONNX + + + + + + + + + + + + + V3 PyTorch + TTA + + + + + + + + + + + + + V3 ONNX + TTA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1,976 + + + 997 + + + 624 + + + 396 + + + B200 · streaming, batch 256 + + + + Global vocabulary · circles/lines: retained earlier CPU and GPU request measurements; diamonds/bars: updated B200 batch 256. + Median and range; earlier: 3 process trials. Updated: 3 repetitions per variant; streaming: 4,096 warm images including startup. + Different campaigns are not joined as a scaling curve. Updated runtime: 503de96. Settings and source observations: linked evidence. + + + + + + + + + + + + + + + + + + + + + + + + + + + + MAMBO v2 + + + + + + + + + + + + + + + + + + + + + + + + V3 PyTorch + + + + + + + + + + + + + + + + + + + + + + + + V3 ONNX + + + + + + + + + + + + + + + + + + + + + + + + V3 PyTorch + TTA + + + + + + + + + + + + + + + + + + + + + + + + V3 ONNX + TTA + + + + + + + + + + + + + + + diff --git a/docs/assets/mambo-indomain-campaign.json b/docs/assets/mambo-indomain-campaign.json new file mode 100644 index 0000000..8ff2fb1 --- /dev/null +++ b/docs/assets/mambo-indomain-campaign.json @@ -0,0 +1,733 @@ +{ + "environment_id": "j-12402286-job-0", + "fingerprint": { + "config": { + "environment_id": "j-12402286-job-0", + "v2_python": "/work/mini_trainer/.venv-mambo-runtime/bin/python", + "v3_python": "/work/mini_trainer/.venv-mambo-runtime/bin/python", + "metrics_python": "/work/mini_trainer/.venv-mambo-runtime/bin/python", + "legacy_source": "/home/ucloud/.cache/mambo-ucloud/legacy-source/32b3cd661778356b2e8c4cff5b10fa9061aa6f5d", + "legacy_weights": "/home/ucloud/.cache/mambo-ucloud/archives/MAMBO", + "hf_cache": "/home/ucloud/.cache/mambo-ucloud/huggingface/hub", + "bundle": "/home/ucloud/.cache/mambo-ucloud/models/2c327f197991d396", + "manifest": "/home/ucloud/.cache/mambo-ucloud/global-lepi-test-manifest.json", + "root": "/work/datasets/global_lepi", + "output": "/home/ucloud/.cache/mambo-ucloud/runs-transfers", + "cuda_visible_devices": "0", + "quality_device": "cuda:0", + "quality_batch_size": 32, + "qualification_count": 256, + "threads": 4, + "quality_presets": [ + "full" + ], + "timing_presets": [ + "full", + "north_europe" + ], + "timing_devices": [ + "cpu", + "cuda:0" + ], + "cpu_batches": [ + 1, + 8 + ], + "gpu_batches": [ + 1, + 8, + 32 + ], + "onnx_python": "/tmp/mambo-ort-ptx/bin/python", + "decode_workers": 48, + "prefetch_batches": 8, + "reuse_v2_from": "/home/ucloud/.cache/mambo-ucloud/runs-ptx", + "read_workers": 256, + "read_window": 4096, + "encoded_budget_mib": 2048, + "v3_batch_size": 256 + }, + "inputs": { + "manifest": "b5bc0f190efe00f5d7455faebce7541cd18e62bb1dc2841407bf98a8c3a6c590", + "bundle": "91118482591a966ea514594b11e784657898de7c9f4e6cb12b11700df9b84304", + "scripts": { + "dev/releases/mambo_v3/acceleration_report.py": "6abcdc616409397fca367b11e15c4c14818164d0aaca2e9fcbd37dacdf614388", + "dev/releases/mambo_v3/audit.py": "afead9cba151356d173de5d3d9d1eecd439f6713462b2099c2fb1698cbe09bd8", + "dev/releases/mambo_v3/benchmark.py": "3ae7b1f967076e71d665ca3c4bc063acb070598fa83255f009143940b0afc094", + "dev/releases/mambo_v3/benchmark_acceleration.py": "6cfb746d84ab722a2b2ced5058b154ad5b20b8b3eb877595e169362f052064d6", + "dev/releases/mambo_v3/build_bundle.py": "0219ff29a720fc2739d75ecce78c8eaf66604eb3750a5e2f69b23c731f313179", + "dev/releases/mambo_v3/build_presets.py": "878df0e46914b2e583940da7d1700cb8b0ea976a889118b543df1d42b98d2904", + "dev/releases/mambo_v3/check_legacy_fixture.py": "5ce2829176884f58da9b77df96333c57fba7cfde2ce0d1e8b8cf7e3764bcf2eb", + "dev/releases/mambo_v3/check_portable_install.py": "faa86fa2915f1b50292f792ad8aea92dbb5813b475bb02376bb2c8d583e63f6d", + "dev/releases/mambo_v3/compact_tta.py": "eb6309a4a689d8b4e62663f5d33fd06cbdecf30101cba11f60460147a2a030d1", + "dev/releases/mambo_v3/compact_tta_metrics.py": "c4a40db1643bb2544bbfbd0559f4cbcd4e5f677093a3eba1fddcce4551e89720", + "dev/releases/mambo_v3/compare_quality.py": "8ec7c46c877523c41e8ab2977b88d8e40f9240d4f469e76032818ec0dc9b108d", + "dev/releases/mambo_v3/comparison_charts.py": "ec653dcc738e8e10a7abd3a4d9edb1f8f2fdd4a238c5239a4cfe8eb1e87b409b", + "dev/releases/mambo_v3/composed_full.py": "706aae887e68e7001a000985aa492f0d8ec05dca4d8dd1ba72d1247a65a5b09f", + "dev/releases/mambo_v3/composed_metrics.py": "1b01531d64d74ca02ba5a250ff05917313cd1c4264bd97a7c63f784c91e1c2b0", + "dev/releases/mambo_v3/composed_report.py": "3d3f5adcb38471e6f610e381c997c39c7640dca706b6265172fe6b9db143261d", + "dev/releases/mambo_v3/defaults_report.py": "ec8831cbd75e378c021015298a840cd708cd036e9ac4fd3138dc1637e500e166", + "dev/releases/mambo_v3/evaluate.py": "deafad8bc562018a936ee7b6135dfa30cd0f2ae33229e6418d6b9b3cb0a00a5a", + "dev/releases/mambo_v3/evaluation_data.py": "45e277bd8ad011141ff892c8e608c89de2915efb52aae6f05c50d49ee0ef192a", + "dev/releases/mambo_v3/family_precision_report.py": "136e36cc6a0dca06c670df864ded8a238c9c5ee088beb729856a69770b1468a5", + "dev/releases/mambo_v3/frequency_comparison.py": "e4b3a66c52eeb4b1888aed7b032162564a5e720bf4fd8e1d84c9046ccbc26c69", + "dev/releases/mambo_v3/hash_images.py": "b5ff032b0baaeddde78859e9c961f6528ba8e189e477dcc6f6627f408536979e", + "dev/releases/mambo_v3/legacy_evaluation.py": "f6c2acc02b1d1d51d6a057ef4bc551ab398c7091c23c603e353484193aed4668", + "dev/releases/mambo_v3/loading_charts.py": "b66c20788825e4ecf73612079aa8ced924b6fd4bee04ba19d922909975466a49", + "dev/releases/mambo_v3/loading_scaling.py": "f36e0e6b83ce985a7da034d3f781976da8a13b655b1ed2818f4aab9c401fbf93", + "dev/releases/mambo_v3/metrics.py": "1c2116b5d98d19de685f4611e289abbaad5c66f537b8e7b9f3e34954c9c27e71", + "dev/releases/mambo_v3/package_download_metadata.py": "356312b595c573764ad06d0968c022cc39502968730769f4def7e7a76d3a9a90", + "dev/releases/mambo_v3/plot_overlap.py": "a646fb4ce31e5e84faff89501345e3f5ad05b4b3a7e2b7bcea8a16d6525d197b", + "dev/releases/mambo_v3/prefetch.py": "9224e3837ae64b8a329915284b5e7d79b39225e478a0bc6a426937755e7abb52", + "dev/releases/mambo_v3/prepare_ucloud.py": "4711c898b64c7f8f8a242fe479baace9da78950b496f31dd5298e623395a653a", + "dev/releases/mambo_v3/probe_onnx_cuda.py": "d9d27bb61807f0d94a2b9a806f31fbbc22bd86eb12fc5820aa24e5067883fafe", + "dev/releases/mambo_v3/probe_preprocessing.py": "81db56e6961dbb1c6e7e201ffcd0981428e496135743914c1683cedc5fed0252", + "dev/releases/mambo_v3/profile_batch_scaling.py": "2e8ae5c53ad97c6173adb9ec01960e0b3cc07dca6b2b218c3499799b00768008", + "dev/releases/mambo_v3/profile_onnx_batch.py": "c66395fe4060f5f5a275636ec116dbbb8a4acb19570add4730f04a7d96e7fa1b", + "dev/releases/mambo_v3/profile_preprocessing.py": "5805c5c61e07c90c1dc0093fe1609c001dda0121e2d6831082fd108b0cb3027c", + "dev/releases/mambo_v3/promoted_report.py": "3c87fd0abb76a308c4ffa453e4005834520214a8821f53783155364a7e5a9c14", + "dev/releases/mambo_v3/qualify_bundle.py": "441a5295079e60cea66aab49e86a7ee03fe22b044ce275b478c6f648abe78d45", + "dev/releases/mambo_v3/qualify_precision.py": "e36c31ae6624a5927a2370b57d70296fdcaee8d5bb254a89aa645bb575dcb769", + "dev/releases/mambo_v3/qualify_tta.py": "fa8023179228dd3192ea535e4726744aa25c1138fcb0c34f0b1a6706118c4fa6", + "dev/releases/mambo_v3/reconstruct_presets.py": "4be1c2073f5bfd298e78a761353f8632dd38e5819ec9a37ef650635379cd7067", + "dev/releases/mambo_v3/release_comparison.py": "7340be6992c730920a8f8ab0dcb430e60b16c4c791b4764a6e5e66b3f147a7d6", + "dev/releases/mambo_v3/run_local.py": "20a3032a3a294a517b226362ae7e9940b4cbfdbe1caa8bce1bab5a91ebc230c3", + "dev/releases/mambo_v3/setup_ucloud_release.py": "fb566e87b0114f9fda34a94aebe2984845dbe07e9db5c4309403186b7ad43404", + "dev/releases/mambo_v3/summarize.py": "f336b3a989cd30c2c24ccc18b5d39378985f7e1ef53988e9a08d5834358a05cc", + "dev/releases/mambo_v3/summarize_batch_scaling.py": "2e5f01d9257b9138664c0e08ea2c1e004a8398f1d4adcded35e43ebe8ecef7a4", + "dev/releases/mambo_v3/tail_charts.py": "d3eb76ebee762841337ace7adee06130d29293a63112a0076489b2673b7298d1", + "dev/releases/mambo_v3/tail_report.py": "115156ae1c9e4a801bd943c35a833be8c48b00dcdb54ddead49026070f5d5c94", + "dev/releases/mambo_v3/threshold_report.py": "3682d8c7a96829c371e09b3e9c82add0534eff97cb28c3f5aa1f95c4f61cb1fc", + "dev/releases/mambo_v3/tta_candidates.py": "88cc7d74a095656000ab50bf0fe8741886c8283d7d4345e32d29609cb04f7c6a", + "dev/releases/mambo_v3/tta_charts.py": "2366dd549128719cc47265d8ead1007af5ba394f0da774697f559a640c396333", + "dev/releases/mambo_v3/tta_report.py": "698c5e081ff3eef9ad9ceb28be37de0836a613b94763f462878804157d4237ca", + "dev/releases/mambo_v3/ucloud_release.py": "676e3676c2abc890635c65b49672830ff6dd45926ee902cdf3beddd87034c480", + "dev/releases/mambo_v3/ucloud_summary.py": "e0efad6426b6c8d8f39e5c627b8bf5c52397f3e01020728b2db1c1d7ed76f994", + "deployment/mambo_deploy/__init__.py": "30a425a6bc569f7037fbdf058a59b7abbf1cc55fb951735b0d231edad926ccd9", + "deployment/mambo_deploy/augmentation.py": "a633c4b75577c18cfd987287d5b961448c1e49b197d48bdf234efb70b1986cc9", + "deployment/mambo_deploy/bundle.py": "e4e2b7f135c1a1d5d8990ab0c535eeb3e21a2380c8cf8c469bcc1ebbbda2a38e", + "deployment/mambo_deploy/cli.py": "0259e7cc6a93bd952866218166c962c82964714faa3267d7773fee07ba65240f", + "deployment/mambo_deploy/download.py": "cd388130e064790c17b510829c58a0dc1b00af2311e91d575090ced96c3c48f6", + "deployment/mambo_deploy/onnx_session.py": "c5b38486690a5183cec73ad745adba89825d70da7a65b85ea772499e17ea0124", + "deployment/mambo_deploy/predictor.py": "b0ee2d2585b52bdb3e86e934e14f7f3793b18467eb8ff4484b110c90eb7c4c11", + "deployment/mambo_deploy/preprocessing.py": "40d0667c25f85dccf2811c51d7dc8113aa1b236d48a68ebe61c6b1073fe40bd5", + "deployment/mambo_deploy/result_worker.py": "4126c2da2fb6b21bb89ee38405a6787c7fd5e9bcb2282c3a7cd537321c1c9139", + "deployment/mambo_deploy/results.py": "0b15face20eaa2b19b19b612285f44c94752ed8a208c3d5bace631c4743b128e", + "deployment/mambo_deploy/streaming.py": "c6c72fe53fc4651fec75bdc00377ea4028bde2d0c90e17ee660250535df8af69", + "deployment/mambo_deploy/transfers.py": "119fa1986acaa616dd0ff23892d90c85cfad13071362c2aad81e702802642e24" + }, + "environments": { + "/tmp/mambo-ort-ptx/bin/python": { + "python": "3.13.15 (main, Sep 1 2026, 14:18:08) [Clang 22.1.3 ]", + "packages": [ + [ + "coloredlogs", + "15.0.1", + null + ], + [ + "flatbuffers", + "25.12.19", + null + ], + [ + "humanfriendly", + "10.0", + null + ], + [ + "mambo-deploy", + "0.3.0", + "{\"url\":\"file:///work/mini_trainer/deployment\",\"dir_info\":{}}" + ], + [ + "mpmath", + "1.3.0", + null + ], + [ + "numpy", + "2.5.3", + null + ], + [ + "nvidia-cublas-cu12", + "12.9.2.10", + null + ], + [ + "nvidia-cuda-nvrtc-cu12", + "12.9.86", + null + ], + [ + "nvidia-cuda-runtime-cu12", + "12.9.79", + null + ], + [ + "nvidia-cudnn-cu12", + "9.26.0.51", + null + ], + [ + "nvidia-cufft-cu12", + "11.4.1.4", + null + ], + [ + "nvidia-curand-cu12", + "10.3.10.19", + null + ], + [ + "nvidia-nvjitlink-cu12", + "12.9.86", + null + ], + [ + "onnxruntime-gpu", + "1.22.0", + null + ], + [ + "packaging", + "26.3", + null + ], + [ + "pillow", + "12.3.0", + null + ], + [ + "protobuf", + "7.36.2", + null + ], + [ + "sympy", + "1.14.0", + null + ] + ] + }, + "/work/mini_trainer/.venv-mambo-runtime/bin/python": { + "python": "3.13.15 (main, Sep 1 2026, 14:18:08) [Clang 22.1.3 ]", + "packages": [ + [ + "Jinja2", + "3.1.6", + null + ], + [ + "Markdown", + "3.10.3", + null + ], + [ + "MarkupSafe", + "3.0.3", + null + ], + [ + "PyYAML", + "6.0.3", + null + ], + [ + "Werkzeug", + "3.1.8", + null + ], + [ + "absl-py", + "2.5.0", + null + ], + [ + "annotated-types", + "0.8.0", + null + ], + [ + "anyio", + "4.15.1", + null + ], + [ + "biopython", + "1.88", + null + ], + [ + "certifi", + "2026.7.22", + null + ], + [ + "charset-normalizer", + "3.5.1", + null + ], + [ + "click", + "8.5.0", + null + ], + [ + "cloudpickle", + "3.1.2", + null + ], + [ + "contourpy", + "1.4.0", + null + ], + [ + "cuda-bindings", + "13.4.3", + null + ], + [ + "cuda-pathfinder", + "1.8.2", + null + ], + [ + "cuda-toolkit", + "13.2.1", + null + ], + [ + "cycler", + "0.12.1", + null + ], + [ + "diskcache", + "5.6.3", + null + ], + [ + "filelock", + "4.0.3", + null + ], + [ + "flatbuffers", + "25.12.19", + null + ], + [ + "fonttools", + "4.66.0", + null + ], + [ + "fsspec", + "2026.9.0", + null + ], + [ + "ftfy", + "6.3.1", + null + ], + [ + "googleapis-common-protos", + "1.75.3", + null + ], + [ + "grpcio", + "1.84.0", + null + ], + [ + "h11", + "0.16.0", + null + ], + [ + "hf-xet", + "1.6.0", + null + ], + [ + "httpcore2", + "2.13.1", + null + ], + [ + "httpx2", + "2.13.1", + null + ], + [ + "huggingface_hub", + "2.0.0", + null + ], + [ + "idna", + "3.20", + null + ], + [ + "joblib", + "1.6.0", + null + ], + [ + "kiwisolver", + "1.5.1", + null + ], + [ + "mambo-deploy", + "0.3.0", + "{\"url\":\"file:///work/mini_trainer/deployment\",\"dir_info\":{}}" + ], + [ + "matplotlib", + "3.11.2", + null + ], + [ + "mini_metrics", + "0.3.0", + "{\"url\":\"https://github.com/GuillaumeMougeot/mini_metrics.git\",\"vcs_info\":{\"vcs\":\"git\",\"commit_id\":\"70cc69adc05362863439277048e06386c1f885e1\",\"requested_revision\":\"70cc69adc05362863439277048e06386c1f885e1\"}}" + ], + [ + "mini_trainer", + "0.3.0", + "{\"url\":\"file:///work/mini_trainer\",\"dir_info\":{}}" + ], + [ + "mpmath", + "1.3.0", + null + ], + [ + "narwhals", + "2.26.0", + null + ], + [ + "networkx", + "3.7", + null + ], + [ + "numpy", + "2.5.3", + null + ], + [ + "nvidia-cublas", + "13.4.0.1", + null + ], + [ + "nvidia-cuda-cupti", + "13.2.75", + null + ], + [ + "nvidia-cuda-nvrtc", + "13.2.78", + null + ], + [ + "nvidia-cuda-runtime", + "13.2.75", + null + ], + [ + "nvidia-cudnn-cu13", + "9.24.0.43", + null + ], + [ + "nvidia-cufft", + "12.2.0.46", + null + ], + [ + "nvidia-cufile", + "1.17.1.22", + null + ], + [ + "nvidia-curand", + "10.4.2.55", + null + ], + [ + "nvidia-cusolver", + "12.2.0.1", + null + ], + [ + "nvidia-cusparse", + "12.7.10.1", + null + ], + [ + "nvidia-cusparselt-cu13", + "0.8.1", + null + ], + [ + "nvidia-nccl-cu13", + "2.30.7", + null + ], + [ + "nvidia-nvjitlink", + "13.4.92", + null + ], + [ + "nvidia-nvshmem-cu13", + "3.4.5", + null + ], + [ + "nvidia-nvtx", + "13.2.75", + null + ], + [ + "onnxruntime-gpu", + "1.30.0", + null + ], + [ + "open_clip_torch", + "3.3.0", + null + ], + [ + "opentelemetry-api", + "1.44.0", + null + ], + [ + "opentelemetry-exporter-otlp-proto-common", + "1.44.0", + null + ], + [ + "opentelemetry-exporter-otlp-proto-http", + "1.44.0", + null + ], + [ + "opentelemetry-proto", + "1.44.0", + null + ], + [ + "opentelemetry-sdk", + "1.44.0", + null + ], + [ + "opentelemetry-semantic-conventions", + "0.65b0", + null + ], + [ + "packaging", + "26.3", + null + ], + [ + "pandas", + "3.0.6", + null + ], + [ + "pillow", + "12.3.0", + null + ], + [ + "platformdirs", + "4.11.12", + null + ], + [ + "protobuf", + "7.36.2", + null + ], + [ + "psutil", + "7.2.2", + null + ], + [ + "pyCirclize", + "1.10.1", + null + ], + [ + "pyarrow", + "25.0.1", + null + ], + [ + "pydantic", + "2.13.5", + null + ], + [ + "pydantic_core", + "2.46.5", + null + ], + [ + "pyparsing", + "3.3.3", + null + ], + [ + "python-dateutil", + "2.9.0.post0", + null + ], + [ + "regex", + "2026.9.10", + null + ], + [ + "requests", + "2.34.2", + null + ], + [ + "safetensors", + "0.8.0", + null + ], + [ + "scikit-learn", + "1.9.1", + null + ], + [ + "scipy", + "1.18.1", + null + ], + [ + "setuptools", + "81.0.0", + null + ], + [ + "six", + "1.17.0", + null + ], + [ + "sympy", + "1.14.0", + null + ], + [ + "tensorboard", + "2.21.0", + null + ], + [ + "tensorboard-data-server", + "0.7.2", + null + ], + [ + "threadpoolctl", + "3.7.0", + null + ], + [ + "timm", + "1.0.30", + null + ], + [ + "torch", + "2.14.0+cu132", + null + ], + [ + "torchvision", + "0.29.0+cu132", + null + ], + [ + "tqdm", + "4.70.1", + null + ], + [ + "triton", + "3.8.0", + null + ], + [ + "truststore", + "0.10.4", + null + ], + [ + "typing-inspection", + "0.4.4", + null + ], + [ + "typing_extensions", + "4.16.0", + null + ], + [ + "urllib3", + "2.8.0", + null + ], + [ + "wandb", + "0.30.0", + null + ], + [ + "wcwidth", + "0.9.1", + null + ], + [ + "xxhash", + "4.0.1", + null + ] + ] + } + }, + "revision": "9d6e29e2ab7250835754305f0fe219dc2a146f39" + } + }, + "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", + "policy": "Original full test split; no threshold selection on test; all and known truth; timings isolated from collection", + "sample_ids_sha256": "b1a0ce749a3534e35a283cbe7c17c0fc273ad60affcca6d2866bb24283090bd7", + "timing_bank_sha256": "2301b147066a2545f7bef9ea9698bad2210f0702e4056fd11ea2938cdb5bcb6f", + "source_sha256": { + "ucloud-summary.json": "084595c8c4380f6b59fb521706fa862adfc37d67c450d6fcffd06fc58dff5c22", + "speed.csv": "604180640f24d7ed180832d0b2ac4fbfea4dbf7a5b8be173edb760388e51820f", + "streaming_speed.csv": "acadae4e9b747afa63af2db6e198db4694afd66dbeadd111e5ba41ed1956d4bc" + } +} diff --git a/docs/assets/mambo-indomain-quality.svg b/docs/assets/mambo-indomain-quality.svg new file mode 100644 index 0000000..a017ec0 --- /dev/null +++ b/docs/assets/mambo-indomain-quality.svg @@ -0,0 +1,3049 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.11.2, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + + + + MAMBO v2 + + + + + + + + + + V3 PyTorch + + + + + + + + + + V3 ONNX + + + + + + + + + + V3 PyTorch + TTA + + + + + + + + + + V3 ONNX + TTA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Species · Macro accuracy (%) + + + + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Species · Macro-F1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100.0% + + + 96.0% + + + 100.0% + + + 97.5% + + + 100.0% + + + 97.5% + + + 100.0% + + + 97.0% + + + 100.0% + + + 97.0% + + + Species · Acceptance coverage (%) + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + MAMBO v2 + + + + + + + + + + V3 PyTorch + + + + + + + + + + V3 ONNX + + + + + + + + + + V3 PyTorch + TTA + + + + + + + + + + V3 ONNX + TTA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Genus · Macro accuracy (%) + + + + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Genus · Macro-F1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100.0% + + + 96.3% + + + 100.0% + + + 98.0% + + + 100.0% + + + 98.0% + + + 100.0% + + + 97.3% + + + 100.0% + + + 97.3% + + + Genus · Acceptance coverage (%) + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + MAMBO v2 + + + + + + + + + + V3 PyTorch + + + + + + + + + + V3 ONNX + + + + + + + + + + V3 PyTorch + TTA + + + + + + + + + + V3 ONNX + TTA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Family · Macro accuracy (%) + + + + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Family · Macro-F1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100.0% + + + 98.5% + + + 100.0% + + + 99.0% + + + 100.0% + + + 99.0% + + + 100.0% + + + 97.7% + + + 100.0% + + + 97.7% + + + Family · Acceptance coverage (%) + + + + In-domain global-lepi test · global vocabulary + + + Same 568,939 reporting images throughout; thresholds fitted on 63,974 separate images using mini_metrics Macro-F1. + Hollow → filled changes the averaging domain, not predictions. >5 requires truth AND accepted-prediction support in every pipeline. + Retained classes differ between confidence settings. No evaluation rows removed; per-class FP/FN remain intact. + Coverage is unchanged by class truncation. TTA: rotation30_pad25_3; recipe selected on Flemming, not this test set. + + + + + + + Shape = confidence setting + + + + + + + + + + + Unthresholded + + + + + + + + + + + Calibrated + + + + + + + + Fill = averaging domain + + + + + + + + Full support + + + + + + + + + + + Truncated (support >5) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/mambo-indomain-speed.csv b/docs/assets/mambo-indomain-speed.csv new file mode 100644 index 0000000..fed5c4d --- /dev/null +++ b/docs/assets/mambo-indomain-speed.csv @@ -0,0 +1,175 @@ +environment_id,variant,device,trial,preset,batch_size,images_per_second,seconds,peak_host_rss_mib +j-12402286-job-0,v2,cpu,trial-0-v2-cpu,full,1,1.8118844130674805,"[0.5598056560847908, 0.5531074069440365, 0.5593097188975662, 0.5500260358676314, 0.5513407660182565, 0.5519115859642625, 0.5502322369720787]",4581.8515625 +j-12402286-job-0,v2,cpu,trial-0-v2-cpu,north_europe,1,1.8378617180208665,"[0.5421012500301003, 0.5449547581374645, 0.5411054699216038, 0.5458362558856606, 0.5441105770878494, 0.5461597528774291, 0.5435048039071262]",4581.8515625 +j-12402286-job-0,v2,cpu,trial-0-v2-cpu,full,8,1.9819228538278038,"[4.0097632319666445, 4.035052950959653, 4.036484056152403, 4.052431344985962, 4.046968417009339, 4.031886751996353, 4.04219921422191]",4581.8515625 +j-12402286-job-0,v2,cpu,trial-0-v2-cpu,north_europe,8,1.9873168667309,"[4.016418604878709, 4.015866093803197, 4.026619980111718, 4.025528155034408, 4.040538410888985, 4.028720021946356, 4.01123312395066]",4581.8515625 +j-12402286-job-0,torch,cpu,trial-0-torch-cpu,full,1,18.773565083969793,"[0.05192704009823501, 0.053253568010404706, 0.053063621977344155, 0.053309903014451265, 0.05326638789847493, 0.053548603085801005, 0.053931969916448]",3438.1953125 +j-12402286-job-0,torch,cpu,trial-0-torch-cpu,north_europe,1,19.608615518753595,"[0.0493916308041662, 0.0506248080637306, 0.05397037696093321, 0.05188810080289841, 0.05133753200061619, 0.05099799111485481, 0.05074841505847871]",3438.1953125 +j-12402286-job-0,torch,cpu,trial-0-torch-cpu,full,8,32.06470541085348,"[0.24803464789874852, 0.24921914213337004, 0.25404071412049234, 0.25220209499821067, 0.24949550908058882, 0.25121114193461835, 0.2479143759701401]",3438.1953125 +j-12402286-job-0,torch,cpu,trial-0-torch-cpu,north_europe,8,32.4939802296532,"[0.24331936007365584, 0.24609336792491376, 0.2490320538636297, 0.24619944812729955, 0.24873223202303052, 0.24366387887857854, 0.24782164092175663]",3438.1953125 +j-12402286-job-0,onnx,cpu,trial-0-onnx-cpu,full,1,25.252030387472338,"[0.039362087147310376, 0.03960077604278922, 0.039295236114412546, 0.040591028053313494, 0.040940073085948825, 0.03971679089590907, 0.03933157119899988]",2684.859375 +j-12402286-job-0,onnx,cpu,trial-0-onnx-cpu,north_europe,1,21.086797547826855,"[0.03908186499029398, 0.055052950978279114, 0.048711427953094244, 0.04716102289967239, 0.04788451315835118, 0.0474230379331857, 0.04727510595694184]",2684.859375 +j-12402286-job-0,onnx,cpu,trial-0-onnx-cpu,full,8,34.45055136496956,"[0.23389615188352764, 0.23221689299680293, 0.24549970892257988, 0.23073260695673525, 0.23048642603680491, 0.24050917197018862, 0.23132266593165696]",2684.859375 +j-12402286-job-0,onnx,cpu,trial-0-onnx-cpu,north_europe,8,36.84371633820095,"[0.21713336207903922, 0.21594624407589436, 0.21369783696718514, 0.21867421292699873, 0.22980202292092144, 0.22040039184503257, 0.21298504318110645]",2684.859375 +j-12402286-job-0,torch-tta,cpu,trial-0-torch-tta-cpu,full,1,5.982112764439149,"[0.16745743993669748, 0.16899099084548652, 0.1671650200150907, 0.16742447996512055, 0.16586729395203292, 0.16567778890021145, 0.1668674210086465]",4314.37109375 +j-12402286-job-0,torch-tta,cpu,trial-0-torch-tta-cpu,north_europe,1,6.129117001871484,"[0.16287323297001421, 0.16466836794279516, 0.16084106196649373, 0.16607555793598294, 0.16198024689219892, 0.1659450209699571, 0.16315563884563744]",4314.37109375 +j-12402286-job-0,torch-tta,cpu,trial-0-torch-tta-cpu,full,8,9.86198241896518,"[0.8111959300003946, 0.8157305719796568, 0.8271116188261658, 0.8432108249980956, 0.8080304500181228, 0.791286783060059, 0.7902445029467344]",4314.37109375 +j-12402286-job-0,torch-tta,cpu,trial-0-torch-tta-cpu,north_europe,8,11.090379432408348,"[0.7179365169722587, 0.7207825449295342, 0.7228529239073396, 0.7213459240738302, 0.7223941530101001, 0.7208065008744597, 0.7257726530078799]",4314.37109375 +j-12402286-job-0,onnx-tta,cpu,trial-0-onnx-tta-cpu,full,1,8.262693364512673,"[0.1206235159188509, 0.12110480992123485, 0.12121195206418633, 0.12076002103276551, 0.12792122596874833, 0.12102591199800372, 0.12068235385231674]",3404.2265625 +j-12402286-job-0,onnx-tta,cpu,trial-0-onnx-tta-cpu,north_europe,1,8.32628728459142,"[0.11874060006812215, 0.12130865687504411, 0.11909768707118928, 0.12351267598569393, 0.1201015489641577, 0.11952165607362986, 0.12335676187649369]",3404.2265625 +j-12402286-job-0,onnx-tta,cpu,trial-0-onnx-tta-cpu,full,8,12.08724553155887,"[0.6653836239129305, 0.6583668161183596, 0.663738896837458, 0.6546928018797189, 0.6508324679452926, 0.6618546780664474, 0.6636198570486158]",3404.2265625 +j-12402286-job-0,onnx-tta,cpu,trial-0-onnx-tta-cpu,north_europe,8,12.360899894394624,"[0.6507734870538116, 0.6397130631376058, 0.6421967730857432, 0.6472020701039582, 0.6472110629547387, 0.6474834938999265, 0.639450018061325]",3404.2265625 +j-12402286-job-0,v2,cuda:0,trial-0-v2-cuda-0,full,1,159.71356264433828,"[0.0063039930537343025, 0.006305434973910451, 0.006233125925064087, 0.0062791050877422094, 0.006261209025979042, 0.006236240966245532, 0.006178524112328887]",4587.48828125 +j-12402286-job-0,v2,cuda:0,trial-0-v2-cuda-0,north_europe,1,171.7041858561048,"[0.00606002495624125, 0.005808257032185793, 0.0058175798039883375, 0.005840705940499902, 0.005831901915371418, 0.005823969841003418, 0.005822147009894252]",4587.48828125 +j-12402286-job-0,v2,cuda:0,trial-0-v2-cuda-0,full,8,422.20877286715364,"[0.018486206885427237, 0.018466537119820714, 0.019866775954142213, 0.018947971984744072, 0.01934968796558678, 0.019701206823810935, 0.018616032088175416]",4587.48828125 +j-12402286-job-0,v2,cuda:0,trial-0-v2-cuda-0,north_europe,8,441.3241336330918,"[0.018405034905299544, 0.018186987144872546, 0.01842442387714982, 0.01792710507288575, 0.01810313994064927, 0.017758831847459078, 0.01812726608477533]",4587.48828125 +j-12402286-job-0,v2,cuda:0,trial-0-v2-cuda-0,full,32,534.519888907689,"[0.06067607691511512, 0.0638898469042033, 0.05983407003805041, 0.059084321139380336, 0.0659339448902756, 0.05947311595082283, 0.05986680882051587]",4587.48828125 +j-12402286-job-0,v2,cuda:0,trial-0-v2-cuda-0,north_europe,32,500.9336702458657,"[0.06388071295805275, 0.06535172904841602, 0.0697851839940995, 0.059929753886535764, 0.06386400805786252, 0.05971407890319824, 0.08290322800166905]",4587.48828125 +j-12402286-job-0,torch,cuda:0,trial-0-torch-cuda-0,full,1,82.88776326642262,"[0.012180011020973325, 0.01211761706508696, 0.012061351910233498, 0.012064506998285651, 0.012174042174592614, 0.011996163986623287, 0.01205331995151937]",8748.5859375 +j-12402286-job-0,torch,cuda:0,trial-0-torch-cuda-0,north_europe,1,94.66606958628452,"[0.010772902052849531, 0.010660764062777162, 0.010575013933703303, 0.010551288956776261, 0.010558669921010733, 0.010563446907326579, 0.010562114883214235]",8748.5859375 +j-12402286-job-0,torch,cuda:0,trial-0-torch-cuda-0,full,8,329.676534848332,"[0.023103289073333144, 0.02612714283168316, 0.024266209919005632, 0.026091889943927526, 0.024249885929748416, 0.02413583407178521, 0.029060428962111473]",8748.5859375 +j-12402286-job-0,torch,cuda:0,trial-0-torch-cuda-0,north_europe,8,321.5584914015297,"[0.02506410190835595, 0.025000977097079158, 0.02487883297726512, 0.024151788093149662, 0.02245876914821565, 0.025216581067070365, 0.02454782510176301]",8748.5859375 +j-12402286-job-0,torch,cuda:0,trial-0-torch-cuda-0,full,32,478.5154067344906,"[0.06442678486928344, 0.07067755796015263, 0.06746875704266131, 0.06502768979407847, 0.06610617507249117, 0.06687349989078939, 0.06953839189372957]",8748.5859375 +j-12402286-job-0,torch,cuda:0,trial-0-torch-cuda-0,north_europe,32,440.29805404109663,"[0.0623072839807719, 0.07974362000823021, 0.06216668197885156, 0.07500562607310712, 0.0722976780962199, 0.07267804094590247, 0.07345631183125079]",8748.5859375 +j-12402286-job-0,torch,cuda:0,trial-0-torch-cuda-0,full,256,473.30187695540536,"[0.5903866898734123, 0.5399209200404584, 0.5256964520085603, 0.5408810158260167, 0.5698406419251114, 0.5487330839969218, 0.5309413929935545]",8748.5859375 +j-12402286-job-0,torch,cuda:0,trial-0-torch-cuda-0,north_europe,256,509.63960405887036,"[0.5185853492002934, 0.4925630991347134, 0.5023157501127571, 0.4884355610702187, 0.5026476308703423, 0.5019327839836478, 0.5080248010344803]",8748.5859375 +j-12402286-job-0,onnx,cuda:0,trial-0-onnx-cuda-0,full,1,113.6131370481929,"[0.009512839838862419, 0.008801799034699798, 0.008537750924006104, 0.008859846973791718, 0.008465873776003718, 0.008470541099086404, 0.011722298106178641]",6922.67578125 +j-12402286-job-0,onnx,cuda:0,trial-0-onnx-cuda-0,north_europe,1,138.7928342669094,"[0.007262099999934435, 0.007271014153957367, 0.007194858975708485, 0.007155319210141897, 0.007141758920624852, 0.007326576858758926, 0.007204982917755842]",6922.67578125 +j-12402286-job-0,onnx,cuda:0,trial-0-onnx-cuda-0,full,8,330.6140063438729,"[0.02645369991660118, 0.022592162946239114, 0.02583598904311657, 0.023288171039894223, 0.021401920123025775, 0.02419740194454789, 0.024584023980423808]",6922.67578125 +j-12402286-job-0,onnx,cuda:0,trial-0-onnx-cuda-0,north_europe,8,352.037172129845,"[0.021658926969394088, 0.020491539034992456, 0.02164299297146499, 0.02360737300477922, 0.02395508694462478, 0.022724872920662165, 0.023543456103652716]",6922.67578125 +j-12402286-job-0,onnx,cuda:0,trial-0-onnx-cuda-0,full,32,447.84025525941945,"[0.07305560284294188, 0.07298052008263767, 0.06922221789136529, 0.07145405001938343, 0.07235863315872848, 0.07027801894582808, 0.07113562989979982]",6922.67578125 +j-12402286-job-0,onnx,cuda:0,trial-0-onnx-cuda-0,north_europe,32,454.4771033525177,"[0.07847378496080637, 0.0703329520765692, 0.07661737804301083, 0.07041058782488108, 0.07012881408445537, 0.07049964205361903, 0.0671302869450301]",6922.67578125 +j-12402286-job-0,onnx,cuda:0,trial-0-onnx-cuda-0,full,256,440.1144009851269,"[0.5717368379700929, 0.5882077501155436, 0.5647427421063185, 0.5975073499139398, 0.591107077896595, 0.5810348049271852, 0.5816669471096247]",6922.67578125 +j-12402286-job-0,onnx,cuda:0,trial-0-onnx-cuda-0,north_europe,256,466.1911936968771,"[0.54900794592686, 0.5328393769450486, 0.5351080049294978, 0.5714165659155697, 0.5491309219505638, 0.5547846788540483, 0.5674031691160053]",6922.67578125 +j-12402286-job-0,torch-tta,cuda:0,trial-0-torch-tta-cuda-0,full,1,25.77278001663632,"[0.038760185008868575, 0.03895626007579267, 0.03880062606185675, 0.03898235014639795, 0.0388006460852921, 0.038777069887146354, 0.03862898703664541]",13732.86328125 +j-12402286-job-0,torch-tta,cuda:0,trial-0-torch-tta-cuda-0,north_europe,1,27.227900600986786,"[0.03650639997795224, 0.03680428885854781, 0.036754583939909935, 0.03654780308715999, 0.03689834079705179, 0.03672703285701573, 0.036662244936451316]",13732.86328125 +j-12402286-job-0,torch-tta,cuda:0,trial-0-torch-tta-cuda-0,full,8,99.54417969759442,"[0.08036632603034377, 0.08473288198001683, 0.07552051800303161, 0.08759120712056756, 0.07841285387985408, 0.08712896122597158, 0.0796153349801898]",13732.86328125 +j-12402286-job-0,torch-tta,cuda:0,trial-0-torch-tta-cuda-0,north_europe,8,101.10871662764575,"[0.07481043902225792, 0.07912275288254023, 0.08086353493854403, 0.07912016892805696, 0.08882537600584328, 0.07169873197562993, 0.08031963580287993]",13732.86328125 +j-12402286-job-0,torch-tta,cuda:0,trial-0-torch-tta-cuda-0,full,32,141.62023365612262,"[0.22613058588467538, 0.21947938902303576, 0.22595641296356916, 0.22569528897292912, 0.22925979807041585, 0.22593854600563645, 0.22688736487179995]",13732.86328125 +j-12402286-job-0,torch-tta,cuda:0,trial-0-torch-tta-cuda-0,north_europe,32,134.61613589128336,"[0.23786216299049556, 0.26676358096301556, 0.22510312893427908, 0.2543662399984896, 0.23771295906044543, 0.22919729398563504, 0.22667260188609362]",13732.86328125 +j-12402286-job-0,torch-tta,cuda:0,trial-0-torch-tta-cuda-0,full,256,145.4563147380399,"[1.7471032990142703, 1.848585378145799, 1.7710895768832415, 1.7599785919301212, 1.789674888830632, 1.7099389729555696, 1.7481422240380198]",13732.86328125 +j-12402286-job-0,torch-tta,cuda:0,trial-0-torch-tta-cuda-0,north_europe,256,146.1398414161973,"[1.7028252279851586, 1.7517468030564487, 1.688165568979457, 1.6661955381277949, 1.7871254589408636, 2.218830683035776, 2.1324612388852984]",13732.86328125 +j-12402286-job-0,onnx-tta,cuda:0,trial-0-onnx-tta-cuda-0,full,1,35.532385252582785,"[0.03191231586970389, 0.028284823056310415, 0.028143340023234487, 0.027871930971741676, 0.02781070815399289, 0.027790748979896307, 0.028204301139339805]",11555.5859375 +j-12402286-job-0,onnx-tta,cuda:0,trial-0-onnx-tta-cuda-0,north_europe,1,36.771653484791806,"[0.026865995954722166, 0.027348933974280953, 0.027257435023784637, 0.02724255295470357, 0.027194860856980085, 0.027023043017834425, 0.027147690067067742]",11555.5859375 +j-12402286-job-0,onnx-tta,cuda:0,trial-0-onnx-tta-cuda-0,full,8,105.27877679395911,"[0.07678151899017394, 0.07287920103408396, 0.08103566593490541, 0.07533648214302957, 0.07598872482776642, 0.07834966108202934, 0.07468052417971194]",11555.5859375 +j-12402286-job-0,onnx-tta,cuda:0,trial-0-onnx-tta-cuda-0,north_europe,8,109.99565276327142,"[0.07799976388923824, 0.08511138521134853, 0.07269248994998634, 0.08088010200299323, 0.07137880194932222, 0.07246160204522312, 0.07273014704696834]",11555.5859375 +j-12402286-job-0,onnx-tta,cuda:0,trial-0-onnx-tta-cuda-0,full,32,128.75608088994497,"[0.25812575104646385, 0.2496226339135319, 0.2479465790092945, 0.24618305289186537, 0.2497298049274832, 0.24853195110335946, 0.24478664994239807]",11555.5859375 +j-12402286-job-0,onnx-tta,cuda:0,trial-0-onnx-tta-cuda-0,north_europe,32,128.09036729403115,"[0.25169501500204206, 0.250091538997367, 0.24174840305931866, 0.26207018201239407, 0.240036133909598, 0.24713967298157513, 0.24982362589798868]",11555.5859375 +j-12402286-job-0,onnx-tta,cuda:0,trial-0-onnx-tta-cuda-0,full,256,130.43032693926654,"[2.0292546290438622, 1.944513760972768, 1.9627337139099836, 1.9228567408863455, 1.972897453000769, 1.9226515630725771, 1.9808490499854088]",11555.5859375 +j-12402286-job-0,onnx-tta,cuda:0,trial-0-onnx-tta-cuda-0,north_europe,256,122.26377819115693,"[1.9955810110550374, 2.071103529073298, 2.103893836028874, 2.0938335440587252, 2.0483566790353507, 2.1093847670126706, 2.221062398981303]",11555.5859375 +j-12402286-job-0,onnx-tta,cpu,trial-1-onnx-tta-cpu,full,1,6.75596119134303,"[0.14646412897855043, 0.1483337450772524, 0.1580319299828261, 0.1475024321116507, 0.1476692531723529, 0.1480174281168729, 0.14868402178399265]",3397.5078125 +j-12402286-job-0,onnx-tta,cpu,trial-1-onnx-tta-cpu,north_europe,1,6.822651158921427,"[0.14547044201754034, 0.14632983691990376, 0.14671937306411564, 0.15039914404042065, 0.1462649789173156, 0.14657058916054666, 0.1586985040921718]",3397.5078125 +j-12402286-job-0,onnx-tta,cpu,trial-1-onnx-tta-cpu,full,8,11.63371514486247,"[0.6962012129370123, 0.6839959709905088, 0.6876565138809383, 0.6862769259605557, 0.6919130848255008, 0.7119086098391563, 0.6861587781459093]",3397.5078125 +j-12402286-job-0,onnx-tta,cpu,trial-1-onnx-tta-cpu,north_europe,8,12.23551158111812,"[0.6762029870878905, 0.6538345329463482, 0.6545771821402013, 0.6430737329646945, 0.6487431330606341, 0.6449008660856634, 0.6622776610311121]",3397.5078125 +j-12402286-job-0,torch-tta,cpu,trial-1-torch-tta-cpu,full,1,6.353911302672763,"[0.15525876404717565, 0.15712836012244225, 0.1568535859696567, 0.15738337417133152, 0.16014939080923796, 0.1585964011028409, 0.16081210877746344]",4187.859375 +j-12402286-job-0,torch-tta,cpu,trial-1-torch-tta-cpu,north_europe,1,6.4244713318004605,"[0.15356798795983195, 0.16920459899120033, 0.1559280229266733, 0.15602170280180871, 0.15537062310613692, 0.15565483109094203, 0.15532190003432333]",4187.859375 +j-12402286-job-0,torch-tta,cpu,trial-1-torch-tta-cpu,full,8,9.365779609516762,"[0.899784438079223, 0.908878515008837, 0.8541734199970961, 0.8452214368153363, 0.8457925170660019, 0.8704305361025035, 0.8485985330771655]",4187.859375 +j-12402286-job-0,torch-tta,cpu,trial-1-torch-tta-cpu,north_europe,8,10.925273754071165,"[0.7698587840422988, 0.7589555780868977, 0.7167077970225364, 0.7322470978833735, 0.7229400761425495, 0.739312743069604, 0.7238768371753395]",4187.859375 +j-12402286-job-0,onnx,cpu,trial-1-onnx-cpu,full,1,25.31768884347062,"[0.03936560498550534, 0.03948273207060993, 0.03973217704333365, 0.039527239045128226, 0.03957147593609989, 0.03948797006160021, 0.039498076075688004]",2511.6328125 +j-12402286-job-0,onnx,cpu,trial-1-onnx-cpu,north_europe,1,26.028760793685077,"[0.037499195197597146, 0.03831630595959723, 0.040990792913362384, 0.040651271818205714, 0.03841903991997242, 0.03850294603034854, 0.03840801282785833]",2511.6328125 +j-12402286-job-0,onnx,cpu,trial-1-onnx-cpu,full,8,35.421368387507336,"[0.23015617206692696, 0.22585237002931535, 0.23093353305011988, 0.22976073599420488, 0.22319298493675888, 0.22484666598029435, 0.22235849895514548]",2511.6328125 +j-12402286-job-0,onnx,cpu,trial-1-onnx-cpu,north_europe,8,35.33864022342065,"[0.23100770101882517, 0.22638109303079545, 0.22427077498286963, 0.2259297240525484, 0.2347594320308417, 0.22617309098131955, 0.23673859285190701]",2511.6328125 +j-12402286-job-0,torch,cpu,trial-1-torch-cpu,full,1,16.198527038428924,"[0.0780041329562664, 0.06189068499952555, 0.06168139888904989, 0.061740308068692684, 0.06173161510378122, 0.0617340081371367, 0.06163357710465789]",3156.78125 +j-12402286-job-0,torch,cpu,trial-1-torch-cpu,north_europe,1,16.39848742407414,"[0.05901055596768856, 0.061691835056990385, 0.06055515306070447, 0.060981234069913626, 0.06096916692331433, 0.061089548049494624, 0.06128282891586423]",3156.78125 +j-12402286-job-0,torch,cpu,trial-1-torch-cpu,full,8,27.642719112441718,"[0.2936432999558747, 0.2894071298651397, 0.27978958492167294, 0.29107873793691397, 0.2889334859792143, 0.3011715980246663, 0.27577853412367404]",3156.78125 +j-12402286-job-0,torch,cpu,trial-1-torch-cpu,north_europe,8,32.034914488899396,"[0.25042425701394677, 0.24972752784378827, 0.24844128102995455, 0.25887357210740447, 0.2495469560381025, 0.2495462349615991, 0.25269569805823267]",3156.78125 +j-12402286-job-0,v2,cpu,trial-1-v2-cpu,full,1,1.817772373081537,"[0.5532833931501955, 0.555746752070263, 0.5485153030604124, 0.5501238850411028, 0.5486917190719396, 0.545396656030789, 0.551491835154593]",4580.44921875 +j-12402286-job-0,v2,cpu,trial-1-v2-cpu,north_europe,1,1.8455031230447507,"[0.5427428509574383, 0.5418576579540968, 0.539818748133257, 0.5418447989504784, 0.5432270499877632, 0.5479880489874631, 0.5392957900185138]",4580.44921875 +j-12402286-job-0,v2,cpu,trial-1-v2-cpu,full,8,1.974068964640723,"[4.0525433220900595, 4.035881021991372, 4.061371466144919, 4.046101082116365, 4.062707477947697, 4.041825053049251, 4.059707231121138]",4580.44921875 +j-12402286-job-0,v2,cpu,trial-1-v2-cpu,north_europe,8,1.9795949405909192,"[4.009429252007976, 4.046103483065963, 4.060272793984041, 4.080001945141703, 4.041230777045712, 3.979067053180188, 3.93344496213831]",4580.44921875 +j-12402286-job-0,onnx-tta,cuda:0,trial-1-onnx-tta-cuda-0,full,1,35.10418007739652,"[0.02980828401632607, 0.028706395998597145, 0.02852801699191332, 0.02844588295556605, 0.02846583304926753, 0.028482699068263173, 0.028486636001616716]",11622.4375 +j-12402286-job-0,onnx-tta,cuda:0,trial-1-onnx-tta-cuda-0,north_europe,1,36.685243230182216,"[0.02692680712789297, 0.02726262202486396, 0.027258916990831494, 0.027281691087409854, 0.027256052009761333, 0.02738477708771825, 0.027240809984505177]",11622.4375 +j-12402286-job-0,onnx-tta,cuda:0,trial-1-onnx-tta-cuda-0,full,8,109.5386863539322,"[0.07469335710629821, 0.07088668621145189, 0.07199720805510879, 0.07259518885985017, 0.07546746218577027, 0.07648908998817205, 0.07303355797193944]",11622.4375 +j-12402286-job-0,onnx-tta,cuda:0,trial-1-onnx-tta-cuda-0,north_europe,8,111.41391264979623,"[0.07389426394365728, 0.08379421709105372, 0.06892463192343712, 0.06975421193055809, 0.06943008303642273, 0.07180431787855923, 0.07927897991612554]",11622.4375 +j-12402286-job-0,onnx-tta,cuda:0,trial-1-onnx-tta-cuda-0,full,32,129.50510416208104,"[0.24829960195347667, 0.24574094987474382, 0.24102568090893328, 0.24115416500717402, 0.24709450802765787, 0.25395536608994007, 0.24713992583565414]",11622.4375 +j-12402286-job-0,onnx-tta,cuda:0,trial-1-onnx-tta-cuda-0,north_europe,32,133.27963667415108,"[0.23764376994222403, 0.23839785484597087, 0.27552488818764687, 0.24364052806049585, 0.24009669292718172, 0.24040215299464762, 0.23919702880084515]",11622.4375 +j-12402286-job-0,onnx-tta,cuda:0,trial-1-onnx-tta-cuda-0,full,256,129.12878613530611,"[1.982516893884167, 1.9731587800197303, 1.979680062038824, 1.9286577210295945, 2.003313892055303, 2.12636016192846, 2.1826345180161297]",11622.4375 +j-12402286-job-0,onnx-tta,cuda:0,trial-1-onnx-tta-cuda-0,north_europe,256,130.03771532567654,"[2.089646345935762, 1.9014787450432777, 1.9645583529490978, 1.8932036010082811, 1.9686596258543432, 1.9741132739000022, 2.2100263938773423]",11622.4375 +j-12402286-job-0,torch-tta,cuda:0,trial-1-torch-tta-cuda-0,full,1,25.00895319189691,"[0.03944537718780339, 0.04006013204343617, 0.040014814119786024, 0.03990480909124017, 0.039944858988747, 0.040130988927558064, 0.039985680021345615]",13812.69140625 +j-12402286-job-0,torch-tta,cuda:0,trial-1-torch-tta-cuda-0,north_europe,1,25.693376156511338,"[0.03870765585452318, 0.038914378033950925, 0.038999626180157065, 0.03899268596433103, 0.0388798660133034, 0.03895947616547346, 0.0389205371029675]",13812.69140625 +j-12402286-job-0,torch-tta,cuda:0,trial-1-torch-tta-cuda-0,full,8,102.28573707861345,"[0.078212273074314, 0.07666598493233323, 0.07563351094722748, 0.08347646496258676, 0.08239176287315786, 0.08907328895293176, 0.0779165280982852]",13812.69140625 +j-12402286-job-0,torch-tta,cuda:0,trial-1-torch-tta-cuda-0,north_europe,8,95.89452986057971,"[0.08519353996962309, 0.08176997792907059, 0.07896921201609075, 0.07469155290164053, 0.09002882707864046, 0.08342498796992004, 0.09594587213359773]",13812.69140625 +j-12402286-job-0,torch-tta,cuda:0,trial-1-torch-tta-cuda-0,full,32,127.29254314298657,"[0.23686125595122576, 0.2459776159375906, 0.22779894596897066, 0.25679213204421103, 0.2529080470558256, 0.25138943106867373, 0.25198757206089795]",13812.69140625 +j-12402286-job-0,torch-tta,cuda:0,trial-1-torch-tta-cuda-0,north_europe,32,136.72982352121235,"[0.29182543884962797, 0.2322860099375248, 0.22935751313343644, 0.23567410907708108, 0.22680777497589588, 0.23403818695805967, 0.2375326359178871]",13812.69140625 +j-12402286-job-0,torch-tta,cuda:0,trial-1-torch-tta-cuda-0,full,256,146.3969568946306,"[1.7486702280584723, 1.7503152440767735, 1.8470838381908834, 1.9163033759687096, 1.7106920420192182, 1.748026367975399, 1.7277893908321857]",13812.69140625 +j-12402286-job-0,torch-tta,cuda:0,trial-1-torch-tta-cuda-0,north_europe,256,147.82696242852057,"[1.6979348661843687, 1.7317544498946518, 1.6914874098729342, 1.6777222258970141, 1.7644795370288193, 1.7319374058861285, 1.7670164369046688]",13812.69140625 +j-12402286-job-0,onnx,cuda:0,trial-1-onnx-cuda-0,full,1,117.63046498321172,"[0.00919535499997437, 0.008699428057298064, 0.008524524047970772, 0.008501199074089527, 0.008469022111967206, 0.008432967122644186, 0.008470023050904274]",6995.44140625 +j-12402286-job-0,onnx,cuda:0,trial-1-onnx-cuda-0,north_europe,1,138.6048844539578,"[0.007311638910323381, 0.007264276966452599, 0.007204758003354073, 0.007197878090664744, 0.007214271929115057, 0.007214752957224846, 0.007239228812977672]",6995.44140625 +j-12402286-job-0,onnx,cuda:0,trial-1-onnx-cuda-0,full,8,302.3480963834994,"[0.026133797131478786, 0.026719619054347277, 0.02645956794731319, 0.02858591009862721, 0.025771782966330647, 0.023208813974633813, 0.026863716077059507]",6995.44140625 +j-12402286-job-0,onnx,cuda:0,trial-1-onnx-cuda-0,north_europe,8,338.34249170542535,"[0.022100324975326657, 0.023982940008863807, 0.024858698016032577, 0.02364468015730381, 0.022694980027154088, 0.026994443964213133, 0.02106905193068087]",6995.44140625 +j-12402286-job-0,onnx,cuda:0,trial-1-onnx-cuda-0,full,32,442.1959705074405,"[0.07352107507176697, 0.07236610492691398, 0.07438836991786957, 0.07151586492545903, 0.06982674193568528, 0.07485655602067709, 0.07161813997663558]",6995.44140625 +j-12402286-job-0,onnx,cuda:0,trial-1-onnx-cuda-0,north_europe,32,480.35072199877527,"[0.0709644251037389, 0.06823060917668045, 0.0666179908439517, 0.06489726016297936, 0.06573307886719704, 0.0661705881357193, 0.07377067091874778]",6995.44140625 +j-12402286-job-0,onnx,cuda:0,trial-1-onnx-cuda-0,full,256,439.46688003057005,"[0.5825239890255034, 0.5645170279312879, 0.5834215709473938, 0.5691107539460063, 0.5670419801026583, 0.6174930001143366, 0.5911674541421235]",6995.44140625 +j-12402286-job-0,onnx,cuda:0,trial-1-onnx-cuda-0,north_europe,256,468.5478437832685,"[0.5618854460772127, 0.5501534920185804, 0.5374202101957053, 0.5463689640164375, 0.5567910959944129, 0.5443950810004026, 0.5368676378857344]",6995.44140625 +j-12402286-job-0,torch,cuda:0,trial-1-torch-cuda-0,full,1,77.15462941990037,"[0.012598931090906262, 0.013577082892879844, 0.012706432957202196, 0.012960985070094466, 0.012506511062383652, 0.013051111018285155, 0.01495455694384873]",8100.1953125 +j-12402286-job-0,torch,cuda:0,trial-1-torch-cuda-0,north_europe,1,89.40391873994095,"[0.011546565918251872, 0.011185192037373781, 0.011236910009756684, 0.011101445881649852, 0.011377390939742327, 0.01118481089361012, 0.011019441997632384]",8100.1953125 +j-12402286-job-0,torch,cuda:0,trial-1-torch-cuda-0,full,8,311.46445262946304,"[0.02640065085142851, 0.024855625117197633, 0.025351922027766705, 0.02701724017970264, 0.028978002024814487, 0.02506327792070806, 0.02568511408753693]",8100.1953125 +j-12402286-job-0,torch,cuda:0,trial-1-torch-cuda-0,north_europe,8,326.8468549682898,"[0.024476294871419668, 0.026545919943600893, 0.025650982977822423, 0.023425891995429993, 0.021990061039105058, 0.026437897933647037, 0.02316271699965]",8100.1953125 +j-12402286-job-0,torch,cuda:0,trial-1-torch-cuda-0,full,32,493.7255957211627,"[0.06481333007104695, 0.06772171892225742, 0.06364572211168706, 0.06241707084700465, 0.06580415111966431, 0.06383994384668767, 0.0668210128787905]",8100.1953125 +j-12402286-job-0,torch,cuda:0,trial-1-torch-cuda-0,north_europe,32,491.75291090046,"[0.06315053603611887, 0.0666959248483181, 0.06507333111949265, 0.06123319920152426, 0.06664490816183388, 0.06254803878255188, 0.06628210097551346]",8100.1953125 +j-12402286-job-0,torch,cuda:0,trial-1-torch-cuda-0,full,256,367.63960694873936,"[0.7084685349836946, 0.7001728950999677, 0.6916666671168059, 0.6998157668858767, 0.6384113600943238, 0.6963341140653938, 0.6908263708464801]",8100.1953125 +j-12402286-job-0,torch,cuda:0,trial-1-torch-cuda-0,north_europe,256,470.3901109870499,"[0.5538813420571387, 0.5384540820959955, 0.5442291281651706, 0.571407072013244, 0.5495763490907848, 0.5196307881269604, 0.5318822769913822]",8100.1953125 +j-12402286-job-0,v2,cuda:0,trial-1-v2-cuda-0,full,1,162.30103644077124,"[0.006237654015421867, 0.006227159174159169, 0.006161390105262399, 0.006178766023367643, 0.0061166922096163034, 0.006160348886623979, 0.006114738993346691]",4595.41796875 +j-12402286-job-0,v2,cuda:0,trial-1-v2-cuda-0,north_europe,1,169.28273731364027,"[0.006207118974998593, 0.005907276878133416, 0.005898222792893648, 0.005931344116106629, 0.00581088219769299, 0.005852275062352419, 0.006088610040023923]",4595.41796875 +j-12402286-job-0,v2,cuda:0,trial-1-v2-cuda-0,full,8,437.8569345603938,"[0.01845841109752655, 0.018357458990067244, 0.01828199508599937, 0.01827080803923309, 0.01818935596384108, 0.018189395079389215, 0.018088093027472496]",4595.41796875 +j-12402286-job-0,v2,cuda:0,trial-1-v2-cuda-0,north_europe,8,452.67259312175884,"[0.018221714068204165, 0.01794675993733108, 0.017731456086039543, 0.01767281722277403, 0.017497373977676034, 0.017558936029672623, 0.017560458043590188]",4595.41796875 +j-12402286-job-0,v2,cuda:0,trial-1-v2-cuda-0,full,32,539.4992257828832,"[0.05852341395802796, 0.05764063401147723, 0.060999603010714054, 0.05931426491588354, 0.06890516099520028, 0.05869247787632048, 0.05931656784377992]",4595.41796875 +j-12402286-job-0,v2,cuda:0,trial-1-v2-cuda-0,north_europe,32,559.4076499953098,"[0.05751471407711506, 0.057311567943543196, 0.05758101399987936, 0.05686114099808037, 0.05686043878085911, 0.05720336502417922, 0.05677030282095075]",4595.41796875 +j-12402286-job-0,v2,cpu,trial-2-v2-cpu,full,1,1.9392516010325764,"[0.5145874070003629, 0.5160089780110866, 0.5162893699016422, 0.5155025550629944, 0.5156215140596032, 0.5156628461554646, 0.5165060760919005]",4571.9296875 +j-12402286-job-0,v2,cpu,trial-2-v2-cpu,north_europe,1,1.9569581532938247,"[0.5102189481258392, 0.5121426749974489, 0.5104478730354458, 0.512342827161774, 0.5109971300698817, 0.5137192090041935, 0.5095693198964]",4571.9296875 +j-12402286-job-0,v2,cpu,trial-2-v2-cpu,full,8,2.054081456231529,"[3.907884922111407, 3.899646857054904, 3.8973819261882454, 3.892451951978728, 3.8930711839348078, 3.8896946699824184, 3.8946848849300295]",4571.9296875 +j-12402286-job-0,v2,cpu,trial-2-v2-cpu,north_europe,8,2.056526996062075,"[3.9068993870168924, 3.8936226449441165, 3.8872487179469317, 3.8911931777838618, 3.88358885794878, 3.8886565680149943, 3.890053481096402]",4571.9296875 +j-12402286-job-0,torch,cpu,trial-2-torch-cpu,full,1,16.210259269276104,"[0.060125784017145634, 0.06232575583271682, 0.061606443021446466, 0.06168932793661952, 0.06175602786242962, 0.06163156102411449, 0.061742307152599096]",3276.0703125 +j-12402286-job-0,torch,cpu,trial-2-torch-cpu,north_europe,1,16.843928286078263,"[0.05653630895540118, 0.059587083058431745, 0.05904392385855317, 0.05940318596549332, 0.059616656973958015, 0.05924672004766762, 0.059368573827669024]",3276.0703125 +j-12402286-job-0,torch,cpu,trial-2-torch-cpu,full,8,28.6694632884164,"[0.2817683289758861, 0.28499519801698625, 0.2783872978761792, 0.274959767004475, 0.2746768419165164, 0.2826676538679749, 0.2790425450075418]",3276.0703125 +j-12402286-job-0,torch,cpu,trial-2-torch-cpu,north_europe,8,33.9929018600177,"[0.23534324998036027, 0.24000865500420332, 0.2358923179563135, 0.2338446439243853, 0.23344438197091222, 0.2317175311036408, 0.23604794219136238]",3276.0703125 +j-12402286-job-0,onnx,cpu,trial-2-onnx-cpu,full,1,25.309400322870264,"[0.03936077491380274, 0.039631843101233244, 0.03990678698755801, 0.039661316899582744, 0.03951101121492684, 0.039362187031656504, 0.03942448110319674]",2597.8125 +j-12402286-job-0,onnx,cpu,trial-2-onnx-cpu,north_europe,1,21.600097606027113,"[0.046296087093651295, 0.046415665885433555, 0.046329667093232274, 0.04623448383063078, 0.04611725686118007, 0.04921415005810559, 0.046228053979575634]",2597.8125 +j-12402286-job-0,onnx,cpu,trial-2-onnx-cpu,full,8,35.103085698640115,"[0.22518651699647307, 0.2253997081425041, 0.23186038597486913, 0.22569125704467297, 0.22790019284002483, 0.2390748281031847, 0.23001277400180697]",2597.8125 +j-12402286-job-0,onnx,cpu,trial-2-onnx-cpu,north_europe,8,35.31670132080987,"[0.22448562597855926, 0.22652172204107046, 0.23036780301481485, 0.22548158606514335, 0.23154534585773945, 0.22438515489920974, 0.23444966902025044]",2597.8125 +j-12402286-job-0,torch-tta,cpu,trial-2-torch-tta-cpu,full,1,5.2870796177288,"[0.18914033309556544, 0.19262751913629472, 0.19075547205284238, 0.19067009398713708, 0.1878105418290943, 0.18679662700742483, 0.185512974858284]",4371.82421875 +j-12402286-job-0,torch-tta,cpu,trial-2-torch-tta-cpu,north_europe,1,5.316373845373524,"[0.18603909690864384, 0.1879474378656596, 0.1880981340073049, 0.19465805310755968, 0.18374116998165846, 0.19301294907927513, 0.1915520909242332]",4371.82421875 +j-12402286-job-0,torch-tta,cpu,trial-2-torch-tta-cpu,full,8,9.05434979700814,"[0.8835324679967016, 0.8796126821544021, 0.8855883809737861, 0.8819976099766791, 0.8911263120826334, 0.8835532290395349, 0.8942501419223845]",4371.82421875 +j-12402286-job-0,torch-tta,cpu,trial-2-torch-tta-cpu,north_europe,8,10.218024881652804,"[0.7836182001046836, 0.7942637118976563, 0.7978434439282864, 0.7829301741439849, 0.7703375180717558, 0.7731695030815899, 0.7766604509670287]",4371.82421875 +j-12402286-job-0,onnx-tta,cpu,trial-2-onnx-tta-cpu,full,1,8.335461585337839,"[0.11936624301597476, 0.12028716993518174, 0.1198898209258914, 0.11996936099603772, 0.1255479718092829, 0.12052882392890751, 0.11988089792430401]",3368.6796875 +j-12402286-job-0,onnx-tta,cpu,trial-2-onnx-tta-cpu,north_europe,1,8.307580034360607,"[0.11943842214532197, 0.12223849911242723, 0.120665960945189, 0.12022164114750922, 0.11999344709329307, 0.12037199712358415, 0.12117222300730646]",3368.6796875 +j-12402286-job-0,onnx-tta,cpu,trial-2-onnx-tta-cpu,full,8,11.97845406650308,"[0.6678658160381019, 0.6683775060810149, 0.6729175630025566, 0.6567499758675694, 0.6998441310133785, 0.6584836170077324, 0.6549387990962714]",3368.6796875 +j-12402286-job-0,onnx-tta,cpu,trial-2-onnx-tta-cpu,north_europe,8,11.473912593637586,"[0.6960745120886713, 0.6921091279946268, 0.6972338280174881, 0.6884630040731281, 0.697710475884378, 0.7003450850024819, 0.7081587959546596]",3368.6796875 +j-12402286-job-0,v2,cuda:0,trial-2-v2-cuda-0,full,1,161.00975047984645,"[0.006225686054676771, 0.006210803985595703, 0.006231123814359307, 0.006214058957993984, 0.006176542025059462, 0.006152705987915397, 0.00617922586388886]",4594.6171875 +j-12402286-job-0,v2,cuda:0,trial-2-v2-cuda-0,north_europe,1,171.7774120541947,"[0.006263743154704571, 0.005925494013354182, 0.005821487167850137, 0.00581612903624773, 0.005780805833637714, 0.005824531894177198, 0.005644029937684536]",4594.6171875 +j-12402286-job-0,v2,cuda:0,trial-2-v2-cuda-0,full,8,435.1032856195977,"[0.018386438954621553, 0.01836164202541113, 0.018457697005942464, 0.01846104208379984, 0.01831840700469911, 0.01843027607537806, 0.018302613869309425]",4594.6171875 +j-12402286-job-0,v2,cuda:0,trial-2-v2-cuda-0,north_europe,8,429.62701399199307,"[0.01856072200462222, 0.018697799183428288, 0.018580020871013403, 0.018620803020894527, 0.018468794180080295, 0.021927202120423317, 0.01866384781897068]",4594.6171875 +j-12402286-job-0,v2,cuda:0,trial-2-v2-cuda-0,full,32,540.2155170998104,"[0.059235617984086275, 0.07875998201780021, 0.058841024059802294, 0.059210200095549226, 0.058656576089560986, 0.06043864996172488, 0.05931689101271331]",4594.6171875 +j-12402286-job-0,v2,cuda:0,trial-2-v2-cuda-0,north_europe,32,541.4671452872406,"[0.05885743908584118, 0.05875717801973224, 0.06654259306378663, 0.07518674014136195, 0.08202483900822699, 0.05909869191236794, 0.058883367804810405]",4594.6171875 +j-12402286-job-0,torch,cuda:0,trial-2-torch-cuda-0,full,1,81.16874539926094,"[0.012348076095804572, 0.012338540982455015, 0.012180212885141373, 0.012737762182950974, 0.012134294025599957, 0.012320013018324971, 0.012225921964272857]",8188.09375 +j-12402286-job-0,torch,cuda:0,trial-2-torch-cuda-0,north_europe,1,90.32262553783906,"[0.011130701983347535, 0.011071423068642616, 0.010942748980596662, 0.010968978982418776, 0.011071813991293311, 0.01107259513810277, 0.010944021865725517]",8188.09375 +j-12402286-job-0,torch,cuda:0,trial-2-torch-cuda-0,full,8,322.7760557412565,"[0.026956066023558378, 0.022869671927765012, 0.02351571386680007, 0.02464865008369088, 0.025352459866553545, 0.024784985929727554, 0.025594915030524135]",8188.09375 +j-12402286-job-0,torch,cuda:0,trial-2-torch-cuda-0,north_europe,8,337.08009179125736,"[0.02318065892904997, 0.023733231937512755, 0.025676697958260775, 0.024033724097535014, 0.024936974048614502, 0.023559550056234002, 0.02298811892978847]",8188.09375 +j-12402286-job-0,torch,cuda:0,trial-2-torch-cuda-0,full,32,480.7295415676908,"[0.066565495217219, 0.0720324581488967, 0.06391856912523508, 0.0682739180047065, 0.06204661983065307, 0.069828248815611, 0.06434879591688514]",8188.09375 +j-12402286-job-0,torch,cuda:0,trial-2-torch-cuda-0,north_europe,32,500.9489927365889,"[0.06387875904329121, 0.06351401889696717, 0.06271800096146762, 0.06341045419685543, 0.06653846404515207, 0.06531310896389186, 0.06620164797641337]",8188.09375 +j-12402286-job-0,torch,cuda:0,trial-2-torch-cuda-0,full,256,484.9186025150553,"[0.5886720470152795, 0.5194524850230664, 0.5279236529022455, 0.5321383089758456, 0.5185856700409204, 0.5090254629030824, 0.5419068799819797]",8188.09375 +j-12402286-job-0,torch,cuda:0,trial-2-torch-cuda-0,north_europe,256,481.25928590028155,"[0.5301802209578454, 0.5235195609275252, 0.5218246579170227, 0.5581743190996349, 0.5647571920417249, 0.5319377880077809, 0.5332872800063342]",8188.09375 +j-12402286-job-0,onnx,cuda:0,trial-2-onnx-cuda-0,full,1,117.43148124386231,"[0.009210751159116626, 0.008725019870325923, 0.008515604073181748, 0.008552378974854946, 0.008464035810902715, 0.008427952183410525, 0.0084298150613904]",7060.80078125 +j-12402286-job-0,onnx,cuda:0,trial-2-onnx-cuda-0,north_europe,1,134.13082380094173,"[0.007412181934341788, 0.01019041589461267, 0.0075198139529675245, 0.0074878770392388105, 0.007455407874658704, 0.007364019984379411, 0.007341606076806784]",7060.80078125 +j-12402286-job-0,onnx,cuda:0,trial-2-onnx-cuda-0,full,8,325.31454366855536,"[0.024591584224253893, 0.02307168487459421, 0.02683611516840756, 0.0241467640735209, 0.02690870384685695, 0.022939695976674557, 0.026479606982320547]",7060.80078125 +j-12402286-job-0,onnx,cuda:0,trial-2-onnx-cuda-0,north_europe,8,340.8623552706615,"[0.02758285799063742, 0.021402932005003095, 0.023720962926745415, 0.021846329793334007, 0.023469884181395173, 0.023912010015919805, 0.02184208296239376]",7060.80078125 +j-12402286-job-0,onnx,cuda:0,trial-2-onnx-cuda-0,full,32,423.8299274486698,"[0.0741583900526166, 0.07550198305398226, 0.0761240900028497, 0.07465476705692708, 0.07128015486523509, 0.08219688618555665, 0.0815178130287677]",7060.80078125 +j-12402286-job-0,onnx,cuda:0,trial-2-onnx-cuda-0,north_europe,32,450.86059104277984,"[0.07909955084323883, 0.07021824596449733, 0.069404860958457, 0.07097537606023252, 0.0775834871456027, 0.0735903240274638, 0.07062368700280786]",7060.80078125 +j-12402286-job-0,onnx,cuda:0,trial-2-onnx-cuda-0,full,256,434.5044535105278,"[0.574277161154896, 0.5931331771425903, 0.5964784759562463, 0.5891769300214946, 0.5599386470858008, 0.5884639860596508, 0.6193525118287653]",7060.80078125 +j-12402286-job-0,onnx,cuda:0,trial-2-onnx-cuda-0,north_europe,256,478.92680686887013,"[0.5445930592250079, 0.5345284421928227, 0.5330053579527885, 0.5284217949956656, 0.5155887200962752, 0.5453968490473926, 0.5621617650613189]",7060.80078125 +j-12402286-job-0,torch-tta,cuda:0,trial-2-torch-tta-cuda-0,full,1,26.260199396954842,"[0.037721110973507166, 0.03801258001476526, 0.03808044199831784, 0.03809234988875687, 0.03801942989230156, 0.038160863099619746, 0.038136095041409135]",14292.49609375 +j-12402286-job-0,torch-tta,cuda:0,trial-2-torch-tta-cuda-0,north_europe,1,27.230164064477638,"[0.03656417992897332, 0.03672397998161614, 0.03676391998305917, 0.03692037612199783, 0.03687181300483644, 0.03671504696831107, 0.03668679506517947]",14292.49609375 +j-12402286-job-0,torch-tta,cuda:0,trial-2-torch-tta-cuda-0,full,8,99.30083520557004,"[0.08817261201329529, 0.08056327002122998, 0.08243331499397755, 0.07751480210572481, 0.07711792504414916, 0.07972776307724416, 0.09396216599270701]",14292.49609375 +j-12402286-job-0,torch-tta,cuda:0,trial-2-torch-tta-cuda-0,north_europe,8,106.39880955051781,"[0.07518881116993725, 0.07190941600129008, 0.07072232896462083, 0.07734115002676845, 0.07790594105608761, 0.08185646589845419, 0.07008080300875008]",14292.49609375 +j-12402286-job-0,torch-tta,cuda:0,trial-2-torch-tta-cuda-0,full,32,132.9525566642423,"[0.2475315509364009, 0.23692860314622521, 0.24068736098706722, 0.24118130397982895, 0.23645635298453271, 0.27485791803337634, 0.23347910190932453]",14292.49609375 +j-12402286-job-0,torch-tta,cuda:0,trial-2-torch-tta-cuda-0,north_europe,32,138.92376989105296,"[0.22001846390776336, 0.2268230440095067, 0.23034215113148093, 0.24066580785438418, 0.23546897689811885, 0.2404360631480813, 0.22566359979100525]",14292.49609375 +j-12402286-job-0,torch-tta,cuda:0,trial-2-torch-tta-cuda-0,full,256,122.06936407090326,"[2.336555507965386, 2.2735475189983845, 2.097168294014409, 2.4015583801083267, 2.064423801843077, 1.9175253270659596, 1.9486562099773437]",14292.49609375 +j-12402286-job-0,torch-tta,cuda:0,trial-2-torch-tta-cuda-0,north_europe,256,135.18809740356323,"[1.9579639059957117, 1.7155220229178667, 1.942531730979681, 1.734958509216085, 1.8936578361317515, 1.915506506105885, 1.7982790840324014]",14292.49609375 +j-12402286-job-0,onnx-tta,cuda:0,trial-2-onnx-tta-cuda-0,full,1,36.14877051834988,"[0.028116188943386078, 0.03089137887582183, 0.027929709060117602, 0.0276634581387043, 0.027452199021354318, 0.0275122900493443, 0.02757573500275612]",11595.35546875 +j-12402286-job-0,onnx-tta,cuda:0,trial-2-onnx-tta-cuda-0,north_europe,1,37.56068717253849,"[0.026412914041429758, 0.02669455809518695, 0.026539754820987582, 0.02662358107045293, 0.026637681992724538, 0.026736621977761388, 0.026592865120619535]",11595.35546875 +j-12402286-job-0,onnx-tta,cuda:0,trial-2-onnx-tta-cuda-0,full,8,104.12237774423836,"[0.07774468092247844, 0.07633712119422853, 0.0736997879575938, 0.08207742706872523, 0.07361253700219095, 0.09045886108651757, 0.07683266722597182]",11595.35546875 +j-12402286-job-0,onnx-tta,cuda:0,trial-2-onnx-tta-cuda-0,north_europe,8,107.9165737978222,"[0.0715147671289742, 0.07413133792579174, 0.07240796298719943, 0.07436913577839732, 0.07409627479501069, 0.0758538031950593, 0.08407669910229743]",11595.35546875 +j-12402286-job-0,onnx-tta,cuda:0,trial-2-onnx-tta-cuda-0,full,32,126.85090984687861,"[0.24829021096229553, 0.2550519860815257, 0.24642864800989628, 0.24601408280432224, 0.2557852999307215, 0.2522646470461041, 0.2615428620483726]",11595.35546875 +j-12402286-job-0,onnx-tta,cuda:0,trial-2-onnx-tta-cuda-0,north_europe,32,130.58932515296468,"[0.23987787100486457, 0.24645433598197997, 0.24504299997352064, 0.2538256689440459, 0.24065447016619146, 0.24092900287359953, 0.248415068956092]",11595.35546875 +j-12402286-job-0,onnx-tta,cuda:0,trial-2-onnx-tta-cuda-0,full,256,117.77401530612686,"[1.999306048033759, 2.1736543441656977, 2.234514598036185, 2.359678902197629, 2.0039377121720463, 2.0673675059806556, 2.207722074119374]",11595.35546875 +j-12402286-job-0,onnx-tta,cuda:0,trial-2-onnx-tta-cuda-0,north_europe,256,121.47803542354946,"[2.080478888936341, 2.138539368053898, 1.9661309530492872, 1.9944482129067183, 2.107376853004098, 2.2597598631400615, 2.1151587599888444]",11595.35546875 diff --git a/docs/assets/mambo-indomain-speed.svg b/docs/assets/mambo-indomain-speed.svg new file mode 100644 index 0000000..6ede5b7 --- /dev/null +++ b/docs/assets/mambo-indomain-speed.svg @@ -0,0 +1,1516 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.10.9, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + + + + + + + + + + + 8 + + + + + + + + + + + + + + + + 2 + × + 1 + 0 + 0 + + + + + + + + + + + + + + + 3 + × + 1 + 0 + 0 + + + + + + + + + + + + + + + 4 + × + 1 + 0 + 0 + + + + + + + + + + + + + + + + + + + + + + 6 + × + 1 + 0 + 0 + + + + + + + + + + + + + Batch size + + + + + + + + + + + + + + + + + 5 + + + + + + + + + + + + + 10 + + + + + + + + + + + + + 15 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 25 + + + + + + + + + + + + + 30 + + + + + + + + + + + + + 35 + + + + Images/s + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + EPYC CPU · request + + + + + + + + + + + + + + + + + + 1 + + + + + + + + + + + + + 8 + + + + + + + + + + + + + 32 + + + + + + + + + + + + + 256 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Batch size + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 100 + + + + + + + + + + + + + 200 + + + + + + + + + + + + + 300 + + + + + + + + + + + + + 400 + + + + + + + + + + + + + 500 + + + + Images/s + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + B200 · request + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + 100 + + + + + + + + + + 200 + + + + + + + + + + 300 + + + + + + + + + + 400 + + + + + + + + + + 500 + + + + + + + + + + 600 + + + + Images/s + + + + + + + + + + + V3 PyTorch + + + + + + + + + + V3 ONNX + + + + + + + + + + V3 PyTorch + TTA + + + + + + + + + + V3 ONNX + TTA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + B200 · streaming, batch 256 + + + + Global vocabulary; median and range of 3 process trials. CPU runtime threads: 4. Streaming: 1,024 images, startup included. + Request and streaming are different execution modes; these are measured pipeline rates, not GPU throughput ceilings. + + + + + + + + + + + + + + + + + + + + + + + + + + + + MAMBO v2 + + + + + + + + + + + + + + + + + + + + + + + + V3 PyTorch + + + + + + + + + + + + + + + + + + + + + + + + V3 ONNX + + + + + + + + + + + + + + + + + + + + + + + + V3 PyTorch + TTA + + + + + + + + + + + + + + + + + + + + + + + + V3 ONNX + TTA + + + + + + + + + + + + + + + diff --git a/docs/assets/mambo-indomain-streaming-speed.csv b/docs/assets/mambo-indomain-streaming-speed.csv new file mode 100644 index 0000000..103306f --- /dev/null +++ b/docs/assets/mambo-indomain-streaming-speed.csv @@ -0,0 +1,49 @@ +environment_id,variant,device,trial,preset,batch_size,images,images_per_second,seconds +j-12402286-job-0,torch,cpu,trial-0-torch-cpu,full,8,1024,34.04237830107543,"[30.104328206041828, 29.858235927997157, 30.08015453396365]" +j-12402286-job-0,torch,cpu,trial-0-torch-cpu,north_europe,8,1024,33.76846736338423,"[30.324147938983515, 30.27414759597741, 30.42432832112536]" +j-12402286-job-0,onnx,cpu,trial-0-onnx-cpu,full,8,1024,36.823971100312555,"[28.11732700583525, 27.807973159942776, 27.415707787964493]" +j-12402286-job-0,onnx,cpu,trial-0-onnx-cpu,north_europe,8,1024,39.83486966086653,"[26.015997915994376, 25.70612151408568, 25.70504664396867]" +j-12402286-job-0,torch-tta,cpu,trial-0-torch-tta-cpu,full,8,1024,11.528776720330582,"[87.47479516896419, 91.94617670285515, 88.82121883705258]" +j-12402286-job-0,torch-tta,cpu,trial-0-torch-tta-cpu,north_europe,8,1024,11.597935503144953,"[88.08198932395317, 91.0903279799968, 88.29157566209324]" +j-12402286-job-0,onnx-tta,cpu,trial-0-onnx-tta-cpu,full,8,1024,13.112669940257966,"[80.34720183187164, 76.71521435119212, 78.09241021587513]" +j-12402286-job-0,onnx-tta,cpu,trial-0-onnx-tta-cpu,north_europe,8,1024,13.27009582554481,"[76.73085354687646, 77.16598383779638, 78.50553843402304]" +j-12402286-job-0,torch,cuda:0,trial-0-torch-cuda-0,full,256,1024,640.1449324127675,"[1.715137304039672, 1.5996377510018647, 1.453258153051138]" +j-12402286-job-0,torch,cuda:0,trial-0-torch-cuda-0,north_europe,256,1024,673.265728397876,"[1.5714211959857494, 1.462558472994715, 1.5209447871893644]" +j-12402286-job-0,onnx,cuda:0,trial-0-onnx-cuda-0,full,256,1024,597.5332456895293,"[1.7360637581441551, 1.6371290409006178, 1.713712178170681]" +j-12402286-job-0,onnx,cuda:0,trial-0-onnx-cuda-0,north_europe,256,1024,605.545513577582,"[1.7592463069595397, 1.5975160330999643, 1.6910372169222683]" +j-12402286-job-0,torch-tta,cuda:0,trial-0-torch-tta-cuda-0,full,256,1024,198.6388734870403,"[5.8052552349399775, 4.933058385970071, 5.155083604855463]" +j-12402286-job-0,torch-tta,cuda:0,trial-0-torch-tta-cuda-0,north_europe,256,1024,204.0579378060664,"[5.018182634841651, 5.161591398064047, 4.959914960898459]" +j-12402286-job-0,onnx-tta,cuda:0,trial-0-onnx-tta-cuda-0,full,256,1024,203.2502389535636,"[5.038124458165839, 5.011830616975203, 5.688519447110593]" +j-12402286-job-0,onnx-tta,cuda:0,trial-0-onnx-tta-cuda-0,north_europe,256,1024,200.95524826672832,"[5.0116610820405185, 5.095661889063194, 5.30839680810459]" +j-12402286-job-0,onnx-tta,cpu,trial-1-onnx-tta-cpu,full,8,1024,12.45846871420143,"[82.94655893812887, 82.1930867661722, 80.58071889891289]" +j-12402286-job-0,onnx-tta,cpu,trial-1-onnx-tta-cpu,north_europe,8,1024,13.154451338979724,"[77.8443717348855, 78.10592608293518, 76.9228190148715]" +j-12402286-job-0,torch-tta,cpu,trial-1-torch-tta-cpu,full,8,1024,11.796456440349788,"[87.78689663484693, 86.26503587304614, 86.80572892189957]" +j-12402286-job-0,torch-tta,cpu,trial-1-torch-tta-cpu,north_europe,8,1024,11.927875241130472,"[85.84932180284522, 86.64871792611666, 85.50610742717981]" +j-12402286-job-0,onnx,cpu,trial-1-onnx-cpu,full,8,1024,36.7664823775916,"[27.401659866794944, 27.906167353037745, 27.851454199058935]" +j-12402286-job-0,onnx,cpu,trial-1-onnx-cpu,north_europe,8,1024,37.27682596375597,"[27.463112919824198, 27.470149979926646, 27.61266869190149]" +j-12402286-job-0,torch,cpu,trial-1-torch-cpu,full,8,1024,34.13436588072897,"[29.999092515092343, 28.876937593100592, 30.756536277011037]" +j-12402286-job-0,torch,cpu,trial-1-torch-cpu,north_europe,8,1024,35.825671462891485,"[28.5828557619825, 28.79824579693377, 28.507902273908257]" +j-12402286-job-0,onnx-tta,cuda:0,trial-1-onnx-tta-cuda-0,full,256,1024,172.91579640944386,"[5.92195751494728, 5.623914316063747, 5.9630442429333925]" +j-12402286-job-0,onnx-tta,cuda:0,trial-1-onnx-tta-cuda-0,north_europe,256,1024,179.717056857759,"[5.754108743974939, 5.637985749868676, 5.697845368180424]" +j-12402286-job-0,torch-tta,cuda:0,trial-1-torch-tta-cuda-0,full,256,1024,187.80079185498832,"[6.130035428097472, 5.452586167957634, 5.228225806960836]" +j-12402286-job-0,torch-tta,cuda:0,trial-1-torch-tta-cuda-0,north_europe,256,1024,198.12210776240224,"[5.097536427201703, 5.374059800058603, 5.168529709102586]" +j-12402286-job-0,onnx,cuda:0,trial-1-onnx-cuda-0,full,256,1024,548.3844976335021,"[1.9139710620511323, 1.867302967933938, 1.8485038930084556]" +j-12402286-job-0,onnx,cuda:0,trial-1-onnx-cuda-0,north_europe,256,1024,583.7695669243686,"[1.751705561997369, 1.7930034210439771, 1.7541167919989675]" +j-12402286-job-0,torch,cuda:0,trial-1-torch-cuda-0,full,256,1024,624.8821454763469,"[1.6678844741545618, 1.63870900683105, 1.3959779811557382]" +j-12402286-job-0,torch,cuda:0,trial-1-torch-cuda-0,north_europe,256,1024,660.7434552564797,"[1.6962513069156557, 1.4128376580774784, 1.549769417848438]" +j-12402286-job-0,torch,cpu,trial-2-torch-cpu,full,8,1024,33.77712455072364,"[30.412344111828133, 30.316375760827214, 30.313768835971132]" +j-12402286-job-0,torch,cpu,trial-2-torch-cpu,north_europe,8,1024,34.90248137459078,"[28.671414472861215, 29.965245082974434, 29.33888823003508]" +j-12402286-job-0,onnx,cpu,trial-2-onnx-cpu,full,8,1024,37.398608869274646,"[27.90463216905482, 27.328506266931072, 27.38069759705104]" +j-12402286-job-0,onnx,cpu,trial-2-onnx-cpu,north_europe,8,1024,37.35046048678505,"[27.334079992957413, 27.50279205595143, 27.415993983857334]" +j-12402286-job-0,torch-tta,cpu,trial-2-torch-tta-cpu,full,8,1024,10.974689425392665,"[90.90350299398415, 94.55241905595176, 93.30560167203657]" +j-12402286-job-0,torch-tta,cpu,trial-2-torch-tta-cpu,north_europe,8,1024,11.236805637224117,"[91.85084778792225, 91.12910137092695, 89.62535597500391]" +j-12402286-job-0,onnx-tta,cpu,trial-2-onnx-tta-cpu,full,8,1024,12.674192128337234,"[79.93258225917816, 80.79410424199887, 83.54928972292691]" +j-12402286-job-0,onnx-tta,cpu,trial-2-onnx-tta-cpu,north_europe,8,1024,12.318173490485412,"[81.82937749195844, 83.39652918488719, 83.12920749094337]" +j-12402286-job-0,torch,cuda:0,trial-2-torch-cuda-0,full,256,1024,602.551311029026,"[1.699440331896767, 1.7066811660770327, 1.6270493438933045]" +j-12402286-job-0,torch,cuda:0,trial-2-torch-cuda-0,north_europe,256,1024,665.9971522368938,"[1.7486076559871435, 1.345568273914978, 1.5375441119540483]" +j-12402286-job-0,onnx,cuda:0,trial-2-onnx-cuda-0,full,256,1024,534.1732952570765,"[1.9169808919541538, 1.766346275107935, 1.9942841969896108]" +j-12402286-job-0,onnx,cuda:0,trial-2-onnx-cuda-0,north_europe,256,1024,609.4847832527348,"[1.6801075730472803, 1.6768436080310494, 1.6913127771113068]" +j-12402286-job-0,torch-tta,cuda:0,trial-2-torch-tta-cuda-0,full,256,1024,212.92829863859407,"[4.809130616020411, 4.391952194040641, 5.296736722113565]" +j-12402286-job-0,torch-tta,cuda:0,trial-2-torch-tta-cuda-0,north_europe,256,1024,196.22635814432056,"[5.218463052995503, 5.365933086024597, 5.179876493057236]" +j-12402286-job-0,onnx-tta,cuda:0,trial-2-onnx-tta-cuda-0,full,256,1024,208.15033145920478,"[4.893261830089614, 4.919521351810545, 5.14984557707794]" +j-12402286-job-0,onnx-tta,cuda:0,trial-2-onnx-tta-cuda-0,north_europe,256,1024,205.2013555896214,"[4.872062952956185, 4.990220444975421, 5.018525517079979]" diff --git a/docs/assets/mambo-indomain-support.json b/docs/assets/mambo-indomain-support.json new file mode 100644 index 0000000..4666201 --- /dev/null +++ b/docs/assets/mambo-indomain-support.json @@ -0,0 +1,30775 @@ +{ + "population": "reporting_partition", + "identities": { + "v2": "295fbfef0a168abb06caff10a46f36a297b884e9526312d27ee4e83cd487add7", + "torch": "295fbfef0a168abb06caff10a46f36a297b884e9526312d27ee4e83cd487add7", + "onnx": "295fbfef0a168abb06caff10a46f36a297b884e9526312d27ee4e83cd487add7", + "torch-tta": "295fbfef0a168abb06caff10a46f36a297b884e9526312d27ee4e83cd487add7", + "onnx-tta": "295fbfef0a168abb06caff10a46f36a297b884e9526312d27ee4e83cd487add7" + }, + "sources_sha256": { + "v2": "c8c2b3d0b3eb4726fe2578c1076cf26294a4c8122043e41b77150e9d4e8bb337", + "torch": "bbcd9cda9db39a5aa42908c0f7af718b7b13e33b6b8013a7c9fa6eb6799f94f1", + "onnx": "484eb6474495cac4826fb97097bac7313cce242a988831c152a348d7b4af2eec", + "torch-tta": "82bb7a7c36cc59d49ef38b4d27137c3c0acbe623e438d7ea9dd679e47dc5a01c", + "onnx-tta": "34324a27a65c3ef98ec95b0db443efc5f65bbf270dccb33a572afb37ddba6526" + }, + "revision": "70cc69adc05362863439277048e06386c1f885e1", + "policy": "Strictly > cutoff in both truth and accepted predictions; preserve all per-class FP/FN; macro reaggregation only", + "tta": "rotation30_pad25_3", + "report_images": 568939, + "calibration_images": 63974, + "dataset_title": "In-domain global-lepi test \u00b7 global vocabulary", + "independent_recipe": true, + "rows": [ + { + "model": "v2", + "scope": "zero", + "rank": "species", + "cutoff": -1, + "domain": "per_model", + "class_count": 12632, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 568939, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8775332728247491, + "precision": 0.8448274823412316, + "recall": 0.8775332728247491, + "f1": 0.850372188202817 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "species", + "cutoff": -1, + "domain": "per_model", + "class_count": 12632, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 568939, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9295522392148737, + "precision": 0.9084034020798256, + "recall": 0.9295522392148737, + "f1": 0.9144754993404935 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "species", + "cutoff": -1, + "domain": "per_model", + "class_count": 12632, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 568939, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.929545760642923, + "precision": 0.9083939953917602, + "recall": 0.929545760642923, + "f1": 0.9144694069143972 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "species", + "cutoff": -1, + "domain": "per_model", + "class_count": 12632, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 568939, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9031914801618097, + "precision": 0.8957682319690011, + "recall": 0.9031914801618097, + "f1": 0.8931233034667367 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "species", + "cutoff": -1, + "domain": "per_model", + "class_count": 12632, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 568939, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.903254258165182, + "precision": 0.8958363209627044, + "recall": 0.903254258165182, + "f1": 0.8931813750062196 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "common", + "class_count": 10732, + "truth_images_in_retained_classes": 559258, + "accepted_predictions_in_retained_classes": 556775, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.892042637746108, + "precision": 0.8624807091335043, + "recall": 0.892042637746108, + "f1": 0.870130409847651 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "common", + "class_count": 10732, + "truth_images_in_retained_classes": 559258, + "accepted_predictions_in_retained_classes": 558238, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9371951539678676, + "precision": 0.920053780228017, + "recall": 0.9371951539678676, + "f1": 0.9257802069792285 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "common", + "class_count": 10732, + "truth_images_in_retained_classes": 559258, + "accepted_predictions_in_retained_classes": 558236, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9372070517025534, + "precision": 0.9200666309904021, + "recall": 0.9372070517025534, + "f1": 0.9257949069356713 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "common", + "class_count": 10732, + "truth_images_in_retained_classes": 559258, + "accepted_predictions_in_retained_classes": 558982, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9160969130174343, + "precision": 0.9061800058338343, + "recall": 0.9160969130174343, + "f1": 0.9073461234817897 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "common", + "class_count": 10732, + "truth_images_in_retained_classes": 559258, + "accepted_predictions_in_retained_classes": 558984, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9161801232055252, + "precision": 0.9062393050497608, + "recall": 0.9161801232055252, + "f1": 0.9074189531592058 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "genus", + "cutoff": -1, + "domain": "per_model", + "class_count": 4476, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 568939, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9449328592412035, + "precision": 0.9072671198812579, + "recall": 0.9449328592412035, + "f1": 0.9213682143792531 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "genus", + "cutoff": -1, + "domain": "per_model", + "class_count": 4476, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 568939, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9700441575339722, + "precision": 0.9534379966946678, + "recall": 0.9700441575339722, + "f1": 0.9600051179818128 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "genus", + "cutoff": -1, + "domain": "per_model", + "class_count": 4476, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 568939, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9700350462704753, + "precision": 0.9534572983167396, + "recall": 0.9700350462704753, + "f1": 0.9600143434479116 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "genus", + "cutoff": -1, + "domain": "per_model", + "class_count": 4476, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 568939, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9525452203980439, + "precision": 0.9370642917998594, + "recall": 0.9525452203980439, + "f1": 0.9422165624061323 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "genus", + "cutoff": -1, + "domain": "per_model", + "class_count": 4476, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 568939, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9524334553173022, + "precision": 0.9371069603411143, + "recall": 0.9524334553173022, + "f1": 0.9421777591016375 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "class_count": 4077, + "truth_images_in_retained_classes": 567027, + "accepted_predictions_in_retained_classes": 566720, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9479651709033954, + "precision": 0.913798169374068, + "recall": 0.9479651709033954, + "f1": 0.9272747658088364 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "class_count": 4077, + "truth_images_in_retained_classes": 567027, + "accepted_predictions_in_retained_classes": 566882, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9714171324802696, + "precision": 0.9581319473622291, + "recall": 0.9714171324802696, + "f1": 0.9636531390879689 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "class_count": 4077, + "truth_images_in_retained_classes": 567027, + "accepted_predictions_in_retained_classes": 566883, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9714071295331486, + "precision": 0.9581122582265235, + "recall": 0.9714071295331486, + "f1": 0.9636409693787092 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "class_count": 4077, + "truth_images_in_retained_classes": 567027, + "accepted_predictions_in_retained_classes": 566891, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9554622976340493, + "precision": 0.9419053142860855, + "recall": 0.9554622976340493, + "f1": 0.946826548337692 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "class_count": 4077, + "truth_images_in_retained_classes": 567027, + "accepted_predictions_in_retained_classes": 566890, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9553804742750274, + "precision": 0.9419864197387074, + "recall": 0.9553804742750274, + "f1": 0.9468334279086545 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "family", + "cutoff": -1, + "domain": "per_model", + "class_count": 104, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 568939, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9705788744761545, + "precision": 0.9509880328905062, + "recall": 0.9705788744761545, + "f1": 0.9597726462561909 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "family", + "cutoff": -1, + "domain": "per_model", + "class_count": 104, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 568939, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9847079901805926, + "precision": 0.9765407345826963, + "recall": 0.9847079901805926, + "f1": 0.980351974922878 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "family", + "cutoff": -1, + "domain": "per_model", + "class_count": 104, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 568939, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9845608356725373, + "precision": 0.9760061052351259, + "recall": 0.9845608356725373, + "f1": 0.9799783228875365 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "family", + "cutoff": -1, + "domain": "per_model", + "class_count": 104, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 568939, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9681161624170399, + "precision": 0.9623314442357818, + "recall": 0.9681161624170399, + "f1": 0.9645304134232945 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "family", + "cutoff": -1, + "domain": "per_model", + "class_count": 104, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 568939, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9681041671465577, + "precision": 0.9623128857780121, + "recall": 0.9681041671465577, + "f1": 0.9645148542838584 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "common", + "class_count": 101, + "truth_images_in_retained_classes": 568926, + "accepted_predictions_in_retained_classes": 568924, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9697049796586146, + "precision": 0.9523610862012567, + "recall": 0.9697049796586146, + "f1": 0.9602279393793121 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "common", + "class_count": 101, + "truth_images_in_retained_classes": 568926, + "accepted_predictions_in_retained_classes": 568926, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9842537720671449, + "precision": 0.975843924718816, + "recall": 0.9842537720671449, + "f1": 0.9797683702176169 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "common", + "class_count": 101, + "truth_images_in_retained_classes": 568926, + "accepted_predictions_in_retained_classes": 568926, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9841022466331076, + "precision": 0.9752934152916147, + "recall": 0.9841022466331076, + "f1": 0.9793836196069683 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "common", + "class_count": 101, + "truth_images_in_retained_classes": 568926, + "accepted_predictions_in_retained_classes": 568925, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9671691177363579, + "precision": 0.9628627412592868, + "recall": 0.9671691177363579, + "f1": 0.9643769513557596 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "common", + "class_count": 101, + "truth_images_in_retained_classes": 568926, + "accepted_predictions_in_retained_classes": 568925, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9671567661707129, + "precision": 0.9628436315601973, + "recall": 0.9671567661707129, + "f1": 0.9643609300636667 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "species", + "cutoff": -1, + "domain": "per_model", + "class_count": 12632, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 546194, + "report_images": 568939, + "overall_coverage": 0.9600220761803989, + "metrics": { + "accuracy": 0.9037265793690537, + "precision": 0.8744630133499443, + "recall": 0.8617359559506923, + "f1": 0.8577212237023112 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "species", + "cutoff": -1, + "domain": "per_model", + "class_count": 12632, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 554475, + "report_images": 568939, + "overall_coverage": 0.9745772393877024, + "metrics": { + "accuracy": 0.9459195194605763, + "precision": 0.9308209935558278, + "recall": 0.9187824413723291, + "f1": 0.9207369197765051 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "species", + "cutoff": -1, + "domain": "per_model", + "class_count": 12632, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 554457, + "report_images": 568939, + "overall_coverage": 0.974545601549551, + "metrics": { + "accuracy": 0.9459922827275581, + "precision": 0.9308488990338033, + "recall": 0.9188180504133524, + "f1": 0.920776413807909 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "species", + "cutoff": -1, + "domain": "per_model", + "class_count": 12632, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 551819, + "report_images": 568939, + "overall_coverage": 0.9699089006027009, + "metrics": { + "accuracy": 0.924348693798147, + "precision": 0.9180616415933389, + "recall": 0.8923771863774734, + "f1": 0.8990523856912974 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "species", + "cutoff": -1, + "domain": "per_model", + "class_count": 12632, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 551892, + "report_images": 568939, + "overall_coverage": 0.9700372096129813, + "metrics": { + "accuracy": 0.9243532804255711, + "precision": 0.9180792238778338, + "recall": 0.892479370530307, + "f1": 0.8991069244273215 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "species", + "cutoff": 5, + "domain": "common", + "class_count": 10602, + "truth_images_in_retained_classes": 558259, + "accepted_predictions_in_retained_classes": 534450, + "report_images": 568939, + "overall_coverage": 0.9600220761803989, + "metrics": { + "accuracy": 0.9177121083679098, + "precision": 0.891762023479617, + "recall": 0.8801101949128962, + "f1": 0.8795222528459896 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "species", + "cutoff": 5, + "domain": "common", + "class_count": 10602, + "truth_images_in_retained_classes": 558259, + "accepted_predictions_in_retained_classes": 543718, + "report_images": 568939, + "overall_coverage": 0.9745772393877024, + "metrics": { + "accuracy": 0.9532783476173154, + "precision": 0.9407074772137323, + "recall": 0.9290829607634777, + "f1": 0.9325396241152072 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "species", + "cutoff": 5, + "domain": "common", + "class_count": 10602, + "truth_images_in_retained_classes": 558259, + "accepted_predictions_in_retained_classes": 543696, + "report_images": 568939, + "overall_coverage": 0.974545601549551, + "metrics": { + "accuracy": 0.9532904839498968, + "precision": 0.9407443752022229, + "recall": 0.9291231422275786, + "f1": 0.932580761385352 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "species", + "cutoff": 5, + "domain": "common", + "class_count": 10602, + "truth_images_in_retained_classes": 558259, + "accepted_predictions_in_retained_classes": 541677, + "report_images": 568939, + "overall_coverage": 0.9699089006027009, + "metrics": { + "accuracy": 0.9363450738235962, + "precision": 0.9279542708375016, + "recall": 0.9080426198963741, + "f1": 0.9146258206280785 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "species", + "cutoff": 5, + "domain": "common", + "class_count": 10602, + "truth_images_in_retained_classes": 558259, + "accepted_predictions_in_retained_classes": 541751, + "report_images": 568939, + "overall_coverage": 0.9700372096129813, + "metrics": { + "accuracy": 0.9363638260678422, + "precision": 0.9279653724002486, + "recall": 0.9081549374042587, + "f1": 0.9146897500425569 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "genus", + "cutoff": -1, + "domain": "per_model", + "class_count": 4476, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 547692, + "report_images": 568939, + "overall_coverage": 0.9626550473776626, + "metrics": { + "accuracy": 0.9709681846201991, + "precision": 0.945956754906805, + "recall": 0.924476997515889, + "f1": 0.9315715620856552 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "genus", + "cutoff": -1, + "domain": "per_model", + "class_count": 4476, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 557792, + "report_images": 568939, + "overall_coverage": 0.9804073898959291, + "metrics": { + "accuracy": 0.9843532446734725, + "precision": 0.9768370043872598, + "recall": 0.9598662398316677, + "f1": 0.9670807734237682 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "genus", + "cutoff": -1, + "domain": "per_model", + "class_count": 4476, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 557681, + "report_images": 568939, + "overall_coverage": 0.9802122898939957, + "metrics": { + "accuracy": 0.9843807286145065, + "precision": 0.9770218695519097, + "recall": 0.9596964890327477, + "f1": 0.9670747932811063 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": -1, + "domain": "per_model", + "class_count": 4476, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 553424, + "report_images": 568939, + "overall_coverage": 0.9727299411711976, + "metrics": { + "accuracy": 0.9715101613252839, + "precision": 0.9625019705071297, + "recall": 0.9403692157002803, + "f1": 0.9493424432950821 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": -1, + "domain": "per_model", + "class_count": 4476, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 553316, + "report_images": 568939, + "overall_coverage": 0.9725401141422895, + "metrics": { + "accuracy": 0.9717039507950574, + "precision": 0.9627559769001354, + "recall": 0.9402188527993052, + "f1": 0.9493781942192143 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "class_count": 4042, + "truth_images_in_retained_classes": 566796, + "accepted_predictions_in_retained_classes": 545570, + "report_images": 568939, + "overall_coverage": 0.9626550473776626, + "metrics": { + "accuracy": 0.9734046694197016, + "precision": 0.9512441119322542, + "recall": 0.9305841568761081, + "f1": 0.9383497485198514 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "class_count": 4042, + "truth_images_in_retained_classes": 566796, + "accepted_predictions_in_retained_classes": 555695, + "report_images": 568939, + "overall_coverage": 0.9804073898959291, + "metrics": { + "accuracy": 0.9852486590471086, + "precision": 0.9794558453427681, + "recall": 0.9630513085239086, + "f1": 0.9704594874167481 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "class_count": 4042, + "truth_images_in_retained_classes": 566796, + "accepted_predictions_in_retained_classes": 555586, + "report_images": 568939, + "overall_coverage": 0.9802122898939957, + "metrics": { + "accuracy": 0.9852790940100151, + "precision": 0.9795451055630318, + "recall": 0.9628633311424227, + "f1": 0.9704073117357285 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "class_count": 4042, + "truth_images_in_retained_classes": 566796, + "accepted_predictions_in_retained_classes": 551321, + "report_images": 568939, + "overall_coverage": 0.9727299411711976, + "metrics": { + "accuracy": 0.9741322556482092, + "precision": 0.9663131588925964, + "recall": 0.944725691696706, + "f1": 0.9541105972556507 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "class_count": 4042, + "truth_images_in_retained_classes": 566796, + "accepted_predictions_in_retained_classes": 551215, + "report_images": 568939, + "overall_coverage": 0.9725401141422895, + "metrics": { + "accuracy": 0.9743203454081207, + "precision": 0.9665903152380758, + "recall": 0.9446519597954779, + "f1": 0.9542041917775816 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "family", + "cutoff": -1, + "domain": "per_model", + "class_count": 104, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 560532, + "report_images": 568939, + "overall_coverage": 0.985223371925637, + "metrics": { + "accuracy": 0.9886094792660989, + "precision": 0.9786092510915618, + "recall": 0.9509273853934727, + "f1": 0.9637305558575113 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "family", + "cutoff": -1, + "domain": "per_model", + "class_count": 104, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 563145, + "report_images": 568939, + "overall_coverage": 0.9898161314306103, + "metrics": { + "accuracy": 0.9948948540363234, + "precision": 0.9928704939132356, + "recall": 0.9735711206973268, + "f1": 0.9828384466133122 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "family", + "cutoff": -1, + "domain": "per_model", + "class_count": 104, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 563126, + "report_images": 568939, + "overall_coverage": 0.9897827359347838, + "metrics": { + "accuracy": 0.994899624212835, + "precision": 0.9928702233945721, + "recall": 0.9735459402580976, + "f1": 0.9828257658861518 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "family", + "cutoff": -1, + "domain": "per_model", + "class_count": 104, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 555940, + "report_images": 568939, + "overall_coverage": 0.9771522078816886, + "metrics": { + "accuracy": 0.9884734442452687, + "precision": 0.9837783443784444, + "recall": 0.951186192254207, + "f1": 0.966613846478881 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "family", + "cutoff": -1, + "domain": "per_model", + "class_count": 104, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 555880, + "report_images": 568939, + "overall_coverage": 0.977046748421184, + "metrics": { + "accuracy": 0.9884830018540828, + "precision": 0.9837869141498093, + "recall": 0.9509704435277845, + "f1": 0.9665038797027707 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "family", + "cutoff": 5, + "domain": "common", + "class_count": 101, + "truth_images_in_retained_classes": 568926, + "accepted_predictions_in_retained_classes": 560519, + "report_images": 568939, + "overall_coverage": 0.985223371925637, + "metrics": { + "accuracy": 0.9882711469670721, + "precision": 0.979624047328605, + "recall": 0.9519450305041699, + "f1": 0.9649677628014595 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "family", + "cutoff": 5, + "domain": "common", + "class_count": 101, + "truth_images_in_retained_classes": 568926, + "accepted_predictions_in_retained_classes": 563132, + "report_images": 568939, + "overall_coverage": 0.9898161314306103, + "metrics": { + "accuracy": 0.9947432160374022, + "precision": 0.992658726405708, + "recall": 0.9727861044804157, + "f1": 0.9823286975028166 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "family", + "cutoff": 5, + "domain": "common", + "class_count": 101, + "truth_images_in_retained_classes": 568926, + "accepted_predictions_in_retained_classes": 563113, + "report_images": 568939, + "overall_coverage": 0.9897827359347838, + "metrics": { + "accuracy": 0.994748127902325, + "precision": 0.9926584478518367, + "recall": 0.9727601761073481, + "f1": 0.9823156401203942 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "family", + "cutoff": 5, + "domain": "common", + "class_count": 101, + "truth_images_in_retained_classes": 568926, + "accepted_predictions_in_retained_classes": 555926, + "report_images": 568939, + "overall_coverage": 0.9771522078816886, + "metrics": { + "accuracy": 0.9881310713020588, + "precision": 0.9849466780398504, + "recall": 0.9497362771726487, + "f1": 0.9665222685615121 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "family", + "cutoff": 5, + "domain": "common", + "class_count": 101, + "truth_images_in_retained_classes": 568926, + "accepted_predictions_in_retained_classes": 555866, + "report_images": 568939, + "overall_coverage": 0.977046748421184, + "metrics": { + "accuracy": 0.9881409128002436, + "precision": 0.9849555023588796, + "recall": 0.9495141200682138, + "f1": 0.9664090354455174 + } + } + ], + "shared_class_domains": { + "zero/species": [ + "10000103", + "10000384", + "10002059", + "10003902", + "10004820", + "10004969", + "10005133", + "10005632", + "10010361", + "10010700", + "10014340", + "10017792", + "10018221", + "10019169", + "10023049", + "10023821", + "10026605", + "10032003", + "10033898", + "10034831", + "10038125", + "10042504", + "10043566", + "10043827", + "10044107", + "10046510", + "10046698", + "10047346", + "10049887", + "10053130", + "10053809", + "10054019", + "10055104", + "10055273", + "10058263", + "10058481", + "10059034", + "10062202", + "10062933", + "10063383", + "10066605", + "10067382", + "10068024", + "10069243", + "10071588", + "10072380", + "10073044", + "10073321", + "10074808", + "10075196", + "10075732", + "10078526", + "10078800", + "10085335", + "10088253", + "10089194", + "10090105", + "10090168", + "10094256", + "10094594", + "10095278", + "10096855", + "10097776", + "10098436", + "10100176", + "10103570", + "10106345", + "10106475", + "10108753", + "10109201", + "10113008", + "10113190", + "10114865", + "10115073", + "10116946", + "10117959", + "10118643", + "10118678", + "10120854", + "10121804", + "10129812", + "10132475", + "10132596", + "10132811", + "10134558", + "10134865", + "10137001", + "10137350", + "10141437", + "10142569", + "10143814", + "10145421", + "10146436", + "10146771", + "10153630", + "10154280", + "10155026", + "10155932", + "10156181", + "10156470", + "10157400", + "10159697", + "10164453", + "10165457", + "10165831", + "10166724", + "10167252", + "10174909", + "10175639", + "10176413", + "10176954", + "10177508", + "10178326", + "10179389", + "10180624", + "10183056", + "10184940", + "10187154", + "10188228", + "10189661", + "10191275", + "10191785", + "10194663", + "10194727", + "10196956", + "10201273", + "10202439", + "10203493", + "10203499", + "10205587", + "10208422", + "10208792", + "10208801", + "10209845", + "10210935", + "10211808", + "10213314", + "10214972", + "10217455", + "10221195", + "10222583", + "10224300", + "10225227", + "10228568", + "10236521", + "10240592", + "10244305", + "10245924", + "10246305", + "10247309", + "10248521", + "10250474", + "10256550", + "10257673", + "10257899", + "10259280", + "10259880", + "10263383", + "10264193", + "10265559", + "10265841", + "10266782", + "10267561", + "10267570", + "10268303", + "10270464", + "10271464", + "10272611", + "10274769", + "10274976", + "10277877", + "10278292", + "10279983", + "10288636", + "10290084", + "10295171", + "10295290", + "10295646", + "10302305", + "10302660", + "10304313", + "10307487", + "10308365", + "10309794", + "10310599", + "10310835", + "10312073", + "10312760", + "10321900", + "10327658", + "10329023", + "10330376", + "10331171", + "10333787", + "10336328", + "10340332", + "10341307", + "10346267", + "10348110", + "10348945", + "10353400", + "10355428", + "10355898", + "10357476", + "10358334", + "10360329", + "10361029", + "10361239", + "10363151", + "10365587", + "10365884", + "10366580", + "10366679", + "10368234", + "10370026", + "10371735", + "10372377", + "10374414", + "10375186", + "10375403", + "10376507", + "10376685", + "10378314", + "10379201", + "10380465", + "10383968", + "10388627", + "10392889", + "10394962", + "10395440", + "10397209", + "10398658", + "10399906", + "10400868", + "10401396", + "10402067", + "10403441", + "10404426", + "10407953", + "10410048", + "10410699", + "10411202", + "10411472", + "10413588", + "10415847", + "10422582", + "10423263", + "10427568", + "10432184", + "10433914", + "10435406", + "10436020", + "10436850", + "10437872", + "10441062", + "10441857", + "10442122", + "10442332", + "10443878", + "10444331", + "10445629", + "10446295", + "10446574", + "10446580", + "10446898", + "10448500", + "10450442", + "10450446", + "10450501", + "10451589", + "10452421", + "10454590", + "10456933", + "10457796", + "10458175", + "10458960", + "10462612", + "10464411", + "10464824", + "10465059", + "10469497", + "10469564", + "10471477", + "10474236", + "10476233", + "10477629", + "10480609", + "10481441", + "10482025", + "10487080", + "10495733", + "10496181", + "10502505", + "10503464", + "10503495", + "10505033", + "10506164", + "10508423", + "10508467", + "10509408", + "10510138", + "10510325", + "10510959", + "10512675", + "10514620", + "10515719", + "10517417", + "10517500", + "10518163", + "10521368", + "10523304", + "10526954", + "10528420", + "10530208", + "10530383", + "10530515", + "10531480", + "10534945", + "10535684", + "10539598", + "10542548", + "10545267", + "10546013", + "10546538", + "10547404", + "10547716", + "10548275", + "10548683", + "10549715", + "10551407", + "10551923", + "10556366", + "10556522", + "10556853", + "10558140", + "10560674", + "10560849", + "10561589", + "10569879", + "10570752", + "10571987", + "10572729", + "10573425", + "10575632", + "10577473", + "10579230", + "10580256", + "10581870", + "10584071", + "10587253", + "10588642", + "10591617", + "10592969", + "10593489", + "10594478", + "10596756", + "10597291", + "10597823", + "10598038", + "10598407", + "10600208", + "10604375", + "10606547", + "10606887", + "10607329", + "10613467", + "10615631", + "10619048", + "10626099", + "10629052", + "10629533", + "10632124", + "10634980", + "10637588", + "10638244", + "10638451", + "10638589", + "10639484", + "10639943", + "10640865", + "10643533", + "10644798", + "10647358", + "10648791", + "10653980", + "10655790", + "10656625", + "10657151", + "10657453", + "10658576", + "10659737", + "10662329", + "10679326", + "10683012", + "10684776", + "10690739", + "10698858", + "10700540", + "10701190", + "10703948", + "10706419", + "10707501", + "10709446", + "10712554", + "10713577", + "10714961", + "10715410", + "10716234", + "10717680", + "10717837", + "10730270", + "10732033", + "10732353", + "10737993", + "10738407", + "10741837", + "10746289", + "10747908", + "10749137", + "10755716", + "10761559", + "10765884", + "10766319", + "10769553", + "10773498", + "10776919", + "10782264", + "10787705", + "10795141", + "10799294", + "10806460", + "10807169", + "10807383", + "10807787", + "10813849", + "10814936", + "10817208", + "10820762", + "10822185", + "10826443", + "10830546", + "10833593", + "10835385", + "10838422", + "10840540", + "10840565", + "10841562", + "10842267", + "10844862", + "10850393", + "10850415", + "10850929", + "10851228", + "10851840", + "10854079", + "10855556", + "10857326", + "10858809", + "10860091", + "10861282", + "10866199", + "10866411", + "10867462", + "10869347", + "10873137", + "10874932", + "10879371", + "10882244", + "10882997", + "10883659", + "10889719", + "10891794", + "10904813", + "10922201", + "10922411", + "10926224", + "10932946", + "10933525", + "10942408", + "10955682", + "10959264", + "10963226", + "10967713", + "10972780", + "10982648", + "10982815", + "10987178", + "10988070", + "10994020", + "10996761", + "11008182", + "11014495", + "11016336", + "11033463", + "11044778", + "11046092", + "11052757", + "11054256", + "11055981", + "11056379", + "11059353", + "11080751", + "11088003", + "11093909", + "11095591", + "11097510", + "11098546", + "11121180", + "11135155", + "11140464", + "11141784", + "11142432", + "11173690", + "11175615", + "11190148", + "11219489", + "11232431", + "11287091", + "11311045", + "11322712", + "11372793", + "11374171", + "11375508", + "11378273", + "11378618", + "11382064", + "11414590", + "11417741", + "11418741", + "11423843", + "11428453", + "11430021", + "11431507", + "11435704", + "11437060", + "11449815", + "11451126", + "11452421", + "11453492", + "11457930", + "11461056", + "11464362", + "11464595", + "11465014", + "11466090", + "11467034", + "11467944", + "11468089", + "11468731", + "11470119", + "11470672", + "11478679", + "11484123", + "11487320", + "11494627", + "11495556", + "11496990", + "11501104", + "11503857", + "11508076", + "11508404", + "11508472", + "11513018", + "11513188", + "11516142", + "11529292", + "11529603", + "11535847", + "11539735", + "11546465", + "11548960", + "11554226", + "11554842", + "11555221", + "11562243", + "11563728", + "11566649", + "11570545", + "11571523", + "11590674", + "11591775", + "11594541", + "11596898", + "11598540", + "11608942", + "11609422", + "11615055", + "11615549", + "11619030", + "11623814", + "11626773", + "11627464", + "11635419", + "11636323", + "11636481", + "11638437", + "11642411", + "11643393", + "11644349", + "11645405", + "11650277", + "11652557", + "11654024", + "11654707", + "11656384", + "11660145", + "11660632", + "11667300", + "11667997", + "11670842", + "11673056", + "11688440", + "11688586", + "11693171", + "11698552", + "11701883", + "11701991", + "11703980", + "11706893", + "11713256", + "11713970", + "11714235", + "11716362", + "11717028", + "11720834", + "11725043", + "11725616", + "11726907", + "11728049", + "11728240", + "11729388", + "11729494", + "11730078", + "11731502", + "11736162", + "11737872", + "11738734", + "11749278", + "11753804", + "11754954", + "11756119", + "11758730", + "11760688", + "11763567", + "11776315", + "11780161", + "11794114", + "11797637", + "11807833", + "11812181", + "11819666", + "11826016", + "11832697", + "11834445", + "11840028", + "11840957", + "11841763", + "11846897", + "11854390", + "11856219", + "11858666", + "11860016", + "11860565", + "11871044", + "11871190", + "11873825", + "11874998", + "11887065", + "11891668", + "11892494", + "11900897", + "11905965", + "11906255", + "11907485", + "11907754", + "11909090", + "11919216", + "11922580", + "11923027", + "11950325", + "11954157", + "11962292", + "11967675", + "11976273", + "11992983", + "12006709", + "12010643", + "12018158", + "12022449", + "12031071", + "12037602", + "12046692", + "12057008", + "12060941", + "12066849", + "12087490", + "12089608", + "12103087", + "12106417", + "12106975", + "12116722", + "12126779", + "12135372", + "12151997", + "12160125", + "12170988", + "12171068", + "12171522", + "12173621", + "12174634", + "12175154", + "12176367", + "12176559", + "12180031", + "12180041", + "12181811", + "12183285", + "12185456", + "12185656", + "12188086", + "12191141", + "12194283", + "12195040", + "12197284", + "12198522", + "12203022", + "12206386", + "12206694", + "12208168", + "12208733", + "12209759", + "12211009", + "12212066", + "12214821", + "12214993", + "12216332", + "12217030", + "12219036", + "12219250", + "12222885", + "12223105", + "12223349", + "12226416", + "12229237", + "12229400", + "12229940", + "12231152", + "12231344", + "12231385", + "12233602", + "12233808", + "12233838", + "12234544", + "12234977", + "12235234", + "12236627", + "12239491", + "12242422", + "12247340", + "12247359", + "12249986", + "12250854", + "12251247", + "12252340", + "12252926", + "12253343", + "12253844", + "12257250", + "12257418", + "12258146", + "12258652", + "12258984", + "12262562", + "12263736", + "12265590", + "12266659", + "12276630", + "12286003", + "12301192", + "12322536", + "12335869", + "12353663", + "12357826", + "12358748", + "1730519", + "1730543", + "1730948", + "1730978", + "1731097", + "1731221", + "1731263", + "1731292", + "1731598", + "1731750", + "1731811", + "1731812", + "1731826", + "1731837", + "1731860", + "1731862", + "1731886", + "1731890", + "1731906", + "1731923", + "1731926", + "1731927", + "1732001", + "1732005", + "1732031", + "1732052", + "1732063", + "1732087", + "1732114", + "1732115", + "1732416", + "1732419", + "1732452", + "1732457", + "1732508", + "1732521", + "1732525", + "1732565", + "1732660", + "1732662", + "1732680", + "1732685", + "1732697", + "1732717", + "1732763", + "1732830", + "1732842", + "1732901", + "1732978", + "1733154", + "1733155", + "1733243", + "1733258", + "1733394", + "1733484", + "1733504", + "1733511", + "1733525", + "1733535", + "1733620", + "1733755", + "1734384", + "1734453", + "1734519", + "1734690", + "1734704", + "1734794", + "1734826", + "1734851", + "1735168", + "1735273", + "1735391", + "1735398", + "1735408", + "1735532", + "1735844", + "1735855", + "1736271", + "1736315", + "1736358", + "1736377", + "1736390", + "1736412", + "1736425", + "1736447", + "1736484", + "1736499", + "1736511", + "1736528", + "1736560", + "1736565", + "1736601", + "1736623", + "1736727", + "1736760", + "1736800", + "1736803", + "1736809", + "1736811", + "1736821", + "1736826", + "1736836", + "1736860", + "1736898", + "1736904", + "1736905", + "1736906", + "1736915", + "1736918", + "1736937", + "1736939", + "1736945", + "1736993", + "1736995", + "1737015", + "1737072", + "1737115", + "1737131", + "1737182", + "1737187", + "1737231", + "1737342", + "1737368", + "1737374", + "1737403", + "1737413", + "1737417", + "1737437", + "1737491", + "1737497", + "1737509", + "1737524", + "1737526", + "1737533", + "1737542", + "1737544", + "1737551", + "1737552", + "1737650", + "1737753", + "1737775", + "1737776", + "1737847", + "1737893", + "1737904", + "1737924", + "1737929", + "1737964", + "1737973", + "1737978", + "1738045", + "1738050", + "1738081", + "1738163", + "1738196", + "1738218", + "1738222", + "1738245", + "1738317", + "1738337", + "1738422", + "1738429", + "1738514", + "1738687", + "1738700", + "1738722", + "1738777", + "1738794", + "1738839", + "1738883", + "1738888", + "1739034", + "1739042", + "1739051", + "1739151", + "1739220", + "1739272", + "1739284", + "1739290", + "1739337", + "1739377", + "1739381", + "1739400", + "1739461", + "1739553", + "1739567", + "1739605", + "1739612", + "1739617", + "1739629", + "1739646", + "1739656", + "1739668", + "1739727", + "1739748", + "1739767", + "1739797", + "1739819", + "1739833", + "1739867", + "1739884", + "1739919", + "1739922", + "1739924", + "1739927", + "1739931", + "1739956", + "1739964", + "1739973", + "1739980", + "1739983", + "1739999", + "1740003", + "1740005", + "1740037", + "1740053", + "1740060", + "1740069", + "1740116", + "1740120", + "1740133", + "1740148", + "1740155", + "1740163", + "1740174", + "1740183", + "1740185", + "1740225", + "1740246", + "1740305", + "1740370", + "1740374", + "1740389", + "1740392", + "1740400", + "1740449", + "1740469", + "1740482", + "1740518", + "1740524", + "1740533", + "1740567", + "1740570", + "1740623", + "1740797", + "1740828", + "1741056", + "1741074", + "1741084", + "1741130", + "1741131", + "1741147", + "1741258", + "1741324", + "1741340", + "1741341", + "1741361", + "1741368", + "1741398", + "1741400", + "1741545", + "1741551", + "1741590", + "1741593", + "1741615", + "1741633", + "1741634", + "1741667", + "1741719", + "1741747", + "1741752", + "1741756", + "1741765", + "1741812", + "1741818", + "1741820", + "1741823", + "1741824", + "1741826", + "1742081", + "1742091", + "1742121", + "1742142", + "1742150", + "1742168", + "1742178", + "1742185", + "1742198", + "1742214", + "1742241", + "1742260", + "1742263", + "1742268", + "1742272", + "1742273", + "1742287", + "1742293", + "1742304", + "1742310", + "1742335", + "1742346", + "1742402", + "1743184", + "1743196", + "1743319", + "1743461", + "1743475", + "1743532", + "1743588", + "1743604", + "1743651", + "1743653", + "1743658", + "1743663", + "1743680", + "1743710", + "1743714", + "1743768", + "1743775", + "1743782", + "1743825", + "1743828", + "1743838", + "1743855", + "1743856", + "1743862", + "1743867", + "1743898", + "1743998", + "1744071", + "1744130", + "1744136", + "1744180", + "1744212", + "1744224", + "1744416", + "1744498", + "1744526", + "1744542", + "1744588", + "1744593", + "1744700", + "1744709", + "1744714", + "1744724", + "1744728", + "1744731", + "1744739", + "1744742", + "1744748", + "1744763", + "1744782", + "1744789", + "1744808", + "1744810", + "1744860", + "1744896", + "1744949", + "1744953", + "1744998", + "1745019", + "1745022", + "1745079", + "1745307", + "1745558", + "1745561", + "1745579", + "1745600", + "1745606", + "1745630", + "1745634", + "1745636", + "1745643", + "1745659", + "1745666", + "1745669", + "1745676", + "1745678", + "1745705", + "1745724", + "1745729", + "1745737", + "1745746", + "1745756", + "1745762", + "1745771", + "1745781", + "1745787", + "1745814", + "1745816", + "1745827", + "1745830", + "1745895", + "1745925", + "1745952", + "1745957", + "1746027", + "1746174", + "1746327", + "1746413", + "1746440", + "1746462", + "1746512", + "1746586", + "1746613", + "1746644", + "1746666", + "1746689", + "1746695", + "1746714", + "1746751", + "1746754", + "1746763", + "1746774", + "1746775", + "1746831", + "1746832", + "1746856", + "1746876", + "1746881", + "1746898", + "1746910", + "1746927", + "1746949", + "1747024", + "1747050", + "1747068", + "1747141", + "1747147", + "1747150", + "1747160", + "1747161", + "1747163", + "1747166", + "1747171", + "1747189", + "1747196", + "1747215", + "1747222", + "1747523", + "1747639", + "1747738", + "1747740", + "1747814", + "1747924", + "1748103", + "1748148", + "1748149", + "1748151", + "1748152", + "1748203", + "1748321", + "1748425", + "1748442", + "1748456", + "1748473", + "1748486", + "1748518", + "1748648", + "1748661", + "1748751", + "1748780", + "1748805", + "1748890", + "1748922", + "1748942", + "1749050", + "1749070", + "1749124", + "1749164", + "1749287", + "1749449", + "1749531", + "1749591", + "1749596", + "1749635", + "1749664", + "1749713", + "1749744", + "1749869", + "1749908", + "1749929", + "1749936", + "1749948", + "1749975", + "1750076", + "1750131", + "1750143", + "1750166", + "1750326", + "1750934", + "1751051", + "1751163", + "1751207", + "1751216", + "1751236", + "1751298", + "1751299", + "1751368", + "1751400", + "1751457", + "1751497", + "1751557", + "1751572", + "1751575", + "1751588", + "1751625", + "1751670", + "1751684", + "1751690", + "1751852", + "1751980", + "1751986", + "1752034", + "1752109", + "1752111", + "1752161", + "1752281", + "1752285", + "1752286", + "1752327", + "1752373", + "1752383", + "1752492", + "1752494", + "1752536", + "1752537", + "1752539", + "1752545", + "1752547", + "1752603", + "1752651", + "1752749", + "1752758", + "1752775", + "1752805", + "1752825", + "1752832", + "1752849", + "1752894", + "1752903", + "1752923", + "1752947", + "1753081", + "1753105", + "1753106", + "1753111", + "1753215", + "1753461", + "1753603", + "1753604", + "1753636", + "1753668", + "1753759", + "1753871", + "1753902", + "1753906", + "1753922", + "1753929", + "1754135", + "1754183", + "1754263", + "1754270", + "1754332", + "1754368", + "1754380", + "1754400", + "1754511", + "1754516", + "1754535", + "1754806", + "1754814", + "1754902", + "1754919", + "1754933", + "1755237", + "1755248", + "1755253", + "1755276", + "1757652", + "1757839", + "1757853", + "1758003", + "1758114", + "1758146", + "1758441", + "1758461", + "1758596", + "1758602", + "1758613", + "1758625", + "1758727", + "1758767", + "1758771", + "1758781", + "1758783", + "1758850", + "1758860", + "1758861", + "1758866", + "1758878", + "1758879", + "1758898", + "1758906", + "1758916", + "1759037", + "1759040", + "1759041", + "1759055", + "1759069", + "1759079", + "1759083", + "1759092", + "1759153", + "1759159", + "1759338", + "1759351", + "1759394", + "1759407", + "1759553", + "1759573", + "1759585", + "1759597", + "1759605", + "1759610", + "1759611", + "1759620", + "1759621", + "1759624", + "1759631", + "1759632", + "1759633", + "1759634", + "1759661", + "1759667", + "1759668", + "1759671", + "1759673", + "1759677", + "1759678", + "1759686", + "1759688", + "1759691", + "1759694", + "1759719", + "1759775", + "1759799", + "1759881", + "1760104", + "1760172", + "1760173", + "1760175", + "1760201", + "1760233", + "1760244", + "1760246", + "1760257", + "1760261", + "1760309", + "1760361", + "1760385", + "1760396", + "1760397", + "1760398", + "1760400", + "1760454", + "1760455", + "1760593", + "1760620", + "1760682", + "1760857", + "1760867", + "1760887", + "1760891", + "1760893", + "1760927", + "1760939", + "1761041", + "1761102", + "1761110", + "1761111", + "1761143", + "1761213", + "1761353", + "1761392", + "1761438", + "1761439", + "1761498", + "1761553", + "1761563", + "1761572", + "1761573", + "1761735", + "1761751", + "1761752", + "1761778", + "1761788", + "1761798", + "1761820", + "1761838", + "1761865", + "1761892", + "1762151", + "1762219", + "1762226", + "1762244", + "1762271", + "1762286", + "1762383", + "1762474", + "1762608", + "1762609", + "1762615", + "1762657", + "1762680", + "1762849", + "1762852", + "1762887", + "1762900", + "1762902", + "1763072", + "1763163", + "1763184", + "1763199", + "1763223", + "1763589", + "1763610", + "1763650", + "1763697", + "1763727", + "1763761", + "1763782", + "1763976", + "1764021", + "1764043", + "1764060", + "1764174", + "1764178", + "1764238", + "1764525", + "1764531", + "1764553", + "1764640", + "1764673", + "1764691", + "1764693", + "1764791", + "1764880", + "1764886", + "1764917", + "1764929", + "1764986", + "1764987", + "1765010", + "1765011", + "1765017", + "1765044", + "1765069", + "1765073", + "1765097", + "1765172", + "1765182", + "1765604", + "1765653", + "1765658", + "1765733", + "1765751", + "1765752", + "1765767", + "1765779", + "1765798", + "1765863", + "1765954", + "1765962", + "1765996", + "1765999", + "1766007", + "1766072", + "1766086", + "1766128", + "1766130", + "1766131", + "1766137", + "1766193", + "1766205", + "1766210", + "1766237", + "1766260", + "1766274", + "1766285", + "1766287", + "1766392", + "1766410", + "1766418", + "1766509", + "1766510", + "1766558", + "1766560", + "1766570", + "1766584", + "1766601", + "1766612", + "1766618", + "1766646", + "1766650", + "1766721", + "1766741", + "1766773", + "1766814", + "1766839", + "1766845", + "1766888", + "1766892", + "1766910", + "1766919", + "1766921", + "1767031", + "1767044", + "1767052", + "1767140", + "1767142", + "1767215", + "1767293", + "1767302", + "1767307", + "1767320", + "1767338", + "1767347", + "1767368", + "1767381", + "1767393", + "1767430", + "1767484", + "1767499", + "1767508", + "1767511", + "1767571", + "1767579", + "1767584", + "1767597", + "1767602", + "1767608", + "1767612", + "1767625", + "1767655", + "1767674", + "1767719", + "1767755", + "1767780", + "1767883", + "1768042", + "1768048", + "1768117", + "1768132", + "1768150", + "1768172", + "1768174", + "1768190", + "1768196", + "1768199", + "1768283", + "1768341", + "1768440", + "1768461", + "1768462", + "1768546", + "1768557", + "1768560", + "1768568", + "1768626", + "1768630", + "1768698", + "1768702", + "1768727", + "1768729", + "1768749", + "1768771", + "1768815", + "1768819", + "1768898", + "1768972", + "1769000", + "1769029", + "1769057", + "1769103", + "1769114", + "1769168", + "1769194", + "1769209", + "1769225", + "1769250", + "1769260", + "1769271", + "1769272", + "1769293", + "1769294", + "1769310", + "1769336", + "1769410", + "1769425", + "1769465", + "1769505", + "1769519", + "1769543", + "1769566", + "1769592", + "1769737", + "1769739", + "1769772", + "1769814", + "1769823", + "1769827", + "1769841", + "1769852", + "1769897", + "1769901", + "1769934", + "1769944", + "1769947", + "1769958", + "1769978", + "1770038", + "1770044", + "1770132", + "1770144", + "1770150", + "1770172", + "1770307", + "1770353", + "1770380", + "1770383", + "1770384", + "1770385", + "1770416", + "1770461", + "1770477", + "1770530", + "1770659", + "1770772", + "1770773", + "1770821", + "1770828", + "1770849", + "1770869", + "1770880", + "1770918", + "1770955", + "1771019", + "1771040", + "1771055", + "1771067", + "1771143", + "1771203", + "1771204", + "1771214", + "1771245", + "1771296", + "1771308", + "1771357", + "1771385", + "1771391", + "1771441", + "1771455", + "1771509", + "1771531", + "1771555", + "1771634", + "1771650", + "1771678", + "1771698", + "1771772", + "1771779", + "1771846", + "1771848", + "1771859", + "1771872", + "1771903", + "1771977", + "1771997", + "1772013", + "1772043", + "1772094", + "1772169", + "1772179", + "1772255", + "1772260", + "1772352", + "1772374", + "1772422", + "1772427", + "1772428", + "1772447", + "1772462", + "1772543", + "1772668", + "1772716", + "1772793", + "1772822", + "1772940", + "1772956", + "1772977", + "1773002", + "1773062", + "1773069", + "1773081", + "1773163", + "1773248", + "1773309", + "1773313", + "1773328", + "1773484", + "1773572", + "1773577", + "1773662", + "1773677", + "1773728", + "1773742", + "1773744", + "1773746", + "1773783", + "1773901", + "1773904", + "1774092", + "1774095", + "1774243", + "1774253", + "1774262", + "1774268", + "1774283", + "1774285", + "1774314", + "1774347", + "1774358", + "1774470", + "1774575", + "1774576", + "1774583", + "1774598", + "1774600", + "1774604", + "1774618", + "1774626", + "1774635", + "1774640", + "1774654", + "1774661", + "1774682", + "1774691", + "1774702", + "1774712", + "1774792", + "1774797", + "1774859", + "1774873", + "1774878", + "1774907", + "1774918", + "1774929", + "1774959", + "1774997", + "1775046", + "1775055", + "1775089", + "1775112", + "1775118", + "1775148", + "1775172", + "1775290", + "1775291", + "1775301", + "1775329", + "1775508", + "1775509", + "1775631", + "1775672", + "1775680", + "1775796", + "1775866", + "1775891", + "1775913", + "1775962", + "1775963", + "1775970", + "1775980", + "1776067", + "1776094", + "1776167", + "1776182", + "1776207", + "1776265", + "1776268", + "1776330", + "1776371", + "1776397", + "1776459", + "1776462", + "1776467", + "1776470", + "1776472", + "1776473", + "1776476", + "1776618", + "1776619", + "1776861", + "1776862", + "1776871", + "1777024", + "1777034", + "1777052", + "1777075", + "1777120", + "1777165", + "1777166", + "1777179", + "1777253", + "1777261", + "1777289", + "1777463", + "1777471", + "1777517", + "1777631", + "1777727", + "1777728", + "1777730", + "1777737", + "1777942", + "1777974", + "1777976", + "1777980", + "1777982", + "1777994", + "1777996", + "1778000", + "1778006", + "1778007", + "1778013", + "1778015", + "1778024", + "1778031", + "1778033", + "1778034", + "1778037", + "1778045", + "1778049", + "1778074", + "1778109", + "1778127", + "1778143", + "1778337", + "1778430", + "1778517", + "1778534", + "1778548", + "1778551", + "1778555", + "1778596", + "1778688", + "1779258", + "1779269", + "1779276", + "1779334", + "1779399", + "1779430", + "1779435", + "1779456", + "1779633", + "1779641", + "1779643", + "1779671", + "1779690", + "1779740", + "1779959", + "1780049", + "1780072", + "1780149", + "1780150", + "1780209", + "1780213", + "1780214", + "1780215", + "1780272", + "1780309", + "1780313", + "1780326", + "1780330", + "1780344", + "1780378", + "1780390", + "1780414", + "1780437", + "1780440", + "1780450", + "1780617", + "1780646", + "1780668", + "1780705", + "1780716", + "1780852", + "1780856", + "1780857", + "1780860", + "1780862", + "1780897", + "1780926", + "1780928", + "1780954", + "1781008", + "1781016", + "1781029", + "1781234", + "1781350", + "1781413", + "1781420", + "1781421", + "1781446", + "1781473", + "1781503", + "1781531", + "1781598", + "1781694", + "1781803", + "1781819", + "1781841", + "1781944", + "1781946", + "1782031", + "1782115", + "1782177", + "1782185", + "1782208", + "1782214", + "1782249", + "1782267", + "1782273", + "1782277", + "1782279", + "1782289", + "1782310", + "1782319", + "1782326", + "1782328", + "1782354", + "1782422", + "1782424", + "1782457", + "1782466", + "1782507", + "1782523", + "1782542", + "1782543", + "1782560", + "1782579", + "1782585", + "1782595", + "1782615", + "1782622", + "1782627", + "1782645", + "1782672", + "1782682", + "1782689", + "1782700", + "1782705", + "1782706", + "1782707", + "1782709", + "1782726", + "1782727", + "1782743", + "1782744", + "1782745", + "1782747", + "1782762", + "1782763", + "1782776", + "1782777", + "1782803", + "1782808", + "1782809", + "1782822", + "1782833", + "1782837", + "1782840", + "1782841", + "1782853", + "1782870", + "1782871", + "1782878", + "1782921", + "1782927", + "1782928", + "1782934", + "1782948", + "1782961", + "1782972", + "1782978", + "1782993", + "1783002", + "1783008", + "1783013", + "1783016", + "1783035", + "1783037", + "1783043", + "1783045", + "1783055", + "1783059", + "1783090", + "1783173", + "1783302", + "1783313", + "1783371", + "1783376", + "1783378", + "1783652", + "1783713", + "1783725", + "1783777", + "1783811", + "1783841", + "1783842", + "1783855", + "1783882", + "1783906", + "1783940", + "1783971", + "1784281", + "1784282", + "1784349", + "1784359", + "1784422", + "1784461", + "1784513", + "1784582", + "1784610", + "1784646", + "1784688", + "1784761", + "1784812", + "1784826", + "1784853", + "1784893", + "1784936", + "1784959", + "1785024", + "1785072", + "1785105", + "1785145", + "1785149", + "1785162", + "1785166", + "1785168", + "1785181", + "1785185", + "1785220", + "1785280", + "1785286", + "1785314", + "1785329", + "1785331", + "1785361", + "1785367", + "1785399", + "1785403", + "1785725", + "1785728", + "1785730", + "1785732", + "1785733", + "1785744", + "1785832", + "1785875", + "1785886", + "1785887", + "1785888", + "1785895", + "1785913", + "1785916", + "1785951", + "1785955", + "1785992", + "1785997", + "1786007", + "1786017", + "1786035", + "1786036", + "1786190", + "1786217", + "1786219", + "1786247", + "1786308", + "1786317", + "1786360", + "1786455", + "1786565", + "1786566", + "1786567", + "1786573", + "1786597", + "1786619", + "1786651", + "1786658", + "1786664", + "1786711", + "1786733", + "1786808", + "1786902", + "1786912", + "1786913", + "1786936", + "1786958", + "1786980", + "1786984", + "1786985", + "1786990", + "1787003", + "1787009", + "1787010", + "1787064", + "1787072", + "1787079", + "1787090", + "1787106", + "1787112", + "1787165", + "1787213", + "1787226", + "1787267", + "1787279", + "1787381", + "1787400", + "1787417", + "1787438", + "1787504", + "1787506", + "1787590", + "1787610", + "1787631", + "1787697", + "1787751", + "1787770", + "1787825", + "1787859", + "1787905", + "1788034", + "1788037", + "1788045", + "1788063", + "1788070", + "1788139", + "1788278", + "1788372", + "1788425", + "1788485", + "1788522", + "1788553", + "1788635", + "1788673", + "1788677", + "1788679", + "1788680", + "1788681", + "1788711", + "1788717", + "1788720", + "1788734", + "1788813", + "1788846", + "1788856", + "1788881", + "1788891", + "1788917", + "1788953", + "1789057", + "1789071", + "1789073", + "1789076", + "1789086", + "1789155", + "1789191", + "1789193", + "1789212", + "1789225", + "1789250", + "1789255", + "1789267", + "1789403", + "1789481", + "1789498", + "1789505", + "1789512", + "1789553", + "1789580", + "1789604", + "1789637", + "1789694", + "1789695", + "1789730", + "1789745", + "1789753", + "1789755", + "1789783", + "1789785", + "1789794", + "1789805", + "1789840", + "1789849", + "1789957", + "1789982", + "1789984", + "1790002", + "1790013", + "1790062", + "1790072", + "1790084", + "1790153", + "1790230", + "1790240", + "1790246", + "1790248", + "1790257", + "1790258", + "1790268", + "1790274", + "1790287", + "1790308", + "1790331", + "1790343", + "1790359", + "1790361", + "1790364", + "1790369", + "1790371", + "1790376", + "1790450", + "1790625", + "1790671", + "1790692", + "1790737", + "1790787", + "1790816", + "1790832", + "1790876", + "1790888", + "1790900", + "1790910", + "1790937", + "1790945", + "1791010", + "1791094", + "1791331", + "1791372", + "1791379", + "1791384", + "1791422", + "1791514", + "1791590", + "1791660", + "1791680", + "1791698", + "1791715", + "1791735", + "1791736", + "1791784", + "1791793", + "1791837", + "1791846", + "1791862", + "1792061", + "1792072", + "1792073", + "1792087", + "1792091", + "1792095", + "1792096", + "1792099", + "1792210", + "1792276", + "1792292", + "1792300", + "1792318", + "1792335", + "1792377", + "1792379", + "1792383", + "1792411", + "1792414", + "1792418", + "1792426", + "1792430", + "1792431", + "1792442", + "1792449", + "1792456", + "1792465", + "1792475", + "1792478", + "1792485", + "1792497", + "1792517", + "1792555", + "1792560", + "1792564", + "1792645", + "1792695", + "1792768", + "1792817", + "1792827", + "1792831", + "1792996", + "1793189", + "1793192", + "1793243", + "1793246", + "1793368", + "1793369", + "1793419", + "1793453", + "1793455", + "1793515", + "1793533", + "1793538", + "1793542", + "1793613", + "1793631", + "1793635", + "1793646", + "1793661", + "1793689", + "1793699", + "1793877", + "1793983", + "1793986", + "1794102", + "1794273", + "1794351", + "1794361", + "1794425", + "1794507", + "1794510", + "1794518", + "1794532", + "1794590", + "1794609", + "1795042", + "1795045", + "1795049", + "1795065", + "1795068", + "1795074", + "1795110", + "1795215", + "1795282", + "1795483", + "1795542", + "1795657", + "1795788", + "1795802", + "1795812", + "1795854", + "1795862", + "1795871", + "1795896", + "1795900", + "1795930", + "1795946", + "1795957", + "1796007", + "1796032", + "1796035", + "1796040", + "1796100", + "1796117", + "1796139", + "1796145", + "1796169", + "1796180", + "1796181", + "1796188", + "1796217", + "1796257", + "1796274", + "1796310", + "1796312", + "1796338", + "1796423", + "1796451", + "1796463", + "1796523", + "1796678", + "1796791", + "1796842", + "1796941", + "1796958", + "1796984", + "1797039", + "1797111", + "1797121", + "1797122", + "1797135", + "1797137", + "1797146", + "1797178", + "1797194", + "1797198", + "1797206", + "1797210", + "1797218", + "1797252", + "1797257", + "1797258", + "1797275", + "1797276", + "1797285", + "1797290", + "1797296", + "1797300", + "1797333", + "1797339", + "1797349", + "1797365", + "1797367", + "1797373", + "1797374", + "1797375", + "1797394", + "1797409", + "1797429", + "1797432", + "1797433", + "1797436", + "1797440", + "1797445", + "1797454", + "1797464", + "1797475", + "1797479", + "1797488", + "1797507", + "1797521", + "1797527", + "1797542", + "1797556", + "1797587", + "1797592", + "1797593", + "1797595", + "1797601", + "1797727", + "1797735", + "1797793", + "1797903", + "1798014", + "1798018", + "1798023", + "1798025", + "1798060", + "1798084", + "1798090", + "1798101", + "1798288", + "1798329", + "1798335", + "1798346", + "1798371", + "1798372", + "1798375", + "1798393", + "1798402", + "1798408", + "1798427", + "1798449", + "1798481", + "1798488", + "1798504", + "1798511", + "1798529", + "1798580", + "1798594", + "1798687", + "1798794", + "1798802", + "1798807", + "1798823", + "1798863", + "1798868", + "1798916", + "1798922", + "1798931", + "1798971", + "1798974", + "1798984", + "1799132", + "1799135", + "1799165", + "1799167", + "1799183", + "1799417", + "1799433", + "1799675", + "1799680", + "1799701", + "1799703", + "1799708", + "1799743", + "1799751", + "1799757", + "1799774", + "1799799", + "1799821", + "1799870", + "1799877", + "1799880", + "1799884", + "1799894", + "1799900", + "1799901", + "1799917", + "1799925", + "1799938", + "1799944", + "1799956", + "1799957", + "1799967", + "1800004", + "1800017", + "1800024", + "1800028", + "1800032", + "1800130", + "1800140", + "1800149", + "1800191", + "1800238", + "1800441", + "1800473", + "1800522", + "1800528", + "1800539", + "1800562", + "1800642", + "1800696", + "1800821", + "1800843", + "1800844", + "1800881", + "1800963", + "1801001", + "1801051", + "1801073", + "1801080", + "1801084", + "1801170", + "1801196", + "1801303", + "1801305", + "1801316", + "1801432", + "1801461", + "1801787", + "1801896", + "1801903", + "1801922", + "1801993", + "1802120", + "1802229", + "1802244", + "1802280", + "1802337", + "1802662", + "1802702", + "1802776", + "1802783", + "1802827", + "1802850", + "1802868", + "1802888", + "1802919", + "1802939", + "1802978", + "1802998", + "1803012", + "1803021", + "1803022", + "1803025", + "1803035", + "1803039", + "1803060", + "1803065", + "1803073", + "1803091", + "1803108", + "1803148", + "1803163", + "1803197", + "1803218", + "1803461", + "1803544", + "1803545", + "1803590", + "1803781", + "1803788", + "1803824", + "1804071", + "1804074", + "1804120", + "1804148", + "1804182", + "1804331", + "1804394", + "1804398", + "1804409", + "1804430", + "1804477", + "1804512", + "1804610", + "1804721", + "1804727", + "1804742", + "1804759", + "1804906", + "1804963", + "1804969", + "1804971", + "1804974", + "1805043", + "1805044", + "1805110", + "1805111", + "1805155", + "1805271", + "1805524", + "1805535", + "1805537", + "1805540", + "1805549", + "1805682", + "1805691", + "1805717", + "1805806", + "1805938", + "1805955", + "1805982", + "1806064", + "1806075", + "1806145", + "1806170", + "1806176", + "1806690", + "1806702", + "1806704", + "1806737", + "1806740", + "1806814", + "1806871", + "1806872", + "1806878", + "1806887", + "1806936", + "1807271", + "1807273", + "1807473", + "1807477", + "1807478", + "1807479", + "1807480", + "1807483", + "1807485", + "1807488", + "1807491", + "1807503", + "1807553", + "1807569", + "1807634", + "1807881", + "1807969", + "1808088", + "1808145", + "1808161", + "1808172", + "1808180", + "1808195", + "1808221", + "1808232", + "1808236", + "1808286", + "1808359", + "1808381", + "1808440", + "1808450", + "1808559", + "1808590", + "1808592", + "1808752", + "1809019", + "1809066", + "1809115", + "1809127", + "1809135", + "1809158", + "1809159", + "1809210", + "1809244", + "1809248", + "1809294", + "1809299", + "1809305", + "1809308", + "1809348", + "1809381", + "1809387", + "1809491", + "1809499", + "1809585", + "1809594", + "1810025", + "1810099", + "1810121", + "1810145", + "1810172", + "1810464", + "1810469", + "1810743", + "1810752", + "1810846", + "1810851", + "1810867", + "1811019", + "1811026", + "1811079", + "1811081", + "1811122", + "1811439", + "1811455", + "1811462", + "1811465", + "1811686", + "1811814", + "1811948", + "1812026", + "1812105", + "1812207", + "1812262", + "1812394", + "1812437", + "1812453", + "1812465", + "1812500", + "1812573", + "1812658", + "1812881", + "1813010", + "1813114", + "1813248", + "1813263", + "1813413", + "1813415", + "1813460", + "1813468", + "1814182", + "1814323", + "1814336", + "1814338", + "1814357", + "1814359", + "1814365", + "1814538", + "1814552", + "1814630", + "1814653", + "1814665", + "1814800", + "1814823", + "1814827", + "1814838", + "1814843", + "1814863", + "1814877", + "1814913", + "1814928", + "1814971", + "1815260", + "1815315", + "1815338", + "1815856", + "1816029", + "1816065", + "1816110", + "1816138", + "1816264", + "1816276", + "1816292", + "1816299", + "1816362", + "1816434", + "1816570", + "1816634", + "1816648", + "1816673", + "1816775", + "1816881", + "1817065", + "1817086", + "1817160", + "1817171", + "1817217", + "1817696", + "1817727", + "1817729", + "1817732", + "1817734", + "1817797", + "1817808", + "1817810", + "1817852", + "1817854", + "1817864", + "1817940", + "1817973", + "1818216", + "1818413", + "1818454", + "1818463", + "1818659", + "1818991", + "1819057", + "1819128", + "1819145", + "1819170", + "1819268", + "1819270", + "1819280", + "1819337", + "1819362", + "1819668", + "1819685", + "1819699", + "1819852", + "1819873", + "1819928", + "1819970", + "1820039", + "1820118", + "1820137", + "1820275", + "1820282", + "1820352", + "1820372", + "1820406", + "1820414", + "1820435", + "1820450", + "1820451", + "1820458", + "1820477", + "1820478", + "1820565", + "1820573", + "1820711", + "1820714", + "1820722", + "1820753", + "1820791", + "1820888", + "1820940", + "1821051", + "1821105", + "1821113", + "1821448", + "1821455", + "1821464", + "1821468", + "1821478", + "1821505", + "1821542", + "1821547", + "1821651", + "1821856", + "1821863", + "1821911", + "1821920", + "1821934", + "1821940", + "1822017", + "1822141", + "1822142", + "1822257", + "1822346", + "1822487", + "1822493", + "1822587", + "1822610", + "1822613", + "1822784", + "1822787", + "1822788", + "1822796", + "1822805", + "1822819", + "1822830", + "1822848", + "1822916", + "1822917", + "1823294", + "1823444", + "1823493", + "1823573", + "1823604", + "1823706", + "1823726", + "1824080", + "1824113", + "1824117", + "1824121", + "1824131", + "1824242", + "1824259", + "1824280", + "1824330", + "1824338", + "1824354", + "1824390", + "1824442", + "1824449", + "1824571", + "1824751", + "1824845", + "1825064", + "1825077", + "1825082", + "1825083", + "1825156", + "1825176", + "1825218", + "1825238", + "1825373", + "1825391", + "1825428", + "1825430", + "1825539", + "1825786", + "1825950", + "1825956", + "1825967", + "1825971", + "1825983", + "1826022", + "1826033", + "1826048", + "1826058", + "1826084", + "1826108", + "1826129", + "1826156", + "1826163", + "1826164", + "1826167", + "1826169", + "1826172", + "1826173", + "1826175", + "1826181", + "1826222", + "1826772", + "1827103", + "1827112", + "1827113", + "1827125", + "1827132", + "1827133", + "1827161", + "1827349", + "1827408", + "1827429", + "1827484", + "1827507", + "1827645", + "1827650", + "1827687", + "1827711", + "1827716", + "1827775", + "1827802", + "1827810", + "1827826", + "1827829", + "1828105", + "1828162", + "1828268", + "1828310", + "1828317", + "1828395", + "1828400", + "1828402", + "1828455", + "1828456", + "1828471", + "1828491", + "1828540", + "1828543", + "1828544", + "1828637", + "1828826", + "1828976", + "1829021", + "1829029", + "1829287", + "1829322", + "1829363", + "1829533", + "1829588", + "1829612", + "1829659", + "1829703", + "1829776", + "1829785", + "1829823", + "1829866", + "1829974", + "1830031", + "1830099", + "1830122", + "1830125", + "1830131", + "1830137", + "1830147", + "1830152", + "1830191", + "1830203", + "1830207", + "1830241", + "1830243", + "1830262", + "1830266", + "1830271", + "1830284", + "1830372", + "1830374", + "1830380", + "1830407", + "1830408", + "1830410", + "1830419", + "1830435", + "1830437", + "1830442", + "1830457", + "1830459", + "1830498", + "1830632", + "1830669", + "1830681", + "1830802", + "1830812", + "1830838", + "1830843", + "1830879", + "1830937", + "1830962", + "1831002", + "1831009", + "1831097", + "1831136", + "1831168", + "1831458", + "1831473", + "1831499", + "1831508", + "1831565", + "1831631", + "1831643", + "1831667", + "1831752", + "1831775", + "1831780", + "1831861", + "1831999", + "1832235", + "1832254", + "1832518", + "1832533", + "1832553", + "1832569", + "1832612", + "1832649", + "1832853", + "1832915", + "1832927", + "1833475", + "1833477", + "1833497", + "1833499", + "1833500", + "1833518", + "1833523", + "1833525", + "1833531", + "1833539", + "1833562", + "1833600", + "1833626", + "1833627", + "1833653", + "1833782", + "1833794", + "1834078", + "1834428", + "1834497", + "1834524", + "1834547", + "1834589", + "1834710", + "1834793", + "1834850", + "1834980", + "1835031", + "1835082", + "1835086", + "1835121", + "1835128", + "1835156", + "1835348", + "1835393", + "1835396", + "1835407", + "1835430", + "1835432", + "1835433", + "1835436", + "1835438", + "1835449", + "1835451", + "1835456", + "1835457", + "1835467", + "1835500", + "1835555", + "1835609", + "1835612", + "1835790", + "1835814", + "1835819", + "1835821", + "1835848", + "1835862", + "1835908", + "1835928", + "1836871", + "1836899", + "1836906", + "1836907", + "1837053", + "1837159", + "1837172", + "1837343", + "1837420", + "1837429", + "1837464", + "1837515", + "1837569", + "1837646", + "1837706", + "1837724", + "1837726", + "1837727", + "1837857", + "1837870", + "1837894", + "1837900", + "1837968", + "1838058", + "1838065", + "1838071", + "1838084", + "1838224", + "1838251", + "1838255", + "1838276", + "1838289", + "1838297", + "1838304", + "1838308", + "1838331", + "1838333", + "1838360", + "1838465", + "1838512", + "1838584", + "1838626", + "1838633", + "1838635", + "1838641", + "1838649", + "1838691", + "1838811", + "1838838", + "1838905", + "1838911", + "1838958", + "1838960", + "1838969", + "1839094", + "1839293", + "1839296", + "1839317", + "1839323", + "1839325", + "1839333", + "1839396", + "1839560", + "1839604", + "1839625", + "1839658", + "1839714", + "1839721", + "1839851", + "1839878", + "1839893", + "1840260", + "1840297", + "1840301", + "1840311", + "1840345", + "1840346", + "1840360", + "1840371", + "1840379", + "1840380", + "1840408", + "1840441", + "1840448", + "1840478", + "1840483", + "1840520", + "1840543", + "1840553", + "1840555", + "1840566", + "1840570", + "1840581", + "1840592", + "1840596", + "1840656", + "1840726", + "1840774", + "1840776", + "1840812", + "1840844", + "1841081", + "1841084", + "1841091", + "1841158", + "1841159", + "1841183", + "1841188", + "1841219", + "1841221", + "1841261", + "1841296", + "1841302", + "1841460", + "1841476", + "1841616", + "1841706", + "1841782", + "1841813", + "1841946", + "1842097", + "1842124", + "1842196", + "1842446", + "1842485", + "1842542", + "1842690", + "1842695", + "1843313", + "1843326", + "1843331", + "1843370", + "1843444", + "1843485", + "1843564", + "1843602", + "1845270", + "1845271", + "1845314", + "1845329", + "1845335", + "1845368", + "1845385", + "1845442", + "1845448", + "1845455", + "1845502", + "1845503", + "1845513", + "1845547", + "1845565", + "1845574", + "1845586", + "1845604", + "1845605", + "1845607", + "1845616", + "1845793", + "1845866", + "1845952", + "1845962", + "1845965", + "1845982", + "1846035", + "1846052", + "1846099", + "1846103", + "1846107", + "1846111", + "1846112", + "1846133", + "1846141", + "1846149", + "1846159", + "1846190", + "1846219", + "1846229", + "1846236", + "1846259", + "1846261", + "1846313", + "1846351", + "1846374", + "1846439", + "1846505", + "1846604", + "1846657", + "1846715", + "1846729", + "1846849", + "1846858", + "1846860", + "1846916", + "1846941", + "1846945", + "1846971", + "1846992", + "1847059", + "1847061", + "1847064", + "1847066", + "1847068", + "1847097", + "1847111", + "1847149", + "1847157", + "1847249", + "1847260", + "1847274", + "1847308", + "1847343", + "1847392", + "1847407", + "1847426", + "1847484", + "1847498", + "1847572", + "1847639", + "1847641", + "1847919", + "1847930", + "1847944", + "1847956", + "1848114", + "1848150", + "1848202", + "1848212", + "1848219", + "1848272", + "1848273", + "1848274", + "1848295", + "1848312", + "1848322", + "1848325", + "1848356", + "1848378", + "1848426", + "1848490", + "1848596", + "1848610", + "1848636", + "1848639", + "1848669", + "1848690", + "1848713", + "1848714", + "1848717", + "1848730", + "1848741", + "1848864", + "1848868", + "1848920", + "1849007", + "1849010", + "1849104", + "1849267", + "1849273", + "1849284", + "1849294", + "1849457", + "1849470", + "1849477", + "1849630", + "1849656", + "1849856", + "1849897", + "1849924", + "1850008", + "1850042", + "1850076", + "1850106", + "1850156", + "1850184", + "1850225", + "1850238", + "1850246", + "1850279", + "1850321", + "1850335", + "1850386", + "1850394", + "1850450", + "1850463", + "1850497", + "1850506", + "1850522", + "1850533", + "1850538", + "1850570", + "1850575", + "1850585", + "1850597", + "1850640", + "1850673", + "1850690", + "1850722", + "1850729", + "1850764", + "1850771", + "1850773", + "1850774", + "1850781", + "1850798", + "1850868", + "1850908", + "1850922", + "1850923", + "1851000", + "1851002", + "1851010", + "1851011", + "1851039", + "1851203", + "1851213", + "1851220", + "1851237", + "1851243", + "1851300", + "1851337", + "1851347", + "1851453", + "1851462", + "1851543", + "1851555", + "1851670", + "1851714", + "1851845", + "1852150", + "1852159", + "1852165", + "1852177", + "1852320", + "1852382", + "1852430", + "1852751", + "1852787", + "1852831", + "1852832", + "1852901", + "1852956", + "1853064", + "1853190", + "1853242", + "1853312", + "1853578", + "1854019", + "1854021", + "1854143", + "1854202", + "1854237", + "1854249", + "1854259", + "1854287", + "1854347", + "1854615", + "1854792", + "1854824", + "1854849", + "1854906", + "1854920", + "1855241", + "1855358", + "1855452", + "1855630", + "1855747", + "1855799", + "1855804", + "1855807", + "1855813", + "1856005", + "1856105", + "1856289", + "1856348", + "1856368", + "1856384", + "1856394", + "1856503", + "1856516", + "1856555", + "1856581", + "1856595", + "1856620", + "1856663", + "1856668", + "1856691", + "1856701", + "1856730", + "1856768", + "1856772", + "1856867", + "1856891", + "1856893", + "1857020", + "1857143", + "1857180", + "1857213", + "1857233", + "1857258", + "1857295", + "1857315", + "1857385", + "1857410", + "1857577", + "1857581", + "1857626", + "1857690", + "1857785", + "1857809", + "1857828", + "1857829", + "1857840", + "1857856", + "1857863", + "1857878", + "1857882", + "1857900", + "1857918", + "1857924", + "1857935", + "1857938", + "1857948", + "1857973", + "1857978", + "1858074", + "1858100", + "1858113", + "1858163", + "1858283", + "1858404", + "1858411", + "1858523", + "1858526", + "1858531", + "1858557", + "1858615", + "1858637", + "1858659", + "1858660", + "1858674", + "1858698", + "1858706", + "1858718", + "1858762", + "1858775", + "1858778", + "1858873", + "1858930", + "1859046", + "1859061", + "1859100", + "1859161", + "1859177", + "1859285", + "1859287", + "1859305", + "1859453", + "1859471", + "1859480", + "1859488", + "1859534", + "1859932", + "1859952", + "1860026", + "1860063", + "1860108", + "1860118", + "1860184", + "1860259", + "1860261", + "1860274", + "1860408", + "1860443", + "1860621", + "1860628", + "1860659", + "1860664", + "1860668", + "1860671", + "1860688", + "1860711", + "1860736", + "1860765", + "1860768", + "1860857", + "1860974", + "1860979", + "1860983", + "1860987", + "1860989", + "1860993", + "1860994", + "1860996", + "1861011", + "1861030", + "1861031", + "1861395", + "1861433", + "1861451", + "1861456", + "1861457", + "1861458", + "1861479", + "1861488", + "1861494", + "1861510", + "1861544", + "1861559", + "1861584", + "1861592", + "1861604", + "1861644", + "1861663", + "1861665", + "1861673", + "1861697", + "1861705", + "1861714", + "1861721", + "1861759", + "1861773", + "1861783", + "1861784", + "1861797", + "1861823", + "1861834", + "1861836", + "1861851", + "1861862", + "1861887", + "1861892", + "1861893", + "1861933", + "1861937", + "1861938", + "1861949", + "1861951", + "1861953", + "1861958", + "1861967", + "1861975", + "1862008", + "1862026", + "1862033", + "1862044", + "1862046", + "1862047", + "1862049", + "1862066", + "1862078", + "1862083", + "1862087", + "1862088", + "1862091", + "1862094", + "1862096", + "1862123", + "1862129", + "1862163", + "1862181", + "1862198", + "1862293", + "1862311", + "1862331", + "1862363", + "1862370", + "1862394", + "1862401", + "1862403", + "1862414", + "1862430", + "1862433", + "1862434", + "1862441", + "1862449", + "1862454", + "1862468", + "1862475", + "1862481", + "1862516", + "1862517", + "1862521", + "1862526", + "1862547", + "1862551", + "1862569", + "1862572", + "1862578", + "1862580", + "1862595", + "1862624", + "1862658", + "1862692", + "1862701", + "1862719", + "1862757", + "1862765", + "1862774", + "1862805", + "1862837", + "1862841", + "1862894", + "1862916", + "1862917", + "1862923", + "1862928", + "1863021", + "1863025", + "1863034", + "1863051", + "1863075", + "1863080", + "1863088", + "1863109", + "1863143", + "1863282", + "1863354", + "1863366", + "1863405", + "1863407", + "1863412", + "1863416", + "1863426", + "1863467", + "1863584", + "1863640", + "1863646", + "1863699", + "1863701", + "1863706", + "1863714", + "1863724", + "1863732", + "1863734", + "1863735", + "1863742", + "1863757", + "1863829", + "1863848", + "1863856", + "1863858", + "1863864", + "1863880", + "1863944", + "1863955", + "1863978", + "1863982", + "1864004", + "1864008", + "1864021", + "1864058", + "1864070", + "1864090", + "1864103", + "1864106", + "1864126", + "1864135", + "1864156", + "1864161", + "1864164", + "1864204", + "1864316", + "1864320", + "1864321", + "1864329", + "1864352", + "1864358", + "1864377", + "1864576", + "1864652", + "1864793", + "1864796", + "1864897", + "1864905", + "1865102", + "1865107", + "1865108", + "1865120", + "1865132", + "1865295", + "1865299", + "1865319", + "1865328", + "1865333", + "1865341", + "1865345", + "1865347", + "1865353", + "1865555", + "1865571", + "1865572", + "1865578", + "1865590", + "1865650", + "1865659", + "1865660", + "1865666", + "1865668", + "1865671", + "1865709", + "1865764", + "1865827", + "1865837", + "1865839", + "1865842", + "1865853", + "1865856", + "1865862", + "1865869", + "1865930", + "1866006", + "1866085", + "1866105", + "1866123", + "1866162", + "1866164", + "1866214", + "1866237", + "1866249", + "1866252", + "1866262", + "1866311", + "1866330", + "1866336", + "1866338", + "1866341", + "1866356", + "1866421", + "1866491", + "1866549", + "1866550", + "1866556", + "1866568", + "1866570", + "1866573", + "1866601", + "1866838", + "1866902", + "1867009", + "1867014", + "1867021", + "1867022", + "1867029", + "1867032", + "1867037", + "1867218", + "1867224", + "1867295", + "1867312", + "1867426", + "1867515", + "1867525", + "1867535", + "1867552", + "1867673", + "1867722", + "1867751", + "1867773", + "1867788", + "1867820", + "1867928", + "1867991", + "1867993", + "1868014", + "1868025", + "1868060", + "1868211", + "1868334", + "1868360", + "1868409", + "1868428", + "1868470", + "1868499", + "1868527", + "1868535", + "1868837", + "1868884", + "1868952", + "1869043", + "1869057", + "1869178", + "1869238", + "1869359", + "1869363", + "1869478", + "1869489", + "1869512", + "1869595", + "1869656", + "1869666", + "1869706", + "1869707", + "1869714", + "1869803", + "1869825", + "1869852", + "1869976", + "1870037", + "1870202", + "1870237", + "1870249", + "1870250", + "1870267", + "1870308", + "1870415", + "1870426", + "1870450", + "1870452", + "1870459", + "1870506", + "1870509", + "1870703", + "1870721", + "1870727", + "1870733", + "1870751", + "1870777", + "1870988", + "1871175", + "1871212", + "1871217", + "1871252", + "1871379", + "1871407", + "1871414", + "1871419", + "1871451", + "1871457", + "1871504", + "1871597", + "1871630", + "1871683", + "1871698", + "1871754", + "1871763", + "1871783", + "1871826", + "1871890", + "1871923", + "1871940", + "1871988", + "1872169", + "1872210", + "1872255", + "1872315", + "1872359", + "1872361", + "1872368", + "1872452", + "1872456", + "1872466", + "1872470", + "1872514", + "1872515", + "1872735", + "1872848", + "1872850", + "1872873", + "1872901", + "1873048", + "1873051", + "1873079", + "1873215", + "1873267", + "1873285", + "1873290", + "1873291", + "1873319", + "1873373", + "1873376", + "1873381", + "1873384", + "1873398", + "1873411", + "1873417", + "1873585", + "1873620", + "1873697", + "1873753", + "1873773", + "1873776", + "1873780", + "1873783", + "1873843", + "1874146", + "1874158", + "1874160", + "1874168", + "1874179", + "1874192", + "1874204", + "1874211", + "1874229", + "1874248", + "1874257", + "1874269", + "1874274", + "1874280", + "1874317", + "1874375", + "1874552", + "1874743", + "1874937", + "1875008", + "1875120", + "1875319", + "1875327", + "1875407", + "1875409", + "1875451", + "1875478", + "1875483", + "1875485", + "1875534", + "1875554", + "1875584", + "1875606", + "1875607", + "1875631", + "1875633", + "1875682", + "1875687", + "1875827", + "1875844", + "1875865", + "1875869", + "1875885", + "1875914", + "1875918", + "1875958", + "1876168", + "1876329", + "1876409", + "1876479", + "1876512", + "1876542", + "1876548", + "1876549", + "1876592", + "1876623", + "1876665", + "1876854", + "1876922", + "1876955", + "1876987", + "1877002", + "1877038", + "1877282", + "1877310", + "1877321", + "1877338", + "1877341", + "1877345", + "1877353", + "1877364", + "1877365", + "1877368", + "1877372", + "1877406", + "1877443", + "1877453", + "1877492", + "1877498", + "1877537", + "1877788", + "1877940", + "1877941", + "1877975", + "1877986", + "1877988", + "1877995", + "1878067", + "1878158", + "1878173", + "1878197", + "1878350", + "1878370", + "1878392", + "1878406", + "1878470", + "1878471", + "1878490", + "1878500", + "1878586", + "1878626", + "1878656", + "1878705", + "1878744", + "1878751", + "1878753", + "1878782", + "1878789", + "1878804", + "1878810", + "1878826", + "1878837", + "1878862", + "1878879", + "1878895", + "1878904", + "1878907", + "1878937", + "1878939", + "1878951", + "1878958", + "1879001", + "1879125", + "1879141", + "1879227", + "1879252", + "1879253", + "1879272", + "1879274", + "1879339", + "1879340", + "1879379", + "1879398", + "1879405", + "1879408", + "1879413", + "1879443", + "1879452", + "1879465", + "1879471", + "1879490", + "1879534", + "1879630", + "1879655", + "1879691", + "1879703", + "1879731", + "1879735", + "1879765", + "1879939", + "1879970", + "1879975", + "1880011", + "1880013", + "1880019", + "1880025", + "1880040", + "1880044", + "1880049", + "1880064", + "1880078", + "1880083", + "1880094", + "1880104", + "1880123", + "1880132", + "1880133", + "1880138", + "1880139", + "1880140", + "1880143", + "1880156", + "1880286", + "1880305", + "1880310", + "1880316", + "1880318", + "1880321", + "1880350", + "1880352", + "1880353", + "1880379", + "1880381", + "1880408", + "1880411", + "1880439", + "1880451", + "1880464", + "1880465", + "1880505", + "1880537", + "1880623", + "1880852", + "1880858", + "1880865", + "1880907", + "1880931", + "1880968", + "1880982", + "1881018", + "1881019", + "1881031", + "1881041", + "1881079", + "1881089", + "1881094", + "1881111", + "1881122", + "1881126", + "1881132", + "1881151", + "1881157", + "1881166", + "1881170", + "1881208", + "1881293", + "1881303", + "1881320", + "1881329", + "1881336", + "1881340", + "1881362", + "1881393", + "1881404", + "1881418", + "1881424", + "1881485", + "1881504", + "1881515", + "1881603", + "1881767", + "1881822", + "1881834", + "1881955", + "1881964", + "1882021", + "1882089", + "1882110", + "1882158", + "1882165", + "1882190", + "1882195", + "1882210", + "1882215", + "1882253", + "1882266", + "1882272", + "1882297", + "1882316", + "1882355", + "1882437", + "1882459", + "1882557", + "1882729", + "1882753", + "1882767", + "1882771", + "1882773", + "1882785", + "1882786", + "1882812", + "1882816", + "1882818", + "1882884", + "1882901", + "1882905", + "1882927", + "1882930", + "1882941", + "1882959", + "1882960", + "1882965", + "1882977", + "1882979", + "1883020", + "1883024", + "1883028", + "1883067", + "1883124", + "1883161", + "1883386", + "1883458", + "1883634", + "1883829", + "1883873", + "1883881", + "1883885", + "1883897", + "1883943", + "1883951", + "1883968", + "1883975", + "1883993", + "1884001", + "1884051", + "1884212", + "1884213", + "1884228", + "1884229", + "1884240", + "1884254", + "1884255", + "1884273", + "1884274", + "1884280", + "1884326", + "1884332", + "1884337", + "1884370", + "1884403", + "1884428", + "1884434", + "1884435", + "1884437", + "1884439", + "1884449", + "1884453", + "1884461", + "1884464", + "1884465", + "1884479", + "1884503", + "1884531", + "1884539", + "1884595", + "1884607", + "1884685", + "1884703", + "1884774", + "1884816", + "1884844", + "1884858", + "1884877", + "1884890", + "1884908", + "1884909", + "1884923", + "1884936", + "1884970", + "1884997", + "1885001", + "1885012", + "1885099", + "1885158", + "1885202", + "1885229", + "1885262", + "1885263", + "1885569", + "1885605", + "1885623", + "1885630", + "1885642", + "1885702", + "1885745", + "1885763", + "1885764", + "1885826", + "1885836", + "1885919", + "1885931", + "1885937", + "1885945", + "1885950", + "1885994", + "1886015", + "1886084", + "1886104", + "1886123", + "1886207", + "1886251", + "1886262", + "1886292", + "1886320", + "1886362", + "1886374", + "1886378", + "1886400", + "1886419", + "1886490", + "1886501", + "1886526", + "1886579", + "1886583", + "1886587", + "1886648", + "1886650", + "1886700", + "1886720", + "1886726", + "1886729", + "1886906", + "1886929", + "1886935", + "1887004", + "1887024", + "1887031", + "1887054", + "1887108", + "1887119", + "1887122", + "1887125", + "1887173", + "1887177", + "1887178", + "1887285", + "1887290", + "1887309", + "1887341", + "1887459", + "1887462", + "1887509", + "1887565", + "1887580", + "1887585", + "1887586", + "1887634", + "1887686", + "1887691", + "1887694", + "1887701", + "1888009", + "1888027", + "1888047", + "1888092", + "1888123", + "1888292", + "1888306", + "1888307", + "1888324", + "1888336", + "1888338", + "1888346", + "1888410", + "1888435", + "1888454", + "1888463", + "1888484", + "1888537", + "1888579", + "1888619", + "1888623", + "1888638", + "1888646", + "1888695", + "1888733", + "1888736", + "1888743", + "1888759", + "1888823", + "1888826", + "1888891", + "1888893", + "1888906", + "1888913", + "1888915", + "1888926", + "1888955", + "1888958", + "1889039", + "1889053", + "1889071", + "1889074", + "1889239", + "1889242", + "1889249", + "1889272", + "1889277", + "1889287", + "1889356", + "1889358", + "1889370", + "1889381", + "1889536", + "1889543", + "1889563", + "1889721", + "1889745", + "1889765", + "1889769", + "1889828", + "1889833", + "1889838", + "1889850", + "1889870", + "1889905", + "1889939", + "1889942", + "1890031", + "1890056", + "1890065", + "1890089", + "1890097", + "1890187", + "1890247", + "1890287", + "1890320", + "1890335", + "1890343", + "1890346", + "1890374", + "1890404", + "1890410", + "1890417", + "1890487", + "1890491", + "1890508", + "1890512", + "1890520", + "1890522", + "1890534", + "1890540", + "1890560", + "1890576", + "1890622", + "1890629", + "1890654", + "1890656", + "1890670", + "1890679", + "1890699", + "1890703", + "1890724", + "1890730", + "1890737", + "1890772", + "1890776", + "1890783", + "1890794", + "1890800", + "1890802", + "1890854", + "1890876", + "1890885", + "1890898", + "1890936", + "1890957", + "1890975", + "1891013", + "1891035", + "1891048", + "1891059", + "1891074", + "1891129", + "1891167", + "1891171", + "1891190", + "1891217", + "1891236", + "1891299", + "1891308", + "1891326", + "1891366", + "1891386", + "1891426", + "1891453", + "1891473", + "1891488", + "1891493", + "1891494", + "1891583", + "1891636", + "1891755", + "1891758", + "1891889", + "1891932", + "1891936", + "1892131", + "1892153", + "1892193", + "1892242", + "1892245", + "1892301", + "1892302", + "1892311", + "1892320", + "1892355", + "1892420", + "1892427", + "1892433", + "1892456", + "1892458", + "1892462", + "1892476", + "1892477", + "1892488", + "1892509", + "1892544", + "1892554", + "1892555", + "1892621", + "1892634", + "1892729", + "1892736", + "1892742", + "1892746", + "1892759", + "1892761", + "1892770", + "1892811", + "1892814", + "1892821", + "1892837", + "1892851", + "1892856", + "1892858", + "1892863", + "1892944", + "1893137", + "1893177", + "1893204", + "1893241", + "1893266", + "1893329", + "1893381", + "1893480", + "1893538", + "1893546", + "1893551", + "1893558", + "1893562", + "1893612", + "1893645", + "1893660", + "1893663", + "1893699", + "1893787", + "1893793", + "1893901", + "1893921", + "1893923", + "1893951", + "1893989", + "1893993", + "1894002", + "1894012", + "1894057", + "1894074", + "1894085", + "1894087", + "1894088", + "1894102", + "1894164", + "1894268", + "1894293", + "1894298", + "1894329", + "1894342", + "1894349", + "1894714", + "1894840", + "1894896", + "1895037", + "1895138", + "1895159", + "1895176", + "1895185", + "1895203", + "1895250", + "1895448", + "1895499", + "1895527", + "1895609", + "1895667", + "1895670", + "1895709", + "1895733", + "1895768", + "1895773", + "1895789", + "1895809", + "1895820", + "1895838", + "1895867", + "1895875", + "1895886", + "1895904", + "1895956", + "1895984", + "1895992", + "1896073", + "1896087", + "1896105", + "1896126", + "1896141", + "1896142", + "1896152", + "1896304", + "1896316", + "1896600", + "1896603", + "1896614", + "1896628", + "1896658", + "1896749", + "1896754", + "1896756", + "1896763", + "1896774", + "1896841", + "1896876", + "1896922", + "1896932", + "1896957", + "1897664", + "1897677", + "1897685", + "1897692", + "1897747", + "1897770", + "1897808", + "1897814", + "1897817", + "1897834", + "1897852", + "1897873", + "1897904", + "1897965", + "1897970", + "1897972", + "1897977", + "1897980", + "1897990", + "1898002", + "1898017", + "1898077", + "1898133", + "1898143", + "1898174", + "1898200", + "1898203", + "1898286", + "1898290", + "1898348", + "1898350", + "1898352", + "1898358", + "1898367", + "1898368", + "1898370", + "1898374", + "1898391", + "1898402", + "1898414", + "1898416", + "1898424", + "1898431", + "1898434", + "1898441", + "1898521", + "1898544", + "1898686", + "1898789", + "1898848", + "1898858", + "1898865", + "1898946", + "1898970", + "1898988", + "1899048", + "1899071", + "1899187", + "1899198", + "1899349", + "1899433", + "1899818", + "1899873", + "1899893", + "1899931", + "1899932", + "1899940", + "1899943", + "1899947", + "1899950", + "1899956", + "1899989", + "1899994", + "1900024", + "1900026", + "1900053", + "1900093", + "1900112", + "1900121", + "1900131", + "1900134", + "1900172", + "1900175", + "1900197", + "1900199", + "1900233", + "1900249", + "1900295", + "1900303", + "1900345", + "1900408", + "1900485", + "1900523", + "1900565", + "1900578", + "1900618", + "1900626", + "1900632", + "1900768", + "1900787", + "1900825", + "1900830", + "1900872", + "1900890", + "1900897", + "1900918", + "1900939", + "1901001", + "1901153", + "1901189", + "1901213", + "1901257", + "1901261", + "1901268", + "1901399", + "1901404", + "1901411", + "1901427", + "1901428", + "1901429", + "1901435", + "1901463", + "1901533", + "1901580", + "1901669", + "1901735", + "1901744", + "1901782", + "1901801", + "1901810", + "1901832", + "1901850", + "1902106", + "1902108", + "1902110", + "1902111", + "1902114", + "1902117", + "1902169", + "1902175", + "1902182", + "1902211", + "1902233", + "1902244", + "1902248", + "1902300", + "1902378", + "1902384", + "1902406", + "1902430", + "1902451", + "1902458", + "1902479", + "1902502", + "1902533", + "1902543", + "1902560", + "1902572", + "1902586", + "1902615", + "1902623", + "1902642", + "1902660", + "1902670", + "1902676", + "1902692", + "1902699", + "1902702", + "1902703", + "1902704", + "1902749", + "1902814", + "1902880", + "1902882", + "1903009", + "1903598", + "1903607", + "1903634", + "1903636", + "1903646", + "1903683", + "1904272", + "1904281", + "1904382", + "1904701", + "1904719", + "1904728", + "1904764", + "1904798", + "1904884", + "1904887", + "1904888", + "1904916", + "1904938", + "1904943", + "1904948", + "1904996", + "1905079", + "1905142", + "1905161", + "1905162", + "1905172", + "1905187", + "1905189", + "1905242", + "1905257", + "1905267", + "1905281", + "1905297", + "1905299", + "1905301", + "1905317", + "1905383", + "1905451", + "1906006", + "1906014", + "1906030", + "1906117", + "1906552", + "1906604", + "1906621", + "1906679", + "1906715", + "1907153", + "1907190", + "1907235", + "1907250", + "1907272", + "1907395", + "1907430", + "1907432", + "1907475", + "1907498", + "1907534", + "1907620", + "1907625", + "1907637", + "1907666", + "1907672", + "1907683", + "1907687", + "1907727", + "1908011", + "1908044", + "1908052", + "1908055", + "1908108", + "1908123", + "1908146", + "1908148", + "1908150", + "1908168", + "1908199", + "1908203", + "1908204", + "1908207", + "1908256", + "1908258", + "1908299", + "1908302", + "1908317", + "1908337", + "1908352", + "1908356", + "1908367", + "1908577", + "1908660", + "1908700", + "1908702", + "1908707", + "1908713", + "1908775", + "1908840", + "1908871", + "1908929", + "1908953", + "1908995", + "1909019", + "1909039", + "1909064", + "1909070", + "1909123", + "1909128", + "1909135", + "1909155", + "1909170", + "1909185", + "1909191", + "1909209", + "1909211", + "1909213", + "1909216", + "1909281", + "1909319", + "1909398", + "1909436", + "1909453", + "1909457", + "1909489", + "1909532", + "1909573", + "1909607", + "1909649", + "1909659", + "1909736", + "1909800", + "1909810", + "1909838", + "1909865", + "1909879", + "1909884", + "1910371", + "1910496", + "1910628", + "1910629", + "1910648", + "1910662", + "1910663", + "1910706", + "1910753", + "1910773", + "1910809", + "1911076", + "1911077", + "1911093", + "1911112", + "1911122", + "1911168", + "1911178", + "1911182", + "1911246", + "1911278", + "1911298", + "1911461", + "1911503", + "1911577", + "1911633", + "1911736", + "1911755", + "1911939", + "1911966", + "1912003", + "1912036", + "1912119", + "1912325", + "1912372", + "1912395", + "1912428", + "1912470", + "1912506", + "1913091", + "1913105", + "1913175", + "1913178", + "1913328", + "1913351", + "1914410", + "1914416", + "1914421", + "1914424", + "1914435", + "1914439", + "1914440", + "1914442", + "1914458", + "1914464", + "1914465", + "1914477", + "1914484", + "1914496", + "1914500", + "1914501", + "1914511", + "1914693", + "1914697", + "1914701", + "1914708", + "1915031", + "1915079", + "1915080", + "1915110", + "1915144", + "1915160", + "1915193", + "1915262", + "1915270", + "1915275", + "1915325", + "1915339", + "1915368", + "1915369", + "1915396", + "1915417", + "1915430", + "1915456", + "1915469", + "1915470", + "1915487", + "1915492", + "1915499", + "1915506", + "1916347", + "1916352", + "1916376", + "1916410", + "1916412", + "1916458", + "1916509", + "1916554", + "1916700", + "1916758", + "1916772", + "1916790", + "1917827", + "1917830", + "1917834", + "1917840", + "1918026", + "1918076", + "1918077", + "1918078", + "1918082", + "1918094", + "1918097", + "1918133", + "1918212", + "1918220", + "1918263", + "1918269", + "1918280", + "1918293", + "1918321", + "1918394", + "1918395", + "1918406", + "1918408", + "1918411", + "1918467", + "1918495", + "1918497", + "1918509", + "1918517", + "1918532", + "1918533", + "1918547", + "1918553", + "1918554", + "1918584", + "1918596", + "1918627", + "1918632", + "1918667", + "1918669", + "1918688", + "1918694", + "1918736", + "1918776", + "1918789", + "1918795", + "1918843", + "1918854", + "1918859", + "1918868", + "1918964", + "1918968", + "1918972", + "1918984", + "1918986", + "1918988", + "1919010", + "1919125", + "1919128", + "1919129", + "1919130", + "1919145", + "1919146", + "1919149", + "1919151", + "1919160", + "1919173", + "1919176", + "1919181", + "1919194", + "1919210", + "1919213", + "1919214", + "1919223", + "1919233", + "1919235", + "1919239", + "1919245", + "1919277", + "1919282", + "1919287", + "1919289", + "1919316", + "1919317", + "1919320", + "1919326", + "1919327", + "1919328", + "1919330", + "1919333", + "1919338", + "1919340", + "1919342", + "1919344", + "1919346", + "1919348", + "1919381", + "1919412", + "1919419", + "1919421", + "1919432", + "1919438", + "1919444", + "1919534", + "1919540", + "1919551", + "1919564", + "1919589", + "1919626", + "1919635", + "1919646", + "1919649", + "1919652", + "1919653", + "1919656", + "1919660", + "1919663", + "1919665", + "1919698", + "1919700", + "1919701", + "1919702", + "1919705", + "1919711", + "1919712", + "1919716", + "1919719", + "1919720", + "1919728", + "1919731", + "1919741", + "1919744", + "1919756", + "1919924", + "1919929", + "1919930", + "1919937", + "1919939", + "1919943", + "1919945", + "1919947", + "1919949", + "1919951", + "1919966", + "1920181", + "1920192", + "1920218", + "1920237", + "1920247", + "1920258", + "1920259", + "1920275", + "1920348", + "1920349", + "1920353", + "1920356", + "1920357", + "1920362", + "1920363", + "1920369", + "1920370", + "1920374", + "1920378", + "1920381", + "1920390", + "1920395", + "1920401", + "1920405", + "1920426", + "1920431", + "1920437", + "1920454", + "1920463", + "1920467", + "1920469", + "1920491", + "1920494", + "1920496", + "1920502", + "1920506", + "1920509", + "1920512", + "1920515", + "1920534", + "1920535", + "1920541", + "1920552", + "1920571", + "1920574", + "1920581", + "1920621", + "1920691", + "1920709", + "1920712", + "1920718", + "1920786", + "1920795", + "1920803", + "1920809", + "1920810", + "1920815", + "1920816", + "1920844", + "1920851", + "1920864", + "1920889", + "1920892", + "1920900", + "1920923", + "1920957", + "1920996", + "1921009", + "1921010", + "1921021", + "1921044", + "1921053", + "1921055", + "1921064", + "1921092", + "1921093", + "1921123", + "1921150", + "1921163", + "1921239", + "1921240", + "1921247", + "1921248", + "1921255", + "1921262", + "1921263", + "1921300", + "1921466", + "1921521", + "1921590", + "1921633", + "1921650", + "1921910", + "1921992", + "1921993", + "1922038", + "1922039", + "1922041", + "1922044", + "1922049", + "1922057", + "1922064", + "1922085", + "1922111", + "1922143", + "1922163", + "1922197", + "1922219", + "1922223", + "1922244", + "1922285", + "1922288", + "1922291", + "1922311", + "1922343", + "1922455", + "1922468", + "1922572", + "1922584", + "1922637", + "1922676", + "1922679", + "1922694", + "1922701", + "1922739", + "1922745", + "1922851", + "1922865", + "1922867", + "1922868", + "1922889", + "1922890", + "1922937", + "1922994", + "1923019", + "1923465", + "1923473", + "1923491", + "1923498", + "1923505", + "1923525", + "1923649", + "1923650", + "1923651", + "1923668", + "1923679", + "1923744", + "1923796", + "1923809", + "1923883", + "1923917", + "1923997", + "1924044", + "1924050", + "1924057", + "1924077", + "1924082", + "1924097", + "1924106", + "1924176", + "1924193", + "1924223", + "1924232", + "1924298", + "1924323", + "1924362", + "1924390", + "1924392", + "1924417", + "1924429", + "1924458", + "1924494", + "1924513", + "1924518", + "1924521", + "1924558", + "1924713", + "1924754", + "1924770", + "1924867", + "1925221", + "1925233", + "1925381", + "1925410", + "1925429", + "1925454", + "1925458", + "1925498", + "1925500", + "1925501", + "1925509", + "1925515", + "1925543", + "1925555", + "1925609", + "1925615", + "1925628", + "1925676", + "1925694", + "1925711", + "1925731", + "1925743", + "1925877", + "1925918", + "1925922", + "1925962", + "1926001", + "1926009", + "1926054", + "1926166", + "1926260", + "1926324", + "1926385", + "1926436", + "1926437", + "1926446", + "1926448", + "1926456", + "1926460", + "1926530", + "1926531", + "1926539", + "1926546", + "1926550", + "1926574", + "1926593", + "1926611", + "1926800", + "1926817", + "1926823", + "1926834", + "1926861", + "1927034", + "1927217", + "1927242", + "1927272", + "1927274", + "1927284", + "1927301", + "1927313", + "1927348", + "1927393", + "1927707", + "1927894", + "1927895", + "1927897", + "1927900", + "1927909", + "1927943", + "1927979", + "1927988", + "1927992", + "1927996", + "1928009", + "1928018", + "1928070", + "1928076", + "1928214", + "1928215", + "1928248", + "1928349", + "1928361", + "1928376", + "1928419", + "1928584", + "1928628", + "1928746", + "1928829", + "1928849", + "1928908", + "1928915", + "1928945", + "1928960", + "1929046", + "1929049", + "1929059", + "1929129", + "1929270", + "1929659", + "1929697", + "1929772", + "1929962", + "1929966", + "1930079", + "1930110", + "1930167", + "1930178", + "1930179", + "1930181", + "1930183", + "1930263", + "1930270", + "1930288", + "1930289", + "1930331", + "1930361", + "1930391", + "1930422", + "1930563", + "1930581", + "1930621", + "1930653", + "1930660", + "1930678", + "1930728", + "1930772", + "1930779", + "1930830", + "1930832", + "1930904", + "1930916", + "1930923", + "1930931", + "1930935", + "1930954", + "1930968", + "1931046", + "1931109", + "1931116", + "1931119", + "1931122", + "1931126", + "1931148", + "1931179", + "1931189", + "1931310", + "1931403", + "1931437", + "1931553", + "1931561", + "1931655", + "1931656", + "1931706", + "1931779", + "1931784", + "1931787", + "1931788", + "1931889", + "1931906", + "1931908", + "1931943", + "1931956", + "1931958", + "1931997", + "1932020", + "1932043", + "1932056", + "1932159", + "1932166", + "1932172", + "1932175", + "1932189", + "1932206", + "1932246", + "1932273", + "1932287", + "1932302", + "1932332", + "1932354", + "1932386", + "1932393", + "1932406", + "1932411", + "1932414", + "1932417", + "1932428", + "1932473", + "1932517", + "1932551", + "1932563", + "1932576", + "1932580", + "1932607", + "1932629", + "1932751", + "1932752", + "1932753", + "1932812", + "1932814", + "1932863", + "1932879", + "1932908", + "1932960", + "1932976", + "1933028", + "1933044", + "1933084", + "1933095", + "1933126", + "1933138", + "1933163", + "1933204", + "1933260", + "1933583", + "1933647", + "1933649", + "1933679", + "1933793", + "1933844", + "1933845", + "1933998", + "1934172", + "1934187", + "1934192", + "1934211", + "1934213", + "1934221", + "1934331", + "1934447", + "1934570", + "1934693", + "1934715", + "1934991", + "1935078", + "1935295", + "1935301", + "1935343", + "1935346", + "1935350", + "1935363", + "1935372", + "1935377", + "1935405", + "1935408", + "1935410", + "1935454", + "1935459", + "1935498", + "1935614", + "1935838", + "1935849", + "1935869", + "1935872", + "1935888", + "1935899", + "1935901", + "1935904", + "1935912", + "1935916", + "1935925", + "1935931", + "1935935", + "1936026", + "1936161", + "1936233", + "1936312", + "1936378", + "1936388", + "1936391", + "1936565", + "1936566", + "1936649", + "1936810", + "1936969", + "1936988", + "1936993", + "1937011", + "1937055", + "1937064", + "1937090", + "1937109", + "1937110", + "1937124", + "1937129", + "1937136", + "1937144", + "1937155", + "1937162", + "1937165", + "1937167", + "1937444", + "1937474", + "1937490", + "1937514", + "1937527", + "1937530", + "1937540", + "1937556", + "1937566", + "1937570", + "1937582", + "1937594", + "1937613", + "1937618", + "1937642", + "1937655", + "1937665", + "1937667", + "1937688", + "1937691", + "1937698", + "1937699", + "1937702", + "1937707", + "1937712", + "1937722", + "1937723", + "1937739", + "1937751", + "1937754", + "1937758", + "1937769", + "1937792", + "1937793", + "1937803", + "1937816", + "1937819", + "1937826", + "1937846", + "1937847", + "1937849", + "1937885", + "1937892", + "1937911", + "1937931", + "1937937", + "1937959", + "1937966", + "1937974", + "1937975", + "1937988", + "1938007", + "1938016", + "1938022", + "1938029", + "1938050", + "1938052", + "1938058", + "1938059", + "1938069", + "1938074", + "1938081", + "1938088", + "1938104", + "1938112", + "1938114", + "1938122", + "1938125", + "1938129", + "1938131", + "1938147", + "1938148", + "1938159", + "1938162", + "1938166", + "1938168", + "1938214", + "1938226", + "1938230", + "1938233", + "1938300", + "1938446", + "1938520", + "1938612", + "1938796", + "1938810", + "1938955", + "1938975", + "1939056", + "1939086", + "1939130", + "1939131", + "1939134", + "1939136", + "1939156", + "1939168", + "1939180", + "1939215", + "1939225", + "1939314", + "1939336", + "1939432", + "1939510", + "1939520", + "1939597", + "1939647", + "1939658", + "1939677", + "1939688", + "1939717", + "1939833", + "1939879", + "1939962", + "1939964", + "1940110", + "1940158", + "1940504", + "1940510", + "1940517", + "1940546", + "1940575", + "1940604", + "1940609", + "1940639", + "1940644", + "1940694", + "1940717", + "1940744", + "1940757", + "1940768", + "1940807", + "1940838", + "1941266", + "1941294", + "1941299", + "1941310", + "1941330", + "1941377", + "1941437", + "1941570", + "1941683", + "1941713", + "1941717", + "1941719", + "1941864", + "1942060", + "1942067", + "1942141", + "1942170", + "1942171", + "1942244", + "1942251", + "1942341", + "1942370", + "1942378", + "1942383", + "1942416", + "1942455", + "1942509", + "1942522", + "1942558", + "1942618", + "1942621", + "1942623", + "1942636", + "1942641", + "1942670", + "1942674", + "1942697", + "1942762", + "1942769", + "1942790", + "1942793", + "1942808", + "1942854", + "1942945", + "1942947", + "1942964", + "1942967", + "1942971", + "1942980", + "1942982", + "1942994", + "1943054", + "1943066", + "1943089", + "1943090", + "1943096", + "1943101", + "1943212", + "1943223", + "1943236", + "1943250", + "1943308", + "1943397", + "1943475", + "1943505", + "1943519", + "1943563", + "1943571", + "1943573", + "1943588", + "1943619", + "1943631", + "1943655", + "1943757", + "1943824", + "1943830", + "1943901", + "1943936", + "1943942", + "1943953", + "1943954", + "1943960", + "1943962", + "1943964", + "1943990", + "1944004", + "1944106", + "1944113", + "1944234", + "1944273", + "1944283", + "1944286", + "1944314", + "1944324", + "1944329", + "1944335", + "1944343", + "1944361", + "1944374", + "1944421", + "1944456", + "1944462", + "1944483", + "1944503", + "1944504", + "1944520", + "1944521", + "1944523", + "1944574", + "1944591", + "1944618", + "1944627", + "1944629", + "1944631", + "1944635", + "1944638", + "1944769", + "1944778", + "1944815", + "1944832", + "1944910", + "1944977", + "1945066", + "1945081", + "1945088", + "1945122", + "1945137", + "1945143", + "1945173", + "1945225", + "1945227", + "1945270", + "1945274", + "1945286", + "1945302", + "1945312", + "1945374", + "1945396", + "1945462", + "1945476", + "1945477", + "1945569", + "1945571", + "1945605", + "1945694", + "1945710", + "1945715", + "1945738", + "1945742", + "1945748", + "1945786", + "1945814", + "1945837", + "1945856", + "1945863", + "1945874", + "1945877", + "1945878", + "1945893", + "1945957", + "1946019", + "1946037", + "1946051", + "1946058", + "1946067", + "1946074", + "1946078", + "1946079", + "1946097", + "1946163", + "1946167", + "1946177", + "1946310", + "1946327", + "1946333", + "1946432", + "1946469", + "1946495", + "1946500", + "1946520", + "1946544", + "1946550", + "1946577", + "1946610", + "1946612", + "1946618", + "1946628", + "1946661", + "1946695", + "1946720", + "1946731", + "1946737", + "1946738", + "1946756", + "1946763", + "1946810", + "1946853", + "1946865", + "1946901", + "1946916", + "1946917", + "1946980", + "1946981", + "1946983", + "1946989", + "1946995", + "1946999", + "1947021", + "1947037", + "1947049", + "1947055", + "1947112", + "1947113", + "1947117", + "1947282", + "1947306", + "1947333", + "1947335", + "1947385", + "1947409", + "1947446", + "1947449", + "1947456", + "1947459", + "1947491", + "1947492", + "1947506", + "1947507", + "1947568", + "1947577", + "1947587", + "1947588", + "1947597", + "1947626", + "1947661", + "1947673", + "1947703", + "1947727", + "1947740", + "1947745", + "1947765", + "1947842", + "1947846", + "1947890", + "1947915", + "1947973", + "1947976", + "1947980", + "1948054", + "1948061", + "1948073", + "1948088", + "1948371", + "1948439", + "1948446", + "1948464", + "1948465", + "1948521", + "1948771", + "1948774", + "1948779", + "1948789", + "1948799", + "1948800", + "1948802", + "1948803", + "1948804", + "1948809", + "1948810", + "1948826", + "1948861", + "1948865", + "1948883", + "1948890", + "1948941", + "1948947", + "1948994", + "1949008", + "1949049", + "1949219", + "1949285", + "1949322", + "1949331", + "1949336", + "1949366", + "1949404", + "1949449", + "1949451", + "1949466", + "1949492", + "1949512", + "1949515", + "1949544", + "1949549", + "1949592", + "1949621", + "1949687", + "1949697", + "1949715", + "1949784", + "1949794", + "1949850", + "1949852", + "1949877", + "1949929", + "1949938", + "1949954", + "1950006", + "1950013", + "1950017", + "1950019", + "1950024", + "1950044", + "1950047", + "1950052", + "1950133", + "1950156", + "1950169", + "1950171", + "1950197", + "1950272", + "1950302", + "1950362", + "1950396", + "1950408", + "1950409", + "1950521", + "1950533", + "1950567", + "1950578", + "1950591", + "1950654", + "1950877", + "1950879", + "1950936", + "1951097", + "1951103", + "1951116", + "1951121", + "1951125", + "1951133", + "1951157", + "1951170", + "1951217", + "1951218", + "1951340", + "1951370", + "1951412", + "1951448", + "1951462", + "1951492", + "1951507", + "1951522", + "1951529", + "1951542", + "1951557", + "1951649", + "1951657", + "1951660", + "1951671", + "1951675", + "1951713", + "1951725", + "1951747", + "1951784", + "1951840", + "1951844", + "1951881", + "1952014", + "1952032", + "1952034", + "1952043", + "1952062", + "1952093", + "1952130", + "1952147", + "1952175", + "1952177", + "1952229", + "1952281", + "1952449", + "1952481", + "1952532", + "1952551", + "1952611", + "1952685", + "1952730", + "1952806", + "1952812", + "1952816", + "1952857", + "1952878", + "1952883", + "1952909", + "1953124", + "1953192", + "1953196", + "1953217", + "1953407", + "1953423", + "1953998", + "1954037", + "1954084", + "1954120", + "1954236", + "1954338", + "1954344", + "1954346", + "1954351", + "1954353", + "1954382", + "1954490", + "1954496", + "1954514", + "1954522", + "1954563", + "1954911", + "1954930", + "1954933", + "1955039", + "1955093", + "1955153", + "1955199", + "1955271", + "1955272", + "1955318", + "1955389", + "1955416", + "1955422", + "1955479", + "1955484", + "1955498", + "1955552", + "1955694", + "1955725", + "1955736", + "1955737", + "1955743", + "1955745", + "1955753", + "1955755", + "1955763", + "1955856", + "1955899", + "1956098", + "1956215", + "1956384", + "1956416", + "1956440", + "1956462", + "1956505", + "1956510", + "1956524", + "1956536", + "1956597", + "1956599", + "1956626", + "1956639", + "1956710", + "1956716", + "1956897", + "1956904", + "1956955", + "1956958", + "1956963", + "1956978", + "1956983", + "1957058", + "1957062", + "1957161", + "1957174", + "1957266", + "1957286", + "1957300", + "1957333", + "1957368", + "1957413", + "1957441", + "1957460", + "1957523", + "1957556", + "1957565", + "1957570", + "1957572", + "1957579", + "1957583", + "1957611", + "1957673", + "1957706", + "1957718", + "1957746", + "1957791", + "1957816", + "1957822", + "1957845", + "1957852", + "1957854", + "1957870", + "1958024", + "1958045", + "1958049", + "1958065", + "1958121", + "1958152", + "1958158", + "1958163", + "1958241", + "1958252", + "1958255", + "1958259", + "1958260", + "1958275", + "1958290", + "1958305", + "1958307", + "1958323", + "1958324", + "1958454", + "1958463", + "1958483", + "1958515", + "1958528", + "1959341", + "1959379", + "1959383", + "1959395", + "1959423", + "1959436", + "1959461", + "1959473", + "1959500", + "1959543", + "1959637", + "1959645", + "1959652", + "1959666", + "1959667", + "1959682", + "1959735", + "1959782", + "1959799", + "1959839", + "1959858", + "1959890", + "1959898", + "1959914", + "1959917", + "1959919", + "1959934", + "1959948", + "1960004", + "1960023", + "1960090", + "1960105", + "1960106", + "1960128", + "1960166", + "1960181", + "1960182", + "1960255", + "1960268", + "1960315", + "1960484", + "1960503", + "1960521", + "1960524", + "1960571", + "1960595", + "1960617", + "1960632", + "1960686", + "1960854", + "1960940", + "1960941", + "1961013", + "1961037", + "1961040", + "1961052", + "1961068", + "1961126", + "1961155", + "1961162", + "1961180", + "1961190", + "1961252", + "1961361", + "1961647", + "1961718", + "1962051", + "1962076", + "1962086", + "1962118", + "1962159", + "1962162", + "1962204", + "1962265", + "1962268", + "1962434", + "1962447", + "1962479", + "1962490", + "1962516", + "1962584", + "1962636", + "1962656", + "1962657", + "1962678", + "1962689", + "1962722", + "1962727", + "1962829", + "1962839", + "1962841", + "1962842", + "1962860", + "1962895", + "1962900", + "1962925", + "1962934", + "1962961", + "1962972", + "1962990", + "1963011", + "1963052", + "1963096", + "1963168", + "1963201", + "1963297", + "1963306", + "1963425", + "1963433", + "1963446", + "1963463", + "1963532", + "1963587", + "1963619", + "1963629", + "1963633", + "1963709", + "1963710", + "1963733", + "1963755", + "1963782", + "1963848", + "1963854", + "1963874", + "1963879", + "1963892", + "1964024", + "1964025", + "1964029", + "1964041", + "1964066", + "1964113", + "1964116", + "1964141", + "1964143", + "1964144", + "1964151", + "1964153", + "1964155", + "1964158", + "1964174", + "1964189", + "1964191", + "1964195", + "1964247", + "1964305", + "1964401", + "1964437", + "1964471", + "1964565", + "1964585", + "1964637", + "1964653", + "1964657", + "1964702", + "1964715", + "1964738", + "1964836", + "1964995", + "1965024", + "1965038", + "1965069", + "1965100", + "1965166", + "1965197", + "1965208", + "1965345", + "1965586", + "1965640", + "1965643", + "1965649", + "1965650", + "1965671", + "1965697", + "1965699", + "1965763", + "1965777", + "1965794", + "1965795", + "1965797", + "1965805", + "1965810", + "1965823", + "1965825", + "1965831", + "1965838", + "1965841", + "1965861", + "1965865", + "1965887", + "1965913", + "1965996", + "1966017", + "1966088", + "1966185", + "1966195", + "1966198", + "1966255", + "1966302", + "1966310", + "1966351", + "1966358", + "1966362", + "1966367", + "1966886", + "1966977", + "1967003", + "1967006", + "1967011", + "1967039", + "1967127", + "1967128", + "1967209", + "1967226", + "1967240", + "1967245", + "1967265", + "1967273", + "1967346", + "1967433", + "1967445", + "1967452", + "1967590", + "1967595", + "1967597", + "1967606", + "1967672", + "1967703", + "1967716", + "1967803", + "1967815", + "1967873", + "1968115", + "1968131", + "1968147", + "1968182", + "1968205", + "1968313", + "1968321", + "1968324", + "1968363", + "1968678", + "1968686", + "1968730", + "1968746", + "1968837", + "1968867", + "1968942", + "1968951", + "1968990", + "1969291", + "1969339", + "1969357", + "1969463", + "1969491", + "1969568", + "1969581", + "1969954", + "1969958", + "1969961", + "1970034", + "1970093", + "1970094", + "1970108", + "1970119", + "1970136", + "1970145", + "1970148", + "1970150", + "1970159", + "1970213", + "1970227", + "1970243", + "1970259", + "1970265", + "1970284", + "1970322", + "1970436", + "1970460", + "1970463", + "1970473", + "1970485", + "1971835", + "1971847", + "1971852", + "1971858", + "1971888", + "1971986", + "1971995", + "1971998", + "1971999", + "1972010", + "1972094", + "1972101", + "1972120", + "1972185", + "1972187", + "1972234", + "1972250", + "1972278", + "1972342", + "1972374", + "1972377", + "1972407", + "1972434", + "1972447", + "1972449", + "1972454", + "1972606", + "1972613", + "1972620", + "1972631", + "1972691", + "1972754", + "1972797", + "1972800", + "1972806", + "1972903", + "1972942", + "1973146", + "1973147", + "1973164", + "1973171", + "1973242", + "1973300", + "1973323", + "1973327", + "1973338", + "1973358", + "1973393", + "1973414", + "1973466", + "1973467", + "1973487", + "1973493", + "1973665", + "1973719", + "1975164", + "1975198", + "1975212", + "1975248", + "1975287", + "1975341", + "1975365", + "1975546", + "1975553", + "1975571", + "1975583", + "1975597", + "1975607", + "1975711", + "1975722", + "1975733", + "1975741", + "1975793", + "1975805", + "1975806", + "1975892", + "1975897", + "1975903", + "1975914", + "1975964", + "1975979", + "1976073", + "1976123", + "1976142", + "1976163", + "1976212", + "1976213", + "1976224", + "1976228", + "1976248", + "1976255", + "1976303", + "1976311", + "1976333", + "1976342", + "1976462", + "1976463", + "1976469", + "1976470", + "1976483", + "1976651", + "1976746", + "1976890", + "1976928", + "1976933", + "1976934", + "1976939", + "1976941", + "1976993", + "1977003", + "1977007", + "1977054", + "1977068", + "1977182", + "1977184", + "1977350", + "1977759", + "1977764", + "1977767", + "1977813", + "1977833", + "1977863", + "1977962", + "1977967", + "1977971", + "1978017", + "1978034", + "1978045", + "1978056", + "1978065", + "1978082", + "1978114", + "1978197", + "1978268", + "1978274", + "1978281", + "1978282", + "1978283", + "1978375", + "1978385", + "1978398", + "1978405", + "1978407", + "1978422", + "1978424", + "1978445", + "1978464", + "1978493", + "1978494", + "1978499", + "1978524", + "1978526", + "1978529", + "1978671", + "1978751", + "1978776", + "1978789", + "1978821", + "1978904", + "1978919", + "1978937", + "1978958", + "1978959", + "1978977", + "1978996", + "1979021", + "1979041", + "1979222", + "1979255", + "1979289", + "1979308", + "1979344", + "1979358", + "1979380", + "1979427", + "1979430", + "1979473", + "1979521", + "1979561", + "1979562", + "1979721", + "1979726", + "1979758", + "1979781", + "1979787", + "1979801", + "1979822", + "1980025", + "1980035", + "1980041", + "1980044", + "1980055", + "1980063", + "1980245", + "1980247", + "1980250", + "1980269", + "1980290", + "1980462", + "1980491", + "1980505", + "1980521", + "1980525", + "1980533", + "1980559", + "1980659", + "1980811", + "1980821", + "1980827", + "1980917", + "1981063", + "1981144", + "1981160", + "1981161", + "1981162", + "1981191", + "1981202", + "1981209", + "1981210", + "1981252", + "1981258", + "1981277", + "1981284", + "1981312", + "1981457", + "1981696", + "1981938", + "1981951", + "1981959", + "1981973", + "1981998", + "1982024", + "1982055", + "1982071", + "1982085", + "1982100", + "1982102", + "1982103", + "1982148", + "1982221", + "1982267", + "1982406", + "1982447", + "1982458", + "1982500", + "1982525", + "1982529", + "1982533", + "1982541", + "1982542", + "1982613", + "1982636", + "1982671", + "1982746", + "1982779", + "1982780", + "1982790", + "1982791", + "1982824", + "1982838", + "1982865", + "1982885", + "1982898", + "1982918", + "1982924", + "1982951", + "1983000", + "1983039", + "1983052", + "1983101", + "1983111", + "1983170", + "1983260", + "1983263", + "1983288", + "1983387", + "1983393", + "1983434", + "1983441", + "1983442", + "1983491", + "1983525", + "1983528", + "1983548", + "1983558", + "1983648", + "1983705", + "1983709", + "1983755", + "1983888", + "1983896", + "1983922", + "1983997", + "1983999", + "1984033", + "1984073", + "1984110", + "1984117", + "1984654", + "1984734", + "1984913", + "1984942", + "1984949", + "1984954", + "1985061", + "1985152", + "1985158", + "1985167", + "1985181", + "1985191", + "1985192", + "1985228", + "1985230", + "1985267", + "1985405", + "1985406", + "1985423", + "1985487", + "1985490", + "1985522", + "1985573", + "1985734", + "1985742", + "1985816", + "1985826", + "1985931", + "1985945", + "1985952", + "1985993", + "1986004", + "1986020", + "1986032", + "1986040", + "1986052", + "1986054", + "1986056", + "1986061", + "1986091", + "1986113", + "1986157", + "1986166", + "1986171", + "1986192", + "1986220", + "1986223", + "1986367", + "1986452", + "1986497", + "1986508", + "1986522", + "1986575", + "1986623", + "1986650", + "1986693", + "1986774", + "1986779", + "1986787", + "1986807", + "1986846", + "1986877", + "1986906", + "1986936", + "1986942", + "1986998", + "1987145", + "1987146", + "1987203", + "1987204", + "1987301", + "1987330", + "1987362", + "1987377", + "1987527", + "1987578", + "1987629", + "1987633", + "1987650", + "1987665", + "1987737", + "1987740", + "1987744", + "1987747", + "1987767", + "1987775", + "1987776", + "1987787", + "1987855", + "1988002", + "1988019", + "1988064", + "1988225", + "1988257", + "1988302", + "1988306", + "1988354", + "1988360", + "1988361", + "1988362", + "1988376", + "1988382", + "1988384", + "1988390", + "1988420", + "1988487", + "1988495", + "1988593", + "1988602", + "1988684", + "1988762", + "1988820", + "1988881", + "1988894", + "1989083", + "1989170", + "1989181", + "1989282", + "1989283", + "1989355", + "1989377", + "1989428", + "1989522", + "1989538", + "1989582", + "1989594", + "1989903", + "1989942", + "1990043", + "1990050", + "1990066", + "1990088", + "1990105", + "1990150", + "1990155", + "1990164", + "1990165", + "1990167", + "1990178", + "1990198", + "1990200", + "1990255", + "1990256", + "1990270", + "1990331", + "1990335", + "1990357", + "1990371", + "1990533", + "1990551", + "1990582", + "1990594", + "1990998", + "1991012", + "1991123", + "1991179", + "1991280", + "1991289", + "1991294", + "1991295", + "1991298", + "1991299", + "1991303", + "1991310", + "1991371", + "1991378", + "1991394", + "1991429", + "1991466", + "1991532", + "1991783", + "1991846", + "1991945", + "1992066", + "1992167", + "1992172", + "1992268", + "1992277", + "1992315", + "1992434", + "1992504", + "1992547", + "1992573", + "1992634", + "1992817", + "1992889", + "1992907", + "1992936", + "1992956", + "1992969", + "1992976", + "1993021", + "1993036", + "1993045", + "1993419", + "1993496", + "1993637", + "3257809", + "4299071", + "4299095", + "4299191", + "4299201", + "4299211", + "4299213", + "4299218", + "4299368", + "4299370", + "4299535", + "4299565", + "4299576", + "4299597", + "4299599", + "4299778", + "4299802", + "4299804", + "4299870", + "4299871", + "4300000", + "4300259", + "4300268", + "4300277", + "4300384", + "4300393", + "4300406", + "4301036", + "4301044", + "4301052", + "4301055", + "4301068", + "4301071", + "4301148", + "4301238", + "4301242", + "4301282", + "4301283", + "4301304", + "4301306", + "4301307", + "4301309", + "4301312", + "4301348", + "4301355", + "4301426", + "4301744", + "4301749", + "4301876", + "4301897", + "4301934", + "4301942", + "4301945", + "4302008", + "4302101", + "4302199", + "4302202", + "4302221", + "4302230", + "4302240", + "4302252", + "4302268", + "4302274", + "4302319", + "4302333", + "4302388", + "4522322", + "4522753", + "4522886", + "4522890", + "4522891", + "4522911", + "4522916", + "4522919", + "4522933", + "4522974", + "4523461", + "4523486", + "4523519", + "4523522", + "4523556", + "4523560", + "4523564", + "4523725", + "4523880", + "4523883", + "4523885", + "4524052", + "4524054", + "4524070", + "4524072", + "4524221", + "4524223", + "4524376", + "4524393", + "4524403", + "4524421", + "4524424", + "4524426", + "4524513", + "4524541", + "4524568", + "4524588", + "4524636", + "4524638", + "4524712", + "4524740", + "4524793", + "4524822", + "4524890", + "4524914", + "4524922", + "4524929", + "4524951", + "4524961", + "4524962", + "4525034", + "4525068", + "4525078", + "4525091", + "4525093", + "4525097", + "4525103", + "4525132", + "4525177", + "4525189", + "4525266", + "4525268", + "4525270", + "4525354", + "4525364", + "4525369", + "4525425", + "4525476", + "4525487", + "4525500", + "4525503", + "4525505", + "4525510", + "4525530", + "4525540", + "4525547", + "4525557", + "4525562", + "4525610", + "4525641", + "4525777", + "4525803", + "4525859", + "4525884", + "4526050", + "4527339", + "4527342", + "4527355", + "4527903", + "4527972", + "4528100", + "4528539", + "4528547", + "4528593", + "4528658", + "4528692", + "4528694", + "4528702", + "4528813", + "4528818", + "4529032", + "4529064", + "4529186", + "4529248", + "4529566", + "4529630", + "4529738", + "4529908", + "4529915", + "4529931", + "4530002", + "4530138", + "4530151", + "4530214", + "4530424", + "4530608", + "4530632", + "4530947", + "4531145", + "4531147", + "4531158", + "4531237", + "4531242", + "4531246", + "4531264", + "4531284", + "4531376", + "4531402", + "4531409", + "4531417", + "4531425", + "4531506", + "4531517", + "4531643", + "4531670", + "4531687", + "4531690", + "4531708", + "4531713", + "4531968", + "4531975", + "4532022", + "4532024", + "4532050", + "4532088", + "4532095", + "4532097", + "4532122", + "4532125", + "4532150", + "4532160", + "4532203", + "4532206", + "4532216", + "4532236", + "4532239", + "4532253", + "4532260", + "4532264", + "4532266", + "4532269", + "4532283", + "4532293", + "4532297", + "4532351", + "4532352", + "4532357", + "4532366", + "4532395", + "4532405", + "4532408", + "4532412", + "4532453", + "4532461", + "4532471", + "4532473", + "4532493", + "4532500", + "4532508", + "4532516", + "4532532", + "4532534", + "4532544", + "4532565", + "4532608", + "4532614", + "4532696", + "4532700", + "4532811", + "4532886", + "4532888", + "4532890", + "4532908", + "4532986", + "4533115", + "4533123", + "4533125", + "4533128", + "4533136", + "4533202", + "4533211", + "4533255", + "4533273", + "4533285", + "4533325", + "4533344", + "4533345", + "4533347", + "4533360", + "4533431", + "4533433", + "4533442", + "4533444", + "4533446", + "4533661", + "4533671", + "4533695", + "4533714", + "4533720", + "4533882", + "4533924", + "4533937", + "4533952", + "4533957", + "4534011", + "4534017", + "4534038", + "4534046", + "4534052", + "4534057", + "4534086", + "4534162", + "4534166", + "4534194", + "4534207", + "4534225", + "4534245", + "4534252", + "4534257", + "4534275", + "4534290", + "4534299", + "4534360", + "4534389", + "4534398", + "4534408", + "4534458", + "4534463", + "4534485", + "4534486", + "4534525", + "4534533", + "4534538", + "4534540", + "4534663", + "4534669", + "4534675", + "4534681", + "4534683", + "4534685", + "4534686", + "4534691", + "4534719", + "4534757", + "4534762", + "4534767", + "4534769", + "4534773", + "4534778", + "4534779", + "4534782", + "4534787", + "4534788", + "4534792", + "4534796", + "4534798", + "4534826", + "4534869", + "4534872", + "4534909", + "4534914", + "4535092", + "4535106", + "4535172", + "4535271", + "4535280", + "4535307", + "4535386", + "4535396", + "4535510", + "4535539", + "4535581", + "4535592", + "4535614", + "4535618", + "4535620", + "4535627", + "4535630", + "4535632", + "4535636", + "4535689", + "4535754", + "4535809", + "4535817", + "4535819", + "4535827", + "4535904", + "4536472", + "4536483", + "4684220", + "4684789", + "4684893", + "4684910", + "4684925", + "4684958", + "4684986", + "4685097", + "4685116", + "4685219", + "4685271", + "4685299", + "4685306", + "4685431", + "4685468", + "4685485", + "4685557", + "4685566", + "4685629", + "4685631", + "4685653", + "4685655", + "4685669", + "4685678", + "4685778", + "4685802", + "4685946", + "4685972", + "4685980", + "4685981", + "4686018", + "4686022", + "4686029", + "4686039", + "4686055", + "4686111", + "4686164", + "4686190", + "4686214", + "4686264", + "4686266", + "4686355", + "4686368", + "4686385", + "4686483", + "4686531", + "4686532", + "4686617", + "4686620", + "4686628", + "4686656", + "4686702", + "4686743", + "4686844", + "4686897", + "4686907", + "4686913", + "4686956", + "4687228", + "4687288", + "4687389", + "4687565", + "4687661", + "4687681", + "4687827", + "4687906", + "4687930", + "4687933", + "4687934", + "4687935", + "4687991", + "4688049", + "4688092", + "4688142", + "4688166", + "4688169", + "4688172", + "4689905", + "4689912", + "4689929", + "4689963", + "4690079", + "4692485", + "4693382", + "4693675", + "4695709", + "4695719", + "4699245", + "4701136", + "4701298", + "4701336", + "4702564", + "4702599", + "4702603", + "4702731", + "4702783", + "4702784", + "4702878", + "4702892", + "4702893", + "4702911", + "4702912", + "4702961", + "4703479", + "4704279", + "4704316", + "4704352", + "4704356", + "4704400", + "4704401", + "4704404", + "4704407", + "4704501", + "4705103", + "4707848", + "4707896", + "4707900", + "4708183", + "4708342", + "4708927", + "4708972", + "4708995", + "4709051", + "4709102", + "4709107", + "4709111", + "4709133", + "4709147", + "5101371", + "5101394", + "5101502", + "5101527", + "5101556", + "5101640", + "5101678", + "5101717", + "5101745", + "5101763", + "5101811", + "5102207", + "5102287", + "5102300", + "5102304", + "5102324", + "5102335", + "5102396", + "5102424", + "5102432", + "5102628", + "5102635", + "5102637", + "5102642", + "5102651", + "5102666", + "5102668", + "5102671", + "5102678", + "5102693", + "5102735", + "5102773", + "5102809", + "5102830", + "5102931", + "5102951", + "5102982", + "5103066", + "5103083", + "5103118", + "5103121", + "5103154", + "5103166", + "5103176", + "5103181", + "5103183", + "5103185", + "5103201", + "5103227", + "5103394", + "5103451", + "5103502", + "5103613", + "5103736", + "5103948", + "5103998", + "5104056", + "5104063", + "5104088", + "5104116", + "5104157", + "5104442", + "5104558", + "5104641", + "5104759", + "5104772", + "5104797", + "5104815", + "5104822", + "5104882", + "5104891", + "5104903", + "5104927", + "5104940", + "5104948", + "5104986", + "5105057", + "5105068", + "5105081", + "5105088", + "5105106", + "5105120", + "5105124", + "5105212", + "5105217", + "5105259", + "5105336", + "5105339", + "5105344", + "5105352", + "5105365", + "5105367", + "5105369", + "5105376", + "5105379", + "5105380", + "5105447", + "5105458", + "5105467", + "5105469", + "5105491", + "5105508", + "5105547", + "5105560", + "5105588", + "5105603", + "5105642", + "5105649", + "5105656", + "5105671", + "5105929", + "5106115", + "5106249", + "5106539", + "5106894", + "5107076", + "5107128", + "5107219", + "5107640", + "5107644", + "5107829", + "5108318", + "5108334", + "5108335", + "5108346", + "5108349", + "5108416", + "5108417", + "5108419", + "5108421", + "5108435", + "5108440", + "5108636", + "5108660", + "5108665", + "5108670", + "5108671", + "5108724", + "5108752", + "5108761", + "5108787", + "5108794", + "5108796", + "5108808", + "5108951", + "5108957", + "5108958", + "5109196", + "5109259", + "5109299", + "5109345", + "5109369", + "5109385", + "5109413", + "5109418", + "5109437", + "5109498", + "5109506", + "5109523", + "5109535", + "5109566", + "5109596", + "5109599", + "5109614", + "5109646", + "5109651", + "5109661", + "5109766", + "5109782", + "5109784", + "5109786", + "5109787", + "5109788", + "5109796", + "5109821", + "5109829", + "5109830", + "5109843", + "5109845", + "5109848", + "5109850", + "5109852", + "5109855", + "5109870", + "5109872", + "5109881", + "5109882", + "5109898", + "5109931", + "5109954", + "5109958", + "5110012", + "5110013", + "5110044", + "5110120", + "5110190", + "5110200", + "5110211", + "5110213", + "5110232", + "5110282", + "5110297", + "5110299", + "5110305", + "5110326", + "5110327", + "5110333", + "5110341", + "5110356", + "5110377", + "5110390", + "5110397", + "5110492", + "5110533", + "5110546", + "5110593", + "5110644", + "5110670", + "5110723", + "5110754", + "5110756", + "5110765", + "5110769", + "5110818", + "5110837", + "5110858", + "5110863", + "5110871", + "5110885", + "5110981", + "5110986", + "5111044", + "5111064", + "5111139", + "5111141", + "5111147", + "5111195", + "5111214", + "5111249", + "5111343", + "5111360", + "5111372", + "5111397", + "5111481", + "5111501", + "5111513", + "5111521", + "5111535", + "5111546", + "5111568", + "5111574", + "5111600", + "5111643", + "5111956", + "5111967", + "5111974", + "5112051", + "5112053", + "5112060", + "5112068", + "5112078", + "5112080", + "5112130", + "5112131", + "5112153", + "5112155", + "5112191", + "5112199", + "5112233", + "5112254", + "5112283", + "5112291", + "5112302", + "5112336", + "5112345", + "5112377", + "5112388", + "5112407", + "5112410", + "5112414", + "5112440", + "5112457", + "5112461", + "5112464", + "5112465", + "5112467", + "5112469", + "5112474", + "5112500", + "5112531", + "5112542", + "5112626", + "5112798", + "5112892", + "5112900", + "5112908", + "5112915", + "5112917", + "5112923", + "5112927", + "5112940", + "5112944", + "5112947", + "5112959", + "5112961", + "5112963", + "5112968", + "5112990", + "5113001", + "5113036", + "5113078", + "5113082", + "5113084", + "5113148", + "5113234", + "5113330", + "5113352", + "5113365", + "5113385", + "5113394", + "5113847", + "5113853", + "5113925", + "5113950", + "5113985", + "5114021", + "5114039", + "5114043", + "5114081", + "5114083", + "5114096", + "5114107", + "5114128", + "5114151", + "5114159", + "5114189", + "5114192", + "5114198", + "5114295", + "5114303", + "5114311", + "5114316", + "5114317", + "5114327", + "5114340", + "5114353", + "5114394", + "5114409", + "5114425", + "5114431", + "5114435", + "5114436", + "5114439", + "5114465", + "5114892", + "5114903", + "5114912", + "5114915", + "5114921", + "5114923", + "5114930", + "5114934", + "5114946", + "5114949", + "5114950", + "5114956", + "5115046", + "5115166", + "5115167", + "5115198", + "5115381", + "5115406", + "5115500", + "5115701", + "5115771", + "5115777", + "5115854", + "5115872", + "5115874", + "5116095", + "5116128", + "5116134", + "5116145", + "5116198", + "5116252", + "5116293", + "5116332", + "5116338", + "5116353", + "5116358", + "5116395", + "5116397", + "5116412", + "5116416", + "5116475", + "5116504", + "5116698", + "5116843", + "5117189", + "5117200", + "5117245", + "5117347", + "5117348", + "5117361", + "5117399", + "5117400", + "5117414", + "5117430", + "5117463", + "5117685", + "5117687", + "5117776", + "5117779", + "5117791", + "5117805", + "5117941", + "5118046", + "5118171", + "5118223", + "5118291", + "5118327", + "5118348", + "5118396", + "5118422", + "5118459", + "5118474", + "5118509", + "5118524", + "5118565", + "5118798", + "5118828", + "5118837", + "5118841", + "5118859", + "5118892", + "5118904", + "5118934", + "5118944", + "5118949", + "5118974", + "5118996", + "5119000", + "5119009", + "5119013", + "5119016", + "5119039", + "5119046", + "5119050", + "5119143", + "5119181", + "5119193", + "5119211", + "5119223", + "5119239", + "5119245", + "5119346", + "5119349", + "5119350", + "5119353", + "5119354", + "5119482", + "5119506", + "5119513", + "5119808", + "5119868", + "5119890", + "5119893", + "5119895", + "5119905", + "5119961", + "5119969", + "5120053", + "5120058", + "5120063", + "5120278", + "5120343", + "5120357", + "5120368", + "5120379", + "5120396", + "5120453", + "5120465", + "5120577", + "5120675", + "5121046", + "5121177", + "5121613", + "5121847", + "5121850", + "5122013", + "5122037", + "5122062", + "5122086", + "5122121", + "5122131", + "5122206", + "5122293", + "5122307", + "5122430", + "5122439", + "5122455", + "5122526", + "5122538", + "5122556", + "5122571", + "5122574", + "5122581", + "5122646", + "5122647", + "5122668", + "5122683", + "5122691", + "5122696", + "5122702", + "5122798", + "5122876", + "5122969", + "5123018", + "5123042", + "5123046", + "5123137", + "5123180", + "5123221", + "5123276", + "5123339", + "5123394", + "5123419", + "5123449", + "5123461", + "5123474", + "5123485", + "5123489", + "5123542", + "5123582", + "5123615", + "5123636", + "5123663", + "5123674", + "5123676", + "5123685", + "5123701", + "5123704", + "5123707", + "5123709", + "5123775", + "5123801", + "5123837", + "5123852", + "5123870", + "5123876", + "5123884", + "5123890", + "5123922", + "5123954", + "5123956", + "5123961", + "5123968", + "5123971", + "5123979", + "5123980", + "5123983", + "5123991", + "5123996", + "5123999", + "5124000", + "5124007", + "5124029", + "5124049", + "5124050", + "5124071", + "5124080", + "5124088", + "5124093", + "5124109", + "5124118", + "5124119", + "5124136", + "5124143", + "5124147", + "5124151", + "5124172", + "5124200", + "5124208", + "5124219", + "5124232", + "5124233", + "5124249", + "5124250", + "5124268", + "5124304", + "5124332", + "5124348", + "5124352", + "5124374", + "5124415", + "5124423", + "5124433", + "5124442", + "5124443", + "5124448", + "5124450", + "5124452", + "5124468", + "5124512", + "5124557", + "5124589", + "5124595", + "5124597", + "5124598", + "5124607", + "5124673", + "5124716", + "5124813", + "5124873", + "5124880", + "5124911", + "5125075", + "5125104", + "5125118", + "5125130", + "5125306", + "5125525", + "5125545", + "5125569", + "5125591", + "5125600", + "5125602", + "5125629", + "5125633", + "5125635", + "5125689", + "5125780", + "5125916", + "5125917", + "5125939", + "5126000", + "5126013", + "5126052", + "5126204", + "5126212", + "5126217", + "5126229", + "5126231", + "5126240", + "5126241", + "5126259", + "5126284", + "5126287", + "5126292", + "5126315", + "5126332", + "5126344", + "5126352", + "5126357", + "5126376", + "5126381", + "5126396", + "5126397", + "5126398", + "5126404", + "5126434", + "5126445", + "5126454", + "5126494", + "5126517", + "5126585", + "5126635", + "5126637", + "5126663", + "5126668", + "5126675", + "5126680", + "5126697", + "5126718", + "5126721", + "5126729", + "5126751", + "5126756", + "5126785", + "5126798", + "5126834", + "5126843", + "5126870", + "5126889", + "5126892", + "5126905", + "5126922", + "5126946", + "5126958", + "5126963", + "5127020", + "5127024", + "5127039", + "5127045", + "5127054", + "5127089", + "5127094", + "5127097", + "5127107", + "5127116", + "5127118", + "5127130", + "5127170", + "5127203", + "5127222", + "5127325", + "5127335", + "5127336", + "5127337", + "5127339", + "5127350", + "5127354", + "5127355", + "5127357", + "5127378", + "5127380", + "5127394", + "5127521", + "5127562", + "5127592", + "5127595", + "5127629", + "5127631", + "5127638", + "5127644", + "5127656", + "5127669", + "5127675", + "5127680", + "5127683", + "5127688", + "5127698", + "5127748", + "5127805", + "5127814", + "5127822", + "5127835", + "5127893", + "5127916", + "5127932", + "5127955", + "5127971", + "5127998", + "5128005", + "5128007", + "5128011", + "5128034", + "5128045", + "5128067", + "5128182", + "5128224", + "5128225", + "5128232", + "5128250", + "5128266", + "5128326", + "5128353", + "5128357", + "5128363", + "5128380", + "5128432", + "5128446", + "5128475", + "5128488", + "5128519", + "5128545", + "5128569", + "5128587", + "5128597", + "5128644", + "5128663", + "5128984", + "5129000", + "5129091", + "5129190", + "5129251", + "5129257", + "5129293", + "5129374", + "5129378", + "5129387", + "5129405", + "5129417", + "5129430", + "5129432", + "5129451", + "5129473", + "5129479", + "5129480", + "5129481", + "5129489", + "5129496", + "5129502", + "5129515", + "5129517", + "5129524", + "5129531", + "5129535", + "5129544", + "5130277", + "5130296", + "5130322", + "5130326", + "5130330", + "5130335", + "5130347", + "5130369", + "5130392", + "5130393", + "5130400", + "5130439", + "5130444", + "5130448", + "5130456", + "5130464", + "5130467", + "5130471", + "5130476", + "5130487", + "5130502", + "5130514", + "5130521", + "5130528", + "5130542", + "5130548", + "5130557", + "5130559", + "5130574", + "5130587", + "5130682", + "5130696", + "5130748", + "5130775", + "5130813", + "5130814", + "5130851", + "5130908", + "5130944", + "5131058", + "5131096", + "5131142", + "5131192", + "5131256", + "5131293", + "5131339", + "5131347", + "5131372", + "5131407", + "5131442", + "5131443", + "5131467", + "5131493", + "5131495", + "5131520", + "5131540", + "5131565", + "5131597", + "5131608", + "5131910", + "5131951", + "5131957", + "5131982", + "5132003", + "5132078", + "5132079", + "5132084", + "5132137", + "5132154", + "5132183", + "5132191", + "5132239", + "5132246", + "5132252", + "5132254", + "5132283", + "5132317", + "5132346", + "5132347", + "5132360", + "5132374", + "5132398", + "5132429", + "5132440", + "5132446", + "5132505", + "5132523", + "5132540", + "5132550", + "5132917", + "5132940", + "5132956", + "5132973", + "5133008", + "5133009", + "5133035", + "5133051", + "5133088", + "5133142", + "5133251", + "5133255", + "5133265", + "5133451", + "5133503", + "5133523", + "5133565", + "5133568", + "5133581", + "5133589", + "5133591", + "5133595", + "5133609", + "5133610", + "5133615", + "5133621", + "5133622", + "5133623", + "5133634", + "5133635", + "5133687", + "5133689", + "5133693", + "5133695", + "5133736", + "5133786", + "5133864", + "5134098", + "5134301", + "5134469", + "5134517", + "5134543", + "5134559", + "5134569", + "5134583", + "5134607", + "5134621", + "5134659", + "5134661", + "5134667", + "5134682", + "5134686", + "5134687", + "5134693", + "5134759", + "5134810", + "5134815", + "5134837", + "5135026", + "5135191", + "5135355", + "5135513", + "5135546", + "5135573", + "5135643", + "5135839", + "5135944", + "5136059", + "5136113", + "5136200", + "5136306", + "5136372", + "5136594", + "5136681", + "5136713", + "5136752", + "5136790", + "5136868", + "5136939", + "5137085", + "5137086", + "5137128", + "5137156", + "5137166", + "5137257", + "5137291", + "5137330", + "5137408", + "5137511", + "5137512", + "5137540", + "5137553", + "5137578", + "5137582", + "5137588", + "5137593", + "5137595", + "5137601", + "5137605", + "5137608", + "5137612", + "5137615", + "5137626", + "5137659", + "5137663", + "5137664", + "5137672", + "5137674", + "5137677", + "5137679", + "5137682", + "5137689", + "5137693", + "5137694", + "5137695", + "5137700", + "5137706", + "5137708", + "5137711", + "5137714", + "5137747", + "5137748", + "5137763", + "5137790", + "5137791", + "5137799", + "5137800", + "5137802", + "5137803", + "5137808", + "5137819", + "5137823", + "5137827", + "5137828", + "5137832", + "5137833", + "5137842", + "5137847", + "5137849", + "5137850", + "5137851", + "5137858", + "5137861", + "5137863", + "5137882", + "5137889", + "5137890", + "5137891", + "5137894", + "5137903", + "5137920", + "5137926", + "5137932", + "5137938", + "5137945", + "5137946", + "5137949", + "5137955", + "5137988", + "5137996", + "5137998", + "5138069", + "5138200", + "5138257", + "5138387", + "5138543", + "5138561", + "5138681", + "5138701", + "5138732", + "5138743", + "5138841", + "5138929", + "5138967", + "5138984", + "5139026", + "5139029", + "5139034", + "5139040", + "5139050", + "5139064", + "5139156", + "5139201", + "5139309", + "5139357", + "5139524", + "5139578", + "5139673", + "5139864", + "5139897", + "5139898", + "5139908", + "5139909", + "5139914", + "5139928", + "5139990", + "5140006", + "5140033", + "5140054", + "5140056", + "5140063", + "5140214", + "5140244", + "5140436", + "5140443", + "5140534", + "5140561", + "5140603", + "5140627", + "5140969", + "5140980", + "5141085", + "5141144", + "5141154", + "5141163", + "5141172", + "5141177", + "5141179", + "5141185", + "5141187", + "5141188", + "5141195", + "5141197", + "5141198", + "5141199", + "5141202", + "5141212", + "5141215", + "5141216", + "5141226", + "5141230", + "5141233", + "5141234", + "5141236", + "5141242", + "5141248", + "5141250", + "5141254", + "5141262", + "5141291", + "5141297", + "5141311", + "5141317", + "5141324", + "5141340", + "5141342", + "5141344", + "5141493", + "5141501", + "5141581", + "5141590", + "5141643", + "5141650", + "5141662", + "5141677", + "5141697", + "5141743", + "5141763", + "5141795", + "5141913", + "5141924", + "5142001", + "5142006", + "5142032", + "5142061", + "5142062", + "5142067", + "5142086", + "5142130", + "5142160", + "5142166", + "5142176", + "5142213", + "5142249", + "5142254", + "5142267", + "5142269", + "5142273", + "5142283", + "5142298", + "5142300", + "5142314", + "5142317", + "5142319", + "5142328", + "5142338", + "5142352", + "5142372", + "5142394", + "5142424", + "5142436", + "5142499", + "5142583", + "5142599", + "5142725", + "5142729", + "5142730", + "5142749", + "5142822", + "5142825", + "5142829", + "5142842", + "5142870", + "5142903", + "5142948", + "5143048", + "5143049", + "5143080", + "5143107", + "5143116", + "5143129", + "5143147", + "5143232", + "5143234", + "5143241", + "5143249", + "5143266", + "5143279", + "5143284", + "5143285", + "5143303", + "5143311", + "5143315", + "5143338", + "5143354", + "5143380", + "5143384", + "5143453", + "5143477", + "5143506", + "5143511", + "5143525", + "5143586", + "5143651", + "5143657", + "5143675", + "5143697", + "5143703", + "5143944", + "5143947", + "5143952", + "5143960", + "5143964", + "5144027", + "5144092", + "5144093", + "5144129", + "5144190", + "5144196", + "5144204", + "5144227", + "5144318", + "5144345", + "5144363", + "5144381", + "5144386", + "5144407", + "5144424", + "5144426", + "5144431", + "5144457", + "5144472", + "5144499", + "5144505", + "5144534", + "5144543", + "5144554", + "5144558", + "5144564", + "5144575", + "5144583", + "5144588", + "5144593", + "5144596", + "5144633", + "5144677", + "5144721", + "5144729", + "5144782", + "5144787", + "5144805", + "5144806", + "5144864", + "5144880", + "5144900", + "5144935", + "5144936", + "5144937", + "5144942", + "5144953", + "5145009", + "5145075", + "5145078", + "5145079", + "5145136", + "5145139", + "5145186", + "5145238", + "5145255", + "5145260", + "5145269", + "5145409", + "5145422", + "5145466", + "5145495", + "5145502", + "5145503", + "5145521", + "5145522", + "5145560", + "5145713", + "5145729", + "5145842", + "5145965", + "5145998", + "5146030", + "5146038", + "5146062", + "5146082", + "5146091", + "5146179", + "5146253", + "5146262", + "5146282", + "5146294", + "5146303", + "5146305", + "5146326", + "5146342", + "5146379", + "5146389", + "5146412", + "5146420", + "5146426", + "5146434", + "5146472", + "5146476", + "5146483", + "5146496", + "5146497", + "5146508", + "5146510", + "5146525", + "5146559", + "5146566", + "5146567", + "5146578", + "5146598", + "5146599", + "5146601", + "5146608", + "5146611", + "5146651", + "5146659", + "5146677", + "5146693", + "5146720", + "5146746", + "5146752", + "5146762", + "5146774", + "5146805", + "5146820", + "5146832", + "5146833", + "5146837", + "5146842", + "5146852", + "5146856", + "5146862", + "5146880", + "5146883", + "5146894", + "5146899", + "5146908", + "5146920", + "5146927", + "5146937", + "5146946", + "5146961", + "5147002", + "5147018", + "5147038", + "5147039", + "5147041", + "5147043", + "5147046", + "5147058", + "5147062", + "5147071", + "5147099", + "5147109", + "5147114", + "5147121", + "5147139", + "5147145", + "5147150", + "5147155", + "5147160", + "5147165", + "5147171", + "5147179", + "5147193", + "5147208", + "5147211", + "5147212", + "5147225", + "5147232", + "5147245", + "5147287", + "5147306", + "5147319", + "5147354", + "5147395", + "5147415", + "5147437", + "5147441", + "5147478", + "5147492", + "5147513", + "5147516", + "5147522", + "5147534", + "5147560", + "5147608", + "5147638", + "5147681", + "5147703", + "5147713", + "5147827", + "5147834", + "5147838", + "5147858", + "5147868", + "5147871", + "5147879", + "5147883", + "5147894", + "5147898", + "5147899", + "5147909", + "5147917", + "5147923", + "5147968", + "5148043", + "5148055", + "5148096", + "5148097", + "5148184", + "5148214", + "5148223", + "5148247", + "5148248", + "5148252", + "5148264", + "5148277", + "5148280", + "5148286", + "5148379", + "5148394", + "5148424", + "5148436", + "5148462", + "5148475", + "5148486", + "5148487", + "5148520", + "5148531", + "5148544", + "5148576", + "5148593", + "5148719", + "5148743", + "5148753", + "5148766", + "5148850", + "5148934", + "5148952", + "5148954", + "5149012", + "5149081", + "5149136", + "5149174", + "5149182", + "5149237", + "5149307", + "5149308", + "5149315", + "5149317", + "5149369", + "5149370", + "5149371", + "5149414", + "5149438", + "5149474", + "5149499", + "5149569", + "5149609", + "5149630", + "5149631", + "5149659", + "5149664", + "5149665", + "5149667", + "5149704", + "5149713", + "5149746", + "5149753", + "5149768", + "5149777", + "5149780", + "5149782", + "5149784", + "5149787", + "5149819", + "5149820", + "5149836", + "5149839", + "5149843", + "5149873", + "5149880", + "5149940", + "5149986", + "5150053", + "5150092", + "5714299", + "5714302", + "5714312", + "5714333", + "5714356", + "5714361", + "5714367", + "5714369", + "5714410", + "5714507", + "5714558", + "5714572", + "5714575", + "5714618", + "5714680", + "5714747", + "5714755", + "5714788", + "5714914", + "5714973", + "5714984", + "5714994", + "5715004", + "5715009", + "5715010", + "5715013", + "5715127", + "5715275", + "5715276", + "5715277", + "5715278", + "5715280", + "5715281", + "5734138", + "5734146", + "5734212", + "5734291", + "5734305", + "5734326", + "5734335", + "5734344", + "5734345", + "5734349", + "5734362", + "5734379", + "5734388", + "5734396", + "5734398", + "5734405", + "5734420", + "5734448", + "5734451", + "5734515", + "5734519", + "5734528", + "5734535", + "5734539", + "5734542", + "5734543", + "5734556", + "5734560", + "5734569", + "5734655", + "5734657", + "5734713", + "5734719", + "5734744", + "5734817", + "5734891", + "5734897", + "5734900", + "5734901", + "5768880", + "5769028", + "5769062", + "5769068", + "5769072", + "5769164", + "5769191", + "5769272", + "5769709", + "5770913", + "5770922", + "5770942", + "5771227", + "5771230", + "5771232", + "5771236", + "5771239", + "5771243", + "5771249", + "5771255", + "5771256", + "5771258", + "5771259", + "5771350", + "5771357", + "5771877", + "5771982", + "5772063", + "5772129", + "5772169", + "5772171", + "5772172", + "5772176", + "5772178", + "5772180", + "5772186", + "5772196", + "5772199", + "5772202", + "5772205", + "5772206", + "5772210", + "5772222", + "5772269", + "5772309", + "5772349", + "5772351", + "5772446", + "5772702", + "5772749", + "5772890", + "5772948", + "5792081", + "5792092", + "5802248", + "5802256", + "5802257", + "5802331", + "5802333", + "5802339", + "5802396", + "5802625", + "5803065", + "5803588", + "5804166", + "5804895", + "5805407", + "5805954", + "5806127", + "5806132", + "5806166", + "5806167", + "5806175", + "5806176", + "5806177", + "5806244", + "5806333", + "5806352", + "5806353", + "5806391", + "5806412", + "5879654", + "5880040", + "5880041", + "5880063", + "5880147", + "5880258", + "5880367", + "5880392", + "5880478", + "5880512", + "5880533", + "5880539", + "5880545", + "5880550", + "5880552", + "5880559", + "5880563", + "5881397", + "5881400", + "5881551", + "5881748", + "5881946", + "5882039", + "5882965", + "5883052", + "5883255", + "5883881", + "5883925", + "5883985", + "5884188", + "5884243", + "5884245", + "5884247", + "5884258", + "5884571", + "5884851", + "5884888", + "5885399", + "5885428", + "5925238", + "5925317", + "5976937", + "5977179", + "5977185", + "5977197", + "5977203", + "5977207", + "5977208", + "5977214", + "5977216", + "5977220", + "5977235", + "5977247", + "5977250", + "5977251", + "5977257", + "5977259", + "5977260", + "5977261", + "5977262", + "6097214", + "6097225", + "6097228", + "6097233", + "6097234", + "6097235", + "6097236", + "6097254", + "6097260", + "6097269", + "6099041", + "6100725", + "6100726", + "6106647", + "6106744", + "6106759", + "6106943", + "6112449", + "6112547", + "6112606", + "6112610", + "6112613", + "6112634", + "6112661", + "6113873", + "6113959", + "6115283", + "6115388", + "6115426", + "6115437", + "6115504", + "6115793", + "6115822", + "6115830", + "6115946", + "6115953", + "6115973", + "6116073", + "6116341", + "6116368", + "6116440", + "6116646", + "6116661", + "6116674", + "6116699", + "6116754", + "6116899", + "6117055", + "6117124", + "6117485", + "6118530", + "6119299", + "6119323", + "6119488", + "6120803", + "6120861", + "6120980", + "6121010", + "6121184", + "6121218", + "6121912", + "6122103", + "6122301", + "6122364", + "6122527", + "6132711", + "6132712", + "6132715", + "6132723", + "6132728", + "6132729", + "6132781", + "6132797", + "6132809", + "6132824", + "6132826", + "6132841", + "6132850", + "6132868", + "6132869", + "6132915", + "6132916", + "6132917", + "6132936", + "6132938", + "6132953", + "6132957", + "6132966", + "6132967", + "6132971", + "6132974", + "6132979", + "6132989", + "6133001", + "6133002", + "6133007", + "6133011", + "6133013", + "6133026", + "6133029", + "6133033", + "6133051", + "6133058", + "6133069", + "6133075", + "6133081", + "6133083", + "6133117", + "6133141", + "6133154", + "6133158", + "6133181", + "6133182", + "6133232", + "6133241", + "6133242", + "6133244", + "6133248", + "6133252", + "6133262", + "6133264", + "6133269", + "6133270", + "6133271", + "6133292", + "6133297", + "6133311", + "6133312", + "6133313", + "6133315", + "6133317", + "6133325", + "6133340", + "6133343", + "6133397", + "6133441", + "6133481", + "6133498", + "6133500", + "6133501", + "6133502", + "6133509", + "6133513", + "6133516", + "6133517", + "6133518", + "6133519", + "6133520", + "6133523", + "6133525", + "6133528", + "6133534", + "6133540", + "6133542", + "6133546", + "6133548", + "6133552", + "6133559", + "6133560", + "6133562", + "6133575", + "6133582", + "6133585", + "6133586", + "6133591", + "6133593", + "6133595", + "6133604", + "6133607", + "6133614", + "6133619", + "6133635", + "6133637", + "6133643", + "6133648", + "6133659", + "6133667", + "6133670", + "6133673", + "6133674", + "6133676", + "6133680", + "6133681", + "6133684", + "6133687", + "6133688", + "6133691", + "6133700", + "6133720", + "6133742", + "6133750", + "6133769", + "6133777", + "6133780", + "6133803", + "6133806", + "6133809", + "6133811", + "6133813", + "6133858", + "6134027", + "6134035", + "6196939", + "6197138", + "6198302", + "6201790", + "6205994", + "6207059", + "6214734", + "6219423", + "6221746", + "6228464", + "6229058", + "6231906", + "6544581", + "6544637", + "6544687", + "7207679", + "7345742", + "7345777", + "7345801", + "7345811", + "7345813", + "7345819", + "7345829", + "7345843", + "7346231", + "7346236", + "7346237", + "7346240", + "7346249", + "7346252", + "7346256", + "7346263", + "7346276", + "7346284", + "7346286", + "7346301", + "7346328", + "7346335", + "7346340", + "7346344", + "7346346", + "7346351", + "7346354", + "7346356", + "7346381", + "7346382", + "7346384", + "7346401", + "7346407", + "7346417", + "7346426", + "7346430", + "7346434", + "7346444", + "7346446", + "7350238", + "7354189", + "7372375", + "7383338", + "7387466", + "7388922", + "7389824", + "7390086", + "7396517", + "7398419", + "7400814", + "7410701", + "7428726", + "7429212", + "7431428", + "7438067", + "7443518", + "7444489", + "7446048", + "7448174", + "7466487", + "7472845", + "7480993", + "7507369", + "7509928", + "7535515", + "7541913", + "7543006", + "7555991", + "7558165", + "7560807", + "7562564", + "7586742", + "7588222", + "7589577", + "7593392", + "7596232", + "7598729", + "7598945", + "7603634", + "7611914", + "7622059", + "7623903", + "7624468", + "7624494", + "7628188", + "7633472", + "7634721", + "7642610", + "7646066", + "7654770", + "7656811", + "7657419", + "7661023", + "7661785", + "7664111", + "7664771", + "7672864", + "7673242", + "7674502", + "7681733", + "7683096", + "7689966", + "7700512", + "7700568", + "7701550", + "7712384", + "7712938", + "7716829", + "7717385", + "7717983", + "7725644", + "7726809", + "7728366", + "7734292", + "7738295", + "7741315", + "7752082", + "7753668", + "7761138", + "7762841", + "7764232", + "7767114", + "7768584", + "7768674", + "7769543", + "7776011", + "7778368", + "7779226", + "7780930", + "7785540", + "7791190", + "7791558", + "7798382", + "7799370", + "7800469", + "7803585", + "7809779", + "7825945", + "7851302", + "7854318", + "7864212", + "7867379", + "7869346", + "7870336", + "7874258", + "7875265", + "7877231", + "7882824", + "7895336", + "7903078", + "7905361", + "7909858", + "7911151", + "7917033", + "7918000", + "7919880", + "7921916", + "7924383", + "7934873", + "7937573", + "7940536", + "7946946", + "7955974", + "7958169", + "7960566", + "7964262", + "7964910", + "7972792", + "7973517", + "7975250", + "7976145", + "7981372", + "7981386", + "7988195", + "7988274", + "7993353", + "7996464", + "8000103", + "8001799", + "8007222", + "8008237", + "8014296", + "8015612", + "8015895", + "8016522", + "8016905", + "8021109", + "8023645", + "8035998", + "8038357", + "8043500", + "8045644", + "8047165", + "8047343", + "8048904", + "8049830", + "8050639", + "8067894", + "8073674", + "8078362", + "8086347", + "8094357", + "8102790", + "8103163", + "8105817", + "8108800", + "8109173", + "8111395", + "8133328", + "8133678", + "8137978", + "8138711", + "8140883", + "8141741", + "8146570", + "8148822", + "8150089", + "8150450", + "8158342", + "8160782", + "8165185", + "8167638", + "8167743", + "8168644", + "8172949", + "8176911", + "8177775", + "8178453", + "8178854", + "8180900", + "8186212", + "8189761", + "8193562", + "8200050", + "8201251", + "8203812", + "8208583", + "8214814", + "8215326", + "8218441", + "8219149", + "8222049", + "8223165", + "8225376", + "8233062", + "8237987", + "8244266", + "8247566", + "8253467", + "8254441", + "8262357", + "8270406", + "8271010", + "8273661", + "8273859", + "8277078", + "8292351", + "8292872", + "8295666", + "8298764", + "8312017", + "8313553", + "8314088", + "8322165", + "8324720", + "8325294", + "8326103", + "8329661", + "8331687", + "8345567", + "8345820", + "8345991", + "8348761", + "8352161", + "8355390", + "8356768", + "8361848", + "8363507", + "8363709", + "8366158", + "8367663", + "8369868", + "8379616", + "8384839", + "8388883", + "8389961", + "8393082", + "8393221", + "8394261", + "8396242", + "8397564", + "8402212", + "8404037", + "8405656", + "8407461", + "8411753", + "8414310", + "8416348", + "8420632", + "8421569", + "8424964", + "8424972", + "8425580", + "8426357", + "8429622", + "8439879", + "8440999", + "8445010", + "8491927", + "8501203", + "8503184", + "8532380", + "8537359", + "8543494", + "8546322", + "8548427", + "8549720", + "8551997", + "8559137", + "8562506", + "8574752", + "8581601", + "8604089", + "8624848", + "8643155", + "8643309", + "8647523", + "8669164", + "8691947", + "8708745", + "8720118", + "8723161", + "8725248", + "8727750", + "8729319", + "8734090", + "8734154", + "8741260", + "8742426", + "8751100", + "8755207", + "8756768", + "8763986", + "8766638", + "8774985", + "8775810", + "8779506", + "8782891", + "8790054", + "8792353", + "8793278", + "8793324", + "8793873", + "8793973", + "8797666", + "8802610", + "8805966", + "8810143", + "8810912", + "8818378", + "8823068", + "8825450", + "8825467", + "8828146", + "8831819", + "8832485", + "8833509", + "8834672", + "8837162", + "8837974", + "8843927", + "8846776", + "8847500", + "8849480", + "8851663", + "8856895", + "8858121", + "8869900", + "8871600", + "8872165", + "8874140", + "8874633", + "8876855", + "8877458", + "8883183", + "8890502", + "8897869", + "8904480", + "8905759", + "8908724", + "8918036", + "8924506", + "8928353", + "8929537", + "8933773", + "8941801", + "8941993", + "8943174", + "8951523", + "8951618", + "8955839", + "8956567", + "8956729", + "8958353", + "8963926", + "8964866", + "8968321", + "8978362", + "8981028", + "8982591", + "8992718", + "9002107", + "9007213", + "9008379", + "9015218", + "9016382", + "9017206", + "9022399", + "9023222", + "9028122", + "9038042", + "9050611", + "9051758", + "9051888", + "9053308", + "9059564", + "9062262", + "9068968", + "9072828", + "9086331", + "9087922", + "9092175", + "9100030", + "9101339", + "9105656", + "9110918", + "9111961", + "9113409", + "9114044", + "9119710", + "9135821", + "9135886", + "9136904", + "9137631", + "9146244", + "9148810", + "9156165", + "9156458", + "9157410", + "9159662", + "9163659", + "9174377", + "9175037", + "9176043", + "9181627", + "9183738", + "9190731", + "9192882", + "9208233", + "9208918", + "9213204", + "9216200", + "9219266", + "9219529", + "9220953", + "9228024", + "9233420", + "9235027", + "9235225", + "9236138", + "9237031", + "9237599", + "9237621", + "9238900", + "9240216", + "9240357", + "9240588", + "9241105", + "9242559", + "9242609", + "9243117", + "9243264", + "9243764", + "9243875", + "9244066", + "9244973", + "9247563", + "9247947", + "9248329", + "9248830", + "9249036", + "9249651", + "9250744", + "9251088", + "9251096", + "9252524", + "9253819", + "9254017", + "9254157", + "9255102", + "9255328", + "9255512", + "9256436", + "9256786", + "9257793", + "9257908", + "9261296", + "9261458", + "9262981", + "9264326", + "9266866", + "9267364", + "9268082", + "9272461", + "9273409", + "9273963", + "9274899", + "9276279", + "9277294", + "9277330", + "9278311", + "9278398", + "9279670", + "9281181", + "9282469", + "9283228", + "9283948", + "9287097", + "9288185", + "9288386", + "9288596", + "9288979", + "9289753", + "9289908", + "9290866", + "9291075", + "9291092", + "9291297", + "9292394", + "9294363", + "9297059", + "9298735", + "9299326", + "9301336", + "9305011", + "9305798", + "9306367", + "9307098", + "9307254", + "9307713", + "9308082", + "9308930", + "9309575", + "9310286", + "9310369", + "9310510", + "9310626", + "9311081", + "9312545", + "9313634", + "9314022", + "9315577", + "9315833", + "9320776", + "9320916", + "9321500", + "9322646", + "9323382", + "9324570", + "9325654", + "9327042", + "9327259", + "9328683", + "9330467", + "9331464", + "9332369", + "9332550", + "9334639", + "9334851", + "9336001", + "9337858", + "9338769", + "9339487", + "9340070", + "9340452", + "9342344", + "9343385", + "9344456", + "9345545", + "9347308", + "9348210", + "9350484", + "9352348", + "9352978", + "9353360", + "9354496", + "9355107", + "9355953", + "9356491", + "9357385", + "9358521", + "9359597", + "9359871", + "9362190", + "9362560", + "9362785", + "9363692", + "9366016", + "9366762", + "9367471", + "9367674", + "9368026", + "9368398", + "9368974", + "9369576", + "9370070", + "9370312", + "9370933", + "9372988", + "9373309", + "9373686", + "9374637", + "9377268", + "9379595", + "9379855", + "9381852", + "9382044", + "9382415", + "9385576", + "9387353", + "9387782", + "9388726", + "9390065", + "9390293", + "9391442", + "9391467", + "9392058", + "9392076", + "9392084", + "9392614", + "9394138", + "9395000", + "9395261", + "9396180", + "9399145", + "9399288", + "9400545", + "9400895", + "9400916", + "9400977", + "9402536", + "9403481", + "9404919", + "9406020", + "9406822", + "9406984", + "9407200", + "9410076", + "9410414", + "9414984", + "9415435", + "9415669", + "9416645", + "9418549", + "9419734", + "9420824", + "9423248", + "9423863", + "9424082", + "9424441", + "9424464", + "9424681", + "9424853", + "9425857", + "9426054", + "9426252", + "9426771", + "9428900", + "9432438", + "9432644", + "9432810", + "9433772", + "9434954", + "9436173", + "9438677", + "9438913", + "9440183", + "9440644", + "9442902", + "9443159", + "9445489", + "9446281", + "9446902", + "9447614", + "9448761", + "9449132", + "9451320", + "9452274", + "9452497", + "9452702", + "9453490", + "9454052", + "9454291", + "9454444", + "9455404", + "9456004", + "9456735", + "9457324", + "9457757", + "9460510", + "9463442", + "9465978", + "9468297", + "9468667", + "9469139", + "9469300", + "9469928", + "9471709", + "9473121", + "9473918", + "9474256", + "9474405", + "9477531", + "9478331", + "9478424", + "9478718", + "9479525", + "9480768", + "9484411", + "9485481", + "9486293", + "9486411", + "9488754", + "9488783", + "9489399", + "9491341", + "9492499", + "9492640", + "9493016", + "9493317", + "9494431", + "9494526", + "9495306", + "9496311", + "9496896", + "9497623", + "9498206", + "9499599", + "9500553", + "9500945", + "9502606", + "9502724", + "9503548", + "9504222", + "9508913", + "9511345", + "9511749", + "9512631", + "9513830", + "9516038", + "9516680", + "9517291", + "9519191", + "9519321", + "9520799", + "9524458", + "9525172", + "9526331", + "9527919", + "9530135", + "9530200", + "9530271", + "9530406", + "9530928", + "9530977", + "9533271", + "9533293", + "9534291", + "9534429", + "9534690", + "9535420", + "9538525", + "9538684", + "9539128", + "9539292", + "9541133", + "9541734", + "9541908", + "9544337", + "9544558", + "9545331", + "9545480", + "9545713", + "9546514", + "9546910", + "9547140", + "9547535", + "9547676", + "9548726", + "9548993", + "9549172", + "9549475", + "9550265", + "9551544", + "9552253", + "9552466", + "9552703", + "9553692", + "9554074", + "9555094", + "9556427", + "9558845", + "9558873", + "9559336", + "9560018", + "9560404", + "9560782", + "9561820", + "9562175", + "9563355", + "9563837", + "9564612", + "9564779", + "9565980", + "9568710", + "9571514", + "9573163", + "9574801", + "9574939", + "9577234", + "9577547", + "9578319", + "9579309", + "9579730", + "9581695", + "9581976", + "9586329", + "9586705", + "9589234", + "9590057", + "9590066", + "9590272", + "9591877", + "9592714", + "9593098", + "9593393", + "9593475", + "9594509", + "9595155", + "9596498", + "9597741", + "9599150", + "9601788", + "9604825", + "9606779", + "9607036", + "9607447", + "9608673", + "9610059", + "9610080", + "9610447", + "9611624", + "9612009", + "9616658", + "9617411", + "9617496", + "9618068", + "9619088", + "9621086", + "9621113", + "9621271", + "9622117", + "9622725", + "9622955", + "9623131", + "9623220", + "9624918", + "9625112", + "9626037", + "9626500", + "9627567", + "9627917", + "9629365", + "9629450", + "9630748", + "9632824", + "9633615", + "9634575", + "9636267", + "9636442", + "9637664", + "9645309", + "9663271", + "9674732", + "9675743", + "9686431", + "9689122", + "9700261", + "9724183", + "9734171", + "9745549", + "9746673", + "9748079", + "9749806", + "9752950", + "9754232", + "9755262", + "9759340", + "9760511", + "9776414", + "9777614", + "9778438", + "9782192", + "9790007", + "9792270", + "9801765", + "9803522", + "9804158", + "9805848", + "9807789", + "9812211", + "9816676", + "9819403", + "9826405", + "9830270", + "9833933", + "9835867", + "9836014", + "9837762", + "9840570", + "9849625", + "9851221", + "9851261", + "9851867", + "9852545", + "9857679", + "9858922", + "9859868", + "9860684", + "9860902", + "9864281", + "9867379", + "9875111", + "9875141", + "9880932", + "9882683", + "9883140", + "9883274", + "9883856", + "9885192", + "9890366", + "9893740", + "9894093", + "9895629", + "9896144", + "9899724", + "9904499", + "9906229", + "9906979", + "9909775", + "9911298", + "9913863", + "9914882", + "9916153", + "9919915", + "9921001", + "9923283", + "9925669", + "9927378", + "9932090", + "9935837", + "9939530", + "9941073", + "9942354", + "9943941", + "9944922", + "9948031", + "9950697", + "9952043", + "9953708", + "9954885", + "9956017", + "9957790", + "9958147", + "9959898", + "9960072", + "9960318", + "9963153", + "9964857", + "9967251", + "9967529", + "9968404", + "9971153", + "9972403", + "9973217", + "9975134", + "9976926", + "9977181", + "9981187", + "9983244", + "9983957", + "9985020", + "9987116", + "9988287", + "9989156", + "9994384", + "9998920", + "9999965" + ], + "zero/genus": [ + "10017524", + "10025997", + "10175914", + "10268975", + "10272567", + "10283055", + "10330071", + "10381192", + "10416544", + "10484957", + "10494601", + "10527924", + "10552471", + "10583848", + "10777718", + "10800539", + "10836135", + "10836231", + "10864898", + "10874367", + "10874844", + "10876650", + "10903022", + "10956237", + "10962816", + "10965723", + "10976134", + "10988777", + "10990846", + "11024850", + "11027113", + "11057282", + "11064851", + "11070822", + "11425419", + "11442724", + "11462628", + "11486436", + "11491719", + "11495707", + "11527985", + "11556078", + "11596224", + "11654220", + "11715392", + "11748480", + "11760262", + "11760445", + "11783346", + "11879268", + "11902924", + "11907720", + "11954625", + "11955428", + "12031311", + "12047421", + "12076089", + "12105049", + "1214429", + "12152411", + "12206130", + "12225180", + "12246183", + "12260643", + "1369661", + "1555575", + "1730471", + "1730685", + "1730705", + "1730737", + "1730763", + "1730815", + "1730935", + "1731096", + "1731220", + "1731226", + "1731291", + "1731363", + "1731505", + "1731584", + "1731712", + "1731748", + "1731800", + "1731817", + "1731859", + "1731885", + "1731891", + "1732047", + "1732062", + "1732085", + "1732089", + "1732160", + "1732397", + "1732442", + "1732496", + "1732599", + "1732658", + "1732661", + "1732761", + "1732814", + "1732834", + "1732862", + "1732883", + "1732969", + "1733135", + "1733242", + "1733338", + "1733502", + "1733524", + "1733529", + "1733574", + "1733617", + "1733670", + "1733831", + "1733840", + "1734381", + "1734388", + "1734505", + "1734548", + "1734683", + "1734849", + "1734934", + "1735093", + "1735256", + "1735272", + "1735289", + "1735406", + "1735409", + "1735487", + "1735631", + "1735652", + "1735814", + "1735869", + "1736266", + "1736314", + "1736354", + "1736359", + "1736388", + "1736409", + "1736418", + "1736444", + "1736460", + "1736612", + "1736656", + "1736725", + "1736758", + "1736793", + "1736802", + "1736834", + "1736895", + "1736951", + "1737021", + "1737063", + "1737084", + "1737110", + "1737177", + "1737228", + "1737303", + "1737335", + "1737519", + "1737647", + "1737701", + "1738021", + "1738049", + "1738065", + "1738143", + "1738215", + "1738242", + "1738265", + "1738583", + "1738667", + "1738881", + "1739000", + "1739048", + "1739060", + "1739336", + "1739398", + "1739418", + "1739446", + "1739550", + "1739599", + "1739724", + "1740434", + "1740515", + "1740664", + "1740796", + "1740814", + "1741043", + "1741073", + "1741082", + "1741128", + "1741141", + "1741314", + "1741338", + "1741383", + "1741404", + "1741540", + "1741547", + "1741557", + "1741585", + "1741717", + "1741805", + "1742045", + "1742061", + "1742345", + "1742398", + "1742419", + "1743173", + "1743188", + "1743269", + "1743318", + "1743343", + "1743404", + "1743452", + "1743459", + "1743467", + "1743485", + "1743516", + "1743637", + "1743652", + "1743656", + "1743673", + "1743690", + "1743762", + "1743811", + "1743926", + "1743994", + "1744049", + "1744129", + "1744133", + "1744165", + "1744208", + "1744219", + "1744237", + "1744240", + "1744481", + "1744587", + "1744687", + "1744691", + "1744761", + "1744928", + "1744946", + "1744993", + "1745017", + "1745021", + "1745076", + "1745086", + "1745285", + "1745549", + "1745894", + "1745922", + "1745927", + "1746012", + "1746172", + "1746324", + "1746399", + "1746437", + "1746461", + "1746562", + "1746600", + "1746694", + "1746712", + "1746749", + "1746994", + "1747019", + "1747044", + "1747067", + "1747122", + "1747195", + "1747209", + "1747242", + "1747506", + "1747611", + "1747625", + "1747723", + "1747904", + "1747949", + "1748099", + "1748143", + "1748201", + "1748277", + "1748368", + "1748560", + "1748645", + "1748748", + "1748757", + "1748777", + "1748799", + "1748889", + "1748902", + "1749042", + "1749068", + "1749116", + "1749137", + "1749286", + "1749401", + "1749505", + "1749662", + "1749712", + "1749732", + "1750313", + "1750339", + "1750759", + "1751200", + "1751227", + "1751482", + "1751552", + "1751655", + "1751789", + "1751846", + "1751979", + "1752035", + "1752100", + "1752158", + "1752234", + "1752236", + "1752277", + "1752321", + "1752361", + "1752382", + "1752482", + "1752533", + "1752552", + "1752650", + "1752744", + "1752804", + "1752820", + "1752848", + "1752891", + "1752899", + "1752915", + "1752944", + "1752965", + "1753080", + "1753104", + "1753147", + "1753211", + "1753224", + "1753410", + "1753458", + "1753548", + "1753594", + "1753630", + "1753657", + "1753747", + "1753802", + "1753826", + "1753830", + "1753896", + "1753921", + "1753981", + "1754133", + "1754176", + "1754253", + "1754269", + "1754315", + "1754329", + "1754344", + "1754391", + "1754412", + "1754508", + "1754609", + "1754799", + "1754857", + "1754901", + "1754916", + "1754927", + "1755149", + "1755233", + "1755294", + "1757647", + "1757668", + "1757834", + "1757850", + "1757883", + "1757993", + "1758098", + "1758439", + "1758446", + "1758610", + "1758620", + "1758718", + "1758724", + "1758765", + "1758790", + "1758812", + "1758827", + "1758859", + "1758873", + "1758939", + "1759029", + "1759152", + "1759329", + "1759405", + "1759552", + "1759711", + "1759767", + "1759797", + "1759812", + "1759878", + "1759882", + "1760088", + "1760135", + "1760168", + "1760198", + "1760260", + "1760285", + "1760355", + "1760382", + "1760401", + "1760447", + "1760583", + "1760588", + "1760678", + "1760738", + "1760849", + "1760914", + "1760928", + "1760946", + "1760969", + "1761017", + "1761094", + "1761132", + "1761207", + "1761351", + "1761388", + "1761401", + "1761495", + "1761539", + "1761550", + "1761561", + "1761571", + "1761728", + "1761750", + "1761775", + "1761787", + "1761797", + "1761815", + "1761829", + "1761857", + "1761889", + "1762149", + "1762194", + "1762212", + "1762225", + "1762232", + "1762280", + "1762346", + "1762414", + "1762605", + "1762640", + "1762666", + "1762711", + "1762841", + "1762885", + "1762898", + "1763151", + "1763285", + "1763588", + "1763591", + "1763597", + "1763649", + "1763693", + "1763713", + "1763777", + "1763951", + "1764015", + "1764140", + "1764158", + "1764187", + "1764234", + "1764504", + "1764524", + "1764537", + "1764638", + "1764670", + "1764684", + "1764737", + "1764851", + "1764916", + "1764920", + "1765092", + "1765161", + "1765176", + "1765207", + "1765601", + "1765652", + "1765657", + "1765726", + "1765763", + "1765861", + "1765877", + "1765949", + "1765960", + "1766066", + "1766077", + "1766123", + "1766234", + "1766259", + "1766265", + "1766280", + "1766366", + "1766538", + "1766547", + "1766624", + "1766671", + "1766708", + "1766838", + "1766883", + "1766908", + "1766914", + "1767029", + "1767032", + "1767046", + "1767093", + "1767210", + "1767304", + "1767334", + "1767360", + "1767483", + "1767496", + "1767504", + "1767509", + "1767566", + "1767590", + "1767644", + "1767714", + "1767752", + "1767796", + "1767878", + "1767949", + "1768106", + "1768130", + "1768136", + "1768165", + "1768222", + "1768281", + "1768302", + "1768411", + "1768432", + "1768542", + "1768561", + "1768579", + "1768691", + "1768896", + "1768949", + "1768971", + "1768999", + "1769024", + "1769051", + "1769098", + "1769110", + "1769165", + "1769189", + "1769208", + "1769212", + "1769311", + "1769330", + "1769393", + "1769504", + "1769735", + "1769812", + "1769819", + "1769933", + "1769943", + "1769945", + "1769972", + "1770011", + "1770123", + "1770169", + "1770274", + "1770379", + "1770396", + "1770488", + "1770592", + "1770658", + "1771356", + "1771363", + "1771448", + "1771454", + "1771501", + "1771541", + "1771549", + "1771562", + "1771845", + "1771850", + "1771866", + "1771871", + "1771881", + "1771972", + "1771980", + "1772042", + "1772053", + "1772092", + "1772151", + "1772155", + "1772253", + "1772259", + "1772349", + "1772359", + "1772421", + "1772425", + "1772445", + "1772455", + "1772540", + "1772660", + "1772714", + "1772783", + "1772826", + "1772926", + "1773740", + "1773781", + "1773846", + "1773983", + "1774090", + "1774237", + "1774251", + "1774256", + "1774309", + "1774357", + "1774366", + "1774573", + "1774778", + "1774846", + "1774853", + "1774906", + "1774917", + "1774940", + "1774947", + "1775029", + "1775058", + "1775081", + "1775144", + "1775149", + "1775234", + "1775285", + "1775298", + "1775310", + "1775505", + "1775624", + "1775633", + "1775663", + "1775833", + "1775864", + "1775887", + "1775910", + "1775959", + "1775969", + "1775975", + "1775986", + "1776166", + "1776168", + "1776181", + "1776205", + "1776246", + "1776299", + "1776391", + "1776454", + "1776498", + "1776576", + "1776846", + "1776978", + "1777014", + "1777101", + "1777140", + "1777156", + "1777174", + "1777243", + "1777260", + "1777277", + "1777560", + "1777629", + "1777724", + "1777734", + "1777760", + "1777863", + "1777868", + "1777907", + "1777925", + "1777971", + "1778073", + "1778108", + "1778114", + "1778136", + "1778156", + "1778332", + "1778406", + "1778497", + "1778527", + "1778544", + "1778574", + "1778600", + "1778626", + "1778686", + "1778695", + "1779253", + "1779398", + "1779429", + "1779445", + "1779611", + "1779630", + "1779666", + "1779682", + "1779739", + "1779957", + "1780042", + "1780068", + "1780139", + "1780207", + "1780269", + "1780300", + "1780615", + "1780700", + "1780844", + "1780855", + "1780861", + "1780913", + "1781027", + "1781044", + "1781086", + "1781160", + "1781226", + "1781546", + "1781630", + "1781683", + "1781695", + "1781924", + "1781971", + "1782029", + "1782041", + "1782106", + "1782167", + "1782184", + "1782205", + "1782317", + "1782325", + "1782330", + "1782414", + "1782456", + "1782460", + "1782522", + "1782524", + "1782594", + "1782607", + "1782659", + "1783087", + "1783166", + "1783299", + "1783311", + "1783337", + "1783344", + "1783367", + "1783394", + "1783651", + "1783739", + "1783783", + "1783838", + "1783845", + "1783880", + "1783931", + "1783955", + "1784240", + "1784275", + "1784342", + "1784356", + "1784395", + "1784645", + "1784686", + "1784696", + "1784759", + "1784809", + "1784892", + "1785140", + "1785216", + "1785279", + "1785281", + "1785305", + "1785398", + "1785439", + "1785723", + "1785726", + "1785742", + "1785830", + "1785833", + "1785873", + "1785909", + "1785931", + "1786031", + "1786211", + "1786307", + "1786313", + "1786329", + "1786447", + "1786454", + "1786513", + "1786563", + "1786570", + "1786601", + "1786710", + "1786730", + "1786807", + "1786859", + "1786886", + "1786909", + "1786930", + "1786955", + "1787011", + "1787061", + "1787105", + "1787107", + "1787399", + "1787427", + "1787496", + "1787522", + "1787996", + "1788033", + "1788044", + "1788051", + "1788069", + "1788100", + "1788138", + "1788243", + "1788326", + "1788411", + "1788466", + "1788535", + "1788663", + "1788678", + "1788719", + "1788724", + "1788764", + "1788807", + "1788844", + "1788860", + "1788916", + "1788941", + "1789056", + "1789061", + "1789150", + "1789189", + "1789210", + "1789222", + "1789246", + "1789286", + "1789407", + "1789474", + "1789493", + "1789503", + "1789545", + "1789602", + "1789628", + "1789643", + "1789671", + "1789793", + "1789826", + "1789953", + "1789978", + "1790228", + "1790322", + "1790328", + "1790337", + "1790356", + "1790449", + "1790601", + "1790683", + "1790726", + "1790784", + "1790791", + "1790794", + "1790829", + "1790837", + "1790850", + "1790931", + "1790999", + "1791093", + "1791152", + "1791180", + "1791315", + "1791371", + "1791378", + "1791382", + "1791497", + "1791585", + "1791654", + "1791678", + "1791696", + "1791769", + "1791792", + "1791827", + "1791843", + "1791861", + "1791874", + "1792055", + "1792199", + "1792250", + "1792270", + "1792280", + "1792316", + "1792324", + "1792405", + "1792635", + "1792687", + "1792712", + "1792752", + "1792764", + "1792816", + "1792825", + "1792984", + "1793188", + "1793190", + "1793222", + "1793290", + "1793320", + "1793366", + "1793417", + "1793452", + "1793571", + "1793603", + "1793660", + "1793684", + "1793697", + "1793856", + "1793887", + "1793981", + "1794099", + "1794349", + "1794423", + "1794496", + "1794509", + "1794512", + "1794529", + "1794570", + "1794630", + "1795041", + "1795061", + "1795072", + "1795103", + "1795126", + "1795443", + "1795478", + "1795656", + "1795782", + "1796204", + "1796209", + "1796225", + "1796256", + "1796272", + "1796302", + "1796328", + "1796358", + "1796408", + "1796469", + "1796639", + "1796782", + "1796837", + "1796957", + "1796971", + "1797038", + "1797073", + "1797586", + "1797726", + "1797730", + "1798007", + "1798027", + "1798083", + "1798089", + "1798097", + "1798277", + "1798308", + "1798340", + "1798362", + "1798377", + "1798421", + "1798440", + "1798478", + "1798509", + "1798514", + "1798902", + "1799163", + "1799180", + "1799416", + "1799429", + "1799669", + "1799687", + "1799702", + "1799723", + "1799771", + "1799789", + "1799868", + "1799993", + "1800016", + "1800085", + "1800142", + "1800236", + "1800430", + "1800437", + "1800464", + "1800482", + "1800518", + "1800523", + "1800542", + "1800639", + "1800662", + "1800668", + "1800838", + "1800845", + "1800870", + "1800879", + "1800891", + "1800918", + "1800952", + "1800985", + "1800996", + "1801046", + "1801072", + "1801082", + "1801085", + "1801146", + "1801195", + "1801203", + "1801278", + "1801431", + "1801449", + "1801758", + "1801990", + "1802070", + "1802118", + "1802159", + "1802213", + "1802234", + "1802269", + "1802330", + "1802660", + "1802775", + "1802779", + "1802864", + "1802886", + "1802894", + "1802935", + "1802997", + "1803137", + "1803474", + "1803699", + "1803780", + "1803812", + "1803951", + "1804321", + "1804391", + "1804414", + "1804474", + "1804500", + "1804552", + "1804609", + "1804645", + "1804714", + "1804755", + "1804829", + "1804905", + "1804961", + "1805025", + "1805088", + "1805171", + "1805233", + "1805340", + "1805496", + "1805498", + "1805536", + "1805680", + "1805688", + "1805749", + "1805805", + "1805917", + "1806046", + "1806123", + "1806539", + "1806678", + "1806703", + "1806731", + "1806813", + "1806818", + "1806869", + "1806884", + "1806935", + "1807195", + "1807270", + "1807288", + "1807352", + "1807453", + "1807502", + "1807552", + "1807557", + "1807878", + "1807965", + "1808083", + "1808097", + "1808588", + "1808720", + "1808910", + "1808961", + "1809017", + "1809035", + "1809063", + "1809069", + "1809113", + "1809124", + "1809150", + "1809201", + "1809226", + "1809292", + "1809304", + "1809307", + "1809346", + "1809379", + "1809452", + "1809913", + "1809946", + "1809948", + "1809950", + "1810097", + "1810107", + "1810140", + "1810463", + "1810465", + "1810505", + "1810530", + "1810734", + "1810746", + "1810845", + "1810849", + "1810852", + "1810969", + "1810973", + "1811436", + "1811507", + "1811612", + "1811679", + "1812433", + "1812492", + "1812534", + "1812649", + "1812874", + "1812976", + "1813237", + "1813262", + "1814095", + "1814174", + "1814314", + "1814401", + "1814534", + "1814563", + "1814595", + "1814654", + "1814799", + "1814885", + "1814969", + "1815226", + "1815259", + "1815337", + "1815380", + "1815439", + "1815844", + "1815859", + "1815923", + "1816024", + "1816417", + "1816564", + "1816799", + "1816867", + "1816956", + "1817060", + "1817084", + "1817136", + "1817669", + "1817786", + "1817807", + "1817809", + "1817848", + "1817918", + "1817933", + "1818401", + "1818428", + "1818431", + "1818477", + "1818650", + "1818989", + "1819125", + "1819252", + "1819276", + "1819372", + "1819648", + "1819696", + "1819785", + "1819865", + "1819968", + "1820080", + "1820270", + "1820536", + "1820708", + "1821441", + "1822129", + "1822137", + "1822252", + "1822307", + "1822481", + "1822545", + "1822666", + "1822778", + "1822912", + "1823292", + "1823440", + "1823479", + "1823488", + "1823572", + "1823574", + "1823601", + "1823616", + "1823667", + "1823698", + "1823714", + "1824079", + "1824090", + "1824237", + "1824246", + "1824253", + "1824255", + "1824279", + "1824326", + "1824336", + "1824350", + "1824384", + "1824440", + "1824562", + "1824749", + "1824762", + "1824842", + "1824870", + "1825057", + "1825076", + "1825121", + "1825216", + "1825235", + "1825334", + "1825340", + "1825424", + "1825444", + "1825535", + "1825551", + "1825734", + "1825783", + "1825887", + "1825946", + "1825951", + "1825963", + "1826021", + "1826045", + "1826053", + "1826107", + "1826124", + "1826153", + "1826180", + "1826192", + "1826217", + "1826417", + "1826511", + "1826572", + "1826650", + "1827099", + "1827111", + "1827158", + "1827279", + "1827342", + "1827405", + "1827428", + "1827482", + "1827506", + "1827539", + "1827547", + "1827641", + "1827686", + "1827708", + "1827714", + "1827772", + "1827798", + "1827827", + "1828102", + "1828161", + "1828267", + "1828308", + "1828314", + "1828383", + "1828394", + "1828435", + "1828463", + "1828636", + "1828802", + "1828825", + "1828975", + "1829019", + "1829282", + "1829298", + "1829472", + "1829593", + "1829658", + "1829702", + "1830030", + "1830036", + "1830098", + "1830118", + "1830355", + "1830379", + "1830497", + "1830507", + "1830630", + "1830657", + "1830799", + "1830873", + "1830909", + "1831096", + "1831127", + "1831270", + "1831272", + "1831446", + "1831720", + "1831747", + "1831773", + "1831776", + "1831858", + "1831868", + "1832142", + "1832233", + "1832249", + "1832512", + "1832608", + "1832635", + "1832647", + "1832810", + "1833468", + "1833476", + "1833495", + "1833543", + "1833560", + "1833568", + "1833578", + "1833623", + "1833651", + "1833778", + "1833818", + "1834426", + "1834431", + "1834515", + "1834551", + "1834557", + "1834588", + "1834598", + "1834737", + "1834792", + "1834827", + "1835027", + "1835064", + "1835077", + "1835084", + "1835118", + "1835151", + "1835346", + "1835366", + "1835429", + "1835465", + "1835499", + "1835546", + "1835599", + "1835641", + "1835688", + "1835789", + "1835812", + "1835818", + "1835820", + "1835832", + "1836865", + "1836870", + "1836898", + "1836903", + "1837045", + "1837050", + "1837148", + "1837168", + "1837338", + "1837568", + "1837645", + "1837649", + "1837723", + "1837816", + "1837898", + "1837967", + "1838053", + "1838074", + "1838215", + "1838242", + "1838332", + "1838338", + "1838624", + "1838956", + "1838964", + "1839010", + "1839258", + "1839316", + "1839385", + "1839399", + "1839559", + "1839565", + "1839598", + "1839623", + "1839652", + "1839706", + "1839730", + "1839906", + "1840063", + "1840223", + "1840257", + "1840273", + "1840664", + "1841075", + "1841152", + "1841169", + "1841220", + "1841259", + "1841294", + "1841301", + "1841303", + "1841459", + "1841475", + "1841486", + "1841529", + "1842085", + "1842184", + "1842261", + "1842436", + "1842479", + "1842684", + "1842699", + "1842803", + "1842889", + "1843000", + "1843441", + "1843479", + "1843855", + "1843887", + "1843897", + "1845266", + "1845791", + "1845807", + "1845950", + "1845958", + "1845981", + "1846006", + "1846094", + "1846239", + "1846311", + "1846350", + "1846370", + "1846392", + "1846480", + "1846510", + "1846586", + "1846636", + "1846848", + "1846907", + "1847533", + "1847591", + "1847866", + "1847914", + "1847952", + "1847974", + "1848019", + "1848113", + "1848149", + "1848192", + "1848217", + "1848253", + "1848374", + "1848475", + "1848582", + "1848634", + "1848660", + "1848677", + "1848843", + "1849005", + "1849103", + "1849117", + "1849249", + "1849256", + "1849449", + "1849474", + "1849514", + "1849528", + "1849628", + "1849652", + "1849663", + "1849983", + "1850022", + "1850144", + "1850224", + "1850231", + "1850276", + "1850474", + "1850521", + "1850525", + "1850669", + "1850689", + "1850721", + "1850762", + "1850769", + "1850777", + "1850790", + "1850865", + "1851038", + "1851049", + "1851201", + "1851212", + "1851293", + "1851334", + "1851406", + "1851496", + "1851662", + "1851754", + "1851826", + "1852064", + "1852133", + "1852176", + "1852212", + "1852315", + "1852327", + "1852379", + "1852416", + "1852499", + "1852745", + "1852897", + "1852917", + "1853060", + "1853074", + "1853161", + "1853239", + "1853306", + "1853431", + "1853516", + "1853563", + "1853643", + "1854016", + "1854023", + "1854108", + "1854160", + "1854245", + "1854255", + "1854280", + "1854326", + "1854387", + "1854459", + "1854565", + "1854610", + "1854789", + "1854815", + "1854845", + "1854905", + "1854910", + "1854934", + "1855231", + "1855355", + "1855383", + "1855394", + "1855624", + "1855745", + "1855776", + "1855800", + "1855955", + "1856000", + "1856086", + "1856286", + "1856344", + "1856367", + "1856382", + "1856393", + "1856417", + "1856514", + "1856554", + "1856563", + "1856580", + "1856586", + "1856615", + "1856631", + "1856650", + "1856766", + "1856845", + "1856880", + "1857014", + "1857207", + "1857231", + "1857569", + "1857624", + "1857689", + "1857773", + "1857782", + "1857808", + "1857825", + "1857968", + "1858055", + "1858281", + "1858294", + "1858396", + "1858522", + "1858529", + "1858556", + "1858614", + "1858636", + "1858640", + "1858658", + "1858672", + "1858684", + "1858716", + "1858722", + "1858866", + "1858921", + "1859036", + "1859059", + "1859070", + "1859082", + "1859284", + "1859311", + "1859451", + "1859454", + "1859503", + "1859540", + "1859547", + "1859925", + "1859936", + "1860010", + "1860060", + "1860106", + "1860109", + "1860181", + "1860256", + "1860403", + "1860411", + "1860613", + "1860657", + "1860720", + "1860732", + "1861151", + "1861387", + "1861408", + "1861428", + "1861448", + "1861476", + "1861483", + "1861543", + "1861552", + "1861578", + "1861601", + "1861607", + "1861659", + "1861757", + "1861768", + "1861796", + "1861878", + "1861897", + "1861930", + "1861962", + "1861971", + "1861997", + "1862020", + "1862031", + "1862058", + "1862076", + "1862247", + "1862280", + "1862288", + "1862391", + "1862420", + "1862542", + "1862560", + "1862568", + "1862655", + "1862681", + "1862914", + "1862922", + "1863017", + "1863031", + "1863074", + "1863091", + "1863101", + "1863132", + "1863163", + "1863281", + "1863292", + "1863349", + "1863351", + "1863363", + "1863382", + "1863385", + "1863395", + "1863411", + "1863413", + "1863457", + "1863583", + "1863638", + "1863644", + "1863647", + "1863693", + "1863697", + "1863702", + "1863713", + "1863752", + "1863755", + "1863825", + "1863827", + "1863846", + "1863852", + "1863877", + "1863942", + "1863953", + "1863956", + "1864124", + "1864132", + "1864141", + "1864153", + "1864203", + "1864258", + "1864315", + "1864355", + "1864404", + "1864537", + "1864562", + "1864584", + "1864760", + "1864782", + "1864813", + "1864888", + "1864901", + "1865097", + "1865294", + "1865361", + "1865411", + "1865543", + "1865647", + "1865704", + "1865750", + "1865826", + "1865838", + "1865859", + "1865866", + "1865923", + "1865957", + "1866221", + "1866248", + "1866293", + "1866333", + "1866345", + "1866416", + "1866475", + "1866597", + "1866812", + "1866898", + "1866912", + "1866984", + "1867018", + "1867046", + "1867268", + "1867280", + "1867305", + "1867343", + "1867412", + "1867481", + "1867545", + "1867669", + "1867674", + "1867739", + "1867761", + "1867780", + "1867783", + "1867810", + "1867983", + "1867998", + "1868017", + "1868048", + "1868162", + "1868207", + "1868327", + "1868353", + "1868393", + "1868427", + "1868491", + "1868497", + "1868520", + "1868532", + "1868563", + "1868660", + "1868834", + "1868875", + "1868887", + "1869041", + "1869056", + "1869176", + "1869237", + "1869255", + "1869358", + "1869438", + "1869504", + "1869593", + "1869643", + "1869653", + "1869664", + "1869690", + "1869760", + "1869823", + "1869851", + "1869974", + "1870028", + "1870168", + "1870229", + "1870242", + "1870302", + "1870413", + "1870421", + "1870449", + "1870504", + "1870697", + "1870714", + "1870982", + "1871131", + "1871172", + "1871206", + "1871366", + "1871384", + "1871413", + "1871446", + "1871456", + "1871596", + "1871604", + "1871695", + "1871753", + "1871761", + "1871764", + "1871825", + "1871885", + "1871922", + "1871939", + "1871986", + "1872162", + "1872209", + "1872254", + "1872346", + "1872446", + "1872465", + "1872468", + "1872509", + "1872602", + "1872732", + "1872845", + "1873021", + "1873074", + "1873212", + "1873259", + "1873280", + "1873310", + "1873335", + "1873372", + "1873374", + "1873396", + "1873408", + "1873583", + "1873619", + "1873642", + "1873750", + "1873755", + "1873763", + "1873768", + "1873775", + "1873830", + "1873980", + "1874141", + "1874152", + "1874309", + "1874374", + "1874450", + "1874624", + "1874935", + "1874958", + "1875103", + "1875317", + "1875450", + "1875477", + "1875532", + "1875600", + "1875650", + "1875821", + "1875840", + "1875849", + "1875890", + "1876167", + "1876280", + "1876391", + "1876474", + "1876511", + "1876536", + "1876547", + "1876588", + "1876613", + "1876663", + "1876846", + "1876889", + "1876920", + "1876954", + "1876978", + "1876990", + "1877001", + "1877036", + "1877266", + "1877274", + "1877292", + "1877401", + "1877430", + "1877452", + "1877472", + "1877491", + "1877495", + "1877536", + "1877619", + "1877650", + "1877771", + "1877937", + "1878008", + "1878156", + "1878171", + "1878192", + "1878317", + "1878365", + "1878404", + "1878460", + "1878522", + "1878578", + "1878610", + "1878653", + "1878661", + "1878678", + "1878743", + "1878750", + "1878757", + "1878808", + "1878812", + "1878835", + "1878838", + "1878989", + "1879124", + "1879138", + "1879226", + "1879271", + "1879334", + "1879355", + "1879396", + "1879428", + "1879435", + "1879451", + "1879463", + "1879487", + "1879494", + "1879512", + "1879809", + "1879915", + "1880172", + "1880351", + "1880354", + "1880423", + "1880436", + "1880444", + "1880501", + "1880506", + "1880703", + "1880744", + "1880848", + "1880855", + "1880878", + "1880977", + "1881078", + "1881085", + "1881092", + "1881102", + "1881145", + "1881167", + "1881178", + "1881186", + "1881206", + "1881226", + "1881296", + "1881319", + "1881357", + "1881484", + "1881495", + "1881521", + "1881601", + "1881764", + "1881804", + "1881825", + "1881858", + "1881870", + "1882019", + "1882028", + "1882213", + "1882239", + "1882249", + "1882263", + "1882314", + "1882354", + "1882413", + "1882752", + "1882757", + "1882784", + "1882809", + "1882877", + "1882900", + "1882902", + "1882925", + "1883019", + "1883022", + "1883064", + "1883116", + "1883132", + "1883364", + "1883373", + "1883417", + "1883459", + "1883586", + "1883632", + "1883698", + "1883828", + "1883872", + "1883890", + "1883941", + "1883950", + "1883962", + "1883990", + "1884002", + "1884090", + "1884194", + "1884225", + "1884236", + "1884425", + "1884486", + "1884679", + "1884683", + "1884687", + "1884699", + "1884771", + "1884810", + "1884842", + "1884886", + "1884895", + "1884921", + "1884933", + "1884939", + "1884996", + "1885008", + "1885027", + "1885190", + "1885256", + "1885564", + "1885588", + "1885639", + "1885697", + "1885731", + "1885739", + "1885792", + "1885916", + "1885924", + "1885944", + "1885946", + "1886069", + "1886102", + "1886248", + "1886261", + "1886268", + "1886289", + "1886376", + "1886474", + "1886505", + "1886576", + "1886591", + "1886649", + "1886699", + "1886711", + "1886725", + "1886760", + "1886832", + "1886921", + "1886948", + "1886993", + "1887021", + "1887028", + "1887048", + "1887269", + "1887308", + "1887335", + "1887457", + "1887460", + "1887463", + "1887501", + "1887564", + "1887573", + "1887584", + "1887632", + "1887640", + "1887682", + "1887721", + "1888041", + "1888256", + "1888291", + "1888299", + "1888308", + "1888334", + "1888342", + "1888406", + "1888428", + "1888451", + "1888455", + "1888536", + "1888562", + "1888578", + "1888594", + "1888618", + "1888641", + "1888688", + "1888698", + "1888885", + "1888933", + "1888956", + "1889037", + "1889065", + "1889233", + "1889266", + "1889286", + "1889343", + "1889366", + "1889380", + "1889533", + "1889540", + "1889551", + "1889900", + "1889936", + "1890026", + "1890044", + "1890053", + "1890086", + "1890094", + "1890111", + "1890245", + "1890256", + "1890281", + "1890345", + "1890369", + "1891030", + "1891043", + "1891047", + "1891054", + "1891073", + "1891127", + "1891152", + "1891231", + "1891297", + "1891305", + "1891353", + "1891506", + "1891594", + "1891928", + "1892130", + "1892238", + "1892295", + "1892303", + "1892318", + "1892354", + "1892404", + "1892453", + "1892505", + "1892536", + "1892615", + "1892625", + "1892653", + "1892700", + "1892707", + "1892804", + "1892818", + "1892833", + "1892844", + "1892890", + "1892917", + "1892942", + "1892952", + "1893128", + "1893171", + "1893282", + "1893309", + "1893327", + "1893378", + "1893479", + "1893521", + "1893525", + "1893971", + "1894055", + "1894073", + "1894097", + "1894323", + "1894354", + "1894417", + "1894469", + "1894779", + "1895036", + "1895130", + "1895141", + "1895152", + "1895168", + "1895235", + "1895260", + "1895438", + "1895691", + "1895732", + "1895837", + "1895859", + "1895882", + "1895908", + "1896057", + "1896080", + "1896124", + "1896129", + "1896175", + "1896289", + "1896310", + "1896317", + "1896605", + "1896644", + "1896746", + "1896752", + "1896755", + "1896785", + "1896799", + "1896874", + "1896877", + "1896917", + "1896928", + "1897636", + "1897643", + "1897659", + "1897807", + "1897825", + "1897886", + "1897974", + "1898000", + "1898018", + "1898215", + "1898246", + "1898261", + "1898343", + "1898397", + "1898410", + "1898433", + "1898474", + "1898578", + "1898587", + "1898669", + "1898683", + "1898687", + "1898853", + "1898929", + "1899046", + "1899069", + "1899077", + "1899181", + "1899194", + "1899830", + "1899832", + "1899856", + "1899908", + "1899913", + "1899924", + "1899929", + "1899985", + "1899991", + "1900021", + "1900039", + "1900063", + "1900111", + "1900140", + "1900889", + "1900916", + "1900919", + "1900968", + "1900982", + "1901205", + "1901256", + "1901287", + "1901337", + "1901363", + "1901470", + "1901530", + "1901577", + "1901581", + "1901729", + "1901739", + "1901776", + "1901786", + "1901823", + "1901885", + "1902105", + "1902109", + "1902206", + "1902221", + "1902275", + "1902399", + "1902425", + "1902433", + "1902519", + "1902562", + "1902610", + "1902619", + "1902626", + "1902644", + "1902707", + "1902795", + "1902801", + "1902813", + "1902873", + "1902993", + "1903008", + "1903193", + "1903601", + "1903625", + "1903637", + "1903653", + "1903673", + "1904271", + "1904294", + "1904380", + "1904688", + "1904817", + "1904851", + "1904981", + "1905071", + "1905123", + "1905150", + "1905339", + "1905450", + "1906002", + "1906139", + "1906171", + "1906451", + "1906565", + "1906714", + "1907130", + "1907355", + "1907390", + "1907407", + "1907726", + "1907997", + "1908109", + "1908197", + "1908298", + "1908348", + "1908354", + "1908361", + "1908573", + "1908624", + "1908757", + "1908769", + "1908788", + "1908800", + "1908980", + "1909067", + "1909115", + "1909124", + "1909215", + "1909276", + "1909297", + "1909334", + "1909428", + "1909462", + "1909588", + "1909799", + "1909804", + "1909876", + "1909881", + "1909888", + "1910363", + "1910384", + "1910682", + "1910771", + "1910782", + "1910796", + "1911072", + "1911078", + "1911518", + "1911573", + "1911580", + "1911627", + "1911690", + "1911763", + "1911932", + "1911943", + "1912138", + "1912162", + "1912319", + "1912473", + "1912488", + "1912583", + "1913046", + "1913113", + "1913456", + "1914398", + "1914692", + "1914695", + "1915017", + "1915189", + "1915248", + "1915337", + "1915371", + "1915464", + "1915497", + "1915504", + "1915529", + "1916334", + "1916665", + "1916677", + "1916752", + "1916765", + "1916794", + "1917818", + "1918025", + "1918071", + "1918203", + "1918214", + "1918262", + "1918291", + "1918309", + "1918594", + "1918607", + "1918933", + "1918940", + "1918999", + "1919016", + "1919119", + "1919124", + "1919127", + "1919144", + "1919150", + "1919168", + "1919175", + "1919219", + "1919227", + "1919238", + "1919243", + "1919305", + "1919315", + "1919339", + "1919351", + "1919645", + "1919659", + "1919675", + "1919696", + "1919721", + "1919919", + "1919936", + "1919950", + "1919962", + "1920160", + "1920180", + "1920190", + "1920236", + "1920261", + "1920274", + "1920283", + "1920346", + "1920412", + "1920425", + "1920451", + "1920460", + "1920465", + "1920481", + "1920513", + "1920523", + "1920551", + "1920554", + "1920570", + "1920580", + "1920622", + "1920682", + "1920704", + "1920723", + "1920785", + "1920793", + "1920808", + "1920814", + "1920834", + "1920921", + "1920925", + "1920934", + "1921052", + "1921054", + "1921060", + "1921065", + "1921088", + "1921118", + "1921120", + "1921138", + "1921156", + "1921235", + "1921257", + "1921287", + "1921439", + "1921642", + "1921657", + "1921908", + "1921918", + "1921987", + "1922028", + "1922054", + "1922059", + "1922068", + "1922152", + "1922191", + "1922218", + "1922236", + "1922270", + "1922297", + "1922308", + "1922454", + "1922465", + "1922516", + "1922569", + "1922635", + "1922672", + "1922677", + "1922682", + "1922712", + "1922735", + "1922740", + "1922827", + "1922888", + "1922918", + "1922953", + "1922993", + "1923013", + "1923058", + "1923462", + "1923487", + "1923497", + "1923499", + "1923510", + "1923621", + "1923675", + "1923699", + "1923795", + "1923808", + "1923835", + "1923996", + "1924035", + "1924047", + "1924171", + "1924181", + "1924221", + "1924241", + "1924272", + "1924315", + "1924333", + "1924447", + "1924511", + "1924522", + "1924548", + "1924564", + "1924749", + "1924767", + "1924772", + "1924798", + "1925355", + "1925375", + "1925409", + "1925423", + "1925542", + "1925550", + "1925584", + "1925782", + "1925804", + "1925960", + "1925996", + "1926044", + "1926317", + "1926384", + "1926426", + "1926526", + "1926552", + "1926588", + "1926709", + "1926780", + "1926814", + "1926818", + "1926956", + "1927299", + "1927305", + "1927317", + "1927390", + "1927405", + "1927696", + "1927718", + "1927884", + "1927901", + "1927903", + "1927916", + "1927984", + "1928008", + "1928015", + "1928054", + "1928073", + "1928213", + "1928217", + "1928254", + "1928328", + "1928373", + "1928404", + "1928447", + "1928581", + "1928626", + "1928632", + "1928733", + "1928780", + "1928931", + "1929039", + "1929057", + "1929128", + "1929153", + "1929768", + "1930893", + "1930950", + "1931032", + "1931092", + "1931110", + "1931125", + "1931131", + "1931144", + "1931173", + "1931187", + "1931306", + "1931309", + "1931390", + "1931542", + "1931560", + "1931647", + "1931775", + "1931802", + "1931823", + "1931848", + "1932039", + "1932052", + "1932134", + "1932169", + "1932182", + "1932194", + "1932323", + "1932378", + "1932450", + "1932562", + "1932574", + "1932578", + "1932636", + "1932749", + "1932810", + "1932850", + "1932878", + "1932904", + "1932941", + "1932963", + "1933012", + "1933083", + "1933256", + "1933268", + "1933579", + "1933641", + "1933677", + "1933756", + "1933795", + "1933942", + "1933996", + "1934046", + "1934186", + "1934326", + "1934442", + "1934515", + "1934690", + "1934713", + "1934983", + "1935072", + "1935294", + "1935340", + "1935356", + "1935610", + "1935826", + "1935852", + "1935968", + "1936158", + "1936231", + "1936309", + "1936370", + "1936473", + "1936531", + "1936609", + "1936648", + "1936964", + "1936968", + "1936987", + "1937063", + "1937188", + "1937440", + "1937489", + "1937511", + "1937519", + "1937555", + "1937592", + "1937617", + "1938213", + "1938225", + "1938238", + "1939085", + "1939129", + "1939152", + "1939221", + "1939297", + "1939301", + "1939330", + "1939342", + "1939401", + "1939497", + "1939519", + "1939594", + "1939616", + "1939952", + "1940108", + "1940133", + "1940447", + "1940500", + "1940797", + "1940810", + "1941309", + "1941316", + "1941561", + "1941674", + "1941716", + "1941863", + "1941927", + "1942052", + "1942128", + "1942234", + "1942250", + "1942255", + "1942264", + "1942339", + "1942369", + "1942373", + "1942404", + "1942442", + "1942503", + "1942523", + "1942552", + "1942608", + "1942628", + "1942655", + "1942669", + "1942671", + "1942686", + "1942692", + "1942755", + "1942827", + "1942846", + "1942857", + "1942944", + "1942996", + "1943046", + "1943068", + "1943127", + "1943165", + "1943205", + "1943211", + "1943307", + "1943357", + "1943433", + "1943469", + "1943497", + "1943555", + "1943613", + "1943627", + "1943654", + "1943753", + "1943820", + "1943934", + "1943941", + "1944003", + "1944007", + "1944103", + "1944230", + "1944270", + "1944355", + "1944409", + "1944441", + "1944474", + "1944558", + "1944586", + "1944617", + "1944767", + "1944774", + "1944792", + "1944831", + "1944895", + "1944946", + "1944973", + "1944985", + "1945035", + "1945078", + "1945083", + "1945113", + "1945266", + "1945298", + "1945307", + "1945390", + "1945451", + "1945528", + "1945660", + "1945809", + "1945854", + "1945902", + "1945949", + "1945956", + "1946009", + "1946033", + "1946052", + "1946065", + "1946071", + "1946077", + "1946084", + "1946099", + "1946158", + "1946263", + "1946282", + "1946331", + "1946375", + "1946413", + "1946463", + "1946490", + "1946517", + "1946541", + "1946554", + "1946599", + "1946630", + "1946647", + "1946718", + "1946721", + "1946753", + "1946762", + "1946766", + "1946802", + "1946900", + "1946907", + "1946979", + "1947018", + "1947024", + "1947108", + "1947191", + "1947272", + "1947353", + "1947384", + "1947405", + "1947504", + "1947532", + "1947624", + "1947649", + "1947701", + "1947815", + "1947844", + "1947872", + "1947971", + "1948041", + "1948052", + "1948058", + "1948143", + "1948367", + "1948418", + "1948434", + "1948459", + "1948519", + "1948624", + "1948816", + "1948855", + "1948868", + "1948909", + "1948936", + "1948942", + "1948964", + "1949003", + "1949041", + "1949143", + "1949308", + "1949330", + "1949334", + "1949354", + "1949424", + "1949446", + "1949486", + "1949496", + "1949517", + "1949579", + "1949610", + "1949632", + "1949647", + "1949686", + "1949704", + "1950012", + "1950015", + "1950034", + "1950046", + "1950114", + "1950154", + "1950166", + "1950193", + "1950257", + "1950299", + "1950334", + "1950360", + "1950380", + "1950406", + "1950496", + "1950566", + "1950585", + "1950649", + "1950763", + "1951093", + "1951144", + "1951213", + "1951289", + "1951332", + "1951348", + "1951358", + "1951407", + "1951430", + "1951549", + "1951569", + "1951642", + "1951645", + "1951655", + "1951664", + "1951744", + "1951782", + "1951788", + "1951819", + "1951910", + "1952001", + "1952029", + "1952092", + "1952118", + "1952144", + "1952174", + "1952222", + "1952259", + "1952279", + "1952300", + "1952419", + "1952446", + "1952453", + "1952526", + "1952547", + "1952607", + "1952673", + "1952727", + "1952736", + "1952801", + "1952827", + "1952875", + "1952907", + "1953000", + "1953102", + "1953190", + "1953347", + "1953396", + "1953411", + "1953522", + "1953540", + "1953948", + "1953971", + "1953975", + "1953996", + "1954033", + "1954038", + "1954074", + "1954083", + "1954119", + "1954159", + "1954235", + "1954313", + "1954391", + "1954478", + "1954494", + "1954512", + "1954521", + "1954555", + "1954587", + "1954875", + "1954921", + "1954924", + "1955016", + "1955038", + "1955270", + "1955304", + "1955356", + "1955408", + "1955475", + "1955495", + "1955508", + "1955551", + "1955678", + "1955716", + "1955730", + "1955752", + "1955761", + "1955843", + "1955898", + "1955900", + "1955981", + "1955998", + "1956214", + "1956376", + "1956415", + "1956434", + "1956504", + "1956522", + "1956545", + "1956709", + "1956715", + "1956824", + "1956900", + "1956949", + "1957057", + "1957136", + "1957172", + "1957193", + "1957281", + "1957327", + "1957367", + "1957436", + "1957459", + "1957508", + "1957545", + "1957620", + "1957829", + "1957999", + "1958023", + "1958047", + "1958056", + "1958067", + "1958104", + "1958143", + "1958238", + "1958411", + "1958489", + "1958507", + "1959339", + "1959374", + "1959381", + "1959409", + "1959498", + "1959541", + "1959635", + "1959643", + "1959662", + "1959668", + "1959781", + "1959797", + "1959834", + "1959852", + "1959888", + "1960003", + "1960016", + "1960087", + "1960098", + "1960125", + "1960162", + "1960170", + "1960225", + "1960422", + "1960500", + "1960519", + "1960570", + "1960592", + "1960628", + "1960671", + "1960844", + "1960939", + "1960966", + "1961048", + "1961066", + "1961117", + "1961145", + "1961158", + "1961179", + "1961188", + "1961229", + "1961264", + "1961334", + "1961371", + "1961643", + "1961716", + "1961719", + "1962047", + "1962165", + "1962369", + "1962577", + "1962632", + "1962655", + "1962676", + "1962688", + "1962704", + "1962828", + "1962830", + "1962840", + "1962857", + "1962893", + "1962932", + "1962956", + "1962995", + "1963049", + "1963058", + "1963165", + "1963199", + "1963296", + "1963299", + "1963418", + "1963424", + "1963445", + "1963584", + "1963618", + "1963627", + "1963630", + "1963706", + "1963753", + "1963777", + "1963835", + "1963873", + "1963933", + "1964020", + "1964040", + "1964064", + "1964095", + "1964131", + "1964175", + "1964246", + "1964299", + "1964392", + "1964549", + "1964562", + "1964577", + "1964699", + "1964714", + "1964733", + "1964835", + "1964936", + "1965018", + "1965123", + "1965633", + "1965641", + "1965663", + "1965758", + "1965881", + "1965888", + "1965967", + "1966069", + "1966159", + "1966180", + "1966193", + "1966215", + "1966235", + "1966280", + "1966346", + "1966360", + "1966883", + "1966927", + "1966929", + "1966975", + "1966982", + "1967123", + "1967196", + "1967207", + "1967220", + "1967234", + "1967242", + "1967263", + "1967337", + "1967427", + "1967444", + "1967447", + "1967583", + "1967604", + "1967660", + "1967699", + "1967715", + "1967722", + "1968101", + "1968135", + "1968166", + "1968199", + "1968257", + "1968271", + "1968306", + "1968362", + "1968582", + "1968643", + "1968665", + "1968683", + "1968722", + "1968827", + "1968854", + "1968925", + "1968975", + "1969122", + "1969566", + "1969571", + "1969918", + "1970019", + "1970091", + "1970117", + "1970120", + "1970142", + "1970157", + "1970163", + "1970179", + "1970226", + "1970264", + "1970279", + "1970314", + "1970403", + "1970435", + "1970574", + "1971819", + "1971994", + "1972072", + "1972076", + "1972097", + "1972114", + "1972404", + "1972425", + "1972461", + "1972472", + "1972604", + "1972607", + "1972689", + "1972702", + "1972707", + "1972791", + "1972822", + "1972901", + "1972997", + "1973136", + "1973159", + "1973239", + "1973295", + "1973321", + "1973331", + "1973392", + "1973405", + "1973483", + "1973488", + "1973578", + "1973718", + "1973722", + "1973909", + "1975155", + "1975197", + "1975208", + "1975278", + "1975285", + "1975292", + "1975336", + "1975361", + "1975464", + "1975542", + "1975570", + "1975577", + "1975703", + "1975714", + "1975729", + "1975783", + "1975804", + "1975885", + "1976058", + "1976118", + "1976141", + "1976155", + "1976211", + "1976245", + "1976250", + "1976296", + "1976321", + "1976338", + "1976460", + "1976496", + "1976515", + "1976638", + "1976884", + "1976925", + "1976930", + "1976949", + "1977104", + "1977179", + "1977323", + "1977351", + "1977402", + "1977419", + "1977757", + "1977775", + "1977811", + "1977864", + "1977960", + "1977963", + "1978014", + "1978019", + "1978075", + "1978112", + "1978245", + "1978273", + "1978364", + "1978451", + "1978455", + "1978481", + "1978495", + "1978506", + "1978607", + "1978643", + "1978697", + "1978732", + "1978736", + "1978749", + "1978784", + "1978814", + "1978835", + "1978893", + "1978948", + "1978974", + "1978994", + "1979019", + "1979040", + "1979106", + "1979213", + "1979243", + "1979517", + "1979554", + "1979719", + "1979727", + "1980021", + "1980033", + "1980239", + "1980263", + "1980288", + "1980342", + "1980490", + "1980504", + "1980511", + "1980556", + "1980650", + "1980718", + "1981051", + "1981142", + "1981449", + "1981690", + "1981744", + "1981855", + "1981933", + "1981941", + "1981987", + "1981996", + "1982017", + "1982147", + "1982199", + "1982367", + "1984142", + "1984231", + "1984651", + "1984667", + "1984731", + "1984741", + "1984909", + "1984922", + "1985058", + "1985146", + "1985258", + "1985404", + "1985486", + "1985489", + "1985492", + "1985507", + "1985570", + "1985578", + "1985716", + "1985728", + "1985787", + "1985928", + "1985934", + "1985969", + "1986081", + "1986645", + "1986772", + "1986805", + "1986845", + "1986868", + "1986905", + "1986930", + "1986939", + "1986953", + "1986997", + "1987067", + "1987141", + "1987202", + "1987269", + "1987300", + "1987326", + "1987346", + "1987509", + "1987555", + "1987626", + "1987632", + "1987645", + "1987660", + "1987711", + "1987746", + "1987792", + "1987820", + "1987849", + "1987861", + "1987995", + "1988224", + "1988251", + "1988282", + "1988304", + "1988350", + "1988388", + "1988399", + "1988485", + "1988488", + "1988533", + "1988760", + "1988779", + "1988815", + "1988876", + "1988887", + "1988893", + "1989045", + "1989161", + "1989580", + "1989902", + "1989927", + "1989996", + "1990136", + "1990163", + "1990193", + "1990247", + "1990257", + "1990356", + "1990367", + "1990531", + "1990591", + "1990677", + "1990989", + "1991004", + "1991120", + "1991135", + "1991234", + "1991279", + "1991309", + "1991325", + "1991357", + "1991401", + "1991426", + "1991531", + "1991777", + "1991817", + "1991843", + "1991934", + "1991946", + "1992166", + "1992168", + "1992205", + "1992267", + "1992537", + "1992572", + "1992586", + "1992729", + "1992877", + "1992906", + "1992944", + "1992973", + "1992975", + "1993011", + "1993034", + "1993044", + "1993403", + "1993451", + "1993564", + "1993634", + "1994549", + "2048233", + "2080450", + "2278098", + "3231212", + "3255365", + "3255832", + "3255940", + "3255943", + "3255956", + "3256116", + "3256119", + "3256169", + "3256188", + "3256294", + "3256322", + "3256356", + "3256453", + "3256512", + "3256568", + "3256584", + "3256657", + "3256934", + "3256950", + "3257150", + "3257152", + "3257220", + "3257225", + "3257328", + "3257351", + "3257405", + "3257500", + "3257514", + "3257524", + "3257628", + "3257649", + "3257662", + "3257694", + "3257794", + "3257798", + "3257836", + "3257894", + "3258063", + "3258105", + "3258127", + "3258133", + "3258147", + "3261008", + "3262002", + "4300267", + "4300486", + "4301067", + "4301098", + "4301121", + "4301281", + "4301305", + "4301308", + "4301340", + "4302220", + "4302229", + "4302289", + "4404325", + "4404424", + "4404729", + "4404732", + "4404934", + "4405001", + "4405135", + "4405245", + "4405258", + "4405430", + "4405493", + "4405533", + "4405983", + "4406051", + "4406069", + "4406074", + "4406145", + "4406268", + "4406291", + "4406298", + "4406360", + "4406481", + "4406516", + "4406551", + "4406622", + "4406889", + "4406931", + "4407165", + "4407218", + "4407310", + "4407354", + "4407363", + "4407476", + "4407554", + "4407697", + "4407786", + "4408085", + "4408190", + "4408204", + "4408275", + "4523515", + "4524069", + "4524400", + "4524792", + "4524913", + "4525072", + "4525111", + "4525607", + "4525713", + "4527338", + "4529834", + "4531185", + "4532562", + "4533122", + "4533124", + "4533660", + "4534405", + "4534456", + "4534532", + "4534661", + "4571921", + "4572640", + "4573369", + "4573720", + "4574082", + "4575600", + "4575996", + "4576037", + "4576177", + "4684087", + "4684088", + "4684145", + "4684219", + "4684253", + "4684258", + "4684781", + "4684892", + "4684924", + "4684951", + "4685556", + "4685628", + "4685777", + "4685945", + "4685979", + "4686308", + "4686350", + "4686384", + "4686517", + "4686655", + "4686699", + "4686843", + "4686955", + "4687068", + "4687117", + "4687205", + "4687250", + "4687253", + "4687264", + "4687385", + "4687388", + "4687398", + "4687438", + "4687494", + "4687545", + "4687701", + "4687726", + "4687791", + "4687851", + "4687877", + "4687937", + "4687943", + "4687984", + "4688073", + "4688136", + "4688148", + "4688298", + "4688408", + "4688500", + "4688533", + "4688624", + "4688641", + "4688690", + "4688714", + "4688717", + "4688727", + "4688768", + "4688975", + "4689025", + "4689117", + "4689138", + "4689300", + "4689316", + "4689527", + "4689528", + "4689548", + "4689585", + "4689628", + "4689644", + "4689708", + "4689790", + "4695593", + "4695668", + "4695734", + "4695875", + "4695897", + "4695929", + "4696040", + "4696100", + "4696103", + "4696201", + "4696228", + "4702183", + "4702229", + "4702368", + "4702379", + "4702515", + "4702588", + "4702630", + "4702642", + "4702651", + "4702781", + "4702805", + "4702831", + "4702862", + "4702877", + "4702889", + "4702891", + "4702939", + "4702953", + "4703000", + "4703014", + "4703048", + "4703184", + "4703248", + "4703308", + "4703444", + "4703460", + "4703509", + "4703670", + "4703719", + "4704034", + "4704072", + "4704098", + "4704315", + "4704380", + "4704499", + "4704582", + "4704716", + "4704719", + "4704752", + "4704946", + "4704959", + "4705145", + "4705151", + "4705537", + "4705623", + "4705630", + "4705637", + "4705641", + "4705666", + "4705796", + "4705876", + "4705882", + "4705945", + "4705981", + "4706535", + "4706578", + "4706585", + "4706694", + "4706723", + "4706738", + "4706892", + "4706983", + "4707050", + "4707100", + "4707419", + "4707431", + "4707529", + "4707641", + "4707698", + "4707710", + "4707748", + "4707821", + "4707834", + "4708040", + "4708154", + "4708197", + "4708288", + "4708365", + "4708407", + "4708493", + "4708566", + "4708587", + "4708592", + "4708606", + "4708611", + "4708626", + "4708638", + "4708646", + "4708648", + "4708684", + "4708698", + "4708709", + "4708713", + "4708745", + "4708885", + "4708919", + "4709100", + "4709103", + "4709146", + "4709187", + "4709268", + "4709333", + "4709385", + "4709474", + "5102272", + "5104758", + "5105328", + "5110374", + "5110641", + "5114254", + "5115213", + "5115807", + "5116471", + "5118829", + "5119806", + "5119880", + "5123346", + "5123443", + "5123811", + "5124670", + "5130576", + "5131088", + "5131972", + "5133087", + "5135400", + "5141261", + "5142228", + "5142691", + "5144176", + "5146397", + "5430630", + "6007566", + "6116898", + "6132796", + "6133263", + "6133753", + "6757561", + "7236046", + "7236053", + "7236059", + "7236069", + "7236091", + "7236092", + "7236098", + "7354470", + "7362601", + "7384515", + "7396883", + "7494486", + "7510496", + "7514692", + "7535296", + "7543161", + "7566147", + "7568341", + "7588628", + "7641205", + "7659598", + "7704040", + "7704258", + "7714017", + "7721234", + "7729420", + "7733971", + "7739898", + "7742506", + "7744105", + "7769987", + "7772509", + "7777102", + "7786896", + "7841677", + "7842819", + "7852351", + "7876391", + "7881632", + "7963991", + "7969922", + "7973780", + "8057237", + "8095945", + "8107362", + "8109351", + "8178582", + "8194136", + "8203799", + "8213918", + "8249110", + "8296807", + "8314432", + "8317469", + "8319926", + "8331787", + "8338704", + "8363558", + "8379138", + "8389051", + "8396912", + "8406574", + "8407958", + "8494978", + "8636720", + "8659047", + "8679775", + "8697176", + "8710303", + "8728355", + "8744407", + "8757056", + "8766106", + "8782295", + "8786726", + "8787356", + "8793999", + "8806645", + "8810582", + "8814442", + "8828194", + "8832257", + "8834745", + "8843351", + "8844327", + "8875114", + "8875134", + "8875890", + "8895291", + "8896182", + "8903953", + "8915575", + "8921795", + "8928010", + "8930863", + "8931287", + "8934672", + "8935025", + "8936210", + "8946062", + "8952756", + "8952983", + "8955545", + "8968124", + "8970409", + "8974541", + "8978064", + "8978428", + "8981907", + "8982056", + "8983556", + "8983629", + "8997710", + "9000709", + "9002818", + "9005880", + "9020610", + "9021546", + "9026388", + "9026655", + "9029051", + "9036849", + "9040198", + "9042695", + "9044302", + "9044770", + "9046185", + "9046214", + "9046977", + "9053842", + "9055772", + "9059321", + "9059730", + "9060128", + "9061491", + "9065472", + "9069808", + "9073940", + "9077304", + "9077410", + "9078027", + "9078901", + "9080469", + "9090334", + "9092234", + "9095083", + "9095230", + "9099004", + "9103399", + "9106541", + "9108102", + "9111044", + "9111269", + "9112567", + "9118632", + "9119424", + "9121178", + "9123839", + "9128871", + "9130093", + "9131390", + "9136607", + "9137617", + "9141856", + "9146182", + "9151414", + "9154466", + "9155713", + "9167802", + "9168716", + "9175687", + "9176590", + "9177092", + "9179511", + "9180373", + "9181278", + "9182266", + "9183339", + "9183600", + "9185801", + "9186977", + "9188678", + "9189318", + "9189502", + "9197007", + "9197112", + "9199756", + "9203611", + "9203720", + "9205220", + "9206138", + "9209436", + "9210500", + "9211050", + "9211520", + "9211630", + "9212903", + "9218657", + "9220793", + "9230208", + "9230236", + "9260167", + "9262994", + "9329912", + "9334318", + "9340110", + "9345724", + "9357810", + "9457004", + "9496267", + "9514086", + "9529506", + "9550689", + "9558288", + "9585354", + "9600123", + "9601813", + "9605252", + "9607541", + "9675443", + "9759554", + "9762611", + "9878063", + "9905626" + ], + "zero/family": [ + "10820875", + "1933999", + "3256826", + "3527", + "3528", + "3529", + "3530", + "3531", + "3551", + "3552", + "3553", + "3554", + "3555", + "3556", + "3558", + "3563", + "4300662", + "4300664", + "4300668", + "4525436", + "4525465", + "4527533", + "4528997", + "4532185", + "4534947", + "4538", + "4542", + "4547", + "4554", + "4705755", + "4864", + "4865", + "4866", + "4867", + "4868", + "4870", + "4871", + "5320", + "5336", + "5338", + "5339", + "5340", + "5343", + "5345", + "5473", + "5474", + "5481", + "5487", + "5734720", + "6165", + "6166", + "6929", + "6946", + "6947", + "6948", + "6949", + "6950", + "6951", + "6953", + "6954", + "6956", + "7014", + "7015", + "7016", + "7017", + "7294", + "7297", + "8832", + "8833", + "8834", + "8836", + "8838", + "8839", + "8840", + "8841", + "8855", + "8856", + "8860", + "8861", + "8863", + "8864", + "8865", + "8866", + "8868", + "8870", + "8871", + "8872", + "8873", + "8874", + "8875", + "9122734", + "9407", + "9408", + "9409", + "9410", + "9412", + "9414744", + "9417", + "9541689", + "9689", + "9717" + ], + "optimized/species": [ + "10000103", + "10000384", + "10002059", + "10003902", + "10004820", + "10004969", + "10005133", + "10005632", + "10010361", + "10010700", + "10014340", + "10017792", + "10018221", + "10019169", + "10023049", + "10023821", + "10026605", + "10032003", + "10033898", + "10034831", + "10038125", + "10042504", + "10043566", + "10043827", + "10044107", + "10046510", + "10046698", + "10047346", + "10049887", + "10053130", + "10053809", + "10054019", + "10055104", + "10055273", + "10058263", + "10058481", + "10059034", + "10062202", + "10062933", + "10063383", + "10066605", + "10067382", + "10068024", + "10069243", + "10071588", + "10072380", + "10073044", + "10073321", + "10074808", + "10075196", + "10075732", + "10078526", + "10078800", + "10085335", + "10088253", + "10089194", + "10090105", + "10090168", + "10094256", + "10094594", + "10095278", + "10096855", + "10097776", + "10098436", + "10100176", + "10103570", + "10106345", + "10106475", + "10108753", + "10109201", + "10113008", + "10113190", + "10114865", + "10115073", + "10116946", + "10117959", + "10118643", + "10118678", + "10120854", + "10121804", + "10129812", + "10132475", + "10132596", + "10132811", + "10134558", + "10134865", + "10137001", + "10137350", + "10141437", + "10142569", + "10143814", + "10145421", + "10146436", + "10146771", + "10153630", + "10154280", + "10155026", + "10155932", + "10156181", + "10156470", + "10157400", + "10159697", + "10164453", + "10165457", + "10165831", + "10166724", + "10167252", + "10174909", + "10175639", + "10176413", + "10176954", + "10177508", + "10178326", + "10179389", + "10180624", + "10183056", + "10184940", + "10187154", + "10188228", + "10189661", + "10191275", + "10191785", + "10194663", + "10194727", + "10196956", + "10201273", + "10203493", + "10203499", + "10205587", + "10208422", + "10208792", + "10208801", + "10209845", + "10210935", + "10211808", + "10213314", + "10214972", + "10217455", + "10221195", + "10222583", + "10224300", + "10225227", + "10228568", + "10236521", + "10240592", + "10244305", + "10245924", + "10246305", + "10247309", + "10248521", + "10250474", + "10256550", + "10257673", + "10257899", + "10259280", + "10259880", + "10263383", + "10264193", + "10265559", + "10265841", + "10266782", + "10267561", + "10267570", + "10268303", + "10270464", + "10271464", + "10272611", + "10274769", + "10274976", + "10278292", + "10279983", + "10288636", + "10290084", + "10295171", + "10295290", + "10295646", + "10302305", + "10302660", + "10304313", + "10307487", + "10308365", + "10309794", + "10310599", + "10310835", + "10312073", + "10312760", + "10321900", + "10327658", + "10329023", + "10330376", + "10331171", + "10333787", + "10336328", + "10340332", + "10341307", + "10346267", + "10348110", + "10348945", + "10353400", + "10355428", + "10355898", + "10357476", + "10358334", + "10360329", + "10361029", + "10361239", + "10363151", + "10365587", + "10365884", + "10366580", + "10366679", + "10368234", + "10370026", + "10371735", + "10372377", + "10374414", + "10375186", + "10375403", + "10376507", + "10376685", + "10378314", + "10379201", + "10380465", + "10383968", + "10388627", + "10392889", + "10394962", + "10395440", + "10397209", + "10398658", + "10399906", + "10400868", + "10401396", + "10402067", + "10403441", + "10404426", + "10407953", + "10410048", + "10410699", + "10411202", + "10411472", + "10413588", + "10415847", + "10423263", + "10427568", + "10432184", + "10433914", + "10435406", + "10436020", + "10436850", + "10437872", + "10441062", + "10441857", + "10442122", + "10442332", + "10443878", + "10445629", + "10446295", + "10446574", + "10446580", + "10446898", + "10448500", + "10450442", + "10450446", + "10450501", + "10451589", + "10452421", + "10454590", + "10456933", + "10457796", + "10458175", + "10458960", + "10462612", + "10464411", + "10464824", + "10465059", + "10469497", + "10469564", + "10471477", + "10474236", + "10476233", + "10477629", + "10480609", + "10481441", + "10482025", + "10487080", + "10495733", + "10496181", + "10502505", + "10503464", + "10503495", + "10505033", + "10506164", + "10508423", + "10508467", + "10509408", + "10510138", + "10510325", + "10510959", + "10512675", + "10514620", + "10515719", + "10517417", + "10517500", + "10518163", + "10521368", + "10523304", + "10526954", + "10530208", + "10530383", + "10530515", + "10531480", + "10534945", + "10535684", + "10539598", + "10542548", + "10545267", + "10546013", + "10546538", + "10547716", + "10548275", + "10548683", + "10549715", + "10551407", + "10551923", + "10556366", + "10556522", + "10556853", + "10558140", + "10560674", + "10560849", + "10561589", + "10569879", + "10570752", + "10571987", + "10572729", + "10573425", + "10575632", + "10577473", + "10579230", + "10580256", + "10581870", + "10584071", + "10587253", + "10588642", + "10591617", + "10592969", + "10593489", + "10594478", + "10596756", + "10597291", + "10597823", + "10598038", + "10598407", + "10600208", + "10604375", + "10606547", + "10606887", + "10607329", + "10613467", + "10615631", + "10619048", + "10626099", + "10629052", + "10629533", + "10632124", + "10634980", + "10637588", + "10638451", + "10638589", + "10639484", + "10639943", + "10640865", + "10643533", + "10644798", + "10647358", + "10648791", + "10653980", + "10655790", + "10656625", + "10657151", + "10657453", + "10659737", + "10662329", + "10679326", + "10683012", + "10684776", + "10698858", + "10700540", + "10701190", + "10703948", + "10706419", + "10707501", + "10709446", + "10712554", + "10713577", + "10714961", + "10715410", + "10716234", + "10717680", + "10717837", + "10730270", + "10732033", + "10732353", + "10737993", + "10738407", + "10741837", + "10746289", + "10747908", + "10749137", + "10755716", + "10761559", + "10765884", + "10766319", + "10769553", + "10773498", + "10776919", + "10782264", + "10787705", + "10795141", + "10799294", + "10806460", + "10807169", + "10807383", + "10807787", + "10813849", + "10814936", + "10817208", + "10820762", + "10822185", + "10826443", + "10830546", + "10833593", + "10835385", + "10838422", + "10840540", + "10840565", + "10841562", + "10842267", + "10844862", + "10850393", + "10850415", + "10850929", + "10851228", + "10851840", + "10854079", + "10855556", + "10857326", + "10858809", + "10860091", + "10861282", + "10866199", + "10866411", + "10867462", + "10869347", + "10873137", + "10874932", + "10879371", + "10882244", + "10883659", + "10889719", + "10891794", + "10904813", + "10922201", + "10922411", + "10926224", + "10932946", + "10933525", + "10942408", + "10955682", + "10959264", + "10963226", + "10967713", + "10972780", + "10982648", + "10982815", + "10987178", + "10988070", + "10994020", + "10996761", + "11008182", + "11014495", + "11016336", + "11033463", + "11044778", + "11046092", + "11052757", + "11054256", + "11055981", + "11056379", + "11059353", + "11080751", + "11088003", + "11093909", + "11095591", + "11097510", + "11098546", + "11121180", + "11135155", + "11140464", + "11141784", + "11142432", + "11173690", + "11175615", + "11190148", + "11219489", + "11232431", + "11287091", + "11311045", + "11322712", + "11372793", + "11374171", + "11375508", + "11378273", + "11378618", + "11382064", + "11414590", + "11417741", + "11418741", + "11423843", + "11428453", + "11430021", + "11431507", + "11437060", + "11449815", + "11451126", + "11452421", + "11453492", + "11457930", + "11461056", + "11464362", + "11464595", + "11465014", + "11466090", + "11467034", + "11467944", + "11468089", + "11468731", + "11470119", + "11470672", + "11478679", + "11484123", + "11487320", + "11494627", + "11495556", + "11496990", + "11501104", + "11503857", + "11508076", + "11508404", + "11508472", + "11513018", + "11513188", + "11516142", + "11529292", + "11529603", + "11535847", + "11539735", + "11546465", + "11548960", + "11554226", + "11554842", + "11555221", + "11562243", + "11563728", + "11566649", + "11570545", + "11571523", + "11590674", + "11591775", + "11594541", + "11596898", + "11598540", + "11608942", + "11609422", + "11615055", + "11615549", + "11619030", + "11623814", + "11626773", + "11627464", + "11635419", + "11636323", + "11636481", + "11638437", + "11642411", + "11643393", + "11644349", + "11650277", + "11652557", + "11654024", + "11654707", + "11656384", + "11660145", + "11667300", + "11667997", + "11670842", + "11673056", + "11688440", + "11688586", + "11693171", + "11698552", + "11701883", + "11701991", + "11703980", + "11713256", + "11713970", + "11714235", + "11716362", + "11717028", + "11720834", + "11725043", + "11725616", + "11726907", + "11728049", + "11728240", + "11729388", + "11729494", + "11730078", + "11731502", + "11736162", + "11737872", + "11738734", + "11749278", + "11753804", + "11754954", + "11756119", + "11758730", + "11760688", + "11763567", + "11776315", + "11780161", + "11794114", + "11797637", + "11807833", + "11812181", + "11819666", + "11826016", + "11832697", + "11834445", + "11840028", + "11840957", + "11841763", + "11846897", + "11854390", + "11856219", + "11858666", + "11860016", + "11860565", + "11871044", + "11871190", + "11873825", + "11874998", + "11887065", + "11891668", + "11892494", + "11900897", + "11905965", + "11906255", + "11907485", + "11907754", + "11909090", + "11919216", + "11922580", + "11923027", + "11954157", + "11962292", + "11967675", + "11976273", + "11992983", + "12006709", + "12010643", + "12018158", + "12022449", + "12031071", + "12037602", + "12046692", + "12057008", + "12060941", + "12066849", + "12087490", + "12089608", + "12103087", + "12106417", + "12116722", + "12126779", + "12135372", + "12151997", + "12160125", + "12170988", + "12171068", + "12171522", + "12173621", + "12174634", + "12175154", + "12176367", + "12176559", + "12180031", + "12180041", + "12181811", + "12183285", + "12185456", + "12185656", + "12188086", + "12191141", + "12194283", + "12195040", + "12197284", + "12198522", + "12203022", + "12206386", + "12206694", + "12208168", + "12208733", + "12209759", + "12211009", + "12212066", + "12214821", + "12214993", + "12216332", + "12217030", + "12219036", + "12219250", + "12222885", + "12223105", + "12223349", + "12226416", + "12229237", + "12229400", + "12229940", + "12231152", + "12231344", + "12231385", + "12233602", + "12233808", + "12233838", + "12234544", + "12234977", + "12235234", + "12236627", + "12239491", + "12242422", + "12247340", + "12247359", + "12249986", + "12250854", + "12251247", + "12252340", + "12252926", + "12253343", + "12253844", + "12257250", + "12257418", + "12258146", + "12258652", + "12258984", + "12262562", + "12263736", + "12265590", + "12266659", + "12276630", + "12286003", + "12301192", + "12353663", + "12357826", + "12358748", + "1730519", + "1730543", + "1730948", + "1730978", + "1731097", + "1731221", + "1731263", + "1731598", + "1731750", + "1731811", + "1731812", + "1731826", + "1731837", + "1731860", + "1731862", + "1731886", + "1731890", + "1731906", + "1731923", + "1731926", + "1731927", + "1732001", + "1732005", + "1732031", + "1732052", + "1732063", + "1732087", + "1732114", + "1732115", + "1732416", + "1732419", + "1732452", + "1732457", + "1732508", + "1732521", + "1732525", + "1732565", + "1732660", + "1732662", + "1732680", + "1732685", + "1732697", + "1732717", + "1732763", + "1732830", + "1732842", + "1732901", + "1732978", + "1733154", + "1733155", + "1733243", + "1733258", + "1733394", + "1733484", + "1733504", + "1733511", + "1733525", + "1733535", + "1733620", + "1733755", + "1734384", + "1734453", + "1734519", + "1734690", + "1734704", + "1734794", + "1734826", + "1734851", + "1735168", + "1735273", + "1735391", + "1735398", + "1735408", + "1735532", + "1735844", + "1735855", + "1736271", + "1736315", + "1736358", + "1736377", + "1736390", + "1736412", + "1736425", + "1736447", + "1736484", + "1736499", + "1736511", + "1736528", + "1736560", + "1736565", + "1736601", + "1736623", + "1736727", + "1736760", + "1736800", + "1736803", + "1736809", + "1736811", + "1736821", + "1736836", + "1736860", + "1736898", + "1736904", + "1736905", + "1736906", + "1736915", + "1736918", + "1736937", + "1736939", + "1736945", + "1736993", + "1736995", + "1737015", + "1737072", + "1737115", + "1737131", + "1737182", + "1737187", + "1737231", + "1737342", + "1737368", + "1737374", + "1737403", + "1737413", + "1737417", + "1737437", + "1737491", + "1737497", + "1737509", + "1737524", + "1737526", + "1737533", + "1737542", + "1737544", + "1737551", + "1737552", + "1737650", + "1737753", + "1737775", + "1737776", + "1737847", + "1737893", + "1737904", + "1737924", + "1737929", + "1737964", + "1737973", + "1737978", + "1738045", + "1738050", + "1738081", + "1738163", + "1738196", + "1738218", + "1738222", + "1738245", + "1738317", + "1738337", + "1738422", + "1738429", + "1738514", + "1738687", + "1738700", + "1738722", + "1738777", + "1738794", + "1738839", + "1738883", + "1738888", + "1739034", + "1739042", + "1739051", + "1739151", + "1739220", + "1739272", + "1739284", + "1739290", + "1739337", + "1739377", + "1739381", + "1739400", + "1739461", + "1739553", + "1739567", + "1739605", + "1739612", + "1739617", + "1739629", + "1739646", + "1739656", + "1739668", + "1739727", + "1739748", + "1739767", + "1739797", + "1739819", + "1739833", + "1739867", + "1739919", + "1739922", + "1739924", + "1739927", + "1739931", + "1739956", + "1739964", + "1739973", + "1739980", + "1739983", + "1739999", + "1740003", + "1740005", + "1740037", + "1740053", + "1740060", + "1740069", + "1740116", + "1740120", + "1740133", + "1740148", + "1740155", + "1740163", + "1740174", + "1740183", + "1740185", + "1740225", + "1740246", + "1740305", + "1740370", + "1740374", + "1740389", + "1740392", + "1740400", + "1740449", + "1740469", + "1740482", + "1740518", + "1740524", + "1740533", + "1740567", + "1740570", + "1740623", + "1740797", + "1740828", + "1741056", + "1741074", + "1741084", + "1741130", + "1741131", + "1741147", + "1741258", + "1741324", + "1741340", + "1741341", + "1741361", + "1741368", + "1741398", + "1741400", + "1741545", + "1741551", + "1741590", + "1741593", + "1741615", + "1741633", + "1741634", + "1741667", + "1741719", + "1741747", + "1741752", + "1741756", + "1741765", + "1741812", + "1741818", + "1741820", + "1741823", + "1741824", + "1741826", + "1742081", + "1742091", + "1742121", + "1742142", + "1742150", + "1742168", + "1742178", + "1742185", + "1742198", + "1742214", + "1742241", + "1742260", + "1742263", + "1742268", + "1742272", + "1742273", + "1742287", + "1742293", + "1742304", + "1742310", + "1742335", + "1742346", + "1742402", + "1743184", + "1743196", + "1743319", + "1743461", + "1743475", + "1743532", + "1743588", + "1743604", + "1743651", + "1743653", + "1743658", + "1743663", + "1743680", + "1743710", + "1743714", + "1743768", + "1743775", + "1743782", + "1743825", + "1743828", + "1743838", + "1743855", + "1743856", + "1743862", + "1743867", + "1743898", + "1743998", + "1744071", + "1744130", + "1744136", + "1744180", + "1744212", + "1744224", + "1744416", + "1744498", + "1744526", + "1744542", + "1744588", + "1744593", + "1744700", + "1744709", + "1744714", + "1744724", + "1744728", + "1744731", + "1744739", + "1744742", + "1744748", + "1744763", + "1744782", + "1744789", + "1744808", + "1744810", + "1744860", + "1744896", + "1744949", + "1744953", + "1744998", + "1745019", + "1745022", + "1745079", + "1745307", + "1745558", + "1745561", + "1745579", + "1745600", + "1745606", + "1745630", + "1745634", + "1745636", + "1745643", + "1745659", + "1745666", + "1745669", + "1745676", + "1745678", + "1745705", + "1745724", + "1745729", + "1745737", + "1745746", + "1745756", + "1745762", + "1745771", + "1745781", + "1745787", + "1745814", + "1745816", + "1745827", + "1745830", + "1745895", + "1745925", + "1745952", + "1745957", + "1746027", + "1746174", + "1746327", + "1746413", + "1746440", + "1746462", + "1746586", + "1746613", + "1746644", + "1746666", + "1746689", + "1746695", + "1746714", + "1746751", + "1746754", + "1746763", + "1746774", + "1746775", + "1746831", + "1746832", + "1746856", + "1746876", + "1746881", + "1746898", + "1746910", + "1746927", + "1746949", + "1747024", + "1747050", + "1747068", + "1747141", + "1747147", + "1747150", + "1747160", + "1747161", + "1747163", + "1747166", + "1747171", + "1747189", + "1747196", + "1747215", + "1747222", + "1747523", + "1747639", + "1747738", + "1747740", + "1747814", + "1747924", + "1748103", + "1748148", + "1748149", + "1748151", + "1748152", + "1748203", + "1748321", + "1748425", + "1748442", + "1748456", + "1748473", + "1748486", + "1748518", + "1748648", + "1748661", + "1748751", + "1748780", + "1748805", + "1748890", + "1748942", + "1749050", + "1749070", + "1749124", + "1749164", + "1749287", + "1749449", + "1749531", + "1749591", + "1749596", + "1749635", + "1749664", + "1749713", + "1749744", + "1749869", + "1749908", + "1749929", + "1749936", + "1749948", + "1749975", + "1750076", + "1750131", + "1750143", + "1750166", + "1750326", + "1750934", + "1751051", + "1751163", + "1751207", + "1751216", + "1751236", + "1751298", + "1751299", + "1751368", + "1751400", + "1751457", + "1751497", + "1751557", + "1751572", + "1751575", + "1751588", + "1751625", + "1751670", + "1751684", + "1751690", + "1751852", + "1751980", + "1751986", + "1752034", + "1752109", + "1752111", + "1752161", + "1752281", + "1752285", + "1752286", + "1752327", + "1752373", + "1752383", + "1752492", + "1752494", + "1752536", + "1752537", + "1752539", + "1752545", + "1752547", + "1752603", + "1752651", + "1752749", + "1752758", + "1752775", + "1752805", + "1752825", + "1752832", + "1752849", + "1752894", + "1752903", + "1752923", + "1752947", + "1753081", + "1753105", + "1753106", + "1753111", + "1753215", + "1753461", + "1753603", + "1753604", + "1753636", + "1753668", + "1753759", + "1753871", + "1753902", + "1753906", + "1753922", + "1753929", + "1754135", + "1754183", + "1754263", + "1754270", + "1754332", + "1754368", + "1754380", + "1754400", + "1754511", + "1754516", + "1754535", + "1754806", + "1754814", + "1754902", + "1754919", + "1754933", + "1755237", + "1755248", + "1755253", + "1755276", + "1757652", + "1757839", + "1757853", + "1758003", + "1758114", + "1758146", + "1758441", + "1758461", + "1758596", + "1758602", + "1758613", + "1758625", + "1758727", + "1758767", + "1758771", + "1758781", + "1758783", + "1758850", + "1758860", + "1758861", + "1758866", + "1758878", + "1758879", + "1758898", + "1758906", + "1758916", + "1759037", + "1759040", + "1759041", + "1759055", + "1759069", + "1759079", + "1759083", + "1759092", + "1759153", + "1759159", + "1759338", + "1759351", + "1759394", + "1759407", + "1759553", + "1759573", + "1759585", + "1759597", + "1759605", + "1759610", + "1759611", + "1759620", + "1759621", + "1759624", + "1759631", + "1759632", + "1759633", + "1759634", + "1759661", + "1759667", + "1759668", + "1759671", + "1759673", + "1759677", + "1759678", + "1759686", + "1759688", + "1759691", + "1759694", + "1759719", + "1759775", + "1759799", + "1759881", + "1760104", + "1760172", + "1760173", + "1760175", + "1760201", + "1760233", + "1760244", + "1760246", + "1760257", + "1760261", + "1760309", + "1760361", + "1760385", + "1760396", + "1760397", + "1760398", + "1760400", + "1760454", + "1760455", + "1760593", + "1760620", + "1760682", + "1760857", + "1760867", + "1760887", + "1760891", + "1760893", + "1760927", + "1760939", + "1761041", + "1761102", + "1761110", + "1761111", + "1761143", + "1761213", + "1761353", + "1761392", + "1761438", + "1761439", + "1761498", + "1761553", + "1761563", + "1761572", + "1761573", + "1761735", + "1761751", + "1761752", + "1761778", + "1761788", + "1761798", + "1761820", + "1761838", + "1761865", + "1761892", + "1762151", + "1762219", + "1762226", + "1762244", + "1762271", + "1762286", + "1762383", + "1762474", + "1762608", + "1762609", + "1762615", + "1762657", + "1762680", + "1762849", + "1762852", + "1762887", + "1762900", + "1762902", + "1763072", + "1763163", + "1763184", + "1763199", + "1763223", + "1763589", + "1763610", + "1763650", + "1763697", + "1763727", + "1763761", + "1763782", + "1763976", + "1764021", + "1764043", + "1764060", + "1764174", + "1764178", + "1764238", + "1764525", + "1764531", + "1764553", + "1764673", + "1764691", + "1764693", + "1764791", + "1764880", + "1764886", + "1764917", + "1764929", + "1764986", + "1764987", + "1765010", + "1765011", + "1765017", + "1765044", + "1765069", + "1765073", + "1765097", + "1765172", + "1765182", + "1765604", + "1765653", + "1765658", + "1765733", + "1765751", + "1765752", + "1765767", + "1765779", + "1765798", + "1765863", + "1765954", + "1765962", + "1765996", + "1765999", + "1766007", + "1766072", + "1766086", + "1766128", + "1766130", + "1766131", + "1766137", + "1766193", + "1766205", + "1766210", + "1766260", + "1766274", + "1766285", + "1766287", + "1766392", + "1766410", + "1766418", + "1766509", + "1766510", + "1766558", + "1766560", + "1766570", + "1766584", + "1766601", + "1766612", + "1766618", + "1766646", + "1766650", + "1766721", + "1766741", + "1766773", + "1766814", + "1766839", + "1766845", + "1766888", + "1766892", + "1766910", + "1766919", + "1766921", + "1767031", + "1767044", + "1767052", + "1767140", + "1767142", + "1767215", + "1767293", + "1767302", + "1767307", + "1767320", + "1767338", + "1767347", + "1767368", + "1767381", + "1767393", + "1767430", + "1767484", + "1767499", + "1767508", + "1767511", + "1767571", + "1767579", + "1767584", + "1767597", + "1767602", + "1767608", + "1767612", + "1767625", + "1767655", + "1767674", + "1767719", + "1767755", + "1767780", + "1767883", + "1768042", + "1768048", + "1768117", + "1768132", + "1768150", + "1768172", + "1768174", + "1768190", + "1768196", + "1768199", + "1768283", + "1768341", + "1768440", + "1768461", + "1768462", + "1768546", + "1768557", + "1768560", + "1768568", + "1768626", + "1768630", + "1768698", + "1768702", + "1768727", + "1768729", + "1768749", + "1768771", + "1768815", + "1768819", + "1768898", + "1768972", + "1769000", + "1769029", + "1769057", + "1769103", + "1769114", + "1769168", + "1769194", + "1769209", + "1769225", + "1769250", + "1769260", + "1769271", + "1769272", + "1769293", + "1769294", + "1769310", + "1769336", + "1769410", + "1769425", + "1769465", + "1769505", + "1769519", + "1769543", + "1769566", + "1769592", + "1769737", + "1769739", + "1769772", + "1769814", + "1769823", + "1769827", + "1769841", + "1769852", + "1769897", + "1769901", + "1769934", + "1769944", + "1769947", + "1769958", + "1769978", + "1770038", + "1770044", + "1770132", + "1770144", + "1770150", + "1770172", + "1770307", + "1770353", + "1770380", + "1770383", + "1770384", + "1770385", + "1770416", + "1770461", + "1770477", + "1770530", + "1770659", + "1770772", + "1770773", + "1770821", + "1770828", + "1770849", + "1770869", + "1770880", + "1770918", + "1770955", + "1771019", + "1771040", + "1771055", + "1771067", + "1771143", + "1771203", + "1771204", + "1771214", + "1771245", + "1771296", + "1771308", + "1771357", + "1771385", + "1771391", + "1771441", + "1771455", + "1771509", + "1771531", + "1771555", + "1771634", + "1771650", + "1771678", + "1771698", + "1771772", + "1771779", + "1771846", + "1771848", + "1771859", + "1771872", + "1771903", + "1771977", + "1771997", + "1772013", + "1772043", + "1772094", + "1772169", + "1772179", + "1772255", + "1772260", + "1772352", + "1772374", + "1772422", + "1772427", + "1772428", + "1772447", + "1772462", + "1772543", + "1772668", + "1772716", + "1772793", + "1772822", + "1772940", + "1772956", + "1772977", + "1773002", + "1773062", + "1773069", + "1773081", + "1773163", + "1773248", + "1773309", + "1773313", + "1773328", + "1773484", + "1773572", + "1773577", + "1773662", + "1773677", + "1773728", + "1773742", + "1773744", + "1773746", + "1773783", + "1773901", + "1773904", + "1774092", + "1774095", + "1774243", + "1774253", + "1774262", + "1774268", + "1774283", + "1774285", + "1774314", + "1774347", + "1774358", + "1774470", + "1774575", + "1774576", + "1774583", + "1774598", + "1774600", + "1774604", + "1774618", + "1774626", + "1774635", + "1774640", + "1774654", + "1774661", + "1774682", + "1774691", + "1774702", + "1774712", + "1774792", + "1774797", + "1774859", + "1774873", + "1774878", + "1774907", + "1774918", + "1774929", + "1774959", + "1774997", + "1775046", + "1775055", + "1775089", + "1775112", + "1775118", + "1775148", + "1775172", + "1775290", + "1775291", + "1775301", + "1775329", + "1775508", + "1775509", + "1775631", + "1775672", + "1775680", + "1775796", + "1775866", + "1775891", + "1775913", + "1775962", + "1775963", + "1775970", + "1775980", + "1776067", + "1776094", + "1776167", + "1776182", + "1776207", + "1776265", + "1776268", + "1776330", + "1776371", + "1776397", + "1776459", + "1776462", + "1776467", + "1776470", + "1776472", + "1776473", + "1776476", + "1776618", + "1776619", + "1776861", + "1776862", + "1776871", + "1777024", + "1777034", + "1777052", + "1777075", + "1777120", + "1777165", + "1777166", + "1777179", + "1777253", + "1777261", + "1777289", + "1777463", + "1777471", + "1777517", + "1777631", + "1777727", + "1777728", + "1777730", + "1777737", + "1777942", + "1777974", + "1777976", + "1777980", + "1777982", + "1777994", + "1777996", + "1778000", + "1778006", + "1778007", + "1778013", + "1778015", + "1778024", + "1778031", + "1778033", + "1778034", + "1778037", + "1778045", + "1778049", + "1778074", + "1778109", + "1778127", + "1778143", + "1778337", + "1778430", + "1778517", + "1778534", + "1778548", + "1778551", + "1778555", + "1778596", + "1778688", + "1779258", + "1779269", + "1779276", + "1779334", + "1779399", + "1779430", + "1779435", + "1779456", + "1779633", + "1779641", + "1779643", + "1779671", + "1779690", + "1779740", + "1779959", + "1780049", + "1780072", + "1780149", + "1780150", + "1780209", + "1780213", + "1780214", + "1780215", + "1780272", + "1780309", + "1780313", + "1780326", + "1780330", + "1780344", + "1780378", + "1780390", + "1780414", + "1780437", + "1780440", + "1780450", + "1780617", + "1780646", + "1780668", + "1780705", + "1780716", + "1780856", + "1780857", + "1780860", + "1780862", + "1780897", + "1780926", + "1780928", + "1780954", + "1781008", + "1781016", + "1781029", + "1781234", + "1781350", + "1781413", + "1781420", + "1781421", + "1781446", + "1781473", + "1781503", + "1781531", + "1781598", + "1781694", + "1781803", + "1781819", + "1781944", + "1781946", + "1782031", + "1782115", + "1782177", + "1782185", + "1782208", + "1782214", + "1782249", + "1782267", + "1782273", + "1782277", + "1782279", + "1782289", + "1782310", + "1782319", + "1782326", + "1782328", + "1782354", + "1782422", + "1782424", + "1782457", + "1782466", + "1782507", + "1782523", + "1782542", + "1782543", + "1782560", + "1782579", + "1782585", + "1782595", + "1782615", + "1782622", + "1782627", + "1782645", + "1782672", + "1782682", + "1782689", + "1782700", + "1782706", + "1782707", + "1782709", + "1782726", + "1782727", + "1782743", + "1782744", + "1782745", + "1782747", + "1782762", + "1782763", + "1782776", + "1782777", + "1782803", + "1782808", + "1782809", + "1782822", + "1782833", + "1782837", + "1782840", + "1782841", + "1782853", + "1782870", + "1782871", + "1782878", + "1782921", + "1782927", + "1782928", + "1782934", + "1782948", + "1782961", + "1782972", + "1782978", + "1782993", + "1783002", + "1783008", + "1783013", + "1783016", + "1783035", + "1783037", + "1783043", + "1783045", + "1783055", + "1783059", + "1783090", + "1783173", + "1783302", + "1783313", + "1783371", + "1783378", + "1783652", + "1783713", + "1783725", + "1783777", + "1783811", + "1783841", + "1783842", + "1783855", + "1783882", + "1783906", + "1783940", + "1783971", + "1784281", + "1784282", + "1784349", + "1784359", + "1784422", + "1784461", + "1784513", + "1784582", + "1784610", + "1784646", + "1784688", + "1784761", + "1784812", + "1784826", + "1784853", + "1784893", + "1784936", + "1784959", + "1785024", + "1785072", + "1785105", + "1785145", + "1785149", + "1785162", + "1785166", + "1785168", + "1785181", + "1785185", + "1785220", + "1785280", + "1785286", + "1785314", + "1785329", + "1785331", + "1785361", + "1785367", + "1785399", + "1785403", + "1785725", + "1785728", + "1785730", + "1785732", + "1785733", + "1785744", + "1785832", + "1785875", + "1785886", + "1785887", + "1785888", + "1785895", + "1785913", + "1785916", + "1785951", + "1785955", + "1785992", + "1785997", + "1786007", + "1786017", + "1786035", + "1786036", + "1786217", + "1786219", + "1786247", + "1786308", + "1786317", + "1786360", + "1786455", + "1786565", + "1786566", + "1786567", + "1786573", + "1786597", + "1786619", + "1786651", + "1786658", + "1786664", + "1786711", + "1786733", + "1786808", + "1786902", + "1786912", + "1786913", + "1786936", + "1786958", + "1786980", + "1786984", + "1786985", + "1786990", + "1787003", + "1787009", + "1787010", + "1787064", + "1787072", + "1787079", + "1787090", + "1787106", + "1787112", + "1787165", + "1787213", + "1787226", + "1787267", + "1787279", + "1787381", + "1787400", + "1787417", + "1787438", + "1787504", + "1787506", + "1787590", + "1787610", + "1787631", + "1787697", + "1787751", + "1787770", + "1787825", + "1787859", + "1787905", + "1788034", + "1788037", + "1788045", + "1788063", + "1788070", + "1788139", + "1788278", + "1788372", + "1788425", + "1788485", + "1788522", + "1788553", + "1788635", + "1788673", + "1788677", + "1788679", + "1788680", + "1788681", + "1788711", + "1788717", + "1788720", + "1788734", + "1788813", + "1788846", + "1788856", + "1788881", + "1788891", + "1788917", + "1788953", + "1789057", + "1789071", + "1789073", + "1789076", + "1789086", + "1789155", + "1789191", + "1789193", + "1789212", + "1789225", + "1789250", + "1789255", + "1789267", + "1789403", + "1789481", + "1789498", + "1789505", + "1789512", + "1789553", + "1789580", + "1789604", + "1789637", + "1789694", + "1789695", + "1789730", + "1789745", + "1789753", + "1789755", + "1789783", + "1789785", + "1789794", + "1789805", + "1789840", + "1789849", + "1789957", + "1789982", + "1789984", + "1790002", + "1790013", + "1790062", + "1790072", + "1790084", + "1790153", + "1790230", + "1790240", + "1790246", + "1790248", + "1790257", + "1790258", + "1790268", + "1790274", + "1790287", + "1790308", + "1790331", + "1790343", + "1790361", + "1790364", + "1790369", + "1790371", + "1790376", + "1790450", + "1790625", + "1790671", + "1790692", + "1790737", + "1790787", + "1790816", + "1790832", + "1790876", + "1790888", + "1790900", + "1790910", + "1790937", + "1790945", + "1791010", + "1791094", + "1791331", + "1791372", + "1791379", + "1791384", + "1791422", + "1791514", + "1791590", + "1791660", + "1791680", + "1791698", + "1791715", + "1791735", + "1791736", + "1791784", + "1791793", + "1791837", + "1791846", + "1791862", + "1792061", + "1792072", + "1792073", + "1792087", + "1792091", + "1792095", + "1792096", + "1792099", + "1792210", + "1792276", + "1792292", + "1792300", + "1792318", + "1792335", + "1792377", + "1792379", + "1792383", + "1792411", + "1792414", + "1792418", + "1792426", + "1792430", + "1792431", + "1792442", + "1792449", + "1792456", + "1792465", + "1792475", + "1792478", + "1792485", + "1792497", + "1792517", + "1792555", + "1792560", + "1792564", + "1792645", + "1792695", + "1792768", + "1792817", + "1792827", + "1792831", + "1792996", + "1793189", + "1793192", + "1793243", + "1793246", + "1793368", + "1793369", + "1793419", + "1793453", + "1793455", + "1793515", + "1793533", + "1793538", + "1793542", + "1793613", + "1793631", + "1793635", + "1793646", + "1793661", + "1793689", + "1793699", + "1793877", + "1793983", + "1793986", + "1794102", + "1794273", + "1794351", + "1794361", + "1794425", + "1794507", + "1794510", + "1794518", + "1794532", + "1794590", + "1794609", + "1795042", + "1795045", + "1795049", + "1795065", + "1795068", + "1795074", + "1795110", + "1795215", + "1795282", + "1795483", + "1795542", + "1795657", + "1795788", + "1795802", + "1795812", + "1795854", + "1795862", + "1795871", + "1795900", + "1795930", + "1795946", + "1795957", + "1796007", + "1796032", + "1796035", + "1796040", + "1796100", + "1796117", + "1796139", + "1796145", + "1796169", + "1796180", + "1796181", + "1796188", + "1796217", + "1796257", + "1796274", + "1796310", + "1796312", + "1796338", + "1796423", + "1796451", + "1796463", + "1796523", + "1796678", + "1796791", + "1796842", + "1796941", + "1796958", + "1796984", + "1797039", + "1797111", + "1797121", + "1797122", + "1797135", + "1797137", + "1797146", + "1797178", + "1797194", + "1797198", + "1797206", + "1797210", + "1797218", + "1797252", + "1797257", + "1797258", + "1797275", + "1797276", + "1797285", + "1797290", + "1797296", + "1797300", + "1797333", + "1797339", + "1797349", + "1797365", + "1797367", + "1797373", + "1797374", + "1797375", + "1797394", + "1797409", + "1797429", + "1797432", + "1797433", + "1797436", + "1797440", + "1797445", + "1797454", + "1797464", + "1797475", + "1797479", + "1797488", + "1797507", + "1797521", + "1797527", + "1797542", + "1797556", + "1797587", + "1797592", + "1797593", + "1797595", + "1797601", + "1797727", + "1797735", + "1797793", + "1797903", + "1798014", + "1798018", + "1798023", + "1798025", + "1798060", + "1798084", + "1798090", + "1798101", + "1798288", + "1798329", + "1798335", + "1798346", + "1798371", + "1798372", + "1798375", + "1798393", + "1798402", + "1798408", + "1798427", + "1798449", + "1798481", + "1798488", + "1798504", + "1798511", + "1798529", + "1798580", + "1798594", + "1798687", + "1798794", + "1798802", + "1798807", + "1798823", + "1798863", + "1798868", + "1798916", + "1798922", + "1798931", + "1798971", + "1798974", + "1798984", + "1799132", + "1799135", + "1799165", + "1799167", + "1799183", + "1799417", + "1799433", + "1799675", + "1799680", + "1799701", + "1799703", + "1799708", + "1799743", + "1799751", + "1799757", + "1799774", + "1799799", + "1799821", + "1799870", + "1799877", + "1799880", + "1799884", + "1799894", + "1799900", + "1799901", + "1799917", + "1799925", + "1799938", + "1799944", + "1799956", + "1799957", + "1799967", + "1800004", + "1800017", + "1800024", + "1800028", + "1800032", + "1800130", + "1800140", + "1800149", + "1800191", + "1800238", + "1800441", + "1800473", + "1800522", + "1800528", + "1800539", + "1800562", + "1800642", + "1800696", + "1800821", + "1800843", + "1800844", + "1800881", + "1800963", + "1801001", + "1801051", + "1801073", + "1801080", + "1801084", + "1801170", + "1801196", + "1801303", + "1801305", + "1801316", + "1801432", + "1801461", + "1801787", + "1801896", + "1801903", + "1801922", + "1801993", + "1802120", + "1802229", + "1802244", + "1802280", + "1802337", + "1802662", + "1802702", + "1802776", + "1802783", + "1802827", + "1802850", + "1802868", + "1802888", + "1802919", + "1802939", + "1802978", + "1802998", + "1803012", + "1803021", + "1803022", + "1803025", + "1803035", + "1803039", + "1803060", + "1803065", + "1803073", + "1803091", + "1803108", + "1803148", + "1803163", + "1803197", + "1803218", + "1803461", + "1803544", + "1803545", + "1803590", + "1803781", + "1803788", + "1803824", + "1804071", + "1804074", + "1804120", + "1804148", + "1804182", + "1804331", + "1804394", + "1804398", + "1804409", + "1804430", + "1804477", + "1804512", + "1804610", + "1804721", + "1804727", + "1804742", + "1804759", + "1804906", + "1804963", + "1804969", + "1804971", + "1804974", + "1805043", + "1805044", + "1805110", + "1805111", + "1805155", + "1805271", + "1805524", + "1805535", + "1805537", + "1805540", + "1805549", + "1805682", + "1805691", + "1805717", + "1805806", + "1805938", + "1805955", + "1805982", + "1806064", + "1806075", + "1806145", + "1806170", + "1806176", + "1806690", + "1806702", + "1806704", + "1806737", + "1806740", + "1806814", + "1806871", + "1806872", + "1806878", + "1806887", + "1806936", + "1807271", + "1807273", + "1807473", + "1807477", + "1807478", + "1807479", + "1807480", + "1807483", + "1807485", + "1807488", + "1807491", + "1807503", + "1807553", + "1807569", + "1807634", + "1807881", + "1807969", + "1808088", + "1808145", + "1808161", + "1808172", + "1808180", + "1808195", + "1808221", + "1808232", + "1808236", + "1808286", + "1808359", + "1808381", + "1808440", + "1808450", + "1808559", + "1808590", + "1808592", + "1808752", + "1809019", + "1809066", + "1809115", + "1809127", + "1809135", + "1809158", + "1809159", + "1809210", + "1809244", + "1809248", + "1809294", + "1809299", + "1809305", + "1809308", + "1809348", + "1809381", + "1809387", + "1809491", + "1809499", + "1809585", + "1809594", + "1810025", + "1810099", + "1810121", + "1810145", + "1810172", + "1810464", + "1810469", + "1810743", + "1810752", + "1810846", + "1810851", + "1810867", + "1811019", + "1811026", + "1811079", + "1811081", + "1811122", + "1811439", + "1811455", + "1811462", + "1811465", + "1811686", + "1811814", + "1811948", + "1812026", + "1812105", + "1812207", + "1812262", + "1812394", + "1812437", + "1812453", + "1812465", + "1812500", + "1812573", + "1812658", + "1812881", + "1813010", + "1813114", + "1813248", + "1813263", + "1813415", + "1813460", + "1813468", + "1814182", + "1814323", + "1814336", + "1814338", + "1814357", + "1814359", + "1814365", + "1814538", + "1814552", + "1814630", + "1814653", + "1814665", + "1814800", + "1814823", + "1814827", + "1814838", + "1814843", + "1814863", + "1814877", + "1814913", + "1814928", + "1814971", + "1815260", + "1815315", + "1815338", + "1815856", + "1816029", + "1816065", + "1816110", + "1816138", + "1816264", + "1816276", + "1816292", + "1816299", + "1816362", + "1816434", + "1816570", + "1816634", + "1816648", + "1816673", + "1816775", + "1816881", + "1817065", + "1817086", + "1817160", + "1817171", + "1817217", + "1817696", + "1817727", + "1817729", + "1817732", + "1817734", + "1817797", + "1817808", + "1817810", + "1817852", + "1817854", + "1817864", + "1817940", + "1817973", + "1818216", + "1818413", + "1818454", + "1818463", + "1818659", + "1818991", + "1819057", + "1819128", + "1819145", + "1819170", + "1819268", + "1819270", + "1819280", + "1819337", + "1819362", + "1819668", + "1819685", + "1819699", + "1819852", + "1819873", + "1819970", + "1820039", + "1820118", + "1820137", + "1820275", + "1820282", + "1820352", + "1820372", + "1820406", + "1820414", + "1820435", + "1820450", + "1820451", + "1820458", + "1820477", + "1820478", + "1820565", + "1820573", + "1820711", + "1820722", + "1820753", + "1820791", + "1820888", + "1820940", + "1821051", + "1821105", + "1821113", + "1821448", + "1821455", + "1821464", + "1821468", + "1821478", + "1821505", + "1821542", + "1821547", + "1821651", + "1821856", + "1821863", + "1821920", + "1821934", + "1821940", + "1822017", + "1822141", + "1822142", + "1822257", + "1822346", + "1822487", + "1822493", + "1822587", + "1822610", + "1822613", + "1822784", + "1822787", + "1822788", + "1822796", + "1822805", + "1822819", + "1822830", + "1822848", + "1822916", + "1822917", + "1823294", + "1823444", + "1823493", + "1823573", + "1823604", + "1823706", + "1823726", + "1824080", + "1824113", + "1824117", + "1824121", + "1824131", + "1824242", + "1824259", + "1824280", + "1824330", + "1824338", + "1824354", + "1824390", + "1824442", + "1824449", + "1824571", + "1824751", + "1824845", + "1825064", + "1825077", + "1825082", + "1825083", + "1825156", + "1825176", + "1825218", + "1825238", + "1825373", + "1825391", + "1825428", + "1825430", + "1825539", + "1825786", + "1825956", + "1825967", + "1825971", + "1825983", + "1826022", + "1826033", + "1826048", + "1826058", + "1826084", + "1826108", + "1826129", + "1826156", + "1826163", + "1826164", + "1826167", + "1826169", + "1826172", + "1826173", + "1826175", + "1826181", + "1826222", + "1826772", + "1827103", + "1827112", + "1827113", + "1827125", + "1827132", + "1827133", + "1827161", + "1827349", + "1827408", + "1827429", + "1827484", + "1827507", + "1827645", + "1827650", + "1827687", + "1827711", + "1827716", + "1827775", + "1827802", + "1827810", + "1827826", + "1827829", + "1828105", + "1828162", + "1828268", + "1828310", + "1828317", + "1828395", + "1828400", + "1828402", + "1828455", + "1828456", + "1828471", + "1828491", + "1828540", + "1828543", + "1828544", + "1828637", + "1828826", + "1828976", + "1829021", + "1829029", + "1829287", + "1829322", + "1829363", + "1829533", + "1829588", + "1829612", + "1829659", + "1829703", + "1829776", + "1829785", + "1829823", + "1829866", + "1829974", + "1830031", + "1830099", + "1830122", + "1830125", + "1830131", + "1830137", + "1830147", + "1830152", + "1830191", + "1830203", + "1830207", + "1830241", + "1830243", + "1830262", + "1830266", + "1830271", + "1830284", + "1830372", + "1830374", + "1830380", + "1830407", + "1830408", + "1830410", + "1830419", + "1830435", + "1830442", + "1830457", + "1830459", + "1830498", + "1830632", + "1830669", + "1830681", + "1830802", + "1830812", + "1830838", + "1830843", + "1830879", + "1830937", + "1830962", + "1831002", + "1831009", + "1831097", + "1831136", + "1831168", + "1831458", + "1831473", + "1831499", + "1831508", + "1831565", + "1831631", + "1831643", + "1831667", + "1831752", + "1831775", + "1831780", + "1831861", + "1831999", + "1832235", + "1832254", + "1832518", + "1832533", + "1832553", + "1832569", + "1832612", + "1832649", + "1832853", + "1832915", + "1832927", + "1833475", + "1833477", + "1833497", + "1833499", + "1833500", + "1833518", + "1833523", + "1833525", + "1833531", + "1833539", + "1833562", + "1833600", + "1833626", + "1833627", + "1833653", + "1833782", + "1833794", + "1834078", + "1834428", + "1834497", + "1834524", + "1834547", + "1834589", + "1834710", + "1834793", + "1834850", + "1834980", + "1835031", + "1835082", + "1835086", + "1835121", + "1835128", + "1835156", + "1835348", + "1835393", + "1835396", + "1835407", + "1835430", + "1835432", + "1835433", + "1835436", + "1835438", + "1835449", + "1835451", + "1835456", + "1835457", + "1835467", + "1835500", + "1835555", + "1835609", + "1835612", + "1835790", + "1835814", + "1835819", + "1835821", + "1835848", + "1835862", + "1835908", + "1835928", + "1836871", + "1836899", + "1836906", + "1836907", + "1837053", + "1837159", + "1837172", + "1837343", + "1837420", + "1837429", + "1837464", + "1837515", + "1837569", + "1837646", + "1837706", + "1837724", + "1837726", + "1837727", + "1837857", + "1837870", + "1837894", + "1837900", + "1837968", + "1838058", + "1838065", + "1838071", + "1838084", + "1838224", + "1838251", + "1838255", + "1838276", + "1838289", + "1838297", + "1838304", + "1838308", + "1838331", + "1838333", + "1838360", + "1838465", + "1838512", + "1838584", + "1838626", + "1838633", + "1838635", + "1838641", + "1838649", + "1838691", + "1838811", + "1838838", + "1838905", + "1838911", + "1838958", + "1838960", + "1838969", + "1839094", + "1839293", + "1839296", + "1839317", + "1839323", + "1839325", + "1839333", + "1839396", + "1839560", + "1839604", + "1839625", + "1839658", + "1839714", + "1839721", + "1839851", + "1839878", + "1839893", + "1840260", + "1840297", + "1840301", + "1840311", + "1840345", + "1840346", + "1840360", + "1840371", + "1840379", + "1840380", + "1840408", + "1840441", + "1840448", + "1840478", + "1840483", + "1840520", + "1840543", + "1840553", + "1840555", + "1840566", + "1840570", + "1840581", + "1840592", + "1840596", + "1840656", + "1840726", + "1840774", + "1840776", + "1840812", + "1840844", + "1841081", + "1841084", + "1841091", + "1841158", + "1841159", + "1841183", + "1841188", + "1841219", + "1841221", + "1841261", + "1841296", + "1841302", + "1841460", + "1841476", + "1841616", + "1841706", + "1841782", + "1841813", + "1841946", + "1842097", + "1842124", + "1842196", + "1842446", + "1842485", + "1842542", + "1842690", + "1842695", + "1843313", + "1843326", + "1843331", + "1843370", + "1843444", + "1843485", + "1843564", + "1843602", + "1845270", + "1845271", + "1845314", + "1845329", + "1845335", + "1845368", + "1845385", + "1845442", + "1845448", + "1845455", + "1845502", + "1845503", + "1845513", + "1845547", + "1845565", + "1845574", + "1845586", + "1845604", + "1845605", + "1845607", + "1845616", + "1845793", + "1845866", + "1845952", + "1845962", + "1845965", + "1845982", + "1846035", + "1846052", + "1846099", + "1846103", + "1846107", + "1846111", + "1846112", + "1846133", + "1846141", + "1846149", + "1846159", + "1846190", + "1846219", + "1846229", + "1846236", + "1846259", + "1846261", + "1846313", + "1846351", + "1846374", + "1846439", + "1846505", + "1846604", + "1846657", + "1846715", + "1846729", + "1846849", + "1846858", + "1846860", + "1846916", + "1846941", + "1846945", + "1846971", + "1846992", + "1847059", + "1847061", + "1847064", + "1847066", + "1847068", + "1847097", + "1847111", + "1847149", + "1847157", + "1847249", + "1847260", + "1847274", + "1847308", + "1847343", + "1847392", + "1847407", + "1847426", + "1847484", + "1847498", + "1847572", + "1847639", + "1847641", + "1847919", + "1847930", + "1847944", + "1847956", + "1848114", + "1848150", + "1848202", + "1848212", + "1848219", + "1848272", + "1848273", + "1848274", + "1848295", + "1848312", + "1848322", + "1848325", + "1848356", + "1848378", + "1848426", + "1848490", + "1848596", + "1848610", + "1848636", + "1848639", + "1848669", + "1848690", + "1848713", + "1848714", + "1848717", + "1848730", + "1848741", + "1848864", + "1848868", + "1848920", + "1849007", + "1849010", + "1849104", + "1849267", + "1849273", + "1849284", + "1849294", + "1849457", + "1849470", + "1849477", + "1849630", + "1849656", + "1849856", + "1849897", + "1849924", + "1850008", + "1850042", + "1850076", + "1850106", + "1850156", + "1850184", + "1850225", + "1850238", + "1850246", + "1850279", + "1850321", + "1850335", + "1850386", + "1850394", + "1850450", + "1850463", + "1850497", + "1850506", + "1850522", + "1850533", + "1850538", + "1850570", + "1850585", + "1850597", + "1850640", + "1850673", + "1850690", + "1850722", + "1850729", + "1850764", + "1850771", + "1850773", + "1850774", + "1850781", + "1850798", + "1850868", + "1850908", + "1850922", + "1850923", + "1851000", + "1851002", + "1851010", + "1851011", + "1851039", + "1851203", + "1851213", + "1851220", + "1851237", + "1851243", + "1851300", + "1851337", + "1851347", + "1851453", + "1851462", + "1851543", + "1851555", + "1851670", + "1851714", + "1851845", + "1852150", + "1852159", + "1852165", + "1852177", + "1852320", + "1852382", + "1852430", + "1852751", + "1852787", + "1852831", + "1852901", + "1852956", + "1853064", + "1853190", + "1853242", + "1853312", + "1853578", + "1854021", + "1854143", + "1854202", + "1854237", + "1854249", + "1854259", + "1854287", + "1854347", + "1854615", + "1854792", + "1854824", + "1854849", + "1854906", + "1854920", + "1855241", + "1855358", + "1855452", + "1855630", + "1855799", + "1855804", + "1855807", + "1855813", + "1856005", + "1856105", + "1856289", + "1856348", + "1856368", + "1856384", + "1856394", + "1856503", + "1856516", + "1856555", + "1856581", + "1856595", + "1856620", + "1856663", + "1856668", + "1856691", + "1856701", + "1856730", + "1856768", + "1856772", + "1856867", + "1856891", + "1856893", + "1857020", + "1857143", + "1857180", + "1857213", + "1857233", + "1857258", + "1857295", + "1857315", + "1857385", + "1857410", + "1857577", + "1857581", + "1857626", + "1857690", + "1857785", + "1857809", + "1857828", + "1857829", + "1857840", + "1857856", + "1857863", + "1857878", + "1857882", + "1857900", + "1857918", + "1857924", + "1857935", + "1857938", + "1857948", + "1857973", + "1857978", + "1858074", + "1858100", + "1858113", + "1858163", + "1858283", + "1858404", + "1858411", + "1858526", + "1858531", + "1858557", + "1858615", + "1858637", + "1858659", + "1858660", + "1858674", + "1858698", + "1858706", + "1858762", + "1858775", + "1858778", + "1858873", + "1858930", + "1859046", + "1859061", + "1859100", + "1859161", + "1859177", + "1859285", + "1859287", + "1859305", + "1859453", + "1859471", + "1859480", + "1859534", + "1859932", + "1859952", + "1860026", + "1860063", + "1860108", + "1860118", + "1860184", + "1860259", + "1860261", + "1860274", + "1860408", + "1860443", + "1860621", + "1860628", + "1860659", + "1860664", + "1860668", + "1860671", + "1860688", + "1860711", + "1860736", + "1860765", + "1860768", + "1860857", + "1860974", + "1860979", + "1860983", + "1860987", + "1860989", + "1860993", + "1860994", + "1860996", + "1861011", + "1861030", + "1861031", + "1861395", + "1861433", + "1861451", + "1861456", + "1861457", + "1861458", + "1861479", + "1861488", + "1861494", + "1861510", + "1861544", + "1861559", + "1861584", + "1861592", + "1861604", + "1861644", + "1861663", + "1861665", + "1861673", + "1861697", + "1861705", + "1861714", + "1861721", + "1861759", + "1861773", + "1861783", + "1861784", + "1861797", + "1861823", + "1861834", + "1861836", + "1861851", + "1861862", + "1861887", + "1861892", + "1861893", + "1861933", + "1861937", + "1861938", + "1861949", + "1861951", + "1861953", + "1861958", + "1861967", + "1861975", + "1862008", + "1862026", + "1862033", + "1862044", + "1862046", + "1862047", + "1862049", + "1862066", + "1862078", + "1862083", + "1862087", + "1862088", + "1862091", + "1862094", + "1862096", + "1862123", + "1862129", + "1862163", + "1862181", + "1862198", + "1862293", + "1862311", + "1862331", + "1862363", + "1862370", + "1862394", + "1862401", + "1862403", + "1862414", + "1862430", + "1862433", + "1862434", + "1862441", + "1862449", + "1862454", + "1862468", + "1862475", + "1862481", + "1862516", + "1862517", + "1862521", + "1862526", + "1862547", + "1862551", + "1862569", + "1862572", + "1862578", + "1862580", + "1862595", + "1862624", + "1862658", + "1862692", + "1862701", + "1862719", + "1862757", + "1862765", + "1862774", + "1862805", + "1862837", + "1862841", + "1862916", + "1862917", + "1862923", + "1862928", + "1863021", + "1863025", + "1863034", + "1863051", + "1863075", + "1863080", + "1863088", + "1863109", + "1863143", + "1863282", + "1863354", + "1863366", + "1863405", + "1863407", + "1863412", + "1863426", + "1863467", + "1863584", + "1863640", + "1863646", + "1863699", + "1863701", + "1863706", + "1863714", + "1863724", + "1863732", + "1863734", + "1863735", + "1863742", + "1863757", + "1863829", + "1863848", + "1863856", + "1863858", + "1863864", + "1863880", + "1863944", + "1863955", + "1863978", + "1863982", + "1864004", + "1864008", + "1864021", + "1864058", + "1864070", + "1864090", + "1864103", + "1864106", + "1864126", + "1864135", + "1864156", + "1864161", + "1864164", + "1864204", + "1864316", + "1864320", + "1864321", + "1864329", + "1864352", + "1864358", + "1864377", + "1864576", + "1864652", + "1864793", + "1864796", + "1864897", + "1864905", + "1865102", + "1865107", + "1865108", + "1865120", + "1865132", + "1865295", + "1865299", + "1865319", + "1865328", + "1865333", + "1865341", + "1865345", + "1865347", + "1865353", + "1865555", + "1865571", + "1865572", + "1865578", + "1865590", + "1865650", + "1865659", + "1865660", + "1865666", + "1865668", + "1865671", + "1865709", + "1865764", + "1865837", + "1865839", + "1865842", + "1865853", + "1865856", + "1865862", + "1865869", + "1865930", + "1866006", + "1866085", + "1866105", + "1866123", + "1866162", + "1866164", + "1866214", + "1866237", + "1866252", + "1866262", + "1866311", + "1866336", + "1866338", + "1866341", + "1866356", + "1866421", + "1866491", + "1866549", + "1866550", + "1866556", + "1866568", + "1866570", + "1866573", + "1866601", + "1866838", + "1866902", + "1867009", + "1867014", + "1867021", + "1867022", + "1867029", + "1867032", + "1867037", + "1867218", + "1867224", + "1867312", + "1867426", + "1867515", + "1867525", + "1867552", + "1867673", + "1867722", + "1867751", + "1867773", + "1867788", + "1867820", + "1867928", + "1867991", + "1867993", + "1868014", + "1868025", + "1868060", + "1868211", + "1868334", + "1868360", + "1868409", + "1868428", + "1868470", + "1868499", + "1868527", + "1868535", + "1868837", + "1868884", + "1868952", + "1869043", + "1869057", + "1869178", + "1869238", + "1869359", + "1869363", + "1869478", + "1869489", + "1869512", + "1869595", + "1869656", + "1869666", + "1869706", + "1869707", + "1869714", + "1869803", + "1869825", + "1869852", + "1869976", + "1870037", + "1870202", + "1870237", + "1870249", + "1870250", + "1870267", + "1870415", + "1870426", + "1870450", + "1870452", + "1870459", + "1870506", + "1870509", + "1870703", + "1870721", + "1870727", + "1870733", + "1870751", + "1870777", + "1870988", + "1871175", + "1871212", + "1871217", + "1871252", + "1871379", + "1871407", + "1871414", + "1871419", + "1871451", + "1871457", + "1871504", + "1871597", + "1871630", + "1871683", + "1871698", + "1871754", + "1871763", + "1871783", + "1871826", + "1871890", + "1871923", + "1871940", + "1871988", + "1872169", + "1872210", + "1872255", + "1872315", + "1872359", + "1872361", + "1872368", + "1872452", + "1872456", + "1872466", + "1872470", + "1872514", + "1872515", + "1872735", + "1872848", + "1872850", + "1872873", + "1872901", + "1873048", + "1873051", + "1873079", + "1873215", + "1873267", + "1873285", + "1873290", + "1873291", + "1873319", + "1873373", + "1873376", + "1873381", + "1873384", + "1873398", + "1873411", + "1873417", + "1873585", + "1873620", + "1873697", + "1873753", + "1873773", + "1873776", + "1873780", + "1873783", + "1873843", + "1874146", + "1874158", + "1874160", + "1874168", + "1874179", + "1874192", + "1874204", + "1874211", + "1874229", + "1874248", + "1874257", + "1874269", + "1874274", + "1874280", + "1874317", + "1874375", + "1874552", + "1874743", + "1874937", + "1875008", + "1875120", + "1875319", + "1875327", + "1875407", + "1875409", + "1875451", + "1875478", + "1875483", + "1875485", + "1875534", + "1875554", + "1875584", + "1875606", + "1875607", + "1875631", + "1875682", + "1875687", + "1875827", + "1875844", + "1875865", + "1875869", + "1875885", + "1875914", + "1875918", + "1875958", + "1876168", + "1876329", + "1876409", + "1876479", + "1876512", + "1876542", + "1876548", + "1876549", + "1876592", + "1876623", + "1876665", + "1876854", + "1876922", + "1876955", + "1876987", + "1877002", + "1877282", + "1877310", + "1877321", + "1877338", + "1877341", + "1877345", + "1877353", + "1877364", + "1877365", + "1877368", + "1877372", + "1877406", + "1877443", + "1877453", + "1877492", + "1877498", + "1877537", + "1877788", + "1877940", + "1877941", + "1877975", + "1877986", + "1877988", + "1877995", + "1878067", + "1878158", + "1878173", + "1878197", + "1878350", + "1878370", + "1878392", + "1878406", + "1878471", + "1878490", + "1878500", + "1878586", + "1878626", + "1878656", + "1878705", + "1878744", + "1878751", + "1878753", + "1878782", + "1878789", + "1878804", + "1878810", + "1878826", + "1878837", + "1878862", + "1878879", + "1878895", + "1878904", + "1878937", + "1878939", + "1878951", + "1878958", + "1879001", + "1879125", + "1879141", + "1879227", + "1879252", + "1879253", + "1879272", + "1879274", + "1879339", + "1879340", + "1879379", + "1879398", + "1879405", + "1879408", + "1879413", + "1879443", + "1879452", + "1879465", + "1879471", + "1879490", + "1879534", + "1879630", + "1879655", + "1879691", + "1879703", + "1879731", + "1879735", + "1879765", + "1879939", + "1879970", + "1879975", + "1880011", + "1880013", + "1880019", + "1880025", + "1880040", + "1880044", + "1880049", + "1880064", + "1880078", + "1880083", + "1880094", + "1880104", + "1880123", + "1880132", + "1880133", + "1880138", + "1880139", + "1880140", + "1880143", + "1880156", + "1880286", + "1880305", + "1880310", + "1880316", + "1880318", + "1880321", + "1880350", + "1880352", + "1880353", + "1880379", + "1880381", + "1880408", + "1880411", + "1880439", + "1880451", + "1880464", + "1880465", + "1880505", + "1880537", + "1880623", + "1880852", + "1880858", + "1880865", + "1880907", + "1880931", + "1880968", + "1880982", + "1881018", + "1881019", + "1881031", + "1881041", + "1881079", + "1881089", + "1881094", + "1881111", + "1881122", + "1881126", + "1881132", + "1881151", + "1881157", + "1881166", + "1881170", + "1881208", + "1881293", + "1881303", + "1881320", + "1881329", + "1881336", + "1881340", + "1881362", + "1881393", + "1881404", + "1881418", + "1881424", + "1881485", + "1881504", + "1881515", + "1881603", + "1881767", + "1881822", + "1881834", + "1881955", + "1881964", + "1882021", + "1882089", + "1882110", + "1882158", + "1882165", + "1882190", + "1882195", + "1882210", + "1882215", + "1882253", + "1882266", + "1882272", + "1882297", + "1882316", + "1882355", + "1882437", + "1882459", + "1882557", + "1882729", + "1882753", + "1882767", + "1882771", + "1882773", + "1882785", + "1882786", + "1882812", + "1882816", + "1882818", + "1882884", + "1882901", + "1882905", + "1882927", + "1882930", + "1882941", + "1882959", + "1882960", + "1882965", + "1882977", + "1882979", + "1883020", + "1883024", + "1883028", + "1883067", + "1883124", + "1883161", + "1883386", + "1883458", + "1883634", + "1883829", + "1883873", + "1883881", + "1883885", + "1883897", + "1883943", + "1883951", + "1883968", + "1883975", + "1883993", + "1884001", + "1884051", + "1884212", + "1884213", + "1884228", + "1884229", + "1884240", + "1884254", + "1884255", + "1884273", + "1884274", + "1884280", + "1884326", + "1884332", + "1884337", + "1884370", + "1884403", + "1884428", + "1884434", + "1884435", + "1884437", + "1884439", + "1884449", + "1884453", + "1884461", + "1884464", + "1884465", + "1884479", + "1884503", + "1884531", + "1884539", + "1884595", + "1884607", + "1884685", + "1884703", + "1884774", + "1884816", + "1884844", + "1884858", + "1884877", + "1884890", + "1884908", + "1884909", + "1884923", + "1884936", + "1884970", + "1884997", + "1885001", + "1885012", + "1885099", + "1885158", + "1885202", + "1885229", + "1885262", + "1885263", + "1885569", + "1885605", + "1885623", + "1885630", + "1885642", + "1885702", + "1885745", + "1885763", + "1885764", + "1885826", + "1885836", + "1885919", + "1885931", + "1885937", + "1885945", + "1885950", + "1885994", + "1886015", + "1886084", + "1886104", + "1886123", + "1886207", + "1886251", + "1886262", + "1886292", + "1886320", + "1886362", + "1886374", + "1886378", + "1886400", + "1886419", + "1886490", + "1886501", + "1886526", + "1886579", + "1886583", + "1886587", + "1886648", + "1886650", + "1886700", + "1886720", + "1886726", + "1886729", + "1886906", + "1886929", + "1886935", + "1887004", + "1887024", + "1887031", + "1887054", + "1887108", + "1887119", + "1887122", + "1887125", + "1887173", + "1887177", + "1887178", + "1887285", + "1887290", + "1887309", + "1887341", + "1887459", + "1887462", + "1887509", + "1887565", + "1887580", + "1887585", + "1887586", + "1887634", + "1887686", + "1887691", + "1887694", + "1887701", + "1888009", + "1888027", + "1888092", + "1888123", + "1888306", + "1888307", + "1888324", + "1888336", + "1888338", + "1888346", + "1888410", + "1888435", + "1888454", + "1888463", + "1888484", + "1888537", + "1888579", + "1888619", + "1888623", + "1888638", + "1888646", + "1888695", + "1888733", + "1888736", + "1888743", + "1888759", + "1888823", + "1888826", + "1888891", + "1888893", + "1888906", + "1888913", + "1888915", + "1888926", + "1888955", + "1888958", + "1889039", + "1889053", + "1889071", + "1889074", + "1889239", + "1889242", + "1889249", + "1889272", + "1889277", + "1889287", + "1889356", + "1889358", + "1889370", + "1889381", + "1889536", + "1889543", + "1889563", + "1889721", + "1889745", + "1889765", + "1889769", + "1889828", + "1889833", + "1889838", + "1889850", + "1889870", + "1889905", + "1889939", + "1889942", + "1890031", + "1890056", + "1890065", + "1890089", + "1890097", + "1890187", + "1890247", + "1890287", + "1890320", + "1890335", + "1890343", + "1890346", + "1890374", + "1890404", + "1890410", + "1890417", + "1890487", + "1890491", + "1890508", + "1890512", + "1890520", + "1890522", + "1890534", + "1890540", + "1890560", + "1890576", + "1890622", + "1890629", + "1890654", + "1890656", + "1890670", + "1890679", + "1890699", + "1890703", + "1890724", + "1890730", + "1890737", + "1890772", + "1890776", + "1890783", + "1890794", + "1890800", + "1890802", + "1890854", + "1890876", + "1890885", + "1890898", + "1890936", + "1890957", + "1890975", + "1891013", + "1891035", + "1891048", + "1891059", + "1891074", + "1891129", + "1891167", + "1891171", + "1891190", + "1891217", + "1891236", + "1891299", + "1891308", + "1891326", + "1891366", + "1891386", + "1891426", + "1891453", + "1891473", + "1891488", + "1891493", + "1891494", + "1891583", + "1891636", + "1891755", + "1891758", + "1891889", + "1891932", + "1891936", + "1892131", + "1892153", + "1892193", + "1892242", + "1892245", + "1892301", + "1892302", + "1892311", + "1892320", + "1892355", + "1892420", + "1892427", + "1892433", + "1892456", + "1892458", + "1892462", + "1892476", + "1892477", + "1892488", + "1892509", + "1892544", + "1892554", + "1892555", + "1892621", + "1892634", + "1892729", + "1892736", + "1892742", + "1892746", + "1892759", + "1892761", + "1892770", + "1892811", + "1892814", + "1892821", + "1892837", + "1892851", + "1892856", + "1892858", + "1892863", + "1892944", + "1893137", + "1893177", + "1893204", + "1893241", + "1893266", + "1893329", + "1893381", + "1893480", + "1893538", + "1893546", + "1893551", + "1893558", + "1893562", + "1893612", + "1893645", + "1893660", + "1893663", + "1893699", + "1893787", + "1893793", + "1893901", + "1893921", + "1893923", + "1893951", + "1893989", + "1893993", + "1894002", + "1894012", + "1894057", + "1894074", + "1894085", + "1894087", + "1894088", + "1894102", + "1894164", + "1894268", + "1894293", + "1894298", + "1894329", + "1894342", + "1894349", + "1894714", + "1894840", + "1894896", + "1895037", + "1895138", + "1895159", + "1895176", + "1895185", + "1895203", + "1895250", + "1895448", + "1895499", + "1895527", + "1895609", + "1895667", + "1895670", + "1895709", + "1895733", + "1895768", + "1895773", + "1895789", + "1895809", + "1895820", + "1895838", + "1895867", + "1895875", + "1895886", + "1895904", + "1895956", + "1895984", + "1895992", + "1896073", + "1896087", + "1896126", + "1896141", + "1896142", + "1896152", + "1896304", + "1896316", + "1896600", + "1896603", + "1896614", + "1896628", + "1896658", + "1896749", + "1896754", + "1896756", + "1896763", + "1896774", + "1896841", + "1896876", + "1896922", + "1896932", + "1896957", + "1897664", + "1897677", + "1897685", + "1897692", + "1897747", + "1897770", + "1897808", + "1897814", + "1897817", + "1897834", + "1897852", + "1897873", + "1897904", + "1897965", + "1897970", + "1897972", + "1897980", + "1897990", + "1898002", + "1898017", + "1898077", + "1898133", + "1898143", + "1898174", + "1898200", + "1898203", + "1898286", + "1898290", + "1898348", + "1898350", + "1898352", + "1898358", + "1898367", + "1898368", + "1898370", + "1898374", + "1898391", + "1898402", + "1898414", + "1898416", + "1898424", + "1898431", + "1898434", + "1898441", + "1898521", + "1898544", + "1898686", + "1898789", + "1898848", + "1898858", + "1898865", + "1898946", + "1898970", + "1898988", + "1899048", + "1899071", + "1899187", + "1899198", + "1899349", + "1899433", + "1899818", + "1899873", + "1899893", + "1899931", + "1899932", + "1899940", + "1899943", + "1899947", + "1899950", + "1899956", + "1899989", + "1899994", + "1900024", + "1900026", + "1900053", + "1900093", + "1900112", + "1900121", + "1900131", + "1900134", + "1900172", + "1900175", + "1900197", + "1900199", + "1900233", + "1900249", + "1900295", + "1900303", + "1900345", + "1900408", + "1900485", + "1900523", + "1900565", + "1900578", + "1900618", + "1900626", + "1900632", + "1900768", + "1900787", + "1900825", + "1900830", + "1900872", + "1900890", + "1900897", + "1900918", + "1900939", + "1901001", + "1901153", + "1901189", + "1901213", + "1901257", + "1901261", + "1901268", + "1901399", + "1901404", + "1901411", + "1901427", + "1901428", + "1901429", + "1901435", + "1901463", + "1901533", + "1901580", + "1901669", + "1901735", + "1901744", + "1901782", + "1901801", + "1901810", + "1901832", + "1901850", + "1902106", + "1902108", + "1902110", + "1902111", + "1902114", + "1902117", + "1902169", + "1902175", + "1902182", + "1902211", + "1902233", + "1902244", + "1902248", + "1902300", + "1902378", + "1902384", + "1902406", + "1902430", + "1902451", + "1902458", + "1902479", + "1902502", + "1902533", + "1902543", + "1902560", + "1902572", + "1902586", + "1902623", + "1902642", + "1902660", + "1902676", + "1902692", + "1902699", + "1902702", + "1902703", + "1902704", + "1902749", + "1902814", + "1902880", + "1902882", + "1903009", + "1903598", + "1903607", + "1903634", + "1903636", + "1903646", + "1903683", + "1904272", + "1904281", + "1904382", + "1904701", + "1904719", + "1904728", + "1904764", + "1904798", + "1904884", + "1904887", + "1904888", + "1904916", + "1904938", + "1904943", + "1904948", + "1904996", + "1905079", + "1905142", + "1905161", + "1905162", + "1905172", + "1905187", + "1905189", + "1905242", + "1905257", + "1905267", + "1905281", + "1905297", + "1905299", + "1905301", + "1905317", + "1905383", + "1905451", + "1906006", + "1906014", + "1906030", + "1906117", + "1906552", + "1906604", + "1906621", + "1906679", + "1906715", + "1907153", + "1907190", + "1907235", + "1907250", + "1907272", + "1907395", + "1907430", + "1907432", + "1907475", + "1907498", + "1907534", + "1907620", + "1907625", + "1907637", + "1907666", + "1907672", + "1907683", + "1907687", + "1907727", + "1908011", + "1908044", + "1908052", + "1908055", + "1908108", + "1908123", + "1908146", + "1908148", + "1908150", + "1908168", + "1908199", + "1908203", + "1908204", + "1908207", + "1908256", + "1908258", + "1908299", + "1908302", + "1908317", + "1908337", + "1908352", + "1908356", + "1908367", + "1908577", + "1908660", + "1908700", + "1908702", + "1908707", + "1908713", + "1908775", + "1908840", + "1908871", + "1908929", + "1908953", + "1908995", + "1909019", + "1909039", + "1909064", + "1909070", + "1909123", + "1909128", + "1909135", + "1909155", + "1909170", + "1909185", + "1909191", + "1909209", + "1909211", + "1909213", + "1909216", + "1909281", + "1909319", + "1909398", + "1909436", + "1909453", + "1909457", + "1909489", + "1909573", + "1909607", + "1909649", + "1909659", + "1909736", + "1909800", + "1909810", + "1909838", + "1909865", + "1909879", + "1909884", + "1910371", + "1910496", + "1910628", + "1910629", + "1910648", + "1910662", + "1910663", + "1910706", + "1910753", + "1910773", + "1910809", + "1911076", + "1911077", + "1911093", + "1911112", + "1911122", + "1911168", + "1911178", + "1911182", + "1911246", + "1911278", + "1911298", + "1911461", + "1911503", + "1911577", + "1911633", + "1911736", + "1911755", + "1911939", + "1911966", + "1912003", + "1912036", + "1912119", + "1912325", + "1912372", + "1912395", + "1912428", + "1912470", + "1912506", + "1913091", + "1913105", + "1913175", + "1913178", + "1913328", + "1913351", + "1914410", + "1914416", + "1914421", + "1914424", + "1914435", + "1914439", + "1914440", + "1914442", + "1914458", + "1914464", + "1914465", + "1914477", + "1914484", + "1914496", + "1914500", + "1914501", + "1914511", + "1914693", + "1914697", + "1914701", + "1914708", + "1915031", + "1915079", + "1915080", + "1915110", + "1915144", + "1915160", + "1915193", + "1915262", + "1915270", + "1915275", + "1915325", + "1915339", + "1915368", + "1915369", + "1915396", + "1915417", + "1915430", + "1915456", + "1915469", + "1915470", + "1915487", + "1915492", + "1915499", + "1915506", + "1916347", + "1916352", + "1916376", + "1916410", + "1916412", + "1916458", + "1916509", + "1916554", + "1916700", + "1916758", + "1916772", + "1916790", + "1917827", + "1917830", + "1917834", + "1917840", + "1918026", + "1918076", + "1918077", + "1918078", + "1918082", + "1918094", + "1918097", + "1918133", + "1918212", + "1918220", + "1918263", + "1918269", + "1918280", + "1918293", + "1918321", + "1918394", + "1918395", + "1918406", + "1918408", + "1918411", + "1918467", + "1918495", + "1918497", + "1918509", + "1918517", + "1918532", + "1918533", + "1918547", + "1918553", + "1918554", + "1918584", + "1918596", + "1918627", + "1918632", + "1918667", + "1918669", + "1918694", + "1918736", + "1918776", + "1918789", + "1918795", + "1918854", + "1918859", + "1918868", + "1918964", + "1918968", + "1918972", + "1918984", + "1918986", + "1918988", + "1919010", + "1919125", + "1919128", + "1919129", + "1919130", + "1919146", + "1919149", + "1919151", + "1919160", + "1919173", + "1919176", + "1919181", + "1919194", + "1919210", + "1919213", + "1919214", + "1919223", + "1919235", + "1919239", + "1919245", + "1919277", + "1919282", + "1919287", + "1919289", + "1919316", + "1919317", + "1919320", + "1919326", + "1919327", + "1919328", + "1919330", + "1919333", + "1919338", + "1919340", + "1919342", + "1919344", + "1919346", + "1919348", + "1919381", + "1919412", + "1919419", + "1919421", + "1919432", + "1919438", + "1919444", + "1919534", + "1919540", + "1919551", + "1919564", + "1919589", + "1919626", + "1919635", + "1919646", + "1919649", + "1919652", + "1919653", + "1919656", + "1919660", + "1919663", + "1919665", + "1919698", + "1919700", + "1919701", + "1919702", + "1919705", + "1919711", + "1919712", + "1919716", + "1919719", + "1919720", + "1919728", + "1919731", + "1919741", + "1919744", + "1919756", + "1919924", + "1919929", + "1919930", + "1919937", + "1919939", + "1919943", + "1919945", + "1919947", + "1919949", + "1919951", + "1919966", + "1920181", + "1920192", + "1920218", + "1920237", + "1920247", + "1920258", + "1920259", + "1920275", + "1920348", + "1920349", + "1920353", + "1920356", + "1920357", + "1920362", + "1920363", + "1920369", + "1920370", + "1920374", + "1920378", + "1920381", + "1920390", + "1920395", + "1920401", + "1920405", + "1920426", + "1920431", + "1920437", + "1920454", + "1920463", + "1920467", + "1920469", + "1920491", + "1920494", + "1920496", + "1920502", + "1920506", + "1920509", + "1920512", + "1920515", + "1920534", + "1920535", + "1920541", + "1920552", + "1920571", + "1920574", + "1920581", + "1920621", + "1920691", + "1920709", + "1920712", + "1920718", + "1920786", + "1920795", + "1920803", + "1920809", + "1920810", + "1920815", + "1920816", + "1920844", + "1920851", + "1920864", + "1920889", + "1920892", + "1920900", + "1920923", + "1920957", + "1920996", + "1921009", + "1921010", + "1921021", + "1921044", + "1921053", + "1921055", + "1921064", + "1921092", + "1921093", + "1921123", + "1921150", + "1921163", + "1921239", + "1921240", + "1921247", + "1921248", + "1921255", + "1921262", + "1921263", + "1921300", + "1921466", + "1921521", + "1921590", + "1921650", + "1921910", + "1921992", + "1921993", + "1922038", + "1922039", + "1922041", + "1922044", + "1922049", + "1922057", + "1922064", + "1922085", + "1922111", + "1922143", + "1922163", + "1922197", + "1922219", + "1922223", + "1922244", + "1922285", + "1922288", + "1922291", + "1922311", + "1922343", + "1922455", + "1922468", + "1922572", + "1922584", + "1922637", + "1922676", + "1922679", + "1922694", + "1922701", + "1922739", + "1922745", + "1922851", + "1922865", + "1922867", + "1922868", + "1922889", + "1922890", + "1922937", + "1922994", + "1923019", + "1923465", + "1923473", + "1923491", + "1923498", + "1923505", + "1923525", + "1923649", + "1923650", + "1923651", + "1923668", + "1923679", + "1923744", + "1923796", + "1923809", + "1923917", + "1923997", + "1924044", + "1924050", + "1924057", + "1924077", + "1924082", + "1924097", + "1924106", + "1924176", + "1924193", + "1924223", + "1924232", + "1924298", + "1924323", + "1924362", + "1924390", + "1924392", + "1924417", + "1924429", + "1924458", + "1924494", + "1924518", + "1924521", + "1924558", + "1924713", + "1924754", + "1924770", + "1924867", + "1925221", + "1925233", + "1925381", + "1925410", + "1925429", + "1925454", + "1925458", + "1925498", + "1925500", + "1925501", + "1925509", + "1925515", + "1925543", + "1925555", + "1925609", + "1925615", + "1925628", + "1925676", + "1925694", + "1925711", + "1925731", + "1925743", + "1925877", + "1925918", + "1925922", + "1925962", + "1926001", + "1926009", + "1926054", + "1926166", + "1926260", + "1926324", + "1926385", + "1926436", + "1926437", + "1926446", + "1926448", + "1926456", + "1926460", + "1926530", + "1926531", + "1926539", + "1926546", + "1926550", + "1926574", + "1926593", + "1926611", + "1926800", + "1926817", + "1926823", + "1926834", + "1926861", + "1927034", + "1927217", + "1927242", + "1927272", + "1927274", + "1927284", + "1927301", + "1927313", + "1927348", + "1927393", + "1927707", + "1927894", + "1927895", + "1927897", + "1927900", + "1927909", + "1927943", + "1927979", + "1927988", + "1927992", + "1927996", + "1928009", + "1928018", + "1928070", + "1928076", + "1928214", + "1928215", + "1928248", + "1928349", + "1928361", + "1928376", + "1928419", + "1928584", + "1928628", + "1928746", + "1928829", + "1928849", + "1928908", + "1928915", + "1928945", + "1928960", + "1929046", + "1929049", + "1929059", + "1929129", + "1929270", + "1929659", + "1929697", + "1929772", + "1929962", + "1929966", + "1930079", + "1930110", + "1930167", + "1930178", + "1930179", + "1930181", + "1930183", + "1930263", + "1930270", + "1930288", + "1930289", + "1930331", + "1930361", + "1930391", + "1930422", + "1930563", + "1930581", + "1930621", + "1930653", + "1930660", + "1930678", + "1930728", + "1930772", + "1930779", + "1930830", + "1930832", + "1930904", + "1930916", + "1930923", + "1930931", + "1930935", + "1930954", + "1930968", + "1931046", + "1931109", + "1931116", + "1931119", + "1931122", + "1931126", + "1931148", + "1931179", + "1931189", + "1931310", + "1931403", + "1931437", + "1931553", + "1931561", + "1931655", + "1931656", + "1931706", + "1931779", + "1931784", + "1931787", + "1931788", + "1931889", + "1931906", + "1931908", + "1931943", + "1931956", + "1931958", + "1931997", + "1932020", + "1932043", + "1932056", + "1932159", + "1932166", + "1932172", + "1932175", + "1932189", + "1932206", + "1932246", + "1932273", + "1932287", + "1932302", + "1932332", + "1932354", + "1932386", + "1932393", + "1932406", + "1932411", + "1932414", + "1932417", + "1932428", + "1932473", + "1932517", + "1932551", + "1932563", + "1932576", + "1932580", + "1932607", + "1932629", + "1932751", + "1932752", + "1932753", + "1932812", + "1932814", + "1932863", + "1932879", + "1932908", + "1932960", + "1932976", + "1933028", + "1933044", + "1933084", + "1933095", + "1933126", + "1933138", + "1933163", + "1933204", + "1933260", + "1933583", + "1933647", + "1933649", + "1933679", + "1933793", + "1933844", + "1933845", + "1933998", + "1934172", + "1934187", + "1934192", + "1934211", + "1934213", + "1934221", + "1934331", + "1934447", + "1934570", + "1934693", + "1934715", + "1934991", + "1935078", + "1935295", + "1935301", + "1935343", + "1935346", + "1935350", + "1935363", + "1935372", + "1935377", + "1935405", + "1935408", + "1935410", + "1935454", + "1935459", + "1935498", + "1935614", + "1935838", + "1935849", + "1935869", + "1935872", + "1935888", + "1935899", + "1935901", + "1935904", + "1935912", + "1935916", + "1935925", + "1935931", + "1935935", + "1936161", + "1936233", + "1936312", + "1936378", + "1936388", + "1936391", + "1936565", + "1936566", + "1936649", + "1936810", + "1936969", + "1936988", + "1936993", + "1937011", + "1937055", + "1937064", + "1937090", + "1937109", + "1937110", + "1937124", + "1937129", + "1937136", + "1937144", + "1937155", + "1937162", + "1937165", + "1937167", + "1937444", + "1937474", + "1937490", + "1937514", + "1937527", + "1937530", + "1937540", + "1937556", + "1937566", + "1937570", + "1937582", + "1937594", + "1937613", + "1937618", + "1937642", + "1937655", + "1937665", + "1937667", + "1937688", + "1937691", + "1937698", + "1937699", + "1937702", + "1937707", + "1937712", + "1937722", + "1937723", + "1937739", + "1937751", + "1937754", + "1937758", + "1937769", + "1937792", + "1937793", + "1937803", + "1937816", + "1937819", + "1937826", + "1937846", + "1937847", + "1937849", + "1937885", + "1937892", + "1937911", + "1937931", + "1937937", + "1937959", + "1937966", + "1937974", + "1937975", + "1937988", + "1938007", + "1938016", + "1938022", + "1938029", + "1938050", + "1938052", + "1938058", + "1938059", + "1938069", + "1938074", + "1938081", + "1938088", + "1938104", + "1938112", + "1938114", + "1938122", + "1938125", + "1938129", + "1938131", + "1938147", + "1938148", + "1938159", + "1938162", + "1938166", + "1938168", + "1938214", + "1938226", + "1938230", + "1938233", + "1938300", + "1938446", + "1938520", + "1938612", + "1938796", + "1938810", + "1938955", + "1938975", + "1939056", + "1939086", + "1939130", + "1939131", + "1939134", + "1939136", + "1939156", + "1939168", + "1939180", + "1939215", + "1939225", + "1939314", + "1939336", + "1939432", + "1939510", + "1939520", + "1939597", + "1939647", + "1939658", + "1939677", + "1939688", + "1939717", + "1939833", + "1939879", + "1939962", + "1939964", + "1940110", + "1940158", + "1940504", + "1940510", + "1940517", + "1940546", + "1940575", + "1940604", + "1940609", + "1940639", + "1940644", + "1940694", + "1940717", + "1940744", + "1940757", + "1940768", + "1940807", + "1940838", + "1941266", + "1941294", + "1941299", + "1941310", + "1941330", + "1941377", + "1941437", + "1941570", + "1941683", + "1941713", + "1941717", + "1941719", + "1941864", + "1942060", + "1942067", + "1942141", + "1942170", + "1942171", + "1942244", + "1942251", + "1942341", + "1942370", + "1942378", + "1942383", + "1942416", + "1942509", + "1942522", + "1942558", + "1942618", + "1942621", + "1942623", + "1942636", + "1942670", + "1942674", + "1942697", + "1942762", + "1942769", + "1942790", + "1942793", + "1942808", + "1942854", + "1942945", + "1942947", + "1942964", + "1942967", + "1942971", + "1942980", + "1942982", + "1942994", + "1943054", + "1943066", + "1943089", + "1943090", + "1943096", + "1943101", + "1943212", + "1943223", + "1943236", + "1943250", + "1943308", + "1943397", + "1943475", + "1943505", + "1943519", + "1943563", + "1943571", + "1943573", + "1943588", + "1943619", + "1943631", + "1943655", + "1943757", + "1943824", + "1943830", + "1943901", + "1943936", + "1943942", + "1943953", + "1943954", + "1943960", + "1943962", + "1943964", + "1943990", + "1944004", + "1944106", + "1944113", + "1944234", + "1944273", + "1944283", + "1944286", + "1944314", + "1944324", + "1944329", + "1944335", + "1944343", + "1944361", + "1944374", + "1944421", + "1944456", + "1944462", + "1944483", + "1944503", + "1944504", + "1944520", + "1944521", + "1944523", + "1944574", + "1944591", + "1944618", + "1944627", + "1944629", + "1944631", + "1944635", + "1944638", + "1944769", + "1944778", + "1944815", + "1944832", + "1944977", + "1945066", + "1945081", + "1945088", + "1945122", + "1945137", + "1945143", + "1945173", + "1945225", + "1945227", + "1945270", + "1945274", + "1945286", + "1945302", + "1945312", + "1945374", + "1945396", + "1945462", + "1945476", + "1945477", + "1945569", + "1945571", + "1945605", + "1945694", + "1945710", + "1945715", + "1945738", + "1945742", + "1945748", + "1945786", + "1945814", + "1945837", + "1945856", + "1945863", + "1945874", + "1945877", + "1945878", + "1945893", + "1945957", + "1946019", + "1946037", + "1946051", + "1946058", + "1946067", + "1946074", + "1946078", + "1946079", + "1946097", + "1946163", + "1946167", + "1946177", + "1946310", + "1946327", + "1946333", + "1946432", + "1946469", + "1946495", + "1946500", + "1946520", + "1946544", + "1946550", + "1946577", + "1946610", + "1946612", + "1946618", + "1946628", + "1946661", + "1946695", + "1946731", + "1946737", + "1946738", + "1946756", + "1946763", + "1946810", + "1946853", + "1946865", + "1946901", + "1946916", + "1946917", + "1946980", + "1946981", + "1946983", + "1946989", + "1946995", + "1946999", + "1947021", + "1947037", + "1947049", + "1947055", + "1947112", + "1947113", + "1947117", + "1947282", + "1947306", + "1947333", + "1947335", + "1947385", + "1947409", + "1947449", + "1947456", + "1947459", + "1947491", + "1947492", + "1947506", + "1947507", + "1947568", + "1947577", + "1947587", + "1947588", + "1947597", + "1947626", + "1947661", + "1947673", + "1947703", + "1947727", + "1947740", + "1947745", + "1947765", + "1947842", + "1947846", + "1947890", + "1947915", + "1947973", + "1947976", + "1947980", + "1948054", + "1948061", + "1948073", + "1948088", + "1948371", + "1948439", + "1948446", + "1948464", + "1948465", + "1948521", + "1948771", + "1948774", + "1948779", + "1948789", + "1948799", + "1948800", + "1948802", + "1948803", + "1948804", + "1948809", + "1948810", + "1948826", + "1948865", + "1948883", + "1948890", + "1948947", + "1948994", + "1949008", + "1949049", + "1949219", + "1949285", + "1949322", + "1949331", + "1949336", + "1949366", + "1949404", + "1949451", + "1949466", + "1949492", + "1949512", + "1949544", + "1949549", + "1949592", + "1949621", + "1949687", + "1949697", + "1949715", + "1949784", + "1949794", + "1949850", + "1949852", + "1949877", + "1949929", + "1949938", + "1949954", + "1950006", + "1950013", + "1950017", + "1950019", + "1950024", + "1950044", + "1950047", + "1950052", + "1950133", + "1950156", + "1950169", + "1950171", + "1950197", + "1950272", + "1950302", + "1950362", + "1950396", + "1950408", + "1950409", + "1950521", + "1950533", + "1950567", + "1950578", + "1950591", + "1950654", + "1950877", + "1950879", + "1950936", + "1951097", + "1951103", + "1951116", + "1951121", + "1951125", + "1951133", + "1951157", + "1951170", + "1951217", + "1951218", + "1951340", + "1951370", + "1951412", + "1951448", + "1951462", + "1951507", + "1951522", + "1951529", + "1951542", + "1951557", + "1951649", + "1951657", + "1951660", + "1951671", + "1951675", + "1951713", + "1951725", + "1951747", + "1951784", + "1951840", + "1951844", + "1951881", + "1952014", + "1952032", + "1952034", + "1952043", + "1952062", + "1952093", + "1952130", + "1952147", + "1952175", + "1952177", + "1952229", + "1952281", + "1952449", + "1952481", + "1952532", + "1952551", + "1952611", + "1952685", + "1952730", + "1952806", + "1952812", + "1952816", + "1952857", + "1952878", + "1952883", + "1952909", + "1953124", + "1953192", + "1953196", + "1953217", + "1953407", + "1953423", + "1953998", + "1954037", + "1954084", + "1954120", + "1954236", + "1954338", + "1954344", + "1954346", + "1954351", + "1954353", + "1954382", + "1954490", + "1954496", + "1954514", + "1954522", + "1954563", + "1954911", + "1954930", + "1954933", + "1955039", + "1955093", + "1955153", + "1955199", + "1955271", + "1955272", + "1955318", + "1955389", + "1955416", + "1955422", + "1955479", + "1955484", + "1955498", + "1955552", + "1955694", + "1955725", + "1955736", + "1955737", + "1955743", + "1955745", + "1955753", + "1955755", + "1955763", + "1955856", + "1955899", + "1956098", + "1956215", + "1956384", + "1956416", + "1956440", + "1956462", + "1956505", + "1956510", + "1956524", + "1956536", + "1956597", + "1956599", + "1956626", + "1956639", + "1956710", + "1956716", + "1956904", + "1956955", + "1956958", + "1956963", + "1956978", + "1956983", + "1957058", + "1957062", + "1957161", + "1957174", + "1957266", + "1957286", + "1957300", + "1957333", + "1957368", + "1957413", + "1957441", + "1957460", + "1957523", + "1957556", + "1957565", + "1957570", + "1957572", + "1957579", + "1957583", + "1957611", + "1957673", + "1957706", + "1957718", + "1957746", + "1957791", + "1957816", + "1957822", + "1957845", + "1957852", + "1957854", + "1957870", + "1958024", + "1958045", + "1958049", + "1958065", + "1958121", + "1958152", + "1958158", + "1958163", + "1958241", + "1958252", + "1958255", + "1958259", + "1958260", + "1958275", + "1958290", + "1958305", + "1958307", + "1958323", + "1958324", + "1958454", + "1958463", + "1958483", + "1958515", + "1958528", + "1959341", + "1959379", + "1959383", + "1959395", + "1959423", + "1959436", + "1959461", + "1959473", + "1959500", + "1959543", + "1959637", + "1959645", + "1959666", + "1959667", + "1959682", + "1959735", + "1959782", + "1959799", + "1959839", + "1959858", + "1959890", + "1959898", + "1959914", + "1959917", + "1959919", + "1959934", + "1959948", + "1960004", + "1960023", + "1960090", + "1960105", + "1960106", + "1960128", + "1960166", + "1960181", + "1960182", + "1960255", + "1960268", + "1960315", + "1960484", + "1960503", + "1960521", + "1960524", + "1960571", + "1960595", + "1960617", + "1960632", + "1960686", + "1960854", + "1960940", + "1960941", + "1961013", + "1961037", + "1961040", + "1961052", + "1961068", + "1961126", + "1961155", + "1961162", + "1961180", + "1961190", + "1961252", + "1961361", + "1961647", + "1961718", + "1962051", + "1962076", + "1962086", + "1962118", + "1962159", + "1962162", + "1962204", + "1962265", + "1962268", + "1962434", + "1962447", + "1962479", + "1962490", + "1962516", + "1962584", + "1962636", + "1962656", + "1962657", + "1962678", + "1962689", + "1962722", + "1962727", + "1962829", + "1962839", + "1962841", + "1962842", + "1962860", + "1962895", + "1962900", + "1962925", + "1962934", + "1962961", + "1962972", + "1962990", + "1963011", + "1963052", + "1963096", + "1963168", + "1963201", + "1963297", + "1963306", + "1963425", + "1963433", + "1963446", + "1963463", + "1963532", + "1963587", + "1963619", + "1963629", + "1963633", + "1963709", + "1963710", + "1963733", + "1963755", + "1963782", + "1963848", + "1963854", + "1963874", + "1963879", + "1963892", + "1964024", + "1964025", + "1964029", + "1964041", + "1964066", + "1964113", + "1964116", + "1964141", + "1964143", + "1964144", + "1964151", + "1964153", + "1964155", + "1964158", + "1964174", + "1964189", + "1964191", + "1964195", + "1964247", + "1964305", + "1964401", + "1964471", + "1964565", + "1964585", + "1964637", + "1964653", + "1964657", + "1964702", + "1964715", + "1964738", + "1964836", + "1964995", + "1965024", + "1965038", + "1965069", + "1965100", + "1965166", + "1965197", + "1965208", + "1965345", + "1965586", + "1965640", + "1965643", + "1965649", + "1965650", + "1965671", + "1965697", + "1965699", + "1965763", + "1965777", + "1965794", + "1965795", + "1965797", + "1965805", + "1965810", + "1965823", + "1965825", + "1965831", + "1965838", + "1965841", + "1965861", + "1965865", + "1965887", + "1965913", + "1965996", + "1966017", + "1966088", + "1966185", + "1966195", + "1966198", + "1966255", + "1966302", + "1966310", + "1966351", + "1966358", + "1966362", + "1966367", + "1966886", + "1966977", + "1967006", + "1967011", + "1967039", + "1967127", + "1967128", + "1967209", + "1967226", + "1967240", + "1967245", + "1967265", + "1967273", + "1967346", + "1967433", + "1967445", + "1967452", + "1967590", + "1967595", + "1967597", + "1967606", + "1967672", + "1967703", + "1967716", + "1967803", + "1967815", + "1967873", + "1968115", + "1968131", + "1968147", + "1968182", + "1968205", + "1968313", + "1968321", + "1968324", + "1968363", + "1968678", + "1968686", + "1968730", + "1968746", + "1968837", + "1968867", + "1968942", + "1968990", + "1969291", + "1969339", + "1969357", + "1969463", + "1969491", + "1969568", + "1969581", + "1969954", + "1969958", + "1969961", + "1970034", + "1970093", + "1970094", + "1970108", + "1970119", + "1970136", + "1970145", + "1970148", + "1970150", + "1970159", + "1970213", + "1970227", + "1970243", + "1970259", + "1970265", + "1970284", + "1970322", + "1970436", + "1970460", + "1970463", + "1970473", + "1970485", + "1971835", + "1971847", + "1971858", + "1971888", + "1971986", + "1971995", + "1971998", + "1971999", + "1972010", + "1972094", + "1972101", + "1972120", + "1972185", + "1972187", + "1972234", + "1972250", + "1972278", + "1972342", + "1972374", + "1972377", + "1972407", + "1972434", + "1972447", + "1972449", + "1972454", + "1972606", + "1972613", + "1972631", + "1972691", + "1972754", + "1972797", + "1972800", + "1972806", + "1972903", + "1972942", + "1973146", + "1973147", + "1973164", + "1973300", + "1973323", + "1973327", + "1973338", + "1973358", + "1973393", + "1973414", + "1973466", + "1973467", + "1973487", + "1973493", + "1973665", + "1973719", + "1975164", + "1975198", + "1975212", + "1975248", + "1975287", + "1975341", + "1975365", + "1975546", + "1975553", + "1975571", + "1975583", + "1975597", + "1975607", + "1975711", + "1975722", + "1975733", + "1975741", + "1975793", + "1975805", + "1975806", + "1975892", + "1975897", + "1975903", + "1975914", + "1975964", + "1975979", + "1976073", + "1976123", + "1976142", + "1976163", + "1976212", + "1976213", + "1976224", + "1976228", + "1976248", + "1976255", + "1976303", + "1976311", + "1976333", + "1976342", + "1976462", + "1976463", + "1976469", + "1976470", + "1976483", + "1976651", + "1976746", + "1976890", + "1976928", + "1976933", + "1976934", + "1976939", + "1976941", + "1976993", + "1977003", + "1977007", + "1977054", + "1977068", + "1977182", + "1977184", + "1977350", + "1977759", + "1977764", + "1977767", + "1977813", + "1977833", + "1977863", + "1977962", + "1977967", + "1977971", + "1978017", + "1978034", + "1978045", + "1978056", + "1978065", + "1978082", + "1978114", + "1978197", + "1978274", + "1978281", + "1978282", + "1978283", + "1978375", + "1978385", + "1978398", + "1978405", + "1978407", + "1978422", + "1978424", + "1978445", + "1978464", + "1978493", + "1978494", + "1978499", + "1978524", + "1978526", + "1978529", + "1978671", + "1978751", + "1978776", + "1978789", + "1978821", + "1978904", + "1978919", + "1978937", + "1978958", + "1978959", + "1978977", + "1979021", + "1979041", + "1979222", + "1979255", + "1979289", + "1979308", + "1979344", + "1979358", + "1979380", + "1979427", + "1979430", + "1979473", + "1979521", + "1979561", + "1979562", + "1979721", + "1979726", + "1979758", + "1979781", + "1979787", + "1979801", + "1979822", + "1980025", + "1980035", + "1980041", + "1980044", + "1980055", + "1980063", + "1980245", + "1980247", + "1980250", + "1980269", + "1980290", + "1980462", + "1980491", + "1980505", + "1980521", + "1980525", + "1980533", + "1980559", + "1980659", + "1980811", + "1980821", + "1980827", + "1980917", + "1981063", + "1981144", + "1981160", + "1981161", + "1981162", + "1981191", + "1981202", + "1981209", + "1981210", + "1981252", + "1981258", + "1981277", + "1981284", + "1981312", + "1981457", + "1981696", + "1981938", + "1981951", + "1981959", + "1981973", + "1981998", + "1982024", + "1982055", + "1982071", + "1982085", + "1982102", + "1982103", + "1982148", + "1982221", + "1982267", + "1982406", + "1982447", + "1982458", + "1982500", + "1982525", + "1982529", + "1982533", + "1982541", + "1982542", + "1982613", + "1982636", + "1982671", + "1982746", + "1982779", + "1982780", + "1982790", + "1982791", + "1982824", + "1982838", + "1982865", + "1982885", + "1982898", + "1982918", + "1982924", + "1982951", + "1983000", + "1983039", + "1983052", + "1983101", + "1983111", + "1983170", + "1983260", + "1983263", + "1983288", + "1983387", + "1983393", + "1983434", + "1983441", + "1983442", + "1983491", + "1983525", + "1983528", + "1983548", + "1983558", + "1983648", + "1983705", + "1983709", + "1983755", + "1983888", + "1983896", + "1983922", + "1983997", + "1983999", + "1984033", + "1984073", + "1984110", + "1984117", + "1984654", + "1984734", + "1984913", + "1984942", + "1984949", + "1984954", + "1985061", + "1985152", + "1985158", + "1985167", + "1985181", + "1985191", + "1985192", + "1985228", + "1985230", + "1985267", + "1985405", + "1985406", + "1985487", + "1985490", + "1985522", + "1985573", + "1985734", + "1985742", + "1985816", + "1985826", + "1985931", + "1985945", + "1985952", + "1985993", + "1986004", + "1986020", + "1986032", + "1986040", + "1986052", + "1986054", + "1986056", + "1986061", + "1986091", + "1986113", + "1986157", + "1986166", + "1986171", + "1986192", + "1986220", + "1986223", + "1986367", + "1986452", + "1986497", + "1986508", + "1986522", + "1986575", + "1986623", + "1986650", + "1986693", + "1986774", + "1986779", + "1986787", + "1986807", + "1986846", + "1986877", + "1986906", + "1986936", + "1986942", + "1986998", + "1987145", + "1987146", + "1987204", + "1987301", + "1987330", + "1987362", + "1987377", + "1987527", + "1987578", + "1987629", + "1987633", + "1987650", + "1987665", + "1987737", + "1987740", + "1987744", + "1987747", + "1987767", + "1987775", + "1987776", + "1987787", + "1987855", + "1988002", + "1988019", + "1988064", + "1988225", + "1988257", + "1988302", + "1988306", + "1988354", + "1988360", + "1988361", + "1988362", + "1988376", + "1988382", + "1988384", + "1988390", + "1988420", + "1988487", + "1988495", + "1988593", + "1988602", + "1988684", + "1988762", + "1988820", + "1988881", + "1988894", + "1989083", + "1989170", + "1989181", + "1989282", + "1989283", + "1989355", + "1989377", + "1989428", + "1989522", + "1989538", + "1989582", + "1989594", + "1989903", + "1989942", + "1990043", + "1990050", + "1990066", + "1990088", + "1990105", + "1990150", + "1990155", + "1990164", + "1990165", + "1990167", + "1990178", + "1990198", + "1990200", + "1990255", + "1990256", + "1990270", + "1990331", + "1990335", + "1990357", + "1990371", + "1990533", + "1990551", + "1990582", + "1990594", + "1990998", + "1991012", + "1991123", + "1991179", + "1991280", + "1991289", + "1991294", + "1991295", + "1991298", + "1991299", + "1991303", + "1991310", + "1991371", + "1991378", + "1991394", + "1991429", + "1991466", + "1991532", + "1991783", + "1991846", + "1991945", + "1992066", + "1992167", + "1992172", + "1992268", + "1992277", + "1992315", + "1992434", + "1992504", + "1992547", + "1992573", + "1992634", + "1992817", + "1992889", + "1992907", + "1992936", + "1992956", + "1992969", + "1992976", + "1993021", + "1993036", + "1993045", + "1993419", + "1993496", + "1993637", + "3257809", + "4299071", + "4299095", + "4299191", + "4299201", + "4299211", + "4299213", + "4299218", + "4299368", + "4299370", + "4299535", + "4299565", + "4299576", + "4299597", + "4299599", + "4299778", + "4299802", + "4299804", + "4299870", + "4299871", + "4300000", + "4300259", + "4300268", + "4300277", + "4300384", + "4300393", + "4300406", + "4301036", + "4301044", + "4301052", + "4301055", + "4301068", + "4301071", + "4301148", + "4301238", + "4301242", + "4301282", + "4301283", + "4301304", + "4301306", + "4301307", + "4301309", + "4301312", + "4301348", + "4301355", + "4301426", + "4301744", + "4301876", + "4301934", + "4301942", + "4301945", + "4302008", + "4302101", + "4302199", + "4302202", + "4302221", + "4302230", + "4302240", + "4302252", + "4302268", + "4302274", + "4302319", + "4302333", + "4302388", + "4522322", + "4522753", + "4522886", + "4522890", + "4522891", + "4522911", + "4522916", + "4522919", + "4522933", + "4522974", + "4523461", + "4523486", + "4523519", + "4523522", + "4523556", + "4523560", + "4523564", + "4523725", + "4523880", + "4523883", + "4523885", + "4524052", + "4524054", + "4524070", + "4524072", + "4524221", + "4524223", + "4524376", + "4524393", + "4524403", + "4524421", + "4524424", + "4524426", + "4524513", + "4524541", + "4524568", + "4524588", + "4524636", + "4524638", + "4524712", + "4524740", + "4524793", + "4524822", + "4524890", + "4524914", + "4524922", + "4524929", + "4524951", + "4524961", + "4525034", + "4525068", + "4525078", + "4525091", + "4525097", + "4525103", + "4525132", + "4525177", + "4525189", + "4525266", + "4525268", + "4525270", + "4525354", + "4525364", + "4525369", + "4525425", + "4525476", + "4525487", + "4525500", + "4525503", + "4525505", + "4525510", + "4525530", + "4525540", + "4525547", + "4525557", + "4525562", + "4525610", + "4525641", + "4525777", + "4525803", + "4525859", + "4525884", + "4526050", + "4527339", + "4527342", + "4527355", + "4527903", + "4527972", + "4528100", + "4528539", + "4528547", + "4528593", + "4528658", + "4528692", + "4528694", + "4528702", + "4528813", + "4528818", + "4529032", + "4529064", + "4529186", + "4529248", + "4529566", + "4529630", + "4529738", + "4529908", + "4529915", + "4529931", + "4530002", + "4530138", + "4530151", + "4530214", + "4530424", + "4530608", + "4530632", + "4530947", + "4531145", + "4531147", + "4531158", + "4531237", + "4531242", + "4531246", + "4531264", + "4531284", + "4531376", + "4531402", + "4531409", + "4531417", + "4531425", + "4531506", + "4531517", + "4531643", + "4531670", + "4531687", + "4531690", + "4531708", + "4531713", + "4531968", + "4531975", + "4532022", + "4532024", + "4532050", + "4532088", + "4532095", + "4532097", + "4532122", + "4532125", + "4532150", + "4532160", + "4532203", + "4532206", + "4532216", + "4532236", + "4532239", + "4532260", + "4532264", + "4532266", + "4532269", + "4532283", + "4532293", + "4532297", + "4532351", + "4532352", + "4532357", + "4532366", + "4532395", + "4532405", + "4532408", + "4532412", + "4532453", + "4532461", + "4532471", + "4532473", + "4532493", + "4532500", + "4532508", + "4532516", + "4532532", + "4532534", + "4532544", + "4532565", + "4532608", + "4532614", + "4532696", + "4532700", + "4532811", + "4532886", + "4532888", + "4532890", + "4532908", + "4532986", + "4533115", + "4533123", + "4533125", + "4533128", + "4533136", + "4533202", + "4533211", + "4533255", + "4533273", + "4533285", + "4533325", + "4533344", + "4533345", + "4533347", + "4533360", + "4533431", + "4533433", + "4533442", + "4533444", + "4533446", + "4533661", + "4533671", + "4533695", + "4533714", + "4533720", + "4533924", + "4533937", + "4533952", + "4533957", + "4534011", + "4534017", + "4534038", + "4534046", + "4534052", + "4534057", + "4534086", + "4534162", + "4534166", + "4534194", + "4534207", + "4534225", + "4534245", + "4534252", + "4534257", + "4534275", + "4534290", + "4534299", + "4534360", + "4534389", + "4534398", + "4534408", + "4534458", + "4534463", + "4534485", + "4534486", + "4534525", + "4534533", + "4534538", + "4534540", + "4534663", + "4534669", + "4534675", + "4534681", + "4534683", + "4534685", + "4534686", + "4534691", + "4534719", + "4534757", + "4534762", + "4534767", + "4534769", + "4534773", + "4534779", + "4534782", + "4534787", + "4534788", + "4534792", + "4534796", + "4534798", + "4534826", + "4534869", + "4534872", + "4534909", + "4534914", + "4535092", + "4535106", + "4535172", + "4535271", + "4535280", + "4535307", + "4535386", + "4535396", + "4535510", + "4535581", + "4535614", + "4535618", + "4535620", + "4535627", + "4535630", + "4535632", + "4535636", + "4535689", + "4535754", + "4535809", + "4535817", + "4535819", + "4535827", + "4535904", + "4536472", + "4536483", + "4684220", + "4684789", + "4684893", + "4684910", + "4684925", + "4684958", + "4684986", + "4685097", + "4685116", + "4685219", + "4685271", + "4685299", + "4685306", + "4685431", + "4685468", + "4685485", + "4685557", + "4685566", + "4685629", + "4685631", + "4685653", + "4685655", + "4685669", + "4685678", + "4685778", + "4685802", + "4685946", + "4685972", + "4685980", + "4685981", + "4686018", + "4686029", + "4686039", + "4686055", + "4686111", + "4686164", + "4686190", + "4686214", + "4686264", + "4686266", + "4686355", + "4686368", + "4686385", + "4686483", + "4686531", + "4686532", + "4686617", + "4686620", + "4686628", + "4686656", + "4686702", + "4686743", + "4686844", + "4686897", + "4686907", + "4686913", + "4686956", + "4687228", + "4687288", + "4687389", + "4687565", + "4687661", + "4687681", + "4687827", + "4687906", + "4687930", + "4687933", + "4687934", + "4687935", + "4687991", + "4688049", + "4688092", + "4688142", + "4688166", + "4688169", + "4688172", + "4689905", + "4689912", + "4689929", + "4689963", + "4690079", + "4692485", + "4693382", + "4693675", + "4695709", + "4695719", + "4699245", + "4701136", + "4701298", + "4701336", + "4702564", + "4702599", + "4702603", + "4702731", + "4702783", + "4702784", + "4702878", + "4702892", + "4702893", + "4702911", + "4702912", + "4702961", + "4703479", + "4704279", + "4704316", + "4704352", + "4704356", + "4704400", + "4704401", + "4704404", + "4704407", + "4704501", + "4705103", + "4707896", + "4707900", + "4708183", + "4708342", + "4708927", + "4708972", + "4708995", + "4709051", + "4709102", + "4709107", + "4709111", + "4709133", + "5101371", + "5101394", + "5101502", + "5101527", + "5101556", + "5101640", + "5101678", + "5101717", + "5101745", + "5101763", + "5101811", + "5102207", + "5102287", + "5102300", + "5102304", + "5102324", + "5102335", + "5102396", + "5102424", + "5102432", + "5102628", + "5102635", + "5102637", + "5102642", + "5102651", + "5102666", + "5102668", + "5102671", + "5102678", + "5102693", + "5102735", + "5102773", + "5102809", + "5102830", + "5102931", + "5102951", + "5102982", + "5103066", + "5103083", + "5103118", + "5103121", + "5103154", + "5103166", + "5103176", + "5103181", + "5103183", + "5103185", + "5103201", + "5103227", + "5103394", + "5103451", + "5103502", + "5103613", + "5103736", + "5103948", + "5103998", + "5104056", + "5104063", + "5104088", + "5104116", + "5104157", + "5104442", + "5104558", + "5104641", + "5104759", + "5104772", + "5104797", + "5104815", + "5104822", + "5104882", + "5104891", + "5104903", + "5104927", + "5104940", + "5104948", + "5104986", + "5105057", + "5105068", + "5105081", + "5105088", + "5105106", + "5105120", + "5105124", + "5105212", + "5105217", + "5105259", + "5105336", + "5105339", + "5105344", + "5105352", + "5105365", + "5105367", + "5105369", + "5105376", + "5105379", + "5105380", + "5105447", + "5105458", + "5105467", + "5105469", + "5105491", + "5105508", + "5105547", + "5105560", + "5105588", + "5105603", + "5105642", + "5105649", + "5105656", + "5105671", + "5105929", + "5106115", + "5106249", + "5106539", + "5106894", + "5107076", + "5107128", + "5107219", + "5107640", + "5107644", + "5107829", + "5108318", + "5108334", + "5108335", + "5108346", + "5108349", + "5108416", + "5108417", + "5108419", + "5108421", + "5108435", + "5108440", + "5108636", + "5108660", + "5108665", + "5108670", + "5108671", + "5108724", + "5108752", + "5108761", + "5108787", + "5108794", + "5108796", + "5108808", + "5108951", + "5108957", + "5108958", + "5109196", + "5109259", + "5109299", + "5109345", + "5109369", + "5109385", + "5109413", + "5109418", + "5109437", + "5109498", + "5109506", + "5109523", + "5109535", + "5109566", + "5109596", + "5109599", + "5109614", + "5109646", + "5109651", + "5109661", + "5109766", + "5109782", + "5109784", + "5109786", + "5109787", + "5109788", + "5109796", + "5109821", + "5109829", + "5109830", + "5109843", + "5109845", + "5109848", + "5109850", + "5109852", + "5109855", + "5109870", + "5109872", + "5109881", + "5109882", + "5109898", + "5109931", + "5109954", + "5109958", + "5110012", + "5110013", + "5110044", + "5110120", + "5110190", + "5110200", + "5110211", + "5110213", + "5110232", + "5110282", + "5110297", + "5110299", + "5110305", + "5110326", + "5110327", + "5110333", + "5110341", + "5110356", + "5110377", + "5110390", + "5110397", + "5110492", + "5110533", + "5110546", + "5110593", + "5110644", + "5110670", + "5110723", + "5110754", + "5110756", + "5110765", + "5110769", + "5110818", + "5110837", + "5110858", + "5110863", + "5110871", + "5110885", + "5110981", + "5110986", + "5111044", + "5111064", + "5111139", + "5111141", + "5111147", + "5111195", + "5111214", + "5111249", + "5111343", + "5111360", + "5111372", + "5111397", + "5111481", + "5111501", + "5111513", + "5111521", + "5111535", + "5111546", + "5111568", + "5111574", + "5111600", + "5111643", + "5111956", + "5111967", + "5111974", + "5112051", + "5112053", + "5112060", + "5112068", + "5112078", + "5112080", + "5112130", + "5112131", + "5112153", + "5112155", + "5112191", + "5112199", + "5112233", + "5112254", + "5112283", + "5112291", + "5112302", + "5112336", + "5112345", + "5112377", + "5112388", + "5112407", + "5112410", + "5112414", + "5112440", + "5112457", + "5112461", + "5112464", + "5112465", + "5112467", + "5112469", + "5112474", + "5112500", + "5112531", + "5112542", + "5112626", + "5112798", + "5112892", + "5112900", + "5112908", + "5112915", + "5112917", + "5112923", + "5112927", + "5112940", + "5112944", + "5112947", + "5112959", + "5112961", + "5112963", + "5112968", + "5112990", + "5113001", + "5113036", + "5113078", + "5113082", + "5113084", + "5113148", + "5113234", + "5113330", + "5113352", + "5113365", + "5113385", + "5113394", + "5113847", + "5113853", + "5113925", + "5113950", + "5113985", + "5114021", + "5114039", + "5114043", + "5114081", + "5114083", + "5114096", + "5114107", + "5114128", + "5114151", + "5114159", + "5114189", + "5114192", + "5114198", + "5114295", + "5114303", + "5114311", + "5114316", + "5114317", + "5114327", + "5114340", + "5114353", + "5114394", + "5114409", + "5114425", + "5114431", + "5114435", + "5114436", + "5114439", + "5114465", + "5114892", + "5114903", + "5114912", + "5114915", + "5114921", + "5114923", + "5114930", + "5114934", + "5114946", + "5114949", + "5114950", + "5114956", + "5115046", + "5115166", + "5115167", + "5115198", + "5115381", + "5115406", + "5115500", + "5115701", + "5115771", + "5115777", + "5115854", + "5115872", + "5115874", + "5116095", + "5116128", + "5116134", + "5116145", + "5116198", + "5116252", + "5116293", + "5116332", + "5116338", + "5116353", + "5116358", + "5116395", + "5116397", + "5116412", + "5116416", + "5116475", + "5116504", + "5116698", + "5116843", + "5117189", + "5117200", + "5117245", + "5117347", + "5117348", + "5117361", + "5117399", + "5117400", + "5117414", + "5117430", + "5117463", + "5117685", + "5117687", + "5117776", + "5117779", + "5117791", + "5117805", + "5117941", + "5118046", + "5118171", + "5118223", + "5118291", + "5118327", + "5118348", + "5118396", + "5118422", + "5118459", + "5118474", + "5118509", + "5118524", + "5118565", + "5118798", + "5118828", + "5118837", + "5118841", + "5118859", + "5118892", + "5118904", + "5118934", + "5118944", + "5118949", + "5118974", + "5118996", + "5119000", + "5119009", + "5119013", + "5119016", + "5119039", + "5119046", + "5119050", + "5119143", + "5119181", + "5119193", + "5119211", + "5119223", + "5119239", + "5119245", + "5119346", + "5119349", + "5119350", + "5119353", + "5119354", + "5119482", + "5119506", + "5119513", + "5119808", + "5119868", + "5119890", + "5119893", + "5119895", + "5119905", + "5119961", + "5119969", + "5120053", + "5120058", + "5120063", + "5120278", + "5120343", + "5120357", + "5120368", + "5120379", + "5120396", + "5120453", + "5120465", + "5120577", + "5120675", + "5121046", + "5121177", + "5121613", + "5121847", + "5121850", + "5122013", + "5122037", + "5122062", + "5122086", + "5122121", + "5122131", + "5122206", + "5122293", + "5122307", + "5122430", + "5122439", + "5122455", + "5122526", + "5122538", + "5122556", + "5122571", + "5122574", + "5122581", + "5122646", + "5122647", + "5122668", + "5122683", + "5122691", + "5122696", + "5122702", + "5122798", + "5122876", + "5122969", + "5123018", + "5123042", + "5123046", + "5123180", + "5123221", + "5123276", + "5123339", + "5123394", + "5123419", + "5123449", + "5123461", + "5123474", + "5123485", + "5123489", + "5123542", + "5123582", + "5123615", + "5123636", + "5123663", + "5123674", + "5123676", + "5123685", + "5123701", + "5123704", + "5123707", + "5123709", + "5123775", + "5123801", + "5123852", + "5123876", + "5123884", + "5123890", + "5123922", + "5123954", + "5123956", + "5123961", + "5123968", + "5123971", + "5123979", + "5123980", + "5123983", + "5123991", + "5123996", + "5123999", + "5124000", + "5124007", + "5124029", + "5124049", + "5124050", + "5124071", + "5124080", + "5124088", + "5124093", + "5124109", + "5124118", + "5124119", + "5124136", + "5124143", + "5124147", + "5124151", + "5124172", + "5124200", + "5124208", + "5124219", + "5124232", + "5124233", + "5124249", + "5124250", + "5124268", + "5124304", + "5124332", + "5124348", + "5124352", + "5124374", + "5124415", + "5124423", + "5124433", + "5124442", + "5124443", + "5124450", + "5124468", + "5124512", + "5124557", + "5124589", + "5124595", + "5124597", + "5124598", + "5124607", + "5124673", + "5124716", + "5124813", + "5124873", + "5124880", + "5124911", + "5125075", + "5125104", + "5125118", + "5125130", + "5125306", + "5125525", + "5125545", + "5125569", + "5125591", + "5125600", + "5125602", + "5125629", + "5125633", + "5125635", + "5125689", + "5125780", + "5125916", + "5125917", + "5125939", + "5126000", + "5126013", + "5126052", + "5126204", + "5126212", + "5126217", + "5126229", + "5126231", + "5126240", + "5126241", + "5126259", + "5126284", + "5126287", + "5126292", + "5126315", + "5126332", + "5126344", + "5126352", + "5126357", + "5126376", + "5126381", + "5126396", + "5126397", + "5126398", + "5126404", + "5126434", + "5126445", + "5126454", + "5126494", + "5126517", + "5126585", + "5126635", + "5126637", + "5126663", + "5126668", + "5126675", + "5126680", + "5126697", + "5126718", + "5126721", + "5126729", + "5126751", + "5126756", + "5126785", + "5126798", + "5126834", + "5126843", + "5126870", + "5126889", + "5126892", + "5126905", + "5126922", + "5126946", + "5126958", + "5126963", + "5127020", + "5127024", + "5127039", + "5127045", + "5127054", + "5127089", + "5127094", + "5127097", + "5127107", + "5127116", + "5127118", + "5127130", + "5127170", + "5127203", + "5127222", + "5127325", + "5127335", + "5127336", + "5127337", + "5127339", + "5127350", + "5127354", + "5127355", + "5127357", + "5127378", + "5127380", + "5127394", + "5127521", + "5127562", + "5127592", + "5127595", + "5127629", + "5127631", + "5127638", + "5127644", + "5127656", + "5127669", + "5127675", + "5127680", + "5127683", + "5127688", + "5127698", + "5127748", + "5127805", + "5127814", + "5127822", + "5127835", + "5127893", + "5127916", + "5127932", + "5127955", + "5127971", + "5127998", + "5128005", + "5128007", + "5128011", + "5128034", + "5128045", + "5128067", + "5128182", + "5128224", + "5128225", + "5128232", + "5128250", + "5128266", + "5128326", + "5128353", + "5128357", + "5128363", + "5128380", + "5128432", + "5128446", + "5128475", + "5128488", + "5128519", + "5128545", + "5128569", + "5128587", + "5128597", + "5128644", + "5128663", + "5128984", + "5129000", + "5129091", + "5129190", + "5129251", + "5129257", + "5129293", + "5129374", + "5129378", + "5129387", + "5129405", + "5129417", + "5129430", + "5129432", + "5129451", + "5129473", + "5129479", + "5129480", + "5129481", + "5129489", + "5129496", + "5129502", + "5129515", + "5129517", + "5129524", + "5129531", + "5129535", + "5129544", + "5130277", + "5130296", + "5130322", + "5130326", + "5130330", + "5130335", + "5130347", + "5130369", + "5130392", + "5130393", + "5130400", + "5130439", + "5130444", + "5130448", + "5130456", + "5130464", + "5130467", + "5130471", + "5130476", + "5130487", + "5130502", + "5130514", + "5130521", + "5130528", + "5130542", + "5130548", + "5130557", + "5130559", + "5130574", + "5130587", + "5130682", + "5130696", + "5130748", + "5130775", + "5130813", + "5130814", + "5130851", + "5130908", + "5130944", + "5131058", + "5131096", + "5131142", + "5131192", + "5131256", + "5131293", + "5131339", + "5131347", + "5131372", + "5131407", + "5131442", + "5131443", + "5131467", + "5131493", + "5131495", + "5131520", + "5131540", + "5131565", + "5131597", + "5131608", + "5131910", + "5131951", + "5131957", + "5131982", + "5132078", + "5132079", + "5132084", + "5132137", + "5132154", + "5132183", + "5132191", + "5132239", + "5132246", + "5132252", + "5132254", + "5132283", + "5132317", + "5132346", + "5132347", + "5132360", + "5132374", + "5132398", + "5132429", + "5132440", + "5132446", + "5132505", + "5132523", + "5132540", + "5132550", + "5132917", + "5132940", + "5132956", + "5132973", + "5133009", + "5133035", + "5133051", + "5133088", + "5133142", + "5133251", + "5133255", + "5133265", + "5133451", + "5133503", + "5133523", + "5133565", + "5133568", + "5133581", + "5133589", + "5133591", + "5133595", + "5133609", + "5133610", + "5133615", + "5133621", + "5133622", + "5133623", + "5133634", + "5133635", + "5133687", + "5133689", + "5133693", + "5133695", + "5133736", + "5133786", + "5133864", + "5134098", + "5134301", + "5134469", + "5134517", + "5134543", + "5134559", + "5134569", + "5134583", + "5134607", + "5134621", + "5134659", + "5134661", + "5134667", + "5134682", + "5134686", + "5134687", + "5134693", + "5134759", + "5134810", + "5134815", + "5134837", + "5135026", + "5135191", + "5135355", + "5135513", + "5135546", + "5135573", + "5135643", + "5135839", + "5135944", + "5136059", + "5136113", + "5136200", + "5136306", + "5136372", + "5136594", + "5136681", + "5136713", + "5136752", + "5136790", + "5136868", + "5136939", + "5137085", + "5137086", + "5137128", + "5137156", + "5137166", + "5137257", + "5137291", + "5137330", + "5137408", + "5137511", + "5137512", + "5137540", + "5137553", + "5137578", + "5137582", + "5137588", + "5137593", + "5137595", + "5137601", + "5137605", + "5137608", + "5137612", + "5137615", + "5137626", + "5137659", + "5137663", + "5137664", + "5137672", + "5137674", + "5137677", + "5137679", + "5137682", + "5137689", + "5137693", + "5137694", + "5137695", + "5137700", + "5137706", + "5137708", + "5137711", + "5137714", + "5137747", + "5137748", + "5137763", + "5137790", + "5137791", + "5137799", + "5137800", + "5137802", + "5137803", + "5137808", + "5137819", + "5137823", + "5137827", + "5137828", + "5137832", + "5137833", + "5137842", + "5137847", + "5137849", + "5137850", + "5137851", + "5137858", + "5137861", + "5137863", + "5137882", + "5137889", + "5137890", + "5137891", + "5137894", + "5137903", + "5137920", + "5137926", + "5137932", + "5137938", + "5137945", + "5137946", + "5137949", + "5137955", + "5137988", + "5137996", + "5137998", + "5138069", + "5138200", + "5138257", + "5138387", + "5138543", + "5138561", + "5138681", + "5138701", + "5138732", + "5138743", + "5138841", + "5138929", + "5138967", + "5138984", + "5139026", + "5139029", + "5139034", + "5139040", + "5139050", + "5139064", + "5139156", + "5139201", + "5139309", + "5139357", + "5139524", + "5139578", + "5139673", + "5139864", + "5139897", + "5139898", + "5139908", + "5139909", + "5139914", + "5139928", + "5139990", + "5140006", + "5140033", + "5140054", + "5140056", + "5140063", + "5140214", + "5140244", + "5140436", + "5140443", + "5140534", + "5140561", + "5140603", + "5140627", + "5140969", + "5140980", + "5141085", + "5141144", + "5141154", + "5141163", + "5141172", + "5141177", + "5141179", + "5141185", + "5141187", + "5141188", + "5141195", + "5141197", + "5141198", + "5141199", + "5141202", + "5141212", + "5141215", + "5141216", + "5141226", + "5141230", + "5141233", + "5141234", + "5141236", + "5141242", + "5141248", + "5141250", + "5141254", + "5141262", + "5141291", + "5141297", + "5141311", + "5141317", + "5141324", + "5141340", + "5141342", + "5141344", + "5141493", + "5141501", + "5141581", + "5141590", + "5141643", + "5141650", + "5141662", + "5141677", + "5141697", + "5141743", + "5141763", + "5141795", + "5141913", + "5141924", + "5142001", + "5142006", + "5142032", + "5142061", + "5142062", + "5142067", + "5142086", + "5142130", + "5142160", + "5142166", + "5142176", + "5142213", + "5142249", + "5142254", + "5142267", + "5142269", + "5142273", + "5142283", + "5142298", + "5142300", + "5142314", + "5142317", + "5142319", + "5142328", + "5142338", + "5142352", + "5142372", + "5142394", + "5142424", + "5142436", + "5142499", + "5142583", + "5142599", + "5142725", + "5142729", + "5142730", + "5142749", + "5142822", + "5142825", + "5142829", + "5142842", + "5142870", + "5142903", + "5142948", + "5143048", + "5143049", + "5143080", + "5143107", + "5143116", + "5143129", + "5143147", + "5143232", + "5143234", + "5143241", + "5143249", + "5143266", + "5143279", + "5143284", + "5143285", + "5143303", + "5143311", + "5143315", + "5143338", + "5143354", + "5143380", + "5143384", + "5143453", + "5143477", + "5143506", + "5143511", + "5143525", + "5143586", + "5143651", + "5143657", + "5143675", + "5143697", + "5143703", + "5143944", + "5143947", + "5143952", + "5143960", + "5143964", + "5144027", + "5144092", + "5144093", + "5144129", + "5144190", + "5144196", + "5144204", + "5144227", + "5144318", + "5144345", + "5144363", + "5144381", + "5144386", + "5144407", + "5144424", + "5144426", + "5144431", + "5144457", + "5144472", + "5144499", + "5144505", + "5144534", + "5144543", + "5144554", + "5144558", + "5144564", + "5144575", + "5144583", + "5144588", + "5144593", + "5144596", + "5144633", + "5144677", + "5144721", + "5144729", + "5144782", + "5144787", + "5144805", + "5144806", + "5144864", + "5144880", + "5144900", + "5144935", + "5144936", + "5144937", + "5144942", + "5144953", + "5145009", + "5145075", + "5145078", + "5145079", + "5145136", + "5145139", + "5145186", + "5145238", + "5145255", + "5145260", + "5145269", + "5145409", + "5145422", + "5145466", + "5145495", + "5145502", + "5145503", + "5145521", + "5145522", + "5145560", + "5145713", + "5145729", + "5145842", + "5145965", + "5145998", + "5146030", + "5146038", + "5146062", + "5146082", + "5146091", + "5146179", + "5146253", + "5146262", + "5146282", + "5146294", + "5146303", + "5146305", + "5146326", + "5146342", + "5146379", + "5146389", + "5146412", + "5146420", + "5146426", + "5146434", + "5146472", + "5146476", + "5146483", + "5146496", + "5146497", + "5146508", + "5146510", + "5146525", + "5146559", + "5146566", + "5146567", + "5146578", + "5146598", + "5146599", + "5146601", + "5146608", + "5146611", + "5146659", + "5146677", + "5146693", + "5146720", + "5146746", + "5146752", + "5146762", + "5146774", + "5146805", + "5146820", + "5146832", + "5146833", + "5146837", + "5146842", + "5146852", + "5146856", + "5146862", + "5146880", + "5146883", + "5146894", + "5146899", + "5146908", + "5146920", + "5146937", + "5146946", + "5146961", + "5147002", + "5147018", + "5147038", + "5147039", + "5147041", + "5147043", + "5147046", + "5147058", + "5147062", + "5147071", + "5147099", + "5147109", + "5147114", + "5147121", + "5147139", + "5147145", + "5147150", + "5147155", + "5147160", + "5147165", + "5147171", + "5147179", + "5147193", + "5147208", + "5147211", + "5147212", + "5147225", + "5147232", + "5147245", + "5147287", + "5147306", + "5147319", + "5147354", + "5147395", + "5147415", + "5147437", + "5147441", + "5147478", + "5147492", + "5147513", + "5147516", + "5147522", + "5147534", + "5147560", + "5147608", + "5147638", + "5147681", + "5147703", + "5147713", + "5147827", + "5147834", + "5147838", + "5147858", + "5147868", + "5147871", + "5147879", + "5147883", + "5147894", + "5147898", + "5147899", + "5147909", + "5147917", + "5147923", + "5147968", + "5148043", + "5148055", + "5148096", + "5148097", + "5148184", + "5148214", + "5148223", + "5148247", + "5148248", + "5148252", + "5148264", + "5148277", + "5148280", + "5148286", + "5148379", + "5148394", + "5148424", + "5148436", + "5148462", + "5148475", + "5148486", + "5148487", + "5148520", + "5148531", + "5148544", + "5148576", + "5148593", + "5148719", + "5148743", + "5148753", + "5148766", + "5148850", + "5148934", + "5148952", + "5148954", + "5149012", + "5149081", + "5149136", + "5149174", + "5149182", + "5149237", + "5149307", + "5149308", + "5149315", + "5149317", + "5149369", + "5149370", + "5149371", + "5149414", + "5149438", + "5149474", + "5149499", + "5149569", + "5149609", + "5149630", + "5149631", + "5149659", + "5149665", + "5149667", + "5149704", + "5149713", + "5149746", + "5149753", + "5149768", + "5149777", + "5149780", + "5149782", + "5149784", + "5149787", + "5149819", + "5149820", + "5149836", + "5149839", + "5149843", + "5149873", + "5149880", + "5149940", + "5149986", + "5150053", + "5150092", + "5714299", + "5714302", + "5714312", + "5714333", + "5714356", + "5714361", + "5714367", + "5714369", + "5714410", + "5714507", + "5714558", + "5714572", + "5714575", + "5714618", + "5714680", + "5714747", + "5714755", + "5714788", + "5714914", + "5714973", + "5714984", + "5714994", + "5715004", + "5715009", + "5715010", + "5715013", + "5715127", + "5715275", + "5715276", + "5715277", + "5715278", + "5715280", + "5715281", + "5734138", + "5734146", + "5734212", + "5734291", + "5734305", + "5734326", + "5734335", + "5734344", + "5734345", + "5734349", + "5734362", + "5734379", + "5734388", + "5734396", + "5734398", + "5734405", + "5734420", + "5734448", + "5734451", + "5734515", + "5734519", + "5734528", + "5734535", + "5734539", + "5734542", + "5734543", + "5734556", + "5734560", + "5734569", + "5734655", + "5734657", + "5734713", + "5734719", + "5734744", + "5734817", + "5734891", + "5734897", + "5734900", + "5734901", + "5768880", + "5769028", + "5769062", + "5769068", + "5769072", + "5769164", + "5769191", + "5769272", + "5769709", + "5770913", + "5770922", + "5770942", + "5771227", + "5771230", + "5771232", + "5771236", + "5771239", + "5771243", + "5771249", + "5771255", + "5771256", + "5771258", + "5771259", + "5771350", + "5771357", + "5771877", + "5771982", + "5772063", + "5772129", + "5772169", + "5772171", + "5772172", + "5772176", + "5772178", + "5772180", + "5772186", + "5772196", + "5772199", + "5772202", + "5772205", + "5772206", + "5772210", + "5772222", + "5772269", + "5772309", + "5772349", + "5772351", + "5772446", + "5772702", + "5772749", + "5772890", + "5772948", + "5792092", + "5802248", + "5802256", + "5802257", + "5802331", + "5802333", + "5802339", + "5802396", + "5802625", + "5803065", + "5803588", + "5804166", + "5804895", + "5805407", + "5805954", + "5806127", + "5806132", + "5806166", + "5806167", + "5806175", + "5806176", + "5806177", + "5806244", + "5806333", + "5806352", + "5806353", + "5806391", + "5806412", + "5879654", + "5880040", + "5880041", + "5880063", + "5880147", + "5880258", + "5880367", + "5880392", + "5880478", + "5880512", + "5880533", + "5880539", + "5880545", + "5880550", + "5880552", + "5880559", + "5880563", + "5881397", + "5881400", + "5881551", + "5881748", + "5881946", + "5882039", + "5882965", + "5883052", + "5883255", + "5883881", + "5883925", + "5883985", + "5884188", + "5884243", + "5884245", + "5884247", + "5884258", + "5884571", + "5884851", + "5884888", + "5885399", + "5885428", + "5925238", + "5925317", + "5976937", + "5977179", + "5977185", + "5977197", + "5977203", + "5977207", + "5977208", + "5977214", + "5977216", + "5977220", + "5977235", + "5977247", + "5977250", + "5977251", + "5977257", + "5977259", + "5977260", + "5977261", + "5977262", + "6097214", + "6097225", + "6097228", + "6097233", + "6097234", + "6097235", + "6097236", + "6097254", + "6097260", + "6097269", + "6099041", + "6100725", + "6100726", + "6106647", + "6106744", + "6106759", + "6106943", + "6112449", + "6112547", + "6112606", + "6112610", + "6112613", + "6112634", + "6112661", + "6113873", + "6113959", + "6115283", + "6115388", + "6115426", + "6115437", + "6115504", + "6115793", + "6115822", + "6115830", + "6115946", + "6115953", + "6115973", + "6116073", + "6116341", + "6116368", + "6116440", + "6116646", + "6116661", + "6116674", + "6116699", + "6116754", + "6116899", + "6117055", + "6117124", + "6117485", + "6118530", + "6119299", + "6119323", + "6119488", + "6120803", + "6120861", + "6120980", + "6121010", + "6121184", + "6121218", + "6121912", + "6122103", + "6122301", + "6122364", + "6122527", + "6132711", + "6132712", + "6132715", + "6132723", + "6132728", + "6132729", + "6132781", + "6132797", + "6132809", + "6132824", + "6132826", + "6132841", + "6132850", + "6132868", + "6132869", + "6132915", + "6132916", + "6132917", + "6132936", + "6132938", + "6132953", + "6132957", + "6132966", + "6132967", + "6132971", + "6132974", + "6132979", + "6132989", + "6133001", + "6133002", + "6133007", + "6133011", + "6133013", + "6133026", + "6133029", + "6133033", + "6133051", + "6133058", + "6133069", + "6133075", + "6133081", + "6133083", + "6133117", + "6133141", + "6133154", + "6133158", + "6133181", + "6133182", + "6133232", + "6133241", + "6133242", + "6133244", + "6133248", + "6133252", + "6133262", + "6133264", + "6133269", + "6133270", + "6133271", + "6133292", + "6133297", + "6133311", + "6133312", + "6133313", + "6133315", + "6133317", + "6133325", + "6133340", + "6133343", + "6133397", + "6133441", + "6133481", + "6133498", + "6133500", + "6133501", + "6133502", + "6133509", + "6133513", + "6133516", + "6133517", + "6133518", + "6133519", + "6133520", + "6133523", + "6133525", + "6133528", + "6133534", + "6133540", + "6133542", + "6133546", + "6133548", + "6133552", + "6133559", + "6133560", + "6133562", + "6133575", + "6133582", + "6133585", + "6133586", + "6133591", + "6133593", + "6133595", + "6133604", + "6133607", + "6133614", + "6133619", + "6133635", + "6133637", + "6133643", + "6133648", + "6133659", + "6133667", + "6133670", + "6133673", + "6133674", + "6133676", + "6133680", + "6133681", + "6133684", + "6133687", + "6133688", + "6133691", + "6133700", + "6133720", + "6133742", + "6133750", + "6133769", + "6133777", + "6133780", + "6133803", + "6133806", + "6133809", + "6133811", + "6133813", + "6133858", + "6134027", + "6134035", + "6196939", + "6197138", + "6198302", + "6201790", + "6205994", + "6207059", + "6214734", + "6219423", + "6221746", + "6228464", + "6229058", + "6231906", + "6544581", + "6544637", + "6544687", + "7207679", + "7345742", + "7345777", + "7345801", + "7345811", + "7345813", + "7345819", + "7345829", + "7345843", + "7346231", + "7346236", + "7346237", + "7346240", + "7346249", + "7346252", + "7346256", + "7346263", + "7346276", + "7346284", + "7346286", + "7346301", + "7346328", + "7346335", + "7346340", + "7346344", + "7346346", + "7346351", + "7346354", + "7346356", + "7346381", + "7346382", + "7346384", + "7346401", + "7346407", + "7346417", + "7346426", + "7346430", + "7346434", + "7346444", + "7346446", + "7350238", + "7354189", + "7372375", + "7383338", + "7387466", + "7388922", + "7389824", + "7390086", + "7396517", + "7398419", + "7400814", + "7410701", + "7428726", + "7429212", + "7431428", + "7438067", + "7443518", + "7446048", + "7448174", + "7466487", + "7472845", + "7480993", + "7507369", + "7509928", + "7535515", + "7541913", + "7543006", + "7555991", + "7558165", + "7560807", + "7562564", + "7586742", + "7588222", + "7589577", + "7593392", + "7596232", + "7598729", + "7598945", + "7603634", + "7611914", + "7622059", + "7623903", + "7624468", + "7624494", + "7628188", + "7633472", + "7634721", + "7642610", + "7646066", + "7654770", + "7656811", + "7657419", + "7661023", + "7661785", + "7664111", + "7664771", + "7672864", + "7673242", + "7674502", + "7681733", + "7683096", + "7689966", + "7700512", + "7700568", + "7701550", + "7712384", + "7712938", + "7716829", + "7717385", + "7717983", + "7725644", + "7726809", + "7728366", + "7734292", + "7738295", + "7741315", + "7752082", + "7753668", + "7761138", + "7762841", + "7764232", + "7767114", + "7768584", + "7768674", + "7769543", + "7776011", + "7778368", + "7779226", + "7780930", + "7785540", + "7791190", + "7791558", + "7798382", + "7799370", + "7800469", + "7803585", + "7809779", + "7825945", + "7851302", + "7854318", + "7864212", + "7867379", + "7869346", + "7870336", + "7874258", + "7875265", + "7877231", + "7882824", + "7895336", + "7903078", + "7905361", + "7909858", + "7911151", + "7917033", + "7918000", + "7919880", + "7921916", + "7924383", + "7934873", + "7937573", + "7940536", + "7946946", + "7955974", + "7958169", + "7960566", + "7964262", + "7964910", + "7972792", + "7973517", + "7975250", + "7976145", + "7981372", + "7981386", + "7988195", + "7988274", + "7993353", + "7996464", + "8000103", + "8001799", + "8007222", + "8008237", + "8014296", + "8015612", + "8015895", + "8016522", + "8016905", + "8021109", + "8023645", + "8035998", + "8038357", + "8043500", + "8045644", + "8047165", + "8047343", + "8048904", + "8049830", + "8050639", + "8067894", + "8073674", + "8078362", + "8086347", + "8094357", + "8102790", + "8103163", + "8105817", + "8108800", + "8109173", + "8111395", + "8133328", + "8133678", + "8137978", + "8138711", + "8140883", + "8141741", + "8146570", + "8148822", + "8150089", + "8150450", + "8158342", + "8160782", + "8165185", + "8167638", + "8167743", + "8168644", + "8172949", + "8176911", + "8177775", + "8178453", + "8178854", + "8180900", + "8186212", + "8189761", + "8193562", + "8200050", + "8201251", + "8203812", + "8208583", + "8214814", + "8215326", + "8218441", + "8219149", + "8222049", + "8223165", + "8225376", + "8233062", + "8237987", + "8244266", + "8247566", + "8253467", + "8262357", + "8270406", + "8271010", + "8273661", + "8277078", + "8292351", + "8292872", + "8295666", + "8298764", + "8312017", + "8313553", + "8314088", + "8322165", + "8324720", + "8325294", + "8326103", + "8329661", + "8331687", + "8345567", + "8345820", + "8345991", + "8348761", + "8352161", + "8355390", + "8356768", + "8361848", + "8363507", + "8363709", + "8366158", + "8367663", + "8369868", + "8379616", + "8384839", + "8388883", + "8389961", + "8393082", + "8393221", + "8394261", + "8396242", + "8397564", + "8402212", + "8404037", + "8405656", + "8407461", + "8411753", + "8414310", + "8416348", + "8420632", + "8421569", + "8424964", + "8424972", + "8425580", + "8426357", + "8429622", + "8439879", + "8440999", + "8445010", + "8491927", + "8501203", + "8503184", + "8532380", + "8537359", + "8543494", + "8546322", + "8548427", + "8549720", + "8551997", + "8559137", + "8562506", + "8574752", + "8581601", + "8604089", + "8624848", + "8643155", + "8643309", + "8647523", + "8669164", + "8691947", + "8708745", + "8720118", + "8723161", + "8725248", + "8727750", + "8729319", + "8734090", + "8734154", + "8741260", + "8742426", + "8751100", + "8755207", + "8756768", + "8763986", + "8766638", + "8774985", + "8775810", + "8779506", + "8782891", + "8790054", + "8792353", + "8793278", + "8793324", + "8793873", + "8793973", + "8797666", + "8802610", + "8805966", + "8810143", + "8810912", + "8818378", + "8823068", + "8825450", + "8825467", + "8831819", + "8832485", + "8833509", + "8834672", + "8837162", + "8837974", + "8843927", + "8846776", + "8847500", + "8849480", + "8851663", + "8856895", + "8858121", + "8869900", + "8871600", + "8872165", + "8874140", + "8874633", + "8876855", + "8877458", + "8883183", + "8890502", + "8897869", + "8904480", + "8905759", + "8908724", + "8918036", + "8924506", + "8928353", + "8929537", + "8933773", + "8941801", + "8941993", + "8943174", + "8951523", + "8951618", + "8955839", + "8956567", + "8956729", + "8958353", + "8963926", + "8968321", + "8978362", + "8981028", + "8982591", + "8992718", + "9002107", + "9007213", + "9008379", + "9015218", + "9016382", + "9017206", + "9022399", + "9023222", + "9028122", + "9038042", + "9050611", + "9051758", + "9051888", + "9053308", + "9059564", + "9062262", + "9068968", + "9072828", + "9086331", + "9087922", + "9092175", + "9100030", + "9101339", + "9105656", + "9110918", + "9111961", + "9113409", + "9114044", + "9119710", + "9135821", + "9135886", + "9136904", + "9137631", + "9146244", + "9148810", + "9156165", + "9156458", + "9157410", + "9159662", + "9163659", + "9174377", + "9175037", + "9176043", + "9181627", + "9183738", + "9190731", + "9192882", + "9208233", + "9208918", + "9213204", + "9216200", + "9219266", + "9219529", + "9220953", + "9228024", + "9233420", + "9235027", + "9235225", + "9236138", + "9237031", + "9237599", + "9237621", + "9238900", + "9240216", + "9240357", + "9240588", + "9241105", + "9242559", + "9242609", + "9243117", + "9243264", + "9243875", + "9244066", + "9244973", + "9247563", + "9247947", + "9248329", + "9248830", + "9249036", + "9249651", + "9250744", + "9251088", + "9251096", + "9252524", + "9253819", + "9254017", + "9254157", + "9255102", + "9255328", + "9255512", + "9256436", + "9256786", + "9257793", + "9257908", + "9261296", + "9261458", + "9262981", + "9264326", + "9266866", + "9267364", + "9268082", + "9272461", + "9273409", + "9273963", + "9274899", + "9276279", + "9277294", + "9277330", + "9278311", + "9278398", + "9279670", + "9281181", + "9282469", + "9283228", + "9287097", + "9288185", + "9288386", + "9288596", + "9288979", + "9289753", + "9289908", + "9290866", + "9291075", + "9291092", + "9291297", + "9292394", + "9294363", + "9297059", + "9298735", + "9299326", + "9301336", + "9305011", + "9305798", + "9306367", + "9307098", + "9307254", + "9307713", + "9308082", + "9308930", + "9309575", + "9310286", + "9310369", + "9310510", + "9310626", + "9311081", + "9312545", + "9313634", + "9314022", + "9315577", + "9315833", + "9320776", + "9320916", + "9321500", + "9322646", + "9323382", + "9324570", + "9325654", + "9327042", + "9327259", + "9328683", + "9330467", + "9331464", + "9332369", + "9332550", + "9334639", + "9336001", + "9337858", + "9338769", + "9339487", + "9340070", + "9340452", + "9342344", + "9343385", + "9344456", + "9345545", + "9347308", + "9348210", + "9350484", + "9352348", + "9352978", + "9353360", + "9354496", + "9355107", + "9355953", + "9356491", + "9357385", + "9358521", + "9359597", + "9359871", + "9362190", + "9362560", + "9362785", + "9363692", + "9366016", + "9366762", + "9367471", + "9367674", + "9368026", + "9368398", + "9368974", + "9369576", + "9370070", + "9370312", + "9370933", + "9372988", + "9373309", + "9373686", + "9374637", + "9377268", + "9379595", + "9379855", + "9381852", + "9382044", + "9382415", + "9385576", + "9387353", + "9387782", + "9388726", + "9390065", + "9390293", + "9391442", + "9391467", + "9392058", + "9392076", + "9392084", + "9392614", + "9394138", + "9395000", + "9395261", + "9396180", + "9399145", + "9399288", + "9400545", + "9400895", + "9400916", + "9400977", + "9402536", + "9403481", + "9404919", + "9406020", + "9406822", + "9406984", + "9407200", + "9410076", + "9410414", + "9414984", + "9415435", + "9415669", + "9416645", + "9418549", + "9419734", + "9420824", + "9423248", + "9423863", + "9424082", + "9424441", + "9424464", + "9424681", + "9424853", + "9425857", + "9426054", + "9426252", + "9426771", + "9428900", + "9432438", + "9432644", + "9432810", + "9433772", + "9434954", + "9436173", + "9438677", + "9438913", + "9440183", + "9440644", + "9442902", + "9443159", + "9445489", + "9446281", + "9446902", + "9447614", + "9448761", + "9449132", + "9451320", + "9452274", + "9452497", + "9452702", + "9453490", + "9454052", + "9454291", + "9454444", + "9455404", + "9456004", + "9456735", + "9457324", + "9457757", + "9460510", + "9463442", + "9465978", + "9468297", + "9468667", + "9469139", + "9469300", + "9469928", + "9471709", + "9473121", + "9473918", + "9474256", + "9474405", + "9477531", + "9478331", + "9478424", + "9478718", + "9479525", + "9480768", + "9484411", + "9485481", + "9486293", + "9486411", + "9488754", + "9488783", + "9489399", + "9491341", + "9492499", + "9492640", + "9493016", + "9493317", + "9494431", + "9494526", + "9495306", + "9496311", + "9496896", + "9497623", + "9498206", + "9499599", + "9500553", + "9500945", + "9502606", + "9502724", + "9503548", + "9504222", + "9508913", + "9511345", + "9511749", + "9512631", + "9513830", + "9516038", + "9516680", + "9517291", + "9519191", + "9519321", + "9520799", + "9524458", + "9525172", + "9526331", + "9527919", + "9530135", + "9530200", + "9530271", + "9530406", + "9530928", + "9530977", + "9533271", + "9533293", + "9534291", + "9534690", + "9535420", + "9538525", + "9538684", + "9539128", + "9539292", + "9541133", + "9541734", + "9541908", + "9544337", + "9544558", + "9545331", + "9545480", + "9545713", + "9546514", + "9546910", + "9547140", + "9547535", + "9547676", + "9548726", + "9548993", + "9549172", + "9549475", + "9550265", + "9551544", + "9552253", + "9552466", + "9552703", + "9553692", + "9554074", + "9555094", + "9556427", + "9558845", + "9558873", + "9559336", + "9560018", + "9560404", + "9560782", + "9561820", + "9562175", + "9563355", + "9563837", + "9564612", + "9564779", + "9565980", + "9568710", + "9571514", + "9573163", + "9574801", + "9574939", + "9577234", + "9577547", + "9578319", + "9579309", + "9579730", + "9581695", + "9581976", + "9586329", + "9586705", + "9589234", + "9590057", + "9590066", + "9590272", + "9591877", + "9592714", + "9593098", + "9593393", + "9593475", + "9594509", + "9595155", + "9596498", + "9597741", + "9599150", + "9601788", + "9604825", + "9606779", + "9607036", + "9607447", + "9608673", + "9610059", + "9610080", + "9610447", + "9611624", + "9612009", + "9616658", + "9617411", + "9617496", + "9618068", + "9619088", + "9621086", + "9621113", + "9621271", + "9622117", + "9622725", + "9622955", + "9623131", + "9623220", + "9624918", + "9625112", + "9626037", + "9626500", + "9627567", + "9627917", + "9629365", + "9629450", + "9630748", + "9632824", + "9633615", + "9634575", + "9636267", + "9636442", + "9637664", + "9645309", + "9663271", + "9674732", + "9675743", + "9686431", + "9689122", + "9700261", + "9734171", + "9745549", + "9748079", + "9749806", + "9752950", + "9754232", + "9755262", + "9759340", + "9760511", + "9776414", + "9777614", + "9778438", + "9782192", + "9790007", + "9792270", + "9801765", + "9803522", + "9804158", + "9805848", + "9807789", + "9812211", + "9816676", + "9819403", + "9826405", + "9830270", + "9833933", + "9835867", + "9836014", + "9837762", + "9840570", + "9849625", + "9851221", + "9851261", + "9851867", + "9852545", + "9857679", + "9858922", + "9859868", + "9860684", + "9860902", + "9864281", + "9867379", + "9875111", + "9875141", + "9880932", + "9882683", + "9883140", + "9883274", + "9883856", + "9885192", + "9890366", + "9893740", + "9894093", + "9895629", + "9896144", + "9899724", + "9904499", + "9906229", + "9906979", + "9909775", + "9911298", + "9913863", + "9914882", + "9916153", + "9919915", + "9921001", + "9923283", + "9925669", + "9927378", + "9932090", + "9935837", + "9939530", + "9941073", + "9942354", + "9943941", + "9944922", + "9948031", + "9950697", + "9952043", + "9953708", + "9954885", + "9956017", + "9957790", + "9958147", + "9959898", + "9960072", + "9960318", + "9963153", + "9964857", + "9967251", + "9967529", + "9968404", + "9971153", + "9972403", + "9973217", + "9975134", + "9976926", + "9977181", + "9981187", + "9983244", + "9983957", + "9985020", + "9987116", + "9988287", + "9989156", + "9994384", + "9998920", + "9999965" + ], + "optimized/genus": [ + "10017524", + "10175914", + "10268975", + "10272567", + "10283055", + "10330071", + "10381192", + "10416544", + "10494601", + "10527924", + "10552471", + "10583848", + "10777718", + "10800539", + "10836135", + "10836231", + "10864898", + "10874367", + "10874844", + "10876650", + "10903022", + "10956237", + "10962816", + "10965723", + "10976134", + "10988777", + "10990846", + "11024850", + "11027113", + "11057282", + "11064851", + "11070822", + "11425419", + "11442724", + "11462628", + "11486436", + "11491719", + "11495707", + "11527985", + "11556078", + "11596224", + "11654220", + "11748480", + "11760262", + "11760445", + "11783346", + "11879268", + "11902924", + "11907720", + "11954625", + "11955428", + "12031311", + "12047421", + "12076089", + "12105049", + "1214429", + "12152411", + "12206130", + "12225180", + "12246183", + "12260643", + "1369661", + "1555575", + "1730471", + "1730685", + "1730705", + "1730763", + "1730815", + "1730935", + "1731096", + "1731220", + "1731226", + "1731363", + "1731505", + "1731584", + "1731712", + "1731748", + "1731800", + "1731817", + "1731859", + "1731885", + "1731891", + "1732047", + "1732062", + "1732085", + "1732089", + "1732160", + "1732397", + "1732442", + "1732496", + "1732599", + "1732658", + "1732661", + "1732761", + "1732814", + "1732834", + "1732862", + "1732883", + "1732969", + "1733135", + "1733242", + "1733338", + "1733502", + "1733524", + "1733529", + "1733574", + "1733617", + "1733670", + "1733831", + "1733840", + "1734381", + "1734388", + "1734505", + "1734548", + "1734683", + "1734849", + "1734934", + "1735093", + "1735256", + "1735272", + "1735289", + "1735406", + "1735409", + "1735487", + "1735631", + "1735652", + "1735814", + "1735869", + "1736266", + "1736314", + "1736354", + "1736359", + "1736388", + "1736409", + "1736418", + "1736444", + "1736460", + "1736612", + "1736656", + "1736725", + "1736758", + "1736793", + "1736802", + "1736834", + "1736895", + "1736951", + "1737021", + "1737063", + "1737084", + "1737110", + "1737177", + "1737228", + "1737303", + "1737335", + "1737519", + "1737647", + "1737701", + "1738021", + "1738049", + "1738065", + "1738143", + "1738215", + "1738242", + "1738265", + "1738583", + "1738667", + "1738881", + "1739000", + "1739048", + "1739060", + "1739336", + "1739398", + "1739418", + "1739446", + "1739550", + "1739599", + "1739724", + "1740434", + "1740515", + "1740664", + "1740796", + "1740814", + "1741043", + "1741073", + "1741082", + "1741128", + "1741141", + "1741314", + "1741338", + "1741383", + "1741404", + "1741540", + "1741547", + "1741557", + "1741585", + "1741717", + "1741805", + "1742045", + "1742061", + "1742345", + "1742398", + "1742419", + "1743173", + "1743188", + "1743269", + "1743318", + "1743343", + "1743404", + "1743452", + "1743459", + "1743467", + "1743485", + "1743516", + "1743637", + "1743652", + "1743656", + "1743673", + "1743690", + "1743762", + "1743811", + "1743926", + "1743994", + "1744049", + "1744129", + "1744133", + "1744165", + "1744208", + "1744219", + "1744237", + "1744240", + "1744481", + "1744587", + "1744687", + "1744691", + "1744761", + "1744928", + "1744946", + "1744993", + "1745017", + "1745021", + "1745076", + "1745086", + "1745285", + "1745549", + "1745894", + "1745922", + "1745927", + "1746012", + "1746172", + "1746324", + "1746399", + "1746437", + "1746461", + "1746562", + "1746600", + "1746694", + "1746712", + "1746749", + "1747019", + "1747044", + "1747067", + "1747122", + "1747195", + "1747209", + "1747242", + "1747506", + "1747611", + "1747625", + "1747723", + "1747904", + "1747949", + "1748099", + "1748143", + "1748201", + "1748277", + "1748368", + "1748560", + "1748645", + "1748748", + "1748757", + "1748777", + "1748799", + "1748889", + "1748902", + "1749042", + "1749068", + "1749116", + "1749137", + "1749286", + "1749401", + "1749505", + "1749662", + "1749712", + "1749732", + "1750313", + "1750339", + "1750759", + "1751200", + "1751227", + "1751482", + "1751552", + "1751655", + "1751789", + "1751846", + "1751979", + "1752035", + "1752100", + "1752158", + "1752234", + "1752236", + "1752277", + "1752321", + "1752361", + "1752382", + "1752482", + "1752533", + "1752552", + "1752650", + "1752744", + "1752804", + "1752820", + "1752891", + "1752899", + "1752915", + "1752944", + "1752965", + "1753080", + "1753104", + "1753147", + "1753211", + "1753224", + "1753410", + "1753458", + "1753548", + "1753594", + "1753630", + "1753657", + "1753747", + "1753802", + "1753826", + "1753830", + "1753896", + "1753921", + "1753981", + "1754133", + "1754176", + "1754253", + "1754269", + "1754315", + "1754329", + "1754344", + "1754391", + "1754412", + "1754508", + "1754609", + "1754799", + "1754857", + "1754901", + "1754916", + "1754927", + "1755149", + "1755233", + "1755294", + "1757647", + "1757668", + "1757834", + "1757850", + "1757883", + "1757993", + "1758098", + "1758439", + "1758446", + "1758610", + "1758620", + "1758718", + "1758724", + "1758765", + "1758790", + "1758812", + "1758827", + "1758859", + "1758873", + "1758939", + "1759029", + "1759152", + "1759329", + "1759405", + "1759552", + "1759711", + "1759767", + "1759797", + "1759812", + "1759878", + "1759882", + "1760088", + "1760135", + "1760168", + "1760198", + "1760260", + "1760285", + "1760355", + "1760382", + "1760401", + "1760447", + "1760583", + "1760588", + "1760678", + "1760738", + "1760849", + "1760914", + "1760928", + "1760946", + "1760969", + "1761017", + "1761094", + "1761132", + "1761207", + "1761351", + "1761388", + "1761401", + "1761495", + "1761539", + "1761550", + "1761571", + "1761728", + "1761750", + "1761775", + "1761787", + "1761797", + "1761815", + "1761829", + "1761857", + "1761889", + "1762149", + "1762194", + "1762212", + "1762225", + "1762232", + "1762280", + "1762346", + "1762414", + "1762605", + "1762640", + "1762666", + "1762711", + "1762841", + "1762885", + "1762898", + "1763151", + "1763285", + "1763588", + "1763591", + "1763597", + "1763649", + "1763693", + "1763713", + "1763777", + "1763951", + "1764015", + "1764140", + "1764158", + "1764187", + "1764234", + "1764504", + "1764524", + "1764537", + "1764670", + "1764684", + "1764737", + "1764851", + "1764916", + "1764920", + "1765092", + "1765161", + "1765176", + "1765207", + "1765601", + "1765652", + "1765657", + "1765726", + "1765763", + "1765861", + "1765877", + "1765949", + "1765960", + "1766066", + "1766077", + "1766123", + "1766259", + "1766265", + "1766280", + "1766366", + "1766538", + "1766547", + "1766624", + "1766671", + "1766708", + "1766838", + "1766883", + "1766908", + "1766914", + "1767029", + "1767032", + "1767046", + "1767093", + "1767210", + "1767304", + "1767334", + "1767360", + "1767483", + "1767496", + "1767504", + "1767509", + "1767566", + "1767590", + "1767644", + "1767714", + "1767752", + "1767796", + "1767878", + "1767949", + "1768106", + "1768130", + "1768136", + "1768165", + "1768222", + "1768281", + "1768302", + "1768411", + "1768432", + "1768542", + "1768561", + "1768579", + "1768691", + "1768896", + "1768949", + "1768971", + "1768999", + "1769024", + "1769051", + "1769098", + "1769110", + "1769165", + "1769189", + "1769208", + "1769212", + "1769311", + "1769330", + "1769393", + "1769504", + "1769735", + "1769812", + "1769819", + "1769933", + "1769943", + "1769945", + "1769972", + "1770011", + "1770123", + "1770169", + "1770274", + "1770379", + "1770396", + "1770488", + "1770592", + "1770658", + "1771356", + "1771363", + "1771448", + "1771454", + "1771501", + "1771541", + "1771549", + "1771562", + "1771845", + "1771850", + "1771866", + "1771871", + "1771881", + "1771972", + "1771980", + "1772042", + "1772053", + "1772092", + "1772151", + "1772155", + "1772253", + "1772259", + "1772349", + "1772359", + "1772421", + "1772425", + "1772445", + "1772455", + "1772540", + "1772660", + "1772714", + "1772783", + "1772826", + "1772926", + "1773740", + "1773781", + "1773846", + "1773983", + "1774090", + "1774237", + "1774251", + "1774256", + "1774309", + "1774357", + "1774366", + "1774573", + "1774778", + "1774846", + "1774853", + "1774906", + "1774917", + "1774940", + "1774947", + "1775029", + "1775058", + "1775081", + "1775144", + "1775149", + "1775234", + "1775285", + "1775298", + "1775310", + "1775505", + "1775624", + "1775633", + "1775663", + "1775833", + "1775864", + "1775887", + "1775910", + "1775959", + "1775969", + "1775975", + "1775986", + "1776166", + "1776168", + "1776181", + "1776205", + "1776246", + "1776299", + "1776391", + "1776454", + "1776498", + "1776576", + "1776846", + "1776978", + "1777014", + "1777101", + "1777140", + "1777156", + "1777174", + "1777243", + "1777260", + "1777277", + "1777560", + "1777629", + "1777724", + "1777734", + "1777760", + "1777863", + "1777868", + "1777907", + "1777925", + "1777971", + "1778073", + "1778108", + "1778114", + "1778136", + "1778156", + "1778332", + "1778406", + "1778497", + "1778527", + "1778544", + "1778574", + "1778600", + "1778626", + "1778686", + "1778695", + "1779253", + "1779398", + "1779429", + "1779445", + "1779611", + "1779630", + "1779666", + "1779682", + "1779739", + "1779957", + "1780042", + "1780068", + "1780139", + "1780207", + "1780269", + "1780300", + "1780615", + "1780700", + "1780844", + "1780855", + "1780861", + "1780913", + "1781027", + "1781044", + "1781086", + "1781160", + "1781226", + "1781546", + "1781630", + "1781683", + "1781695", + "1781924", + "1781971", + "1782029", + "1782041", + "1782106", + "1782167", + "1782184", + "1782205", + "1782317", + "1782325", + "1782330", + "1782414", + "1782456", + "1782460", + "1782522", + "1782524", + "1782594", + "1782607", + "1782659", + "1783087", + "1783166", + "1783299", + "1783311", + "1783337", + "1783344", + "1783367", + "1783394", + "1783651", + "1783739", + "1783783", + "1783838", + "1783845", + "1783880", + "1783931", + "1783955", + "1784240", + "1784275", + "1784342", + "1784356", + "1784395", + "1784645", + "1784686", + "1784696", + "1784759", + "1784809", + "1784892", + "1785140", + "1785216", + "1785279", + "1785281", + "1785305", + "1785398", + "1785439", + "1785723", + "1785726", + "1785742", + "1785830", + "1785833", + "1785873", + "1785909", + "1785931", + "1786031", + "1786211", + "1786307", + "1786313", + "1786329", + "1786447", + "1786454", + "1786513", + "1786563", + "1786570", + "1786601", + "1786710", + "1786730", + "1786807", + "1786859", + "1786886", + "1786909", + "1786930", + "1786955", + "1787011", + "1787061", + "1787105", + "1787107", + "1787399", + "1787427", + "1787496", + "1787522", + "1787996", + "1788033", + "1788044", + "1788051", + "1788069", + "1788100", + "1788138", + "1788243", + "1788326", + "1788411", + "1788466", + "1788535", + "1788663", + "1788678", + "1788719", + "1788724", + "1788764", + "1788807", + "1788844", + "1788860", + "1788916", + "1788941", + "1789056", + "1789061", + "1789150", + "1789189", + "1789210", + "1789222", + "1789246", + "1789286", + "1789407", + "1789474", + "1789493", + "1789503", + "1789545", + "1789602", + "1789628", + "1789643", + "1789671", + "1789793", + "1789826", + "1789953", + "1789978", + "1790228", + "1790322", + "1790328", + "1790337", + "1790356", + "1790449", + "1790601", + "1790683", + "1790726", + "1790784", + "1790791", + "1790794", + "1790829", + "1790837", + "1790850", + "1790931", + "1790999", + "1791093", + "1791152", + "1791180", + "1791315", + "1791371", + "1791378", + "1791382", + "1791497", + "1791585", + "1791654", + "1791678", + "1791696", + "1791769", + "1791792", + "1791827", + "1791843", + "1791861", + "1791874", + "1792055", + "1792199", + "1792250", + "1792270", + "1792280", + "1792316", + "1792324", + "1792405", + "1792635", + "1792687", + "1792712", + "1792752", + "1792764", + "1792816", + "1792825", + "1792984", + "1793188", + "1793190", + "1793222", + "1793290", + "1793320", + "1793366", + "1793417", + "1793452", + "1793571", + "1793603", + "1793660", + "1793684", + "1793697", + "1793856", + "1793887", + "1793981", + "1794099", + "1794349", + "1794423", + "1794496", + "1794509", + "1794512", + "1794529", + "1794570", + "1794630", + "1795041", + "1795061", + "1795072", + "1795103", + "1795126", + "1795443", + "1795478", + "1795656", + "1795782", + "1796204", + "1796209", + "1796225", + "1796256", + "1796272", + "1796302", + "1796328", + "1796358", + "1796408", + "1796469", + "1796639", + "1796782", + "1796837", + "1796957", + "1796971", + "1797038", + "1797073", + "1797586", + "1797726", + "1797730", + "1798007", + "1798027", + "1798083", + "1798089", + "1798097", + "1798277", + "1798308", + "1798340", + "1798362", + "1798377", + "1798421", + "1798440", + "1798478", + "1798509", + "1798514", + "1798902", + "1799163", + "1799180", + "1799416", + "1799429", + "1799669", + "1799687", + "1799702", + "1799723", + "1799771", + "1799789", + "1799868", + "1799993", + "1800016", + "1800085", + "1800142", + "1800236", + "1800430", + "1800437", + "1800464", + "1800482", + "1800518", + "1800523", + "1800542", + "1800639", + "1800662", + "1800668", + "1800838", + "1800845", + "1800870", + "1800879", + "1800891", + "1800918", + "1800952", + "1800985", + "1800996", + "1801046", + "1801072", + "1801082", + "1801085", + "1801146", + "1801195", + "1801203", + "1801278", + "1801431", + "1801449", + "1801758", + "1801990", + "1802070", + "1802118", + "1802159", + "1802213", + "1802234", + "1802269", + "1802330", + "1802660", + "1802775", + "1802779", + "1802864", + "1802886", + "1802894", + "1802935", + "1802997", + "1803137", + "1803474", + "1803699", + "1803780", + "1803812", + "1803951", + "1804321", + "1804391", + "1804414", + "1804474", + "1804500", + "1804552", + "1804609", + "1804645", + "1804714", + "1804755", + "1804829", + "1804905", + "1804961", + "1805025", + "1805088", + "1805171", + "1805233", + "1805340", + "1805496", + "1805498", + "1805536", + "1805680", + "1805688", + "1805749", + "1805805", + "1805917", + "1806046", + "1806123", + "1806539", + "1806678", + "1806703", + "1806731", + "1806813", + "1806818", + "1806869", + "1806884", + "1806935", + "1807195", + "1807270", + "1807288", + "1807352", + "1807453", + "1807502", + "1807552", + "1807557", + "1807878", + "1807965", + "1808083", + "1808097", + "1808588", + "1808720", + "1808910", + "1808961", + "1809017", + "1809035", + "1809063", + "1809069", + "1809113", + "1809124", + "1809150", + "1809201", + "1809226", + "1809292", + "1809304", + "1809307", + "1809346", + "1809379", + "1809452", + "1809913", + "1809946", + "1809948", + "1809950", + "1810097", + "1810107", + "1810140", + "1810463", + "1810465", + "1810505", + "1810530", + "1810734", + "1810746", + "1810845", + "1810849", + "1810852", + "1810969", + "1810973", + "1811436", + "1811507", + "1811612", + "1811679", + "1812433", + "1812492", + "1812534", + "1812649", + "1812874", + "1812976", + "1813237", + "1813262", + "1814095", + "1814174", + "1814314", + "1814401", + "1814534", + "1814563", + "1814595", + "1814654", + "1814799", + "1814885", + "1814969", + "1815226", + "1815259", + "1815337", + "1815380", + "1815439", + "1815844", + "1815859", + "1815923", + "1816024", + "1816417", + "1816564", + "1816799", + "1816867", + "1816956", + "1817060", + "1817084", + "1817136", + "1817669", + "1817786", + "1817807", + "1817809", + "1817848", + "1817918", + "1817933", + "1818401", + "1818428", + "1818431", + "1818477", + "1818650", + "1818989", + "1819125", + "1819252", + "1819276", + "1819372", + "1819648", + "1819696", + "1819785", + "1819865", + "1819968", + "1820080", + "1820270", + "1820536", + "1820708", + "1821441", + "1822129", + "1822137", + "1822252", + "1822307", + "1822481", + "1822545", + "1822666", + "1822778", + "1822912", + "1823292", + "1823440", + "1823479", + "1823488", + "1823572", + "1823574", + "1823601", + "1823616", + "1823667", + "1823698", + "1823714", + "1824079", + "1824090", + "1824237", + "1824246", + "1824253", + "1824255", + "1824279", + "1824326", + "1824336", + "1824350", + "1824384", + "1824440", + "1824562", + "1824749", + "1824762", + "1824842", + "1824870", + "1825057", + "1825076", + "1825121", + "1825216", + "1825235", + "1825334", + "1825340", + "1825424", + "1825444", + "1825535", + "1825551", + "1825734", + "1825783", + "1825887", + "1825951", + "1825963", + "1826021", + "1826045", + "1826053", + "1826107", + "1826124", + "1826153", + "1826180", + "1826192", + "1826217", + "1826417", + "1826511", + "1826572", + "1826650", + "1827099", + "1827111", + "1827158", + "1827279", + "1827342", + "1827405", + "1827428", + "1827482", + "1827506", + "1827539", + "1827547", + "1827641", + "1827686", + "1827708", + "1827714", + "1827772", + "1827798", + "1827827", + "1828102", + "1828161", + "1828267", + "1828308", + "1828314", + "1828383", + "1828394", + "1828435", + "1828463", + "1828636", + "1828802", + "1828825", + "1828975", + "1829019", + "1829282", + "1829298", + "1829472", + "1829593", + "1829658", + "1829702", + "1830030", + "1830036", + "1830098", + "1830118", + "1830355", + "1830379", + "1830497", + "1830507", + "1830630", + "1830657", + "1830799", + "1830873", + "1830909", + "1831096", + "1831127", + "1831270", + "1831272", + "1831446", + "1831720", + "1831747", + "1831773", + "1831776", + "1831858", + "1831868", + "1832142", + "1832233", + "1832249", + "1832512", + "1832608", + "1832635", + "1832647", + "1832810", + "1833468", + "1833476", + "1833495", + "1833543", + "1833560", + "1833568", + "1833578", + "1833623", + "1833651", + "1833778", + "1833818", + "1834426", + "1834431", + "1834515", + "1834551", + "1834557", + "1834588", + "1834598", + "1834737", + "1834792", + "1834827", + "1835027", + "1835064", + "1835077", + "1835084", + "1835118", + "1835151", + "1835346", + "1835366", + "1835429", + "1835465", + "1835499", + "1835546", + "1835599", + "1835641", + "1835688", + "1835789", + "1835812", + "1835818", + "1835820", + "1835832", + "1836865", + "1836870", + "1836898", + "1836903", + "1837045", + "1837050", + "1837148", + "1837168", + "1837338", + "1837568", + "1837645", + "1837649", + "1837723", + "1837816", + "1837898", + "1837967", + "1838053", + "1838074", + "1838215", + "1838242", + "1838332", + "1838338", + "1838624", + "1838956", + "1838964", + "1839010", + "1839258", + "1839316", + "1839385", + "1839399", + "1839559", + "1839565", + "1839598", + "1839623", + "1839652", + "1839706", + "1839730", + "1839906", + "1840063", + "1840223", + "1840257", + "1840273", + "1840664", + "1841075", + "1841152", + "1841169", + "1841220", + "1841259", + "1841294", + "1841301", + "1841303", + "1841459", + "1841475", + "1841486", + "1841529", + "1842085", + "1842184", + "1842261", + "1842436", + "1842479", + "1842684", + "1842699", + "1842803", + "1842889", + "1843000", + "1843441", + "1843479", + "1843855", + "1843887", + "1843897", + "1845266", + "1845791", + "1845807", + "1845950", + "1845958", + "1845981", + "1846006", + "1846094", + "1846239", + "1846311", + "1846350", + "1846370", + "1846392", + "1846480", + "1846510", + "1846586", + "1846636", + "1846848", + "1846907", + "1847533", + "1847591", + "1847866", + "1847914", + "1847952", + "1847974", + "1848019", + "1848113", + "1848149", + "1848192", + "1848217", + "1848253", + "1848374", + "1848475", + "1848582", + "1848634", + "1848660", + "1848677", + "1848843", + "1849005", + "1849103", + "1849117", + "1849249", + "1849256", + "1849449", + "1849474", + "1849514", + "1849528", + "1849628", + "1849652", + "1849663", + "1850022", + "1850144", + "1850224", + "1850231", + "1850276", + "1850474", + "1850521", + "1850525", + "1850669", + "1850689", + "1850721", + "1850762", + "1850769", + "1850777", + "1850790", + "1850865", + "1851038", + "1851049", + "1851201", + "1851212", + "1851293", + "1851334", + "1851406", + "1851496", + "1851662", + "1851754", + "1851826", + "1852064", + "1852133", + "1852176", + "1852212", + "1852315", + "1852327", + "1852379", + "1852416", + "1852499", + "1852745", + "1852897", + "1852917", + "1853060", + "1853074", + "1853161", + "1853239", + "1853306", + "1853516", + "1853563", + "1853643", + "1854016", + "1854023", + "1854108", + "1854160", + "1854245", + "1854255", + "1854280", + "1854326", + "1854387", + "1854459", + "1854565", + "1854610", + "1854789", + "1854815", + "1854845", + "1854905", + "1854910", + "1854934", + "1855231", + "1855355", + "1855383", + "1855394", + "1855624", + "1855776", + "1855800", + "1855955", + "1856000", + "1856086", + "1856286", + "1856344", + "1856367", + "1856382", + "1856393", + "1856417", + "1856514", + "1856554", + "1856563", + "1856580", + "1856586", + "1856615", + "1856631", + "1856650", + "1856766", + "1856845", + "1856880", + "1857014", + "1857207", + "1857231", + "1857569", + "1857624", + "1857689", + "1857773", + "1857782", + "1857808", + "1857825", + "1857968", + "1858055", + "1858281", + "1858294", + "1858396", + "1858522", + "1858529", + "1858556", + "1858614", + "1858636", + "1858640", + "1858658", + "1858672", + "1858684", + "1858722", + "1858866", + "1858921", + "1859036", + "1859059", + "1859082", + "1859284", + "1859311", + "1859451", + "1859454", + "1859503", + "1859540", + "1859547", + "1859925", + "1859936", + "1860010", + "1860060", + "1860106", + "1860109", + "1860181", + "1860256", + "1860403", + "1860411", + "1860613", + "1860657", + "1860732", + "1861151", + "1861387", + "1861408", + "1861428", + "1861448", + "1861476", + "1861483", + "1861543", + "1861552", + "1861578", + "1861601", + "1861607", + "1861659", + "1861757", + "1861768", + "1861796", + "1861878", + "1861897", + "1861930", + "1861962", + "1861971", + "1861997", + "1862020", + "1862031", + "1862058", + "1862076", + "1862247", + "1862280", + "1862288", + "1862391", + "1862420", + "1862542", + "1862560", + "1862568", + "1862655", + "1862681", + "1862914", + "1862922", + "1863017", + "1863031", + "1863074", + "1863091", + "1863101", + "1863132", + "1863163", + "1863281", + "1863292", + "1863349", + "1863351", + "1863363", + "1863382", + "1863385", + "1863395", + "1863411", + "1863413", + "1863457", + "1863583", + "1863638", + "1863644", + "1863647", + "1863693", + "1863697", + "1863702", + "1863713", + "1863752", + "1863755", + "1863825", + "1863827", + "1863846", + "1863852", + "1863877", + "1863942", + "1863953", + "1863956", + "1864124", + "1864132", + "1864141", + "1864153", + "1864203", + "1864258", + "1864315", + "1864355", + "1864404", + "1864537", + "1864562", + "1864584", + "1864760", + "1864782", + "1864813", + "1864888", + "1864901", + "1865097", + "1865294", + "1865361", + "1865411", + "1865543", + "1865647", + "1865704", + "1865750", + "1865826", + "1865838", + "1865859", + "1865866", + "1865923", + "1865957", + "1866221", + "1866248", + "1866293", + "1866333", + "1866345", + "1866416", + "1866475", + "1866597", + "1866812", + "1866898", + "1866912", + "1866984", + "1867018", + "1867046", + "1867268", + "1867305", + "1867343", + "1867412", + "1867481", + "1867545", + "1867669", + "1867674", + "1867739", + "1867761", + "1867780", + "1867783", + "1867810", + "1867983", + "1867998", + "1868017", + "1868048", + "1868162", + "1868207", + "1868327", + "1868353", + "1868393", + "1868427", + "1868491", + "1868497", + "1868520", + "1868532", + "1868563", + "1868660", + "1868834", + "1868875", + "1868887", + "1869041", + "1869056", + "1869176", + "1869237", + "1869255", + "1869358", + "1869438", + "1869504", + "1869593", + "1869643", + "1869653", + "1869664", + "1869690", + "1869760", + "1869823", + "1869851", + "1869974", + "1870028", + "1870168", + "1870229", + "1870242", + "1870413", + "1870421", + "1870449", + "1870504", + "1870697", + "1870714", + "1870982", + "1871131", + "1871172", + "1871206", + "1871366", + "1871384", + "1871413", + "1871446", + "1871596", + "1871604", + "1871695", + "1871753", + "1871761", + "1871764", + "1871825", + "1871885", + "1871922", + "1871939", + "1871986", + "1872162", + "1872209", + "1872254", + "1872346", + "1872446", + "1872465", + "1872468", + "1872509", + "1872602", + "1872732", + "1872845", + "1873021", + "1873074", + "1873212", + "1873259", + "1873280", + "1873310", + "1873335", + "1873372", + "1873374", + "1873396", + "1873408", + "1873583", + "1873619", + "1873642", + "1873750", + "1873755", + "1873763", + "1873768", + "1873775", + "1873830", + "1873980", + "1874141", + "1874152", + "1874309", + "1874374", + "1874450", + "1874624", + "1874935", + "1874958", + "1875103", + "1875317", + "1875450", + "1875477", + "1875532", + "1875600", + "1875650", + "1875821", + "1875840", + "1875849", + "1875890", + "1876167", + "1876280", + "1876391", + "1876474", + "1876511", + "1876536", + "1876547", + "1876588", + "1876613", + "1876663", + "1876846", + "1876889", + "1876954", + "1876978", + "1876990", + "1877001", + "1877266", + "1877274", + "1877292", + "1877401", + "1877430", + "1877452", + "1877472", + "1877491", + "1877495", + "1877536", + "1877619", + "1877650", + "1877771", + "1877937", + "1878008", + "1878156", + "1878171", + "1878192", + "1878317", + "1878365", + "1878404", + "1878460", + "1878522", + "1878578", + "1878610", + "1878653", + "1878661", + "1878678", + "1878743", + "1878750", + "1878757", + "1878808", + "1878812", + "1878835", + "1878838", + "1878989", + "1879124", + "1879138", + "1879226", + "1879271", + "1879334", + "1879355", + "1879396", + "1879428", + "1879435", + "1879451", + "1879463", + "1879487", + "1879494", + "1879512", + "1879809", + "1879915", + "1880172", + "1880351", + "1880354", + "1880423", + "1880436", + "1880444", + "1880501", + "1880506", + "1880703", + "1880744", + "1880848", + "1880855", + "1880878", + "1880977", + "1881078", + "1881085", + "1881092", + "1881102", + "1881145", + "1881167", + "1881178", + "1881186", + "1881206", + "1881226", + "1881296", + "1881319", + "1881357", + "1881484", + "1881495", + "1881521", + "1881601", + "1881764", + "1881804", + "1881825", + "1881858", + "1881870", + "1882019", + "1882028", + "1882213", + "1882239", + "1882249", + "1882263", + "1882314", + "1882354", + "1882413", + "1882752", + "1882757", + "1882784", + "1882809", + "1882877", + "1882900", + "1882902", + "1882925", + "1883019", + "1883022", + "1883064", + "1883116", + "1883132", + "1883364", + "1883373", + "1883417", + "1883459", + "1883586", + "1883632", + "1883698", + "1883828", + "1883872", + "1883890", + "1883941", + "1883950", + "1883962", + "1883990", + "1884002", + "1884090", + "1884194", + "1884225", + "1884236", + "1884425", + "1884486", + "1884679", + "1884683", + "1884687", + "1884699", + "1884771", + "1884810", + "1884842", + "1884886", + "1884895", + "1884921", + "1884933", + "1884939", + "1884996", + "1885008", + "1885027", + "1885190", + "1885256", + "1885564", + "1885588", + "1885639", + "1885697", + "1885731", + "1885739", + "1885792", + "1885916", + "1885924", + "1885944", + "1885946", + "1886069", + "1886102", + "1886248", + "1886261", + "1886268", + "1886289", + "1886376", + "1886474", + "1886505", + "1886576", + "1886591", + "1886649", + "1886699", + "1886711", + "1886725", + "1886760", + "1886832", + "1886921", + "1886948", + "1886993", + "1887021", + "1887028", + "1887048", + "1887269", + "1887308", + "1887335", + "1887457", + "1887460", + "1887463", + "1887501", + "1887564", + "1887573", + "1887584", + "1887632", + "1887640", + "1887682", + "1887721", + "1888041", + "1888256", + "1888299", + "1888308", + "1888334", + "1888342", + "1888406", + "1888428", + "1888451", + "1888455", + "1888536", + "1888562", + "1888578", + "1888594", + "1888618", + "1888641", + "1888698", + "1888885", + "1888933", + "1888956", + "1889037", + "1889065", + "1889233", + "1889266", + "1889286", + "1889343", + "1889366", + "1889380", + "1889533", + "1889540", + "1889551", + "1889900", + "1889936", + "1890026", + "1890044", + "1890053", + "1890086", + "1890094", + "1890111", + "1890245", + "1890256", + "1890281", + "1890345", + "1890369", + "1891030", + "1891043", + "1891047", + "1891054", + "1891073", + "1891127", + "1891152", + "1891231", + "1891297", + "1891305", + "1891353", + "1891506", + "1891594", + "1891928", + "1892130", + "1892238", + "1892295", + "1892303", + "1892318", + "1892354", + "1892404", + "1892453", + "1892505", + "1892536", + "1892615", + "1892625", + "1892653", + "1892700", + "1892707", + "1892804", + "1892818", + "1892833", + "1892844", + "1892890", + "1892917", + "1892942", + "1892952", + "1893128", + "1893171", + "1893282", + "1893309", + "1893327", + "1893378", + "1893479", + "1893521", + "1893525", + "1893971", + "1894055", + "1894073", + "1894097", + "1894323", + "1894354", + "1894417", + "1894469", + "1894779", + "1895036", + "1895130", + "1895141", + "1895152", + "1895168", + "1895235", + "1895260", + "1895438", + "1895691", + "1895732", + "1895837", + "1895859", + "1895882", + "1895908", + "1896057", + "1896080", + "1896124", + "1896129", + "1896175", + "1896289", + "1896310", + "1896317", + "1896605", + "1896644", + "1896746", + "1896752", + "1896755", + "1896785", + "1896799", + "1896874", + "1896877", + "1896917", + "1896928", + "1897636", + "1897643", + "1897659", + "1897807", + "1897825", + "1897886", + "1897974", + "1898000", + "1898018", + "1898215", + "1898246", + "1898261", + "1898343", + "1898397", + "1898410", + "1898433", + "1898474", + "1898578", + "1898587", + "1898669", + "1898683", + "1898687", + "1898853", + "1898929", + "1899046", + "1899069", + "1899077", + "1899181", + "1899194", + "1899830", + "1899832", + "1899856", + "1899908", + "1899913", + "1899924", + "1899929", + "1899985", + "1899991", + "1900021", + "1900039", + "1900063", + "1900111", + "1900140", + "1900889", + "1900916", + "1900919", + "1900968", + "1900982", + "1901205", + "1901256", + "1901287", + "1901337", + "1901363", + "1901470", + "1901530", + "1901577", + "1901581", + "1901729", + "1901739", + "1901776", + "1901786", + "1901823", + "1901885", + "1902105", + "1902109", + "1902206", + "1902221", + "1902275", + "1902399", + "1902425", + "1902433", + "1902519", + "1902562", + "1902610", + "1902619", + "1902626", + "1902644", + "1902707", + "1902795", + "1902801", + "1902813", + "1902873", + "1902993", + "1903008", + "1903193", + "1903601", + "1903625", + "1903637", + "1903653", + "1903673", + "1904271", + "1904294", + "1904380", + "1904688", + "1904817", + "1904851", + "1904981", + "1905071", + "1905123", + "1905150", + "1905339", + "1905450", + "1906002", + "1906139", + "1906171", + "1906451", + "1906565", + "1906714", + "1907130", + "1907355", + "1907390", + "1907407", + "1907726", + "1907997", + "1908109", + "1908197", + "1908298", + "1908348", + "1908354", + "1908361", + "1908573", + "1908624", + "1908757", + "1908769", + "1908788", + "1908800", + "1908980", + "1909067", + "1909115", + "1909124", + "1909215", + "1909276", + "1909297", + "1909334", + "1909428", + "1909462", + "1909588", + "1909799", + "1909804", + "1909876", + "1909881", + "1909888", + "1910363", + "1910384", + "1910682", + "1910771", + "1910782", + "1910796", + "1911072", + "1911078", + "1911518", + "1911573", + "1911580", + "1911627", + "1911690", + "1911763", + "1911932", + "1911943", + "1912138", + "1912162", + "1912319", + "1912473", + "1912488", + "1912583", + "1913046", + "1913113", + "1913456", + "1914398", + "1914692", + "1914695", + "1915017", + "1915189", + "1915248", + "1915337", + "1915371", + "1915464", + "1915497", + "1915504", + "1915529", + "1916334", + "1916665", + "1916677", + "1916752", + "1916765", + "1916794", + "1917818", + "1918025", + "1918071", + "1918203", + "1918214", + "1918262", + "1918291", + "1918309", + "1918594", + "1918607", + "1918933", + "1918940", + "1918999", + "1919016", + "1919119", + "1919124", + "1919127", + "1919144", + "1919150", + "1919168", + "1919175", + "1919219", + "1919227", + "1919238", + "1919243", + "1919305", + "1919315", + "1919339", + "1919351", + "1919645", + "1919659", + "1919675", + "1919696", + "1919721", + "1919919", + "1919936", + "1919950", + "1919962", + "1920160", + "1920180", + "1920190", + "1920236", + "1920261", + "1920274", + "1920283", + "1920346", + "1920412", + "1920425", + "1920451", + "1920460", + "1920465", + "1920481", + "1920513", + "1920523", + "1920551", + "1920554", + "1920570", + "1920580", + "1920622", + "1920682", + "1920704", + "1920723", + "1920785", + "1920793", + "1920808", + "1920814", + "1920834", + "1920921", + "1920925", + "1920934", + "1921052", + "1921054", + "1921060", + "1921065", + "1921088", + "1921118", + "1921120", + "1921138", + "1921156", + "1921235", + "1921257", + "1921287", + "1921439", + "1921642", + "1921657", + "1921908", + "1921918", + "1921987", + "1922028", + "1922054", + "1922059", + "1922068", + "1922152", + "1922191", + "1922218", + "1922236", + "1922270", + "1922297", + "1922308", + "1922454", + "1922465", + "1922516", + "1922569", + "1922635", + "1922672", + "1922677", + "1922682", + "1922712", + "1922735", + "1922740", + "1922827", + "1922888", + "1922918", + "1922953", + "1922993", + "1923013", + "1923058", + "1923462", + "1923487", + "1923497", + "1923499", + "1923510", + "1923621", + "1923675", + "1923699", + "1923795", + "1923808", + "1923835", + "1923996", + "1924035", + "1924047", + "1924171", + "1924181", + "1924221", + "1924241", + "1924272", + "1924315", + "1924333", + "1924447", + "1924511", + "1924522", + "1924548", + "1924564", + "1924749", + "1924767", + "1924772", + "1924798", + "1925355", + "1925375", + "1925409", + "1925423", + "1925542", + "1925550", + "1925584", + "1925782", + "1925804", + "1925960", + "1925996", + "1926044", + "1926317", + "1926384", + "1926426", + "1926526", + "1926552", + "1926588", + "1926709", + "1926780", + "1926814", + "1926818", + "1926956", + "1927299", + "1927305", + "1927317", + "1927390", + "1927405", + "1927696", + "1927718", + "1927884", + "1927901", + "1927903", + "1927916", + "1927984", + "1928008", + "1928015", + "1928054", + "1928073", + "1928213", + "1928217", + "1928254", + "1928328", + "1928373", + "1928404", + "1928447", + "1928581", + "1928626", + "1928632", + "1928733", + "1928780", + "1928931", + "1929039", + "1929057", + "1929128", + "1929153", + "1929768", + "1930893", + "1930950", + "1931032", + "1931092", + "1931110", + "1931125", + "1931131", + "1931144", + "1931173", + "1931187", + "1931306", + "1931309", + "1931390", + "1931542", + "1931560", + "1931647", + "1931775", + "1931802", + "1931823", + "1931848", + "1932039", + "1932052", + "1932134", + "1932169", + "1932194", + "1932323", + "1932378", + "1932450", + "1932562", + "1932574", + "1932578", + "1932636", + "1932749", + "1932810", + "1932850", + "1932878", + "1932904", + "1932941", + "1932963", + "1933012", + "1933083", + "1933256", + "1933268", + "1933579", + "1933641", + "1933677", + "1933756", + "1933795", + "1933942", + "1933996", + "1934046", + "1934186", + "1934326", + "1934442", + "1934515", + "1934690", + "1934713", + "1934983", + "1935072", + "1935294", + "1935340", + "1935356", + "1935610", + "1935826", + "1935852", + "1935968", + "1936158", + "1936231", + "1936309", + "1936370", + "1936473", + "1936531", + "1936609", + "1936648", + "1936964", + "1936968", + "1936987", + "1937063", + "1937188", + "1937440", + "1937489", + "1937511", + "1937519", + "1937555", + "1937592", + "1937617", + "1938213", + "1938225", + "1938238", + "1939085", + "1939129", + "1939152", + "1939221", + "1939297", + "1939301", + "1939330", + "1939342", + "1939401", + "1939497", + "1939519", + "1939594", + "1939616", + "1939952", + "1940108", + "1940133", + "1940447", + "1940500", + "1940797", + "1940810", + "1941309", + "1941316", + "1941561", + "1941674", + "1941716", + "1941863", + "1941927", + "1942052", + "1942128", + "1942234", + "1942250", + "1942255", + "1942264", + "1942339", + "1942369", + "1942373", + "1942404", + "1942503", + "1942523", + "1942552", + "1942608", + "1942628", + "1942655", + "1942669", + "1942671", + "1942686", + "1942692", + "1942755", + "1942827", + "1942846", + "1942857", + "1942944", + "1942996", + "1943046", + "1943068", + "1943127", + "1943165", + "1943205", + "1943211", + "1943307", + "1943357", + "1943433", + "1943469", + "1943497", + "1943555", + "1943613", + "1943627", + "1943654", + "1943753", + "1943820", + "1943934", + "1943941", + "1944003", + "1944007", + "1944103", + "1944230", + "1944270", + "1944355", + "1944409", + "1944441", + "1944474", + "1944558", + "1944586", + "1944617", + "1944767", + "1944774", + "1944792", + "1944831", + "1944946", + "1944973", + "1944985", + "1945035", + "1945078", + "1945083", + "1945113", + "1945266", + "1945298", + "1945307", + "1945390", + "1945451", + "1945528", + "1945660", + "1945809", + "1945854", + "1945902", + "1945949", + "1945956", + "1946009", + "1946033", + "1946052", + "1946065", + "1946071", + "1946077", + "1946084", + "1946099", + "1946158", + "1946263", + "1946282", + "1946331", + "1946375", + "1946413", + "1946463", + "1946490", + "1946517", + "1946541", + "1946554", + "1946599", + "1946630", + "1946647", + "1946721", + "1946753", + "1946762", + "1946766", + "1946802", + "1946900", + "1946907", + "1946979", + "1947018", + "1947024", + "1947108", + "1947191", + "1947272", + "1947353", + "1947384", + "1947405", + "1947504", + "1947532", + "1947624", + "1947649", + "1947701", + "1947815", + "1947844", + "1947872", + "1947971", + "1948041", + "1948052", + "1948058", + "1948143", + "1948367", + "1948418", + "1948434", + "1948459", + "1948519", + "1948624", + "1948816", + "1948855", + "1948868", + "1948909", + "1948942", + "1948964", + "1949003", + "1949041", + "1949143", + "1949308", + "1949330", + "1949334", + "1949354", + "1949424", + "1949446", + "1949486", + "1949496", + "1949517", + "1949579", + "1949610", + "1949632", + "1949647", + "1949686", + "1949704", + "1950012", + "1950015", + "1950034", + "1950046", + "1950114", + "1950154", + "1950166", + "1950193", + "1950257", + "1950299", + "1950334", + "1950360", + "1950380", + "1950406", + "1950496", + "1950566", + "1950585", + "1950649", + "1950763", + "1951093", + "1951144", + "1951213", + "1951289", + "1951332", + "1951348", + "1951358", + "1951407", + "1951430", + "1951549", + "1951569", + "1951642", + "1951645", + "1951655", + "1951664", + "1951744", + "1951782", + "1951788", + "1951819", + "1951910", + "1952001", + "1952029", + "1952092", + "1952118", + "1952144", + "1952174", + "1952222", + "1952259", + "1952279", + "1952300", + "1952419", + "1952446", + "1952453", + "1952526", + "1952547", + "1952607", + "1952673", + "1952727", + "1952736", + "1952801", + "1952827", + "1952875", + "1952907", + "1953000", + "1953102", + "1953190", + "1953347", + "1953396", + "1953411", + "1953522", + "1953540", + "1953948", + "1953971", + "1953975", + "1953996", + "1954033", + "1954038", + "1954074", + "1954083", + "1954119", + "1954159", + "1954235", + "1954313", + "1954391", + "1954478", + "1954494", + "1954512", + "1954521", + "1954555", + "1954587", + "1954875", + "1954921", + "1954924", + "1955016", + "1955038", + "1955270", + "1955304", + "1955356", + "1955408", + "1955475", + "1955495", + "1955508", + "1955551", + "1955678", + "1955716", + "1955730", + "1955752", + "1955761", + "1955843", + "1955898", + "1955900", + "1955981", + "1955998", + "1956214", + "1956376", + "1956415", + "1956434", + "1956504", + "1956522", + "1956545", + "1956709", + "1956715", + "1956824", + "1956900", + "1956949", + "1957057", + "1957136", + "1957172", + "1957193", + "1957281", + "1957327", + "1957367", + "1957436", + "1957459", + "1957508", + "1957545", + "1957620", + "1957829", + "1957999", + "1958023", + "1958047", + "1958056", + "1958067", + "1958104", + "1958143", + "1958238", + "1958411", + "1958489", + "1958507", + "1959339", + "1959374", + "1959381", + "1959409", + "1959498", + "1959541", + "1959635", + "1959643", + "1959662", + "1959668", + "1959781", + "1959797", + "1959834", + "1959852", + "1959888", + "1960003", + "1960016", + "1960087", + "1960098", + "1960125", + "1960162", + "1960170", + "1960225", + "1960422", + "1960500", + "1960519", + "1960570", + "1960592", + "1960628", + "1960671", + "1960844", + "1960939", + "1960966", + "1961048", + "1961066", + "1961117", + "1961145", + "1961158", + "1961179", + "1961188", + "1961229", + "1961264", + "1961334", + "1961371", + "1961643", + "1961716", + "1961719", + "1962047", + "1962165", + "1962369", + "1962577", + "1962632", + "1962655", + "1962676", + "1962688", + "1962704", + "1962828", + "1962830", + "1962840", + "1962857", + "1962893", + "1962932", + "1962956", + "1962995", + "1963049", + "1963058", + "1963165", + "1963199", + "1963296", + "1963299", + "1963418", + "1963424", + "1963445", + "1963584", + "1963618", + "1963627", + "1963630", + "1963706", + "1963753", + "1963777", + "1963835", + "1963873", + "1963933", + "1964020", + "1964040", + "1964064", + "1964095", + "1964131", + "1964175", + "1964246", + "1964299", + "1964392", + "1964549", + "1964562", + "1964577", + "1964699", + "1964714", + "1964733", + "1964835", + "1964936", + "1965018", + "1965123", + "1965633", + "1965641", + "1965663", + "1965758", + "1965881", + "1965888", + "1965967", + "1966069", + "1966159", + "1966180", + "1966193", + "1966215", + "1966235", + "1966280", + "1966346", + "1966360", + "1966883", + "1966927", + "1966929", + "1966975", + "1966982", + "1967123", + "1967196", + "1967207", + "1967220", + "1967234", + "1967242", + "1967263", + "1967337", + "1967427", + "1967444", + "1967447", + "1967583", + "1967604", + "1967660", + "1967699", + "1967715", + "1967722", + "1968101", + "1968135", + "1968166", + "1968199", + "1968257", + "1968271", + "1968306", + "1968362", + "1968582", + "1968643", + "1968665", + "1968683", + "1968722", + "1968827", + "1968854", + "1968925", + "1968975", + "1969122", + "1969566", + "1969571", + "1969918", + "1970019", + "1970091", + "1970117", + "1970120", + "1970142", + "1970157", + "1970163", + "1970179", + "1970226", + "1970264", + "1970279", + "1970314", + "1970403", + "1970435", + "1970574", + "1971819", + "1971994", + "1972072", + "1972076", + "1972097", + "1972114", + "1972404", + "1972425", + "1972461", + "1972472", + "1972604", + "1972607", + "1972689", + "1972702", + "1972707", + "1972791", + "1972822", + "1972901", + "1972997", + "1973136", + "1973159", + "1973295", + "1973321", + "1973331", + "1973392", + "1973405", + "1973483", + "1973488", + "1973578", + "1973718", + "1973722", + "1973909", + "1975155", + "1975197", + "1975208", + "1975278", + "1975285", + "1975292", + "1975336", + "1975361", + "1975464", + "1975542", + "1975570", + "1975577", + "1975703", + "1975714", + "1975729", + "1975783", + "1975804", + "1975885", + "1976058", + "1976118", + "1976141", + "1976155", + "1976211", + "1976245", + "1976250", + "1976296", + "1976321", + "1976338", + "1976460", + "1976496", + "1976515", + "1976638", + "1976884", + "1976925", + "1976930", + "1976949", + "1977104", + "1977179", + "1977323", + "1977351", + "1977402", + "1977419", + "1977757", + "1977775", + "1977811", + "1977864", + "1977960", + "1977963", + "1978014", + "1978019", + "1978075", + "1978112", + "1978273", + "1978364", + "1978451", + "1978455", + "1978481", + "1978495", + "1978506", + "1978607", + "1978643", + "1978697", + "1978732", + "1978736", + "1978749", + "1978784", + "1978814", + "1978835", + "1978893", + "1978948", + "1978974", + "1978994", + "1979019", + "1979040", + "1979106", + "1979213", + "1979243", + "1979517", + "1979554", + "1979719", + "1979727", + "1980021", + "1980033", + "1980239", + "1980263", + "1980288", + "1980342", + "1980490", + "1980504", + "1980511", + "1980556", + "1980650", + "1980718", + "1981051", + "1981142", + "1981690", + "1981744", + "1981855", + "1981933", + "1981941", + "1981987", + "1981996", + "1982017", + "1982147", + "1982199", + "1982367", + "1984142", + "1984231", + "1984651", + "1984667", + "1984731", + "1984741", + "1984909", + "1984922", + "1985058", + "1985146", + "1985258", + "1985404", + "1985486", + "1985489", + "1985492", + "1985507", + "1985570", + "1985578", + "1985716", + "1985728", + "1985787", + "1985928", + "1985934", + "1985969", + "1986081", + "1986645", + "1986772", + "1986805", + "1986845", + "1986868", + "1986905", + "1986930", + "1986939", + "1986953", + "1986997", + "1987067", + "1987141", + "1987202", + "1987269", + "1987300", + "1987326", + "1987346", + "1987509", + "1987555", + "1987626", + "1987632", + "1987645", + "1987660", + "1987711", + "1987746", + "1987792", + "1987820", + "1987849", + "1987861", + "1987995", + "1988224", + "1988251", + "1988282", + "1988304", + "1988350", + "1988388", + "1988399", + "1988485", + "1988488", + "1988533", + "1988760", + "1988779", + "1988815", + "1988876", + "1988887", + "1988893", + "1989045", + "1989161", + "1989580", + "1989902", + "1989927", + "1989996", + "1990136", + "1990163", + "1990193", + "1990247", + "1990257", + "1990356", + "1990367", + "1990531", + "1990591", + "1990677", + "1990989", + "1991004", + "1991120", + "1991135", + "1991234", + "1991279", + "1991309", + "1991325", + "1991357", + "1991401", + "1991426", + "1991531", + "1991777", + "1991817", + "1991843", + "1991934", + "1991946", + "1992166", + "1992168", + "1992205", + "1992267", + "1992537", + "1992572", + "1992586", + "1992729", + "1992877", + "1992906", + "1992944", + "1992973", + "1992975", + "1993011", + "1993034", + "1993044", + "1993403", + "1993451", + "1993564", + "1993634", + "1994549", + "2048233", + "2080450", + "2278098", + "3231212", + "3255365", + "3255832", + "3255940", + "3255943", + "3255956", + "3256116", + "3256119", + "3256169", + "3256188", + "3256294", + "3256322", + "3256356", + "3256453", + "3256512", + "3256568", + "3256584", + "3256657", + "3256934", + "3256950", + "3257150", + "3257152", + "3257220", + "3257225", + "3257328", + "3257351", + "3257405", + "3257500", + "3257514", + "3257524", + "3257628", + "3257649", + "3257662", + "3257694", + "3257794", + "3257798", + "3257836", + "3257894", + "3258063", + "3258105", + "3258127", + "3258133", + "3258147", + "3261008", + "3262002", + "4300267", + "4300486", + "4301067", + "4301098", + "4301121", + "4301281", + "4301305", + "4301308", + "4301340", + "4302220", + "4302229", + "4302289", + "4404325", + "4404424", + "4404729", + "4404732", + "4404934", + "4405001", + "4405135", + "4405245", + "4405258", + "4405430", + "4405493", + "4405533", + "4405983", + "4406051", + "4406069", + "4406074", + "4406145", + "4406268", + "4406291", + "4406298", + "4406360", + "4406481", + "4406516", + "4406551", + "4406622", + "4406889", + "4406931", + "4407165", + "4407218", + "4407310", + "4407354", + "4407363", + "4407476", + "4407554", + "4407697", + "4407786", + "4408085", + "4408190", + "4408204", + "4408275", + "4523515", + "4524069", + "4524400", + "4524792", + "4524913", + "4525072", + "4525111", + "4525607", + "4525713", + "4527338", + "4529834", + "4531185", + "4532562", + "4533122", + "4533124", + "4533660", + "4534405", + "4534456", + "4534532", + "4534661", + "4571921", + "4572640", + "4573369", + "4573720", + "4574082", + "4575600", + "4575996", + "4576037", + "4576177", + "4684087", + "4684088", + "4684145", + "4684219", + "4684253", + "4684258", + "4684781", + "4684892", + "4684924", + "4684951", + "4685556", + "4685628", + "4685777", + "4685945", + "4685979", + "4686308", + "4686350", + "4686384", + "4686517", + "4686655", + "4686699", + "4686843", + "4686955", + "4687068", + "4687117", + "4687205", + "4687250", + "4687253", + "4687264", + "4687385", + "4687388", + "4687398", + "4687438", + "4687494", + "4687545", + "4687701", + "4687726", + "4687791", + "4687851", + "4687877", + "4687937", + "4687943", + "4687984", + "4688073", + "4688136", + "4688148", + "4688298", + "4688408", + "4688500", + "4688533", + "4688624", + "4688641", + "4688690", + "4688714", + "4688717", + "4688727", + "4688768", + "4688975", + "4689025", + "4689117", + "4689138", + "4689300", + "4689316", + "4689527", + "4689528", + "4689548", + "4689585", + "4689628", + "4689644", + "4689708", + "4689790", + "4695593", + "4695668", + "4695734", + "4695875", + "4695897", + "4695929", + "4696040", + "4696100", + "4696103", + "4696201", + "4696228", + "4702183", + "4702229", + "4702368", + "4702379", + "4702515", + "4702588", + "4702630", + "4702642", + "4702651", + "4702781", + "4702805", + "4702831", + "4702862", + "4702877", + "4702889", + "4702891", + "4702939", + "4702953", + "4703000", + "4703014", + "4703048", + "4703184", + "4703248", + "4703308", + "4703444", + "4703460", + "4703509", + "4703670", + "4703719", + "4704034", + "4704072", + "4704098", + "4704315", + "4704380", + "4704499", + "4704582", + "4704716", + "4704719", + "4704752", + "4704946", + "4704959", + "4705145", + "4705151", + "4705537", + "4705623", + "4705630", + "4705637", + "4705641", + "4705666", + "4705796", + "4705876", + "4705882", + "4705945", + "4705981", + "4706535", + "4706578", + "4706585", + "4706694", + "4706723", + "4706738", + "4706892", + "4706983", + "4707050", + "4707100", + "4707419", + "4707431", + "4707529", + "4707641", + "4707698", + "4707710", + "4707748", + "4707821", + "4707834", + "4708040", + "4708154", + "4708197", + "4708288", + "4708365", + "4708407", + "4708493", + "4708566", + "4708587", + "4708592", + "4708606", + "4708611", + "4708626", + "4708638", + "4708646", + "4708648", + "4708684", + "4708698", + "4708709", + "4708713", + "4708745", + "4708885", + "4708919", + "4709100", + "4709103", + "4709187", + "4709268", + "4709333", + "4709385", + "4709474", + "5102272", + "5104758", + "5105328", + "5110374", + "5110641", + "5114254", + "5115213", + "5115807", + "5116471", + "5118829", + "5119806", + "5119880", + "5123346", + "5123443", + "5123811", + "5124670", + "5130576", + "5131088", + "5131972", + "5133087", + "5135400", + "5141261", + "5142228", + "5142691", + "5144176", + "5146397", + "5430630", + "6007566", + "6116898", + "6132796", + "6133263", + "6133753", + "6757561", + "7236046", + "7236053", + "7236059", + "7236069", + "7236091", + "7236092", + "7236098", + "7354470", + "7362601", + "7384515", + "7396883", + "7494486", + "7510496", + "7514692", + "7535296", + "7543161", + "7566147", + "7568341", + "7588628", + "7641205", + "7659598", + "7704040", + "7704258", + "7714017", + "7721234", + "7729420", + "7733971", + "7739898", + "7742506", + "7744105", + "7769987", + "7772509", + "7777102", + "7786896", + "7841677", + "7842819", + "7852351", + "7876391", + "7881632", + "7963991", + "7969922", + "7973780", + "8057237", + "8095945", + "8107362", + "8109351", + "8178582", + "8194136", + "8203799", + "8213918", + "8249110", + "8296807", + "8314432", + "8317469", + "8319926", + "8331787", + "8338704", + "8363558", + "8379138", + "8389051", + "8396912", + "8406574", + "8407958", + "8494978", + "8636720", + "8659047", + "8679775", + "8697176", + "8710303", + "8728355", + "8744407", + "8757056", + "8766106", + "8782295", + "8786726", + "8787356", + "8793999", + "8806645", + "8810582", + "8814442", + "8828194", + "8832257", + "8834745", + "8843351", + "8844327", + "8875114", + "8875134", + "8875890", + "8895291", + "8896182", + "8903953", + "8915575", + "8921795", + "8928010", + "8930863", + "8931287", + "8934672", + "8935025", + "8936210", + "8946062", + "8952756", + "8952983", + "8955545", + "8968124", + "8970409", + "8974541", + "8978064", + "8978428", + "8981907", + "8982056", + "8983556", + "8983629", + "8997710", + "9000709", + "9002818", + "9005880", + "9020610", + "9021546", + "9026388", + "9026655", + "9029051", + "9036849", + "9040198", + "9042695", + "9044302", + "9044770", + "9046185", + "9046977", + "9053842", + "9055772", + "9059321", + "9059730", + "9060128", + "9061491", + "9065472", + "9069808", + "9073940", + "9077304", + "9077410", + "9078027", + "9078901", + "9080469", + "9090334", + "9092234", + "9095083", + "9095230", + "9099004", + "9103399", + "9106541", + "9108102", + "9111044", + "9111269", + "9112567", + "9118632", + "9119424", + "9121178", + "9123839", + "9128871", + "9130093", + "9131390", + "9136607", + "9137617", + "9141856", + "9146182", + "9151414", + "9154466", + "9155713", + "9167802", + "9168716", + "9175687", + "9176590", + "9177092", + "9179511", + "9180373", + "9181278", + "9182266", + "9183339", + "9183600", + "9185801", + "9186977", + "9188678", + "9189318", + "9189502", + "9197007", + "9197112", + "9199756", + "9203611", + "9203720", + "9205220", + "9206138", + "9209436", + "9210500", + "9211050", + "9211520", + "9211630", + "9212903", + "9218657", + "9220793", + "9230208", + "9230236", + "9260167", + "9262994", + "9329912", + "9334318", + "9340110", + "9345724", + "9357810", + "9457004", + "9496267", + "9514086", + "9529506", + "9550689", + "9558288", + "9585354", + "9601813", + "9605252", + "9607541", + "9675443", + "9759554", + "9762611", + "9878063", + "9905626" + ], + "optimized/family": [ + "10820875", + "1933999", + "3256826", + "3527", + "3528", + "3529", + "3530", + "3531", + "3551", + "3552", + "3553", + "3554", + "3555", + "3556", + "3558", + "3563", + "4300662", + "4300664", + "4300668", + "4525436", + "4525465", + "4527533", + "4528997", + "4532185", + "4534947", + "4538", + "4542", + "4547", + "4554", + "4705755", + "4864", + "4865", + "4866", + "4867", + "4868", + "4870", + "4871", + "5320", + "5336", + "5338", + "5339", + "5340", + "5343", + "5345", + "5473", + "5474", + "5481", + "5487", + "5734720", + "6165", + "6166", + "6929", + "6946", + "6947", + "6948", + "6949", + "6950", + "6951", + "6953", + "6954", + "6956", + "7014", + "7015", + "7016", + "7017", + "7294", + "7297", + "8832", + "8833", + "8834", + "8836", + "8838", + "8839", + "8840", + "8841", + "8855", + "8856", + "8860", + "8861", + "8863", + "8864", + "8865", + "8866", + "8868", + "8870", + "8871", + "8872", + "8873", + "8874", + "8875", + "9122734", + "9407", + "9408", + "9409", + "9410", + "9412", + "9414744", + "9417", + "9541689", + "9689", + "9717" + ] + } +} diff --git a/docs/assets/mambo-indomain-tail.csv b/docs/assets/mambo-indomain-tail.csv new file mode 100644 index 0000000..00f313f --- /dev/null +++ b/docs/assets/mambo-indomain-tail.csv @@ -0,0 +1,211 @@ +model,scope,rank,cutoff,domain,class_count,truth_images_in_retained_classes,accepted_predictions_in_retained_classes,report_images,overall_coverage,accuracy,precision,recall,f1 +v2,zero,species,-1,per_model,12632,568939,568939,568939,1.0,0.8775332728247491,0.8448274823412316,0.8775332728247491,0.850372188202817 +torch,zero,species,-1,per_model,12632,568939,568939,568939,1.0,0.9295522392148737,0.9084034020798256,0.9295522392148737,0.9144754993404935 +onnx,zero,species,-1,per_model,12632,568939,568939,568939,1.0,0.929545760642923,0.9083939953917602,0.929545760642923,0.9144694069143972 +torch-tta,zero,species,-1,per_model,12632,568939,568939,568939,1.0,0.9031914801618097,0.8957682319690011,0.9031914801618097,0.8931233034667367 +onnx-tta,zero,species,-1,per_model,12632,568939,568939,568939,1.0,0.903254258165182,0.8958363209627044,0.903254258165182,0.8931813750062196 +v2,zero,species,5,per_model,10916,560528,558639,568939,1.0,0.8898344938001994,0.859133756872216,0.8898344938001994,0.8671738560913168 +v2,zero,species,5,common,10732,559258,556775,568939,1.0,0.892042637746108,0.8624807091335043,0.892042637746108,0.870130409847651 +torch,zero,species,5,per_model,11024,561352,560419,568939,1.0,0.9348916502566212,0.9176309501354614,0.9348916502566212,0.923323778252479 +torch,zero,species,5,common,10732,559258,558238,568939,1.0,0.9371951539678676,0.920053780228017,0.9371951539678676,0.9257802069792285 +onnx,zero,species,5,per_model,11023,561346,560412,568939,1.0,0.9349063992486292,0.9176431065400046,0.9349063992486292,0.9233383284058694 +onnx,zero,species,5,common,10732,559258,558236,568939,1.0,0.9372070517025534,0.9200666309904021,0.9372070517025534,0.9257949069356713 +torch-tta,zero,species,5,per_model,10906,560439,560252,568939,1.0,0.9145122082372219,0.9040744836279291,0.9145122082372219,0.9054421933610873 +torch-tta,zero,species,5,common,10732,559258,558982,568939,1.0,0.9160969130174343,0.9061800058338343,0.9160969130174343,0.9073461234817897 +onnx-tta,zero,species,5,per_model,10907,560445,560258,568939,1.0,0.9145713598093338,0.9041187052013864,0.9145713598093338,0.905496546764529 +onnx-tta,zero,species,5,common,10732,559258,558984,568939,1.0,0.9161801232055252,0.9062393050497608,0.9161801232055252,0.9074189531592058 +v2,zero,species,10,per_model,8357,539923,534214,568939,1.0,0.8951105023339889,0.8803886049108982,0.8951105023339889,0.8829762240880302 +v2,zero,species,10,common,8220,538215,531734,568939,1.0,0.8971896508002563,0.8841533826265109,0.8971896508002563,0.8861137420840434 +torch,zero,species,10,per_model,8418,540767,538164,568939,1.0,0.9380158443604093,0.9296376645105903,0.9380158443604093,0.9320805568483266 +torch,zero,species,10,common,8220,538215,535520,568939,1.0,0.9402949033689514,0.9320804614980398,0.9402949033689514,0.9344958099860401 +onnx,zero,species,10,per_model,8418,540767,538167,568939,1.0,0.9380428919356814,0.9296503994930084,0.9380428919356814,0.9321018436377108 +onnx,zero,species,10,common,8220,538215,535522,568939,1.0,0.9403226024551605,0.9320974182871349,0.9403226024551605,0.9345190051373535 +torch-tta,zero,species,10,per_model,8319,539488,538099,568939,1.0,0.9203211708443862,0.9166550444469626,0.9203211708443862,0.9159746062189662 +torch-tta,zero,species,10,common,8220,538215,536830,568939,1.0,0.9211332254340128,0.9175233686268738,0.9211332254340128,0.9168731065085346 +onnx-tta,zero,species,10,per_model,8319,539483,538098,568939,1.0,0.92037212552277,0.9167108005058885,0.92037212552277,0.9160385012807551 +onnx-tta,zero,species,10,common,8220,538215,536830,568939,1.0,0.9211467767684987,0.9175744487497752,0.9211467767684987,0.9169124697458879 +v2,zero,species,20,per_model,5848,501474,491150,568939,1.0,0.9017298315234328,0.9059592212945008,0.9017298315234328,0.9009425455604116 +v2,zero,species,20,common,5731,498591,487865,568939,1.0,0.9038010699656939,0.90938248738554,0.9038010699656939,0.9038380155005598 +torch,zero,species,20,per_model,5902,502780,498324,568939,1.0,0.9426777967218563,0.9440419050324644,0.9426777967218563,0.9424333577615158 +torch,zero,species,20,common,5731,498591,494107,568939,1.0,0.9443702914364024,0.9458085393432879,0.9443702914364024,0.944187060216263 +onnx,zero,species,20,per_model,5901,502758,498305,568939,1.0,0.9427320388202419,0.9440874403033691,0.9427320388202419,0.9424850295533255 +onnx,zero,species,20,common,5731,498591,494107,568939,1.0,0.9444129968792908,0.945849455959867,0.9444129968792908,0.9442310591069565 +torch-tta,zero,species,20,per_model,5837,500984,498762,568939,1.0,0.927167942433883,0.92839515030944,0.927167942433883,0.926323530505297 +torch-tta,zero,species,20,common,5731,498591,496322,568939,1.0,0.9279814852456145,0.9294383563309784,0.9279814852456145,0.9272619166439888 +onnx-tta,zero,species,20,per_model,5836,500962,498747,568939,1.0,0.9272175462279626,0.9284436495884548,0.9272175462279626,0.9263759507200151 +onnx-tta,zero,species,20,common,5731,498591,496329,568939,1.0,0.9279913018908342,0.9294415780050014,0.9279913018908342,0.9272719293868689 +v2,zero,genus,-1,per_model,4476,568939,568939,568939,1.0,0.9449328592412035,0.9072671198812579,0.9449328592412035,0.9213682143792531 +torch,zero,genus,-1,per_model,4476,568939,568939,568939,1.0,0.9700441575339722,0.9534379966946678,0.9700441575339722,0.9600051179818128 +onnx,zero,genus,-1,per_model,4476,568939,568939,568939,1.0,0.9700350462704753,0.9534572983167396,0.9700350462704753,0.9600143434479116 +torch-tta,zero,genus,-1,per_model,4476,568939,568939,568939,1.0,0.9525452203980439,0.9370642917998594,0.9525452203980439,0.9422165624061323 +onnx-tta,zero,genus,-1,per_model,4476,568939,568939,568939,1.0,0.9524334553173022,0.9371069603411143,0.9524334553173022,0.9421777591016375 +v2,zero,genus,5,per_model,4096,567151,566855,568939,1.0,0.9472634049157832,0.9131916817978536,0.9472634049157832,0.9265881804644791 +v2,zero,genus,5,common,4077,567027,566720,568939,1.0,0.9479651709033954,0.913798169374068,0.9479651709033954,0.9272747658088364 +torch,zero,genus,5,per_model,4107,567216,567078,568939,1.0,0.971127350882503,0.9577638403342953,0.971127350882503,0.9633165216188838 +torch,zero,genus,5,common,4077,567027,566882,568939,1.0,0.9714171324802696,0.9581319473622291,0.9714171324802696,0.9636531390879689 +onnx,zero,genus,5,per_model,4107,567216,567079,568939,1.0,0.9711174210029285,0.9577442950198877,0.9711174210029285,0.9633044408045054 +onnx,zero,genus,5,common,4077,567027,566883,568939,1.0,0.9714071295331486,0.9581122582265235,0.9714071295331486,0.9636409693787092 +torch-tta,zero,genus,5,per_model,4098,567160,567039,568939,1.0,0.955211201010184,0.9413856953684685,0.955211201010184,0.9464056106523142 +torch-tta,zero,genus,5,common,4077,567027,566891,568939,1.0,0.9554622976340493,0.9419053142860855,0.9554622976340493,0.946826548337692 +onnx-tta,zero,genus,5,per_model,4097,567154,567032,568939,1.0,0.9551188449853553,0.9414520982548996,0.9551188449853553,0.9463993752658038 +onnx-tta,zero,genus,5,common,4077,567027,566890,568939,1.0,0.9553804742750274,0.9419864197387074,0.9553804742750274,0.9468334279086545 +v2,zero,genus,10,per_model,3458,562081,561074,568939,1.0,0.9491963374320637,0.9236764435595063,0.9491963374320637,0.9340308144742723 +v2,zero,genus,10,common,3431,561762,560668,568939,1.0,0.9501714517217695,0.9249819852768866,0.9501714517217695,0.9352580486950688 +torch,zero,genus,10,per_model,3465,562162,561762,568939,1.0,0.9723113450903962,0.962961804837905,0.9723113450903962,0.966981073692487 +torch,zero,genus,10,common,3431,561762,561337,568939,1.0,0.9726570872678164,0.963524847606718,0.9726570872678164,0.9674634884761172 +onnx,zero,genus,10,per_model,3465,562162,561763,568939,1.0,0.9722995753889785,0.9629677896848711,0.9722995753889785,0.9669757734240944 +onnx,zero,genus,10,common,3431,561762,561338,568939,1.0,0.9726452009328085,0.9635308917614068,0.9726452009328085,0.9674581356839339 +torch-tta,zero,genus,10,per_model,3452,562005,561552,568939,1.0,0.9570998065013813,0.9482638561509876,0.9570998065013813,0.9515461269141664 +torch-tta,zero,genus,10,common,3431,561762,561309,568939,1.0,0.9573515304014386,0.9484564997611858,0.9573515304014386,0.951766676155064 +onnx-tta,zero,genus,10,per_model,3452,562005,561556,568939,1.0,0.9570393795504154,0.9482498429778413,0.9570393795504154,0.9515066189636512 +onnx-tta,zero,genus,10,common,3431,561762,561313,568939,1.0,0.9572907335973774,0.9484424008181076,0.9572907335973774,0.9517269263896374 +v2,zero,genus,20,per_model,2775,551765,549650,568939,1.0,0.9514523669537318,0.9362851124691781,0.9514523669537318,0.9424419495154486 +v2,zero,genus,20,common,2754,551296,549021,568939,1.0,0.9524285882296903,0.9379631196001276,0.9524285882296903,0.9438613537384478 +torch,zero,genus,20,per_model,2779,551854,551141,568939,1.0,0.9735092290300909,0.9676010415739535,0.9735092290300909,0.9701842471206528 +torch,zero,genus,20,common,2754,551296,550567,568939,1.0,0.9741215463330197,0.96827917122569,0.9741215463330197,0.9708441875318052 +onnx,zero,genus,20,per_model,2779,551854,551145,568939,1.0,0.9735180277959813,0.9675625563261884,0.9735180277959813,0.9701656109250639 +onnx,zero,genus,20,common,2754,551296,550570,568939,1.0,0.9741304249715125,0.9682452187473357,0.9741304249715125,0.9708282639734884 +torch-tta,zero,genus,20,per_model,2766,551560,550843,568939,1.0,0.9597015608526598,0.9537068881488286,0.9597015608526598,0.9559567736922241 +torch-tta,zero,genus,20,common,2754,551296,550569,568939,1.0,0.9599314581499482,0.9540423387101321,0.9599314581499482,0.9562438389126422 +onnx-tta,zero,genus,20,per_model,2767,551582,550868,568939,1.0,0.9596078837704425,0.9536848297971696,0.9596078837704425,0.955899607636505 +onnx-tta,zero,genus,20,common,2754,551296,550575,568939,1.0,0.9598722209352499,0.954013741345455,0.9598722209352499,0.9561988978480757 +v2,zero,family,-1,per_model,104,568939,568939,568939,1.0,0.9705788744761545,0.9509880328905062,0.9705788744761545,0.9597726462561909 +torch,zero,family,-1,per_model,104,568939,568939,568939,1.0,0.9847079901805926,0.9765407345826963,0.9847079901805926,0.980351974922878 +onnx,zero,family,-1,per_model,104,568939,568939,568939,1.0,0.9845608356725373,0.9760061052351259,0.9845608356725373,0.9799783228875365 +torch-tta,zero,family,-1,per_model,104,568939,568939,568939,1.0,0.9681161624170399,0.9623314442357818,0.9681161624170399,0.9645304134232945 +onnx-tta,zero,family,-1,per_model,104,568939,568939,568939,1.0,0.9681041671465577,0.9623128857780121,0.9681041671465577,0.9645148542838584 +v2,zero,family,5,per_model,101,568926,568924,568939,1.0,0.9697049796586146,0.9523610862012567,0.9697049796586146,0.9602279393793121 +v2,zero,family,5,common,101,568926,568924,568939,1.0,0.9697049796586146,0.9523610862012567,0.9697049796586146,0.9602279393793121 +torch,zero,family,5,per_model,101,568926,568926,568939,1.0,0.9842537720671449,0.975843924718816,0.9842537720671449,0.9797683702176169 +torch,zero,family,5,common,101,568926,568926,568939,1.0,0.9842537720671449,0.975843924718816,0.9842537720671449,0.9797683702176169 +onnx,zero,family,5,per_model,101,568926,568926,568939,1.0,0.9841022466331076,0.9752934152916147,0.9841022466331076,0.9793836196069683 +onnx,zero,family,5,common,101,568926,568926,568939,1.0,0.9841022466331076,0.9752934152916147,0.9841022466331076,0.9793836196069683 +torch-tta,zero,family,5,per_model,101,568926,568925,568939,1.0,0.9671691177363579,0.9628627412592868,0.9671691177363579,0.9643769513557596 +torch-tta,zero,family,5,common,101,568926,568925,568939,1.0,0.9671691177363579,0.9628627412592868,0.9671691177363579,0.9643769513557596 +onnx-tta,zero,family,5,per_model,101,568926,568925,568939,1.0,0.9671567661707129,0.9628436315601973,0.9671567661707129,0.9643609300636667 +onnx-tta,zero,family,5,common,101,568926,568925,568939,1.0,0.9671567661707129,0.9628436315601973,0.9671567661707129,0.9643609300636667 +v2,zero,family,10,per_model,100,568917,568916,568939,1.0,0.9705131405663119,0.9518846970632694,0.9705131405663119,0.9604184540672229 +v2,zero,family,10,common,99,568905,568905,568939,1.0,0.9718987951848268,0.9523169575478387,0.9718987951848268,0.9613361635285959 +torch,zero,family,10,per_model,99,568905,568908,568939,1.0,0.9867415025915093,0.9753559231979841,0.9867415025915093,0.9808721011343452 +torch,zero,family,10,common,99,568905,568908,568939,1.0,0.9867415025915093,0.9753559231979841,0.9867415025915093,0.9808721011343452 +onnx,zero,family,10,per_model,99,568905,568908,568939,1.0,0.9865869160375925,0.974794292368213,0.9865869160375925,0.9804795777840875 +onnx,zero,family,10,common,99,568905,568908,568939,1.0,0.9865869160375925,0.974794292368213,0.9865869160375925,0.9804795777840875 +torch-tta,zero,family,10,per_model,99,568905,568908,568939,1.0,0.970153454570538,0.9621124936079593,0.970153454570538,0.9656944723151579 +torch-tta,zero,family,10,common,99,568905,568908,568939,1.0,0.970153454570538,0.9621124936079593,0.970153454570538,0.9656944723151579 +onnx-tta,zero,family,10,per_model,99,568905,568908,568939,1.0,0.970140853478314,0.9620929978543427,0.970140853478314,0.9656781273605988 +onnx-tta,zero,family,10,common,99,568905,568908,568939,1.0,0.970140853478314,0.9620929978543427,0.970140853478314,0.9656781273605988 +v2,zero,family,20,per_model,95,568844,568840,568939,1.0,0.9741493045458317,0.9558568315711183,0.9741493045458317,0.9643318929324275 +v2,zero,family,20,common,95,568844,568840,568939,1.0,0.9741493045458317,0.9558568315711183,0.9741493045458317,0.9643318929324275 +torch,zero,family,20,per_model,95,568844,568844,568939,1.0,0.9861832500690465,0.9760726638238643,0.9861832500690465,0.9809866628450878 +torch,zero,family,20,common,95,568844,568844,568939,1.0,0.9861832500690465,0.9760726638238643,0.9861832500690465,0.9809866628450878 +onnx,zero,family,20,per_model,95,568844,568843,568939,1.0,0.9860221546075963,0.975979844598429,0.9860221546075963,0.9808606727885303 +onnx,zero,family,20,common,95,568844,568843,568939,1.0,0.9860221546075963,0.975979844598429,0.9860221546075963,0.9808606727885303 +torch-tta,zero,family,20,per_model,95,568844,568841,568939,1.0,0.9704728907663592,0.964964176423538,0.9704728907663592,0.9674882117511958 +torch-tta,zero,family,20,common,95,568844,568841,568939,1.0,0.9704728907663592,0.964964176423538,0.9704728907663592,0.9674882117511958 +onnx-tta,zero,family,20,per_model,95,568844,568841,568939,1.0,0.9704597591018311,0.964943859796085,0.9704597591018311,0.9674711785880233 +onnx-tta,zero,family,20,common,95,568844,568841,568939,1.0,0.9704597591018311,0.964943859796085,0.9704597591018311,0.9674711785880233 +v2,optimized,species,-1,per_model,12632,568939,546194,568939,0.9600220761803989,0.9037265793690537,0.8744630133499443,0.8617359559506923,0.8577212237023112 +torch,optimized,species,-1,per_model,12632,568939,554475,568939,0.9745772393877024,0.9459195194605763,0.9308209935558278,0.9187824413723291,0.9207369197765051 +onnx,optimized,species,-1,per_model,12632,568939,554457,568939,0.974545601549551,0.9459922827275581,0.9308488990338033,0.9188180504133524,0.920776413807909 +torch-tta,optimized,species,-1,per_model,12632,568939,551819,568939,0.9699089006027009,0.924348693798147,0.9180616415933389,0.8923771863774734,0.8990523856912974 +onnx-tta,optimized,species,-1,per_model,12632,568939,551892,568939,0.9700372096129813,0.9243532804255711,0.9180792238778338,0.892479370530307,0.8991069244273215 +v2,optimized,species,5,per_model,10804,559672,536383,568939,0.9600220761803989,0.9158611562057326,0.8878390711410652,0.8776764147426164,0.8761661941794936 +v2,optimized,species,5,common,10602,558259,534450,568939,0.9600220761803989,0.9177121083679098,0.891762023479617,0.8801101949128962,0.8795222528459896 +torch,optimized,species,5,per_model,10937,560779,546176,568939,0.9745772393877024,0.9513947315854316,0.9384133494807109,0.9266526292978261,0.9300604171769342 +torch,optimized,species,5,common,10602,558259,543718,568939,0.9745772393877024,0.9532783476173154,0.9407074772137323,0.9290829607634777,0.9325396241152072 +onnx,optimized,species,5,per_model,10936,560772,546150,568939,0.974545601549551,0.9514303559397785,0.9384500205116991,0.9267201467445534,0.9301162917573901 +onnx,optimized,species,5,common,10602,558259,543696,568939,0.974545601549551,0.9532904839498968,0.9407443752022229,0.9291231422275786,0.932580761385352 +torch-tta,optimized,species,5,per_model,10825,559907,543290,568939,0.9699089006027009,0.9345626371964706,0.9252272362524564,0.9057840551177695,0.9120214401052257 +torch-tta,optimized,species,5,common,10602,558259,541677,568939,0.9699089006027009,0.9363450738235962,0.9279542708375016,0.9080426198963741,0.9146258206280785 +onnx-tta,optimized,species,5,per_model,10824,559900,543357,568939,0.9700372096129813,0.9346673465396608,0.925332388146371,0.9059777519279791,0.912173055325448 +onnx-tta,optimized,species,5,common,10602,558259,541751,568939,0.9700372096129813,0.9363638260678422,0.9279653724002486,0.9081549374042587,0.9146897500425569 +v2,optimized,species,10,per_model,8253,538583,513453,568939,0.9600220761803989,0.919702396828417,0.9059511438670541,0.8834063629447468,0.8899652418620435 +v2,optimized,species,10,common,8098,536616,510817,568939,0.9600220761803989,0.9215043345441031,0.9099653600413793,0.8855370730719558,0.8932241894066936 +torch,optimized,species,10,per_model,8346,539898,524917,568939,0.9745772393877024,0.9538984340441033,0.9473939736393223,0.9301602417862408,0.937148187830096 +torch,optimized,species,10,common,8098,536616,521708,568939,0.9745772393877024,0.9557823065433836,0.9496750937304543,0.9325411959209317,0.939535293611614 +onnx,optimized,species,10,per_model,8346,539898,524893,568939,0.974545601549551,0.9539206501272308,0.9474282931419843,0.9301672088051162,0.9371699294742781 +onnx,optimized,species,10,common,8098,536616,521686,568939,0.974545601549551,0.955801772788383,0.9496911211579956,0.9325483763036845,0.9395489940596635 +torch-tta,optimized,species,10,per_model,8249,538601,522010,568939,0.9699089006027009,0.9393834246589234,0.9350057267421275,0.9114834461988911,0.9208747951169612 +torch-tta,optimized,species,10,common,8098,536616,520083,568939,0.9699089006027009,0.9407200968998959,0.9367295913481962,0.9130456217866014,0.922581735577435 +onnx-tta,optimized,species,10,per_model,8250,538612,522092,568939,0.9700372096129813,0.93934641972003,0.9349791393850145,0.9115472154224278,0.9208988400212919 +onnx-tta,optimized,species,10,common,8098,536616,520154,568939,0.9700372096129813,0.9406749119997709,0.9366904984361594,0.9130996572941806,0.922594828425376 +v2,optimized,species,20,per_model,5743,498972,472082,568939,0.9600220761803989,0.9250972898319929,0.9288745734119677,0.8907524166746096,0.9064159828472291 +v2,optimized,species,20,common,5619,495885,468673,568939,0.9600220761803989,0.9264955543696868,0.9322684160108836,0.8924860724765344,0.9091256637933713 +torch,optimized,species,20,per_model,5839,501367,486352,568939,0.9745772393877024,0.9573531978360545,0.9579644649920425,0.9347857154368387,0.9453054680104727 +torch,optimized,species,20,common,5619,495885,481020,568939,0.9745772393877024,0.9590960455020283,0.960085603968183,0.9369176471418931,0.9474691370958213 +onnx,optimized,species,20,per_model,5839,501366,486333,568939,0.974545601549551,0.9573343733074557,0.9579445192550318,0.9347554839982136,0.945279034518881 +onnx,optimized,species,20,common,5619,495885,481001,568939,0.974545601549551,0.9590794950769043,0.9600785045004131,0.9368942906754668,0.9474527915410534 +torch-tta,optimized,species,20,per_model,5768,499433,483547,568939,0.9699089006027009,0.9453421202510482,0.9452047271577229,0.9179877458923795,0.9300978516335463 +torch-tta,optimized,species,20,common,5619,495885,480062,568939,0.9699089006027009,0.9467143599325811,0.9471899070701052,0.9195557591284796,0.931901907237806 +onnx-tta,optimized,species,20,per_model,5767,499411,483596,568939,0.9700372096129813,0.9453315110109051,0.9452038535954121,0.9181109692132279,0.9301645658053365 +onnx-tta,optimized,species,20,common,5619,495885,480131,568939,0.9700372096129813,0.9466355110164897,0.947119470617321,0.9196145270414563,0.9319011751009653 +v2,optimized,genus,-1,per_model,4476,568939,547692,568939,0.9626550473776626,0.9709681846201991,0.945956754906805,0.924476997515889,0.9315715620856552 +torch,optimized,genus,-1,per_model,4476,568939,557792,568939,0.9804073898959291,0.9843532446734725,0.9768370043872598,0.9598662398316677,0.9670807734237682 +onnx,optimized,genus,-1,per_model,4476,568939,557681,568939,0.9802122898939957,0.9843807286145065,0.9770218695519097,0.9596964890327477,0.9670747932811063 +torch-tta,optimized,genus,-1,per_model,4476,568939,553424,568939,0.9727299411711976,0.9715101613252839,0.9625019705071297,0.9403692157002803,0.9493424432950821 +onnx-tta,optimized,genus,-1,per_model,4476,568939,553316,568939,0.9725401141422895,0.9717039507950574,0.9627559769001354,0.9402188527993052,0.9493781942192143 +v2,optimized,genus,5,per_model,4062,566924,545706,568939,0.9626550473776626,0.9730233189102614,0.9504203032640921,0.9299499941848702,0.9376102329360426 +v2,optimized,genus,5,common,4042,566796,545570,568939,0.9626550473776626,0.9734046694197016,0.9512441119322542,0.9305841568761081,0.9383497485198514 +torch,optimized,genus,5,per_model,4091,567116,556011,568939,0.9804073898959291,0.9850364631575421,0.9789962410446256,0.9626984563003262,0.9700444306631667 +torch,optimized,genus,5,common,4042,566796,555695,568939,0.9804073898959291,0.9852486590471086,0.9794558453427681,0.9630513085239086,0.9704594874167481 +onnx,optimized,genus,5,per_model,4091,567116,555902,568939,0.9802122898939957,0.9850665335853271,0.9790844321495648,0.9625127304201095,0.9699928799169721 +onnx,optimized,genus,5,common,4042,566796,555586,568939,0.9802122898939957,0.9852790940100151,0.9795451055630318,0.9628633311424227,0.9704073117357285 +torch-tta,optimized,genus,5,per_model,4087,567091,551619,568939,0.9727299411711976,0.9739612141159694,0.9654057218177811,0.9441101844287167,0.9533108456199497 +torch-tta,optimized,genus,5,common,4042,566796,551321,568939,0.9727299411711976,0.9741322556482092,0.9663131588925964,0.944725691696706,0.9541105972556507 +onnx-tta,optimized,genus,5,per_model,4087,567091,551512,568939,0.9725401141422895,0.9741122788741553,0.9656716705858495,0.9440066795731344,0.9533858183708201 +onnx-tta,optimized,genus,5,common,4042,566796,551215,568939,0.9725401141422895,0.9743203454081207,0.9665903152380758,0.9446519597954779,0.9542041917775816 +v2,optimized,genus,10,per_model,3422,561652,540352,568939,0.9626550473776626,0.9734800560246962,0.9565101129613048,0.9320816173013914,0.9423840637091992 +v2,optimized,genus,10,common,3399,561375,540016,568939,0.9626550473776626,0.9739032617284332,0.9574089837386313,0.9326845149652051,0.943205268402783 +torch,optimized,genus,10,per_model,3450,561991,550937,568939,0.9804073898959291,0.9853176604244238,0.9808685545250592,0.9634766998535845,0.9716169229580529 +torch,optimized,genus,10,common,3399,561375,550339,568939,0.9804073898959291,0.9855862214845251,0.9812407816841605,0.9640623745508275,0.9721216914659299 +onnx,optimized,genus,10,per_model,3450,561991,550832,568939,0.9802122898939957,0.9853671204730292,0.9809384610579636,0.9632926985272173,0.9715536681027205 +onnx,optimized,genus,10,common,3399,561375,550234,568939,0.9802122898939957,0.9856364236521301,0.9813117371235606,0.9638756123925556,0.9720574875086198 +torch-tta,optimized,genus,10,per_model,3429,561730,546343,568939,0.9727299411711976,0.9749187044499045,0.9691224108929244,0.946350886524944,0.9567459154446961 +torch-tta,optimized,genus,10,common,3399,561375,546001,568939,0.9727299411711976,0.9750657062256015,0.969389941537953,0.9466740165053914,0.9570462433877086 +onnx-tta,optimized,genus,10,per_model,3429,561730,546244,568939,0.9725401141422895,0.9750748967756228,0.9692801960108036,0.9462848043513266,0.9567847024096895 +onnx-tta,optimized,genus,10,common,3399,561375,545902,568939,0.9725401141422895,0.9751938567065922,0.9695491192870581,0.9466073510822276,0.9570853726913163 +v2,optimized,genus,20,per_model,2744,551057,529652,568939,0.9626550473776626,0.9744155465355695,0.9644172200469284,0.9346448055336697,0.9481401135118747 +v2,optimized,genus,20,common,2718,550466,528977,568939,0.9626550473776626,0.9751246579562103,0.9660046083551682,0.9356240006265886,0.9494673272983457 +torch,optimized,genus,20,per_model,2765,551534,540646,568939,0.9804073898959291,0.9859898736016124,0.9831207620917415,0.9651332754412042,0.973745902522698 +torch,optimized,genus,20,common,2718,550466,539612,568939,0.9804073898959291,0.986426765336266,0.9837622659851191,0.9659565896782382,0.9744900650585153 +onnx,optimized,genus,20,per_model,2765,551534,540545,568939,0.9802122898939957,0.9860515868629824,0.9831907018461258,0.9649737261528443,0.9736958816120121 +onnx,optimized,genus,20,common,2718,550466,539512,568939,0.9802122898939957,0.9865090020445816,0.9838374142507886,0.9658089981468492,0.974448877687717 +torch-tta,optimized,genus,20,per_model,2746,551117,535951,568939,0.9727299411711976,0.9766830689435503,0.9727816384005233,0.9485632489700034,0.959941393384285 +torch-tta,optimized,genus,20,common,2718,550466,535325,568939,0.9727299411711976,0.977064542064375,0.973306888624378,0.9491793130959524,0.9605169357740369 +onnx-tta,optimized,genus,20,per_model,2745,551095,535834,568939,0.9725401141422895,0.9767764438699172,0.972898378196236,0.9484647219147074,0.9599463383428157 +onnx-tta,optimized,genus,20,common,2718,550466,535228,568939,0.9725401141422895,0.9771848509403817,0.9734489057083235,0.9490820082537109,0.9605342527571652 +v2,optimized,family,-1,per_model,104,568939,560532,568939,0.985223371925637,0.9886094792660989,0.9786092510915618,0.9509273853934727,0.9637305558575113 +torch,optimized,family,-1,per_model,104,568939,563145,568939,0.9898161314306103,0.9948948540363234,0.9928704939132356,0.9735711206973268,0.9828384466133122 +onnx,optimized,family,-1,per_model,104,568939,563126,568939,0.9897827359347838,0.994899624212835,0.9928702233945721,0.9735459402580976,0.9828257658861518 +torch-tta,optimized,family,-1,per_model,104,568939,555940,568939,0.9771522078816886,0.9884734442452687,0.9837783443784444,0.951186192254207,0.966613846478881 +onnx-tta,optimized,family,-1,per_model,104,568939,555880,568939,0.977046748421184,0.9884830018540828,0.9837869141498093,0.9509704435277845,0.9665038797027707 +v2,optimized,family,5,per_model,101,568926,560519,568939,0.985223371925637,0.9882711469670721,0.979624047328605,0.9519450305041699,0.9649677628014595 +v2,optimized,family,5,common,101,568926,560519,568939,0.985223371925637,0.9882711469670721,0.979624047328605,0.9519450305041699,0.9649677628014595 +torch,optimized,family,5,per_model,101,568926,563132,568939,0.9898161314306103,0.9947432160374022,0.992658726405708,0.9727861044804157,0.9823286975028166 +torch,optimized,family,5,common,101,568926,563132,568939,0.9898161314306103,0.9947432160374022,0.992658726405708,0.9727861044804157,0.9823286975028166 +onnx,optimized,family,5,per_model,101,568926,563113,568939,0.9897827359347838,0.994748127902325,0.9926584478518367,0.9727601761073481,0.9823156401203942 +onnx,optimized,family,5,common,101,568926,563113,568939,0.9897827359347838,0.994748127902325,0.9926584478518367,0.9727601761073481,0.9823156401203942 +torch-tta,optimized,family,5,per_model,101,568926,555926,568939,0.9771522078816886,0.9881310713020588,0.9849466780398504,0.9497362771726487,0.9665222685615121 +torch-tta,optimized,family,5,common,101,568926,555926,568939,0.9771522078816886,0.9881310713020588,0.9849466780398504,0.9497362771726487,0.9665222685615121 +onnx-tta,optimized,family,5,per_model,101,568926,555866,568939,0.977046748421184,0.9881409128002436,0.9849555023588796,0.9495141200682138,0.9664090354455174 +onnx-tta,optimized,family,5,common,101,568926,555866,568939,0.977046748421184,0.9881409128002436,0.9849555023588796,0.9495141200682138,0.9664090354455174 +v2,optimized,family,10,per_model,98,568894,560492,568939,0.985223371925637,0.9906950318000157,0.979000293675399,0.955086411050422,0.9664392220697487 +v2,optimized,family,10,common,98,568894,560492,568939,0.985223371925637,0.9906950318000157,0.979000293675399,0.955086411050422,0.9664392220697487 +torch,optimized,family,10,per_model,99,568905,563115,568939,0.9898161314306103,0.9956471193916931,0.9925104178482475,0.9758839157942737,0.9840088800005394 +torch,optimized,family,10,common,98,568894,563104,568939,0.9898161314306103,0.9956027022426288,0.9924339935405765,0.9756378333023785,0.9838457053066675 +onnx,optimized,family,10,per_model,99,568905,563096,568939,0.9897827359347838,0.9956521304862104,0.9925101336670252,0.9758574636156896,0.9839955588326134 +onnx,optimized,family,10,common,98,568894,563085,568939,0.9897827359347838,0.9956077644707635,0.9924337064595459,0.9756111112036048,0.9838322482084564 +torch-tta,optimized,family,10,per_model,99,568905,555909,568939,0.9771522078816886,0.9908501767114873,0.9846425705255039,0.9523684354095822,0.9678831292624407 +torch-tta,optimized,family,10,common,98,568894,555898,568939,0.9771522078816886,0.990756811167727,0.9854135058462651,0.9528100428209972,0.968483049876436 +onnx-tta,optimized,family,10,per_model,99,568905,555849,568939,0.977046748421184,0.9908602170278172,0.9846515731136045,0.9521417902828354,0.9677676086087491 +onnx-tta,optimized,family,10,common,98,568894,555838,568939,0.977046748421184,0.9907669539362643,0.9854226002975096,0.9525810849888755,0.9683663504405639 +v2,optimized,family,20,per_model,95,568844,560443,568939,0.985223371925637,0.9904011906989638,0.9809102444698268,0.9567640624210547,0.9682912665531597 +v2,optimized,family,20,common,94,568821,560416,568939,0.985223371925637,0.9902990757063995,0.9830712281580402,0.9572291750185034,0.969656067261172 +torch,optimized,family,20,per_model,95,568844,563053,568939,0.9898161314306103,0.9954638402081855,0.9928142620672449,0.9748685017224537,0.9836545489511204 +torch,optimized,family,20,common,94,568821,563031,568939,0.9898161314306103,0.9954155831891236,0.9927378180466837,0.9750636800479007,0.9837170677933899 +onnx,optimized,family,20,per_model,95,568844,563034,568939,0.9897827359347838,0.9954690622961561,0.9928139659204974,0.9748409357679292,0.9836406668919132 +onnx,optimized,family,20,common,94,568821,563012,568939,0.9897827359347838,0.9954208608312215,0.9927375187494388,0.9750358208385408,0.9837030380527018 +torch-tta,optimized,family,20,per_model,94,568821,555830,568939,0.9771522078816886,0.9916046187351479,0.9859748370643096,0.9545294449805456,0.9698103692137126 +torch-tta,optimized,family,20,common,94,568821,555830,568939,0.9771522078816886,0.9916046187351479,0.9859748370643096,0.9545294449805456,0.9698103692137126 +onnx-tta,optimized,family,20,per_model,94,568821,555770,568939,0.977046748421184,0.9916151931108571,0.9859843185134793,0.9542907442619505,0.9696887038443989 +onnx-tta,optimized,family,20,common,94,568821,555770,568939,0.977046748421184,0.9916151931108571,0.9859843185134793,0.9542907442619505,0.9696887038443989 diff --git a/docs/assets/mambo-indomain-thresholds.json b/docs/assets/mambo-indomain-thresholds.json new file mode 100644 index 0000000..c7534df --- /dev/null +++ b/docs/assets/mambo-indomain-thresholds.json @@ -0,0 +1,460 @@ +{ + "revision": "70cc69adc05362863439277048e06386c1f885e1", + "plan_sha256": "1c07a9d9b29542d5bebabe8e4c01ab3a01732ab82874ee1eb59e6e7fddb36096", + "preset": "full", + "tta": "rotation30_pad25_3", + "split": "MetricDF.split((0.9, 0.1), strata=('label',), seed=42); reporting/calibration; grouped by instance_id", + "policy": "Per-rank MacroF1; eps=0.01; use_quantiles=True; n_bootstraps=0; all truth", + "models": { + "v2": { + "source": "local-evidence/ucloud-2026-09-25/mambo-results/runs-transfers/full/v2/full/mini_metric.csv", + "source_sha256": "c8c2b3d0b3eb4726fe2578c1076cf26294a4c8122043e41b77150e9d4e8bb337", + "identities": { + "full": "3c3f71983ab8b996928643377c0a012c162af2873f19d0a1587d73e96419f966", + "report": "295fbfef0a168abb06caff10a46f36a297b884e9526312d27ee4e83cd487add7", + "calibration": "86151935a854e42edb398ca83a1ac2c590bad14ecb54f709b129926d808aebdb" + }, + "report_images": 568939, + "calibration_images": 63974, + "thresholds": [ + 0.3832911252975464, + 0.5076181292533875, + 0.6285408735275269 + ], + "report_zero": { + "accuracy": { + "0": 0.8775332728247491, + "1": 0.9449328592412035, + "2": 0.9705788744761545 + }, + "precision": { + "0": 0.8448274823412316, + "1": 0.9072671198812579, + "2": 0.9509880328905062 + }, + "recall": { + "0": 0.8775332728247491, + "1": 0.9449328592412035, + "2": 0.9705788744761545 + }, + "f1": { + "0": 0.850372188202817, + "1": 0.9213682143792531, + "2": 0.9597726462561909 + }, + "micro_accuracy": { + "0": 0.8994373737782082, + "1": 0.9548897157691774, + "2": 0.9908320575668041 + }, + "theilU": { + "0": 0.9593104177462006, + "1": 0.9696401775440752, + "2": 0.9753149712577738 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "report_optimized": { + "accuracy": { + "0": 0.9037265793690537, + "1": 0.9709681846201991, + "2": 0.9886094792660989 + }, + "precision": { + "0": 0.8744630133499443, + "1": 0.945956754906805, + "2": 0.9786092510915618 + }, + "recall": { + "0": 0.8617359559506923, + "1": 0.924476997515889, + "2": 0.9509273853934727 + }, + "f1": { + "0": 0.8577212237023112, + "1": 0.9315715620856552, + "2": 0.9637305558575113 + }, + "micro_accuracy": { + "0": 0.922842433274624, + "1": 0.9749439465977228, + "2": 0.9970153354313402 + }, + "theilU": { + "0": 0.9593104177462006, + "1": 0.9696401775440752, + "2": 0.9753149712577738 + }, + "coverage": { + "0": 0.9600220761803989, + "1": 0.9626550473776626, + "2": 0.985223371925637 + } + } + }, + "torch": { + "source": "local-evidence/ucloud-2026-09-25/mambo-results/runs-transfers/full/torch/full/mini_metric.csv", + "source_sha256": "bbcd9cda9db39a5aa42908c0f7af718b7b13e33b6b8013a7c9fa6eb6799f94f1", + "identities": { + "full": "3c3f71983ab8b996928643377c0a012c162af2873f19d0a1587d73e96419f966", + "report": "295fbfef0a168abb06caff10a46f36a297b884e9526312d27ee4e83cd487add7", + "calibration": "86151935a854e42edb398ca83a1ac2c590bad14ecb54f709b129926d808aebdb" + }, + "report_images": 568939, + "calibration_images": 63974, + "thresholds": [ + 0.5271667838096619, + 0.6511092782020569, + 0.864630401134491 + ], + "report_zero": { + "accuracy": { + "0": 0.9295522392148737, + "1": 0.9700441575339722, + "2": 0.9847079901805926 + }, + "precision": { + "0": 0.9084034020798256, + "1": 0.9534379966946678, + "2": 0.9765407345826963 + }, + "recall": { + "0": 0.9295522392148737, + "1": 0.9700441575339722, + "2": 0.9847079901805926 + }, + "f1": { + "0": 0.9144754993404935, + "1": 0.9600051179818128, + "2": 0.980351974922878 + }, + "micro_accuracy": { + "0": 0.9420816642908993, + "1": 0.9764298105772323, + "2": 0.99502055580651 + }, + "theilU": { + "0": 0.9747176517382631, + "1": 0.9828386941879742, + "2": 0.9854982417951158 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "report_optimized": { + "accuracy": { + "0": 0.9459195194605763, + "1": 0.9843532446734725, + "2": 0.9948948540363234 + }, + "precision": { + "0": 0.9308209935558278, + "1": 0.9768370043872598, + "2": 0.9928704939132356 + }, + "recall": { + "0": 0.9187824413723291, + "1": 0.9598662398316677, + "2": 0.9735711206973268 + }, + "f1": { + "0": 0.9207369197765051, + "1": 0.9670807734237682, + "2": 0.9828384466133122 + }, + "micro_accuracy": { + "0": 0.9573253978989134, + "1": 0.9873555016923872, + "2": 0.9988013744239939 + }, + "theilU": { + "0": 0.9747176517382631, + "1": 0.9828386941879742, + "2": 0.9854982417951158 + }, + "coverage": { + "0": 0.9745772393877024, + "1": 0.9804073898959291, + "2": 0.9898161314306103 + } + } + }, + "onnx": { + "source": "local-evidence/ucloud-2026-09-25/mambo-results/runs-transfers/full/onnx/full/mini_metric.csv", + "source_sha256": "484eb6474495cac4826fb97097bac7313cce242a988831c152a348d7b4af2eec", + "identities": { + "full": "3c3f71983ab8b996928643377c0a012c162af2873f19d0a1587d73e96419f966", + "report": "295fbfef0a168abb06caff10a46f36a297b884e9526312d27ee4e83cd487add7", + "calibration": "86151935a854e42edb398ca83a1ac2c590bad14ecb54f709b129926d808aebdb" + }, + "report_images": 568939, + "calibration_images": 63974, + "thresholds": [ + 0.5274821221828461, + 0.6540825068950653, + 0.8653896152973175 + ], + "report_zero": { + "accuracy": { + "0": 0.929545760642923, + "1": 0.9700350462704753, + "2": 0.9845608356725373 + }, + "precision": { + "0": 0.9083939953917602, + "1": 0.9534572983167396, + "2": 0.9760061052351259 + }, + "recall": { + "0": 0.929545760642923, + "1": 0.9700350462704753, + "2": 0.9845608356725373 + }, + "f1": { + "0": 0.9144694069143972, + "1": 0.9600143434479116, + "2": 0.9799783228875365 + }, + "micro_accuracy": { + "0": 0.9421097868137006, + "1": 0.9764280529195573, + "2": 0.9950117675181346 + }, + "theilU": { + "0": 0.9747257627941226, + "1": 0.9828421268076857, + "2": 0.9854807021530904 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "report_optimized": { + "accuracy": { + "0": 0.9459922827275581, + "1": 0.9843807286145065, + "2": 0.994899624212835 + }, + "precision": { + "0": 0.9308488990338033, + "1": 0.9770218695519097, + "2": 0.9928702233945721 + }, + "recall": { + "0": 0.9188180504133524, + "1": 0.9596964890327477, + "2": 0.9735459402580976 + }, + "f1": { + "0": 0.920776413807909, + "1": 0.9670747932811063, + "2": 0.9828257658861518 + }, + "micro_accuracy": { + "0": 0.9573384410332992, + "1": 0.9874318831016298, + "2": 0.9988066613866169 + }, + "theilU": { + "0": 0.9747257627941226, + "1": 0.9828421268076857, + "2": 0.9854807021530904 + }, + "coverage": { + "0": 0.974545601549551, + "1": 0.9802122898939957, + "2": 0.9897827359347838 + } + } + }, + "torch-tta": { + "source": "local-evidence/ucloud-2026-09-25/mambo-results/runs-transfers/full/torch-tta/full/mini_metric.csv", + "source_sha256": "82bb7a7c36cc59d49ef38b4d27137c3c0acbe623e438d7ea9dd679e47dc5a01c", + "identities": { + "full": "3c3f71983ab8b996928643377c0a012c162af2873f19d0a1587d73e96419f966", + "report": "295fbfef0a168abb06caff10a46f36a297b884e9526312d27ee4e83cd487add7", + "calibration": "86151935a854e42edb398ca83a1ac2c590bad14ecb54f709b129926d808aebdb" + }, + "report_images": 568939, + "calibration_images": 63974, + "thresholds": [ + 0.35428521037101746, + 0.42676515877246857, + 0.6618353724479675 + ], + "report_zero": { + "accuracy": { + "0": 0.9031914801618097, + "1": 0.9525452203980439, + "2": 0.9681161624170399 + }, + "precision": { + "0": 0.8957682319690011, + "1": 0.9370642917998594, + "2": 0.9623314442357818 + }, + "recall": { + "0": 0.9031914801618097, + "1": 0.9525452203980439, + "2": 0.9681161624170399 + }, + "f1": { + "0": 0.8931233034667367, + "1": 0.9422165624061323, + "2": 0.9645304134232945 + }, + "micro_accuracy": { + "0": 0.9252292425022718, + "1": 0.9634319320700462, + "2": 0.9896034548519261 + }, + "theilU": { + "0": 0.9651516073355686, + "1": 0.97249651687663, + "2": 0.9708502978510457 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "report_optimized": { + "accuracy": { + "0": 0.924348693798147, + "1": 0.9715101613252839, + "2": 0.9884734442452687 + }, + "precision": { + "0": 0.9180616415933389, + "1": 0.9625019705071297, + "2": 0.9837783443784444 + }, + "recall": { + "0": 0.8923771863774734, + "1": 0.9403692157002803, + "2": 0.951186192254207 + }, + "f1": { + "0": 0.8990523856912974, + "1": 0.9493424432950821, + "2": 0.966613846478881 + }, + "micro_accuracy": { + "0": 0.9434633457709865, + "1": 0.9786583162277025, + "2": 0.9977119833075512 + }, + "theilU": { + "0": 0.9651516073355686, + "1": 0.97249651687663, + "2": 0.9708502978510457 + }, + "coverage": { + "0": 0.9699089006027009, + "1": 0.9727299411711976, + "2": 0.9771522078816886 + } + } + }, + "onnx-tta": { + "source": "local-evidence/ucloud-2026-09-25/mambo-results/runs-transfers/full/onnx-tta/full/mini_metric.csv", + "source_sha256": "34324a27a65c3ef98ec95b0db443efc5f65bbf270dccb33a572afb37ddba6526", + "identities": { + "full": "3c3f71983ab8b996928643377c0a012c162af2873f19d0a1587d73e96419f966", + "report": "295fbfef0a168abb06caff10a46f36a297b884e9526312d27ee4e83cd487add7", + "calibration": "86151935a854e42edb398ca83a1ac2c590bad14ecb54f709b129926d808aebdb" + }, + "report_images": 568939, + "calibration_images": 63974, + "thresholds": [ + 0.3528517037630081, + 0.4292137175798416, + 0.664017528295517 + ], + "report_zero": { + "accuracy": { + "0": 0.903254258165182, + "1": 0.9524334553173022, + "2": 0.9681041671465577 + }, + "precision": { + "0": 0.8958363209627044, + "1": 0.9371069603411143, + "2": 0.9623128857780121 + }, + "recall": { + "0": 0.903254258165182, + "1": 0.9524334553173022, + "2": 0.9681041671465577 + }, + "f1": { + "0": 0.8931813750062196, + "1": 0.9421777591016375, + "2": 0.9645148542838584 + }, + "micro_accuracy": { + "0": 0.9252679109711235, + "1": 0.9634231437816708, + "2": 0.989599939536576 + }, + "theilU": { + "0": 0.9651642678177648, + "1": 0.9724822373011625, + "2": 0.9708438808651052 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "report_optimized": { + "accuracy": { + "0": 0.9243532804255711, + "1": 0.9717039507950574, + "2": 0.9884830018540828 + }, + "precision": { + "0": 0.9180792238778338, + "1": 0.9627559769001354, + "2": 0.9837869141498093 + }, + "recall": { + "0": 0.892479370530307, + "1": 0.9402188527993052, + "2": 0.9509704435277845 + }, + "f1": { + "0": 0.8991069244273215, + "1": 0.9493781942192143, + "2": 0.9665038797027707 + }, + "micro_accuracy": { + "0": 0.9434182774890739, + "1": 0.978773431456889, + "2": 0.9977279268906958 + }, + "theilU": { + "0": 0.9651642678177648, + "1": 0.9724822373011625, + "2": 0.9708438808651052 + }, + "coverage": { + "0": 0.9700372096129813, + "1": 0.9725401141422895, + "2": 0.977046748421184 + } + } + } + } +} diff --git a/docs/assets/mambo-loading-scaling.json b/docs/assets/mambo-loading-scaling.json new file mode 100644 index 0000000..a00ecd3 --- /dev/null +++ b/docs/assets/mambo-loading-scaling.json @@ -0,0 +1,274 @@ +{ + "cells": [ + { + "backend": "torch", + "batch": 8, + "workers": 1, + "preparation": 91.33686295883051, + "prepared": 263.73442338507033, + "end_to_end": 58.129077562830254 + }, + { + "backend": "torch", + "batch": 8, + "workers": 2, + "preparation": 181.8251242418234, + "prepared": 278.558515371201, + "end_to_end": 88.47787181454896 + }, + { + "backend": "torch", + "batch": 8, + "workers": 4, + "preparation": 216.0854611598373, + "prepared": 235.09056376076117, + "end_to_end": 98.72933981308955 + }, + { + "backend": "torch", + "batch": 8, + "workers": 8, + "preparation": 236.82045335131505, + "prepared": 235.57030306622352, + "end_to_end": 102.50269819473858 + }, + { + "backend": "torch", + "batch": 32, + "workers": 1, + "preparation": 96.71097313648941, + "prepared": 341.39592804460614, + "end_to_end": 75.83913838049648 + }, + { + "backend": "torch", + "batch": 32, + "workers": 2, + "preparation": 157.30967653664388, + "prepared": 349.5188065385458, + "end_to_end": 107.27458998016668 + }, + { + "backend": "torch", + "batch": 32, + "workers": 4, + "preparation": 223.20751755525168, + "prepared": 343.69387788430276, + "end_to_end": 129.09418839659034 + }, + { + "backend": "torch", + "batch": 32, + "workers": 8, + "preparation": 228.9704897880299, + "prepared": 330.70546502134476, + "end_to_end": 134.94756144379662 + }, + { + "backend": "torch", + "batch": 64, + "workers": 1, + "preparation": 100.15343584591987, + "prepared": 322.6752212066644, + "end_to_end": 76.66900202435194 + }, + { + "backend": "torch", + "batch": 64, + "workers": 2, + "preparation": 162.37247620891006, + "prepared": 349.73708459547316, + "end_to_end": 98.14394209806231 + }, + { + "backend": "torch", + "batch": 64, + "workers": 4, + "preparation": 224.79508391398625, + "prepared": 344.2625245357193, + "end_to_end": 131.80535667045675 + }, + { + "backend": "torch", + "batch": 64, + "workers": 8, + "preparation": 252.84517589887423, + "prepared": 354.71692002322646, + "end_to_end": 137.14388503475107 + }, + { + "backend": "onnx", + "batch": 8, + "workers": 1, + "preparation": 102.76046860097613, + "prepared": 209.47796127843597, + "end_to_end": 70.98159021461862 + }, + { + "backend": "onnx", + "batch": 8, + "workers": 2, + "preparation": 161.8345401630534, + "prepared": 213.9945422338676, + "end_to_end": 91.17262122903752 + }, + { + "backend": "onnx", + "batch": 8, + "workers": 4, + "preparation": 210.83053312171324, + "prepared": 205.2858909988962, + "end_to_end": 107.06981449462224 + }, + { + "backend": "onnx", + "batch": 8, + "workers": 8, + "preparation": 260.595597089102, + "prepared": 208.69653597830774, + "end_to_end": 111.19488410570094 + }, + { + "backend": "onnx", + "batch": 32, + "workers": 1, + "preparation": 101.66988690727861, + "prepared": 211.4091981569424, + "end_to_end": 68.26051834172199 + }, + { + "backend": "onnx", + "batch": 32, + "workers": 2, + "preparation": 174.20073978469355, + "prepared": 207.20361095863493, + "end_to_end": 84.67745809845839 + }, + { + "backend": "onnx", + "batch": 32, + "workers": 4, + "preparation": 206.5486747862816, + "prepared": 203.25719270324169, + "end_to_end": 100.49962793328908 + }, + { + "backend": "onnx", + "batch": 32, + "workers": 8, + "preparation": 233.883229097214, + "prepared": 203.06915935556427, + "end_to_end": 103.97221966298999 + }, + { + "backend": "onnx", + "batch": 64, + "workers": 1, + "preparation": 99.38106111852477, + "prepared": 204.57713922660275, + "end_to_end": 61.02925607713586 + }, + { + "backend": "onnx", + "batch": 64, + "workers": 2, + "preparation": 116.9312446490858, + "prepared": 203.92716497990443, + "end_to_end": 77.52287720107746 + }, + { + "backend": "onnx", + "batch": 64, + "workers": 4, + "preparation": 170.29300158783053, + "prepared": 208.27633192812468, + "end_to_end": 90.78884134636633 + }, + { + "backend": "onnx", + "batch": 64, + "workers": 8, + "preparation": 210.7168454101736, + "prepared": 208.71386586142265, + "end_to_end": 88.16061887266062 + } + ], + "streams": [ + { + "backend": "torch", + "workers": 1, + "overlap": false, + "images_per_second": 74.38661931325872 + }, + { + "backend": "torch", + "workers": 1, + "overlap": true, + "images_per_second": 85.52164452534973 + }, + { + "backend": "torch", + "workers": 4, + "overlap": false, + "images_per_second": 128.17302987288383 + }, + { + "backend": "torch", + "workers": 4, + "overlap": true, + "images_per_second": 154.16087883868184 + }, + { + "backend": "torch", + "workers": 8, + "overlap": false, + "images_per_second": 133.91537642918294 + }, + { + "backend": "torch", + "workers": 8, + "overlap": true, + "images_per_second": 157.69016646575744 + }, + { + "backend": "onnx", + "workers": 1, + "overlap": false, + "images_per_second": 46.10735164453709 + }, + { + "backend": "onnx", + "workers": 1, + "overlap": true, + "images_per_second": 82.90015664523862 + }, + { + "backend": "onnx", + "workers": 4, + "overlap": false, + "images_per_second": 99.6408925107329 + }, + { + "backend": "onnx", + "workers": 4, + "overlap": true, + "images_per_second": 155.23328771967067 + }, + { + "backend": "onnx", + "workers": 8, + "overlap": false, + "images_per_second": 98.01451957072325 + }, + { + "backend": "onnx", + "workers": 8, + "overlap": true, + "images_per_second": 132.69168375969076 + } + ], + "sources_sha256": { + "local-evidence/mambo-loading-scaling-torch/report.json": "466878e68b29ee811af5dc0cfb4ca7405622d76d0c8d60ed96fdecd6ef1b906b", + "local-evidence/mambo-loading-scaling-onnx/report.json": "fe45b77d423621d3ae102f0067b770a07a4e980f75e73ae60b165ac80aa10e74" + } +} diff --git a/docs/assets/mambo-promoted-quality.svg b/docs/assets/mambo-promoted-quality.svg new file mode 100644 index 0000000..861267f --- /dev/null +++ b/docs/assets/mambo-promoted-quality.svg @@ -0,0 +1,3049 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.10.9, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + + + + MAMBO v2 + + + + + + + + + + V3 PyTorch + + + + + + + + + + V3 ONNX + + + + + + + + + + V3 PyTorch + TTA + + + + + + + + + + V3 ONNX + TTA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Species · Macro accuracy (%) + + + + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Species · Macro-F1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100.0% + + + 69.7% + + + 100.0% + + + 70.8% + + + 100.0% + + + 70.5% + + + 100.0% + + + 81.2% + + + 100.0% + + + 81.3% + + + Species · Acceptance coverage (%) + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + MAMBO v2 + + + + + + + + + + V3 PyTorch + + + + + + + + + + V3 ONNX + + + + + + + + + + V3 PyTorch + TTA + + + + + + + + + + V3 ONNX + TTA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Genus · Macro accuracy (%) + + + + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Genus · Macro-F1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100.0% + + + 69.8% + + + 100.0% + + + 75.8% + + + 100.0% + + + 75.4% + + + 100.0% + + + 84.3% + + + 100.0% + + + 84.3% + + + Genus · Acceptance coverage (%) + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + MAMBO v2 + + + + + + + + + + V3 PyTorch + + + + + + + + + + V3 ONNX + + + + + + + + + + V3 PyTorch + TTA + + + + + + + + + + V3 ONNX + TTA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Family · Macro accuracy (%) + + + + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Family · Macro-F1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100.0% + + + 77.4% + + + 100.0% + + + 73.1% + + + 100.0% + + + 73.3% + + + 100.0% + + + 82.1% + + + 100.0% + + + 82.1% + + + Family · Acceptance coverage (%) + + + + V2 vs V3 vs V3 + TTA · matched reporting images · legacy northern Europe + + + Same 52,788 reporting images throughout; thresholds fitted on 5,852 separate images using mini_metrics Macro-F1. + Hollow → filled changes the averaging domain, not predictions. >5 requires truth AND accepted-prediction support in every pipeline. + Retained classes differ between confidence settings. No evaluation rows removed; per-class FP/FN remain intact. + Coverage is unchanged by class truncation. TTA: rotation30_pad25_3; recipe selection used the same dataset, so results remain descriptive. + + + + + + + Shape = confidence setting + + + + + + + + + + + Unthresholded + + + + + + + + + + + Calibrated + + + + + + + + Fill = averaging domain + + + + + + + + Full support + + + + + + + + + + + Truncated (support >5) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/mambo-promoted-speed.json b/docs/assets/mambo-promoted-speed.json new file mode 100644 index 0000000..096f8c8 --- /dev/null +++ b/docs/assets/mambo-promoted-speed.json @@ -0,0 +1,319 @@ +{ + "tta": "rotation30_pad25_3", + "sources_sha256": { + "docs/assets/mambo-defaults-comparison.json": "99224200e66e3d0d44195ab684f8f71580ed829a4ac8fd1c8c1681ed3e6dae52", + "local-evidence/mambo-promoted-tta-speed/trial-0-torch-cuda-0/report.json": "25891a868390b8bbabf491966e90fa8f5c6624c3c66be2c874ac9f6c16878aab", + "local-evidence/mambo-promoted-tta-speed/trial-0-onnx-cuda-0/report.json": "5ef51afe133be77309bbd3fab303fb61869080e328cd8de30e4639c3715907f6", + "local-evidence/mambo-promoted-tta-speed/trial-0-torch-cpu/report.json": "b3392bee4e0d81c29df653a412f777b35a580b2b22fe308a8eb81a7399c83625", + "local-evidence/mambo-promoted-tta-speed/trial-0-onnx-cpu/report.json": "7a9c3b52b8a072d9cbc27462433cb6c235bb9c7207d365334a6ef84535f25faa", + "local-evidence/mambo-promoted-tta-speed/trial-1-onnx-cpu/report.json": "f7def2387215747e68b5b3e7036e94c70d78da9cb4e06b19123b29d38e243665", + "local-evidence/mambo-promoted-tta-speed/trial-1-torch-cpu/report.json": "6212e23be3e73cf0bae031ff98c72715c443e78ffb18566440657e73215974c4", + "local-evidence/mambo-promoted-tta-speed/trial-1-onnx-cuda-0/report.json": "7d8c3d953e5ba5711af8e4f4746a73a2cfef9f96c9ec51cb51fd941633c96ec3", + "local-evidence/mambo-promoted-tta-speed/trial-1-torch-cuda-0/report.json": "a5106112a7127df413139f2369a02bdd5ca592be700de30996c9fffda7006ebe", + "local-evidence/mambo-promoted-tta-speed/trial-2-torch-cuda-0/report.json": "8ac283bbc8e0273ccd9da170fefb1050006a61302761fb9612188e9360000966", + "local-evidence/mambo-promoted-tta-speed/trial-2-onnx-cuda-0/report.json": "70418cb3a4c4162782525acf2cf6eea19a82863decd64dcd070bb7b3de816dbd", + "local-evidence/mambo-promoted-tta-speed/trial-2-torch-cpu/report.json": "1609821796674aec8d0abedbecd9bfb1877da212b9aed3bcf67c50032f141119", + "local-evidence/mambo-promoted-tta-speed/trial-2-onnx-cpu/report.json": "eaa507bdc4d39d172a3e4f1eca05083546b91674ae3899e2bfc5387df5f15768" + }, + "speed": [ + { + "model": "v2", + "device": "cpu", + "preset": "north_europe", + "batch": 1, + "median_ms": 796.1964119967888, + "p95_ms": 855.2797960001044, + "trial_min_ms": 780.1338070021302, + "trial_max_ms": 827.1140280012332, + "images_per_second": 1.255971497651051, + "trial_min_ips": 1.2090231408800491, + "trial_max_ips": 1.2818313871600613 + }, + { + "model": "v2", + "device": "cpu", + "preset": "north_europe", + "batch": 8, + "median_ms": 5765.8902689981915, + "p95_ms": 5890.259110001352, + "trial_min_ms": 5732.572058997903, + "trial_max_ms": 5802.123346998997, + "images_per_second": 1.387470039624944, + "trial_min_ips": 1.3788055719528611, + "trial_max_ips": 1.395534136800447 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "north_europe", + "batch": 1, + "median_ms": 22.129188000690192, + "p95_ms": 28.487998999480624, + "trial_min_ms": 21.078697001939872, + "trial_max_ms": 23.72169799855328, + "images_per_second": 45.18918633475439, + "trial_min_ips": 42.155498314706946, + "trial_max_ips": 47.44126261257847 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "north_europe", + "batch": 8, + "median_ms": 178.38607100202353, + "p95_ms": 190.12071899851435, + "trial_min_ms": 173.67241900137742, + "trial_max_ms": 178.83818200061796, + "images_per_second": 44.84655082688184, + "trial_min_ips": 44.73317672158151, + "trial_max_ips": 46.063733355015636 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "north_europe", + "batch": 32, + "median_ms": 383.29957200039644, + "p95_ms": 395.5446789987036, + "trial_min_ms": 365.05659100293997, + "trial_max_ms": 387.3802570014959, + "images_per_second": 83.48561370156422, + "trial_min_ips": 82.60617164048303, + "trial_max_ips": 87.65764209895416 + }, + { + "model": "onnx", + "device": "cpu", + "preset": "north_europe", + "batch": 1, + "images_per_second": 10.076177412511877, + "trial_min_ips": 9.60250986545771, + "trial_max_ips": 11.353111385069457 + }, + { + "model": "onnx", + "device": "cpu", + "preset": "north_europe", + "batch": 8, + "images_per_second": 10.80969808387532, + "trial_min_ips": 10.570796505012908, + "trial_max_ips": 11.102500782573706 + }, + { + "model": "onnx", + "device": "cuda:0", + "preset": "north_europe", + "batch": 1, + "images_per_second": 46.70691057432178, + "trial_min_ips": 41.11976015977681, + "trial_max_ips": 49.97505245293308 + }, + { + "model": "onnx", + "device": "cuda:0", + "preset": "north_europe", + "batch": 8, + "images_per_second": 114.11464013589269, + "trial_min_ips": 107.34320509031689, + "trial_max_ips": 115.69758682083888 + }, + { + "model": "onnx", + "device": "cuda:0", + "preset": "north_europe", + "batch": 32, + "images_per_second": 111.27186960045317, + "trial_min_ips": 104.95228749163802, + "trial_max_ips": 118.23092267562323 + }, + { + "model": "torch", + "device": "cpu", + "preset": "north_europe", + "batch": 1, + "images_per_second": 5.695199765540664, + "trial_min_ips": 5.453077416494641, + "trial_max_ips": 6.445979740616736 + }, + { + "model": "torch", + "device": "cpu", + "preset": "north_europe", + "batch": 8, + "images_per_second": 7.839122148750051, + "trial_min_ips": 6.663612338884881, + "trial_max_ips": 9.242605998110642 + }, + { + "model": "torch", + "device": "cuda:0", + "preset": "north_europe", + "batch": 1, + "images_per_second": 29.838347764184938, + "trial_min_ips": 28.22843215050167, + "trial_max_ips": 32.58000010949372 + }, + { + "model": "torch", + "device": "cuda:0", + "preset": "north_europe", + "batch": 8, + "images_per_second": 126.73135226080092, + "trial_min_ips": 125.63045484784077, + "trial_max_ips": 134.262307658797 + }, + { + "model": "torch", + "device": "cuda:0", + "preset": "north_europe", + "batch": 32, + "images_per_second": 136.24360110822388, + "trial_min_ips": 134.1900518259908, + "trial_max_ips": 142.79165057586877 + }, + { + "model": "torch-tta", + "device": "cuda:0", + "batch": 1, + "images_per_second": 10.095289640929265, + "trial_min_ips": 9.08992225583603, + "trial_max_ips": 11.395943605042223 + }, + { + "model": "torch-tta", + "device": "cuda:0", + "batch": 8, + "images_per_second": 41.74452237473382, + "trial_min_ips": 40.17425321046774, + "trial_max_ips": 43.20922520587249 + }, + { + "model": "torch-tta", + "device": "cuda:0", + "batch": 32, + "images_per_second": 50.89189233994259, + "trial_min_ips": 49.60486323902889, + "trial_max_ips": 51.93386894396018 + }, + { + "model": "onnx-tta", + "device": "cuda:0", + "batch": 1, + "images_per_second": 16.501620755811338, + "trial_min_ips": 10.600381997176049, + "trial_max_ips": 17.32238535488025 + }, + { + "model": "onnx-tta", + "device": "cuda:0", + "batch": 8, + "images_per_second": 39.403995458090144, + "trial_min_ips": 36.333391293363185, + "trial_max_ips": 40.734567059530676 + }, + { + "model": "onnx-tta", + "device": "cuda:0", + "batch": 32, + "images_per_second": 38.26903509578927, + "trial_min_ips": 36.8244774584263, + "trial_max_ips": 42.60271935994335 + }, + { + "model": "torch-tta", + "device": "cpu", + "batch": 1, + "images_per_second": 2.0418394631211805, + "trial_min_ips": 1.8675565638482772, + "trial_max_ips": 2.199971756725526 + }, + { + "model": "torch-tta", + "device": "cpu", + "batch": 8, + "images_per_second": 2.725476601953184, + "trial_min_ips": 2.604504798702578, + "trial_max_ips": 2.9239933313665523 + }, + { + "model": "onnx-tta", + "device": "cpu", + "batch": 1, + "images_per_second": 3.392641317598269, + "trial_min_ips": 2.8475503305697205, + "trial_max_ips": 3.7037390675348525 + }, + { + "model": "onnx-tta", + "device": "cpu", + "batch": 8, + "images_per_second": 3.577990190138483, + "trial_min_ips": 3.523486466759631, + "trial_max_ips": 3.7463472031954144 + } + ], + "resources": [ + { + "model": "torch", + "device": "cuda:0", + "rss_mib": 2511.96484375, + "load_first_seconds": 42.957718928999384, + "allocated_mib": 597.53125 + }, + { + "model": "onnx", + "device": "cuda:0", + "rss_mib": 1618.86328125, + "load_first_seconds": 1.4639206969950465, + "allocated_mib": null + }, + { + "model": "torch", + "device": "cpu", + "rss_mib": 1618.265625, + "load_first_seconds": 42.038206298006116, + "allocated_mib": null + }, + { + "model": "onnx", + "device": "cpu", + "rss_mib": 688.5390625, + "load_first_seconds": 0.3738440049928613, + "allocated_mib": null + }, + { + "model": "v2", + "device": "cpu", + "rss_mib": 4122.8125, + "load_first_seconds": 209.39651592600057, + "allocated_mib": null + }, + { + "model": "v2", + "device": "cuda:0", + "rss_mib": 4122.58203125, + "load_first_seconds": 209.60287212600088, + "allocated_mib": 1935.630859375 + }, + { + "model": "torch-tta", + "device": "cuda:0", + "rss_mib": 2538.8203125 + }, + { + "model": "onnx-tta", + "device": "cuda:0", + "rss_mib": 1670.91796875 + }, + { + "model": "torch-tta", + "device": "cpu", + "rss_mib": 1742.23828125 + }, + { + "model": "onnx-tta", + "device": "cpu", + "rss_mib": 687.20703125 + } + ] +} diff --git a/docs/assets/mambo-promoted-speed.svg b/docs/assets/mambo-promoted-speed.svg new file mode 100644 index 0000000..8ecad58 --- /dev/null +++ b/docs/assets/mambo-promoted-speed.svg @@ -0,0 +1,998 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.10.9, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + + + + + + + + + + + 8 + + + + Images per batch + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 2 + + + + + + + + + + + + + 4 + + + + + + + + + + + + + 6 + + + + + + + + + + + + + 8 + + + + + + + + + + + + + 10 + + + + End-to-end images / second + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CPU · FP32 + + + + + + + + + + + + + + + + + + 1 + + + + + + + + + + + + + 8 + + + + + + + + + + + + + 32 + + + + Images per batch + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + + 120 + + + + + + + + + + + + + 140 + + + + End-to-end images / second + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GPU · automatic precision + + + + Release throughput · northern Europe · TTA: ±30° with 25% padding + + + i7-12800H / RTX 3080 Ti Laptop; four preparation/runtime threads; same image bank. + Three fresh processes × seven observations; bars: trial-median range. Decode through CPU results included. + V2 and single-view V3 reuse earlier measurements; laptop conditions vary between campaigns. + + + + + + + + + + + + + + + + + + + + + + + + + + + + MAMBO v2 + + + + + + + + + + + + + + + + + + + + + + + + V3 PyTorch + + + + + + + + + + + + + + + + + + + + + + + + V3 ONNX + + + + + + + + + + + + + + + + + + + + + + + + V3 PyTorch + TTA + + + + + + + + + + + + + + + + + + + + + + + + V3 ONNX + TTA + + + + + + + + + + + + diff --git a/docs/assets/mambo-promoted-tail.csv b/docs/assets/mambo-promoted-tail.csv new file mode 100644 index 0000000..dabb4ee --- /dev/null +++ b/docs/assets/mambo-promoted-tail.csv @@ -0,0 +1,211 @@ +model,scope,rank,cutoff,domain,class_count,truth_images_in_retained_classes,accepted_predictions_in_retained_classes,report_images,overall_coverage,accuracy,precision,recall,f1 +v2,zero,species,-1,per_model,1205,52788,52788,52788,1.0,0.6856229575537315,0.2795792585422393,0.6856229575537315,0.2619881841444524 +torch,zero,species,-1,per_model,1289,52788,52788,52788,1.0,0.7135646156794592,0.2688723997356787,0.7135646156794592,0.25928693173615297 +onnx,zero,species,-1,per_model,1289,52788,52788,52788,1.0,0.7133861511997317,0.2689411284200973,0.7133861511997317,0.2593624046134101 +torch-tta,zero,species,-1,per_model,1131,52788,52788,52788,1.0,0.7493898333756177,0.3361085016262147,0.7493898333756177,0.32014833573036827 +onnx-tta,zero,species,-1,per_model,1132,52788,52788,52788,1.0,0.7493378530417095,0.335607011455683,0.7493378530417095,0.3197309858969451 +v2,zero,species,5,per_model,320,44895,39395,52788,1.0,0.7835860088760841,0.8271892598535118,0.7835860088760841,0.7771880031099807 +v2,zero,species,5,common,311,44709,39284,52788,1.0,0.7900550443728065,0.8335510054241905,0.7900550443728065,0.7835569174460332 +torch,zero,species,5,per_model,321,44848,40080,52788,1.0,0.8016540743299243,0.826169612130568,0.8016540743299243,0.7937632511493784 +torch,zero,species,5,common,311,44709,39989,52788,1.0,0.8159055366992773,0.837066966065252,0.8159055366992773,0.8065774964710728 +onnx,zero,species,5,per_model,321,44848,40095,52788,1.0,0.8021426772632025,0.8262878591168297,0.8021426772632025,0.794015782308363 +onnx,zero,species,5,common,311,44709,40004,52788,1.0,0.8164098503378058,0.8371890152054124,0.8164098503378058,0.806838147603015 +torch-tta,zero,species,5,per_model,321,44929,41848,52788,1.0,0.8567411793921805,0.8760937958534148,0.8567411793921805,0.850373233680162 +torch-tta,zero,species,5,common,311,44709,41727,52788,1.0,0.865303260260028,0.8809281307434137,0.865303260260028,0.8573956478024776 +onnx-tta,zero,species,5,per_model,321,44929,41848,52788,1.0,0.8566566506248902,0.8757776830894549,0.8566566506248902,0.8502587874803171 +onnx-tta,zero,species,5,common,311,44709,41728,52788,1.0,0.8655083257153624,0.8807049123666298,0.8655083257153624,0.8574639236363765 +v2,zero,species,10,per_model,277,43835,38825,52788,1.0,0.7994793772053351,0.8464715182316644,0.7994793772053351,0.8020074761104694 +v2,zero,species,10,common,269,43592,38684,52788,1.0,0.807434274731362,0.8524634178075089,0.807434274731362,0.8090415998072698 +torch,zero,species,10,per_model,285,44492,39612,52788,1.0,0.8171258284359165,0.8511929361965738,0.8171258284359165,0.8180429337935674 +torch,zero,species,10,common,269,43592,39084,52788,1.0,0.8256404609528794,0.8567343194106741,0.8256404609528794,0.8257371612732255 +onnx,zero,species,10,per_model,285,44492,39626,52788,1.0,0.817676149634451,0.8513280853428178,0.817676149634451,0.8183308171409448 +onnx,zero,species,10,common,269,43592,39098,52788,1.0,0.8262235150108063,0.856877507167847,0.8262235150108063,0.8260421677936811 +torch-tta,zero,species,10,per_model,287,44585,41383,52788,1.0,0.8650597753206963,0.890822796453379,0.8650597753206963,0.866596355497898 +torch-tta,zero,species,10,common,269,43592,40689,52788,1.0,0.8758483940155001,0.8978559590586308,0.8758483940155001,0.8761006747537562 +onnx-tta,zero,species,10,per_model,287,44585,41382,52788,1.0,0.8649652326924728,0.8906558948204186,0.8649652326924728,0.8664756558669171 +onnx-tta,zero,species,10,common,269,43592,40689,52788,1.0,0.8760941628080915,0.897846903368685,0.8760941628080915,0.8762293688340541 +v2,zero,species,20,per_model,216,42698,37641,52788,1.0,0.8082495823011705,0.8625621889375423,0.8082495823011705,0.8168473325998337 +v2,zero,species,20,common,207,42149,37370,52788,1.0,0.8175661534139832,0.8679692809334503,0.8175661534139832,0.8251439958793457 +torch,zero,species,20,per_model,222,43361,38417,52788,1.0,0.8271275510654174,0.878086795953307,0.8271275510654174,0.8390189376702694 +torch,zero,species,20,common,207,42149,37749,52788,1.0,0.8380264705318411,0.8870648514468934,0.8380264705318411,0.8498822675305044 +onnx,zero,species,20,per_model,222,43361,38429,52788,1.0,0.8276292942912182,0.8782629747089122,0.8276292942912182,0.8392847349307755 +onnx,zero,species,20,common,207,42149,37764,52788,1.0,0.8385645719624101,0.8868839185673889,0.8385645719624101,0.8499675200880887 +torch-tta,zero,species,20,per_model,226,43341,40350,52788,1.0,0.8779440296582359,0.9091124323290416,0.8779440296582359,0.8834258152556967 +torch-tta,zero,species,20,common,207,42149,39473,52788,1.0,0.8847402108374071,0.9092002957022167,0.8847402108374071,0.8877589946240976 +onnx-tta,zero,species,20,per_model,226,43341,40349,52788,1.0,0.8779933384089511,0.9089448421313119,0.8779933384089511,0.8833793412304258 +onnx-tta,zero,species,20,common,207,42149,39471,52788,1.0,0.884644302107583,0.9090587633916279,0.884644302107583,0.8876136773297221 +v2,zero,genus,-1,per_model,691,52788,52788,52788,1.0,0.7893807671430488,0.3234152967366764,0.7893807671430488,0.32128858585759756 +torch,zero,genus,-1,per_model,713,52788,52788,52788,1.0,0.8053026558890463,0.3221313136590869,0.8053026558890463,0.3230351895845698 +onnx,zero,genus,-1,per_model,710,52788,52788,52788,1.0,0.8053599793321786,0.32303901654923844,0.8053599793321786,0.32445203101159475 +torch-tta,zero,genus,-1,per_model,643,52788,52788,52788,1.0,0.8472767012256567,0.3871858468468912,0.8472767012256567,0.38731172619778687 +onnx-tta,zero,genus,-1,per_model,642,52788,52788,52788,1.0,0.8472504239634208,0.38755157575495597,0.8472504239634208,0.38771743876773856 +v2,zero,genus,5,per_model,244,52582,44975,52788,1.0,0.8198886444355898,0.8176206331689666,0.8198886444355898,0.7926029899466802 +v2,zero,genus,5,common,242,52567,44953,52788,1.0,0.8206876060779148,0.8201078560326222,0.8206876060779148,0.7941995832133606 +torch,zero,genus,5,per_model,242,52567,44773,52788,1.0,0.8383310164872881,0.8166147950822779,0.8383310164872881,0.8056571781128056 +torch,zero,genus,5,common,242,52567,44773,52788,1.0,0.8383310164872881,0.8166147950822779,0.8383310164872881,0.8056571781128056 +onnx,zero,genus,5,per_model,242,52567,44776,52788,1.0,0.8384072898289766,0.8162946927109619,0.8384072898289766,0.8055261341500322 +onnx,zero,genus,5,common,242,52567,44776,52788,1.0,0.8384072898289766,0.8162946927109619,0.8384072898289766,0.8055261341500322 +torch-tta,zero,genus,5,per_model,244,52582,45986,52788,1.0,0.8801037705609983,0.8650981003057536,0.8801037705609983,0.8548827619376147 +torch-tta,zero,genus,5,common,242,52567,45974,52788,1.0,0.8812527981807469,0.8646719138069031,0.8812527981807469,0.8551819474190718 +onnx-tta,zero,genus,5,per_model,244,52582,45983,52788,1.0,0.8800690931903428,0.8647486446406456,0.8800690931903428,0.8545922539194751 +onnx-tta,zero,genus,5,common,242,52567,45971,52788,1.0,0.8812178342202511,0.864319570078447,0.8812178342202511,0.8548890385082203 +v2,zero,genus,10,per_model,221,52377,44619,52788,1.0,0.8242091812881619,0.8349759270593797,0.8242091812881619,0.8073029077289685 +v2,zero,genus,10,common,219,52349,44584,52788,1.0,0.8245607328459141,0.8365957191270255,0.8245607328459141,0.8083056265437976 +torch,zero,genus,10,per_model,224,52409,44500,52788,1.0,0.8420595718087585,0.8360051629538205,0.8420595718087585,0.8201488914933474 +torch,zero,genus,10,common,219,52349,44429,52788,1.0,0.8411427176898308,0.8376300487556162,0.8411427176898308,0.8202795396773236 +onnx,zero,genus,10,per_model,224,52409,44504,52788,1.0,0.8421419742582609,0.8355105285467141,0.8421419742582609,0.8198882695930891 +onnx,zero,genus,10,common,219,52349,44433,52788,1.0,0.8412270014737968,0.8371241213255166,0.8412270014737968,0.8200129675053699 +torch-tta,zero,genus,10,per_model,222,52387,45701,52788,1.0,0.887280993797046,0.8844442695435504,0.887280993797046,0.8716325700875605 +torch-tta,zero,genus,10,common,219,52349,45660,52788,1.0,0.8874178652560551,0.8854839580503524,0.8874178652560551,0.87205931213225 +onnx-tta,zero,genus,10,per_model,222,52387,45697,52788,1.0,0.8872428799301995,0.8840784199971973,0.8872428799301995,0.8713393860561334 +onnx-tta,zero,genus,10,common,219,52349,45656,52788,1.0,0.8873792292814436,0.8851130968663781,0.8873792292814436,0.8717621118812142 +v2,zero,genus,20,per_model,178,51193,43632,52788,1.0,0.8447796356264702,0.8683866368462851,0.8447796356264702,0.8409068314387458 +v2,zero,genus,20,common,174,51091,43532,52788,1.0,0.8468431185140185,0.8700188865290815,0.8468431185140185,0.8425197107045042 +torch,zero,genus,20,per_model,180,51668,43510,52788,1.0,0.851621812405513,0.8767852358251573,0.851621812405513,0.8500899477281391 +torch,zero,genus,20,common,174,51091,43120,52788,1.0,0.8572846967941111,0.879992285140897,0.8572846967941111,0.8551335240737619 +onnx,zero,genus,20,per_model,180,51668,43511,52788,1.0,0.8514718324234797,0.8766263792837025,0.8514718324234797,0.8499294903140182 +onnx,zero,genus,20,common,174,51091,43120,52788,1.0,0.8569783049191699,0.8797840089758777,0.8569783049191699,0.8548933267800543 +torch-tta,zero,genus,20,per_model,181,51690,44870,52788,1.0,0.8952201890577778,0.9132784407726137,0.8952201890577778,0.8933677281815686 +torch-tta,zero,genus,20,common,174,51091,44453,52788,1.0,0.899597539923479,0.9135145414371996,0.899597539923479,0.8960360409484771 +onnx-tta,zero,genus,20,per_model,181,51690,44864,52788,1.0,0.8951734416630821,0.9130696781092725,0.8951734416630821,0.8931898883411497 +onnx-tta,zero,genus,20,common,174,51091,44448,52788,1.0,0.8995623397519747,0.9132974690072101,0.8995623397519747,0.8958616326578391 +v2,zero,family,-1,per_model,64,52788,52788,52788,1.0,0.8435038466784595,0.2610923881260793,0.8435038466784595,0.26968398140672784 +torch,zero,family,-1,per_model,60,52788,52788,52788,1.0,0.8104767092433202,0.2753352445359579,0.8104767092433202,0.2804941988278224 +onnx,zero,family,-1,per_model,60,52788,52788,52788,1.0,0.8106325437578626,0.2756918885388057,0.8106325437578626,0.2808879232365722 +torch-tta,zero,family,-1,per_model,52,52788,52788,52788,1.0,0.86366836103727,0.3473357735776554,0.86366836103727,0.35919021330288153 +onnx-tta,zero,family,-1,per_model,52,52788,52788,52788,1.0,0.8636665098420966,0.34712795694828363,0.8636665098420966,0.359050677814834 +v2,zero,family,5,per_model,20,52783,52241,52788,1.0,0.8700294236802284,0.8073706420034539,0.8700294236802284,0.8237730542270191 +v2,zero,family,5,common,20,52783,52241,52788,1.0,0.8700294236802284,0.8073706420034539,0.8700294236802284,0.8237730542270191 +torch,zero,family,5,per_model,20,52783,51891,52788,1.0,0.8570482156298184,0.7593390669412071,0.8570482156298184,0.7831492631501338 +torch,zero,family,5,common,20,52783,51891,52788,1.0,0.8570482156298184,0.7593390669412071,0.8570482156298184,0.7831492631501338 +onnx,zero,family,5,per_model,20,52783,51893,52788,1.0,0.8572274253215421,0.7604089989497506,0.8572274253215421,0.7843304363763831 +onnx,zero,family,5,common,20,52783,51893,52788,1.0,0.8572274253215421,0.7604089989497506,0.8572274253215421,0.7843304363763831 +torch-tta,zero,family,5,per_model,20,52783,52402,52788,1.0,0.8932186151928605,0.8280730113019039,0.8932186151928605,0.8505612212541586 +torch-tta,zero,family,5,common,20,52783,52402,52788,1.0,0.8932186151928605,0.8280730113019039,0.8932186151928605,0.8505612212541586 +onnx-tta,zero,family,5,per_model,20,52783,52403,52788,1.0,0.8932164863184111,0.8275326880655373,0.8932164863184111,0.850198428985235 +onnx-tta,zero,family,5,common,20,52783,52403,52788,1.0,0.8932164863184111,0.8275326880655373,0.8932164863184111,0.850198428985235 +v2,zero,family,10,per_model,20,52783,52241,52788,1.0,0.8700294236802284,0.8073706420034539,0.8700294236802284,0.8237730542270191 +v2,zero,family,10,common,20,52783,52241,52788,1.0,0.8700294236802284,0.8073706420034539,0.8700294236802284,0.8237730542270191 +torch,zero,family,10,per_model,20,52783,51891,52788,1.0,0.8570482156298184,0.7593390669412071,0.8570482156298184,0.7831492631501338 +torch,zero,family,10,common,20,52783,51891,52788,1.0,0.8570482156298184,0.7593390669412071,0.8570482156298184,0.7831492631501338 +onnx,zero,family,10,per_model,20,52783,51893,52788,1.0,0.8572274253215421,0.7604089989497506,0.8572274253215421,0.7843304363763831 +onnx,zero,family,10,common,20,52783,51893,52788,1.0,0.8572274253215421,0.7604089989497506,0.8572274253215421,0.7843304363763831 +torch-tta,zero,family,10,per_model,20,52783,52402,52788,1.0,0.8932186151928605,0.8280730113019039,0.8932186151928605,0.8505612212541586 +torch-tta,zero,family,10,common,20,52783,52402,52788,1.0,0.8932186151928605,0.8280730113019039,0.8932186151928605,0.8505612212541586 +onnx-tta,zero,family,10,per_model,20,52783,52403,52788,1.0,0.8932164863184111,0.8275326880655373,0.8932164863184111,0.850198428985235 +onnx-tta,zero,family,10,common,20,52783,52403,52788,1.0,0.8932164863184111,0.8275326880655373,0.8932164863184111,0.850198428985235 +v2,zero,family,20,per_model,17,52742,52159,52788,1.0,0.8777980291519171,0.8618479765055044,0.8777980291519171,0.8634797826579268 +v2,zero,family,20,common,17,52742,52159,52788,1.0,0.8777980291519171,0.8618479765055044,0.8777980291519171,0.8634797826579268 +torch,zero,family,20,per_model,17,52742,51776,52788,1.0,0.8761006803143303,0.8444656509344528,0.8761006803143303,0.8502787174152917 +torch,zero,family,20,common,17,52742,51776,52788,1.0,0.8761006803143303,0.8444656509344528,0.8761006803143303,0.8502787174152917 +onnx,zero,family,20,per_model,17,52742,51781,52788,1.0,0.8763115152457701,0.8445713671430294,0.8763115152457701,0.8504835558317285 +onnx,zero,family,20,common,17,52742,51781,52788,1.0,0.8763115152457701,0.8445713671430294,0.8763115152457701,0.8504835558317285 +torch-tta,zero,family,20,per_model,17,52742,52332,52788,1.0,0.9186540915649681,0.8978901347538473,0.9186540915649681,0.9040916328480296 +torch-tta,zero,family,20,common,17,52742,52332,52788,1.0,0.9186540915649681,0.8978901347538473,0.9186540915649681,0.9040916328480296 +onnx-tta,zero,family,20,per_model,17,52742,52333,52788,1.0,0.9186515870067923,0.897254460358122,0.9186515870067923,0.903664818414002 +onnx-tta,zero,family,20,common,17,52742,52333,52788,1.0,0.9186515870067923,0.897254460358122,0.9186515870067923,0.903664818414002 +v2,optimized,species,-1,per_model,690,52788,36810,52788,0.6973175721754944,0.8465208024160925,0.6381169943670084,0.5418132969389368,0.4466755276813748 +torch,optimized,species,-1,per_model,654,52788,37381,52788,0.7081344244904145,0.8669405316273155,0.7028135267405738,0.5774611074285403,0.5081384528044552 +onnx,optimized,species,-1,per_model,650,52788,37191,52788,0.7045351216185497,0.8695378035260483,0.7088741319668206,0.5752968296743217,0.5099648536812272 +torch-tta,optimized,species,-1,per_model,641,52788,42843,52788,0.8116049102068652,0.8633843418309688,0.7190416496691577,0.6588299780195079,0.5661066449155471 +onnx-tta,optimized,species,-1,per_model,641,52788,42930,52788,0.8132530120481928,0.8635268756201978,0.7198655161183526,0.6615516920144863,0.5675578092246024 +v2,optimized,species,5,per_model,281,42875,31091,52788,0.6973175721754944,0.949227254623375,0.943736867068747,0.6916423088644161,0.7737956953842567 +v2,optimized,species,5,common,273,42787,31030,52788,0.6973175721754944,0.9523181631837667,0.9510141862019456,0.696639527553125,0.7800052421246759 +torch,optimized,species,5,per_model,288,44180,31486,52788,0.7081344244904145,0.9604545336634476,0.9622152512833568,0.7039086159930352,0.7910306156942064 +torch,optimized,species,5,common,273,42787,30983,52788,0.7081344244904145,0.9636278309815087,0.9627691640571292,0.7169541525627774,0.8016362227458123 +onnx,optimized,species,5,per_model,287,44173,31341,52788,0.7045351216185497,0.9610226296998533,0.9619757519565229,0.7010200481362973,0.7888306624960767 +onnx,optimized,species,5,common,273,42787,30851,52788,0.7045351216185497,0.9643815594419234,0.9628304211425756,0.7147377382773606,0.800104314691979 +torch-tta,optimized,species,5,per_model,299,44421,36047,52788,0.8116049102068652,0.9603653330244,0.9597405841266853,0.790768730570598,0.8516449621343269 +torch-tta,optimized,species,5,common,273,42787,35192,52788,0.8116049102068652,0.9639495772208692,0.9616309429747886,0.8034434173226027,0.8618831738738654 +onnx-tta,optimized,species,5,per_model,299,44421,36110,52788,0.8132530120481928,0.9601405781654884,0.9596554572863384,0.7921758700534698,0.8525263322194031 +onnx-tta,optimized,species,5,common,273,42787,35252,52788,0.8132530120481928,0.963707047522958,0.9615027455443487,0.8048549427987153,0.8627190954298332 +v2,optimized,species,10,per_model,243,42227,30743,52788,0.6973175721754944,0.953448505161714,0.9544450850263946,0.7134225852923751,0.7961537592407799 +v2,optimized,species,10,common,237,42021,30611,52788,0.6973175721754944,0.9552371110145412,0.9586140054758544,0.7164050701636104,0.8009004286169517 +torch,optimized,species,10,per_model,255,43584,31151,52788,0.7081344244904145,0.963686280781054,0.9676952538780558,0.7171112436175308,0.8061491380093966 +torch,optimized,species,10,common,237,42021,30528,52788,0.7081344244904145,0.9673296490095744,0.9672615516732053,0.7266753942187194,0.8138865890143704 +onnx,optimized,species,10,per_model,255,43584,31014,52788,0.7045351216185497,0.9644807475606031,0.9677553930474767,0.7146917879143063,0.8044523205064156 +onnx,optimized,species,10,common,237,42021,30399,52788,0.7045351216185497,0.9681978678690395,0.9673496769410929,0.7245547988604122,0.812427697268594 +torch-tta,optimized,species,10,per_model,272,44032,35745,52788,0.8116049102068652,0.96173064446984,0.9639011820682567,0.7946782620839412,0.8587308953151547 +torch-tta,optimized,species,10,common,237,42021,34617,52788,0.8116049102068652,0.9662994503676685,0.9671449526169773,0.8130146967116284,0.8731615665583466 +onnx-tta,optimized,species,10,per_model,272,44032,35808,52788,0.8132530120481928,0.9614835793859626,0.9638076051371401,0.7962250808537157,0.8596997543424995 +onnx-tta,optimized,species,10,common,237,42021,34676,52788,0.8132530120481928,0.9661761234598567,0.9669972821591288,0.8146008253728714,0.8740844405084152 +v2,optimized,species,20,per_model,190,40924,29917,52788,0.6973175721754944,0.9610844376490718,0.9546242144015308,0.720024084306013,0.8034606105897976 +v2,optimized,species,20,common,180,40455,29626,52788,0.6973175721754944,0.9646484348350589,0.9605971055104869,0.7264566019960785,0.8110366999373768 +torch,optimized,species,20,per_model,194,41945,30249,52788,0.7081344244904145,0.9726536166037543,0.9673028973830733,0.7249718216154226,0.8139613934096738 +torch,optimized,species,20,common,180,40455,29545,52788,0.7081344244904145,0.9744003816755382,0.9682799478546156,0.7355230038915617,0.8220522350709071 +onnx,optimized,species,20,per_model,193,41892,30094,52788,0.7045351216185497,0.9730113961424189,0.9672414097720884,0.7241073248627131,0.8134845543532351 +onnx,optimized,species,20,common,180,40455,29417,52788,0.7045351216185497,0.9749535854270197,0.9683959794573341,0.7328357084727255,0.8202403740616799 +torch-tta,optimized,species,20,per_model,208,42698,34800,52788,0.8116049102068652,0.9690231333557542,0.9664275821917379,0.8041659814144588,0.8667271886805571 +torch-tta,optimized,species,20,common,180,40455,33471,52788,0.8116049102068652,0.9745037354217521,0.9676455135705991,0.8221975995005899,0.8798559733558071 +onnx-tta,optimized,species,20,per_model,208,42698,34860,52788,0.8132530120481928,0.9690034400769387,0.9662594248129517,0.8055424722904401,0.8675612517319938 +onnx-tta,optimized,species,20,common,180,40455,33526,52788,0.8132530120481928,0.974385117261553,0.9674510808010985,0.8234979435636558,0.8805603057062933 +v2,optimized,genus,-1,per_model,379,52788,36853,52788,0.6981321512464954,0.9533632911945014,0.784792371905105,0.6176629588211429,0.5868633065886133 +torch,optimized,genus,-1,per_model,398,52788,39989,52788,0.7575395923315905,0.9547996220084877,0.745381822803767,0.678410498949023,0.6019267109931725 +onnx,optimized,genus,-1,per_model,395,52788,39784,52788,0.7536561339698417,0.9551874761942367,0.7523387061411551,0.6745698413302063,0.6043210367725153 +torch-tta,optimized,genus,-1,per_model,383,52788,44511,52788,0.8432030006819732,0.95774560113418,0.7891877764219916,0.7626880651777854,0.6776129515770071 +onnx-tta,optimized,genus,-1,per_model,384,52788,44504,52788,0.843070394786694,0.9578599395148406,0.7876914346408369,0.7626601078847843,0.67596735754951 +v2,optimized,genus,5,per_model,221,51350,34216,52788,0.6981321512464954,0.9716616552337888,0.9644034675161717,0.6868834008659555,0.7807696866753272 +v2,optimized,genus,5,common,215,46868,34160,52788,0.6981321512464954,0.9754975181801082,0.96822735165948,0.6927141276824689,0.7874852435844385 +torch,optimized,genus,5,per_model,226,47997,36422,52788,0.7575395923315905,0.970284104556389,0.9654305304648698,0.7349949980804276,0.8198300630906832 +torch,optimized,genus,5,common,215,46868,35966,52788,0.7575395923315905,0.9730526458225819,0.9696226974149172,0.7475533077376153,0.8310650157210921 +onnx,optimized,genus,5,per_model,226,47997,36257,52788,0.7536561339698417,0.9708040563009604,0.9665082137972658,0.7310313579815346,0.8173152189160264 +onnx,optimized,genus,5,common,215,46868,35808,52788,0.7536561339698417,0.9738759173936625,0.9708203215753252,0.7439396812388471,0.8289781701827873 +torch-tta,optimized,genus,5,per_model,232,48047,40448,52788,0.8432030006819732,0.9740978260964577,0.9682301236825241,0.8146523892286389,0.8726172137759266 +torch-tta,optimized,genus,5,common,215,46868,39827,52788,0.8432030006819732,0.9754640055183043,0.9744657384691411,0.8284961369731623,0.8857838500606219 +onnx-tta,optimized,genus,5,per_model,232,48047,40445,52788,0.843070394786694,0.9742496201535418,0.9681807012728565,0.8146135864340426,0.8725791077003775 +onnx-tta,optimized,genus,5,common,215,46868,39824,52788,0.843070394786694,0.975627801896181,0.9744124082410346,0.8284542660506211,0.885742730946541 +v2,optimized,genus,10,per_model,197,50958,34025,52788,0.6981321512464954,0.9707426742420079,0.9676850759993277,0.7030299586868274,0.7949775034079533 +v2,optimized,genus,10,common,192,46467,33937,52788,0.6981321512464954,0.9752941088049124,0.9772224666409167,0.7109088798148795,0.8054635075619051 +torch,optimized,genus,10,per_model,203,47662,36218,52788,0.7575395923315905,0.9725044668174535,0.973428506176096,0.7475181869995279,0.8320199105759429 +torch,optimized,genus,10,common,192,46467,35691,52788,0.7575395923315905,0.9735479156470631,0.9733069820326449,0.7535836525103417,0.83644361028291 +onnx,optimized,genus,10,per_model,202,47651,36048,52788,0.7536561339698417,0.973280111509321,0.9750664954245438,0.7440944617898129,0.8301947627142044 +onnx,optimized,genus,10,common,192,46467,35536,52788,0.7536561339698417,0.9741721892441434,0.9742219352236319,0.7503899701812965,0.834492264816495 +torch-tta,optimized,genus,10,per_model,213,47821,40290,52788,0.8432030006819732,0.9738984553007208,0.9728876041784816,0.8217613324322757,0.8806777740048471 +torch-tta,optimized,genus,10,common,192,46467,39511,52788,0.8432030006819732,0.9767219347209566,0.9780098953790074,0.8329662619360828,0.8901119825986873 +onnx-tta,optimized,genus,10,per_model,213,47821,40287,52788,0.843070394786694,0.9740637896727561,0.9728337731970597,0.8217190683555322,0.8806362687957985 +onnx-tta,optimized,genus,10,common,192,46467,39508,52788,0.843070394786694,0.9769053525399332,0.9779501766339919,0.8329193752259455,0.8900659377573991 +v2,optimized,genus,20,per_model,156,45483,33405,52788,0.6981321512464954,0.9843358498587619,0.9748388332981802,0.7242019498914946,0.8169005762983504 +v2,optimized,genus,20,common,152,45330,33296,52788,0.6981321512464954,0.9839236353813609,0.9778465660712192,0.7242368310515996,0.8183922505182741 +torch,optimized,genus,20,per_model,165,46690,35635,52788,0.7575395923315905,0.9810178296102066,0.9757921370967002,0.7571265698443955,0.8419323350469783 +torch,optimized,genus,20,common,152,45330,34996,52788,0.7575395923315905,0.983752937266044,0.9758140404693171,0.7677855297367047,0.8494275117330315 +onnx,optimized,genus,20,per_model,165,46690,35481,52788,0.7536561339698417,0.9817692866417445,0.9765223194080256,0.7541904615905834,0.8401795246684531 +onnx,optimized,genus,20,common,152,45330,34847,52788,0.7536561339698417,0.9843822049121461,0.9763221583019224,0.7646492402112083,0.847449368620922 +torch-tta,optimized,genus,20,per_model,173,46980,39700,52788,0.8432030006819732,0.9828021400489438,0.9770325613675723,0.8323906948783845,0.8906387985645831 +torch-tta,optimized,genus,20,common,152,45330,38714,52788,0.8432030006819732,0.9872680813408571,0.9795773240581996,0.847432505635241,0.9016662303355456 +onnx-tta,optimized,genus,20,per_model,173,46980,39697,52788,0.843070394786694,0.9827521780380808,0.976966283916457,0.8323386587607753,0.8905876967754076 +onnx-tta,optimized,genus,20,common,152,45330,38711,52788,0.843070394786694,0.9872112166837566,0.9795018898539696,0.8473732803171727,0.9016080684307602 +v2,optimized,family,-1,per_model,26,52788,40881,52788,0.7744373721300295,0.9963653352691595,0.841348645086206,0.6466603488658192,0.6545226053114057 +torch,optimized,family,-1,per_model,30,52788,38566,52788,0.7305827081912556,0.9932547854813464,0.74059226732527,0.6535073068400129,0.5807455159791289 +onnx,optimized,family,-1,per_model,30,52788,38672,52788,0.7325907403197697,0.9932599551447033,0.7406007419898425,0.6548532928566179,0.5815679236552637 +torch-tta,optimized,family,-1,per_model,27,52788,43336,52788,0.8209441539743881,0.9892254689058468,0.8402573230856973,0.7546408071160894,0.7073928412638565 +onnx-tta,optimized,family,-1,per_model,27,52788,43353,52788,0.8212661968629233,0.9892268920132548,0.8402600553286454,0.7551948103314396,0.7076764729156301 +v2,optimized,family,5,per_model,19,52770,40869,52788,0.7744373721300295,0.9957914408379742,0.9859850593239553,0.6876576692748175,0.8020952610694091 +v2,optimized,family,5,common,19,52770,40869,52788,0.7744373721300295,0.9957914408379742,0.9859850593239553,0.6876576692748175,0.8020952610694091 +torch,optimized,family,5,per_model,19,52770,38530,52788,0.7305827081912556,0.99218975160998,0.9900267939876928,0.7040432580775865,0.816089411195116 +torch,optimized,family,5,common,19,52770,38530,52788,0.7305827081912556,0.99218975160998,0.9900267939876928,0.7040432580775865,0.816089411195116 +onnx,optimized,family,5,per_model,19,52770,38636,52788,0.7325907403197697,0.9921957375359722,0.9900397290020405,0.7056726095713715,0.817387949631118 +onnx,optimized,family,5,common,19,52770,38636,52788,0.7325907403197697,0.9921957375359722,0.9900397290020405,0.7056726095713715,0.817387949631118 +torch-tta,optimized,family,5,per_model,19,52770,43325,52788,0.8209441539743881,0.9875242271541385,0.9919310736962174,0.7961036491000434,0.8802424586381118 +torch-tta,optimized,family,5,common,19,52770,43325,52788,0.8209441539743881,0.9875242271541385,0.9919310736962174,0.7961036491000434,0.8802424586381118 +onnx-tta,optimized,family,5,per_model,19,52770,43342,52788,0.8212661968629233,0.987525874962716,0.9919348125549885,0.796774284571257,0.8806455141432638 +onnx-tta,optimized,family,5,common,19,52770,43342,52788,0.8212661968629233,0.987525874962716,0.9919348125549885,0.796774284571257,0.8806455141432638 +v2,optimized,family,10,per_model,19,52770,40869,52788,0.7744373721300295,0.9957914408379742,0.9859850593239553,0.6876576692748175,0.8020952610694091 +v2,optimized,family,10,common,19,52770,40869,52788,0.7744373721300295,0.9957914408379742,0.9859850593239553,0.6876576692748175,0.8020952610694091 +torch,optimized,family,10,per_model,19,52770,38530,52788,0.7305827081912556,0.99218975160998,0.9900267939876928,0.7040432580775865,0.816089411195116 +torch,optimized,family,10,common,19,52770,38530,52788,0.7305827081912556,0.99218975160998,0.9900267939876928,0.7040432580775865,0.816089411195116 +onnx,optimized,family,10,per_model,19,52770,38636,52788,0.7325907403197697,0.9921957375359722,0.9900397290020405,0.7056726095713715,0.817387949631118 +onnx,optimized,family,10,common,19,52770,38636,52788,0.7325907403197697,0.9921957375359722,0.9900397290020405,0.7056726095713715,0.817387949631118 +torch-tta,optimized,family,10,per_model,19,52770,43325,52788,0.8209441539743881,0.9875242271541385,0.9919310736962174,0.7961036491000434,0.8802424586381118 +torch-tta,optimized,family,10,common,19,52770,43325,52788,0.8209441539743881,0.9875242271541385,0.9919310736962174,0.7961036491000434,0.8802424586381118 +onnx-tta,optimized,family,10,per_model,19,52770,43342,52788,0.8212661968629233,0.987525874962716,0.9919348125549885,0.796774284571257,0.8806455141432638 +onnx-tta,optimized,family,10,common,19,52770,43342,52788,0.8212661968629233,0.987525874962716,0.9919348125549885,0.796774284571257,0.8806455141432638 +v2,optimized,family,20,per_model,15,52686,40812,52788,0.7744373721300295,0.9946691583947672,0.9978777258613801,0.6871044763195309,0.8073961361904209 +v2,optimized,family,20,common,15,52686,40812,52788,0.7744373721300295,0.9946691583947672,0.9978777258613801,0.6871044763195309,0.8073961361904209 +torch,optimized,family,20,per_model,15,52686,38470,52788,0.7305827081912556,0.9967736853726413,0.99662653164367,0.6975420951522447,0.8137962822635083 +torch,optimized,family,20,common,15,52686,38470,52788,0.7305827081912556,0.9967736853726413,0.99662653164367,0.6975420951522447,0.8137962822635083 +onnx,optimized,family,20,per_model,15,52686,38576,52788,0.7325907403197697,0.9967812675455647,0.9966429159951768,0.6996059403777053,0.8154410976157778 +onnx,optimized,family,20,common,15,52686,38576,52788,0.7325907403197697,0.9967812675455647,0.9966429159951768,0.6996059403777053,0.8154410976157778 +torch-tta,optimized,family,20,per_model,16,52710,43281,52788,0.8209441539743881,0.9982058530788728,0.9952258423219504,0.8011208511634444,0.8854714289339141 +torch-tta,optimized,family,20,common,15,52686,43259,52788,0.8209441539743881,0.9980862432841311,0.9979378681737169,0.7961955745743408,0.8836332923121171 +onnx-tta,optimized,family,20,per_model,16,52710,43298,52788,0.8212661968629233,0.9982078098515587,0.995230282216741,0.8019172307855106,0.885950057346282 +onnx-tta,optimized,family,20,common,15,52686,43276,52788,0.8212661968629233,0.9980883305083292,0.9979426040614935,0.7970450461712113,0.8841438292853094 diff --git a/docs/assets/mambo-promoted-tail.json b/docs/assets/mambo-promoted-tail.json new file mode 100644 index 0000000..ff4f98b --- /dev/null +++ b/docs/assets/mambo-promoted-tail.json @@ -0,0 +1,47874 @@ +{ + "population": "reporting_partition", + "identities": { + "v2": "80144bd4f34d9705bcae1dad496ccf13a7160b5709139b34710e5d75a3252fed", + "torch": "80144bd4f34d9705bcae1dad496ccf13a7160b5709139b34710e5d75a3252fed", + "onnx": "80144bd4f34d9705bcae1dad496ccf13a7160b5709139b34710e5d75a3252fed", + "torch-tta": "80144bd4f34d9705bcae1dad496ccf13a7160b5709139b34710e5d75a3252fed", + "onnx-tta": "80144bd4f34d9705bcae1dad496ccf13a7160b5709139b34710e5d75a3252fed" + }, + "sources_sha256": { + "v2": "1381e2b24fa5a36574b4e1a0d9dfcfa41a5daabce6516e7451757f6ed96a5414", + "torch": "b6793f4f24ba092912a5d468a86f2f3402d1281a6e63190e623d1cadc13fc027", + "onnx": "b8624ec148e1d67d6685be4e79e35b990a7692e4109f306430ddfc015e3d543f", + "torch-tta": "52ff1ecff46d20c955b51c17db9bc51b7c4c763741999573eb09bb566e1d75dc", + "onnx-tta": "581928fd3578c35463770a036ff08e6035ee0276c3fac64673868a1ced542444" + }, + "revision": "70cc69adc05362863439277048e06386c1f885e1", + "policy": "Strictly > cutoff in both truth and accepted predictions; preserve all per-class FP/FN; macro reaggregation only", + "rows": [ + { + "model": "v2", + "scope": "zero", + "rank": "species", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "10055273", + "10638451", + "10844862", + "10922411", + "10982815", + "11052757", + "11080751", + "11287091", + "11418741", + "11478679", + "11571523", + "11598540", + "11728049", + "11962292", + "12089608", + "12135372", + "12253343", + "1731598", + "1731826", + "1732063", + "1732416", + "1732452", + "1732565", + "1733258", + "1733484", + "1734453", + "1734704", + "1734826", + "1735532", + "1735855", + "1736377", + "1736412", + "1736447", + "1736727", + "1736906", + "1737491", + "1737524", + "1737542", + "1737552", + "1737650", + "1737775", + "1737776", + "1737847", + "1738050", + "1738163", + "1738222", + "1738245", + "1738422", + "1738429", + "1739272", + "1739290", + "1739461", + "1739819", + "1739833", + "1739922", + "1739931", + "1739980", + "1740005", + "1740069", + "1740174", + "1740183", + "1740185", + "1740392", + "1741341", + "1741368", + "1741545", + "1741593", + "1741633", + "1741752", + "1742142", + "1742346", + "1743196", + "1743475", + "1743532", + "1743641", + "1743643", + "1743710", + "1743730", + "1743768", + "1743775", + "1743828", + "1744071", + "1744136", + "1744224", + "1744416", + "1744498", + "1744588", + "1744593", + "1744693", + "1744709", + "1744714", + "1744728", + "1744731", + "1744739", + "1744748", + "1744763", + "1744777", + "1744782", + "1744808", + "1744810", + "1744896", + "1745079", + "1745561", + "1745600", + "1745724", + "1745737", + "1746027", + "1746413", + "1746440", + "1746613", + "1746644", + "1746666", + "1746775", + "1746832", + "1746856", + "1746876", + "1746910", + "1747050", + "1748805", + "1748890", + "1749164", + "1749713", + "1749948", + "1751051", + "1751298", + "1751457", + "1758878", + "1759069", + "1759083", + "1759153", + "1759407", + "1759667", + "1759668", + "1760104", + "1760246", + "1760593", + "1760857", + "1760887", + "1760891", + "1761041", + "1761438", + "1761735", + "1761865", + "1762244", + "1762608", + "1763072", + "1763610", + "1764987", + "1765011", + "1765017", + "1765767", + "1765954", + "1766128", + "1766130", + "1766131", + "1766137", + "1766210", + "1766274", + "1766510", + "1766646", + "1766741", + "1766814", + "1767597", + "1767625", + "1767655", + "1768117", + "1768150", + "1768341", + "1768749", + "1768771", + "1769103", + "1769505", + "1769566", + "1769897", + "1769958", + "1770150", + "1770307", + "1770477", + "1770772", + "1770880", + "1771040", + "1771214", + "1771245", + "1771509", + "1771531", + "1771634", + "1771650", + "1771678", + "1771698", + "1771772", + "1772169", + "1772179", + "1772793", + "1772940", + "1772956", + "1773163", + "1773309", + "1773328", + "1774285", + "1775152", + "1775891", + "1776330", + "1776371", + "1776619", + "1776862", + "1777253", + "1778074", + "1778127", + "1778143", + "1778596", + "1779334", + "1779435", + "1779641", + "1779690", + "1780150", + "1780378", + "1781694", + "1782560", + "1782615", + "1782627", + "1782672", + "1782726", + "1782727", + "1782763", + "1782777", + "1782841", + "1782927", + "1782948", + "1783016", + "1783037", + "1783043", + "1784359", + "1784812", + "1784826", + "1785185", + "1785286", + "1785888", + "1785895", + "1786007", + "1786902", + "1786936", + "1787064", + "1787112", + "1787267", + "1787400", + "1787590", + "1787610", + "1787751", + "1787770", + "1787859", + "1788522", + "1788635", + "1788917", + "1789076", + "1789086", + "1789267", + "1789481", + "1789580", + "1789694", + "1789695", + "1789730", + "1789745", + "1789753", + "1789755", + "1789783", + "1789785", + "1789840", + "1789849", + "1789982", + "1790002", + "1790072", + "1790160", + "1790361", + "1790364", + "1790625", + "1790692", + "1790816", + "1791422", + "1792061", + "1792292", + "1792335", + "1792377", + "1792383", + "1792411", + "1792414", + "1792418", + "1792426", + "1793877", + "1793986", + "1794102", + "1794361", + "1794590", + "1795215", + "1795282", + "1795854", + "1795946", + "1795957", + "1796007", + "1796117", + "1796145", + "1796169", + "1796188", + "1796463", + "1796668", + "1796678", + "1797178", + "1797258", + "1797276", + "1797367", + "1797479", + "1798346", + "1798372", + "1798408", + "1798449", + "1798504", + "1798594", + "1798802", + "1798807", + "1798971", + "1798974", + "1798984", + "1799132", + "1799135", + "1799701", + "1799708", + "1799799", + "1800004", + "1800032", + "1801051", + "1801896", + "1802280", + "1803012", + "1803073", + "1804071", + "1804906", + "1807206", + "1807969", + "1808752", + "1810099", + "1811789", + "1811896", + "1812394", + "1813114", + "1819145", + "1819268", + "1819873", + "1820039", + "1820372", + "1820406", + "1821856", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822787", + "1822796", + "1822819", + "1822830", + "1823726", + "1824113", + "1825064", + "1825077", + "1825083", + "1825156", + "1825176", + "1825539", + "1825971", + "1825983", + "1826022", + "1826033", + "1827125", + "1827645", + "1828162", + "1828637", + "1829322", + "1829363", + "1829533", + "1829776", + "1829785", + "1830122", + "1830125", + "1830131", + "1830144", + "1830191", + "1830380", + "1830410", + "1830457", + "1830632", + "1830838", + "1830843", + "1830937", + "1830962", + "1831002", + "1831009", + "1831128", + "1831136", + "1831168", + "1831643", + "1831752", + "1832819", + "1832853", + "1835156", + "1835393", + "1835407", + "1835433", + "1835457", + "1836899", + "1837172", + "1837420", + "1838838", + "1838911", + "1839851", + "1839893", + "1840297", + "1840301", + "1840345", + "1840346", + "1840360", + "1840478", + "1840483", + "1840596", + "1841158", + "1841159", + "1841261", + "1841675", + "1841813", + "1841821", + "1842196", + "1845270", + "1845962", + "1846112", + "1846141", + "1846219", + "1846604", + "1847097", + "1847407", + "1847956", + "1848202", + "1848356", + "1848426", + "1848657", + "1848864", + "1848920", + "1849284", + "1849630", + "1850008", + "1850238", + "1850246", + "1850279", + "1850506", + "1850522", + "1850538", + "1850781", + "1850971", + "1851555", + "1852150", + "1852177", + "1852311", + "1852430", + "1852956", + "1852978", + "1853064", + "1853587", + "1854202", + "1854237", + "1854347", + "1854792", + "1856289", + "1856384", + "1856595", + "1856686", + "1856701", + "1856730", + "1856768", + "1856867", + "1857577", + "1857626", + "1857828", + "1857829", + "1857878", + "1857924", + "1857978", + "1858074", + "1858113", + "1858531", + "1858698", + "1858762", + "1859046", + "1859100", + "1860408", + "1860671", + "1860688", + "1860983", + "1860987", + "1861395", + "1861644", + "1861862", + "1862578", + "1862580", + "1862719", + "1862837", + "1864161", + "1864358", + "1864377", + "1864652", + "1866568", + "1869489", + "1869803", + "1869852", + "1869976", + "1870202", + "1870249", + "1870250", + "1870450", + "1870988", + "1871252", + "1871407", + "1871698", + "1871826", + "1872315", + "1872368", + "1872901", + "1873048", + "1873079", + "1873411", + "1874375", + "1874743", + "1875008", + "1875120", + "1875327", + "1875827", + "1875865", + "1875869", + "1875918", + "1875952", + "1876329", + "1876409", + "1876542", + "1876623", + "1876854", + "1877941", + "1877988", + "1878470", + "1878490", + "1878862", + "1878879", + "1878895", + "1878907", + "1879252", + "1879452", + "1879630", + "1879735", + "1879765", + "1879970", + "1880040", + "1880064", + "1880138", + "1880139", + "1880140", + "1881151", + "1881834", + "1882158", + "1882210", + "1882905", + "1883161", + "1883386", + "1884212", + "1884255", + "1884273", + "1884280", + "1884312", + "1884332", + "1884370", + "1884403", + "1884465", + "1884970", + "1886084", + "1886579", + "1886587", + "1887108", + "1887173", + "1887177", + "1887290", + "1887701", + "1888579", + "1888733", + "1888743", + "1888759", + "1888826", + "1889287", + "1889833", + "1889942", + "1890187", + "1890534", + "1890576", + "1890656", + "1891059", + "1891326", + "1891386", + "1891426", + "1891473", + "1891493", + "1891494", + "1898286", + "1898544", + "1909398", + "1911112", + "1918868", + "1920496", + "1920712", + "1924494", + "1929270", + "1938214", + "1938810", + "1939432", + "1939677", + "1939680", + "1940807", + "1941377", + "1941437", + "1951557", + "1951649", + "1951713", + "1952014", + "1952062", + "1952130", + "1952229", + "1952449", + "1952532", + "1952806", + "1952812", + "1954563", + "1956440", + "1956524", + "1956599", + "1956710", + "1957266", + "1957300", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1957854", + "1958024", + "1958323", + "1959383", + "1959395", + "1959467", + "1959682", + "1959914", + "1959919", + "1960617", + "1961040", + "1961068", + "1961190", + "1962204", + "1962265", + "1962268", + "1962434", + "1962516", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1963463", + "1964191", + "1964195", + "1964471", + "1964637", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965777", + "1965795", + "1965825", + "1965841", + "1965913", + "1965996", + "1966017", + "1966351", + "1966886", + "1967011", + "1967245", + "1967273", + "1967597", + "1967815", + "1968678", + "1968867", + "1969954", + "1970213", + "1970227", + "1970284", + "1971986", + "1972120", + "1972185", + "1972187", + "1972234", + "1972250", + "1972342", + "1972434", + "1972449", + "1973414", + "1973467", + "1975341", + "1975546", + "1975553", + "1975571", + "1975733", + "1975793", + "1975897", + "1975903", + "1976163", + "1977003", + "1977007", + "1977068", + "1978056", + "1978065", + "1978114", + "1978375", + "1978445", + "1978776", + "1978821", + "1978977", + "1979308", + "1979430", + "1979473", + "1979781", + "1980521", + "1981696", + "1982406", + "1982500", + "1982525", + "1982529", + "1982541", + "1982542", + "1982592", + "1982636", + "1982671", + "1982746", + "1982791", + "1982838", + "1982885", + "1983000", + "1983052", + "1983170", + "1983260", + "1983288", + "1983387", + "1983441", + "1983442", + "1983525", + "1983548", + "1983558", + "1983648", + "1983694", + "1983705", + "1983755", + "1983888", + "1983896", + "1983922", + "1983997", + "1983999", + "1984117", + "1984942", + "1984949", + "1984954", + "1985522", + "1986052", + "1986056", + "1986157", + "1986166", + "1986171", + "1986220", + "1986452", + "1986522", + "1986575", + "1987527", + "1987578", + "1987744", + "1988593", + "1988881", + "1989428", + "1990066", + "1990150", + "1990551", + "1991179", + "1991371", + "1992066", + "1992504", + "1993419", + "4299368", + "4302252", + "4302268", + "4522322", + "4522795", + "4522922", + "4522933", + "4523522", + "4523556", + "4523560", + "4523564", + "4523880", + "4523883", + "4523885", + "4524054", + "4524070", + "4524072", + "4524221", + "4524376", + "4524393", + "4524403", + "4524421", + "4524426", + "4524636", + "4524638", + "4524740", + "4524793", + "4525068", + "4525078", + "4525177", + "4525189", + "4525266", + "4525273", + "4525354", + "4525443", + "4525500", + "4525505", + "4525510", + "4525530", + "4525540", + "4525547", + "4525562", + "4526048", + "4527339", + "4527342", + "4527972", + "4528539", + "4528593", + "4528658", + "4528692", + "4528694", + "4529064", + "4529248", + "4529566", + "4529630", + "4529931", + "4530151", + "4530424", + "4530632", + "4531284", + "4531402", + "4531506", + "4531517", + "4531687", + "4531690", + "4531708", + "4531968", + "4531975", + "4532022", + "4532057", + "4532088", + "4532095", + "4532122", + "4532160", + "4532239", + "4532253", + "4532293", + "4532297", + "4532357", + "4532405", + "4532408", + "4532412", + "4532471", + "4532500", + "4532508", + "4532516", + "4532532", + "4532544", + "4532696", + "4532886", + "4532888", + "4532890", + "4533115", + "4533128", + "4533136", + "4533202", + "4533273", + "4533360", + "4533431", + "4533433", + "4533442", + "4533446", + "4533661", + "4533671", + "4533714", + "4533952", + "4534011", + "4534038", + "4534052", + "4534057", + "4534166", + "4534207", + "4534225", + "4534245", + "4534290", + "4534299", + "4534389", + "4534398", + "4534408", + "4534458", + "4534463", + "4534485", + "4534486", + "4534533", + "4534538", + "4534540", + "4534686", + "4534719", + "4534767", + "4534779", + "4534782", + "4534872", + "4534909", + "4534914", + "4535827", + "5101394", + "5101678", + "5101745", + "5102287", + "5102931", + "5102951", + "5102982", + "5103176", + "5103451", + "5103736", + "5104442", + "5104558", + "5104759", + "5104891", + "5105339", + "5109506", + "5109523", + "5109599", + "5109614", + "5109821", + "5110200", + "5110213", + "5110644", + "5110670", + "5110885", + "5111574", + "5112155", + "5112254", + "5112283", + "5112291", + "5112345", + "5112362", + "5113036", + "5113078", + "5113084", + "5113234", + "5113847", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5116416", + "5116475", + "5116609", + "5116669", + "5116698", + "5116850", + "5116941", + "5117049", + "5117089", + "5117189", + "5117399", + "5117400", + "5118892", + "5118904", + "5118996", + "5119143", + "5119245", + "5119513", + "5119808", + "5120396", + "5120675", + "5122293", + "5122439", + "5123221", + "5123339", + "5123394", + "5123461", + "5123922", + "5124007", + "5124029", + "5124143", + "5124233", + "5124911", + "5125689", + "5126052", + "5126212", + "5126217", + "5126680", + "5130682", + "5131910", + "5134098", + "5135513", + "5141493", + "5141677", + "5142870", + "5142971", + "5143048", + "5143129", + "5143147", + "5143380", + "5143453", + "5143477", + "5143651", + "5143675", + "5143697", + "5143944", + "5144190", + "5144426", + "5144534", + "5144543", + "5144677", + "5144721", + "5145009", + "5145136", + "5145269", + "5145409", + "5145870", + "5145965", + "5146342", + "5146379", + "5146412", + "5146496", + "5146510", + "5146559", + "5146611", + "5146677", + "5146837", + "5146946", + "5146961", + "5147038", + "5147039", + "5147062", + "5147171", + "5147193", + "5147208", + "5147232", + "5147245", + "5147478", + "5147608", + "5147638", + "5147681", + "5147827", + "5148247", + "5148248", + "5148286", + "5148394", + "5148424", + "5148436", + "5148462", + "5148475", + "5148486", + "5148487", + "5149414", + "5149438", + "5149474", + "5149499", + "5149665", + "5149746", + "5149768", + "5149839", + "5714973", + "5768880", + "5769028", + "5769062", + "5769068", + "5769072", + "5769164", + "5769191", + "5769272", + "5770913", + "5770942", + "5771259", + "5771350", + "5771982", + "5772063", + "5772129", + "5772172", + "5772176", + "5772178", + "5772180", + "5772186", + "5772196", + "5772199", + "5772202", + "5772205", + "5772206", + "5772210", + "5772269", + "5772309", + "5772349", + "5772351", + "5879654", + "5880147", + "5880533", + "5880545", + "5880550", + "5880552", + "5880559", + "5880563", + "5883985", + "5884571", + "5884851", + "6097214", + "6097225", + "6097228", + "6097236", + "6121184", + "6544687", + "7429212", + "7438067", + "7443518", + "7446048", + "7448174", + "7588222", + "7596232", + "7624468", + "7656811", + "7681733", + "7730078", + "7734292", + "7752082", + "7753668", + "7762841", + "7780930", + "7825213", + "7869346", + "7874258", + "7875265", + "7877231", + "7895336", + "7937573", + "7940536", + "7960566", + "7964262", + "7972792", + "7981386", + "7988195", + "7993353", + "8000103", + "8007222", + "8015895", + "8049830", + "8073674", + "8086347", + "8094357", + "8105817", + "8160782", + "8186212", + "8208583", + "8223165", + "8237343", + "8237987", + "8262357", + "8292872", + "8313553", + "8361848", + "8361973", + "8369868", + "8388883", + "8394261", + "8397564", + "8407461", + "8421569", + "8424972", + "8532380", + "8537359", + "8581601", + "8742426", + "8756768", + "8823068", + "8858121", + "8869900", + "9092175", + "9101339", + "9174377", + "9242559", + "9262981", + "9414984", + "9473121", + "9530977", + "9674732", + "9734171", + "9812211" + ], + "class_count": 1205, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.6856229575537315, + "precision": 0.2795792585422393, + "recall": 0.6856229575537315, + "f1": 0.2619881841444524 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "species", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "10055273", + "10113008", + "10450501", + "10580256", + "10638451", + "10787705", + "10844862", + "10915497", + "10982815", + "11080751", + "11287091", + "11418741", + "11478679", + "11571523", + "11576787", + "11598540", + "11728049", + "11962292", + "11992983", + "12089608", + "12135372", + "12253343", + "1730978", + "1731598", + "1731826", + "1731860", + "1732063", + "1732416", + "1732452", + "1732565", + "1732662", + "1732685", + "1733258", + "1733484", + "1734453", + "1734704", + "1734826", + "1735532", + "1735855", + "1736377", + "1736425", + "1736484", + "1736560", + "1736727", + "1736898", + "1736906", + "1737491", + "1737524", + "1737526", + "1737533", + "1737542", + "1737552", + "1737650", + "1737775", + "1737776", + "1737847", + "1738050", + "1738163", + "1738222", + "1738245", + "1738317", + "1738700", + "1738794", + "1738839", + "1739272", + "1739290", + "1739461", + "1739605", + "1739819", + "1739833", + "1739922", + "1739980", + "1739999", + "1740005", + "1740069", + "1740116", + "1740174", + "1740185", + "1740374", + "1740482", + "1740623", + "1741056", + "1741147", + "1741341", + "1741368", + "1741545", + "1741551", + "1741615", + "1741633", + "1741634", + "1741667", + "1741752", + "1741756", + "1742142", + "1742185", + "1742263", + "1742346", + "1743196", + "1743475", + "1743532", + "1743641", + "1743710", + "1743730", + "1743768", + "1743775", + "1743828", + "1743862", + "1743867", + "1743898", + "1744071", + "1744136", + "1744180", + "1744224", + "1744498", + "1744542", + "1744588", + "1744709", + "1744728", + "1744731", + "1744739", + "1744742", + "1744748", + "1744782", + "1744808", + "1744810", + "1744896", + "1744901", + "1745079", + "1745131", + "1745558", + "1745579", + "1745600", + "1745634", + "1745737", + "1746027", + "1746174", + "1746440", + "1746613", + "1746666", + "1746775", + "1746832", + "1746856", + "1746876", + "1746910", + "1748203", + "1748321", + "1748456", + "1748805", + "1748890", + "1748942", + "1749070", + "1749164", + "1749608", + "1749948", + "1750097", + "1751207", + "1751216", + "1751298", + "1751299", + "1751457", + "1758878", + "1759055", + "1759069", + "1759079", + "1759083", + "1759153", + "1759407", + "1759620", + "1759673", + "1759686", + "1760104", + "1760246", + "1760593", + "1760857", + "1760887", + "1760891", + "1761041", + "1761438", + "1761735", + "1761865", + "1762244", + "1763072", + "1763610", + "1764531", + "1764987", + "1765011", + "1765017", + "1765044", + "1765767", + "1765954", + "1766128", + "1766130", + "1766131", + "1766137", + "1766210", + "1766274", + "1766418", + "1766510", + "1766646", + "1766741", + "1766814", + "1767597", + "1767625", + "1767655", + "1768117", + "1768150", + "1768341", + "1768702", + "1769057", + "1769103", + "1769505", + "1769519", + "1769566", + "1769897", + "1769958", + "1770150", + "1770307", + "1770477", + "1770772", + "1770880", + "1771040", + "1771204", + "1771214", + "1771245", + "1771385", + "1771391", + "1771509", + "1771531", + "1771650", + "1771678", + "1771698", + "1771772", + "1772169", + "1772179", + "1772793", + "1772940", + "1772956", + "1773163", + "1773309", + "1773328", + "1775152", + "1775891", + "1776330", + "1776619", + "1776862", + "1777253", + "1778074", + "1778127", + "1778143", + "1778517", + "1778596", + "1779435", + "1779690", + "1780150", + "1780378", + "1781008", + "1781694", + "1782560", + "1782615", + "1782627", + "1782672", + "1782726", + "1782763", + "1782777", + "1782841", + "1782927", + "1782948", + "1783016", + "1783037", + "1783043", + "1783855", + "1784359", + "1784812", + "1784826", + "1784853", + "1785185", + "1785286", + "1785888", + "1785895", + "1786007", + "1786902", + "1787064", + "1787112", + "1787267", + "1787400", + "1787504", + "1787590", + "1787610", + "1787770", + "1788425", + "1788522", + "1788635", + "1789086", + "1789267", + "1789481", + "1789553", + "1789580", + "1789694", + "1789695", + "1789730", + "1789745", + "1789753", + "1789783", + "1789785", + "1789849", + "1789982", + "1790002", + "1790072", + "1790160", + "1790361", + "1790364", + "1790692", + "1790816", + "1791422", + "1791784", + "1792061", + "1792335", + "1792377", + "1792379", + "1792383", + "1792411", + "1792414", + "1792418", + "1792426", + "1793877", + "1793986", + "1794102", + "1794590", + "1795215", + "1795854", + "1796007", + "1796117", + "1796145", + "1796169", + "1796217", + "1796463", + "1796668", + "1796678", + "1797178", + "1797258", + "1797276", + "1797367", + "1797479", + "1798346", + "1798372", + "1798449", + "1798504", + "1798594", + "1798802", + "1798807", + "1798971", + "1798974", + "1798984", + "1799132", + "1799135", + "1799701", + "1799708", + "1800004", + "1800032", + "1801051", + "1801896", + "1802280", + "1803012", + "1803073", + "1804071", + "1804906", + "1807206", + "1807969", + "1808752", + "1810099", + "1811789", + "1811896", + "1812394", + "1813114", + "1814630", + "1819145", + "1819268", + "1819873", + "1820039", + "1820372", + "1820406", + "1821856", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822787", + "1822796", + "1822819", + "1822830", + "1823726", + "1824113", + "1825064", + "1825077", + "1825083", + "1825156", + "1825176", + "1825539", + "1825971", + "1825983", + "1826022", + "1826033", + "1827125", + "1827645", + "1828162", + "1828637", + "1829322", + "1829363", + "1829776", + "1829785", + "1830241", + "1830380", + "1830408", + "1830410", + "1830537", + "1830584", + "1830632", + "1830838", + "1830843", + "1830879", + "1830937", + "1830962", + "1831002", + "1831128", + "1831136", + "1831168", + "1831643", + "1831752", + "1831780", + "1832853", + "1833626", + "1835031", + "1835156", + "1835457", + "1836899", + "1837172", + "1837420", + "1837429", + "1838838", + "1838911", + "1838969", + "1839293", + "1839296", + "1839851", + "1839893", + "1840301", + "1840346", + "1840360", + "1840380", + "1840408", + "1840478", + "1840555", + "1840581", + "1841159", + "1841261", + "1841296", + "1841616", + "1841675", + "1841813", + "1845270", + "1845368", + "1845962", + "1845965", + "1846107", + "1846112", + "1846236", + "1846729", + "1847407", + "1847956", + "1848356", + "1848596", + "1848610", + "1848657", + "1848690", + "1848730", + "1848753", + "1848864", + "1848920", + "1849284", + "1849294", + "1849477", + "1849630", + "1849897", + "1850008", + "1850246", + "1850450", + "1850506", + "1850522", + "1850538", + "1850781", + "1850971", + "1851010", + "1851203", + "1851337", + "1851555", + "1852177", + "1852311", + "1852430", + "1852956", + "1852978", + "1853064", + "1853079", + "1853587", + "1853723", + "1854202", + "1854237", + "1854287", + "1854347", + "1854792", + "1856005", + "1856289", + "1856595", + "1856620", + "1856658", + "1856686", + "1856691", + "1856701", + "1856730", + "1856867", + "1857577", + "1857626", + "1857828", + "1857829", + "1857878", + "1857924", + "1857978", + "1858074", + "1858113", + "1858163", + "1858531", + "1858698", + "1858775", + "1859046", + "1859305", + "1860408", + "1860621", + "1860628", + "1860668", + "1860688", + "1860768", + "1860852", + "1860987", + "1861031", + "1861395", + "1861644", + "1862578", + "1862580", + "1862719", + "1862837", + "1864161", + "1864358", + "1864377", + "1864652", + "1866568", + "1867820", + "1869478", + "1869489", + "1869512", + "1869803", + "1869976", + "1870202", + "1870249", + "1870250", + "1870450", + "1870988", + "1871160", + "1871252", + "1871407", + "1871698", + "1871826", + "1872315", + "1872368", + "1872901", + "1873079", + "1873411", + "1874192", + "1874211", + "1874375", + "1875008", + "1875120", + "1875327", + "1875631", + "1875633", + "1875827", + "1875865", + "1875869", + "1875918", + "1875952", + "1876329", + "1876409", + "1876542", + "1876854", + "1877341", + "1877941", + "1877988", + "1878470", + "1878490", + "1878782", + "1878862", + "1878879", + "1878895", + "1878907", + "1878939", + "1879252", + "1879452", + "1879630", + "1879655", + "1879735", + "1879970", + "1880040", + "1880062", + "1880064", + "1880104", + "1880138", + "1880139", + "1880140", + "1880143", + "1881151", + "1881603", + "1881834", + "1882158", + "1882210", + "1882557", + "1882905", + "1883161", + "1883386", + "1884212", + "1884255", + "1884273", + "1884332", + "1884370", + "1884403", + "1884465", + "1884970", + "1886084", + "1886320", + "1886579", + "1886587", + "1887108", + "1887173", + "1887290", + "1887701", + "1888579", + "1888733", + "1888743", + "1888759", + "1888826", + "1889833", + "1889942", + "1890187", + "1890534", + "1890576", + "1890656", + "1890703", + "1890772", + "1891059", + "1891326", + "1891386", + "1891426", + "1891473", + "1891493", + "1891494", + "1911112", + "1918868", + "1920496", + "1920712", + "1926260", + "1939432", + "1939658", + "1939677", + "1940510", + "1940807", + "1941377", + "1951557", + "1951649", + "1951713", + "1952014", + "1952062", + "1952130", + "1952229", + "1952449", + "1952532", + "1952806", + "1952812", + "1954563", + "1956440", + "1956524", + "1956599", + "1957266", + "1957300", + "1957570", + "1957572", + "1957632", + "1957816", + "1957845", + "1957852", + "1958024", + "1958323", + "1959383", + "1959395", + "1959467", + "1959914", + "1959919", + "1960617", + "1961040", + "1961068", + "1961190", + "1962204", + "1962265", + "1962268", + "1962434", + "1962516", + "1962636", + "1962860", + "1962990", + "1963011", + "1963306", + "1963446", + "1963463", + "1964191", + "1964195", + "1964471", + "1964637", + "1964653", + "1964657", + "1965166", + "1965208", + "1965345", + "1965763", + "1965777", + "1965795", + "1965810", + "1965825", + "1965841", + "1965913", + "1965996", + "1966017", + "1966351", + "1966886", + "1967011", + "1967245", + "1967273", + "1967597", + "1967815", + "1968678", + "1968867", + "1969291", + "1969954", + "1970213", + "1970227", + "1970284", + "1971888", + "1972120", + "1972185", + "1972187", + "1972234", + "1972250", + "1972278", + "1972342", + "1972377", + "1972434", + "1972449", + "1973414", + "1973467", + "1975341", + "1975546", + "1975553", + "1975571", + "1975793", + "1975897", + "1975903", + "1976163", + "1977003", + "1977007", + "1977068", + "1978056", + "1978065", + "1978114", + "1978375", + "1978445", + "1978776", + "1978821", + "1978977", + "1979308", + "1979430", + "1979473", + "1979781", + "1980521", + "1981696", + "1982406", + "1982500", + "1982525", + "1982529", + "1982541", + "1982542", + "1982592", + "1982636", + "1982671", + "1982746", + "1982791", + "1982838", + "1982885", + "1983000", + "1983170", + "1983260", + "1983288", + "1983387", + "1983441", + "1983442", + "1983525", + "1983548", + "1983558", + "1983648", + "1983694", + "1983705", + "1983755", + "1983888", + "1983896", + "1983922", + "1983997", + "1983999", + "1984117", + "1984734", + "1984942", + "1984954", + "1985522", + "1986052", + "1986056", + "1986157", + "1986166", + "1986171", + "1986220", + "1986367", + "1986452", + "1986522", + "1986575", + "1987527", + "1987744", + "1988593", + "1988602", + "1988684", + "1988881", + "1989428", + "1990066", + "1990150", + "1990551", + "1991179", + "1991371", + "1992066", + "1992504", + "1993419", + "4299576", + "4302252", + "4302268", + "4522322", + "4522795", + "4522886", + "4522911", + "4522916", + "4522922", + "4523522", + "4523556", + "4523564", + "4523725", + "4523880", + "4523883", + "4523885", + "4524054", + "4524072", + "4524221", + "4524376", + "4524393", + "4524403", + "4524421", + "4524426", + "4524636", + "4524638", + "4524740", + "4524793", + "4524951", + "4525068", + "4525078", + "4525189", + "4525266", + "4525354", + "4525369", + "4525420", + "4525425", + "4525443", + "4525500", + "4525505", + "4525510", + "4525530", + "4525540", + "4525547", + "4525557", + "4525562", + "4525610", + "4526048", + "4526050", + "4527339", + "4527342", + "4527957", + "4527972", + "4528593", + "4528692", + "4528818", + "4529064", + "4529248", + "4529566", + "4529630", + "4530002", + "4530151", + "4530424", + "4531158", + "4531284", + "4531402", + "4531506", + "4531517", + "4531687", + "4531690", + "4531708", + "4531713", + "4531968", + "4531975", + "4532022", + "4532050", + "4532057", + "4532095", + "4532122", + "4532160", + "4532239", + "4532253", + "4532293", + "4532297", + "4532357", + "4532412", + "4532471", + "4532493", + "4532500", + "4532516", + "4532532", + "4532534", + "4532544", + "4532696", + "4532811", + "4532886", + "4532888", + "4532890", + "4533115", + "4533136", + "4533202", + "4533273", + "4533360", + "4533431", + "4533433", + "4533442", + "4533446", + "4533661", + "4533671", + "4533714", + "4533952", + "4534011", + "4534038", + "4534052", + "4534057", + "4534166", + "4534207", + "4534225", + "4534290", + "4534299", + "4534389", + "4534398", + "4534408", + "4534458", + "4534463", + "4534485", + "4534533", + "4534538", + "4534540", + "4534686", + "4534719", + "4534767", + "4534872", + "4534909", + "4534914", + "4535817", + "4535827", + "4536483", + "5101394", + "5101678", + "5101745", + "5102628", + "5102951", + "5102982", + "5103066", + "5103121", + "5103185", + "5103451", + "5103736", + "5103998", + "5104056", + "5104442", + "5104558", + "5104641", + "5104781", + "5104882", + "5104891", + "5104903", + "5105339", + "5109506", + "5109523", + "5109661", + "5109821", + "5110200", + "5110213", + "5110644", + "5110670", + "5110885", + "5111574", + "5112155", + "5112254", + "5112283", + "5112291", + "5112336", + "5112345", + "5112362", + "5113036", + "5113078", + "5113084", + "5113234", + "5113847", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5116416", + "5116475", + "5116609", + "5116669", + "5116698", + "5116850", + "5116941", + "5117049", + "5117089", + "5117189", + "5117399", + "5117400", + "5118892", + "5118904", + "5118996", + "5119143", + "5119245", + "5119513", + "5120396", + "5120465", + "5120668", + "5120675", + "5120767", + "5121040", + "5121177", + "5121517", + "5121737", + "5122439", + "5123042", + "5123221", + "5123339", + "5123394", + "5123461", + "5123922", + "5124007", + "5124029", + "5124143", + "5124233", + "5124911", + "5125689", + "5126052", + "5126212", + "5126217", + "5126675", + "5126680", + "5134667", + "5142870", + "5142971", + "5143048", + "5143129", + "5143147", + "5143380", + "5143453", + "5143477", + "5143651", + "5143675", + "5143697", + "5143944", + "5143947", + "5144190", + "5144426", + "5144534", + "5144543", + "5144677", + "5144721", + "5145009", + "5145136", + "5145186", + "5145269", + "5145409", + "5145965", + "5146342", + "5146379", + "5146412", + "5146496", + "5146510", + "5146559", + "5146611", + "5146659", + "5146677", + "5146837", + "5146883", + "5146946", + "5146961", + "5147038", + "5147039", + "5147062", + "5147150", + "5147171", + "5147193", + "5147208", + "5147232", + "5147245", + "5147478", + "5147608", + "5147681", + "5147827", + "5147834", + "5148247", + "5148248", + "5148286", + "5148394", + "5148424", + "5148436", + "5148462", + "5148475", + "5148486", + "5148487", + "5149414", + "5149438", + "5149474", + "5149665", + "5149746", + "5149820", + "5149836", + "5149839", + "5714973", + "5768880", + "5769028", + "5769062", + "5769068", + "5769072", + "5769164", + "5769191", + "5769272", + "5769709", + "5770913", + "5770922", + "5770942", + "5771230", + "5771236", + "5771259", + "5771350", + "5771357", + "5771982", + "5772063", + "5772129", + "5772176", + "5772178", + "5772186", + "5772196", + "5772202", + "5772205", + "5772206", + "5772210", + "5772269", + "5772349", + "5772351", + "5804895", + "5879654", + "5880147", + "5880512", + "5880533", + "5880545", + "5880550", + "5880552", + "5880559", + "5880563", + "5883985", + "5884571", + "5884851", + "5976947", + "6097214", + "6097225", + "6097228", + "6097234", + "6097236", + "6121184", + "6544687", + "7429212", + "7438067", + "7443518", + "7446048", + "7448174", + "7466487", + "7588222", + "7596232", + "7624468", + "7624494", + "7656811", + "7661023", + "7681733", + "7725644", + "7730078", + "7734292", + "7752082", + "7753668", + "7761138", + "7780930", + "7825213", + "7874258", + "7875265", + "7877231", + "7895336", + "7921916", + "7937573", + "7940536", + "7960566", + "7964262", + "7972792", + "7976145", + "7981386", + "7993353", + "8000103", + "8007222", + "8015612", + "8015895", + "8049830", + "8086347", + "8094357", + "8105817", + "8186212", + "8200050", + "8208583", + "8223165", + "8237343", + "8237987", + "8244266", + "8253467", + "8262357", + "8292872", + "8313553", + "8329661", + "8345820", + "8361848", + "8361973", + "8388883", + "8394261", + "8397564", + "8407461", + "8421569", + "8424972", + "8532380", + "8537359", + "8581601", + "8632989", + "8691947", + "8708745", + "8742426", + "8756768", + "8856895", + "8858121", + "8890502", + "9101339", + "9242559", + "9262981", + "9400895", + "9473121", + "9674732", + "9734171", + "9812211" + ], + "class_count": 1289, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.7135646156794592, + "precision": 0.2688723997356787, + "recall": 0.7135646156794592, + "f1": 0.25928693173615297 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "species", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "10055273", + "10113008", + "10450501", + "10580256", + "10638451", + "10787705", + "10844862", + "10915497", + "10982815", + "11080751", + "11287091", + "11418741", + "11478679", + "11571523", + "11576787", + "11598540", + "11728049", + "11962292", + "11992983", + "12089608", + "12135372", + "12253343", + "1730978", + "1731598", + "1731826", + "1731860", + "1732063", + "1732416", + "1732452", + "1732565", + "1732662", + "1732685", + "1733258", + "1733484", + "1734453", + "1734704", + "1734826", + "1735532", + "1735855", + "1736377", + "1736425", + "1736484", + "1736560", + "1736727", + "1736898", + "1736906", + "1737491", + "1737524", + "1737526", + "1737533", + "1737542", + "1737552", + "1737650", + "1737775", + "1737776", + "1737847", + "1738050", + "1738163", + "1738222", + "1738245", + "1738317", + "1738700", + "1738794", + "1738839", + "1739272", + "1739290", + "1739461", + "1739605", + "1739819", + "1739833", + "1739922", + "1739980", + "1739999", + "1740005", + "1740069", + "1740116", + "1740174", + "1740185", + "1740374", + "1740482", + "1740623", + "1741056", + "1741147", + "1741341", + "1741368", + "1741545", + "1741551", + "1741615", + "1741633", + "1741634", + "1741667", + "1741752", + "1741756", + "1742142", + "1742185", + "1742263", + "1742346", + "1743196", + "1743475", + "1743532", + "1743641", + "1743710", + "1743730", + "1743768", + "1743775", + "1743828", + "1743862", + "1743867", + "1743898", + "1744071", + "1744136", + "1744180", + "1744224", + "1744498", + "1744542", + "1744588", + "1744709", + "1744728", + "1744731", + "1744739", + "1744742", + "1744748", + "1744782", + "1744808", + "1744810", + "1744896", + "1744901", + "1745079", + "1745131", + "1745558", + "1745579", + "1745600", + "1745634", + "1745737", + "1746027", + "1746174", + "1746440", + "1746613", + "1746666", + "1746775", + "1746832", + "1746856", + "1746876", + "1746910", + "1748203", + "1748321", + "1748456", + "1748805", + "1748890", + "1748942", + "1749070", + "1749164", + "1749608", + "1749948", + "1750097", + "1751207", + "1751216", + "1751298", + "1751299", + "1751457", + "1758878", + "1759055", + "1759069", + "1759079", + "1759083", + "1759153", + "1759407", + "1759620", + "1759673", + "1759686", + "1760104", + "1760246", + "1760593", + "1760857", + "1760887", + "1760891", + "1761041", + "1761438", + "1761735", + "1761865", + "1762244", + "1763072", + "1763610", + "1764531", + "1764987", + "1765011", + "1765017", + "1765044", + "1765767", + "1765954", + "1766128", + "1766130", + "1766131", + "1766137", + "1766210", + "1766274", + "1766418", + "1766510", + "1766646", + "1766741", + "1766814", + "1767597", + "1767625", + "1767655", + "1768117", + "1768150", + "1768341", + "1768702", + "1769057", + "1769103", + "1769505", + "1769519", + "1769566", + "1769897", + "1769958", + "1770150", + "1770307", + "1770477", + "1770772", + "1770880", + "1771040", + "1771204", + "1771214", + "1771245", + "1771385", + "1771391", + "1771509", + "1771531", + "1771650", + "1771678", + "1771698", + "1771772", + "1772169", + "1772179", + "1772793", + "1772940", + "1772956", + "1773163", + "1773309", + "1773328", + "1775152", + "1775891", + "1776330", + "1776619", + "1776862", + "1777253", + "1778074", + "1778127", + "1778143", + "1778517", + "1778596", + "1779435", + "1779690", + "1780150", + "1780378", + "1781008", + "1781694", + "1782560", + "1782615", + "1782627", + "1782672", + "1782726", + "1782763", + "1782777", + "1782841", + "1782927", + "1782948", + "1783016", + "1783037", + "1783043", + "1783855", + "1784359", + "1784812", + "1784826", + "1784853", + "1785185", + "1785286", + "1785888", + "1785895", + "1786007", + "1786902", + "1787064", + "1787112", + "1787267", + "1787400", + "1787504", + "1787590", + "1787610", + "1787770", + "1788425", + "1788522", + "1788635", + "1789086", + "1789267", + "1789481", + "1789553", + "1789580", + "1789694", + "1789695", + "1789730", + "1789745", + "1789753", + "1789783", + "1789785", + "1789849", + "1789982", + "1790002", + "1790072", + "1790160", + "1790361", + "1790364", + "1790692", + "1790816", + "1791422", + "1791784", + "1792061", + "1792335", + "1792377", + "1792379", + "1792383", + "1792411", + "1792414", + "1792418", + "1792426", + "1793877", + "1793986", + "1794102", + "1794590", + "1795215", + "1795854", + "1796007", + "1796117", + "1796145", + "1796169", + "1796217", + "1796463", + "1796668", + "1796678", + "1797178", + "1797258", + "1797276", + "1797367", + "1797479", + "1798346", + "1798372", + "1798449", + "1798504", + "1798594", + "1798802", + "1798807", + "1798971", + "1798974", + "1798984", + "1799132", + "1799135", + "1799701", + "1799708", + "1800004", + "1800032", + "1801051", + "1801896", + "1802280", + "1803012", + "1803073", + "1804071", + "1804906", + "1807206", + "1807969", + "1808752", + "1810099", + "1811789", + "1811896", + "1812394", + "1813114", + "1814630", + "1819145", + "1819268", + "1819873", + "1820039", + "1820372", + "1820406", + "1821856", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822787", + "1822796", + "1822819", + "1822830", + "1823726", + "1824113", + "1825064", + "1825077", + "1825083", + "1825156", + "1825176", + "1825539", + "1825971", + "1825983", + "1826022", + "1826033", + "1827125", + "1827645", + "1828162", + "1828637", + "1829322", + "1829363", + "1829776", + "1829785", + "1830241", + "1830380", + "1830408", + "1830410", + "1830537", + "1830584", + "1830632", + "1830838", + "1830843", + "1830879", + "1830937", + "1830962", + "1831002", + "1831128", + "1831136", + "1831168", + "1831643", + "1831752", + "1831780", + "1832853", + "1833626", + "1835031", + "1835156", + "1835457", + "1836899", + "1837172", + "1837420", + "1837429", + "1838838", + "1838911", + "1838969", + "1839293", + "1839296", + "1839851", + "1839893", + "1840301", + "1840346", + "1840360", + "1840380", + "1840408", + "1840478", + "1840555", + "1840581", + "1841159", + "1841261", + "1841296", + "1841616", + "1841675", + "1841813", + "1845270", + "1845368", + "1845962", + "1845965", + "1846107", + "1846112", + "1846236", + "1846729", + "1847407", + "1847956", + "1848356", + "1848596", + "1848610", + "1848636", + "1848657", + "1848730", + "1848753", + "1848864", + "1848920", + "1849284", + "1849294", + "1849477", + "1849630", + "1849897", + "1850008", + "1850246", + "1850450", + "1850506", + "1850522", + "1850538", + "1850781", + "1850971", + "1851010", + "1851203", + "1851337", + "1851555", + "1852177", + "1852311", + "1852430", + "1852956", + "1852978", + "1853064", + "1853079", + "1853587", + "1853723", + "1854202", + "1854237", + "1854287", + "1854347", + "1854792", + "1856005", + "1856289", + "1856595", + "1856620", + "1856658", + "1856686", + "1856691", + "1856701", + "1856730", + "1856867", + "1857577", + "1857626", + "1857828", + "1857829", + "1857878", + "1857924", + "1857978", + "1858074", + "1858113", + "1858163", + "1858531", + "1858698", + "1858775", + "1859046", + "1859305", + "1860408", + "1860621", + "1860628", + "1860668", + "1860688", + "1860768", + "1860852", + "1860987", + "1861031", + "1861395", + "1861644", + "1862578", + "1862580", + "1862719", + "1862837", + "1864161", + "1864358", + "1864377", + "1864652", + "1866568", + "1867820", + "1869478", + "1869489", + "1869512", + "1869803", + "1869976", + "1870202", + "1870249", + "1870250", + "1870450", + "1870988", + "1871160", + "1871252", + "1871407", + "1871698", + "1871826", + "1872315", + "1872368", + "1872901", + "1873079", + "1873411", + "1874192", + "1874211", + "1874375", + "1875008", + "1875120", + "1875327", + "1875631", + "1875633", + "1875827", + "1875865", + "1875869", + "1875918", + "1875952", + "1876329", + "1876409", + "1876542", + "1876854", + "1877341", + "1877941", + "1877988", + "1878470", + "1878490", + "1878782", + "1878862", + "1878879", + "1878895", + "1878907", + "1878939", + "1879252", + "1879452", + "1879630", + "1879655", + "1879735", + "1879970", + "1880040", + "1880062", + "1880064", + "1880104", + "1880138", + "1880139", + "1880140", + "1880143", + "1881151", + "1881603", + "1881834", + "1882158", + "1882210", + "1882557", + "1882905", + "1883161", + "1883386", + "1884212", + "1884255", + "1884273", + "1884332", + "1884370", + "1884403", + "1884465", + "1884970", + "1886084", + "1886320", + "1886579", + "1886587", + "1887108", + "1887173", + "1887290", + "1887701", + "1888579", + "1888733", + "1888743", + "1888759", + "1888826", + "1889833", + "1889942", + "1890187", + "1890534", + "1890576", + "1890656", + "1890703", + "1890772", + "1891059", + "1891326", + "1891386", + "1891426", + "1891473", + "1891493", + "1891494", + "1911112", + "1918868", + "1920496", + "1920712", + "1926260", + "1939432", + "1939658", + "1939677", + "1940510", + "1940807", + "1941377", + "1951557", + "1951649", + "1951713", + "1952014", + "1952062", + "1952130", + "1952229", + "1952449", + "1952532", + "1952806", + "1952812", + "1954563", + "1956440", + "1956524", + "1956599", + "1957266", + "1957300", + "1957570", + "1957572", + "1957632", + "1957816", + "1957845", + "1957852", + "1958024", + "1958323", + "1959383", + "1959395", + "1959467", + "1959914", + "1959919", + "1960617", + "1961040", + "1961068", + "1961190", + "1962204", + "1962265", + "1962268", + "1962434", + "1962516", + "1962636", + "1962860", + "1962990", + "1963011", + "1963306", + "1963446", + "1963463", + "1964191", + "1964195", + "1964471", + "1964637", + "1964653", + "1964657", + "1965166", + "1965208", + "1965345", + "1965763", + "1965777", + "1965795", + "1965810", + "1965825", + "1965841", + "1965913", + "1965996", + "1966017", + "1966351", + "1966886", + "1967011", + "1967245", + "1967273", + "1967597", + "1967815", + "1968678", + "1968867", + "1969291", + "1969954", + "1970213", + "1970227", + "1970284", + "1971888", + "1972120", + "1972185", + "1972187", + "1972234", + "1972250", + "1972278", + "1972342", + "1972377", + "1972434", + "1972449", + "1973414", + "1973467", + "1975341", + "1975546", + "1975553", + "1975571", + "1975793", + "1975897", + "1975903", + "1976163", + "1977003", + "1977007", + "1977068", + "1978056", + "1978065", + "1978114", + "1978375", + "1978445", + "1978776", + "1978821", + "1978977", + "1979308", + "1979430", + "1979473", + "1979781", + "1980521", + "1981696", + "1982406", + "1982500", + "1982525", + "1982529", + "1982541", + "1982542", + "1982592", + "1982636", + "1982671", + "1982746", + "1982791", + "1982838", + "1982885", + "1983000", + "1983170", + "1983260", + "1983288", + "1983387", + "1983441", + "1983442", + "1983525", + "1983548", + "1983558", + "1983648", + "1983694", + "1983705", + "1983755", + "1983888", + "1983896", + "1983922", + "1983997", + "1983999", + "1984117", + "1984734", + "1984942", + "1984954", + "1985522", + "1986052", + "1986056", + "1986157", + "1986166", + "1986171", + "1986220", + "1986367", + "1986452", + "1986522", + "1986575", + "1987527", + "1987744", + "1988593", + "1988602", + "1988684", + "1988881", + "1989428", + "1990066", + "1990150", + "1990551", + "1991179", + "1991371", + "1992066", + "1992504", + "1993419", + "4299576", + "4302252", + "4302268", + "4522322", + "4522795", + "4522886", + "4522911", + "4522916", + "4522922", + "4523522", + "4523556", + "4523564", + "4523725", + "4523880", + "4523883", + "4523885", + "4524054", + "4524072", + "4524221", + "4524376", + "4524393", + "4524403", + "4524421", + "4524426", + "4524636", + "4524638", + "4524740", + "4524793", + "4524951", + "4525068", + "4525078", + "4525189", + "4525266", + "4525354", + "4525369", + "4525420", + "4525425", + "4525443", + "4525500", + "4525505", + "4525510", + "4525530", + "4525540", + "4525547", + "4525557", + "4525562", + "4525610", + "4526048", + "4526050", + "4527339", + "4527342", + "4527957", + "4527972", + "4528593", + "4528692", + "4528818", + "4529064", + "4529248", + "4529566", + "4529630", + "4530002", + "4530151", + "4530424", + "4531158", + "4531284", + "4531402", + "4531506", + "4531517", + "4531687", + "4531690", + "4531708", + "4531713", + "4531968", + "4531975", + "4532022", + "4532050", + "4532057", + "4532095", + "4532122", + "4532160", + "4532239", + "4532253", + "4532293", + "4532297", + "4532357", + "4532412", + "4532471", + "4532493", + "4532500", + "4532516", + "4532532", + "4532534", + "4532544", + "4532696", + "4532811", + "4532886", + "4532888", + "4532890", + "4533115", + "4533136", + "4533202", + "4533273", + "4533360", + "4533431", + "4533433", + "4533442", + "4533446", + "4533661", + "4533671", + "4533714", + "4533952", + "4534011", + "4534038", + "4534052", + "4534057", + "4534166", + "4534207", + "4534225", + "4534290", + "4534299", + "4534389", + "4534398", + "4534408", + "4534458", + "4534463", + "4534485", + "4534533", + "4534538", + "4534540", + "4534686", + "4534719", + "4534767", + "4534872", + "4534909", + "4534914", + "4535817", + "4535827", + "4536483", + "5101394", + "5101678", + "5101745", + "5102628", + "5102951", + "5102982", + "5103066", + "5103121", + "5103185", + "5103451", + "5103736", + "5103998", + "5104056", + "5104442", + "5104558", + "5104641", + "5104781", + "5104882", + "5104891", + "5104903", + "5105339", + "5109506", + "5109523", + "5109661", + "5109821", + "5110200", + "5110213", + "5110644", + "5110670", + "5110885", + "5111574", + "5112155", + "5112254", + "5112283", + "5112291", + "5112336", + "5112345", + "5112362", + "5113036", + "5113078", + "5113084", + "5113234", + "5113847", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5116416", + "5116475", + "5116609", + "5116669", + "5116698", + "5116850", + "5116941", + "5117049", + "5117089", + "5117189", + "5117399", + "5117400", + "5118892", + "5118904", + "5118996", + "5119143", + "5119245", + "5119513", + "5120396", + "5120465", + "5120668", + "5120675", + "5120767", + "5121040", + "5121177", + "5121517", + "5121737", + "5122439", + "5123042", + "5123221", + "5123339", + "5123394", + "5123461", + "5123922", + "5124007", + "5124029", + "5124143", + "5124233", + "5124911", + "5125689", + "5126052", + "5126212", + "5126217", + "5126675", + "5126680", + "5134667", + "5142870", + "5142971", + "5143048", + "5143129", + "5143147", + "5143380", + "5143453", + "5143477", + "5143651", + "5143675", + "5143697", + "5143944", + "5143947", + "5144190", + "5144426", + "5144534", + "5144543", + "5144677", + "5144721", + "5145009", + "5145136", + "5145186", + "5145269", + "5145409", + "5145965", + "5146342", + "5146379", + "5146412", + "5146496", + "5146510", + "5146559", + "5146611", + "5146659", + "5146677", + "5146837", + "5146883", + "5146946", + "5146961", + "5147038", + "5147039", + "5147062", + "5147150", + "5147171", + "5147193", + "5147208", + "5147232", + "5147245", + "5147478", + "5147608", + "5147681", + "5147827", + "5147834", + "5148247", + "5148248", + "5148286", + "5148394", + "5148424", + "5148436", + "5148462", + "5148475", + "5148486", + "5148487", + "5149414", + "5149438", + "5149474", + "5149665", + "5149746", + "5149820", + "5149836", + "5149839", + "5714973", + "5768880", + "5769028", + "5769062", + "5769068", + "5769072", + "5769164", + "5769191", + "5769272", + "5769709", + "5770913", + "5770922", + "5770942", + "5771230", + "5771236", + "5771259", + "5771350", + "5771357", + "5771982", + "5772063", + "5772129", + "5772176", + "5772178", + "5772186", + "5772196", + "5772202", + "5772205", + "5772206", + "5772210", + "5772269", + "5772349", + "5772351", + "5804895", + "5879654", + "5880147", + "5880512", + "5880533", + "5880545", + "5880550", + "5880552", + "5880559", + "5880563", + "5883985", + "5884571", + "5884851", + "5976947", + "6097214", + "6097225", + "6097228", + "6097234", + "6097236", + "6121184", + "6544687", + "7429212", + "7438067", + "7443518", + "7446048", + "7448174", + "7466487", + "7588222", + "7596232", + "7624468", + "7624494", + "7656811", + "7661023", + "7681733", + "7725644", + "7730078", + "7734292", + "7752082", + "7753668", + "7761138", + "7780930", + "7825213", + "7874258", + "7875265", + "7877231", + "7895336", + "7921916", + "7937573", + "7940536", + "7960566", + "7964262", + "7972792", + "7976145", + "7981386", + "7993353", + "8000103", + "8007222", + "8015612", + "8015895", + "8049830", + "8086347", + "8094357", + "8105817", + "8186212", + "8200050", + "8208583", + "8223165", + "8237343", + "8237987", + "8244266", + "8253467", + "8262357", + "8292872", + "8313553", + "8329661", + "8345820", + "8361848", + "8361973", + "8388883", + "8394261", + "8397564", + "8407461", + "8421569", + "8424972", + "8532380", + "8537359", + "8581601", + "8632989", + "8691947", + "8708745", + "8742426", + "8756768", + "8856895", + "8858121", + "8890502", + "9101339", + "9242559", + "9262981", + "9400895", + "9473121", + "9674732", + "9734171", + "9812211" + ], + "class_count": 1289, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.7133861511997317, + "precision": 0.2689411284200973, + "recall": 0.7133861511997317, + "f1": 0.2593624046134101 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "species", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "10055273", + "10113008", + "10312073", + "10580256", + "10638451", + "10844862", + "11418741", + "11478679", + "11571523", + "11598540", + "11728049", + "11962292", + "12089608", + "12135372", + "12253343", + "1731598", + "1731860", + "1732063", + "1732416", + "1732565", + "1732662", + "1732685", + "1733258", + "1733484", + "1734453", + "1734704", + "1734826", + "1735532", + "1736377", + "1736425", + "1736484", + "1736528", + "1736560", + "1736601", + "1737437", + "1737491", + "1737524", + "1737526", + "1737542", + "1737552", + "1737650", + "1737775", + "1737776", + "1737847", + "1738050", + "1738163", + "1738222", + "1738794", + "1738839", + "1738883", + "1739128", + "1739272", + "1739284", + "1739377", + "1739461", + "1739819", + "1739833", + "1739922", + "1740005", + "1740069", + "1740185", + "1740374", + "1740392", + "1740482", + "1741147", + "1741341", + "1741368", + "1741545", + "1741593", + "1741615", + "1741633", + "1741634", + "1741752", + "1741756", + "1742142", + "1742185", + "1742263", + "1743196", + "1743475", + "1743532", + "1743604", + "1743641", + "1743710", + "1743768", + "1743775", + "1743828", + "1744071", + "1744224", + "1744588", + "1744593", + "1744728", + "1744731", + "1744739", + "1744748", + "1744782", + "1744810", + "1744896", + "1745079", + "1745558", + "1745600", + "1745634", + "1745737", + "1745830", + "1745925", + "1746027", + "1746174", + "1746440", + "1746613", + "1746666", + "1746775", + "1746832", + "1746856", + "1746876", + "1746910", + "1748805", + "1748890", + "1748942", + "1749070", + "1749164", + "1749449", + "1749635", + "1749713", + "1749936", + "1751216", + "1751299", + "1758878", + "1759055", + "1759069", + "1759079", + "1759083", + "1759153", + "1759407", + "1759673", + "1760104", + "1760246", + "1760593", + "1760857", + "1760887", + "1760891", + "1761041", + "1761111", + "1761438", + "1761735", + "1761865", + "1762244", + "1763072", + "1763610", + "1765011", + "1765017", + "1765044", + "1765767", + "1766128", + "1766130", + "1766131", + "1766137", + "1766210", + "1766274", + "1766410", + "1766510", + "1766646", + "1766741", + "1766814", + "1767597", + "1767625", + "1767655", + "1768117", + "1768150", + "1768341", + "1768771", + "1768815", + "1769103", + "1769505", + "1769566", + "1769897", + "1769958", + "1770150", + "1770307", + "1770477", + "1770772", + "1770880", + "1771040", + "1771204", + "1771214", + "1771245", + "1771385", + "1771509", + "1771531", + "1771678", + "1771698", + "1771772", + "1772169", + "1772179", + "1772793", + "1772940", + "1772956", + "1773163", + "1773309", + "1774285", + "1775152", + "1775891", + "1776330", + "1776619", + "1776862", + "1777253", + "1778074", + "1778127", + "1778143", + "1778517", + "1779435", + "1779690", + "1780150", + "1780378", + "1781008", + "1781694", + "1782560", + "1782615", + "1782627", + "1782672", + "1782726", + "1782763", + "1782777", + "1782841", + "1782927", + "1782948", + "1783016", + "1783037", + "1783043", + "1783855", + "1784359", + "1784812", + "1784826", + "1785185", + "1785286", + "1785888", + "1785895", + "1786007", + "1786902", + "1787064", + "1787112", + "1787267", + "1787400", + "1787590", + "1787610", + "1787770", + "1788425", + "1788522", + "1788635", + "1789086", + "1789267", + "1789553", + "1789580", + "1789694", + "1789695", + "1789730", + "1789745", + "1789753", + "1789783", + "1789785", + "1789982", + "1790002", + "1790072", + "1790160", + "1790361", + "1790364", + "1790692", + "1790816", + "1791422", + "1791784", + "1792061", + "1792377", + "1792379", + "1792383", + "1792411", + "1792418", + "1793877", + "1793986", + "1794102", + "1794361", + "1794590", + "1795215", + "1795282", + "1795854", + "1796007", + "1796117", + "1796145", + "1796169", + "1796217", + "1796463", + "1796668", + "1796678", + "1797178", + "1797258", + "1797276", + "1797367", + "1797479", + "1798346", + "1798372", + "1798408", + "1798449", + "1798504", + "1798594", + "1798802", + "1798807", + "1798971", + "1798974", + "1798984", + "1799132", + "1799135", + "1799701", + "1799708", + "1800004", + "1800032", + "1801051", + "1801896", + "1802280", + "1803012", + "1803073", + "1804071", + "1804906", + "1807206", + "1807969", + "1808450", + "1808752", + "1810099", + "1811789", + "1811896", + "1812394", + "1813114", + "1819145", + "1819268", + "1819873", + "1820039", + "1820372", + "1820406", + "1821856", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822787", + "1822796", + "1822819", + "1822830", + "1823726", + "1824113", + "1825064", + "1825077", + "1825083", + "1825156", + "1825176", + "1825539", + "1825971", + "1825983", + "1826022", + "1827125", + "1827645", + "1828162", + "1828637", + "1829322", + "1829363", + "1829776", + "1830241", + "1830380", + "1830407", + "1830410", + "1830457", + "1830537", + "1830584", + "1830632", + "1830802", + "1830838", + "1830843", + "1830879", + "1830937", + "1830962", + "1831002", + "1831136", + "1831643", + "1831752", + "1831780", + "1832853", + "1833096", + "1833626", + "1835031", + "1835156", + "1835393", + "1835407", + "1835456", + "1835457", + "1836899", + "1837429", + "1837515", + "1838691", + "1838905", + "1838911", + "1838969", + "1839851", + "1839893", + "1840346", + "1840380", + "1840478", + "1841159", + "1841261", + "1841296", + "1841675", + "1841813", + "1842695", + "1845270", + "1845368", + "1845962", + "1846133", + "1846236", + "1846729", + "1847407", + "1848356", + "1848657", + "1848920", + "1849273", + "1849294", + "1849477", + "1849897", + "1850008", + "1850045", + "1850450", + "1850506", + "1850522", + "1850538", + "1850781", + "1850971", + "1851203", + "1851337", + "1851555", + "1852177", + "1852311", + "1852956", + "1852978", + "1853064", + "1853079", + "1854202", + "1854237", + "1854287", + "1854347", + "1854849", + "1856005", + "1856289", + "1856595", + "1856668", + "1856691", + "1856701", + "1856730", + "1856867", + "1857577", + "1857626", + "1857828", + "1857829", + "1857878", + "1857924", + "1857978", + "1858074", + "1858113", + "1858163", + "1858698", + "1858775", + "1859305", + "1860688", + "1860983", + "1860987", + "1861644", + "1862578", + "1862580", + "1862719", + "1862837", + "1864358", + "1864377", + "1864652", + "1866568", + "1867820", + "1869512", + "1869803", + "1869976", + "1870202", + "1870249", + "1870250", + "1870450", + "1870988", + "1871160", + "1871252", + "1871407", + "1872315", + "1872368", + "1872901", + "1873079", + "1873411", + "1874375", + "1875008", + "1875120", + "1875327", + "1875631", + "1875865", + "1875869", + "1875918", + "1875940", + "1876329", + "1876409", + "1876542", + "1877310", + "1877368", + "1877941", + "1877988", + "1878490", + "1878586", + "1878862", + "1878879", + "1878895", + "1878907", + "1878939", + "1879252", + "1879452", + "1879731", + "1879735", + "1879970", + "1880064", + "1880104", + "1880139", + "1880140", + "1881151", + "1881834", + "1882158", + "1882210", + "1882459", + "1882905", + "1883161", + "1884212", + "1884255", + "1884273", + "1884332", + "1884370", + "1884403", + "1884465", + "1884970", + "1886084", + "1886579", + "1886587", + "1887108", + "1887173", + "1887177", + "1887290", + "1887701", + "1888579", + "1888733", + "1888743", + "1888759", + "1888826", + "1889833", + "1889942", + "1890187", + "1890534", + "1890576", + "1890656", + "1890703", + "1890772", + "1891059", + "1891326", + "1891426", + "1891473", + "1891493", + "1892242", + "1898286", + "1902533", + "1918868", + "1920506", + "1920712", + "1928248", + "1939432", + "1939879", + "1940744", + "1940807", + "1951557", + "1951649", + "1951713", + "1952014", + "1952062", + "1952130", + "1952229", + "1952532", + "1952806", + "1952812", + "1956440", + "1956524", + "1956599", + "1956710", + "1957266", + "1957570", + "1957572", + "1957632", + "1957816", + "1957845", + "1957852", + "1957854", + "1958024", + "1959383", + "1959395", + "1959914", + "1959919", + "1960617", + "1961040", + "1961068", + "1961190", + "1962204", + "1962265", + "1962268", + "1962434", + "1962516", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1963463", + "1964191", + "1964195", + "1964471", + "1964637", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965777", + "1965825", + "1965841", + "1965913", + "1965996", + "1966017", + "1966351", + "1966886", + "1967011", + "1967245", + "1967273", + "1967597", + "1967815", + "1968678", + "1968867", + "1969954", + "1970213", + "1970227", + "1970284", + "1971888", + "1971986", + "1972120", + "1972185", + "1972187", + "1972234", + "1972250", + "1972342", + "1972434", + "1972449", + "1973414", + "1973467", + "1975341", + "1975546", + "1975553", + "1975571", + "1975897", + "1975903", + "1976163", + "1977003", + "1977007", + "1977068", + "1978056", + "1978065", + "1978114", + "1978375", + "1978445", + "1978776", + "1978821", + "1978977", + "1979308", + "1979430", + "1979473", + "1979781", + "1980521", + "1981696", + "1982406", + "1982500", + "1982525", + "1982529", + "1982541", + "1982542", + "1982592", + "1982636", + "1982671", + "1982746", + "1982791", + "1982838", + "1982885", + "1983000", + "1983170", + "1983260", + "1983288", + "1983387", + "1983441", + "1983442", + "1983525", + "1983548", + "1983558", + "1983648", + "1983694", + "1983705", + "1983755", + "1983888", + "1983896", + "1983922", + "1983997", + "1984117", + "1984734", + "1984942", + "1984949", + "1984954", + "1985522", + "1986052", + "1986056", + "1986157", + "1986166", + "1986171", + "1986220", + "1986367", + "1986452", + "1986522", + "1986575", + "1987527", + "1987744", + "1988593", + "1988602", + "1988684", + "1988881", + "1989428", + "1990066", + "1990150", + "1990551", + "1991371", + "1992066", + "1992504", + "1993419", + "4302252", + "4302268", + "4522322", + "4522795", + "4522916", + "4522919", + "4522922", + "4523522", + "4523556", + "4523725", + "4523880", + "4523883", + "4523885", + "4524054", + "4524070", + "4524072", + "4524376", + "4524393", + "4524403", + "4524421", + "4524426", + "4524636", + "4524638", + "4524740", + "4524793", + "4525078", + "4525189", + "4525354", + "4525369", + "4525420", + "4525500", + "4525503", + "4525510", + "4525530", + "4525540", + "4525547", + "4525557", + "4525562", + "4525610", + "4526048", + "4526050", + "4527339", + "4527342", + "4527972", + "4528539", + "4528692", + "4529248", + "4529566", + "4529915", + "4530002", + "4530138", + "4530151", + "4530424", + "4531284", + "4531402", + "4531506", + "4531517", + "4531687", + "4531690", + "4531708", + "4531968", + "4531975", + "4532022", + "4532057", + "4532095", + "4532122", + "4532253", + "4532293", + "4532297", + "4532357", + "4532408", + "4532412", + "4532493", + "4532500", + "4532516", + "4532532", + "4532534", + "4532544", + "4532696", + "4532811", + "4532886", + "4532888", + "4532890", + "4533115", + "4533136", + "4533202", + "4533273", + "4533285", + "4533360", + "4533431", + "4533433", + "4533442", + "4533446", + "4533671", + "4533714", + "4533952", + "4534038", + "4534046", + "4534052", + "4534057", + "4534166", + "4534207", + "4534290", + "4534299", + "4534389", + "4534398", + "4534408", + "4534458", + "4534463", + "4534485", + "4534533", + "4534538", + "4534540", + "4534686", + "4534719", + "4534872", + "4534909", + "4534914", + "5101678", + "5101745", + "5102287", + "5102931", + "5102951", + "5102982", + "5103066", + "5103451", + "5103998", + "5104056", + "5104442", + "5104558", + "5104641", + "5104781", + "5104891", + "5104903", + "5105088", + "5105339", + "5109523", + "5109599", + "5109661", + "5109821", + "5110200", + "5110213", + "5110644", + "5110670", + "5110871", + "5110885", + "5111574", + "5112155", + "5112254", + "5112283", + "5112291", + "5112336", + "5112345", + "5112362", + "5113036", + "5113078", + "5113084", + "5113234", + "5113847", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5116475", + "5116609", + "5116669", + "5116698", + "5116850", + "5116941", + "5117049", + "5117089", + "5117189", + "5117399", + "5117400", + "5118892", + "5118996", + "5119143", + "5119245", + "5119513", + "5120396", + "5120668", + "5120675", + "5120767", + "5121517", + "5121613", + "5122206", + "5122439", + "5123221", + "5123339", + "5123394", + "5123461", + "5123474", + "5123582", + "5123922", + "5124007", + "5124029", + "5124143", + "5124233", + "5124911", + "5125689", + "5126212", + "5126217", + "5126675", + "5126680", + "5141493", + "5142870", + "5142971", + "5143048", + "5143129", + "5143147", + "5143380", + "5143453", + "5143477", + "5143651", + "5143675", + "5143697", + "5143947", + "5144190", + "5144426", + "5144534", + "5144543", + "5144677", + "5144721", + "5145009", + "5145136", + "5145186", + "5145269", + "5145409", + "5145965", + "5146342", + "5146379", + "5146412", + "5146496", + "5146510", + "5146559", + "5146611", + "5146659", + "5146677", + "5146883", + "5146946", + "5146961", + "5147038", + "5147039", + "5147062", + "5147171", + "5147193", + "5147208", + "5147232", + "5147245", + "5147478", + "5147608", + "5147638", + "5147681", + "5147827", + "5148248", + "5148286", + "5148394", + "5148424", + "5148436", + "5148462", + "5148475", + "5148486", + "5148487", + "5149414", + "5149438", + "5149474", + "5149665", + "5149746", + "5149820", + "5149839", + "5714973", + "5768880", + "5769028", + "5769062", + "5769068", + "5769072", + "5769191", + "5769272", + "5770913", + "5771230", + "5771259", + "5771350", + "5771982", + "5772063", + "5772129", + "5772176", + "5772178", + "5772186", + "5772196", + "5772202", + "5772205", + "5772206", + "5772210", + "5772309", + "5772349", + "5772351", + "5879654", + "5880147", + "5880258", + "5880512", + "5880533", + "5880545", + "5880550", + "5880552", + "5880559", + "5880563", + "5883985", + "5884571", + "5884851", + "5976947", + "6097214", + "6097225", + "6097228", + "6097234", + "6097236", + "6121184", + "6544687", + "7389824", + "7429212", + "7438067", + "7443518", + "7446048", + "7448174", + "7588222", + "7596232", + "7624494", + "7656811", + "7681733", + "7730078", + "7734292", + "7752082", + "7753668", + "7762841", + "7780930", + "7825213", + "7874258", + "7875265", + "7877231", + "7895336", + "7937573", + "7940536", + "7960566", + "7972792", + "7981386", + "7993353", + "8000103", + "8007222", + "8015895", + "8049830", + "8086347", + "8094357", + "8105817", + "8160782", + "8186212", + "8219149", + "8223165", + "8237343", + "8237987", + "8244266", + "8262357", + "8273859", + "8313553", + "8361848", + "8361973", + "8394261", + "8397564", + "8407461", + "8421569", + "8532380", + "8537359", + "8581601", + "8691947", + "8742426", + "8756768", + "8858121", + "8890502", + "9092175", + "9101339", + "9242559", + "9473121", + "9530977", + "9674732", + "9724183", + "9734171", + "9812211" + ], + "class_count": 1131, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.7493898333756177, + "precision": 0.3361085016262147, + "recall": 0.7493898333756177, + "f1": 0.32014833573036827 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "species", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "10055273", + "10113008", + "10312073", + "10580256", + "10638451", + "10844862", + "11418741", + "11478679", + "11571523", + "11598540", + "11728049", + "11962292", + "12089608", + "12135372", + "12253343", + "1731598", + "1731860", + "1732063", + "1732416", + "1732565", + "1732662", + "1732685", + "1733258", + "1733484", + "1734453", + "1734704", + "1734826", + "1735532", + "1736377", + "1736425", + "1736484", + "1736528", + "1736560", + "1736601", + "1737437", + "1737491", + "1737524", + "1737526", + "1737542", + "1737552", + "1737650", + "1737775", + "1737776", + "1737847", + "1738050", + "1738163", + "1738222", + "1738794", + "1738839", + "1738883", + "1739128", + "1739272", + "1739284", + "1739377", + "1739461", + "1739819", + "1739833", + "1739922", + "1740005", + "1740069", + "1740185", + "1740374", + "1740392", + "1740482", + "1741147", + "1741341", + "1741368", + "1741545", + "1741593", + "1741615", + "1741633", + "1741634", + "1741752", + "1741756", + "1742142", + "1742185", + "1742263", + "1743196", + "1743475", + "1743532", + "1743604", + "1743641", + "1743710", + "1743768", + "1743775", + "1743828", + "1744071", + "1744224", + "1744588", + "1744728", + "1744731", + "1744739", + "1744748", + "1744782", + "1744810", + "1744896", + "1745079", + "1745558", + "1745600", + "1745634", + "1745737", + "1745830", + "1745925", + "1746027", + "1746174", + "1746440", + "1746613", + "1746666", + "1746775", + "1746832", + "1746856", + "1746876", + "1746910", + "1748456", + "1748805", + "1748890", + "1748942", + "1749070", + "1749164", + "1749449", + "1749635", + "1749713", + "1749936", + "1751216", + "1751299", + "1758878", + "1759069", + "1759079", + "1759083", + "1759153", + "1759407", + "1759673", + "1760104", + "1760246", + "1760593", + "1760857", + "1760887", + "1760891", + "1761041", + "1761111", + "1761438", + "1761735", + "1761865", + "1762244", + "1763072", + "1763610", + "1765011", + "1765017", + "1765044", + "1765767", + "1766128", + "1766130", + "1766131", + "1766137", + "1766210", + "1766274", + "1766410", + "1766510", + "1766646", + "1766741", + "1766814", + "1767597", + "1767625", + "1767655", + "1768117", + "1768150", + "1768341", + "1768771", + "1768815", + "1769103", + "1769505", + "1769566", + "1769897", + "1769958", + "1770150", + "1770307", + "1770477", + "1770772", + "1770880", + "1771040", + "1771204", + "1771214", + "1771245", + "1771385", + "1771509", + "1771531", + "1771678", + "1771698", + "1771772", + "1772169", + "1772179", + "1772793", + "1772940", + "1772956", + "1773163", + "1773309", + "1774285", + "1775152", + "1775891", + "1776330", + "1776619", + "1776862", + "1777253", + "1778074", + "1778127", + "1778143", + "1778517", + "1779435", + "1779690", + "1780150", + "1780378", + "1781008", + "1781694", + "1782560", + "1782615", + "1782627", + "1782672", + "1782726", + "1782763", + "1782777", + "1782841", + "1782927", + "1782948", + "1783016", + "1783037", + "1783043", + "1783855", + "1784359", + "1784812", + "1784826", + "1785185", + "1785286", + "1785888", + "1785895", + "1786007", + "1786902", + "1787064", + "1787112", + "1787267", + "1787400", + "1787590", + "1787610", + "1787770", + "1788425", + "1788522", + "1788635", + "1789086", + "1789267", + "1789553", + "1789580", + "1789694", + "1789695", + "1789730", + "1789745", + "1789753", + "1789783", + "1789785", + "1789982", + "1790002", + "1790072", + "1790160", + "1790361", + "1790364", + "1790692", + "1790816", + "1791422", + "1791784", + "1792061", + "1792377", + "1792379", + "1792383", + "1792411", + "1792418", + "1793877", + "1793986", + "1794102", + "1794361", + "1794590", + "1795215", + "1795282", + "1795854", + "1796007", + "1796117", + "1796145", + "1796169", + "1796217", + "1796463", + "1796668", + "1796678", + "1797178", + "1797258", + "1797276", + "1797367", + "1797479", + "1798346", + "1798372", + "1798408", + "1798449", + "1798504", + "1798594", + "1798802", + "1798807", + "1798971", + "1798974", + "1798984", + "1799132", + "1799135", + "1799701", + "1799708", + "1800004", + "1800032", + "1801051", + "1801896", + "1802280", + "1803012", + "1803073", + "1804071", + "1804906", + "1807206", + "1807969", + "1808450", + "1808752", + "1810099", + "1811789", + "1811896", + "1812394", + "1813114", + "1819145", + "1819268", + "1819873", + "1820039", + "1820372", + "1820406", + "1821856", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822787", + "1822796", + "1822819", + "1822830", + "1823726", + "1824113", + "1825064", + "1825077", + "1825083", + "1825156", + "1825176", + "1825539", + "1825971", + "1825983", + "1826022", + "1827125", + "1827645", + "1828162", + "1828637", + "1829322", + "1829363", + "1829776", + "1830241", + "1830380", + "1830407", + "1830410", + "1830457", + "1830537", + "1830584", + "1830632", + "1830802", + "1830838", + "1830843", + "1830879", + "1830937", + "1830962", + "1831002", + "1831136", + "1831643", + "1831752", + "1831780", + "1832853", + "1833096", + "1833626", + "1835031", + "1835156", + "1835393", + "1835407", + "1835456", + "1835457", + "1836899", + "1837429", + "1837515", + "1838691", + "1838905", + "1838911", + "1838969", + "1839851", + "1839893", + "1840346", + "1840380", + "1840478", + "1841159", + "1841261", + "1841296", + "1841675", + "1841813", + "1842695", + "1845270", + "1845368", + "1845962", + "1846133", + "1846236", + "1846729", + "1847407", + "1848356", + "1848657", + "1848920", + "1849273", + "1849294", + "1849477", + "1849897", + "1850008", + "1850045", + "1850450", + "1850506", + "1850522", + "1850538", + "1850781", + "1850971", + "1851203", + "1851337", + "1851555", + "1852177", + "1852311", + "1852956", + "1852978", + "1853064", + "1853079", + "1854202", + "1854237", + "1854287", + "1854347", + "1854849", + "1856005", + "1856289", + "1856595", + "1856668", + "1856691", + "1856701", + "1856730", + "1856867", + "1857577", + "1857626", + "1857828", + "1857829", + "1857878", + "1857924", + "1857978", + "1858074", + "1858113", + "1858163", + "1858698", + "1858775", + "1859305", + "1860688", + "1860983", + "1860987", + "1861644", + "1862578", + "1862580", + "1862719", + "1862837", + "1864358", + "1864377", + "1864652", + "1866568", + "1867820", + "1869512", + "1869803", + "1869976", + "1870202", + "1870249", + "1870250", + "1870450", + "1870988", + "1871160", + "1871252", + "1871407", + "1872315", + "1872368", + "1872901", + "1873079", + "1873411", + "1874204", + "1874375", + "1875008", + "1875120", + "1875327", + "1875631", + "1875865", + "1875869", + "1875918", + "1875940", + "1876329", + "1876409", + "1876542", + "1877310", + "1877368", + "1877941", + "1877988", + "1878490", + "1878586", + "1878862", + "1878879", + "1878895", + "1878907", + "1878939", + "1879252", + "1879452", + "1879731", + "1879735", + "1879970", + "1880064", + "1880104", + "1880139", + "1880140", + "1881151", + "1881834", + "1882158", + "1882210", + "1882459", + "1882905", + "1883161", + "1884212", + "1884255", + "1884273", + "1884332", + "1884370", + "1884403", + "1884465", + "1884970", + "1886084", + "1886579", + "1886587", + "1887108", + "1887173", + "1887177", + "1887290", + "1887701", + "1888579", + "1888733", + "1888743", + "1888759", + "1888826", + "1889833", + "1889942", + "1890187", + "1890534", + "1890576", + "1890656", + "1890703", + "1890772", + "1891059", + "1891326", + "1891426", + "1891473", + "1891493", + "1892242", + "1898286", + "1902533", + "1918868", + "1920506", + "1920712", + "1928248", + "1939432", + "1939879", + "1940744", + "1940807", + "1951557", + "1951649", + "1951713", + "1952014", + "1952062", + "1952130", + "1952229", + "1952532", + "1952806", + "1952812", + "1956440", + "1956524", + "1956599", + "1956710", + "1957266", + "1957570", + "1957572", + "1957632", + "1957816", + "1957845", + "1957852", + "1957854", + "1958024", + "1959383", + "1959395", + "1959914", + "1959919", + "1960617", + "1961040", + "1961068", + "1961190", + "1962204", + "1962265", + "1962268", + "1962434", + "1962516", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1963463", + "1964191", + "1964195", + "1964471", + "1964637", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965777", + "1965825", + "1965841", + "1965913", + "1965996", + "1966017", + "1966351", + "1966886", + "1967011", + "1967245", + "1967273", + "1967597", + "1967815", + "1968678", + "1968867", + "1969954", + "1970213", + "1970227", + "1970284", + "1971888", + "1971986", + "1972120", + "1972185", + "1972187", + "1972234", + "1972250", + "1972342", + "1972434", + "1972449", + "1973414", + "1973467", + "1975341", + "1975546", + "1975553", + "1975571", + "1975897", + "1975903", + "1976163", + "1977003", + "1977007", + "1977068", + "1978056", + "1978065", + "1978114", + "1978375", + "1978445", + "1978776", + "1978821", + "1978977", + "1979308", + "1979430", + "1979473", + "1979781", + "1980521", + "1981696", + "1982406", + "1982500", + "1982525", + "1982529", + "1982541", + "1982542", + "1982592", + "1982636", + "1982671", + "1982746", + "1982791", + "1982838", + "1982885", + "1983000", + "1983170", + "1983260", + "1983288", + "1983387", + "1983441", + "1983442", + "1983525", + "1983548", + "1983558", + "1983648", + "1983694", + "1983705", + "1983755", + "1983888", + "1983896", + "1983922", + "1983997", + "1984117", + "1984734", + "1984942", + "1984949", + "1984954", + "1985522", + "1986052", + "1986056", + "1986157", + "1986166", + "1986171", + "1986220", + "1986367", + "1986452", + "1986522", + "1986575", + "1987527", + "1987744", + "1988593", + "1988602", + "1988684", + "1988881", + "1989428", + "1990066", + "1990150", + "1990551", + "1991371", + "1992066", + "1992504", + "1993419", + "4302252", + "4302268", + "4522322", + "4522795", + "4522916", + "4522919", + "4522922", + "4522933", + "4523522", + "4523556", + "4523725", + "4523880", + "4523883", + "4523885", + "4524054", + "4524070", + "4524072", + "4524376", + "4524393", + "4524403", + "4524421", + "4524426", + "4524636", + "4524638", + "4524740", + "4524793", + "4525078", + "4525189", + "4525354", + "4525369", + "4525420", + "4525500", + "4525503", + "4525510", + "4525530", + "4525540", + "4525547", + "4525557", + "4525562", + "4525610", + "4526048", + "4526050", + "4527339", + "4527342", + "4527972", + "4528539", + "4528692", + "4529248", + "4529566", + "4529915", + "4530002", + "4530138", + "4530151", + "4530424", + "4531284", + "4531402", + "4531506", + "4531517", + "4531687", + "4531690", + "4531708", + "4531968", + "4531975", + "4532022", + "4532057", + "4532095", + "4532122", + "4532253", + "4532293", + "4532297", + "4532357", + "4532408", + "4532412", + "4532493", + "4532500", + "4532516", + "4532532", + "4532534", + "4532544", + "4532696", + "4532811", + "4532886", + "4532888", + "4532890", + "4533115", + "4533136", + "4533202", + "4533273", + "4533285", + "4533360", + "4533431", + "4533433", + "4533442", + "4533446", + "4533671", + "4533714", + "4533952", + "4534038", + "4534046", + "4534052", + "4534057", + "4534166", + "4534207", + "4534290", + "4534299", + "4534389", + "4534398", + "4534408", + "4534458", + "4534463", + "4534485", + "4534533", + "4534538", + "4534540", + "4534686", + "4534719", + "4534872", + "4534909", + "4534914", + "5101678", + "5101745", + "5102287", + "5102931", + "5102951", + "5102982", + "5103066", + "5103451", + "5103998", + "5104056", + "5104442", + "5104558", + "5104641", + "5104781", + "5104891", + "5104903", + "5105088", + "5105339", + "5109523", + "5109599", + "5109661", + "5109821", + "5110200", + "5110213", + "5110644", + "5110670", + "5110871", + "5110885", + "5111574", + "5112155", + "5112254", + "5112283", + "5112291", + "5112336", + "5112345", + "5112362", + "5113036", + "5113078", + "5113084", + "5113234", + "5113847", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5116475", + "5116609", + "5116669", + "5116698", + "5116850", + "5116941", + "5117049", + "5117089", + "5117189", + "5117399", + "5117400", + "5118892", + "5118996", + "5119143", + "5119245", + "5119513", + "5120396", + "5120668", + "5120675", + "5120767", + "5121517", + "5121613", + "5122206", + "5122439", + "5123221", + "5123339", + "5123394", + "5123461", + "5123474", + "5123582", + "5123922", + "5124007", + "5124029", + "5124143", + "5124233", + "5124911", + "5125689", + "5126212", + "5126217", + "5126675", + "5126680", + "5141493", + "5142870", + "5142971", + "5143048", + "5143129", + "5143147", + "5143380", + "5143453", + "5143477", + "5143651", + "5143675", + "5143697", + "5143947", + "5144190", + "5144426", + "5144534", + "5144543", + "5144677", + "5144721", + "5145009", + "5145136", + "5145186", + "5145269", + "5145409", + "5145965", + "5146342", + "5146379", + "5146412", + "5146496", + "5146510", + "5146559", + "5146611", + "5146659", + "5146677", + "5146883", + "5146946", + "5146961", + "5147038", + "5147039", + "5147062", + "5147171", + "5147193", + "5147208", + "5147232", + "5147245", + "5147478", + "5147608", + "5147638", + "5147681", + "5147827", + "5148248", + "5148286", + "5148394", + "5148424", + "5148436", + "5148462", + "5148475", + "5148486", + "5148487", + "5149414", + "5149438", + "5149474", + "5149665", + "5149746", + "5149820", + "5149839", + "5714973", + "5768880", + "5769028", + "5769062", + "5769068", + "5769072", + "5769191", + "5769272", + "5770913", + "5771230", + "5771259", + "5771350", + "5771982", + "5772063", + "5772129", + "5772176", + "5772178", + "5772186", + "5772196", + "5772202", + "5772205", + "5772206", + "5772210", + "5772309", + "5772349", + "5772351", + "5879654", + "5880147", + "5880258", + "5880512", + "5880533", + "5880545", + "5880550", + "5880552", + "5880559", + "5880563", + "5883985", + "5884571", + "5884851", + "5976947", + "6097214", + "6097225", + "6097228", + "6097234", + "6097236", + "6121184", + "6544687", + "7389824", + "7429212", + "7438067", + "7443518", + "7446048", + "7448174", + "7588222", + "7596232", + "7624494", + "7656811", + "7681733", + "7730078", + "7734292", + "7752082", + "7753668", + "7762841", + "7780930", + "7825213", + "7874258", + "7875265", + "7877231", + "7895336", + "7937573", + "7940536", + "7960566", + "7972792", + "7981386", + "7993353", + "8000103", + "8007222", + "8015895", + "8049830", + "8086347", + "8094357", + "8105817", + "8160782", + "8186212", + "8219149", + "8223165", + "8237343", + "8237987", + "8244266", + "8262357", + "8273859", + "8313553", + "8361848", + "8361973", + "8394261", + "8397564", + "8407461", + "8421569", + "8532380", + "8537359", + "8581601", + "8691947", + "8742426", + "8756768", + "8858121", + "8890502", + "9092175", + "9101339", + "9242559", + "9473121", + "9530977", + "9674732", + "9724183", + "9734171", + "9812211" + ], + "class_count": 1132, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.7493378530417095, + "precision": 0.335607011455683, + "recall": 0.7493378530417095, + "f1": 0.3197309858969451 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1737775", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759083", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1765011", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1786902", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1862580", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1959383", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1965996", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1972342", + "1973414", + "1973467", + "1975553", + "1975571", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 320, + "truth_images_in_retained_classes": 44895, + "accepted_predictions_in_retained_classes": 39395, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.7835860088760841, + "precision": 0.8271892598535118, + "recall": 0.7835860088760841, + "f1": 0.7771880031099807 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1737775", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 311, + "truth_images_in_retained_classes": 44709, + "accepted_predictions_in_retained_classes": 39284, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.7900550443728065, + "precision": 0.8335510054241905, + "recall": 0.7900550443728065, + "f1": 0.7835569174460332 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1737775", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766210", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789783", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1798974", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1839893", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1959383", + "1959395", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1965996", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1972342", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 321, + "truth_images_in_retained_classes": 44848, + "accepted_predictions_in_retained_classes": 40080, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8016540743299243, + "precision": 0.826169612130568, + "recall": 0.8016540743299243, + "f1": 0.7937632511493784 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1737775", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 311, + "truth_images_in_retained_classes": 44709, + "accepted_predictions_in_retained_classes": 39989, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8159055366992773, + "precision": 0.837066966065252, + "recall": 0.8159055366992773, + "f1": 0.8065774964710728 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1737775", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766210", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789783", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1798974", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1839893", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1959383", + "1959395", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1965996", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1972342", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 321, + "truth_images_in_retained_classes": 44848, + "accepted_predictions_in_retained_classes": 40095, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8021426772632025, + "precision": 0.8262878591168297, + "recall": 0.8021426772632025, + "f1": 0.794015782308363 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1737775", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 311, + "truth_images_in_retained_classes": 44709, + "accepted_predictions_in_retained_classes": 40004, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8164098503378058, + "precision": 0.8371890152054124, + "recall": 0.8164098503378058, + "f1": 0.806838147603015 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1737775", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759083", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1765011", + "1766137", + "1766210", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1786902", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789783", + "1789785", + "1790002", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1862580", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959395", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975571", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 321, + "truth_images_in_retained_classes": 44929, + "accepted_predictions_in_retained_classes": 41848, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8567411793921805, + "precision": 0.8760937958534148, + "recall": 0.8567411793921805, + "f1": 0.850373233680162 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1737775", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 311, + "truth_images_in_retained_classes": 44709, + "accepted_predictions_in_retained_classes": 41727, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.865303260260028, + "precision": 0.8809281307434137, + "recall": 0.865303260260028, + "f1": 0.8573956478024776 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1737775", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759083", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1765011", + "1766137", + "1766210", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1786902", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789783", + "1789785", + "1790002", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1862580", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959395", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975571", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 321, + "truth_images_in_retained_classes": 44929, + "accepted_predictions_in_retained_classes": 41848, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8566566506248902, + "precision": 0.8757776830894549, + "recall": 0.8566566506248902, + "f1": 0.8502587874803171 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1737775", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 311, + "truth_images_in_retained_classes": 44709, + "accepted_predictions_in_retained_classes": 41728, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8655083257153624, + "precision": 0.8807049123666298, + "recall": 0.8655083257153624, + "f1": 0.8574639236363765 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "species", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1862580", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1965996", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 277, + "truth_images_in_retained_classes": 43835, + "accepted_predictions_in_retained_classes": 38825, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.7994793772053351, + "precision": 0.8464715182316644, + "recall": 0.7994793772053351, + "f1": 0.8020074761104694 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "species", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 269, + "truth_images_in_retained_classes": 43592, + "accepted_predictions_in_retained_classes": 38684, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.807434274731362, + "precision": 0.8524634178075089, + "recall": 0.807434274731362, + "f1": 0.8090415998072698 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "species", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766210", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 285, + "truth_images_in_retained_classes": 44492, + "accepted_predictions_in_retained_classes": 39612, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8171258284359165, + "precision": 0.8511929361965738, + "recall": 0.8171258284359165, + "f1": 0.8180429337935674 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "species", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 269, + "truth_images_in_retained_classes": 43592, + "accepted_predictions_in_retained_classes": 39084, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8256404609528794, + "precision": 0.8567343194106741, + "recall": 0.8256404609528794, + "f1": 0.8257371612732255 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "species", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766210", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 285, + "truth_images_in_retained_classes": 44492, + "accepted_predictions_in_retained_classes": 39626, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.817676149634451, + "precision": 0.8513280853428178, + "recall": 0.817676149634451, + "f1": 0.8183308171409448 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "species", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 269, + "truth_images_in_retained_classes": 43592, + "accepted_predictions_in_retained_classes": 39098, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8262235150108063, + "precision": 0.856877507167847, + "recall": 0.8262235150108063, + "f1": 0.8260421677936811 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "species", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746775", + "1746832", + "1746876", + "1758878", + "1759083", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766210", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789695", + "1789730", + "1789745", + "1789783", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1862580", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 287, + "truth_images_in_retained_classes": 44585, + "accepted_predictions_in_retained_classes": 41383, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8650597753206963, + "precision": 0.890822796453379, + "recall": 0.8650597753206963, + "f1": 0.866596355497898 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "species", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 269, + "truth_images_in_retained_classes": 43592, + "accepted_predictions_in_retained_classes": 40689, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8758483940155001, + "precision": 0.8978559590586308, + "recall": 0.8758483940155001, + "f1": 0.8761006747537562 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "species", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746775", + "1746832", + "1746876", + "1758878", + "1759083", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766210", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789695", + "1789730", + "1789745", + "1789783", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1862580", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 287, + "truth_images_in_retained_classes": 44585, + "accepted_predictions_in_retained_classes": 41382, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8649652326924728, + "precision": 0.8906558948204186, + "recall": 0.8649652326924728, + "f1": 0.8664756558669171 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "species", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 269, + "truth_images_in_retained_classes": 43592, + "accepted_predictions_in_retained_classes": 40689, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8760941628080915, + "precision": 0.897846903368685, + "recall": 0.8760941628080915, + "f1": 0.8762293688340541 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "species", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1742142", + "1743532", + "1746775", + "1746832", + "1758878", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1782948", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1822346", + "1822610", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1862580", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5772210", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 216, + "truth_images_in_retained_classes": 42698, + "accepted_predictions_in_retained_classes": 37641, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8082495823011705, + "precision": 0.8625621889375423, + "recall": 0.8082495823011705, + "f1": 0.8168473325998337 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "species", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1742142", + "1743532", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986166", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 207, + "truth_images_in_retained_classes": 42149, + "accepted_predictions_in_retained_classes": 37370, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8175661534139832, + "precision": 0.8679692809334503, + "recall": 0.8175661534139832, + "f1": 0.8251439958793457 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "species", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1741341", + "1742142", + "1743532", + "1746832", + "1759153", + "1760104", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1782948", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1821911", + "1822346", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 222, + "truth_images_in_retained_classes": 43361, + "accepted_predictions_in_retained_classes": 38417, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8271275510654174, + "precision": 0.878086795953307, + "recall": 0.8271275510654174, + "f1": 0.8390189376702694 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "species", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1742142", + "1743532", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986166", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 207, + "truth_images_in_retained_classes": 42149, + "accepted_predictions_in_retained_classes": 37749, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8380264705318411, + "precision": 0.8870648514468934, + "recall": 0.8380264705318411, + "f1": 0.8498822675305044 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "species", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1741341", + "1742142", + "1743532", + "1746832", + "1759153", + "1760104", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1782948", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1821911", + "1822346", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 222, + "truth_images_in_retained_classes": 43361, + "accepted_predictions_in_retained_classes": 38429, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8276292942912182, + "precision": 0.8782629747089122, + "recall": 0.8276292942912182, + "f1": 0.8392847349307755 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "species", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1742142", + "1743532", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986166", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 207, + "truth_images_in_retained_classes": 42149, + "accepted_predictions_in_retained_classes": 37764, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8385645719624101, + "precision": 0.8868839185673889, + "recall": 0.8385645719624101, + "f1": 0.8499675200880887 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "species", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1758878", + "1759153", + "1760104", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797258", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1862580", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986166", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5772210", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 226, + "truth_images_in_retained_classes": 43341, + "accepted_predictions_in_retained_classes": 40350, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8779440296582359, + "precision": 0.9091124323290416, + "recall": 0.8779440296582359, + "f1": 0.8834258152556967 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "species", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1742142", + "1743532", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986166", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 207, + "truth_images_in_retained_classes": 42149, + "accepted_predictions_in_retained_classes": 39473, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8847402108374071, + "precision": 0.9092002957022167, + "recall": 0.8847402108374071, + "f1": 0.8877589946240976 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "species", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1758878", + "1759153", + "1760104", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797258", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1862580", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986166", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5772210", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 226, + "truth_images_in_retained_classes": 43341, + "accepted_predictions_in_retained_classes": 40349, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8779933384089511, + "precision": 0.9089448421313119, + "recall": 0.8779933384089511, + "f1": 0.8833793412304258 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "species", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1742142", + "1743532", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986166", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 207, + "truth_images_in_retained_classes": 42149, + "accepted_predictions_in_retained_classes": 39471, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.884644302107583, + "precision": 0.9090587633916279, + "recall": 0.884644302107583, + "f1": 0.8876136773297221 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "genus", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "11064851", + "11495707", + "12031311", + "12105049", + "1730815", + "1731584", + "1731817", + "1732062", + "1732397", + "1732442", + "1732496", + "1732661", + "1733242", + "1733338", + "1733574", + "1733840", + "1734388", + "1734683", + "1735487", + "1735814", + "1735869", + "1736266", + "1736359", + "1736409", + "1736444", + "1736460", + "1736725", + "1736895", + "1737021", + "1737335", + "1737519", + "1737647", + "1737701", + "1738049", + "1738143", + "1738215", + "1738242", + "1738265", + "1738583", + "1739000", + "1739060", + "1739418", + "1739446", + "1739724", + "1740664", + "1741141", + "1741338", + "1741540", + "1741585", + "1741717", + "1742061", + "1742345", + "1742419", + "1743188", + "1743467", + "1743485", + "1743516", + "1743637", + "1743690", + "1743723", + "1743762", + "1743811", + "1744049", + "1744133", + "1744237", + "1744240", + "1744587", + "1744691", + "1744761", + "1744928", + "1745076", + "1745086", + "1745549", + "1746012", + "1746399", + "1746437", + "1746600", + "1746749", + "1747044", + "1747242", + "1747949", + "1748277", + "1748799", + "1748889", + "1749137", + "1749712", + "1749732", + "1750339", + "1750759", + "1751227", + "1758873", + "1759029", + "1759152", + "1759405", + "1759552", + "1760088", + "1760588", + "1760738", + "1760849", + "1761017", + "1761401", + "1761728", + "1761857", + "1762232", + "1762605", + "1763285", + "1763597", + "1764920", + "1765763", + "1766123", + "1766265", + "1766366", + "1766624", + "1766708", + "1767590", + "1767644", + "1768106", + "1768136", + "1768222", + "1768302", + "1768411", + "1768691", + "1769098", + "1769504", + "1769819", + "1769945", + "1770123", + "1770274", + "1770396", + "1770592", + "1771501", + "1772155", + "1772359", + "1772783", + "1772926", + "1775081", + "1775149", + "1775887", + "1775910", + "1776168", + "1776299", + "1776576", + "1776846", + "1776978", + "1777243", + "1777868", + "1778073", + "1778114", + "1778136", + "1778574", + "1778695", + "1779429", + "1779630", + "1779682", + "1780139", + "1780300", + "1781683", + "1782524", + "1782607", + "1782659", + "1783394", + "1784809", + "1785140", + "1785281", + "1785873", + "1785931", + "1786886", + "1786930", + "1787061", + "1787107", + "1787399", + "1787522", + "1788466", + "1788764", + "1788916", + "1789061", + "1789246", + "1789474", + "1789545", + "1789671", + "1789826", + "1789978", + "1790356", + "1790601", + "1790683", + "1790794", + "1791382", + "1791874", + "1792055", + "1792280", + "1792324", + "1792405", + "1793856", + "1793981", + "1794099", + "1794570", + "1795126", + "1795443", + "1795782", + "1796225", + "1796408", + "1796469", + "1796639", + "1797073", + "1798083", + "1798340", + "1798362", + "1798377", + "1798440", + "1798478", + "1798514", + "1798902", + "1799687", + "1799702", + "1799789", + "1799993", + "1800016", + "1801046", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1807965", + "1808720", + "1808961", + "1809069", + "1810097", + "1811612", + "1812976", + "1814095", + "1815226", + "1819125", + "1819252", + "1819372", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1824090", + "1824246", + "1825057", + "1825076", + "1825121", + "1825444", + "1825535", + "1825963", + "1826021", + "1826192", + "1827111", + "1827279", + "1827547", + "1827641", + "1828161", + "1828636", + "1829298", + "1829702", + "1830036", + "1830118", + "1830379", + "1830630", + "1830909", + "1831127", + "1831272", + "1831446", + "1831747", + "1832810", + "1833623", + "1835027", + "1835151", + "1835366", + "1835429", + "1836898", + "1837168", + "1837338", + "1839730", + "1840273", + "1841152", + "1841259", + "1841529", + "1842184", + "1842261", + "1843897", + "1845266", + "1845958", + "1846094", + "1846907", + "1847591", + "1847952", + "1848192", + "1848253", + "1848374", + "1848655", + "1848843", + "1849256", + "1849514", + "1849628", + "1849983", + "1850022", + "1850231", + "1850276", + "1850474", + "1850521", + "1850525", + "1850777", + "1850865", + "1851496", + "1852133", + "1852176", + "1852212", + "1852416", + "1852745", + "1852917", + "1853060", + "1853074", + "1853431", + "1853583", + "1853873", + "1854160", + "1854326", + "1854459", + "1854789", + "1855383", + "1856286", + "1856382", + "1856563", + "1856586", + "1856631", + "1856650", + "1856766", + "1856845", + "1857569", + "1857624", + "1857825", + "1857968", + "1858055", + "1858529", + "1858722", + "1859036", + "1859082", + "1859284", + "1860403", + "1860613", + "1860657", + "1861151", + "1861387", + "1861607", + "1861796", + "1862568", + "1862681", + "1863292", + "1863647", + "1864355", + "1864404", + "1864584", + "1866475", + "1867343", + "1869438", + "1869760", + "1869851", + "1869974", + "1870168", + "1870242", + "1870449", + "1870982", + "1871206", + "1871384", + "1871695", + "1871825", + "1872346", + "1872845", + "1873021", + "1873074", + "1873408", + "1873980", + "1874152", + "1874374", + "1874624", + "1874958", + "1875103", + "1875317", + "1875650", + "1875821", + "1875849", + "1875890", + "1876280", + "1876391", + "1876536", + "1876613", + "1876846", + "1877650", + "1877937", + "1878460", + "1878838", + "1879226", + "1879451", + "1879494", + "1879512", + "1879915", + "1881145", + "1881186", + "1881825", + "1882028", + "1882902", + "1883132", + "1883373", + "1884090", + "1884194", + "1884425", + "1884886", + "1884939", + "1886069", + "1886289", + "1886576", + "1887269", + "1887682", + "1888256", + "1888455", + "1888578", + "1888698", + "1889286", + "1889936", + "1890111", + "1890369", + "1891054", + "1891305", + "1891353", + "1894469", + "1894779", + "1898261", + "1898474", + "1906451", + "1909334", + "1911078", + "1912583", + "1918607", + "1920481", + "1920704", + "1929153", + "1938213", + "1938238", + "1939401", + "1939616", + "1940447", + "1940500", + "1940797", + "1941316", + "1942857", + "1944007", + "1951549", + "1951569", + "1951645", + "1952001", + "1952029", + "1952118", + "1952222", + "1952300", + "1952446", + "1952526", + "1952736", + "1952801", + "1954555", + "1954587", + "1955508", + "1955900", + "1956434", + "1956522", + "1956545", + "1956709", + "1956900", + "1957281", + "1957545", + "1957620", + "1957829", + "1957999", + "1958023", + "1958238", + "1959381", + "1959409", + "1959668", + "1959888", + "1960592", + "1960966", + "1961066", + "1961188", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964175", + "1964392", + "1964577", + "1964936", + "1965123", + "1965758", + "1965888", + "1965967", + "1966346", + "1966883", + "1966929", + "1966982", + "1967196", + "1967242", + "1967263", + "1967583", + "1967722", + "1968199", + "1968665", + "1968854", + "1968975", + "1969918", + "1970179", + "1970226", + "1970279", + "1970574", + "1971819", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975336", + "1975542", + "1975570", + "1975729", + "1975783", + "1975885", + "1976155", + "1976515", + "1976949", + "1977104", + "1977419", + "1977775", + "1978019", + "1978112", + "1978364", + "1978506", + "1978749", + "1978814", + "1978974", + "1979106", + "1979243", + "1979727", + "1980342", + "1980511", + "1980718", + "1981690", + "1982367", + "1984922", + "1985507", + "1985969", + "1986081", + "1987269", + "1987509", + "1987555", + "1987711", + "1987792", + "1988533", + "1988779", + "1988876", + "1989161", + "1989996", + "1990136", + "1990531", + "1990677", + "1991135", + "1991357", + "1991817", + "1991946", + "1993403", + "2278098", + "3255940", + "3255956", + "3256169", + "3256188", + "3256294", + "3256322", + "3256356", + "3256568", + "3256934", + "3256950", + "3257150", + "3257220", + "3257225", + "3257328", + "3257405", + "3257500", + "3257694", + "3257798", + "3257894", + "3261008", + "4301067", + "4301098", + "4301121", + "4301340", + "4302289", + "4404424", + "4404934", + "4405245", + "4405430", + "4405493", + "4406069", + "4406268", + "4406291", + "4406298", + "4406360", + "4406622", + "4406931", + "4407165", + "4407354", + "4408190", + "4408204", + "4524069", + "4524400", + "4524792", + "4525072", + "4525607", + "4527338", + "4533124", + "4533660", + "4534405", + "4534456", + "4534532", + "4687068", + "4687943", + "4689528", + "4706578", + "4706723", + "4709385", + "5102272", + "5104758", + "5105328", + "5114254", + "5115807", + "5116471", + "5119806", + "5123346", + "5123443", + "5130576", + "5135400", + "5144176", + "5146397", + "7236046", + "7236059", + "7236098", + "7354470", + "7384515", + "7396883", + "7494486", + "7510496", + "7721234", + "7739898", + "7742506", + "7786896", + "7852351", + "8057237", + "8107362", + "8249110", + "8317469", + "8331787", + "8379138", + "8407958", + "8494978", + "8782295", + "8875114", + "8875890", + "8903953", + "8921795", + "9005880", + "9021546", + "9061491", + "9065472", + "9073940", + "9078027", + "9078901", + "9095083", + "9108102", + "9118632", + "9146182", + "9151414", + "9181278", + "9183600", + "9210500", + "9220793", + "9605252" + ], + "class_count": 691, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.7893807671430488, + "precision": 0.3234152967366764, + "recall": 0.7893807671430488, + "f1": 0.32128858585759756 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "genus", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "11064851", + "11495707", + "12031311", + "12105049", + "1730815", + "1730935", + "1731584", + "1731817", + "1731859", + "1732062", + "1732397", + "1732442", + "1732496", + "1732661", + "1733242", + "1733338", + "1733574", + "1733840", + "1734388", + "1734683", + "1735487", + "1735652", + "1735814", + "1735869", + "1736266", + "1736359", + "1736418", + "1736460", + "1736656", + "1736725", + "1736895", + "1737335", + "1737519", + "1737647", + "1737701", + "1738049", + "1738143", + "1738215", + "1738242", + "1738265", + "1738583", + "1738667", + "1739000", + "1739060", + "1739418", + "1739446", + "1739599", + "1739724", + "1740434", + "1740515", + "1740664", + "1741043", + "1741141", + "1741338", + "1741404", + "1741547", + "1741585", + "1741717", + "1742061", + "1742345", + "1742419", + "1743188", + "1743404", + "1743467", + "1743485", + "1743516", + "1743637", + "1743690", + "1743762", + "1743811", + "1744049", + "1744133", + "1744165", + "1744219", + "1744481", + "1744587", + "1744691", + "1744761", + "1744928", + "1745076", + "1745086", + "1745549", + "1746012", + "1746172", + "1746437", + "1746600", + "1746749", + "1747242", + "1747949", + "1748201", + "1748277", + "1748368", + "1748757", + "1748799", + "1748889", + "1748902", + "1749068", + "1749137", + "1749732", + "1750339", + "1751200", + "1751227", + "1755294", + "1758873", + "1759029", + "1759152", + "1759405", + "1759552", + "1760088", + "1760588", + "1760738", + "1760849", + "1761017", + "1761401", + "1761728", + "1761857", + "1762232", + "1763285", + "1763597", + "1764524", + "1764920", + "1765763", + "1765949", + "1766123", + "1766265", + "1766366", + "1766624", + "1766708", + "1767590", + "1767644", + "1768106", + "1768136", + "1768222", + "1768302", + "1768411", + "1768691", + "1769098", + "1769504", + "1769819", + "1769945", + "1770123", + "1770274", + "1770396", + "1770592", + "1771363", + "1771501", + "1772155", + "1772359", + "1772783", + "1772926", + "1775081", + "1775149", + "1775633", + "1775887", + "1775910", + "1776168", + "1776299", + "1776576", + "1776846", + "1776978", + "1777243", + "1777868", + "1778073", + "1778136", + "1778497", + "1778574", + "1778695", + "1779429", + "1779682", + "1780139", + "1780300", + "1780913", + "1781683", + "1782524", + "1782607", + "1782659", + "1783394", + "1783845", + "1784356", + "1784809", + "1785140", + "1785281", + "1785873", + "1785931", + "1786886", + "1787061", + "1787107", + "1787399", + "1787496", + "1787522", + "1788411", + "1788466", + "1788764", + "1789061", + "1789246", + "1789474", + "1789545", + "1789671", + "1789826", + "1789978", + "1790356", + "1790683", + "1790794", + "1791382", + "1791769", + "1791874", + "1792055", + "1792324", + "1792405", + "1793856", + "1793981", + "1794099", + "1794570", + "1795126", + "1795782", + "1796225", + "1796408", + "1796469", + "1796639", + "1797073", + "1798083", + "1798340", + "1798362", + "1798377", + "1798440", + "1798478", + "1798514", + "1798902", + "1799687", + "1799702", + "1799993", + "1800016", + "1801046", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1807965", + "1808720", + "1808961", + "1809069", + "1810097", + "1811612", + "1812976", + "1814095", + "1814595", + "1815226", + "1819125", + "1819252", + "1819372", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1824090", + "1824246", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827279", + "1827547", + "1827641", + "1828161", + "1828636", + "1829298", + "1829702", + "1830036", + "1830118", + "1830379", + "1830507", + "1830535", + "1830581", + "1830630", + "1830873", + "1830909", + "1831127", + "1831272", + "1831446", + "1831747", + "1831776", + "1832810", + "1833623", + "1835027", + "1835151", + "1835429", + "1836898", + "1837168", + "1837338", + "1838964", + "1839730", + "1840273", + "1841152", + "1841259", + "1841294", + "1841529", + "1842261", + "1843855", + "1843897", + "1845266", + "1845958", + "1846094", + "1846636", + "1846907", + "1847591", + "1847952", + "1848217", + "1848253", + "1848582", + "1848655", + "1848677", + "1848843", + "1849256", + "1849474", + "1849514", + "1849628", + "1849663", + "1849983", + "1850022", + "1850231", + "1850276", + "1850474", + "1850521", + "1850525", + "1850777", + "1850865", + "1851201", + "1851334", + "1851496", + "1852064", + "1852176", + "1852212", + "1852416", + "1852745", + "1852917", + "1853060", + "1853074", + "1853583", + "1853721", + "1853873", + "1854160", + "1854280", + "1854326", + "1854459", + "1854789", + "1855383", + "1856000", + "1856286", + "1856563", + "1856586", + "1856615", + "1856631", + "1856650", + "1856845", + "1857569", + "1857624", + "1857825", + "1857968", + "1858055", + "1858529", + "1858722", + "1859036", + "1859082", + "1860403", + "1860613", + "1860657", + "1861151", + "1861387", + "1861607", + "1862568", + "1862681", + "1863292", + "1863647", + "1864153", + "1864355", + "1864404", + "1864584", + "1866475", + "1867810", + "1869438", + "1869504", + "1869760", + "1869974", + "1870168", + "1870242", + "1870449", + "1870982", + "1871157", + "1871206", + "1871384", + "1871695", + "1871825", + "1872346", + "1872845", + "1873074", + "1873408", + "1873980", + "1874152", + "1874374", + "1874958", + "1875103", + "1875317", + "1875600", + "1875650", + "1875821", + "1875849", + "1875890", + "1876280", + "1876391", + "1876536", + "1876846", + "1877292", + "1877650", + "1877937", + "1878460", + "1878757", + "1878838", + "1879226", + "1879451", + "1879494", + "1879512", + "1879915", + "1881145", + "1881186", + "1881601", + "1881825", + "1882028", + "1882413", + "1882902", + "1883132", + "1883373", + "1884090", + "1884194", + "1884425", + "1884886", + "1884939", + "1886069", + "1886289", + "1886576", + "1887269", + "1887682", + "1888256", + "1888578", + "1888698", + "1889936", + "1890111", + "1890369", + "1891054", + "1891305", + "1891353", + "1894469", + "1894779", + "1895130", + "1906451", + "1911078", + "1912319", + "1913456", + "1918607", + "1920481", + "1920554", + "1920704", + "1939401", + "1939616", + "1940447", + "1940500", + "1940797", + "1941316", + "1951549", + "1951569", + "1951645", + "1952001", + "1952029", + "1952118", + "1952222", + "1952300", + "1952446", + "1952526", + "1952736", + "1952801", + "1954555", + "1954587", + "1955508", + "1955900", + "1956434", + "1956522", + "1956545", + "1956900", + "1957193", + "1957281", + "1957545", + "1957620", + "1957829", + "1957999", + "1958023", + "1958238", + "1959381", + "1959409", + "1959888", + "1960592", + "1960966", + "1961066", + "1961188", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964175", + "1964392", + "1964577", + "1964936", + "1965123", + "1965758", + "1965888", + "1965967", + "1966346", + "1966883", + "1966929", + "1966982", + "1967196", + "1967242", + "1967263", + "1967583", + "1967722", + "1968199", + "1968665", + "1968854", + "1968975", + "1969122", + "1970179", + "1970226", + "1970279", + "1970574", + "1971819", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975336", + "1975542", + "1975570", + "1975729", + "1975783", + "1975885", + "1976155", + "1976515", + "1976949", + "1977104", + "1977419", + "1977775", + "1978019", + "1978112", + "1978364", + "1978506", + "1978749", + "1978814", + "1978974", + "1979106", + "1979243", + "1979727", + "1980342", + "1980511", + "1980718", + "1981690", + "1982367", + "1984731", + "1984922", + "1985507", + "1985969", + "1986081", + "1987269", + "1987509", + "1987711", + "1987792", + "1988533", + "1988779", + "1988876", + "1989161", + "1989996", + "1990136", + "1990531", + "1990677", + "1991135", + "1991357", + "1991817", + "1991946", + "1993403", + "2278098", + "3255940", + "3255956", + "3256169", + "3256188", + "3256294", + "3256322", + "3256568", + "3256934", + "3256950", + "3257150", + "3257152", + "3257220", + "3257225", + "3257328", + "3257405", + "3257500", + "3257694", + "3257798", + "3257894", + "3261008", + "4301067", + "4301098", + "4301121", + "4301340", + "4302289", + "4404424", + "4404729", + "4404934", + "4405245", + "4405430", + "4405493", + "4405983", + "4406069", + "4406268", + "4406291", + "4406298", + "4406360", + "4406622", + "4406931", + "4407138", + "4407165", + "4407310", + "4407354", + "4408190", + "4408204", + "4524069", + "4524400", + "4524792", + "4524913", + "4525072", + "4525607", + "4527338", + "4529834", + "4533124", + "4533660", + "4534405", + "4534456", + "4534532", + "4684145", + "4687068", + "4687943", + "4689528", + "4706578", + "4706723", + "4709385", + "5105328", + "5110641", + "5114254", + "5115807", + "5116471", + "5123346", + "5123443", + "5144176", + "5146397", + "7236046", + "7236091", + "7354470", + "7384515", + "7396883", + "7494486", + "7721234", + "7739898", + "7742506", + "7852351", + "8057237", + "8107362", + "8249110", + "8317469", + "8331787", + "8379138", + "8407958", + "8494978", + "8782295", + "8875890", + "8903953", + "8921795", + "8936210", + "9021546", + "9026655", + "9046214", + "9061491", + "9065472", + "9073940", + "9078027", + "9078901", + "9095083", + "9108102", + "9118632", + "9146182", + "9151414", + "9181278", + "9183600", + "9210500", + "9220793" + ], + "class_count": 713, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8053026558890463, + "precision": 0.3221313136590869, + "recall": 0.8053026558890463, + "f1": 0.3230351895845698 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "genus", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "11064851", + "11495707", + "12031311", + "12105049", + "1730815", + "1730935", + "1731584", + "1731817", + "1731859", + "1732062", + "1732397", + "1732442", + "1732496", + "1732661", + "1733242", + "1733338", + "1733574", + "1733840", + "1734388", + "1734683", + "1735487", + "1735652", + "1735814", + "1735869", + "1736266", + "1736359", + "1736418", + "1736460", + "1736656", + "1736725", + "1736895", + "1737335", + "1737519", + "1737647", + "1737701", + "1738049", + "1738143", + "1738215", + "1738242", + "1738265", + "1738583", + "1738667", + "1739000", + "1739060", + "1739418", + "1739446", + "1739599", + "1739724", + "1740434", + "1740515", + "1740664", + "1741043", + "1741141", + "1741338", + "1741404", + "1741547", + "1741585", + "1741717", + "1742061", + "1742345", + "1742419", + "1743188", + "1743404", + "1743467", + "1743485", + "1743516", + "1743637", + "1743690", + "1743762", + "1743811", + "1744049", + "1744133", + "1744165", + "1744219", + "1744481", + "1744587", + "1744691", + "1744761", + "1744928", + "1745076", + "1745086", + "1745549", + "1746012", + "1746172", + "1746437", + "1746600", + "1746749", + "1747242", + "1747949", + "1748201", + "1748277", + "1748368", + "1748799", + "1748889", + "1748902", + "1749068", + "1749137", + "1749732", + "1750339", + "1751200", + "1751227", + "1755294", + "1758873", + "1759029", + "1759152", + "1759405", + "1759552", + "1760088", + "1760588", + "1760738", + "1760849", + "1761017", + "1761401", + "1761728", + "1761857", + "1762232", + "1763285", + "1763597", + "1764524", + "1764920", + "1765763", + "1765949", + "1766123", + "1766265", + "1766366", + "1766624", + "1766708", + "1767590", + "1767644", + "1768106", + "1768136", + "1768222", + "1768302", + "1768411", + "1768691", + "1769098", + "1769504", + "1769819", + "1769945", + "1770123", + "1770274", + "1770396", + "1770592", + "1771363", + "1771501", + "1772155", + "1772359", + "1772783", + "1772926", + "1775081", + "1775149", + "1775633", + "1775887", + "1775910", + "1776168", + "1776299", + "1776576", + "1776846", + "1776978", + "1777243", + "1777868", + "1778073", + "1778136", + "1778497", + "1778574", + "1778695", + "1779429", + "1779682", + "1780139", + "1780300", + "1780913", + "1781683", + "1782524", + "1782607", + "1782659", + "1783394", + "1783845", + "1784356", + "1784809", + "1785140", + "1785281", + "1785873", + "1785931", + "1786886", + "1787061", + "1787107", + "1787399", + "1787496", + "1787522", + "1788411", + "1788466", + "1788764", + "1789061", + "1789246", + "1789474", + "1789545", + "1789671", + "1789826", + "1789978", + "1790356", + "1790683", + "1790794", + "1791382", + "1791769", + "1791874", + "1792055", + "1792324", + "1792405", + "1793856", + "1793981", + "1794099", + "1794570", + "1795126", + "1795782", + "1796225", + "1796408", + "1796469", + "1796639", + "1797073", + "1798083", + "1798340", + "1798362", + "1798377", + "1798440", + "1798478", + "1798514", + "1798902", + "1799687", + "1799702", + "1799993", + "1800016", + "1801046", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1807965", + "1808720", + "1808961", + "1809069", + "1810097", + "1811612", + "1812976", + "1814095", + "1814595", + "1815226", + "1819125", + "1819252", + "1819372", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1824090", + "1824246", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827279", + "1827547", + "1827641", + "1828161", + "1828636", + "1829298", + "1829702", + "1830036", + "1830118", + "1830379", + "1830507", + "1830535", + "1830581", + "1830630", + "1830873", + "1830909", + "1831127", + "1831272", + "1831446", + "1831747", + "1831776", + "1832810", + "1833623", + "1835027", + "1835151", + "1835429", + "1836898", + "1837168", + "1837338", + "1838964", + "1839730", + "1840273", + "1841152", + "1841259", + "1841294", + "1841529", + "1842261", + "1843855", + "1843897", + "1845266", + "1845958", + "1846094", + "1846636", + "1846907", + "1847591", + "1847952", + "1848217", + "1848253", + "1848582", + "1848655", + "1848677", + "1848843", + "1849256", + "1849474", + "1849514", + "1849628", + "1849663", + "1849983", + "1850022", + "1850231", + "1850276", + "1850474", + "1850521", + "1850525", + "1850777", + "1850865", + "1851201", + "1851334", + "1851496", + "1852064", + "1852176", + "1852212", + "1852416", + "1852745", + "1852917", + "1853060", + "1853074", + "1853583", + "1853721", + "1853873", + "1854160", + "1854280", + "1854326", + "1854459", + "1854789", + "1855383", + "1856000", + "1856286", + "1856563", + "1856586", + "1856615", + "1856631", + "1856650", + "1856845", + "1857569", + "1857624", + "1857825", + "1857968", + "1858055", + "1858529", + "1858722", + "1859036", + "1859082", + "1860403", + "1860613", + "1860657", + "1861151", + "1861387", + "1861607", + "1862568", + "1862681", + "1863292", + "1863647", + "1864153", + "1864355", + "1864404", + "1864584", + "1866475", + "1867810", + "1869438", + "1869504", + "1869760", + "1869974", + "1870168", + "1870242", + "1870449", + "1870982", + "1871157", + "1871206", + "1871384", + "1871695", + "1871825", + "1872346", + "1872845", + "1873074", + "1873408", + "1873980", + "1874152", + "1874374", + "1874958", + "1875103", + "1875317", + "1875600", + "1875650", + "1875821", + "1875849", + "1875890", + "1876280", + "1876391", + "1876536", + "1876846", + "1877292", + "1877650", + "1877937", + "1878460", + "1878757", + "1878838", + "1879226", + "1879451", + "1879494", + "1879512", + "1879915", + "1881145", + "1881186", + "1881601", + "1881825", + "1882028", + "1882413", + "1882902", + "1883132", + "1883373", + "1884090", + "1884194", + "1884425", + "1884886", + "1884939", + "1886069", + "1886289", + "1886576", + "1887269", + "1887682", + "1888256", + "1888578", + "1888698", + "1889936", + "1890111", + "1890369", + "1891054", + "1891305", + "1891353", + "1894469", + "1894779", + "1895130", + "1906451", + "1911078", + "1912319", + "1913456", + "1918607", + "1920481", + "1920554", + "1920704", + "1939401", + "1939616", + "1940447", + "1940500", + "1940797", + "1941316", + "1951549", + "1951569", + "1951645", + "1952001", + "1952029", + "1952118", + "1952222", + "1952300", + "1952446", + "1952526", + "1952736", + "1952801", + "1954555", + "1954587", + "1955508", + "1955900", + "1956434", + "1956522", + "1956545", + "1956900", + "1957193", + "1957281", + "1957545", + "1957620", + "1957829", + "1957999", + "1958023", + "1958238", + "1959381", + "1959409", + "1959888", + "1960592", + "1960966", + "1961066", + "1961188", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964175", + "1964392", + "1964577", + "1964936", + "1965123", + "1965758", + "1965888", + "1965967", + "1966346", + "1966883", + "1966929", + "1966982", + "1967196", + "1967242", + "1967263", + "1967583", + "1967722", + "1968199", + "1968665", + "1968854", + "1968975", + "1969122", + "1970179", + "1970226", + "1970279", + "1970574", + "1971819", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975336", + "1975542", + "1975570", + "1975729", + "1975783", + "1975885", + "1976155", + "1976515", + "1976949", + "1977104", + "1977419", + "1977775", + "1978019", + "1978112", + "1978364", + "1978506", + "1978749", + "1978814", + "1978974", + "1979106", + "1979243", + "1979727", + "1980342", + "1980511", + "1980718", + "1981690", + "1982367", + "1984731", + "1984922", + "1985507", + "1985969", + "1986081", + "1987269", + "1987509", + "1987711", + "1988533", + "1988779", + "1988876", + "1989161", + "1989996", + "1990136", + "1990531", + "1990677", + "1991135", + "1991357", + "1991817", + "1991946", + "1993403", + "2278098", + "3255940", + "3255956", + "3256169", + "3256188", + "3256294", + "3256322", + "3256568", + "3256934", + "3256950", + "3257150", + "3257152", + "3257220", + "3257225", + "3257328", + "3257405", + "3257500", + "3257694", + "3257798", + "3257894", + "3261008", + "4301067", + "4301098", + "4301121", + "4301340", + "4302289", + "4404424", + "4404729", + "4404934", + "4405245", + "4405430", + "4405493", + "4405983", + "4406069", + "4406268", + "4406291", + "4406298", + "4406360", + "4406622", + "4406931", + "4407138", + "4407165", + "4407310", + "4407354", + "4408190", + "4408204", + "4524069", + "4524400", + "4524792", + "4524913", + "4525072", + "4525607", + "4527338", + "4529834", + "4533124", + "4533660", + "4534405", + "4534456", + "4534532", + "4684145", + "4687068", + "4687943", + "4689528", + "4706578", + "4706723", + "4709385", + "5105328", + "5110641", + "5114254", + "5115807", + "5116471", + "5123346", + "5123443", + "5144176", + "5146397", + "7236046", + "7236091", + "7354470", + "7384515", + "7396883", + "7494486", + "7721234", + "7739898", + "7742506", + "7852351", + "8057237", + "8107362", + "8249110", + "8317469", + "8331787", + "8379138", + "8407958", + "8494978", + "8782295", + "8875890", + "8903953", + "8921795", + "8936210", + "9021546", + "9026655", + "9046214", + "9061491", + "9065472", + "9073940", + "9078901", + "9095083", + "9108102", + "9118632", + "9146182", + "9151414", + "9181278", + "9183600", + "9210500", + "9220793" + ], + "class_count": 710, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8053599793321786, + "precision": 0.32303901654923844, + "recall": 0.8053599793321786, + "f1": 0.32445203101159475 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "genus", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "11495707", + "12031311", + "12105049", + "1731584", + "1731859", + "1732062", + "1732397", + "1732496", + "1732661", + "1733242", + "1733338", + "1733840", + "1734388", + "1734683", + "1735487", + "1735814", + "1735869", + "1736266", + "1736359", + "1736418", + "1736460", + "1737335", + "1737519", + "1737647", + "1737701", + "1738049", + "1738215", + "1738583", + "1738667", + "1738881", + "1739000", + "1739060", + "1739336", + "1739418", + "1739446", + "1739724", + "1740434", + "1740664", + "1741338", + "1741404", + "1741540", + "1741585", + "1741717", + "1742061", + "1742419", + "1743188", + "1743404", + "1743467", + "1743485", + "1743516", + "1743637", + "1743690", + "1743762", + "1743811", + "1744049", + "1744219", + "1744587", + "1744691", + "1744761", + "1745076", + "1745086", + "1745549", + "1745922", + "1746012", + "1746172", + "1746437", + "1746600", + "1746749", + "1747242", + "1747723", + "1747949", + "1748277", + "1748757", + "1748799", + "1748902", + "1749068", + "1749137", + "1749401", + "1749712", + "1749732", + "1750339", + "1751200", + "1751227", + "1758873", + "1759029", + "1759152", + "1759405", + "1759552", + "1760088", + "1760588", + "1760849", + "1761017", + "1761094", + "1761401", + "1761728", + "1761857", + "1762232", + "1763285", + "1763597", + "1764920", + "1765763", + "1766123", + "1766265", + "1766366", + "1766624", + "1766708", + "1767590", + "1767644", + "1768106", + "1768136", + "1768222", + "1768302", + "1768411", + "1768691", + "1769098", + "1769504", + "1769819", + "1769945", + "1770123", + "1770274", + "1770396", + "1770592", + "1771363", + "1771501", + "1772155", + "1772359", + "1772783", + "1772926", + "1775081", + "1775149", + "1775887", + "1775910", + "1776168", + "1776299", + "1776576", + "1776846", + "1776978", + "1777243", + "1777868", + "1778073", + "1778114", + "1778136", + "1778695", + "1779429", + "1779682", + "1780139", + "1780300", + "1780913", + "1781683", + "1782524", + "1782607", + "1782659", + "1783394", + "1783845", + "1784356", + "1784809", + "1785140", + "1785281", + "1785873", + "1785931", + "1786886", + "1787061", + "1787107", + "1787399", + "1787522", + "1788411", + "1788466", + "1789061", + "1789246", + "1789545", + "1789671", + "1789826", + "1789978", + "1790356", + "1790683", + "1790794", + "1791382", + "1791769", + "1791874", + "1792055", + "1792324", + "1792405", + "1793856", + "1793981", + "1794099", + "1794570", + "1795126", + "1795782", + "1796209", + "1796225", + "1796408", + "1796469", + "1796639", + "1797073", + "1798083", + "1798340", + "1798362", + "1798377", + "1798440", + "1798478", + "1798514", + "1798902", + "1799687", + "1799702", + "1799993", + "1800016", + "1801046", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1807965", + "1808097", + "1808720", + "1808961", + "1809069", + "1810097", + "1812976", + "1814095", + "1815226", + "1819125", + "1819252", + "1819372", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1824090", + "1825057", + "1825076", + "1825121", + "1825444", + "1825535", + "1825963", + "1826021", + "1826192", + "1827111", + "1827279", + "1827547", + "1827641", + "1828161", + "1828636", + "1829298", + "1829702", + "1830036", + "1830118", + "1830379", + "1830507", + "1830535", + "1830581", + "1830630", + "1830799", + "1830873", + "1830909", + "1831127", + "1831446", + "1831747", + "1831776", + "1832810", + "1833623", + "1835027", + "1835151", + "1835366", + "1835429", + "1836898", + "1837338", + "1839730", + "1840273", + "1841152", + "1841259", + "1841294", + "1841529", + "1842261", + "1842684", + "1843897", + "1845266", + "1845958", + "1846094", + "1846636", + "1846907", + "1848253", + "1848374", + "1848655", + "1849256", + "1849474", + "1849663", + "1849983", + "1850022", + "1850276", + "1850474", + "1850521", + "1850525", + "1850777", + "1850865", + "1851201", + "1851334", + "1851496", + "1852064", + "1852176", + "1852212", + "1852745", + "1852917", + "1853060", + "1853074", + "1853873", + "1854160", + "1854280", + "1854326", + "1854459", + "1854845", + "1855383", + "1856000", + "1856286", + "1856563", + "1856586", + "1856631", + "1856650", + "1856845", + "1857569", + "1857624", + "1857825", + "1857968", + "1858055", + "1858684", + "1858722", + "1859284", + "1859454", + "1860613", + "1860657", + "1860720", + "1861151", + "1861607", + "1862568", + "1862681", + "1863292", + "1863647", + "1864355", + "1864404", + "1864584", + "1866475", + "1867343", + "1867810", + "1869504", + "1869760", + "1869974", + "1870168", + "1870242", + "1870449", + "1870982", + "1871206", + "1871384", + "1872346", + "1872845", + "1873074", + "1873408", + "1873980", + "1874152", + "1874374", + "1874958", + "1875103", + "1875317", + "1875600", + "1875650", + "1875849", + "1875890", + "1876280", + "1876391", + "1876536", + "1877292", + "1877937", + "1878460", + "1878578", + "1878838", + "1879226", + "1879451", + "1879494", + "1879512", + "1879915", + "1881145", + "1881186", + "1881825", + "1882028", + "1882413", + "1882902", + "1883132", + "1884090", + "1884194", + "1884425", + "1884886", + "1884939", + "1886069", + "1886289", + "1886576", + "1887269", + "1887682", + "1888256", + "1888578", + "1888698", + "1889936", + "1890111", + "1890369", + "1891054", + "1891305", + "1891353", + "1892238", + "1894469", + "1898261", + "1902519", + "1918607", + "1920481", + "1920704", + "1928217", + "1939401", + "1940133", + "1940500", + "1940797", + "1951549", + "1951569", + "1951645", + "1952001", + "1952029", + "1952118", + "1952222", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956434", + "1956522", + "1956545", + "1956709", + "1957545", + "1957620", + "1957829", + "1957999", + "1958023", + "1959381", + "1959888", + "1960592", + "1960966", + "1961066", + "1961188", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964175", + "1964392", + "1964577", + "1964936", + "1965123", + "1965758", + "1965888", + "1965967", + "1966346", + "1966883", + "1966929", + "1967196", + "1967242", + "1967263", + "1967583", + "1967722", + "1968199", + "1968665", + "1968854", + "1968975", + "1969918", + "1970179", + "1970226", + "1970279", + "1970574", + "1971819", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975336", + "1975542", + "1975570", + "1975729", + "1975783", + "1975885", + "1976155", + "1976515", + "1976949", + "1977104", + "1977419", + "1977775", + "1978019", + "1978112", + "1978364", + "1978506", + "1978749", + "1978814", + "1978974", + "1979106", + "1979243", + "1979727", + "1980342", + "1980511", + "1980718", + "1981690", + "1982367", + "1984731", + "1984922", + "1985507", + "1985969", + "1986081", + "1987269", + "1987509", + "1987711", + "1988533", + "1988779", + "1988876", + "1989161", + "1989996", + "1990136", + "1990531", + "1990677", + "1991357", + "1991817", + "1991946", + "1993403", + "2278098", + "3255940", + "3255956", + "3256169", + "3256188", + "3256294", + "3256322", + "3256934", + "3256950", + "3257150", + "3257220", + "3257225", + "3257328", + "3257405", + "3257694", + "3257798", + "3257894", + "3261008", + "4301067", + "4301098", + "4301121", + "4301340", + "4302289", + "4404424", + "4404729", + "4405245", + "4405430", + "4405983", + "4406069", + "4406268", + "4406291", + "4406298", + "4406360", + "4406622", + "4407165", + "4407310", + "4407354", + "4408190", + "4408204", + "4524069", + "4524400", + "4524792", + "4525072", + "4525607", + "4527338", + "4533124", + "4533660", + "4534405", + "4534456", + "4534532", + "4684145", + "4687068", + "4687943", + "4689528", + "4706578", + "4706723", + "4709385", + "5102272", + "5105328", + "5110641", + "5114254", + "5115807", + "5116471", + "5123346", + "5123443", + "5144176", + "5146397", + "7236046", + "7236059", + "7236091", + "7354470", + "7384515", + "7396883", + "7494486", + "7721234", + "7739898", + "7742506", + "7852351", + "7876391", + "8057237", + "8107362", + "8249110", + "8317469", + "8331787", + "8379138", + "8407958", + "8494978", + "8782295", + "8875114", + "8875890", + "8903953", + "8921795", + "8936210", + "9021546", + "9026655", + "9046214", + "9061491", + "9065472", + "9073940", + "9078901", + "9095083", + "9108102", + "9118632", + "9146182", + "9151414", + "9181278", + "9183600", + "9210500", + "9220793" + ], + "class_count": 643, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8472767012256567, + "precision": 0.3871858468468912, + "recall": 0.8472767012256567, + "f1": 0.38731172619778687 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "genus", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "11495707", + "12031311", + "12105049", + "1731584", + "1731859", + "1732062", + "1732397", + "1732496", + "1732661", + "1733242", + "1733338", + "1733840", + "1734388", + "1734683", + "1735487", + "1735814", + "1735869", + "1736266", + "1736359", + "1736418", + "1736460", + "1737335", + "1737519", + "1737647", + "1737701", + "1738049", + "1738215", + "1738583", + "1738667", + "1738881", + "1739000", + "1739060", + "1739336", + "1739418", + "1739446", + "1739724", + "1740434", + "1740664", + "1741338", + "1741404", + "1741540", + "1741585", + "1741717", + "1742061", + "1742419", + "1743188", + "1743404", + "1743467", + "1743485", + "1743516", + "1743637", + "1743690", + "1743762", + "1743811", + "1744049", + "1744219", + "1744587", + "1744691", + "1744761", + "1745076", + "1745086", + "1745549", + "1745922", + "1746012", + "1746172", + "1746437", + "1746600", + "1746749", + "1747242", + "1747723", + "1747949", + "1748277", + "1748757", + "1748799", + "1748902", + "1749068", + "1749137", + "1749401", + "1749712", + "1749732", + "1750339", + "1751200", + "1751227", + "1758873", + "1759029", + "1759152", + "1759405", + "1759552", + "1760088", + "1760588", + "1760849", + "1761017", + "1761094", + "1761401", + "1761728", + "1761857", + "1762232", + "1763285", + "1763597", + "1764920", + "1765763", + "1766123", + "1766265", + "1766366", + "1766624", + "1766708", + "1767590", + "1767644", + "1768106", + "1768136", + "1768222", + "1768302", + "1768411", + "1768691", + "1769098", + "1769504", + "1769819", + "1769945", + "1770123", + "1770274", + "1770396", + "1770592", + "1771363", + "1771501", + "1772155", + "1772359", + "1772783", + "1772926", + "1775081", + "1775149", + "1775887", + "1775910", + "1776168", + "1776299", + "1776576", + "1776846", + "1776978", + "1777243", + "1777868", + "1778073", + "1778114", + "1778136", + "1778695", + "1779429", + "1779682", + "1780139", + "1780300", + "1780913", + "1781683", + "1782524", + "1782607", + "1782659", + "1783394", + "1783845", + "1784356", + "1784809", + "1785140", + "1785281", + "1785873", + "1785931", + "1786886", + "1787061", + "1787107", + "1787399", + "1787522", + "1788411", + "1788466", + "1789061", + "1789246", + "1789545", + "1789671", + "1789826", + "1789978", + "1790356", + "1790683", + "1790794", + "1791382", + "1791769", + "1791874", + "1792055", + "1792324", + "1792405", + "1793856", + "1793981", + "1794099", + "1794570", + "1795126", + "1795782", + "1796209", + "1796225", + "1796408", + "1796469", + "1796639", + "1797073", + "1798083", + "1798340", + "1798362", + "1798377", + "1798440", + "1798478", + "1798514", + "1798902", + "1799687", + "1799702", + "1799993", + "1800016", + "1801046", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1807965", + "1808097", + "1808720", + "1808961", + "1809069", + "1810097", + "1812976", + "1814095", + "1815226", + "1819125", + "1819252", + "1819372", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1824090", + "1825057", + "1825076", + "1825121", + "1825444", + "1825535", + "1825963", + "1826021", + "1826192", + "1827111", + "1827279", + "1827547", + "1827641", + "1828161", + "1828636", + "1829298", + "1829702", + "1830036", + "1830118", + "1830379", + "1830507", + "1830535", + "1830581", + "1830630", + "1830799", + "1830873", + "1830909", + "1831127", + "1831446", + "1831747", + "1831776", + "1832810", + "1833623", + "1835027", + "1835151", + "1835366", + "1835429", + "1836898", + "1837338", + "1839730", + "1840273", + "1841152", + "1841259", + "1841294", + "1841529", + "1842261", + "1842684", + "1843897", + "1845266", + "1845958", + "1846094", + "1846636", + "1846907", + "1848253", + "1848374", + "1848655", + "1849256", + "1849474", + "1849663", + "1849983", + "1850022", + "1850276", + "1850474", + "1850521", + "1850525", + "1850777", + "1850865", + "1851201", + "1851334", + "1851496", + "1852064", + "1852176", + "1852212", + "1852745", + "1852917", + "1853060", + "1853074", + "1853873", + "1854160", + "1854280", + "1854326", + "1854459", + "1854845", + "1855383", + "1856000", + "1856286", + "1856563", + "1856586", + "1856631", + "1856650", + "1856845", + "1857569", + "1857624", + "1857825", + "1857968", + "1858055", + "1858684", + "1858722", + "1859284", + "1859454", + "1860613", + "1860657", + "1860720", + "1861151", + "1861607", + "1862568", + "1862681", + "1863292", + "1863647", + "1864355", + "1864404", + "1864584", + "1866475", + "1867343", + "1867810", + "1869504", + "1869760", + "1869974", + "1870168", + "1870242", + "1870982", + "1871206", + "1871384", + "1872346", + "1872845", + "1873074", + "1873408", + "1873980", + "1874152", + "1874374", + "1874958", + "1875103", + "1875317", + "1875600", + "1875650", + "1875849", + "1875890", + "1876280", + "1876391", + "1876536", + "1877292", + "1877937", + "1878460", + "1878578", + "1878838", + "1879226", + "1879451", + "1879494", + "1879512", + "1879915", + "1881145", + "1881186", + "1881825", + "1882028", + "1882413", + "1882902", + "1883132", + "1884090", + "1884194", + "1884425", + "1884886", + "1884939", + "1886069", + "1886289", + "1886576", + "1887269", + "1887682", + "1888256", + "1888578", + "1888698", + "1889936", + "1890111", + "1890369", + "1891054", + "1891305", + "1891353", + "1892238", + "1894469", + "1898261", + "1902519", + "1918607", + "1920481", + "1920704", + "1928217", + "1939401", + "1940133", + "1940500", + "1940797", + "1951549", + "1951569", + "1951645", + "1952001", + "1952029", + "1952118", + "1952222", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956434", + "1956522", + "1956545", + "1956709", + "1957545", + "1957620", + "1957829", + "1957999", + "1958023", + "1959381", + "1959888", + "1960592", + "1960966", + "1961066", + "1961188", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964175", + "1964392", + "1964577", + "1964936", + "1965123", + "1965758", + "1965888", + "1965967", + "1966346", + "1966883", + "1966929", + "1967196", + "1967242", + "1967263", + "1967583", + "1967722", + "1968199", + "1968665", + "1968854", + "1968975", + "1969918", + "1970179", + "1970226", + "1970279", + "1970574", + "1971819", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975336", + "1975542", + "1975570", + "1975729", + "1975783", + "1975885", + "1976155", + "1976515", + "1976949", + "1977104", + "1977419", + "1977775", + "1978019", + "1978112", + "1978364", + "1978506", + "1978749", + "1978814", + "1978974", + "1979106", + "1979243", + "1979727", + "1980342", + "1980511", + "1980718", + "1981690", + "1982367", + "1984731", + "1984922", + "1985507", + "1985969", + "1986081", + "1987269", + "1987509", + "1987711", + "1988533", + "1988779", + "1988876", + "1989161", + "1989996", + "1990136", + "1990531", + "1990677", + "1991357", + "1991817", + "1991946", + "1993403", + "2278098", + "3255940", + "3255956", + "3256169", + "3256188", + "3256294", + "3256322", + "3256934", + "3256950", + "3257150", + "3257220", + "3257225", + "3257328", + "3257405", + "3257694", + "3257798", + "3257894", + "3261008", + "4301067", + "4301098", + "4301121", + "4301340", + "4302289", + "4404424", + "4404729", + "4405245", + "4405430", + "4405983", + "4406069", + "4406268", + "4406291", + "4406298", + "4406360", + "4406622", + "4407165", + "4407310", + "4407354", + "4408190", + "4408204", + "4524069", + "4524400", + "4524792", + "4525072", + "4525607", + "4527338", + "4533124", + "4533660", + "4534405", + "4534456", + "4534532", + "4684145", + "4687068", + "4687943", + "4689528", + "4706578", + "4706723", + "4709385", + "5102272", + "5105328", + "5110641", + "5114254", + "5115807", + "5116471", + "5123346", + "5123443", + "5144176", + "5146397", + "7236046", + "7236059", + "7236091", + "7354470", + "7384515", + "7396883", + "7494486", + "7721234", + "7739898", + "7742506", + "7852351", + "7876391", + "8057237", + "8107362", + "8249110", + "8317469", + "8331787", + "8379138", + "8407958", + "8494978", + "8782295", + "8875114", + "8875890", + "8903953", + "8921795", + "8936210", + "9021546", + "9026655", + "9046214", + "9061491", + "9065472", + "9073940", + "9078901", + "9095083", + "9108102", + "9118632", + "9146182", + "9151414", + "9181278", + "9183600", + "9210500", + "9220793" + ], + "class_count": 642, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8472504239634208, + "precision": 0.38755157575495597, + "recall": 0.8472504239634208, + "f1": 0.38771743876773856 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1786886", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975570", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 244, + "truth_images_in_retained_classes": 52582, + "accepted_predictions_in_retained_classes": 44975, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8198886444355898, + "precision": 0.8176206331689666, + "recall": 0.8198886444355898, + "f1": 0.7926029899466802 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 242, + "truth_images_in_retained_classes": 52567, + "accepted_predictions_in_retained_classes": 44953, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8206876060779148, + "precision": 0.8201078560326222, + "recall": 0.8206876060779148, + "f1": 0.7941995832133606 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 242, + "truth_images_in_retained_classes": 52567, + "accepted_predictions_in_retained_classes": 44773, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8383310164872881, + "precision": 0.8166147950822779, + "recall": 0.8383310164872881, + "f1": 0.8056571781128056 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 242, + "truth_images_in_retained_classes": 52567, + "accepted_predictions_in_retained_classes": 44773, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8383310164872881, + "precision": 0.8166147950822779, + "recall": 0.8383310164872881, + "f1": 0.8056571781128056 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 242, + "truth_images_in_retained_classes": 52567, + "accepted_predictions_in_retained_classes": 44776, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8384072898289766, + "precision": 0.8162946927109619, + "recall": 0.8384072898289766, + "f1": 0.8055261341500322 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 242, + "truth_images_in_retained_classes": 52567, + "accepted_predictions_in_retained_classes": 44776, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8384072898289766, + "precision": 0.8162946927109619, + "recall": 0.8384072898289766, + "f1": 0.8055261341500322 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1786886", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975570", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 244, + "truth_images_in_retained_classes": 52582, + "accepted_predictions_in_retained_classes": 45986, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8801037705609983, + "precision": 0.8650981003057536, + "recall": 0.8801037705609983, + "f1": 0.8548827619376147 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 242, + "truth_images_in_retained_classes": 52567, + "accepted_predictions_in_retained_classes": 45974, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8812527981807469, + "precision": 0.8646719138069031, + "recall": 0.8812527981807469, + "f1": 0.8551819474190718 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1786886", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975570", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 244, + "truth_images_in_retained_classes": 52582, + "accepted_predictions_in_retained_classes": 45983, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8800690931903428, + "precision": 0.8647486446406456, + "recall": 0.8800690931903428, + "f1": 0.8545922539194751 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 242, + "truth_images_in_retained_classes": 52567, + "accepted_predictions_in_retained_classes": 45971, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8812178342202511, + "precision": 0.864319570078447, + "recall": 0.8812178342202511, + "f1": 0.8548890385082203 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "genus", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 221, + "truth_images_in_retained_classes": 52377, + "accepted_predictions_in_retained_classes": 44619, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8242091812881619, + "precision": 0.8349759270593797, + "recall": 0.8242091812881619, + "f1": 0.8073029077289685 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "genus", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 219, + "truth_images_in_retained_classes": 52349, + "accepted_predictions_in_retained_classes": 44584, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8245607328459141, + "precision": 0.8365957191270255, + "recall": 0.8245607328459141, + "f1": 0.8083056265437976 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "genus", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 224, + "truth_images_in_retained_classes": 52409, + "accepted_predictions_in_retained_classes": 44500, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8420595718087585, + "precision": 0.8360051629538205, + "recall": 0.8420595718087585, + "f1": 0.8201488914933474 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "genus", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 219, + "truth_images_in_retained_classes": 52349, + "accepted_predictions_in_retained_classes": 44429, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8411427176898308, + "precision": 0.8376300487556162, + "recall": 0.8411427176898308, + "f1": 0.8202795396773236 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "genus", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 224, + "truth_images_in_retained_classes": 52409, + "accepted_predictions_in_retained_classes": 44504, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8421419742582609, + "precision": 0.8355105285467141, + "recall": 0.8421419742582609, + "f1": 0.8198882695930891 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "genus", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 219, + "truth_images_in_retained_classes": 52349, + "accepted_predictions_in_retained_classes": 44433, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8412270014737968, + "precision": 0.8371241213255166, + "recall": 0.8412270014737968, + "f1": 0.8200129675053699 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 222, + "truth_images_in_retained_classes": 52387, + "accepted_predictions_in_retained_classes": 45701, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.887280993797046, + "precision": 0.8844442695435504, + "recall": 0.887280993797046, + "f1": 0.8716325700875605 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 219, + "truth_images_in_retained_classes": 52349, + "accepted_predictions_in_retained_classes": 45660, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8874178652560551, + "precision": 0.8854839580503524, + "recall": 0.8874178652560551, + "f1": 0.87205931213225 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 222, + "truth_images_in_retained_classes": 52387, + "accepted_predictions_in_retained_classes": 45697, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8872428799301995, + "precision": 0.8840784199971973, + "recall": 0.8872428799301995, + "f1": 0.8713393860561334 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 219, + "truth_images_in_retained_classes": 52349, + "accepted_predictions_in_retained_classes": 45656, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8873792292814436, + "precision": 0.8851130968663781, + "recall": 0.8873792292814436, + "f1": 0.8717621118812142 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "genus", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1758873", + "1759152", + "1763597", + "1766123", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 178, + "truth_images_in_retained_classes": 51193, + "accepted_predictions_in_retained_classes": 43632, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8447796356264702, + "precision": 0.8683866368462851, + "recall": 0.8447796356264702, + "f1": 0.8409068314387458 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "genus", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766123", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 174, + "truth_images_in_retained_classes": 51091, + "accepted_predictions_in_retained_classes": 43532, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8468431185140185, + "precision": 0.8700188865290815, + "recall": 0.8468431185140185, + "f1": 0.8425197107045042 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "genus", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1760088", + "1763597", + "1766123", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1797073", + "1798514", + "1798902", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 180, + "truth_images_in_retained_classes": 51668, + "accepted_predictions_in_retained_classes": 43510, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.851621812405513, + "precision": 0.8767852358251573, + "recall": 0.851621812405513, + "f1": 0.8500899477281391 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "genus", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766123", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 174, + "truth_images_in_retained_classes": 51091, + "accepted_predictions_in_retained_classes": 43120, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8572846967941111, + "precision": 0.879992285140897, + "recall": 0.8572846967941111, + "f1": 0.8551335240737619 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "genus", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1760088", + "1763597", + "1766123", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1797073", + "1798514", + "1798902", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 180, + "truth_images_in_retained_classes": 51668, + "accepted_predictions_in_retained_classes": 43511, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8514718324234797, + "precision": 0.8766263792837025, + "recall": 0.8514718324234797, + "f1": 0.8499294903140182 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "genus", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766123", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 174, + "truth_images_in_retained_classes": 51091, + "accepted_predictions_in_retained_classes": 43120, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8569783049191699, + "precision": 0.8797840089758777, + "recall": 0.8569783049191699, + "f1": 0.8548933267800543 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1758873", + "1759152", + "1760088", + "1763597", + "1766123", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1797073", + "1798514", + "1798902", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 181, + "truth_images_in_retained_classes": 51690, + "accepted_predictions_in_retained_classes": 44870, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8952201890577778, + "precision": 0.9132784407726137, + "recall": 0.8952201890577778, + "f1": 0.8933677281815686 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766123", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 174, + "truth_images_in_retained_classes": 51091, + "accepted_predictions_in_retained_classes": 44453, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.899597539923479, + "precision": 0.9135145414371996, + "recall": 0.899597539923479, + "f1": 0.8960360409484771 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1758873", + "1759152", + "1760088", + "1763597", + "1766123", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1797073", + "1798514", + "1798902", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 181, + "truth_images_in_retained_classes": 51690, + "accepted_predictions_in_retained_classes": 44864, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8951734416630821, + "precision": 0.9130696781092725, + "recall": 0.8951734416630821, + "f1": 0.8931898883411497 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766123", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 174, + "truth_images_in_retained_classes": 51091, + "accepted_predictions_in_retained_classes": 44448, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8995623397519747, + "precision": 0.9132974690072101, + "recall": 0.8995623397519747, + "f1": 0.8958616326578391 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "family", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "3528", + "3530", + "3552", + "3553", + "3554", + "3556", + "3563", + "4300664", + "4300668", + "4525436", + "4525465", + "4527533", + "4528997", + "4532185", + "4538", + "4542", + "4554", + "4705755", + "4864", + "4865", + "4867", + "4870", + "5336", + "5338", + "5340", + "5343", + "5345", + "5473", + "5474", + "5481", + "5487", + "6166", + "6946", + "6950", + "6953", + "6954", + "7014", + "7015", + "7016", + "7017", + "7294", + "7297", + "8838", + "8839", + "8840", + "8841", + "8855", + "8860", + "8861", + "8863", + "8864", + "8865", + "8866", + "8868", + "8870", + "8871", + "8874", + "9408", + "9410", + "9412", + "9417", + "9541689", + "9689", + "9717" + ], + "class_count": 64, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8435038466784595, + "precision": 0.2610923881260793, + "recall": 0.8435038466784595, + "f1": 0.26968398140672784 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "family", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "3528", + "3530", + "3552", + "3553", + "3554", + "3556", + "3563", + "4300664", + "4300668", + "4525436", + "4525465", + "4527533", + "4528997", + "4532185", + "4538", + "4542", + "4554", + "4705755", + "4864", + "4865", + "4867", + "4870", + "5320", + "5336", + "5340", + "5343", + "5345", + "5474", + "5481", + "5487", + "6166", + "6946", + "6950", + "6954", + "7014", + "7015", + "7016", + "7017", + "7294", + "7297", + "8838", + "8839", + "8840", + "8841", + "8855", + "8860", + "8861", + "8863", + "8864", + "8865", + "8866", + "8868", + "8871", + "8874", + "9408", + "9410", + "9412", + "9541689", + "9689", + "9717" + ], + "class_count": 60, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8104767092433202, + "precision": 0.2753352445359579, + "recall": 0.8104767092433202, + "f1": 0.2804941988278224 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "family", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "3528", + "3530", + "3552", + "3553", + "3554", + "3556", + "3563", + "4300664", + "4300668", + "4525436", + "4525465", + "4527533", + "4528997", + "4532185", + "4538", + "4542", + "4554", + "4705755", + "4864", + "4865", + "4867", + "4870", + "5320", + "5336", + "5340", + "5343", + "5345", + "5474", + "5481", + "5487", + "6166", + "6946", + "6950", + "6954", + "7014", + "7015", + "7016", + "7017", + "7294", + "7297", + "8838", + "8839", + "8840", + "8841", + "8855", + "8860", + "8861", + "8863", + "8864", + "8865", + "8866", + "8868", + "8871", + "8874", + "9408", + "9410", + "9412", + "9541689", + "9689", + "9717" + ], + "class_count": 60, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8106325437578626, + "precision": 0.2756918885388057, + "recall": 0.8106325437578626, + "f1": 0.2808879232365722 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "family", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "3528", + "3530", + "3552", + "3553", + "3554", + "3556", + "4300668", + "4525436", + "4525465", + "4527533", + "4532185", + "4538", + "4542", + "4554", + "4705755", + "4864", + "4865", + "4867", + "4870", + "5320", + "5336", + "5340", + "5343", + "5345", + "5474", + "5487", + "6166", + "6946", + "6950", + "7014", + "7015", + "7016", + "7017", + "7294", + "7297", + "8838", + "8839", + "8840", + "8841", + "8855", + "8860", + "8861", + "8863", + "8864", + "8866", + "8868", + "8871", + "8874", + "9410", + "9412", + "9689", + "9717" + ], + "class_count": 52, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.86366836103727, + "precision": 0.3473357735776554, + "recall": 0.86366836103727, + "f1": 0.35919021330288153 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "family", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "3528", + "3530", + "3552", + "3553", + "3554", + "3556", + "4300668", + "4525436", + "4525465", + "4527533", + "4532185", + "4538", + "4542", + "4554", + "4705755", + "4864", + "4865", + "4867", + "4870", + "5320", + "5336", + "5340", + "5343", + "5345", + "5474", + "5487", + "6166", + "6946", + "6950", + "7014", + "7015", + "7016", + "7017", + "7294", + "7297", + "8838", + "8839", + "8840", + "8841", + "8855", + "8860", + "8861", + "8863", + "8864", + "8866", + "8868", + "8871", + "8874", + "9410", + "9412", + "9689", + "9717" + ], + "class_count": 52, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8636665098420966, + "precision": 0.34712795694828363, + "recall": 0.8636665098420966, + "f1": 0.359050677814834 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 52241, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8700294236802284, + "precision": 0.8073706420034539, + "recall": 0.8700294236802284, + "f1": 0.8237730542270191 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 52241, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8700294236802284, + "precision": 0.8073706420034539, + "recall": 0.8700294236802284, + "f1": 0.8237730542270191 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 51891, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8570482156298184, + "precision": 0.7593390669412071, + "recall": 0.8570482156298184, + "f1": 0.7831492631501338 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 51891, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8570482156298184, + "precision": 0.7593390669412071, + "recall": 0.8570482156298184, + "f1": 0.7831492631501338 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 51893, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8572274253215421, + "precision": 0.7604089989497506, + "recall": 0.8572274253215421, + "f1": 0.7843304363763831 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 51893, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8572274253215421, + "precision": 0.7604089989497506, + "recall": 0.8572274253215421, + "f1": 0.7843304363763831 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 52402, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8932186151928605, + "precision": 0.8280730113019039, + "recall": 0.8932186151928605, + "f1": 0.8505612212541586 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 52402, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8932186151928605, + "precision": 0.8280730113019039, + "recall": 0.8932186151928605, + "f1": 0.8505612212541586 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 52403, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8932164863184111, + "precision": 0.8275326880655373, + "recall": 0.8932164863184111, + "f1": 0.850198428985235 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 52403, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8932164863184111, + "precision": 0.8275326880655373, + "recall": 0.8932164863184111, + "f1": 0.850198428985235 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "family", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 52241, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8700294236802284, + "precision": 0.8073706420034539, + "recall": 0.8700294236802284, + "f1": 0.8237730542270191 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "family", + "cutoff": 10, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 52241, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8700294236802284, + "precision": 0.8073706420034539, + "recall": 0.8700294236802284, + "f1": 0.8237730542270191 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "family", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 51891, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8570482156298184, + "precision": 0.7593390669412071, + "recall": 0.8570482156298184, + "f1": 0.7831492631501338 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "family", + "cutoff": 10, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 51891, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8570482156298184, + "precision": 0.7593390669412071, + "recall": 0.8570482156298184, + "f1": 0.7831492631501338 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "family", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 51893, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8572274253215421, + "precision": 0.7604089989497506, + "recall": 0.8572274253215421, + "f1": 0.7843304363763831 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "family", + "cutoff": 10, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 51893, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8572274253215421, + "precision": 0.7604089989497506, + "recall": 0.8572274253215421, + "f1": 0.7843304363763831 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "family", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 52402, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8932186151928605, + "precision": 0.8280730113019039, + "recall": 0.8932186151928605, + "f1": 0.8505612212541586 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "family", + "cutoff": 10, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 52402, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8932186151928605, + "precision": 0.8280730113019039, + "recall": 0.8932186151928605, + "f1": 0.8505612212541586 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "family", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 52403, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8932164863184111, + "precision": 0.8275326880655373, + "recall": 0.8932164863184111, + "f1": 0.850198428985235 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "family", + "cutoff": 10, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 52403, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8932164863184111, + "precision": 0.8275326880655373, + "recall": 0.8932164863184111, + "f1": 0.850198428985235 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 17, + "truth_images_in_retained_classes": 52742, + "accepted_predictions_in_retained_classes": 52159, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8777980291519171, + "precision": 0.8618479765055044, + "recall": 0.8777980291519171, + "f1": 0.8634797826579268 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "common", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 17, + "truth_images_in_retained_classes": 52742, + "accepted_predictions_in_retained_classes": 52159, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8777980291519171, + "precision": 0.8618479765055044, + "recall": 0.8777980291519171, + "f1": 0.8634797826579268 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 17, + "truth_images_in_retained_classes": 52742, + "accepted_predictions_in_retained_classes": 51776, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8761006803143303, + "precision": 0.8444656509344528, + "recall": 0.8761006803143303, + "f1": 0.8502787174152917 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "common", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 17, + "truth_images_in_retained_classes": 52742, + "accepted_predictions_in_retained_classes": 51776, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8761006803143303, + "precision": 0.8444656509344528, + "recall": 0.8761006803143303, + "f1": 0.8502787174152917 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 17, + "truth_images_in_retained_classes": 52742, + "accepted_predictions_in_retained_classes": 51781, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8763115152457701, + "precision": 0.8445713671430294, + "recall": 0.8763115152457701, + "f1": 0.8504835558317285 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "common", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 17, + "truth_images_in_retained_classes": 52742, + "accepted_predictions_in_retained_classes": 51781, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8763115152457701, + "precision": 0.8445713671430294, + "recall": 0.8763115152457701, + "f1": 0.8504835558317285 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 17, + "truth_images_in_retained_classes": 52742, + "accepted_predictions_in_retained_classes": 52332, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9186540915649681, + "precision": 0.8978901347538473, + "recall": 0.9186540915649681, + "f1": 0.9040916328480296 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "common", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 17, + "truth_images_in_retained_classes": 52742, + "accepted_predictions_in_retained_classes": 52332, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9186540915649681, + "precision": 0.8978901347538473, + "recall": 0.9186540915649681, + "f1": 0.9040916328480296 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 17, + "truth_images_in_retained_classes": 52742, + "accepted_predictions_in_retained_classes": 52333, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9186515870067923, + "precision": 0.897254460358122, + "recall": 0.9186515870067923, + "f1": 0.903664818414002 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "common", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 17, + "truth_images_in_retained_classes": 52742, + "accepted_predictions_in_retained_classes": 52333, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9186515870067923, + "precision": 0.897254460358122, + "recall": 0.9186515870067923, + "f1": 0.903664818414002 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "species", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "10638451", + "11418741", + "11478679", + "11571523", + "11598540", + "11962292", + "12089608", + "12135372", + "12253343", + "1731598", + "1732063", + "1732416", + "1732452", + "1733258", + "1734453", + "1734704", + "1734826", + "1735532", + "1736727", + "1737491", + "1737542", + "1737650", + "1737775", + "1737776", + "1737847", + "1738050", + "1739819", + "1739833", + "1739922", + "1739931", + "1740005", + "1740069", + "1740185", + "1741341", + "1741633", + "1741752", + "1742142", + "1743532", + "1743775", + "1744071", + "1744782", + "1745079", + "1746027", + "1746440", + "1746775", + "1746832", + "1746876", + "1746910", + "1758878", + "1759069", + "1759083", + "1759153", + "1759407", + "1760104", + "1760246", + "1760593", + "1761041", + "1761735", + "1761865", + "1762244", + "1763610", + "1765011", + "1766137", + "1766210", + "1766274", + "1766510", + "1766741", + "1767597", + "1767625", + "1768117", + "1768150", + "1768341", + "1768749", + "1769103", + "1769505", + "1769566", + "1769897", + "1769958", + "1770150", + "1770307", + "1770477", + "1770772", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1772793", + "1772940", + "1772956", + "1773309", + "1775152", + "1775891", + "1776330", + "1776862", + "1777253", + "1778074", + "1779435", + "1779690", + "1780150", + "1781694", + "1782560", + "1782615", + "1782627", + "1782672", + "1782726", + "1782763", + "1782777", + "1782841", + "1782927", + "1782948", + "1783016", + "1783037", + "1783043", + "1784826", + "1785185", + "1785286", + "1785888", + "1785895", + "1786902", + "1787112", + "1787267", + "1787610", + "1787770", + "1788635", + "1788917", + "1789267", + "1789580", + "1789694", + "1789695", + "1789730", + "1789745", + "1789755", + "1789783", + "1789785", + "1789982", + "1790002", + "1790072", + "1790160", + "1790692", + "1791422", + "1792383", + "1792411", + "1792418", + "1793877", + "1794590", + "1795215", + "1795854", + "1796117", + "1796145", + "1796169", + "1796188", + "1796463", + "1796668", + "1796678", + "1797178", + "1797258", + "1797367", + "1797479", + "1798346", + "1798449", + "1798504", + "1798802", + "1798807", + "1798974", + "1799132", + "1799135", + "1799701", + "1799708", + "1800004", + "1800032", + "1801051", + "1801896", + "1802280", + "1803012", + "1803073", + "1804071", + "1804906", + "1807206", + "1807969", + "1810099", + "1811789", + "1811896", + "1812394", + "1813114", + "1819145", + "1819268", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822787", + "1822796", + "1822819", + "1822830", + "1823726", + "1825064", + "1825077", + "1825083", + "1825156", + "1825176", + "1825971", + "1825983", + "1826022", + "1826033", + "1827125", + "1828162", + "1828637", + "1830410", + "1830457", + "1830843", + "1830937", + "1830962", + "1831009", + "1831136", + "1831168", + "1831643", + "1832853", + "1835156", + "1836899", + "1839893", + "1841261", + "1845270", + "1847407", + "1850246", + "1850538", + "1850781", + "1852177", + "1857577", + "1857626", + "1857828", + "1861644", + "1862580", + "1862837", + "1864377", + "1869803", + "1870202", + "1870250", + "1870988", + "1871252", + "1871407", + "1872315", + "1872368", + "1872901", + "1873411", + "1874375", + "1875008", + "1875120", + "1875327", + "1875869", + "1876329", + "1876542", + "1877988", + "1878879", + "1878895", + "1879252", + "1879452", + "1879970", + "1880064", + "1880139", + "1880140", + "1881151", + "1881834", + "1882210", + "1883161", + "1884212", + "1884255", + "1884273", + "1884332", + "1884370", + "1884403", + "1884465", + "1884970", + "1886579", + "1886587", + "1887108", + "1887290", + "1887701", + "1888579", + "1888743", + "1888759", + "1888826", + "1889942", + "1890187", + "1890534", + "1890576", + "1890656", + "1891059", + "1891326", + "1891426", + "1891473", + "1891493", + "1891494", + "1920712", + "1951557", + "1951649", + "1951713", + "1952014", + "1952062", + "1952130", + "1952229", + "1952449", + "1952532", + "1952806", + "1952812", + "1956440", + "1956524", + "1956599", + "1957300", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1958024", + "1958323", + "1959383", + "1959395", + "1959914", + "1959919", + "1960617", + "1961040", + "1962204", + "1962265", + "1962434", + "1962516", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1963463", + "1964191", + "1964471", + "1964637", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965777", + "1965825", + "1965841", + "1965913", + "1965996", + "1966017", + "1966351", + "1967011", + "1967245", + "1967273", + "1967597", + "1967815", + "1968678", + "1968867", + "1970213", + "1970227", + "1970284", + "1972120", + "1972187", + "1972234", + "1972250", + "1972342", + "1972434", + "1972449", + "1973414", + "1973467", + "1975546", + "1975553", + "1975571", + "1975793", + "1975897", + "1975903", + "1976163", + "1977003", + "1977068", + "1978056", + "1978065", + "1978114", + "1978375", + "1978445", + "1978776", + "1978977", + "1979308", + "1979430", + "1979473", + "1979781", + "1980521", + "1981696", + "1982406", + "1982500", + "1982525", + "1982529", + "1982541", + "1982542", + "1982592", + "1982636", + "1982671", + "1982746", + "1982885", + "1983000", + "1983052", + "1983170", + "1983260", + "1983288", + "1983387", + "1983441", + "1983442", + "1983525", + "1983548", + "1983648", + "1983694", + "1983705", + "1983755", + "1983896", + "1983922", + "1983997", + "1984117", + "1984942", + "1984949", + "1984954", + "1985522", + "1986052", + "1986056", + "1986157", + "1986166", + "1986171", + "1986220", + "1986452", + "1986522", + "1986575", + "1987527", + "1987744", + "1988593", + "1988881", + "1989428", + "1990066", + "1990150", + "1990551", + "1991371", + "1992066", + "1992504", + "1993419", + "4302268", + "4522322", + "4523522", + "4523880", + "4523885", + "4524054", + "4524070", + "4524072", + "4524376", + "4524393", + "4524421", + "4524426", + "4524636", + "4524638", + "4524793", + "4525078", + "4525500", + "4525510", + "4525530", + "4525540", + "4525547", + "4529566", + "4529630", + "4530151", + "4531284", + "4531402", + "4531506", + "4531517", + "4531687", + "4531690", + "4531708", + "4532022", + "4532095", + "4532253", + "4532293", + "4532297", + "4532357", + "4532500", + "4532544", + "4532696", + "4532886", + "4532888", + "4532890", + "4533115", + "4533136", + "4533202", + "4533273", + "4533360", + "4533431", + "4533433", + "4533442", + "4533446", + "4533671", + "4533952", + "4534057", + "4534166", + "4534207", + "4534290", + "4534299", + "4534398", + "4534408", + "4534463", + "4534485", + "4534533", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "4534914", + "5101678", + "5101745", + "5102951", + "5102982", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112155", + "5112283", + "5112291", + "5112345", + "5112362", + "5113036", + "5113078", + "5113234", + "5113847", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5116475", + "5116609", + "5116669", + "5116698", + "5116850", + "5116941", + "5117049", + "5117089", + "5117189", + "5117400", + "5118892", + "5118996", + "5119143", + "5119245", + "5120396", + "5123922", + "5124007", + "5124029", + "5124143", + "5124233", + "5125689", + "5126052", + "5126212", + "5126217", + "5126680", + "5142870", + "5142971", + "5143048", + "5143129", + "5143147", + "5143380", + "5143453", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5145136", + "5145409", + "5145965", + "5146342", + "5146379", + "5146412", + "5146496", + "5146559", + "5146677", + "5146961", + "5147039", + "5147062", + "5147193", + "5147208", + "5147232", + "5147245", + "5147608", + "5147638", + "5147827", + "5148286", + "5148394", + "5148424", + "5148436", + "5148462", + "5148475", + "5148486", + "5148487", + "5149414", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769028", + "5769062", + "5769068", + "5769072", + "5769191", + "5769272", + "5771259", + "5771350", + "5771982", + "5772063", + "5772176", + "5772180", + "5772186", + "5772196", + "5772199", + "5772202", + "5772205", + "5772206", + "5772210", + "5772309", + "5772351", + "5880533", + "5880545", + "5880552", + "5880559", + "5880563", + "5884851", + "6097214", + "6097236", + "7429212", + "7438067", + "7443518", + "7446048", + "7596232", + "7681733", + "7730078", + "7734292", + "7752082", + "7780930", + "7825213", + "7874258", + "7875265", + "7895336", + "7937573", + "7940536", + "7960566", + "7972792", + "7993353", + "8000103", + "8007222", + "8015895", + "8105817", + "8160782", + "8223165", + "8237343", + "8237987", + "8262357", + "8361848", + "8361973", + "8388883", + "8394261", + "8397564", + "8407461", + "8421569", + "8532380", + "8537359", + "8581601", + "9092175", + "9101339", + "9473121", + "9674732" + ], + "class_count": 690, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 36810, + "report_images": 52788, + "overall_coverage": 0.6973175721754944, + "metrics": { + "accuracy": 0.8465208024160925, + "precision": 0.6381169943670084, + "recall": 0.5418132969389368, + "f1": 0.4466755276813748 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "species", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "10055273", + "10638451", + "11418741", + "11478679", + "11571523", + "11962292", + "12089608", + "12135372", + "12253343", + "1731598", + "1732063", + "1732416", + "1732452", + "1734453", + "1734704", + "1734826", + "1737491", + "1737542", + "1737552", + "1737650", + "1737775", + "1737776", + "1737847", + "1738050", + "1739272", + "1739833", + "1739922", + "1740005", + "1740069", + "1740185", + "1741341", + "1741633", + "1741752", + "1742142", + "1743532", + "1743775", + "1744071", + "1744739", + "1744782", + "1745079", + "1746027", + "1746440", + "1746613", + "1746775", + "1746832", + "1746876", + "1748890", + "1758878", + "1759069", + "1759083", + "1759153", + "1759673", + "1760104", + "1760593", + "1761041", + "1762244", + "1763610", + "1765011", + "1765767", + "1766130", + "1766137", + "1766210", + "1766274", + "1766510", + "1767597", + "1767625", + "1767655", + "1768117", + "1768150", + "1768341", + "1769103", + "1769505", + "1769566", + "1769897", + "1769958", + "1770150", + "1770307", + "1770477", + "1770772", + "1770880", + "1771040", + "1771214", + "1771509", + "1771531", + "1771698", + "1771772", + "1772169", + "1772179", + "1772940", + "1773309", + "1775152", + "1775891", + "1776330", + "1776619", + "1776862", + "1777253", + "1778074", + "1779435", + "1779690", + "1780150", + "1781694", + "1782560", + "1782615", + "1782627", + "1782672", + "1782726", + "1782763", + "1782777", + "1782841", + "1782927", + "1782948", + "1783016", + "1783037", + "1783043", + "1784359", + "1784826", + "1785286", + "1785888", + "1785895", + "1786902", + "1787064", + "1787112", + "1787590", + "1787610", + "1788425", + "1788635", + "1789267", + "1789580", + "1789694", + "1789695", + "1789730", + "1789745", + "1789783", + "1789785", + "1789982", + "1790002", + "1790072", + "1790160", + "1790816", + "1791422", + "1792383", + "1792411", + "1792418", + "1793877", + "1794590", + "1795215", + "1795854", + "1796117", + "1796145", + "1796169", + "1796668", + "1796678", + "1797178", + "1797258", + "1797367", + "1797479", + "1798346", + "1798372", + "1798449", + "1798802", + "1798807", + "1798974", + "1799132", + "1799135", + "1799701", + "1799708", + "1800004", + "1800032", + "1801051", + "1801896", + "1802280", + "1803012", + "1803073", + "1804071", + "1804906", + "1807206", + "1808752", + "1810099", + "1811789", + "1811896", + "1812394", + "1813114", + "1819145", + "1819268", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822787", + "1822796", + "1822819", + "1822830", + "1823726", + "1825064", + "1825077", + "1825156", + "1825176", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830584", + "1830879", + "1830937", + "1830962", + "1831136", + "1831168", + "1831643", + "1831752", + "1832853", + "1835156", + "1836899", + "1837420", + "1839893", + "1840301", + "1840346", + "1840360", + "1841261", + "1845270", + "1847407", + "1848657", + "1850971", + "1852177", + "1852311", + "1854202", + "1854237", + "1857829", + "1858074", + "1858113", + "1858163", + "1862578", + "1862580", + "1862837", + "1864377", + "1870250", + "1870988", + "1871252", + "1871407", + "1872368", + "1872901", + "1873079", + "1874375", + "1875008", + "1875120", + "1875327", + "1875631", + "1875865", + "1875869", + "1876329", + "1876542", + "1878879", + "1878895", + "1878907", + "1879252", + "1879452", + "1879970", + "1880064", + "1880140", + "1880143", + "1881151", + "1881834", + "1882210", + "1883161", + "1884212", + "1884255", + "1884273", + "1884332", + "1884370", + "1884403", + "1884465", + "1884970", + "1886084", + "1886579", + "1886587", + "1887108", + "1887290", + "1888743", + "1888759", + "1888826", + "1889833", + "1889942", + "1890187", + "1890534", + "1890576", + "1890656", + "1891059", + "1891326", + "1891473", + "1891493", + "1939432", + "1951557", + "1951649", + "1951713", + "1952014", + "1952062", + "1952130", + "1952229", + "1952532", + "1952806", + "1952812", + "1956440", + "1956524", + "1956599", + "1957300", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1958024", + "1959383", + "1959395", + "1959914", + "1959919", + "1960617", + "1961040", + "1962204", + "1962265", + "1962434", + "1962516", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1963463", + "1964195", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965777", + "1965825", + "1965841", + "1965913", + "1965996", + "1966017", + "1966351", + "1967245", + "1967273", + "1967815", + "1968678", + "1968867", + "1970213", + "1970227", + "1970284", + "1972120", + "1972185", + "1972187", + "1972234", + "1972250", + "1972342", + "1972434", + "1972449", + "1973414", + "1973467", + "1975546", + "1975553", + "1975571", + "1975897", + "1975903", + "1976163", + "1977003", + "1978065", + "1978114", + "1978375", + "1978445", + "1978776", + "1978977", + "1979308", + "1979430", + "1979473", + "1979781", + "1981696", + "1982406", + "1982500", + "1982525", + "1982529", + "1982541", + "1982542", + "1982592", + "1982636", + "1982671", + "1982746", + "1982885", + "1983170", + "1983260", + "1983288", + "1983387", + "1983441", + "1983442", + "1983525", + "1983548", + "1983648", + "1983694", + "1983705", + "1983755", + "1983888", + "1983896", + "1983922", + "1983999", + "1984117", + "1984954", + "1985522", + "1986052", + "1986056", + "1986157", + "1986166", + "1986171", + "1986220", + "1986522", + "1986575", + "1987527", + "1987744", + "1988593", + "1988684", + "1988881", + "1989428", + "1990066", + "1990150", + "1990551", + "1991371", + "1992066", + "1992504", + "4302252", + "4302268", + "4522322", + "4522922", + "4523522", + "4523880", + "4523885", + "4524054", + "4524072", + "4524376", + "4524393", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525189", + "4525500", + "4525510", + "4525530", + "4525540", + "4525547", + "4527972", + "4529566", + "4529630", + "4530151", + "4531284", + "4531402", + "4531517", + "4531687", + "4531690", + "4531708", + "4531968", + "4532022", + "4532095", + "4532253", + "4532293", + "4532297", + "4532357", + "4532516", + "4532534", + "4532544", + "4532886", + "4532888", + "4532890", + "4533115", + "4533136", + "4533202", + "4533273", + "4533360", + "4533431", + "4533433", + "4533442", + "4533446", + "4533671", + "4533952", + "4534057", + "4534166", + "4534207", + "4534290", + "4534299", + "4534398", + "4534408", + "4534458", + "4534463", + "4534485", + "4534533", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "4534914", + "5101678", + "5101745", + "5102951", + "5103451", + "5104056", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112155", + "5112283", + "5112291", + "5112336", + "5112345", + "5112362", + "5113036", + "5113078", + "5113234", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5116475", + "5116609", + "5116669", + "5116698", + "5116850", + "5116941", + "5117049", + "5117089", + "5117400", + "5118892", + "5118996", + "5119245", + "5120675", + "5123461", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5126217", + "5126680", + "5142870", + "5142971", + "5143048", + "5143129", + "5143147", + "5143380", + "5143453", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5145136", + "5145409", + "5146342", + "5146379", + "5146412", + "5146496", + "5146559", + "5146677", + "5146961", + "5147039", + "5147062", + "5147193", + "5147208", + "5147245", + "5147608", + "5148286", + "5148394", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5769191", + "5769272", + "5771259", + "5771350", + "5771982", + "5772063", + "5772176", + "5772196", + "5772202", + "5772205", + "5772210", + "5772351", + "5880533", + "5880545", + "5880550", + "5880552", + "5880559", + "5880563", + "5884851", + "6097214", + "6097236", + "7438067", + "7443518", + "7446048", + "7596232", + "7681733", + "7730078", + "7752082", + "7780930", + "7825213", + "7874258", + "7895336", + "7940536", + "7960566", + "7972792", + "8000103", + "8007222", + "8015895", + "8049830", + "8105817", + "8223165", + "8237343", + "8237987", + "8244266", + "8262357", + "8361848", + "8361973", + "8397564", + "8407461", + "8421569", + "8537359", + "8581601", + "8742426", + "9101339", + "9473121", + "9674732" + ], + "class_count": 654, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 37381, + "report_images": 52788, + "overall_coverage": 0.7081344244904145, + "metrics": { + "accuracy": 0.8669405316273155, + "precision": 0.7028135267405738, + "recall": 0.5774611074285403, + "f1": 0.5081384528044552 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "species", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "10055273", + "11418741", + "11478679", + "11571523", + "11962292", + "12089608", + "12135372", + "12253343", + "1731598", + "1732063", + "1732416", + "1732452", + "1734453", + "1734704", + "1734826", + "1737491", + "1737542", + "1737552", + "1737650", + "1737775", + "1737776", + "1737847", + "1738050", + "1739272", + "1739833", + "1739922", + "1740005", + "1740069", + "1740185", + "1741341", + "1741633", + "1741752", + "1742142", + "1743532", + "1743775", + "1744071", + "1744739", + "1744782", + "1745079", + "1746027", + "1746440", + "1746613", + "1746775", + "1746832", + "1746876", + "1748890", + "1758878", + "1759069", + "1759083", + "1759153", + "1759673", + "1760104", + "1760593", + "1761041", + "1762244", + "1763610", + "1765011", + "1765767", + "1766130", + "1766137", + "1766210", + "1766274", + "1766510", + "1767597", + "1767625", + "1768117", + "1768150", + "1768341", + "1769103", + "1769505", + "1769566", + "1769897", + "1769958", + "1770150", + "1770307", + "1770477", + "1770772", + "1770880", + "1771040", + "1771214", + "1771509", + "1771531", + "1771698", + "1771772", + "1772169", + "1772179", + "1772940", + "1773309", + "1775152", + "1775891", + "1776330", + "1776619", + "1776862", + "1777253", + "1778074", + "1779435", + "1779690", + "1780150", + "1781694", + "1782560", + "1782615", + "1782627", + "1782672", + "1782726", + "1782763", + "1782777", + "1782841", + "1782927", + "1782948", + "1783016", + "1783037", + "1783043", + "1784359", + "1784826", + "1785286", + "1785888", + "1785895", + "1786902", + "1787064", + "1787112", + "1787590", + "1787610", + "1788425", + "1788635", + "1789267", + "1789580", + "1789694", + "1789695", + "1789730", + "1789745", + "1789783", + "1789785", + "1789982", + "1790002", + "1790072", + "1790160", + "1790816", + "1791422", + "1792383", + "1792411", + "1792418", + "1793877", + "1794590", + "1795215", + "1795854", + "1796117", + "1796145", + "1796169", + "1796668", + "1796678", + "1797178", + "1797258", + "1797367", + "1797479", + "1798346", + "1798372", + "1798449", + "1798802", + "1798807", + "1798974", + "1799132", + "1799135", + "1799701", + "1799708", + "1800004", + "1800032", + "1801051", + "1801896", + "1802280", + "1803012", + "1803073", + "1804071", + "1804906", + "1807206", + "1808752", + "1810099", + "1811789", + "1811896", + "1812394", + "1813114", + "1819145", + "1819268", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822787", + "1822796", + "1822819", + "1822830", + "1823726", + "1825064", + "1825077", + "1825156", + "1825176", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830584", + "1830879", + "1830937", + "1830962", + "1831136", + "1831168", + "1831643", + "1831752", + "1832853", + "1835156", + "1836899", + "1837420", + "1839893", + "1840301", + "1840346", + "1840360", + "1841261", + "1845270", + "1847407", + "1848657", + "1850971", + "1852177", + "1852311", + "1854202", + "1854237", + "1857829", + "1858074", + "1858113", + "1858163", + "1862578", + "1862580", + "1862837", + "1864377", + "1870250", + "1870988", + "1871252", + "1871407", + "1872368", + "1872901", + "1873079", + "1874375", + "1875008", + "1875120", + "1875327", + "1875631", + "1875865", + "1875869", + "1876329", + "1876542", + "1878879", + "1878895", + "1878907", + "1879252", + "1879452", + "1879970", + "1880064", + "1880140", + "1880143", + "1881151", + "1881834", + "1882210", + "1883161", + "1884212", + "1884255", + "1884273", + "1884332", + "1884370", + "1884403", + "1884465", + "1884970", + "1886084", + "1886579", + "1886587", + "1887108", + "1887290", + "1888743", + "1888759", + "1888826", + "1889833", + "1889942", + "1890187", + "1890534", + "1890576", + "1890656", + "1891059", + "1891326", + "1891473", + "1891493", + "1939432", + "1951557", + "1951649", + "1951713", + "1952014", + "1952062", + "1952130", + "1952229", + "1952532", + "1952806", + "1952812", + "1956440", + "1956524", + "1956599", + "1957300", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1958024", + "1959383", + "1959395", + "1959914", + "1959919", + "1960617", + "1961040", + "1962204", + "1962265", + "1962434", + "1962516", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1963463", + "1964195", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965777", + "1965825", + "1965841", + "1965913", + "1965996", + "1966017", + "1966351", + "1967245", + "1967273", + "1967815", + "1968678", + "1968867", + "1970213", + "1970227", + "1970284", + "1972120", + "1972185", + "1972187", + "1972234", + "1972250", + "1972342", + "1972434", + "1972449", + "1973414", + "1973467", + "1975546", + "1975553", + "1975571", + "1975897", + "1975903", + "1976163", + "1977003", + "1978065", + "1978114", + "1978375", + "1978445", + "1978776", + "1978977", + "1979308", + "1979430", + "1979473", + "1979781", + "1981696", + "1982406", + "1982500", + "1982525", + "1982529", + "1982541", + "1982542", + "1982592", + "1982636", + "1982671", + "1982746", + "1982885", + "1983170", + "1983260", + "1983288", + "1983387", + "1983441", + "1983442", + "1983525", + "1983548", + "1983648", + "1983694", + "1983705", + "1983755", + "1983896", + "1983922", + "1983999", + "1984117", + "1984954", + "1985522", + "1986052", + "1986056", + "1986157", + "1986166", + "1986171", + "1986220", + "1986522", + "1986575", + "1987527", + "1987744", + "1988593", + "1988684", + "1988881", + "1989428", + "1990066", + "1990150", + "1990551", + "1991371", + "1992066", + "1992504", + "4302252", + "4302268", + "4522322", + "4522922", + "4523522", + "4523880", + "4523885", + "4524054", + "4524072", + "4524376", + "4524393", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525189", + "4525500", + "4525510", + "4525530", + "4525540", + "4525547", + "4527972", + "4529566", + "4529630", + "4530151", + "4531284", + "4531402", + "4531517", + "4531687", + "4531690", + "4531708", + "4531968", + "4532022", + "4532095", + "4532253", + "4532293", + "4532297", + "4532357", + "4532516", + "4532534", + "4532544", + "4532886", + "4532888", + "4532890", + "4533115", + "4533136", + "4533202", + "4533273", + "4533360", + "4533431", + "4533433", + "4533442", + "4533446", + "4533671", + "4533952", + "4534057", + "4534166", + "4534207", + "4534290", + "4534299", + "4534398", + "4534408", + "4534458", + "4534463", + "4534485", + "4534533", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "4534914", + "5101678", + "5101745", + "5102951", + "5103451", + "5104056", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112155", + "5112283", + "5112291", + "5112336", + "5112345", + "5112362", + "5113036", + "5113078", + "5113234", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5116475", + "5116609", + "5116669", + "5116698", + "5116850", + "5116941", + "5117049", + "5117089", + "5117400", + "5118892", + "5118996", + "5119245", + "5120675", + "5123461", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5126217", + "5126680", + "5142870", + "5142971", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5145136", + "5145409", + "5146342", + "5146379", + "5146412", + "5146496", + "5146559", + "5146677", + "5146961", + "5147039", + "5147062", + "5147193", + "5147208", + "5147245", + "5147608", + "5148286", + "5148394", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5769191", + "5769272", + "5771259", + "5771350", + "5771982", + "5772063", + "5772176", + "5772196", + "5772202", + "5772205", + "5772210", + "5772351", + "5880533", + "5880545", + "5880550", + "5880552", + "5880559", + "5880563", + "5884851", + "6097214", + "6097236", + "7438067", + "7443518", + "7446048", + "7596232", + "7681733", + "7730078", + "7752082", + "7780930", + "7825213", + "7874258", + "7895336", + "7940536", + "7960566", + "7972792", + "8000103", + "8007222", + "8015895", + "8049830", + "8105817", + "8223165", + "8237343", + "8237987", + "8244266", + "8262357", + "8361848", + "8361973", + "8397564", + "8407461", + "8421569", + "8537359", + "8581601", + "8742426", + "9101339", + "9473121", + "9674732" + ], + "class_count": 650, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 37191, + "report_images": 52788, + "overall_coverage": 0.7045351216185497, + "metrics": { + "accuracy": 0.8695378035260483, + "precision": 0.7088741319668206, + "recall": 0.5752968296743217, + "f1": 0.5099648536812272 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "species", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "10638451", + "11418741", + "11478679", + "11571523", + "11962292", + "12089608", + "12135372", + "12253343", + "1731598", + "1732063", + "1732416", + "1732685", + "1733484", + "1734453", + "1734704", + "1734826", + "1737491", + "1737542", + "1737650", + "1737775", + "1737776", + "1737847", + "1738050", + "1739833", + "1739922", + "1740005", + "1740069", + "1740185", + "1740374", + "1741341", + "1741633", + "1741752", + "1742142", + "1742263", + "1743532", + "1743775", + "1744071", + "1744588", + "1744782", + "1745079", + "1746027", + "1746440", + "1746613", + "1746775", + "1746832", + "1746876", + "1758878", + "1759069", + "1759083", + "1759153", + "1759673", + "1760104", + "1760593", + "1761041", + "1761865", + "1762244", + "1763072", + "1763610", + "1765011", + "1765767", + "1766128", + "1766130", + "1766137", + "1766210", + "1766274", + "1766510", + "1767597", + "1767625", + "1768117", + "1768341", + "1769103", + "1769505", + "1769566", + "1769897", + "1769958", + "1770150", + "1770307", + "1770477", + "1770772", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1771772", + "1772169", + "1772179", + "1772793", + "1772940", + "1773309", + "1775152", + "1775891", + "1776330", + "1776619", + "1776862", + "1777253", + "1778074", + "1779690", + "1780150", + "1781694", + "1782560", + "1782615", + "1782627", + "1782672", + "1782726", + "1782763", + "1782777", + "1782841", + "1782927", + "1782948", + "1783016", + "1783037", + "1783043", + "1784359", + "1784812", + "1784826", + "1785286", + "1785888", + "1785895", + "1786902", + "1787112", + "1787590", + "1787610", + "1788425", + "1788635", + "1789267", + "1789580", + "1789694", + "1789695", + "1789730", + "1789745", + "1789753", + "1789783", + "1789785", + "1789982", + "1790002", + "1790072", + "1790160", + "1790816", + "1791422", + "1792383", + "1792411", + "1792418", + "1793877", + "1794590", + "1795215", + "1795854", + "1796117", + "1796145", + "1796169", + "1796668", + "1796678", + "1797178", + "1797258", + "1797367", + "1797479", + "1798346", + "1798449", + "1798802", + "1798807", + "1798974", + "1799132", + "1799135", + "1799701", + "1799708", + "1800004", + "1800032", + "1801896", + "1802280", + "1803012", + "1803073", + "1804071", + "1804906", + "1807206", + "1808752", + "1810099", + "1811789", + "1811896", + "1812394", + "1813114", + "1819145", + "1819268", + "1819873", + "1820039", + "1820372", + "1821856", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822787", + "1822796", + "1822819", + "1822830", + "1823726", + "1825064", + "1825077", + "1825083", + "1825156", + "1825176", + "1825971", + "1825983", + "1826022", + "1827125", + "1827645", + "1828162", + "1828637", + "1830410", + "1830937", + "1830962", + "1831136", + "1831643", + "1831752", + "1832853", + "1835156", + "1836899", + "1838911", + "1839893", + "1841261", + "1841813", + "1845270", + "1847407", + "1850971", + "1852311", + "1854202", + "1857829", + "1858074", + "1858113", + "1861644", + "1862578", + "1862580", + "1862837", + "1864377", + "1870202", + "1870250", + "1871252", + "1871407", + "1872315", + "1872368", + "1872901", + "1873079", + "1875008", + "1875120", + "1875327", + "1875631", + "1875869", + "1876329", + "1876409", + "1876542", + "1878862", + "1878879", + "1878895", + "1879252", + "1879452", + "1879970", + "1880064", + "1880140", + "1881151", + "1881834", + "1882210", + "1883161", + "1884212", + "1884255", + "1884273", + "1884332", + "1884370", + "1884403", + "1884465", + "1884970", + "1886084", + "1886579", + "1886587", + "1887108", + "1887290", + "1888579", + "1888743", + "1888759", + "1888826", + "1889942", + "1890187", + "1890534", + "1890576", + "1890656", + "1891059", + "1891326", + "1891473", + "1891493", + "1939432", + "1951557", + "1951649", + "1951713", + "1952014", + "1952062", + "1952130", + "1952532", + "1952806", + "1952812", + "1956440", + "1956524", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1958024", + "1959383", + "1959395", + "1959914", + "1959919", + "1960617", + "1961040", + "1962204", + "1962265", + "1962434", + "1962516", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1963463", + "1964637", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965777", + "1965825", + "1965841", + "1965913", + "1965996", + "1966017", + "1966351", + "1967245", + "1967815", + "1968678", + "1968867", + "1970213", + "1970227", + "1970284", + "1972120", + "1972187", + "1972234", + "1972250", + "1972342", + "1972434", + "1972449", + "1973414", + "1973467", + "1975546", + "1975553", + "1975571", + "1975897", + "1975903", + "1976163", + "1977003", + "1978065", + "1978114", + "1978375", + "1978445", + "1978776", + "1978977", + "1979308", + "1979430", + "1979473", + "1979781", + "1982406", + "1982500", + "1982525", + "1982529", + "1982541", + "1982542", + "1982592", + "1982636", + "1982671", + "1982746", + "1982885", + "1983170", + "1983260", + "1983288", + "1983387", + "1983441", + "1983442", + "1983525", + "1983548", + "1983648", + "1983694", + "1983705", + "1983755", + "1983896", + "1984117", + "1984954", + "1985522", + "1986052", + "1986056", + "1986157", + "1986166", + "1986171", + "1986220", + "1986522", + "1986575", + "1987527", + "1987744", + "1988593", + "1988684", + "1988881", + "1989428", + "1990066", + "1990150", + "1990551", + "1991371", + "1992066", + "1992504", + "4302268", + "4522322", + "4522916", + "4523522", + "4523885", + "4524054", + "4524072", + "4524376", + "4524393", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525189", + "4525500", + "4525510", + "4525530", + "4525540", + "4525547", + "4529566", + "4530151", + "4531284", + "4531402", + "4531506", + "4531517", + "4531687", + "4531690", + "4531708", + "4532022", + "4532057", + "4532095", + "4532253", + "4532293", + "4532297", + "4532357", + "4532534", + "4532544", + "4532886", + "4532888", + "4532890", + "4533115", + "4533136", + "4533202", + "4533273", + "4533360", + "4533431", + "4533433", + "4533442", + "4533446", + "4533671", + "4533952", + "4534057", + "4534166", + "4534207", + "4534290", + "4534299", + "4534398", + "4534408", + "4534463", + "4534485", + "4534533", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "4534914", + "5101678", + "5101745", + "5102951", + "5102982", + "5103451", + "5104056", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112155", + "5112254", + "5112283", + "5112291", + "5112336", + "5112345", + "5112362", + "5113036", + "5113078", + "5113234", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5116475", + "5116609", + "5116669", + "5116698", + "5116850", + "5116941", + "5117049", + "5117089", + "5117400", + "5118892", + "5118996", + "5119143", + "5119245", + "5123461", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5126217", + "5126680", + "5142870", + "5142971", + "5143048", + "5143129", + "5143147", + "5143380", + "5143453", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5144677", + "5145009", + "5145136", + "5145409", + "5146342", + "5146379", + "5146412", + "5146496", + "5146510", + "5146559", + "5146677", + "5146946", + "5146961", + "5147039", + "5147062", + "5147193", + "5147208", + "5147245", + "5147608", + "5147827", + "5148286", + "5148394", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5769191", + "5769272", + "5771259", + "5771350", + "5771982", + "5772063", + "5772176", + "5772186", + "5772196", + "5772202", + "5772205", + "5772210", + "5772349", + "5772351", + "5880533", + "5880545", + "5880550", + "5880552", + "5880559", + "5880563", + "5884571", + "5884851", + "6097214", + "6097228", + "6097236", + "7438067", + "7443518", + "7446048", + "7596232", + "7681733", + "7730078", + "7752082", + "7780930", + "7825213", + "7874258", + "7895336", + "7940536", + "7960566", + "7972792", + "8000103", + "8007222", + "8015895", + "8105817", + "8223165", + "8237343", + "8237987", + "8262357", + "8313553", + "8361848", + "8361973", + "8397564", + "8407461", + "8421569", + "8537359", + "8581601", + "9101339", + "9530977", + "9674732" + ], + "class_count": 641, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 42843, + "report_images": 52788, + "overall_coverage": 0.8116049102068652, + "metrics": { + "accuracy": 0.8633843418309688, + "precision": 0.7190416496691577, + "recall": 0.6588299780195079, + "f1": 0.5661066449155471 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "species", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "10638451", + "11418741", + "11478679", + "11571523", + "11962292", + "12089608", + "12135372", + "12253343", + "1731598", + "1732063", + "1732416", + "1732685", + "1733484", + "1734453", + "1734704", + "1734826", + "1737491", + "1737542", + "1737650", + "1737775", + "1737776", + "1737847", + "1738050", + "1739833", + "1739922", + "1740005", + "1740069", + "1740185", + "1740374", + "1741341", + "1741633", + "1741752", + "1742142", + "1742263", + "1743532", + "1743775", + "1744071", + "1744588", + "1744782", + "1745079", + "1746027", + "1746440", + "1746613", + "1746775", + "1746832", + "1746876", + "1758878", + "1759069", + "1759083", + "1759153", + "1759673", + "1760104", + "1760593", + "1761041", + "1761865", + "1762244", + "1763072", + "1763610", + "1765011", + "1765767", + "1766128", + "1766130", + "1766137", + "1766210", + "1766274", + "1766510", + "1767597", + "1767625", + "1768117", + "1768341", + "1769103", + "1769505", + "1769566", + "1769897", + "1769958", + "1770150", + "1770307", + "1770477", + "1770772", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1771772", + "1772169", + "1772179", + "1772793", + "1772940", + "1773309", + "1775152", + "1775891", + "1776330", + "1776619", + "1776862", + "1777253", + "1778074", + "1779690", + "1780150", + "1781694", + "1782560", + "1782615", + "1782627", + "1782672", + "1782726", + "1782763", + "1782777", + "1782841", + "1782927", + "1782948", + "1783016", + "1783037", + "1783043", + "1784359", + "1784812", + "1784826", + "1785286", + "1785888", + "1785895", + "1786902", + "1787112", + "1787590", + "1787610", + "1788425", + "1788635", + "1789267", + "1789580", + "1789694", + "1789695", + "1789730", + "1789745", + "1789753", + "1789783", + "1789785", + "1789982", + "1790002", + "1790072", + "1790160", + "1790816", + "1791422", + "1792383", + "1792411", + "1792418", + "1793877", + "1794590", + "1795215", + "1795854", + "1796117", + "1796145", + "1796169", + "1796668", + "1796678", + "1797178", + "1797258", + "1797367", + "1797479", + "1798346", + "1798449", + "1798802", + "1798807", + "1798974", + "1799132", + "1799135", + "1799701", + "1799708", + "1800004", + "1800032", + "1801896", + "1802280", + "1803012", + "1803073", + "1804071", + "1804906", + "1807206", + "1808752", + "1810099", + "1811789", + "1811896", + "1812394", + "1813114", + "1819145", + "1819268", + "1819873", + "1820039", + "1820372", + "1821856", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822787", + "1822796", + "1822819", + "1822830", + "1823726", + "1825064", + "1825077", + "1825083", + "1825156", + "1825176", + "1825971", + "1825983", + "1826022", + "1827125", + "1827645", + "1828162", + "1828637", + "1830410", + "1830937", + "1830962", + "1831136", + "1831643", + "1831752", + "1832853", + "1835156", + "1836899", + "1838911", + "1839893", + "1841261", + "1841813", + "1845270", + "1847407", + "1850971", + "1852311", + "1854202", + "1857829", + "1858074", + "1858113", + "1861644", + "1862578", + "1862580", + "1862837", + "1864377", + "1870202", + "1870250", + "1871252", + "1871407", + "1872315", + "1872368", + "1872901", + "1873079", + "1875008", + "1875120", + "1875327", + "1875631", + "1875869", + "1876329", + "1876409", + "1876542", + "1878862", + "1878879", + "1878895", + "1879252", + "1879452", + "1879970", + "1880064", + "1880140", + "1881151", + "1881834", + "1882210", + "1883161", + "1884212", + "1884255", + "1884273", + "1884332", + "1884370", + "1884403", + "1884465", + "1884970", + "1886084", + "1886579", + "1886587", + "1887108", + "1887290", + "1888579", + "1888743", + "1888759", + "1888826", + "1889942", + "1890187", + "1890534", + "1890576", + "1890656", + "1891059", + "1891326", + "1891473", + "1891493", + "1939432", + "1951557", + "1951649", + "1951713", + "1952014", + "1952062", + "1952130", + "1952532", + "1952806", + "1952812", + "1956440", + "1956524", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1958024", + "1959383", + "1959395", + "1959914", + "1959919", + "1960617", + "1961040", + "1962204", + "1962265", + "1962434", + "1962516", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1963463", + "1964637", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965777", + "1965825", + "1965841", + "1965913", + "1965996", + "1966017", + "1966351", + "1967245", + "1967815", + "1968678", + "1968867", + "1970213", + "1970227", + "1970284", + "1972120", + "1972187", + "1972234", + "1972250", + "1972342", + "1972434", + "1972449", + "1973414", + "1973467", + "1975546", + "1975553", + "1975571", + "1975897", + "1975903", + "1976163", + "1977003", + "1978065", + "1978114", + "1978375", + "1978445", + "1978776", + "1978977", + "1979308", + "1979430", + "1979473", + "1979781", + "1982406", + "1982500", + "1982525", + "1982529", + "1982541", + "1982542", + "1982592", + "1982636", + "1982671", + "1982746", + "1982885", + "1983170", + "1983260", + "1983288", + "1983387", + "1983441", + "1983442", + "1983525", + "1983548", + "1983648", + "1983694", + "1983705", + "1983755", + "1983896", + "1984117", + "1984954", + "1985522", + "1986052", + "1986056", + "1986157", + "1986166", + "1986171", + "1986220", + "1986522", + "1986575", + "1987527", + "1987744", + "1988593", + "1988684", + "1988881", + "1989428", + "1990066", + "1990150", + "1990551", + "1991371", + "1992066", + "1992504", + "4302268", + "4522322", + "4522916", + "4523522", + "4523885", + "4524054", + "4524072", + "4524376", + "4524393", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525189", + "4525500", + "4525510", + "4525530", + "4525540", + "4525547", + "4529566", + "4530151", + "4531284", + "4531402", + "4531506", + "4531517", + "4531687", + "4531690", + "4531708", + "4532022", + "4532057", + "4532095", + "4532253", + "4532293", + "4532297", + "4532357", + "4532534", + "4532544", + "4532886", + "4532888", + "4532890", + "4533115", + "4533136", + "4533202", + "4533273", + "4533360", + "4533431", + "4533433", + "4533442", + "4533446", + "4533671", + "4533952", + "4534057", + "4534166", + "4534207", + "4534290", + "4534299", + "4534398", + "4534408", + "4534463", + "4534485", + "4534533", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "4534914", + "5101678", + "5101745", + "5102951", + "5102982", + "5103451", + "5104056", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112155", + "5112254", + "5112283", + "5112291", + "5112336", + "5112345", + "5112362", + "5113036", + "5113078", + "5113234", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5116475", + "5116609", + "5116669", + "5116698", + "5116850", + "5116941", + "5117049", + "5117089", + "5117400", + "5118892", + "5118996", + "5119143", + "5119245", + "5123461", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5126217", + "5126680", + "5142870", + "5142971", + "5143048", + "5143129", + "5143147", + "5143380", + "5143453", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5144677", + "5145009", + "5145136", + "5145409", + "5146342", + "5146379", + "5146412", + "5146496", + "5146510", + "5146559", + "5146677", + "5146946", + "5146961", + "5147039", + "5147062", + "5147193", + "5147208", + "5147245", + "5147608", + "5147827", + "5148286", + "5148394", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5769191", + "5769272", + "5771259", + "5771350", + "5771982", + "5772063", + "5772176", + "5772186", + "5772196", + "5772202", + "5772205", + "5772210", + "5772349", + "5772351", + "5880533", + "5880545", + "5880550", + "5880552", + "5880559", + "5880563", + "5884571", + "5884851", + "6097214", + "6097228", + "6097236", + "7438067", + "7443518", + "7446048", + "7596232", + "7681733", + "7730078", + "7752082", + "7780930", + "7825213", + "7874258", + "7895336", + "7940536", + "7960566", + "7972792", + "8000103", + "8007222", + "8015895", + "8105817", + "8223165", + "8237343", + "8237987", + "8262357", + "8313553", + "8361848", + "8361973", + "8397564", + "8407461", + "8421569", + "8537359", + "8581601", + "9101339", + "9530977", + "9674732" + ], + "class_count": 641, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 42930, + "report_images": 52788, + "overall_coverage": 0.8132530120481928, + "metrics": { + "accuracy": 0.8635268756201978, + "precision": 0.7198655161183526, + "recall": 0.6615516920144863, + "f1": 0.5675578092246024 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "species", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975571", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 281, + "truth_images_in_retained_classes": 42875, + "accepted_predictions_in_retained_classes": 31091, + "report_images": 52788, + "overall_coverage": 0.6973175721754944, + "metrics": { + "accuracy": 0.949227254623375, + "precision": 0.943736867068747, + "recall": 0.6916423088644161, + "f1": 0.7737956953842567 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "species", + "cutoff": 5, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 273, + "truth_images_in_retained_classes": 42787, + "accepted_predictions_in_retained_classes": 31030, + "report_images": 52788, + "overall_coverage": 0.6973175721754944, + "metrics": { + "accuracy": 0.9523181631837667, + "precision": 0.9510141862019456, + "recall": 0.696639527553125, + "f1": 0.7800052421246759 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "species", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766210", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 288, + "truth_images_in_retained_classes": 44180, + "accepted_predictions_in_retained_classes": 31486, + "report_images": 52788, + "overall_coverage": 0.7081344244904145, + "metrics": { + "accuracy": 0.9604545336634476, + "precision": 0.9622152512833568, + "recall": 0.7039086159930352, + "f1": 0.7910306156942064 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "species", + "cutoff": 5, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 273, + "truth_images_in_retained_classes": 42787, + "accepted_predictions_in_retained_classes": 30983, + "report_images": 52788, + "overall_coverage": 0.7081344244904145, + "metrics": { + "accuracy": 0.9636278309815087, + "precision": 0.9627691640571292, + "recall": 0.7169541525627774, + "f1": 0.8016362227458123 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "species", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766210", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 287, + "truth_images_in_retained_classes": 44173, + "accepted_predictions_in_retained_classes": 31341, + "report_images": 52788, + "overall_coverage": 0.7045351216185497, + "metrics": { + "accuracy": 0.9610226296998533, + "precision": 0.9619757519565229, + "recall": 0.7010200481362973, + "f1": 0.7888306624960767 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "species", + "cutoff": 5, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 273, + "truth_images_in_retained_classes": 42787, + "accepted_predictions_in_retained_classes": 30851, + "report_images": 52788, + "overall_coverage": 0.7045351216185497, + "metrics": { + "accuracy": 0.9643815594419234, + "precision": 0.9628304211425756, + "recall": 0.7147377382773606, + "f1": 0.800104314691979 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "species", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766210", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1862580", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959395", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 299, + "truth_images_in_retained_classes": 44421, + "accepted_predictions_in_retained_classes": 36047, + "report_images": 52788, + "overall_coverage": 0.8116049102068652, + "metrics": { + "accuracy": 0.9603653330244, + "precision": 0.9597405841266853, + "recall": 0.790768730570598, + "f1": 0.8516449621343269 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "species", + "cutoff": 5, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 273, + "truth_images_in_retained_classes": 42787, + "accepted_predictions_in_retained_classes": 35192, + "report_images": 52788, + "overall_coverage": 0.8116049102068652, + "metrics": { + "accuracy": 0.9639495772208692, + "precision": 0.9616309429747886, + "recall": 0.8034434173226027, + "f1": 0.8618831738738654 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "species", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766210", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1862580", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959395", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 299, + "truth_images_in_retained_classes": 44421, + "accepted_predictions_in_retained_classes": 36110, + "report_images": 52788, + "overall_coverage": 0.8132530120481928, + "metrics": { + "accuracy": 0.9601405781654884, + "precision": 0.9596554572863384, + "recall": 0.7921758700534698, + "f1": 0.8525263322194031 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "species", + "cutoff": 5, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 273, + "truth_images_in_retained_classes": 42787, + "accepted_predictions_in_retained_classes": 35252, + "report_images": 52788, + "overall_coverage": 0.8132530120481928, + "metrics": { + "accuracy": 0.963707047522958, + "precision": 0.9615027455443487, + "recall": 0.8048549427987153, + "f1": 0.8627190954298332 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "species", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1758878", + "1759153", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 243, + "truth_images_in_retained_classes": 42227, + "accepted_predictions_in_retained_classes": 30743, + "report_images": 52788, + "overall_coverage": 0.6973175721754944, + "metrics": { + "accuracy": 0.953448505161714, + "precision": 0.9544450850263946, + "recall": 0.7134225852923751, + "f1": 0.7961537592407799 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "species", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1759153", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1828637", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1983525", + "1983648", + "1983896", + "1985522", + "1986157", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 237, + "truth_images_in_retained_classes": 42021, + "accepted_predictions_in_retained_classes": 30611, + "report_images": 52788, + "overall_coverage": 0.6973175721754944, + "metrics": { + "accuracy": 0.9552371110145412, + "precision": 0.9586140054758544, + "recall": 0.7164050701636104, + "f1": 0.8009004286169517 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "species", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 255, + "truth_images_in_retained_classes": 43584, + "accepted_predictions_in_retained_classes": 31151, + "report_images": 52788, + "overall_coverage": 0.7081344244904145, + "metrics": { + "accuracy": 0.963686280781054, + "precision": 0.9676952538780558, + "recall": 0.7171112436175308, + "f1": 0.8061491380093966 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "species", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1759153", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1828637", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1983525", + "1983648", + "1983896", + "1985522", + "1986157", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 237, + "truth_images_in_retained_classes": 42021, + "accepted_predictions_in_retained_classes": 30528, + "report_images": 52788, + "overall_coverage": 0.7081344244904145, + "metrics": { + "accuracy": 0.9673296490095744, + "precision": 0.9672615516732053, + "recall": 0.7266753942187194, + "f1": 0.8138865890143704 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "species", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 255, + "truth_images_in_retained_classes": 43584, + "accepted_predictions_in_retained_classes": 31014, + "report_images": 52788, + "overall_coverage": 0.7045351216185497, + "metrics": { + "accuracy": 0.9644807475606031, + "precision": 0.9677553930474767, + "recall": 0.7146917879143063, + "f1": 0.8044523205064156 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "species", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1759153", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1828637", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1983525", + "1983648", + "1983896", + "1985522", + "1986157", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 237, + "truth_images_in_retained_classes": 42021, + "accepted_predictions_in_retained_classes": 30399, + "report_images": 52788, + "overall_coverage": 0.7045351216185497, + "metrics": { + "accuracy": 0.9681978678690395, + "precision": 0.9673496769410929, + "recall": 0.7245547988604122, + "f1": 0.812427697268594 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "species", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 272, + "truth_images_in_retained_classes": 44032, + "accepted_predictions_in_retained_classes": 35745, + "report_images": 52788, + "overall_coverage": 0.8116049102068652, + "metrics": { + "accuracy": 0.96173064446984, + "precision": 0.9639011820682567, + "recall": 0.7946782620839412, + "f1": 0.8587308953151547 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "species", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1759153", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1828637", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1983525", + "1983648", + "1983896", + "1985522", + "1986157", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 237, + "truth_images_in_retained_classes": 42021, + "accepted_predictions_in_retained_classes": 34617, + "report_images": 52788, + "overall_coverage": 0.8116049102068652, + "metrics": { + "accuracy": 0.9662994503676685, + "precision": 0.9671449526169773, + "recall": 0.8130146967116284, + "f1": 0.8731615665583466 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "species", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 272, + "truth_images_in_retained_classes": 44032, + "accepted_predictions_in_retained_classes": 35808, + "report_images": 52788, + "overall_coverage": 0.8132530120481928, + "metrics": { + "accuracy": 0.9614835793859626, + "precision": 0.9638076051371401, + "recall": 0.7962250808537157, + "f1": 0.8596997543424995 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "species", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1759153", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1828637", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1983525", + "1983648", + "1983896", + "1985522", + "1986157", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 237, + "truth_images_in_retained_classes": 42021, + "accepted_predictions_in_retained_classes": 34676, + "report_images": 52788, + "overall_coverage": 0.8132530120481928, + "metrics": { + "accuracy": 0.9661761234598567, + "precision": 0.9669972821591288, + "recall": 0.8146008253728714, + "f1": 0.8740844405084152 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "species", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1743532", + "1746775", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982541", + "1983525", + "1983648", + "1983896", + "1985522", + "1986166", + "1986220", + "1988593", + "1988881", + "1989428", + "1990150", + "1992066", + "4523522", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 190, + "truth_images_in_retained_classes": 40924, + "accepted_predictions_in_retained_classes": 29917, + "report_images": 52788, + "overall_coverage": 0.6973175721754944, + "metrics": { + "accuracy": 0.9610844376490718, + "precision": 0.9546242144015308, + "recall": 0.720024084306013, + "f1": 0.8034606105897976 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "species", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1743532", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1804071", + "1804906", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1822346", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982541", + "1983525", + "1983648", + "1983896", + "1985522", + "1986220", + "1988593", + "1988881", + "1989428", + "1990150", + "1992066", + "4523522", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534540", + "4534719", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110670", + "5110885", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124233", + "5125689", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 180, + "truth_images_in_retained_classes": 40455, + "accepted_predictions_in_retained_classes": 29626, + "report_images": 52788, + "overall_coverage": 0.6973175721754944, + "metrics": { + "accuracy": 0.9646484348350589, + "precision": 0.9605971055104869, + "recall": 0.7264566019960785, + "f1": 0.8110366999373768 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "species", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1742142", + "1743532", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1821911", + "1822346", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982541", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 194, + "truth_images_in_retained_classes": 41945, + "accepted_predictions_in_retained_classes": 30249, + "report_images": 52788, + "overall_coverage": 0.7081344244904145, + "metrics": { + "accuracy": 0.9726536166037543, + "precision": 0.9673028973830733, + "recall": 0.7249718216154226, + "f1": 0.8139613934096738 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "species", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1743532", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1804071", + "1804906", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1822346", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982541", + "1983525", + "1983648", + "1983896", + "1985522", + "1986220", + "1988593", + "1988881", + "1989428", + "1990150", + "1992066", + "4523522", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534540", + "4534719", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110670", + "5110885", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124233", + "5125689", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 180, + "truth_images_in_retained_classes": 40455, + "accepted_predictions_in_retained_classes": 29545, + "report_images": 52788, + "overall_coverage": 0.7081344244904145, + "metrics": { + "accuracy": 0.9744003816755382, + "precision": 0.9682799478546156, + "recall": 0.7355230038915617, + "f1": 0.8220522350709071 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "species", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1742142", + "1743532", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1821911", + "1822346", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982541", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534540", + "4534719", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 193, + "truth_images_in_retained_classes": 41892, + "accepted_predictions_in_retained_classes": 30094, + "report_images": 52788, + "overall_coverage": 0.7045351216185497, + "metrics": { + "accuracy": 0.9730113961424189, + "precision": 0.9672414097720884, + "recall": 0.7241073248627131, + "f1": 0.8134845543532351 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "species", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1743532", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1804071", + "1804906", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1822346", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982541", + "1983525", + "1983648", + "1983896", + "1985522", + "1986220", + "1988593", + "1988881", + "1989428", + "1990150", + "1992066", + "4523522", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534540", + "4534719", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110670", + "5110885", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124233", + "5125689", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 180, + "truth_images_in_retained_classes": 40455, + "accepted_predictions_in_retained_classes": 29417, + "report_images": 52788, + "overall_coverage": 0.7045351216185497, + "metrics": { + "accuracy": 0.9749535854270197, + "precision": 0.9683959794573341, + "recall": 0.7328357084727255, + "f1": 0.8202403740616799 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "species", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1742142", + "1743532", + "1746832", + "1758878", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1821911", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986166", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "8015895", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 208, + "truth_images_in_retained_classes": 42698, + "accepted_predictions_in_retained_classes": 34800, + "report_images": 52788, + "overall_coverage": 0.8116049102068652, + "metrics": { + "accuracy": 0.9690231333557542, + "precision": 0.9664275821917379, + "recall": 0.8041659814144588, + "f1": 0.8667271886805571 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "species", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1743532", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1804071", + "1804906", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1822346", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982541", + "1983525", + "1983648", + "1983896", + "1985522", + "1986220", + "1988593", + "1988881", + "1989428", + "1990150", + "1992066", + "4523522", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534540", + "4534719", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110670", + "5110885", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124233", + "5125689", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 180, + "truth_images_in_retained_classes": 40455, + "accepted_predictions_in_retained_classes": 33471, + "report_images": 52788, + "overall_coverage": 0.8116049102068652, + "metrics": { + "accuracy": 0.9745037354217521, + "precision": 0.9676455135705991, + "recall": 0.8221975995005899, + "f1": 0.8798559733558071 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "species", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1742142", + "1743532", + "1746832", + "1758878", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1821911", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986166", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "8015895", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 208, + "truth_images_in_retained_classes": 42698, + "accepted_predictions_in_retained_classes": 34860, + "report_images": 52788, + "overall_coverage": 0.8132530120481928, + "metrics": { + "accuracy": 0.9690034400769387, + "precision": 0.9662594248129517, + "recall": 0.8055424722904401, + "f1": 0.8675612517319938 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "species", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1743532", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1804071", + "1804906", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1822346", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982541", + "1983525", + "1983648", + "1983896", + "1985522", + "1986220", + "1988593", + "1988881", + "1989428", + "1990150", + "1992066", + "4523522", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534540", + "4534719", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110670", + "5110885", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124233", + "5125689", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 180, + "truth_images_in_retained_classes": 40455, + "accepted_predictions_in_retained_classes": 33526, + "report_images": 52788, + "overall_coverage": 0.8132530120481928, + "metrics": { + "accuracy": 0.974385117261553, + "precision": 0.9674510808010985, + "recall": 0.8234979435636558, + "f1": 0.8805603057062933 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "genus", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "11495707", + "12105049", + "1731584", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1735487", + "1737335", + "1737519", + "1737647", + "1737701", + "1738049", + "1738583", + "1739724", + "1741338", + "1741585", + "1741717", + "1742061", + "1742419", + "1743516", + "1743762", + "1744049", + "1744691", + "1744761", + "1745076", + "1746012", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1759405", + "1760088", + "1760588", + "1761017", + "1761857", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1766366", + "1767590", + "1767644", + "1768106", + "1768136", + "1768222", + "1768302", + "1768411", + "1769098", + "1769504", + "1769819", + "1769945", + "1770123", + "1770274", + "1770396", + "1770592", + "1771501", + "1772155", + "1772783", + "1772926", + "1775081", + "1775149", + "1775887", + "1775910", + "1776168", + "1776299", + "1776846", + "1776978", + "1777243", + "1777868", + "1778073", + "1778695", + "1779682", + "1780139", + "1781683", + "1782524", + "1782607", + "1782659", + "1783394", + "1784809", + "1785140", + "1785281", + "1785873", + "1786886", + "1787107", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1790683", + "1791382", + "1791874", + "1792324", + "1792405", + "1793856", + "1794570", + "1795126", + "1795782", + "1796225", + "1796408", + "1796469", + "1796639", + "1797073", + "1798083", + "1798340", + "1798440", + "1798514", + "1798902", + "1799687", + "1799702", + "1799993", + "1800016", + "1801046", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1807965", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819252", + "1819372", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1824246", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827279", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1831127", + "1831446", + "1835151", + "1836898", + "1839730", + "1840273", + "1841259", + "1845266", + "1846907", + "1850525", + "1850777", + "1856631", + "1857624", + "1857825", + "1861607", + "1862568", + "1862681", + "1863292", + "1863647", + "1864355", + "1864404", + "1869760", + "1870168", + "1870242", + "1871206", + "1871384", + "1872346", + "1872845", + "1873408", + "1873980", + "1874374", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1876536", + "1877937", + "1878838", + "1879226", + "1879451", + "1879494", + "1879915", + "1881145", + "1881186", + "1881825", + "1882028", + "1883132", + "1884090", + "1884194", + "1884425", + "1884939", + "1886289", + "1886576", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891054", + "1891305", + "1891353", + "1920704", + "1951549", + "1951569", + "1951645", + "1952001", + "1952029", + "1952118", + "1952222", + "1952300", + "1952446", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956434", + "1956522", + "1956545", + "1957545", + "1957620", + "1957829", + "1958023", + "1958238", + "1959381", + "1959888", + "1960592", + "1960966", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964175", + "1964392", + "1964577", + "1964936", + "1965123", + "1965758", + "1965888", + "1965967", + "1966346", + "1966929", + "1967196", + "1967242", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970226", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975570", + "1975783", + "1975885", + "1976155", + "1976949", + "1977104", + "1977419", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979106", + "1979243", + "1979727", + "1980342", + "1980718", + "1982367", + "1984922", + "1985507", + "1985969", + "1986081", + "1987269", + "1987509", + "1987711", + "1988533", + "1988779", + "1988876", + "1989161", + "1989996", + "1990136", + "1990531", + "1991357", + "1991946", + "1993403", + "2278098", + "3255940", + "3256294", + "3256322", + "3256950", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301121", + "4301340", + "4302289", + "4404424", + "4405245", + "4405430", + "4406069", + "4406360", + "4406622", + "4407165", + "4407354", + "4408190", + "4524069", + "4525072", + "4533124", + "4533660", + "4534405", + "4534532", + "4687068", + "4689528", + "4706723", + "4709385", + "5105328", + "5114254", + "5115807", + "5116471", + "5144176", + "5146397", + "7236046", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "8782295", + "8875114", + "8875890", + "8921795", + "9021546", + "9065472", + "9078901", + "9095083", + "9108102", + "9118632", + "9146182", + "9181278", + "9183600", + "9210500" + ], + "class_count": 379, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 36853, + "report_images": 52788, + "overall_coverage": 0.6981321512464954, + "metrics": { + "accuracy": 0.9533632911945014, + "precision": 0.784792371905105, + "recall": 0.6176629588211429, + "f1": 0.5868633065886133 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "genus", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "11495707", + "12105049", + "1731584", + "1732062", + "1732397", + "1732442", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737647", + "1737701", + "1738049", + "1738583", + "1739060", + "1739724", + "1741338", + "1741585", + "1741717", + "1742061", + "1742419", + "1743188", + "1743516", + "1743762", + "1744049", + "1744691", + "1744761", + "1745076", + "1746012", + "1746437", + "1746600", + "1746749", + "1747242", + "1747949", + "1748889", + "1758873", + "1759029", + "1759152", + "1759552", + "1760088", + "1760588", + "1761017", + "1762232", + "1763597", + "1764920", + "1765763", + "1766123", + "1766265", + "1766366", + "1767590", + "1767644", + "1768106", + "1768136", + "1768222", + "1768302", + "1768411", + "1769098", + "1769504", + "1769819", + "1769945", + "1770123", + "1770274", + "1770396", + "1771501", + "1772155", + "1772926", + "1775081", + "1775149", + "1775887", + "1775910", + "1776168", + "1776299", + "1776576", + "1776846", + "1776978", + "1777243", + "1777868", + "1778073", + "1778695", + "1779429", + "1779682", + "1780139", + "1781683", + "1782524", + "1782607", + "1782659", + "1783394", + "1784356", + "1784809", + "1785281", + "1785873", + "1786886", + "1787061", + "1787107", + "1787522", + "1788411", + "1789246", + "1789545", + "1789671", + "1789978", + "1790794", + "1791382", + "1791874", + "1792324", + "1792405", + "1793856", + "1794570", + "1795126", + "1795782", + "1796225", + "1796469", + "1796639", + "1797073", + "1798083", + "1798340", + "1798362", + "1798440", + "1798514", + "1798902", + "1799687", + "1799702", + "1799993", + "1800016", + "1801046", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808720", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819252", + "1819372", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830581", + "1830873", + "1830909", + "1831127", + "1831446", + "1831747", + "1832810", + "1835151", + "1836898", + "1837338", + "1839730", + "1840273", + "1841259", + "1843897", + "1845266", + "1846907", + "1848655", + "1850865", + "1852064", + "1852176", + "1852212", + "1852745", + "1854160", + "1855383", + "1856631", + "1857825", + "1858055", + "1861151", + "1862568", + "1862681", + "1863647", + "1864355", + "1864404", + "1870242", + "1870982", + "1871206", + "1871384", + "1872346", + "1872845", + "1873074", + "1873980", + "1874374", + "1874958", + "1875103", + "1875317", + "1875600", + "1875650", + "1875849", + "1876280", + "1876536", + "1878838", + "1879226", + "1879451", + "1879494", + "1879915", + "1881145", + "1881186", + "1881825", + "1882028", + "1883132", + "1884090", + "1884194", + "1884425", + "1884939", + "1886289", + "1886576", + "1887269", + "1888256", + "1888698", + "1889936", + "1890111", + "1890369", + "1891054", + "1891305", + "1891353", + "1894469", + "1939401", + "1951549", + "1951569", + "1951645", + "1952001", + "1952029", + "1952118", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956434", + "1956522", + "1956545", + "1957281", + "1957545", + "1957620", + "1957829", + "1958023", + "1959381", + "1959888", + "1960592", + "1960966", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964175", + "1964577", + "1964936", + "1965123", + "1965758", + "1965888", + "1965967", + "1966346", + "1966929", + "1967196", + "1967242", + "1967263", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970226", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975570", + "1975885", + "1976155", + "1976949", + "1978019", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979106", + "1979243", + "1979727", + "1980342", + "1980718", + "1981690", + "1982367", + "1984922", + "1985507", + "1985969", + "1986081", + "1987269", + "1987509", + "1987711", + "1988533", + "1988779", + "1988876", + "1989161", + "1989996", + "1990136", + "1990531", + "1991357", + "1991946", + "2278098", + "3255940", + "3256169", + "3256294", + "3256322", + "3256934", + "3256950", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3257894", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406291", + "4406298", + "4406360", + "4406622", + "4406931", + "4407165", + "4407354", + "4408190", + "4524069", + "4525072", + "4533124", + "4533660", + "4534405", + "4534456", + "4534532", + "4687068", + "4689528", + "4706723", + "4709385", + "5105328", + "5114254", + "5115807", + "5116471", + "5123443", + "5144176", + "5146397", + "7236046", + "7384515", + "7396883", + "7494486", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8317469", + "8331787", + "8379138", + "8407958", + "8494978", + "8875890", + "8921795", + "8936210", + "9065472", + "9078901", + "9095083", + "9118632", + "9146182", + "9181278", + "9183600", + "9210500", + "9220793" + ], + "class_count": 398, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 39989, + "report_images": 52788, + "overall_coverage": 0.7575395923315905, + "metrics": { + "accuracy": 0.9547996220084877, + "precision": 0.745381822803767, + "recall": 0.678410498949023, + "f1": 0.6019267109931725 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "genus", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "11495707", + "12105049", + "1731584", + "1732062", + "1732397", + "1732442", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737647", + "1737701", + "1738049", + "1738583", + "1739060", + "1739724", + "1741338", + "1741585", + "1741717", + "1742061", + "1742419", + "1743188", + "1743516", + "1743762", + "1744049", + "1744691", + "1744761", + "1745076", + "1746012", + "1746437", + "1746600", + "1746749", + "1747242", + "1747949", + "1748889", + "1758873", + "1759029", + "1759152", + "1759552", + "1760088", + "1760588", + "1761017", + "1762232", + "1763597", + "1764920", + "1765763", + "1766123", + "1766265", + "1766366", + "1767590", + "1767644", + "1768106", + "1768136", + "1768222", + "1768302", + "1768411", + "1769098", + "1769504", + "1769819", + "1769945", + "1770123", + "1770274", + "1770396", + "1771501", + "1772155", + "1772926", + "1775081", + "1775149", + "1775887", + "1775910", + "1776168", + "1776299", + "1776576", + "1776846", + "1776978", + "1777243", + "1777868", + "1778073", + "1778695", + "1779429", + "1779682", + "1780139", + "1781683", + "1782524", + "1782607", + "1782659", + "1783394", + "1784356", + "1784809", + "1785281", + "1785873", + "1786886", + "1787061", + "1787107", + "1787522", + "1788411", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1793856", + "1794570", + "1795126", + "1795782", + "1796225", + "1796469", + "1796639", + "1797073", + "1798083", + "1798340", + "1798362", + "1798440", + "1798514", + "1798902", + "1799687", + "1799702", + "1799993", + "1800016", + "1801046", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819252", + "1819372", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830581", + "1830873", + "1830909", + "1831127", + "1831446", + "1831747", + "1832810", + "1835151", + "1836898", + "1837338", + "1839730", + "1840273", + "1841259", + "1843897", + "1845266", + "1846907", + "1848655", + "1850865", + "1852064", + "1852176", + "1852212", + "1852745", + "1854160", + "1855383", + "1856631", + "1857825", + "1858055", + "1861151", + "1862568", + "1862681", + "1863647", + "1864355", + "1864404", + "1870242", + "1870982", + "1871206", + "1871384", + "1872346", + "1872845", + "1873074", + "1873980", + "1874374", + "1874958", + "1875103", + "1875317", + "1875600", + "1875650", + "1875849", + "1876280", + "1876536", + "1878838", + "1879226", + "1879451", + "1879494", + "1879915", + "1881145", + "1881186", + "1881825", + "1882028", + "1883132", + "1884090", + "1884194", + "1884425", + "1884939", + "1886289", + "1886576", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891054", + "1891305", + "1891353", + "1894469", + "1939401", + "1951549", + "1951569", + "1951645", + "1952001", + "1952029", + "1952118", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956434", + "1956522", + "1956545", + "1957281", + "1957545", + "1957620", + "1957829", + "1958023", + "1959381", + "1959888", + "1960592", + "1960966", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964175", + "1964577", + "1964936", + "1965123", + "1965758", + "1965888", + "1965967", + "1966346", + "1966929", + "1967196", + "1967242", + "1967263", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970226", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975570", + "1975885", + "1976155", + "1976949", + "1978019", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979106", + "1979243", + "1979727", + "1980342", + "1980718", + "1981690", + "1982367", + "1984922", + "1985507", + "1985969", + "1986081", + "1987269", + "1987509", + "1987711", + "1988533", + "1988779", + "1988876", + "1989161", + "1989996", + "1990136", + "1990531", + "1991357", + "1991946", + "2278098", + "3255940", + "3256169", + "3256294", + "3256322", + "3256934", + "3256950", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3257894", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406291", + "4406298", + "4406360", + "4406622", + "4406931", + "4407165", + "4407354", + "4408190", + "4524069", + "4525072", + "4533124", + "4533660", + "4534405", + "4534456", + "4534532", + "4687068", + "4689528", + "4706723", + "4709385", + "5105328", + "5114254", + "5115807", + "5116471", + "5123443", + "5144176", + "5146397", + "7236046", + "7384515", + "7396883", + "7494486", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8317469", + "8331787", + "8379138", + "8407958", + "8494978", + "8875890", + "8921795", + "8936210", + "9065472", + "9078901", + "9095083", + "9118632", + "9146182", + "9181278", + "9183600", + "9210500", + "9220793" + ], + "class_count": 395, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 39784, + "report_images": 52788, + "overall_coverage": 0.7536561339698417, + "metrics": { + "accuracy": 0.9551874761942367, + "precision": 0.7523387061411551, + "recall": 0.6745698413302063, + "f1": 0.6043210367725153 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "11495707", + "12105049", + "1731584", + "1732062", + "1732397", + "1732661", + "1733338", + "1733840", + "1734388", + "1734683", + "1735869", + "1737335", + "1737519", + "1737647", + "1737701", + "1738049", + "1738583", + "1739724", + "1741338", + "1741585", + "1741717", + "1742061", + "1742419", + "1743516", + "1743762", + "1744049", + "1744587", + "1744691", + "1744761", + "1745076", + "1746012", + "1746437", + "1746600", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1759552", + "1760088", + "1760588", + "1760849", + "1761017", + "1761857", + "1762232", + "1763597", + "1764920", + "1765763", + "1766123", + "1766265", + "1766366", + "1767590", + "1767644", + "1768106", + "1768222", + "1768302", + "1768411", + "1769098", + "1769504", + "1769819", + "1769945", + "1770123", + "1770274", + "1770396", + "1771501", + "1772155", + "1772783", + "1772926", + "1775081", + "1775149", + "1775887", + "1775910", + "1776168", + "1776299", + "1776576", + "1776846", + "1776978", + "1777243", + "1777868", + "1778073", + "1778695", + "1779682", + "1780139", + "1781683", + "1782524", + "1782607", + "1782659", + "1783394", + "1784356", + "1784809", + "1785281", + "1785873", + "1786886", + "1787107", + "1787522", + "1788411", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1793856", + "1794570", + "1795126", + "1795782", + "1796225", + "1796469", + "1796639", + "1797073", + "1798083", + "1798340", + "1798440", + "1798514", + "1798902", + "1799687", + "1799702", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808720", + "1808961", + "1809069", + "1810097", + "1812976", + "1814095", + "1815226", + "1819125", + "1819252", + "1819372", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827279", + "1827547", + "1827641", + "1828161", + "1828636", + "1830379", + "1830909", + "1831127", + "1831446", + "1831747", + "1832810", + "1835151", + "1836898", + "1839730", + "1841259", + "1841529", + "1843897", + "1845266", + "1846907", + "1850865", + "1852212", + "1854160", + "1856631", + "1857825", + "1858055", + "1861151", + "1861607", + "1862568", + "1862681", + "1863647", + "1864355", + "1864404", + "1870168", + "1870242", + "1871206", + "1871384", + "1872346", + "1872845", + "1873074", + "1873980", + "1874958", + "1875103", + "1875317", + "1875600", + "1875650", + "1875849", + "1876280", + "1876391", + "1876536", + "1878838", + "1879226", + "1879451", + "1879494", + "1879915", + "1881145", + "1881186", + "1881825", + "1882028", + "1883132", + "1884090", + "1884194", + "1884425", + "1884939", + "1886069", + "1886289", + "1886576", + "1887269", + "1888578", + "1888698", + "1889936", + "1890111", + "1890369", + "1891054", + "1891305", + "1891353", + "1939401", + "1951549", + "1951569", + "1951645", + "1952001", + "1952029", + "1952118", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956434", + "1956522", + "1956545", + "1957545", + "1957620", + "1957829", + "1958023", + "1959381", + "1959888", + "1960592", + "1960966", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965888", + "1965967", + "1966346", + "1966929", + "1967196", + "1967242", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970226", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975570", + "1975885", + "1976155", + "1976949", + "1978019", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979106", + "1979243", + "1979727", + "1980342", + "1980718", + "1982367", + "1984922", + "1985507", + "1985969", + "1986081", + "1987269", + "1987509", + "1987711", + "1988533", + "1988779", + "1988876", + "1989161", + "1989996", + "1990136", + "1990531", + "1991357", + "1991946", + "2278098", + "3255940", + "3256169", + "3256294", + "3256322", + "3256934", + "3256950", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301121", + "4301340", + "4302289", + "4404424", + "4405245", + "4405430", + "4406069", + "4406291", + "4406360", + "4406622", + "4407165", + "4407354", + "4408190", + "4524069", + "4525072", + "4533124", + "4533660", + "4534405", + "4534532", + "4687068", + "4689528", + "4706723", + "4709385", + "5105328", + "5114254", + "5115807", + "5116471", + "5123443", + "5144176", + "5146397", + "7236046", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "8875890", + "8921795", + "8936210", + "9065472", + "9078901", + "9095083", + "9108102", + "9118632", + "9146182", + "9181278", + "9183600", + "9210500" + ], + "class_count": 383, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 44511, + "report_images": 52788, + "overall_coverage": 0.8432030006819732, + "metrics": { + "accuracy": 0.95774560113418, + "precision": 0.7891877764219916, + "recall": 0.7626880651777854, + "f1": 0.6776129515770071 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "11495707", + "12105049", + "1731584", + "1732062", + "1732397", + "1732661", + "1733338", + "1733840", + "1734388", + "1734683", + "1735869", + "1737335", + "1737519", + "1737647", + "1737701", + "1738049", + "1738583", + "1739724", + "1741338", + "1741585", + "1741717", + "1742061", + "1742419", + "1743188", + "1743516", + "1743762", + "1744049", + "1744587", + "1744691", + "1744761", + "1745076", + "1746012", + "1746437", + "1746600", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1759552", + "1760088", + "1760588", + "1760849", + "1761017", + "1761857", + "1762232", + "1763597", + "1764920", + "1765763", + "1766123", + "1766265", + "1766366", + "1767590", + "1767644", + "1768106", + "1768222", + "1768302", + "1768411", + "1769098", + "1769504", + "1769819", + "1769945", + "1770123", + "1770274", + "1770396", + "1771501", + "1772155", + "1772783", + "1772926", + "1775081", + "1775149", + "1775887", + "1775910", + "1776168", + "1776299", + "1776576", + "1776846", + "1776978", + "1777243", + "1777868", + "1778073", + "1778695", + "1779682", + "1780139", + "1781683", + "1782524", + "1782607", + "1782659", + "1783394", + "1784356", + "1784809", + "1785281", + "1785873", + "1786886", + "1787107", + "1787522", + "1788411", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1793856", + "1794570", + "1795126", + "1795782", + "1796225", + "1796469", + "1796639", + "1797073", + "1798083", + "1798340", + "1798440", + "1798514", + "1798902", + "1799687", + "1799702", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808720", + "1808961", + "1809069", + "1810097", + "1812976", + "1814095", + "1815226", + "1819125", + "1819252", + "1819372", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827279", + "1827547", + "1827641", + "1828161", + "1828636", + "1830379", + "1830909", + "1831127", + "1831446", + "1831747", + "1832810", + "1835151", + "1836898", + "1839730", + "1841259", + "1841529", + "1843897", + "1845266", + "1846907", + "1850865", + "1852212", + "1854160", + "1856631", + "1857825", + "1858055", + "1861151", + "1861607", + "1862568", + "1862681", + "1863647", + "1864355", + "1864404", + "1870168", + "1870242", + "1871206", + "1871384", + "1872346", + "1872845", + "1873074", + "1873980", + "1874958", + "1875103", + "1875317", + "1875600", + "1875650", + "1875849", + "1876280", + "1876391", + "1876536", + "1878838", + "1879226", + "1879451", + "1879494", + "1879915", + "1881145", + "1881186", + "1881825", + "1882028", + "1883132", + "1884090", + "1884194", + "1884425", + "1884939", + "1886069", + "1886289", + "1886576", + "1887269", + "1888578", + "1888698", + "1889936", + "1890111", + "1890369", + "1891054", + "1891305", + "1891353", + "1939401", + "1951549", + "1951569", + "1951645", + "1952001", + "1952029", + "1952118", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956434", + "1956522", + "1956545", + "1957545", + "1957620", + "1957829", + "1958023", + "1959381", + "1959888", + "1960592", + "1960966", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965888", + "1965967", + "1966346", + "1966929", + "1967196", + "1967242", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970226", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975570", + "1975885", + "1976155", + "1976949", + "1978019", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979106", + "1979243", + "1979727", + "1980342", + "1980718", + "1982367", + "1984922", + "1985507", + "1985969", + "1986081", + "1987269", + "1987509", + "1987711", + "1988533", + "1988779", + "1988876", + "1989161", + "1989996", + "1990136", + "1990531", + "1991357", + "1991946", + "2278098", + "3255940", + "3256169", + "3256294", + "3256322", + "3256934", + "3256950", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301121", + "4301340", + "4302289", + "4404424", + "4405245", + "4405430", + "4406069", + "4406291", + "4406360", + "4406622", + "4407165", + "4407354", + "4408190", + "4524069", + "4525072", + "4533124", + "4533660", + "4534405", + "4534532", + "4687068", + "4689528", + "4706723", + "4709385", + "5105328", + "5114254", + "5115807", + "5116471", + "5123443", + "5144176", + "5146397", + "7236046", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "8875890", + "8921795", + "8936210", + "9065472", + "9078901", + "9095083", + "9108102", + "9118632", + "9146182", + "9181278", + "9183600", + "9210500" + ], + "class_count": 384, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 44504, + "report_images": 52788, + "overall_coverage": 0.843070394786694, + "metrics": { + "accuracy": 0.9578599395148406, + "precision": 0.7876914346408369, + "recall": 0.7626601078847843, + "f1": 0.67596735754951 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "genus", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 221, + "truth_images_in_retained_classes": 51350, + "accepted_predictions_in_retained_classes": 34216, + "report_images": 52788, + "overall_coverage": 0.6981321512464954, + "metrics": { + "accuracy": 0.9716616552337888, + "precision": 0.9644034675161717, + "recall": 0.6868834008659555, + "f1": 0.7807696866753272 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 215, + "truth_images_in_retained_classes": 46868, + "accepted_predictions_in_retained_classes": 34160, + "report_images": 52788, + "overall_coverage": 0.6981321512464954, + "metrics": { + "accuracy": 0.9754975181801082, + "precision": 0.96822735165948, + "recall": 0.6927141276824689, + "f1": 0.7874852435844385 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "genus", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 226, + "truth_images_in_retained_classes": 47997, + "accepted_predictions_in_retained_classes": 36422, + "report_images": 52788, + "overall_coverage": 0.7575395923315905, + "metrics": { + "accuracy": 0.970284104556389, + "precision": 0.9654305304648698, + "recall": 0.7349949980804276, + "f1": 0.8198300630906832 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 215, + "truth_images_in_retained_classes": 46868, + "accepted_predictions_in_retained_classes": 35966, + "report_images": 52788, + "overall_coverage": 0.7575395923315905, + "metrics": { + "accuracy": 0.9730526458225819, + "precision": 0.9696226974149172, + "recall": 0.7475533077376153, + "f1": 0.8310650157210921 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "genus", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 226, + "truth_images_in_retained_classes": 47997, + "accepted_predictions_in_retained_classes": 36257, + "report_images": 52788, + "overall_coverage": 0.7536561339698417, + "metrics": { + "accuracy": 0.9708040563009604, + "precision": 0.9665082137972658, + "recall": 0.7310313579815346, + "f1": 0.8173152189160264 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 215, + "truth_images_in_retained_classes": 46868, + "accepted_predictions_in_retained_classes": 35808, + "report_images": 52788, + "overall_coverage": 0.7536561339698417, + "metrics": { + "accuracy": 0.9738759173936625, + "precision": 0.9708203215753252, + "recall": 0.7439396812388471, + "f1": 0.8289781701827873 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 232, + "truth_images_in_retained_classes": 48047, + "accepted_predictions_in_retained_classes": 40448, + "report_images": 52788, + "overall_coverage": 0.8432030006819732, + "metrics": { + "accuracy": 0.9740978260964577, + "precision": 0.9682301236825241, + "recall": 0.8146523892286389, + "f1": 0.8726172137759266 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 215, + "truth_images_in_retained_classes": 46868, + "accepted_predictions_in_retained_classes": 39827, + "report_images": 52788, + "overall_coverage": 0.8432030006819732, + "metrics": { + "accuracy": 0.9754640055183043, + "precision": 0.9744657384691411, + "recall": 0.8284961369731623, + "f1": 0.8857838500606219 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 232, + "truth_images_in_retained_classes": 48047, + "accepted_predictions_in_retained_classes": 40445, + "report_images": 52788, + "overall_coverage": 0.843070394786694, + "metrics": { + "accuracy": 0.9742496201535418, + "precision": 0.9681807012728565, + "recall": 0.8146135864340426, + "f1": 0.8725791077003775 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 215, + "truth_images_in_retained_classes": 46868, + "accepted_predictions_in_retained_classes": 39824, + "report_images": 52788, + "overall_coverage": 0.843070394786694, + "metrics": { + "accuracy": 0.975627801896181, + "precision": 0.9744124082410346, + "recall": 0.8284542660506211, + "f1": 0.885742730946541 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "genus", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1739724", + "1741338", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759152", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795782", + "1796225", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 197, + "truth_images_in_retained_classes": 50958, + "accepted_predictions_in_retained_classes": 34025, + "report_images": 52788, + "overall_coverage": 0.6981321512464954, + "metrics": { + "accuracy": 0.9707426742420079, + "precision": 0.9676850759993277, + "recall": 0.7030299586868274, + "f1": 0.7949775034079533 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "genus", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1739724", + "1741338", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1759152", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795782", + "1796225", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1828636", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 192, + "truth_images_in_retained_classes": 46467, + "accepted_predictions_in_retained_classes": 33937, + "report_images": 52788, + "overall_coverage": 0.6981321512464954, + "metrics": { + "accuracy": 0.9752941088049124, + "precision": 0.9772224666409167, + "recall": 0.7109088798148795, + "f1": 0.8054635075619051 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "genus", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 203, + "truth_images_in_retained_classes": 47662, + "accepted_predictions_in_retained_classes": 36218, + "report_images": 52788, + "overall_coverage": 0.7575395923315905, + "metrics": { + "accuracy": 0.9725044668174535, + "precision": 0.973428506176096, + "recall": 0.7475181869995279, + "f1": 0.8320199105759429 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "genus", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1739724", + "1741338", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1759152", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795782", + "1796225", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1828636", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 192, + "truth_images_in_retained_classes": 46467, + "accepted_predictions_in_retained_classes": 35691, + "report_images": 52788, + "overall_coverage": 0.7575395923315905, + "metrics": { + "accuracy": 0.9735479156470631, + "precision": 0.9733069820326449, + "recall": 0.7535836525103417, + "f1": 0.83644361028291 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "genus", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 202, + "truth_images_in_retained_classes": 47651, + "accepted_predictions_in_retained_classes": 36048, + "report_images": 52788, + "overall_coverage": 0.7536561339698417, + "metrics": { + "accuracy": 0.973280111509321, + "precision": 0.9750664954245438, + "recall": 0.7440944617898129, + "f1": 0.8301947627142044 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "genus", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1739724", + "1741338", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1759152", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795782", + "1796225", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1828636", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 192, + "truth_images_in_retained_classes": 46467, + "accepted_predictions_in_retained_classes": 35536, + "report_images": 52788, + "overall_coverage": 0.7536561339698417, + "metrics": { + "accuracy": 0.9741721892441434, + "precision": 0.9742219352236319, + "recall": 0.7503899701812965, + "f1": 0.834492264816495 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 213, + "truth_images_in_retained_classes": 47821, + "accepted_predictions_in_retained_classes": 40290, + "report_images": 52788, + "overall_coverage": 0.8432030006819732, + "metrics": { + "accuracy": 0.9738984553007208, + "precision": 0.9728876041784816, + "recall": 0.8217613324322757, + "f1": 0.8806777740048471 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1739724", + "1741338", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1759152", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795782", + "1796225", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1828636", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 192, + "truth_images_in_retained_classes": 46467, + "accepted_predictions_in_retained_classes": 39511, + "report_images": 52788, + "overall_coverage": 0.8432030006819732, + "metrics": { + "accuracy": 0.9767219347209566, + "precision": 0.9780098953790074, + "recall": 0.8329662619360828, + "f1": 0.8901119825986873 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 213, + "truth_images_in_retained_classes": 47821, + "accepted_predictions_in_retained_classes": 40287, + "report_images": 52788, + "overall_coverage": 0.843070394786694, + "metrics": { + "accuracy": 0.9740637896727561, + "precision": 0.9728337731970597, + "recall": 0.8217190683555322, + "f1": 0.8806362687957985 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1739724", + "1741338", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1759152", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795782", + "1796225", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1828636", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 192, + "truth_images_in_retained_classes": 46467, + "accepted_predictions_in_retained_classes": 39508, + "report_images": 52788, + "overall_coverage": 0.843070394786694, + "metrics": { + "accuracy": 0.9769053525399332, + "precision": 0.9779501766339919, + "recall": 0.8329193752259455, + "f1": 0.8900659377573991 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "genus", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766265", + "1767644", + "1768222", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1782659", + "1783394", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1812976", + "1815226", + "1819125", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879915", + "1881145", + "1882028", + "1884090", + "1884425", + "1884939", + "1887269", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406622", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "9146182", + "9181278" + ], + "class_count": 156, + "truth_images_in_retained_classes": 45483, + "accepted_predictions_in_retained_classes": 33405, + "report_images": 52788, + "overall_coverage": 0.6981321512464954, + "metrics": { + "accuracy": 0.9843358498587619, + "precision": 0.9748388332981802, + "recall": 0.7242019498914946, + "f1": 0.8169005762983504 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "genus", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766265", + "1767644", + "1768222", + "1769098", + "1769504", + "1769819", + "1771501", + "1772155", + "1775910", + "1776168", + "1782659", + "1783394", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1812976", + "1815226", + "1819125", + "1820270", + "1822307", + "1822545", + "1822778", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879915", + "1881145", + "1882028", + "1884090", + "1884425", + "1884939", + "1887269", + "1890111", + "1890369", + "1891353", + "1951549", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406622", + "4525072", + "4533124", + "5105328", + "5115807", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "9146182", + "9181278" + ], + "class_count": 152, + "truth_images_in_retained_classes": 45330, + "accepted_predictions_in_retained_classes": 33296, + "report_images": 52788, + "overall_coverage": 0.6981321512464954, + "metrics": { + "accuracy": 0.9839236353813609, + "precision": 0.9778465660712192, + "recall": 0.7242368310515996, + "f1": 0.8183922505182741 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "genus", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1887269", + "1890111", + "1890369", + "1891353", + "1951549", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 165, + "truth_images_in_retained_classes": 46690, + "accepted_predictions_in_retained_classes": 35635, + "report_images": 52788, + "overall_coverage": 0.7575395923315905, + "metrics": { + "accuracy": 0.9810178296102066, + "precision": 0.9757921370967002, + "recall": 0.7571265698443955, + "f1": 0.8419323350469783 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "genus", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766265", + "1767644", + "1768222", + "1769098", + "1769504", + "1769819", + "1771501", + "1772155", + "1775910", + "1776168", + "1782659", + "1783394", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1812976", + "1815226", + "1819125", + "1820270", + "1822307", + "1822545", + "1822778", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879915", + "1881145", + "1882028", + "1884090", + "1884425", + "1884939", + "1887269", + "1890111", + "1890369", + "1891353", + "1951549", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406622", + "4525072", + "4533124", + "5105328", + "5115807", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "9146182", + "9181278" + ], + "class_count": 152, + "truth_images_in_retained_classes": 45330, + "accepted_predictions_in_retained_classes": 34996, + "report_images": 52788, + "overall_coverage": 0.7575395923315905, + "metrics": { + "accuracy": 0.983752937266044, + "precision": 0.9758140404693171, + "recall": 0.7677855297367047, + "f1": 0.8494275117330315 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "genus", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1887269", + "1890111", + "1890369", + "1891353", + "1951549", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 165, + "truth_images_in_retained_classes": 46690, + "accepted_predictions_in_retained_classes": 35481, + "report_images": 52788, + "overall_coverage": 0.7536561339698417, + "metrics": { + "accuracy": 0.9817692866417445, + "precision": 0.9765223194080256, + "recall": 0.7541904615905834, + "f1": 0.8401795246684531 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "genus", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766265", + "1767644", + "1768222", + "1769098", + "1769504", + "1769819", + "1771501", + "1772155", + "1775910", + "1776168", + "1782659", + "1783394", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1812976", + "1815226", + "1819125", + "1820270", + "1822307", + "1822545", + "1822778", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879915", + "1881145", + "1882028", + "1884090", + "1884425", + "1884939", + "1887269", + "1890111", + "1890369", + "1891353", + "1951549", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406622", + "4525072", + "4533124", + "5105328", + "5115807", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "9146182", + "9181278" + ], + "class_count": 152, + "truth_images_in_retained_classes": 45330, + "accepted_predictions_in_retained_classes": 34847, + "report_images": 52788, + "overall_coverage": 0.7536561339698417, + "metrics": { + "accuracy": 0.9843822049121461, + "precision": 0.9763221583019224, + "recall": 0.7646492402112083, + "f1": 0.847449368620922 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766123", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1887269", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 173, + "truth_images_in_retained_classes": 46980, + "accepted_predictions_in_retained_classes": 39700, + "report_images": 52788, + "overall_coverage": 0.8432030006819732, + "metrics": { + "accuracy": 0.9828021400489438, + "precision": 0.9770325613675723, + "recall": 0.8323906948783845, + "f1": 0.8906387985645831 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766265", + "1767644", + "1768222", + "1769098", + "1769504", + "1769819", + "1771501", + "1772155", + "1775910", + "1776168", + "1782659", + "1783394", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1812976", + "1815226", + "1819125", + "1820270", + "1822307", + "1822545", + "1822778", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879915", + "1881145", + "1882028", + "1884090", + "1884425", + "1884939", + "1887269", + "1890111", + "1890369", + "1891353", + "1951549", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406622", + "4525072", + "4533124", + "5105328", + "5115807", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "9146182", + "9181278" + ], + "class_count": 152, + "truth_images_in_retained_classes": 45330, + "accepted_predictions_in_retained_classes": 38714, + "report_images": 52788, + "overall_coverage": 0.8432030006819732, + "metrics": { + "accuracy": 0.9872680813408571, + "precision": 0.9795773240581996, + "recall": 0.847432505635241, + "f1": 0.9016662303355456 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766123", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1887269", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 173, + "truth_images_in_retained_classes": 46980, + "accepted_predictions_in_retained_classes": 39697, + "report_images": 52788, + "overall_coverage": 0.843070394786694, + "metrics": { + "accuracy": 0.9827521780380808, + "precision": 0.976966283916457, + "recall": 0.8323386587607753, + "f1": 0.8905876967754076 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766265", + "1767644", + "1768222", + "1769098", + "1769504", + "1769819", + "1771501", + "1772155", + "1775910", + "1776168", + "1782659", + "1783394", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1812976", + "1815226", + "1819125", + "1820270", + "1822307", + "1822545", + "1822778", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879915", + "1881145", + "1882028", + "1884090", + "1884425", + "1884939", + "1887269", + "1890111", + "1890369", + "1891353", + "1951549", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406622", + "4525072", + "4533124", + "5105328", + "5115807", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "9146182", + "9181278" + ], + "class_count": 152, + "truth_images_in_retained_classes": 45330, + "accepted_predictions_in_retained_classes": 38711, + "report_images": 52788, + "overall_coverage": 0.843070394786694, + "metrics": { + "accuracy": 0.9872112166837566, + "precision": 0.9795018898539696, + "recall": 0.8473732803171727, + "f1": 0.9016080684307602 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "family", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3553", + "3556", + "4300668", + "4527533", + "4532185", + "4542", + "5336", + "5343", + "5345", + "5474", + "5481", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8870", + "8874", + "9412", + "9689", + "9717" + ], + "class_count": 26, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 40881, + "report_images": 52788, + "overall_coverage": 0.7744373721300295, + "metrics": { + "accuracy": 0.9963653352691595, + "precision": 0.841348645086206, + "recall": 0.6466603488658192, + "f1": 0.6545226053114057 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "family", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3553", + "3556", + "4300668", + "4527533", + "4532185", + "4542", + "4864", + "4870", + "5336", + "5343", + "5345", + "5474", + "6166", + "6950", + "7015", + "7016", + "7294", + "8838", + "8840", + "8841", + "8860", + "8861", + "8863", + "8868", + "8874", + "9412", + "9689", + "9717" + ], + "class_count": 30, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 38566, + "report_images": 52788, + "overall_coverage": 0.7305827081912556, + "metrics": { + "accuracy": 0.9932547854813464, + "precision": 0.74059226732527, + "recall": 0.6535073068400129, + "f1": 0.5807455159791289 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "family", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3553", + "3556", + "4300668", + "4527533", + "4532185", + "4542", + "4864", + "4870", + "5336", + "5343", + "5345", + "5474", + "6166", + "6950", + "7015", + "7016", + "7294", + "8838", + "8840", + "8841", + "8860", + "8861", + "8863", + "8868", + "8874", + "9412", + "9689", + "9717" + ], + "class_count": 30, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 38672, + "report_images": 52788, + "overall_coverage": 0.7325907403197697, + "metrics": { + "accuracy": 0.9932599551447033, + "precision": 0.7406007419898425, + "recall": 0.6548532928566179, + "f1": 0.5815679236552637 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "family", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3553", + "3556", + "4300668", + "4527533", + "4532185", + "4542", + "4864", + "4870", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8861", + "8863", + "8868", + "8874", + "9412", + "9689", + "9717" + ], + "class_count": 27, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 43336, + "report_images": 52788, + "overall_coverage": 0.8209441539743881, + "metrics": { + "accuracy": 0.9892254689058468, + "precision": 0.8402573230856973, + "recall": 0.7546408071160894, + "f1": 0.7073928412638565 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "family", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3553", + "3556", + "4300668", + "4527533", + "4532185", + "4542", + "4864", + "4870", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8861", + "8863", + "8868", + "8874", + "9412", + "9689", + "9717" + ], + "class_count": 27, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 43353, + "report_images": 52788, + "overall_coverage": 0.8212661968629233, + "metrics": { + "accuracy": 0.9892268920132548, + "precision": 0.8402600553286454, + "recall": 0.7551948103314396, + "f1": 0.7076764729156301 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "family", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 40869, + "report_images": 52788, + "overall_coverage": 0.7744373721300295, + "metrics": { + "accuracy": 0.9957914408379742, + "precision": 0.9859850593239553, + "recall": 0.6876576692748175, + "f1": 0.8020952610694091 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "family", + "cutoff": 5, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 40869, + "report_images": 52788, + "overall_coverage": 0.7744373721300295, + "metrics": { + "accuracy": 0.9957914408379742, + "precision": 0.9859850593239553, + "recall": 0.6876576692748175, + "f1": 0.8020952610694091 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "family", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 38530, + "report_images": 52788, + "overall_coverage": 0.7305827081912556, + "metrics": { + "accuracy": 0.99218975160998, + "precision": 0.9900267939876928, + "recall": 0.7040432580775865, + "f1": 0.816089411195116 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "family", + "cutoff": 5, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 38530, + "report_images": 52788, + "overall_coverage": 0.7305827081912556, + "metrics": { + "accuracy": 0.99218975160998, + "precision": 0.9900267939876928, + "recall": 0.7040432580775865, + "f1": 0.816089411195116 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "family", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 38636, + "report_images": 52788, + "overall_coverage": 0.7325907403197697, + "metrics": { + "accuracy": 0.9921957375359722, + "precision": 0.9900397290020405, + "recall": 0.7056726095713715, + "f1": 0.817387949631118 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "family", + "cutoff": 5, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 38636, + "report_images": 52788, + "overall_coverage": 0.7325907403197697, + "metrics": { + "accuracy": 0.9921957375359722, + "precision": 0.9900397290020405, + "recall": 0.7056726095713715, + "f1": 0.817387949631118 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "family", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 43325, + "report_images": 52788, + "overall_coverage": 0.8209441539743881, + "metrics": { + "accuracy": 0.9875242271541385, + "precision": 0.9919310736962174, + "recall": 0.7961036491000434, + "f1": 0.8802424586381118 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "family", + "cutoff": 5, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 43325, + "report_images": 52788, + "overall_coverage": 0.8209441539743881, + "metrics": { + "accuracy": 0.9875242271541385, + "precision": 0.9919310736962174, + "recall": 0.7961036491000434, + "f1": 0.8802424586381118 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "family", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 43342, + "report_images": 52788, + "overall_coverage": 0.8212661968629233, + "metrics": { + "accuracy": 0.987525874962716, + "precision": 0.9919348125549885, + "recall": 0.796774284571257, + "f1": 0.8806455141432638 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "family", + "cutoff": 5, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 43342, + "report_images": 52788, + "overall_coverage": 0.8212661968629233, + "metrics": { + "accuracy": 0.987525874962716, + "precision": 0.9919348125549885, + "recall": 0.796774284571257, + "f1": 0.8806455141432638 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "family", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 40869, + "report_images": 52788, + "overall_coverage": 0.7744373721300295, + "metrics": { + "accuracy": 0.9957914408379742, + "precision": 0.9859850593239553, + "recall": 0.6876576692748175, + "f1": 0.8020952610694091 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "family", + "cutoff": 10, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 40869, + "report_images": 52788, + "overall_coverage": 0.7744373721300295, + "metrics": { + "accuracy": 0.9957914408379742, + "precision": 0.9859850593239553, + "recall": 0.6876576692748175, + "f1": 0.8020952610694091 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "family", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 38530, + "report_images": 52788, + "overall_coverage": 0.7305827081912556, + "metrics": { + "accuracy": 0.99218975160998, + "precision": 0.9900267939876928, + "recall": 0.7040432580775865, + "f1": 0.816089411195116 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "family", + "cutoff": 10, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 38530, + "report_images": 52788, + "overall_coverage": 0.7305827081912556, + "metrics": { + "accuracy": 0.99218975160998, + "precision": 0.9900267939876928, + "recall": 0.7040432580775865, + "f1": 0.816089411195116 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "family", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 38636, + "report_images": 52788, + "overall_coverage": 0.7325907403197697, + "metrics": { + "accuracy": 0.9921957375359722, + "precision": 0.9900397290020405, + "recall": 0.7056726095713715, + "f1": 0.817387949631118 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "family", + "cutoff": 10, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 38636, + "report_images": 52788, + "overall_coverage": 0.7325907403197697, + "metrics": { + "accuracy": 0.9921957375359722, + "precision": 0.9900397290020405, + "recall": 0.7056726095713715, + "f1": 0.817387949631118 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "family", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 43325, + "report_images": 52788, + "overall_coverage": 0.8209441539743881, + "metrics": { + "accuracy": 0.9875242271541385, + "precision": 0.9919310736962174, + "recall": 0.7961036491000434, + "f1": 0.8802424586381118 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "family", + "cutoff": 10, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 43325, + "report_images": 52788, + "overall_coverage": 0.8209441539743881, + "metrics": { + "accuracy": 0.9875242271541385, + "precision": 0.9919310736962174, + "recall": 0.7961036491000434, + "f1": 0.8802424586381118 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "family", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 43342, + "report_images": 52788, + "overall_coverage": 0.8212661968629233, + "metrics": { + "accuracy": 0.987525874962716, + "precision": 0.9919348125549885, + "recall": 0.796774284571257, + "f1": 0.8806455141432638 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "family", + "cutoff": 10, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 43342, + "report_images": 52788, + "overall_coverage": 0.8212661968629233, + "metrics": { + "accuracy": 0.987525874962716, + "precision": 0.9919348125549885, + "recall": 0.796774284571257, + "f1": 0.8806455141432638 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "family", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9717" + ], + "class_count": 15, + "truth_images_in_retained_classes": 52686, + "accepted_predictions_in_retained_classes": 40812, + "report_images": 52788, + "overall_coverage": 0.7744373721300295, + "metrics": { + "accuracy": 0.9946691583947672, + "precision": 0.9978777258613801, + "recall": 0.6871044763195309, + "f1": 0.8073961361904209 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "family", + "cutoff": 20, + "domain": "common", + "classes": [ + "3530", + "3552", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9717" + ], + "class_count": 15, + "truth_images_in_retained_classes": 52686, + "accepted_predictions_in_retained_classes": 40812, + "report_images": 52788, + "overall_coverage": 0.7744373721300295, + "metrics": { + "accuracy": 0.9946691583947672, + "precision": 0.9978777258613801, + "recall": 0.6871044763195309, + "f1": 0.8073961361904209 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "family", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9717" + ], + "class_count": 15, + "truth_images_in_retained_classes": 52686, + "accepted_predictions_in_retained_classes": 38470, + "report_images": 52788, + "overall_coverage": 0.7305827081912556, + "metrics": { + "accuracy": 0.9967736853726413, + "precision": 0.99662653164367, + "recall": 0.6975420951522447, + "f1": 0.8137962822635083 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "family", + "cutoff": 20, + "domain": "common", + "classes": [ + "3530", + "3552", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9717" + ], + "class_count": 15, + "truth_images_in_retained_classes": 52686, + "accepted_predictions_in_retained_classes": 38470, + "report_images": 52788, + "overall_coverage": 0.7305827081912556, + "metrics": { + "accuracy": 0.9967736853726413, + "precision": 0.99662653164367, + "recall": 0.6975420951522447, + "f1": 0.8137962822635083 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "family", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9717" + ], + "class_count": 15, + "truth_images_in_retained_classes": 52686, + "accepted_predictions_in_retained_classes": 38576, + "report_images": 52788, + "overall_coverage": 0.7325907403197697, + "metrics": { + "accuracy": 0.9967812675455647, + "precision": 0.9966429159951768, + "recall": 0.6996059403777053, + "f1": 0.8154410976157778 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "family", + "cutoff": 20, + "domain": "common", + "classes": [ + "3530", + "3552", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9717" + ], + "class_count": 15, + "truth_images_in_retained_classes": 52686, + "accepted_predictions_in_retained_classes": 38576, + "report_images": 52788, + "overall_coverage": 0.7325907403197697, + "metrics": { + "accuracy": 0.9967812675455647, + "precision": 0.9966429159951768, + "recall": 0.6996059403777053, + "f1": 0.8154410976157778 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "family", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9717" + ], + "class_count": 16, + "truth_images_in_retained_classes": 52710, + "accepted_predictions_in_retained_classes": 43281, + "report_images": 52788, + "overall_coverage": 0.8209441539743881, + "metrics": { + "accuracy": 0.9982058530788728, + "precision": 0.9952258423219504, + "recall": 0.8011208511634444, + "f1": 0.8854714289339141 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "family", + "cutoff": 20, + "domain": "common", + "classes": [ + "3530", + "3552", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9717" + ], + "class_count": 15, + "truth_images_in_retained_classes": 52686, + "accepted_predictions_in_retained_classes": 43259, + "report_images": 52788, + "overall_coverage": 0.8209441539743881, + "metrics": { + "accuracy": 0.9980862432841311, + "precision": 0.9979378681737169, + "recall": 0.7961955745743408, + "f1": 0.8836332923121171 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "family", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9717" + ], + "class_count": 16, + "truth_images_in_retained_classes": 52710, + "accepted_predictions_in_retained_classes": 43298, + "report_images": 52788, + "overall_coverage": 0.8212661968629233, + "metrics": { + "accuracy": 0.9982078098515587, + "precision": 0.995230282216741, + "recall": 0.8019172307855106, + "f1": 0.885950057346282 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "family", + "cutoff": 20, + "domain": "common", + "classes": [ + "3530", + "3552", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9717" + ], + "class_count": 15, + "truth_images_in_retained_classes": 52686, + "accepted_predictions_in_retained_classes": 43276, + "report_images": 52788, + "overall_coverage": 0.8212661968629233, + "metrics": { + "accuracy": 0.9980883305083292, + "precision": 0.9979426040614935, + "recall": 0.7970450461712113, + "f1": 0.8841438292853094 + } + } + ], + "tta": "rotation30_pad25_3" +} diff --git a/docs/assets/mambo-promoted-thresholds.json b/docs/assets/mambo-promoted-thresholds.json new file mode 100644 index 0000000..96cc63c --- /dev/null +++ b/docs/assets/mambo-promoted-thresholds.json @@ -0,0 +1,501 @@ +{ + "tta": "rotation30_pad25_3", + "source_sha256": "170381fd1da92ad5ebcb6ff3ee9935c1d7be042cbca08596bd1013f4f02f95f7", + "revision": "70cc69adc05362863439277048e06386c1f885e1", + "models": { + "v2": { + "source": "local-evidence/mambo-release-comparison-quality/v2-full/north_europe/mini_metric.csv", + "source_sha256": "1381e2b24fa5a36574b4e1a0d9dfcfa41a5daabce6516e7451757f6ed96a5414", + "identities": { + "full": "0f6e02db8e7eaaabc9617dcb0af5e0a7def4886578e46b4f919316b4ca6e7165", + "report": "80144bd4f34d9705bcae1dad496ccf13a7160b5709139b34710e5d75a3252fed", + "calibration": "07e2e6f88b36f3e9f348adaf4526ed62e8725eba4116780a0410bf5d18f5d3fd" + }, + "report_images": 52788, + "calibration_images": 5852, + "thresholds": [ + 0.7484260499477386, + 0.8759860098361969, + 0.9553309082984924 + ], + "report_zero": { + "accuracy": { + "0": 0.6856229575537315, + "1": 0.7893807671430488, + "2": 0.8435038466784595 + }, + "precision": { + "0": 0.2795792585422393, + "1": 0.3234152967366764, + "2": 0.2610923881260793 + }, + "recall": { + "0": 0.6856229575537315, + "1": 0.7893807671430488, + "2": 0.8435038466784595 + }, + "f1": { + "0": 0.2619881841444525, + "1": 0.32128858585759745, + "2": 0.26968398140672784 + }, + "micro_accuracy": { + "0": 0.6871258619383193, + "1": 0.792225505796772, + "2": 0.9454610896415853 + }, + "theilU": { + "0": 0.9268446802176634, + "1": 0.9293295014713818, + "2": 0.8669636504107465 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "report_optimized": { + "accuracy": { + "0": 0.8465208024160925, + "1": 0.9533632911945014, + "2": 0.9963653352691595 + }, + "precision": { + "0": 0.6381169943670084, + "1": 0.784792371905105, + "2": 0.841348645086206 + }, + "recall": { + "0": 0.5418132969389368, + "1": 0.6176629588211429, + "2": 0.6466603488658192 + }, + "f1": { + "0": 0.4466755276813756, + "1": 0.5868633065886133, + "2": 0.6545226053114057 + }, + "micro_accuracy": { + "0": 0.8340124966041836, + "1": 0.9258405014517136, + "2": 0.9986057092536875 + }, + "theilU": { + "0": 0.9268446802176634, + "1": 0.9293295014713818, + "2": 0.8669636504107465 + }, + "coverage": { + "0": 0.6973175721754944, + "1": 0.6981321512464954, + "2": 0.7744373721300295 + } + } + }, + "torch": { + "source": "local-evidence/mambo-accelerated-quality/torch-cuda-0-prediction/north_europe/mini_metric.csv", + "source_sha256": "b6793f4f24ba092912a5d468a86f2f3402d1281a6e63190e623d1cadc13fc027", + "identities": { + "full": "0f6e02db8e7eaaabc9617dcb0af5e0a7def4886578e46b4f919316b4ca6e7165", + "report": "80144bd4f34d9705bcae1dad496ccf13a7160b5709139b34710e5d75a3252fed", + "calibration": "07e2e6f88b36f3e9f348adaf4526ed62e8725eba4116780a0410bf5d18f5d3fd" + }, + "report_images": 52788, + "calibration_images": 5852, + "thresholds": [ + 0.8099595010280609, + 0.82109534740448, + 0.970800906419754 + ], + "report_zero": { + "accuracy": { + "0": 0.7135646156794592, + "1": 0.8053026558890463, + "2": 0.8104767092433202 + }, + "precision": { + "0": 0.2688723997356787, + "1": 0.3221313136590869, + "2": 0.2753352445359579 + }, + "recall": { + "0": 0.7135646156794592, + "1": 0.8053026558890463, + "2": 0.8104767092433202 + }, + "f1": { + "0": 0.2592869317361531, + "1": 0.32303518958457, + "2": 0.2804941988278224 + }, + "micro_accuracy": { + "0": 0.7077555505039024, + "1": 0.7939683261347276, + "2": 0.9298325376979617 + }, + "theilU": { + "0": 0.9292211983468999, + "1": 0.9278616328176507, + "2": 0.8486962980431905 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "report_optimized": { + "accuracy": { + "0": 0.8669405316273155, + "1": 0.9547996220084877, + "2": 0.9932547854813464 + }, + "precision": { + "0": 0.7028135267405738, + "1": 0.745381822803767, + "2": 0.74059226732527 + }, + "recall": { + "0": 0.5774611074285403, + "1": 0.678410498949023, + "2": 0.6535073068400129 + }, + "f1": { + "0": 0.5081384528044555, + "1": 0.6019267109931725, + "2": 0.5807455159791292 + }, + "micro_accuracy": { + "0": 0.8338193199753886, + "1": 0.9077246242716747, + "2": 0.997951563553389 + }, + "theilU": { + "0": 0.9292211983468999, + "1": 0.9278616328176507, + "2": 0.8486962980431905 + }, + "coverage": { + "0": 0.7081344244904145, + "1": 0.7575395923315905, + "2": 0.7305827081912556 + } + } + }, + "onnx": { + "source": "local-evidence/mambo-accelerated-quality/onnx-cuda-0-prediction/north_europe/mini_metric.csv", + "source_sha256": "b8624ec148e1d67d6685be4e79e35b990a7692e4109f306430ddfc015e3d543f", + "identities": { + "full": "0f6e02db8e7eaaabc9617dcb0af5e0a7def4886578e46b4f919316b4ca6e7165", + "report": "80144bd4f34d9705bcae1dad496ccf13a7160b5709139b34710e5d75a3252fed", + "calibration": "07e2e6f88b36f3e9f348adaf4526ed62e8725eba4116780a0410bf5d18f5d3fd" + }, + "report_images": 52788, + "calibration_images": 5852, + "thresholds": [ + 0.8161613345146179, + 0.8301631808280945, + 0.9698503911495209 + ], + "report_zero": { + "accuracy": { + "0": 0.7133861511997317, + "1": 0.8053599793321786, + "2": 0.8106325437578626 + }, + "precision": { + "0": 0.2689411284200973, + "1": 0.32303901654923844, + "2": 0.2756918885388057 + }, + "recall": { + "0": 0.7133861511997317, + "1": 0.8053599793321786, + "2": 0.8106325437578626 + }, + "f1": { + "0": 0.25936240461341026, + "1": 0.32445203101159487, + "2": 0.2808879232365721 + }, + "micro_accuracy": { + "0": 0.7078123816018792, + "1": 0.793949382435402, + "2": 0.9300409183905433 + }, + "theilU": { + "0": 0.9291859354966914, + "1": 0.9278774326101347, + "2": 0.8489407553438706 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "report_optimized": { + "accuracy": { + "0": 0.8695378035260483, + "1": 0.9551874761942367, + "2": 0.9932599551447033 + }, + "precision": { + "0": 0.7088741319668206, + "1": 0.7523387061411551, + "2": 0.7406007419898425 + }, + "recall": { + "0": 0.5752968296743217, + "1": 0.6745698413302063, + "2": 0.6548532928566179 + }, + "f1": { + "0": 0.5099648536812275, + "1": 0.6043210367725153, + "2": 0.5815679236552638 + }, + "micro_accuracy": { + "0": 0.8345029711489339, + "1": 0.908581339231852, + "2": 0.9979571783202317 + }, + "theilU": { + "0": 0.9291859354966914, + "1": 0.9278774326101347, + "2": 0.8489407553438706 + }, + "coverage": { + "0": 0.7045351216185497, + "1": 0.7536561339698417, + "2": 0.7325907403197697 + } + } + }, + "torch-tta": { + "source": "local-evidence/mambo-composed-full/torch/rotation30_pad25_3/mini_metric.csv", + "source_sha256": "52ff1ecff46d20c955b51c17db9bc51b7c4c763741999573eb09bb566e1d75dc", + "identities": { + "full": "0f6e02db8e7eaaabc9617dcb0af5e0a7def4886578e46b4f919316b4ca6e7165", + "report": "80144bd4f34d9705bcae1dad496ccf13a7160b5709139b34710e5d75a3252fed", + "calibration": "07e2e6f88b36f3e9f348adaf4526ed62e8725eba4116780a0410bf5d18f5d3fd" + }, + "report_images": 52788, + "calibration_images": 5852, + "thresholds": [ + 0.7562050521373749, + 0.7952321171760559, + 0.9765909910202026 + ], + "report_zero": { + "accuracy": { + "0": 0.7493898333756177, + "1": 0.8472767012256567, + "2": 0.86366836103727 + }, + "precision": { + "0": 0.3361085016262147, + "1": 0.3871858468468912, + "2": 0.3473357735776554 + }, + "recall": { + "0": 0.7493898333756177, + "1": 0.8472767012256567, + "2": 0.86366836103727 + }, + "f1": { + "0": 0.3201483357303684, + "1": 0.38731172619778687, + "2": 0.35919021330288153 + }, + "micro_accuracy": { + "0": 0.7508714101689778, + "1": 0.8324808668636812, + "2": 0.9622830946427219 + }, + "theilU": { + "0": 0.9512236692214211, + "1": 0.9537143645936615, + "2": 0.9062358679592668 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "report_optimized": { + "accuracy": { + "0": 0.8633843418309688, + "1": 0.95774560113418, + "2": 0.9892254689058468 + }, + "precision": { + "0": 0.7190416496691577, + "1": 0.7891877764219916, + "2": 0.8402573230856973 + }, + "recall": { + "0": 0.6588299780195079, + "1": 0.7626880651777854, + "2": 0.7546408071160894 + }, + "f1": { + "0": 0.566106644915547, + "1": 0.6776129515770067, + "2": 0.7073928412638566 + }, + "micro_accuracy": { + "0": 0.8300772588287468, + "1": 0.9032149356338882, + "2": 0.9988231493446557 + }, + "theilU": { + "0": 0.9512236692214211, + "1": 0.9537143645936615, + "2": 0.9062358679592668 + }, + "coverage": { + "0": 0.8116049102068652, + "1": 0.8432030006819732, + "2": 0.8209441539743881 + } + } + }, + "onnx-tta": { + "source": "local-evidence/mambo-composed-full/onnx/rotation30_pad25_3/mini_metric.csv", + "source_sha256": "581928fd3578c35463770a036ff08e6035ee0276c3fac64673868a1ced542444", + "identities": { + "full": "0f6e02db8e7eaaabc9617dcb0af5e0a7def4886578e46b4f919316b4ca6e7165", + "report": "80144bd4f34d9705bcae1dad496ccf13a7160b5709139b34710e5d75a3252fed", + "calibration": "07e2e6f88b36f3e9f348adaf4526ed62e8725eba4116780a0410bf5d18f5d3fd" + }, + "report_images": 52788, + "calibration_images": 5852, + "thresholds": [ + 0.7529366910457611, + 0.7956856787204742, + 0.9765951335430146 + ], + "native_threshold_alignment": { + "thresholds": [ + 0.7562050521373749, + 0.7952321171760559, + 0.9765909910202026 + ], + "scores": { + "accuracy": { + "0": 0.8633950623295443, + "1": 0.9577182088953489, + "2": 0.9892268920132548 + }, + "precision": { + "0": 0.7190458657983405, + "1": 0.7876773050674551, + "2": 0.8402600553286454 + }, + "recall": { + "0": 0.6587922723184866, + "1": 0.7627253495053744, + "2": 0.7551948103314396 + }, + "f1": { + "0": 0.5660150187297233, + "1": 0.6759937887132027, + "2": 0.7076764729156302 + }, + "micro_accuracy": { + "0": 0.8299843636957689, + "1": 0.9032620416966212, + "2": 0.9988236108227805 + }, + "theilU": { + "0": 0.9512268480417431, + "1": 0.9536588165415049, + "2": 0.9062460655947492 + }, + "coverage": { + "0": 0.8117185724028189, + "1": 0.8432219443812988, + "2": 0.8212661968629233 + } + } + }, + "report_zero": { + "accuracy": { + "0": 0.7493378530417095, + "1": 0.8472504239634208, + "2": 0.8636665098420966 + }, + "precision": { + "0": 0.335607011455683, + "1": 0.38755157575495597, + "2": 0.34712795694828363 + }, + "recall": { + "0": 0.7493378530417095, + "1": 0.8472504239634208, + "2": 0.8636665098420966 + }, + "f1": { + "0": 0.31973098589694526, + "1": 0.38771743876773856, + "2": 0.35905067781483396 + }, + "micro_accuracy": { + "0": 0.7507577479730242, + "1": 0.8323861483670532, + "2": 0.9622830946427219 + }, + "theilU": { + "0": 0.9512268480417431, + "1": 0.9536588165415049, + "2": 0.9062460655947492 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "report_optimized": { + "accuracy": { + "0": 0.8635268756201978, + "1": 0.9578599395148406, + "2": 0.9892268920132548 + }, + "precision": { + "0": 0.7198655161183526, + "1": 0.7876914346408369, + "2": 0.8402600553286454 + }, + "recall": { + "0": 0.6615516920144863, + "1": 0.7626601078847843, + "2": 0.7551948103314396 + }, + "f1": { + "0": 0.5675578092246022, + "1": 0.6759673575495095, + "2": 0.7076764729156302 + }, + "micro_accuracy": { + "0": 0.8296529233636152, + "1": 0.9032895919467913, + "2": 0.9988236108227805 + }, + "theilU": { + "0": 0.9512268480417431, + "1": 0.9536588165415049, + "2": 0.9062460655947492 + }, + "coverage": { + "0": 0.8132530120481928, + "1": 0.843070394786694, + "2": 0.8212661968629233 + } + } + } + } +} diff --git a/docs/assets/mambo-release-comparison.json b/docs/assets/mambo-release-comparison.json new file mode 100644 index 0000000..88f4f72 --- /dev/null +++ b/docs/assets/mambo-release-comparison.json @@ -0,0 +1,1984 @@ +{ + "quality": [ + { + "model": "v2", + "preset": "north_europe", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.68712482946794, + "micro_accuracy_known": 0.7963358235503379, + "macro_accuracy_all": 0.6852063621352951, + "macro_accuracy_known": 0.706872966471589, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58639, + "list_coverage": 0.9999829467939972, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7922919508867667, + "micro_accuracy_known": 0.7923054622350313, + "macro_accuracy_all": 0.7890053947525617, + "macro_accuracy_known": 0.7914633554838781, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9449351978171896, + "micro_accuracy_known": 0.9449351978171896, + "macro_accuracy_all": 0.8440271040813301, + "macro_accuracy_known": 0.8440271040813301, + "abstention_coverage": 1.0 + } + }, + "macro_f1_all": 0.25753800338546967, + "scores": { + "all": { + "accuracy": { + "0": 0.6852063621352951, + "1": 0.7890053947525617, + "2": 0.8440271040813301 + }, + "precision": { + "0": 0.2742104381019442, + "1": 0.3188818859364664, + "2": 0.26007435892237385 + }, + "recall": { + "0": 0.6852063621352951, + "1": 0.7890053947525617, + "2": 0.8440271040813301 + }, + "f1": { + "0": 0.25753800338546967, + "1": 0.3169285074452811, + "2": 0.2691037692533918 + }, + "micro_accuracy": { + "0": 0.68712482946794, + "1": 0.7922919508867667, + "2": 0.9449351978171896 + }, + "theilU": { + "0": 0.9259639612074944, + "1": 0.9286450152404832, + "2": 0.865726913911594 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.706872966471589, + "1": 0.7914633554838781, + "2": 0.8440271040813301 + }, + "precision": { + "0": 0.27934832747314936, + "1": 0.3189462554934523, + "2": 0.26007435892237385 + }, + "recall": { + "0": 0.706872966471589, + "1": 0.7914633554838781, + "2": 0.8440271040813301 + }, + "f1": { + "0": 0.26468747200295195, + "1": 0.3174198331740771, + "2": 0.2691037692533918 + }, + "micro_accuracy": { + "0": 0.7963358235503379, + "1": 0.7923054622350313, + "2": 0.9449351978171896 + }, + "theilU": { + "0": 0.9284675700829689, + "1": 0.9286569914847851, + "2": 0.865726913911594 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + }, + "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", + "sample_ids_sha256": "51a9e4ae7818a96f935527a984a61f4fd31e43f60987ca23792f2bcafd27631a", + "list_sha256": "065bb3ade45c970ca129c7507b56ed62fe16b84251961bf53352f5098b8b2be6" + }, + { + "model": "v2", + "preset": "europe", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.669594133697135, + "micro_accuracy_known": 0.7760188149729238, + "macro_accuracy_all": 0.6604260262269301, + "macro_accuracy_known": 0.6813090626293627, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7764495225102319, + "micro_accuracy_known": 0.7764495225102319, + "macro_accuracy_all": 0.7728971632770847, + "macro_accuracy_known": 0.7728971632770847, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9423090040927694, + "micro_accuracy_known": 0.9423090040927694, + "macro_accuracy_all": 0.8353711166095457, + "macro_accuracy_known": 0.8353711166095457, + "abstention_coverage": 1.0 + } + }, + "macro_f1_all": 0.19998360830548284, + "scores": { + "all": { + "accuracy": { + "0": 0.6604260262269301, + "1": 0.7728971632770847, + "2": 0.8353711166095457 + }, + "precision": { + "0": 0.220093475997043, + "1": 0.26145460355851485, + "2": 0.24311183116521895 + }, + "recall": { + "0": 0.6604260262269301, + "1": 0.7728971632770847, + "2": 0.8353711166095457 + }, + "f1": { + "0": 0.19998360830548284, + "1": 0.25527668172822016, + "2": 0.2512650593074731 + }, + "micro_accuracy": { + "0": 0.669594133697135, + "1": 0.7764495225102319, + "2": 0.9423090040927694 + }, + "theilU": { + "0": 0.9298644970123321, + "1": 0.9304037751304223, + "2": 0.858730608498533 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.6813090626293627, + "1": 0.7728971632770847, + "2": 0.8353711166095457 + }, + "precision": { + "0": 0.22455003199982063, + "1": 0.26145460355851485, + "2": 0.24311183116521895 + }, + "recall": { + "0": 0.6813090626293627, + "1": 0.7728971632770847, + "2": 0.8353711166095457 + }, + "f1": { + "0": 0.20496609487323514, + "1": 0.25527668172822016, + "2": 0.2512650593074731 + }, + "micro_accuracy": { + "0": 0.7760188149729238, + "1": 0.7764495225102319, + "2": 0.9423090040927694 + }, + "theilU": { + "0": 0.9324736395684865, + "1": 0.9304037751304223, + "2": 0.858730608498533 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + }, + "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", + "sample_ids_sha256": "51a9e4ae7818a96f935527a984a61f4fd31e43f60987ca23792f2bcafd27631a", + "list_sha256": "df66152ba29ba979b32741db4a0dc7c85db18fa65eac5602ca4aab702343de90" + }, + { + "model": "v2", + "preset": "full", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.5936050477489768, + "micro_accuracy_known": 0.6879520929681016, + "macro_accuracy_all": 0.5720627970250876, + "macro_accuracy_known": 0.5901517392235093, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7285129604365621, + "micro_accuracy_known": 0.7285129604365621, + "macro_accuracy_all": 0.7168278641037727, + "macro_accuracy_known": 0.7168278641037727, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9265006821282401, + "micro_accuracy_known": 0.9265006821282401, + "macro_accuracy_all": 0.8069699178640561, + "macro_accuracy_known": 0.8069699178640561, + "abstention_coverage": 1.0 + } + }, + "macro_f1_all": 0.08990868448899282, + "scores": { + "all": { + "accuracy": { + "0": 0.5720627970250876, + "1": 0.7168278641037727, + "2": 0.8069699178640561 + }, + "precision": { + "0": 0.1100618404698789, + "1": 0.1327201662316462, + "2": 0.19682625488877242 + }, + "recall": { + "0": 0.5720627970250876, + "1": 0.7168278641037727, + "2": 0.8069699178640561 + }, + "f1": { + "0": 0.08990868448899282, + "1": 0.12210675669894289, + "2": 0.20522430973656694 + }, + "micro_accuracy": { + "0": 0.5936050477489768, + "1": 0.7285129604365621, + "2": 0.9265006821282401 + }, + "theilU": { + "0": 0.9424989337241723, + "1": 0.9364867523141058, + "2": 0.8320049778627998 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.5901517392235093, + "1": 0.7168278641037727, + "2": 0.8069699178640561 + }, + "precision": { + "0": 0.11296990063684895, + "1": 0.1327201662316462, + "2": 0.19682625488877242 + }, + "recall": { + "0": 0.5901517392235093, + "1": 0.7168278641037727, + "2": 0.8069699178640561 + }, + "f1": { + "0": 0.09231932892005533, + "1": 0.12210675669894289, + "2": 0.20522430973656694 + }, + "micro_accuracy": { + "0": 0.6879520929681016, + "1": 0.7285129604365621, + "2": 0.9265006821282401 + }, + "theilU": { + "0": 0.9472050810666933, + "1": 0.9364867523141058, + "2": 0.8320049778627998 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + }, + "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", + "sample_ids_sha256": "51a9e4ae7818a96f935527a984a61f4fd31e43f60987ca23792f2bcafd27631a", + "list_sha256": "8a256b140c3ec3389329e6f3cb6c4d50e1634c49907a9caef099cdfd5c378ca5" + }, + { + "model": "v3", + "preset": "north_europe", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.7078956343792633, + "micro_accuracy_known": 0.8204079212617099, + "macro_accuracy_all": 0.7123671759291879, + "macro_accuracy_known": 0.734892620227344, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58639, + "list_coverage": 0.9999829467939972, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7936732605729877, + "micro_accuracy_known": 0.7936867954774126, + "macro_accuracy_all": 0.8054070319557569, + "macro_accuracy_known": 0.8079160881300739, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9298090040927695, + "micro_accuracy_known": 0.9298090040927695, + "macro_accuracy_all": 0.8106383132501974, + "macro_accuracy_known": 0.8106383132501974, + "abstention_coverage": 1.0 + } + }, + "macro_f1_all": 0.25450880594788156, + "scores": { + "all": { + "accuracy": { + "0": 0.7123671759291879, + "1": 0.8054070319557569, + "2": 0.8106383132501974 + }, + "precision": { + "0": 0.26361186496219735, + "1": 0.31882230287858776, + "2": 0.27544229106153234 + }, + "recall": { + "0": 0.7123671759291879, + "1": 0.8054070319557569, + "2": 0.8106383132501974 + }, + "f1": { + "0": 0.25450880594788156, + "1": 0.3207725301986971, + "2": 0.2805840235220709 + }, + "micro_accuracy": { + "0": 0.7078956343792633, + "1": 0.7936732605729877, + "2": 0.9298090040927695 + }, + "theilU": { + "0": 0.9282973331913745, + "1": 0.927078119536916, + "2": 0.8488942298912809 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.734892620227344, + "1": 0.8079160881300739, + "2": 0.8106383132501974 + }, + "precision": { + "0": 0.2677964216559137, + "1": 0.31884970853060046, + "2": 0.27544229106153234 + }, + "recall": { + "0": 0.734892620227344, + "1": 0.8079160881300739, + "2": 0.8106383132501974 + }, + "f1": { + "0": 0.2609164468790569, + "1": 0.3212438169069074, + "2": 0.2805840235220709 + }, + "micro_accuracy": { + "0": 0.8204079212617099, + "1": 0.7936867954774126, + "2": 0.9298090040927695 + }, + "theilU": { + "0": 0.9313037775676971, + "1": 0.9270916152069156, + "2": 0.8488942298912809 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + }, + "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", + "sample_ids_sha256": "51a9e4ae7818a96f935527a984a61f4fd31e43f60987ca23792f2bcafd27631a", + "list_sha256": "065bb3ade45c970ca129c7507b56ed62fe16b84251961bf53352f5098b8b2be6" + }, + { + "model": "v3", + "preset": "europe", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.6894952251023192, + "micro_accuracy_known": 0.7990829677062334, + "macro_accuracy_all": 0.6906121581308468, + "macro_accuracy_known": 0.7124496967278696, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7793656207366985, + "micro_accuracy_known": 0.7793656207366985, + "macro_accuracy_all": 0.7927684087442151, + "macro_accuracy_known": 0.7927684087442151, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9286323328785812, + "micro_accuracy_known": 0.9286323328785812, + "macro_accuracy_all": 0.8061650335232657, + "macro_accuracy_known": 0.8061650335232657, + "abstention_coverage": 1.0 + } + }, + "macro_f1_all": 0.19931852384419554, + "scores": { + "all": { + "accuracy": { + "0": 0.6906121581308468, + "1": 0.7927684087442151, + "2": 0.8061650335232657 + }, + "precision": { + "0": 0.2125866053945616, + "1": 0.25792706709688445, + "2": 0.25177044612587207 + }, + "recall": { + "0": 0.6906121581308468, + "1": 0.7927684087442151, + "2": 0.8061650335232657 + }, + "f1": { + "0": 0.19931852384419554, + "1": 0.25548534308971915, + "2": 0.25562321183354897 + }, + "micro_accuracy": { + "0": 0.6894952251023192, + "1": 0.7793656207366985, + "2": 0.9286323328785812 + }, + "theilU": { + "0": 0.9327740860469433, + "1": 0.930377596554077, + "2": 0.8415003084731356 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7124496967278696, + "1": 0.7927684087442151, + "2": 0.8061650335232657 + }, + "precision": { + "0": 0.21701009331649532, + "1": 0.25792706709688445, + "2": 0.25177044612587207 + }, + "recall": { + "0": 0.7124496967278696, + "1": 0.7927684087442151, + "2": 0.8061650335232657 + }, + "f1": { + "0": 0.20477619736063515, + "1": 0.25548534308971915, + "2": 0.25562321183354897 + }, + "micro_accuracy": { + "0": 0.7990829677062334, + "1": 0.7793656207366985, + "2": 0.9286323328785812 + }, + "theilU": { + "0": 0.9361501370706838, + "1": 0.930377596554077, + "2": 0.8415003084731356 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + }, + "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", + "sample_ids_sha256": "51a9e4ae7818a96f935527a984a61f4fd31e43f60987ca23792f2bcafd27631a", + "list_sha256": "df66152ba29ba979b32741db4a0dc7c85db18fa65eac5602ca4aab702343de90" + }, + { + "model": "v3", + "preset": "full", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.5843281036834925, + "micro_accuracy_known": 0.6772006798687695, + "macro_accuracy_all": 0.5802757153882665, + "macro_accuracy_known": 0.5986243546100299, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7058321964529332, + "micro_accuracy_known": 0.7058321964529332, + "macro_accuracy_all": 0.7133531076261048, + "macro_accuracy_known": 0.7133531076261048, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.903137789904502, + "micro_accuracy_known": 0.903137789904502, + "macro_accuracy_all": 0.7851379223252065, + "macro_accuracy_known": 0.7851379223252065, + "abstention_coverage": 1.0 + } + }, + "macro_f1_all": 0.09709532327738142, + "scores": { + "all": { + "accuracy": { + "0": 0.5802757153882665, + "1": 0.7133531076261048, + "2": 0.7851379223252065 + }, + "precision": { + "0": 0.11912807276515047, + "1": 0.139300115626279, + "2": 0.18846238515501548 + }, + "recall": { + "0": 0.5802757153882665, + "1": 0.7133531076261048, + "2": 0.7851379223252065 + }, + "f1": { + "0": 0.09709532327738142, + "1": 0.12672892757582832, + "2": 0.19392386150040025 + }, + "micro_accuracy": { + "0": 0.5843281036834925, + "1": 0.7058321964529332, + "2": 0.903137789904502 + }, + "theilU": { + "0": 0.9381503100112119, + "1": 0.927961126268096, + "2": 0.803447959660008 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.5986243546100299, + "1": 0.7133531076261048, + "2": 0.7851379223252065 + }, + "precision": { + "0": 0.1233403630154899, + "1": 0.139300115626279, + "2": 0.18846238515501548 + }, + "recall": { + "0": 0.5986243546100299, + "1": 0.7133531076261048, + "2": 0.7851379223252065 + }, + "f1": { + "0": 0.10055972949058657, + "1": 0.12672892757582832, + "2": 0.19392386150040025 + }, + "micro_accuracy": { + "0": 0.6772006798687695, + "1": 0.7058321964529332, + "2": 0.903137789904502 + }, + "theilU": { + "0": 0.9436554162021304, + "1": 0.927961126268096, + "2": 0.803447959660008 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + }, + "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", + "sample_ids_sha256": "51a9e4ae7818a96f935527a984a61f4fd31e43f60987ca23792f2bcafd27631a", + "list_sha256": "8a256b140c3ec3389329e6f3cb6c4d50e1634c49907a9caef099cdfd5c378ca5" + }, + { + "model": "v3", + "preset": "north_europe_v3", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.703206002728513, + "micro_accuracy_known": 0.8149729238309814, + "macro_accuracy_all": 0.7049027989956338, + "macro_accuracy_known": 0.7271922155646657, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7889154160982265, + "micro_accuracy_known": 0.7889154160982265, + "macro_accuracy_all": 0.8001749661579481, + "macro_accuracy_known": 0.8001749661579481, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9289222373806275, + "micro_accuracy_known": 0.9289222373806275, + "macro_accuracy_all": 0.8066694596309745, + "macro_accuracy_known": 0.8066694596309745, + "abstention_coverage": 1.0 + } + }, + "macro_f1_all": 0.2366924424645238, + "scores": { + "all": { + "accuracy": { + "0": 0.7049027989956338, + "1": 0.8001749661579481, + "2": 0.8066694596309745 + }, + "precision": { + "0": 0.2470742742773393, + "1": 0.3039724405966767, + "2": 0.2691352790869643 + }, + "recall": { + "0": 0.7049027989956338, + "1": 0.8001749661579481, + "2": 0.8066694596309745 + }, + "f1": { + "0": 0.2366924424645238, + "1": 0.30440717730876965, + "2": 0.27323770976338385 + }, + "micro_accuracy": { + "0": 0.703206002728513, + "1": 0.7889154160982265, + "2": 0.9289222373806275 + }, + "theilU": { + "0": 0.9297064107551721, + "1": 0.9279675082275328, + "2": 0.8462890628674864 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7271922155646657, + "1": 0.8001749661579481, + "2": 0.8066694596309745 + }, + "precision": { + "0": 0.2514163094253105, + "1": 0.3039724405966767, + "2": 0.2691352790869643 + }, + "recall": { + "0": 0.7271922155646657, + "1": 0.8001749661579481, + "2": 0.8066694596309745 + }, + "f1": { + "0": 0.24287275681309572, + "1": 0.30440717730876965, + "2": 0.27323770976338385 + }, + "micro_accuracy": { + "0": 0.8149729238309814, + "1": 0.7889154160982265, + "2": 0.9289222373806275 + }, + "theilU": { + "0": 0.9329194604232633, + "1": 0.9279675082275328, + "2": 0.8462890628674864 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + }, + "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", + "sample_ids_sha256": "51a9e4ae7818a96f935527a984a61f4fd31e43f60987ca23792f2bcafd27631a", + "list_sha256": "78ee7693c7352244cd8a99b7276196aa32de27e620ed66648c4087f826d47092" + }, + { + "model": "v3", + "preset": "europe_v3", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.6880627557980901, + "micro_accuracy_known": 0.7974228230364837, + "macro_accuracy_all": 0.6887822210592908, + "macro_accuracy_known": 0.7105618960334976, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7779160982264666, + "micro_accuracy_known": 0.7779160982264666, + "macro_accuracy_all": 0.7907835796748087, + "macro_accuracy_known": 0.7907835796748087, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9254945429740792, + "micro_accuracy_known": 0.9254945429740792, + "macro_accuracy_all": 0.804979506038197, + "macro_accuracy_known": 0.804979506038197, + "abstention_coverage": 1.0 + } + }, + "macro_f1_all": 0.19747553631500298, + "scores": { + "all": { + "accuracy": { + "0": 0.6887822210592908, + "1": 0.7907835796748087, + "2": 0.804979506038197 + }, + "precision": { + "0": 0.2113075222535363, + "1": 0.25581979303859764, + "2": 0.25026564649749544 + }, + "recall": { + "0": 0.6887822210592908, + "1": 0.7907835796748087, + "2": 0.804979506038197 + }, + "f1": { + "0": 0.19747553631500298, + "1": 0.2528121859712137, + "2": 0.2540250081556085 + }, + "micro_accuracy": { + "0": 0.6880627557980901, + "1": 0.7779160982264666, + "2": 0.9254945429740792 + }, + "theilU": { + "0": 0.93232229829798, + "1": 0.9297312779441991, + "2": 0.8384429842887284 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7105618960334976, + "1": 0.7907835796748087, + "2": 0.804979506038197 + }, + "precision": { + "0": 0.21594007329351536, + "1": 0.25581979303859764, + "2": 0.25026564649749544 + }, + "recall": { + "0": 0.7105618960334976, + "1": 0.7907835796748087, + "2": 0.804979506038197 + }, + "f1": { + "0": 0.20308773317860726, + "1": 0.2528121859712137, + "2": 0.2540250081556085 + }, + "micro_accuracy": { + "0": 0.7974228230364837, + "1": 0.7779160982264666, + "2": 0.9254945429740792 + }, + "theilU": { + "0": 0.9361858273521857, + "1": 0.9297312779441991, + "2": 0.8384429842887284 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + }, + "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", + "sample_ids_sha256": "51a9e4ae7818a96f935527a984a61f4fd31e43f60987ca23792f2bcafd27631a", + "list_sha256": "465e644095abe381b7b6a44f7ce05d5da0ba77bf75b76e1c53d0eba6c89f487a" + } + ], + "speed": [ + { + "model": "v2", + "device": "cpu", + "preset": "europe", + "batch": 1, + "median_ms": 779.0169740001147, + "p95_ms": 844.8682549969817, + "trial_min_ms": 765.1125749980565, + "trial_max_ms": 795.3343949993723, + "images_per_second": 1.2836690770230288 + }, + { + "model": "v2", + "device": "cpu", + "preset": "europe", + "batch": 8, + "median_ms": 5850.575989999925, + "p95_ms": 5944.596474997525, + "trial_min_ms": 5746.777247000864, + "trial_max_ms": 5879.015160000563, + "images_per_second": 1.3673867348572124 + }, + { + "model": "v2", + "device": "cpu", + "preset": "full", + "batch": 1, + "median_ms": 786.2400800004252, + "p95_ms": 878.9685310002824, + "trial_min_ms": 761.7254659999162, + "trial_max_ms": 859.430982000049, + "images_per_second": 1.271876142462057 + }, + { + "model": "v2", + "device": "cpu", + "preset": "full", + "batch": 8, + "median_ms": 5863.136789001146, + "p95_ms": 6006.966568002099, + "trial_min_ms": 5482.436258000234, + "trial_max_ms": 5984.705701001076, + "images_per_second": 1.3644573353648284 + }, + { + "model": "v2", + "device": "cpu", + "preset": "north_europe", + "batch": 1, + "median_ms": 796.1964119967888, + "p95_ms": 855.2797960001044, + "trial_min_ms": 780.1338070021302, + "trial_max_ms": 827.1140280012332, + "images_per_second": 1.255971497651051 + }, + { + "model": "v2", + "device": "cpu", + "preset": "north_europe", + "batch": 8, + "median_ms": 5765.8902689981915, + "p95_ms": 5890.259110001352, + "trial_min_ms": 5732.572058997903, + "trial_max_ms": 5802.123346998997, + "images_per_second": 1.387470039624944 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "europe", + "batch": 1, + "median_ms": 21.484739001607522, + "p95_ms": 29.487491003237665, + "trial_min_ms": 20.258914999431, + "trial_max_ms": 25.015052997332532, + "images_per_second": 46.5446659568533 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "europe", + "batch": 8, + "median_ms": 184.61432399999467, + "p95_ms": 205.47707299920148, + "trial_min_ms": 180.04209799983073, + "trial_max_ms": 199.17996799995308, + "images_per_second": 43.33358228476481 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "europe", + "batch": 32, + "median_ms": 386.83066299927304, + "p95_ms": 396.4832749989, + "trial_min_ms": 371.3045529984811, + "trial_max_ms": 390.7396550021076, + "images_per_second": 82.72353528515431 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "full", + "batch": 1, + "median_ms": 24.006794999877457, + "p95_ms": 30.195898001693422, + "trial_min_ms": 22.45696499812766, + "trial_max_ms": 26.05628300079843, + "images_per_second": 41.654873130924166 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "full", + "batch": 8, + "median_ms": 182.16871000186075, + "p95_ms": 210.70991599845001, + "trial_min_ms": 174.61328799981857, + "trial_max_ms": 198.96718300151406, + "images_per_second": 43.915335404846886 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "full", + "batch": 32, + "median_ms": 384.66329000220867, + "p95_ms": 399.98923299935996, + "trial_min_ms": 375.0903689979168, + "trial_max_ms": 393.06417599800625, + "images_per_second": 83.18963839730134 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "north_europe", + "batch": 1, + "median_ms": 22.129188000690192, + "p95_ms": 28.487998999480624, + "trial_min_ms": 21.078697001939872, + "trial_max_ms": 23.72169799855328, + "images_per_second": 45.18918633475439 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "north_europe", + "batch": 8, + "median_ms": 178.38607100202353, + "p95_ms": 190.12071899851435, + "trial_min_ms": 173.67241900137742, + "trial_max_ms": 178.83818200061796, + "images_per_second": 44.84655082688184 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "north_europe", + "batch": 32, + "median_ms": 383.29957200039644, + "p95_ms": 395.5446789987036, + "trial_min_ms": 365.05659100293997, + "trial_max_ms": 387.3802570014959, + "images_per_second": 83.48561370156422 + }, + { + "model": "v3-onnx", + "device": "cpu", + "preset": "europe", + "batch": 1, + "median_ms": 108.51240400006645, + "p95_ms": 123.77933399693575, + "trial_min_ms": 97.39962699677562, + "trial_max_ms": 113.84981300216168, + "images_per_second": 9.215536317851623 + }, + { + "model": "v3-onnx", + "device": "cpu", + "preset": "europe", + "batch": 8, + "median_ms": 822.0081180006673, + "p95_ms": 870.8548600006907, + "trial_min_ms": 820.2729259974149, + "trial_max_ms": 846.277905999159, + "images_per_second": 9.732263982329071 + }, + { + "model": "v3-onnx", + "device": "cpu", + "preset": "europe_v3", + "batch": 1, + "median_ms": 114.8194630004582, + "p95_ms": 134.62799300032202, + "trial_min_ms": 105.08139800003846, + "trial_max_ms": 124.61581699972157, + "images_per_second": 8.709324829328015 + }, + { + "model": "v3-onnx", + "device": "cpu", + "preset": "europe_v3", + "batch": 8, + "median_ms": 829.4069539988413, + "p95_ms": 904.6590870020736, + "trial_min_ms": 772.6378150000528, + "trial_max_ms": 864.606418999756, + "images_per_second": 9.645446015890501 + }, + { + "model": "v3-onnx", + "device": "cpu", + "preset": "full", + "batch": 1, + "median_ms": 112.84695399808697, + "p95_ms": 135.95893499950762, + "trial_min_ms": 111.31972099974519, + "trial_max_ms": 115.08480599877657, + "images_per_second": 8.86155952438869 + }, + { + "model": "v3-onnx", + "device": "cpu", + "preset": "full", + "batch": 8, + "median_ms": 865.4289660007635, + "p95_ms": 896.7971799975203, + "trial_min_ms": 831.8117230010103, + "trial_max_ms": 880.8760790016095, + "images_per_second": 9.243970694635777 + }, + { + "model": "v3-onnx", + "device": "cpu", + "preset": "north_europe", + "batch": 1, + "median_ms": 103.7234499999613, + "p95_ms": 124.14646799879847, + "trial_min_ms": 97.68370800156845, + "trial_max_ms": 119.08456600212958, + "images_per_second": 9.6410213890916 + }, + { + "model": "v3-onnx", + "device": "cpu", + "preset": "north_europe", + "batch": 8, + "median_ms": 824.3145499982347, + "p95_ms": 861.5687530000287, + "trial_min_ms": 791.8309580018104, + "trial_max_ms": 852.1146800012502, + "images_per_second": 9.705033109044518 + }, + { + "model": "v3-onnx", + "device": "cpu", + "preset": "north_europe_v3", + "batch": 1, + "median_ms": 112.1231870019983, + "p95_ms": 126.15529799950309, + "trial_min_ms": 102.30596700057504, + "trial_max_ms": 123.34861300041666, + "images_per_second": 8.918761825617548 + }, + { + "model": "v3-onnx", + "device": "cpu", + "preset": "north_europe_v3", + "batch": 8, + "median_ms": 818.1298460003745, + "p95_ms": 854.9832339995191, + "trial_min_ms": 797.6780380013224, + "trial_max_ms": 835.7702249995782, + "images_per_second": 9.778398916883345 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "europe", + "batch": 1, + "median_ms": 31.974444002116797, + "p95_ms": 36.03833899978781, + "trial_min_ms": 31.499988999712514, + "trial_max_ms": 33.238082000025315, + "images_per_second": 31.274976976418955 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "europe", + "batch": 8, + "median_ms": 190.02189400271163, + "p95_ms": 203.95815500160097, + "trial_min_ms": 181.0136739986774, + "trial_max_ms": 194.3993130007584, + "images_per_second": 42.100411860360886 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "europe", + "batch": 32, + "median_ms": 751.9461080009933, + "p95_ms": 938.8219909997133, + "trial_min_ms": 733.0324560025474, + "trial_max_ms": 805.7348090005689, + "images_per_second": 42.556241277809406 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "europe_v3", + "batch": 1, + "median_ms": 33.4465949999867, + "p95_ms": 38.38332599843852, + "trial_min_ms": 30.618580000009388, + "trial_max_ms": 35.84958700230345, + "images_per_second": 29.898409688651345 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "europe_v3", + "batch": 8, + "median_ms": 194.54678400143166, + "p95_ms": 211.8438170000445, + "trial_min_ms": 181.03928100026678, + "trial_max_ms": 202.35563499954878, + "images_per_second": 41.121214319025334 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "europe_v3", + "batch": 32, + "median_ms": 774.5358419997501, + "p95_ms": 949.0962469972146, + "trial_min_ms": 764.2361749967677, + "trial_max_ms": 784.2745119996835, + "images_per_second": 41.31506673387792 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "full", + "batch": 1, + "median_ms": 38.574180001887726, + "p95_ms": 41.16026200063061, + "trial_min_ms": 37.06625300037558, + "trial_max_ms": 40.838097000232665, + "images_per_second": 25.92407667385444 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "full", + "batch": 8, + "median_ms": 202.19900700249127, + "p95_ms": 211.71870800026227, + "trial_min_ms": 198.48519999868586, + "trial_max_ms": 202.6014760012913, + "images_per_second": 39.56498164158359 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "full", + "batch": 32, + "median_ms": 804.4566509997821, + "p95_ms": 961.4865859985002, + "trial_min_ms": 794.1813469988119, + "trial_max_ms": 830.9064189998026, + "images_per_second": 39.77840193157738 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "north_europe", + "batch": 1, + "median_ms": 32.848500999534735, + "p95_ms": 41.949999998905696, + "trial_min_ms": 30.442417999438476, + "trial_max_ms": 40.2992199997243, + "images_per_second": 30.44278945983453 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "north_europe", + "batch": 8, + "median_ms": 186.86159300341387, + "p95_ms": 231.81681699861656, + "trial_min_ms": 182.11845200130483, + "trial_max_ms": 189.51840799854835, + "images_per_second": 42.81243604646913 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "north_europe", + "batch": 32, + "median_ms": 753.8683550010319, + "p95_ms": 914.5665709984314, + "trial_min_ms": 743.5950600010983, + "trial_max_ms": 760.9614780012635, + "images_per_second": 42.447729484488306 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "north_europe_v3", + "batch": 1, + "median_ms": 32.764373001555214, + "p95_ms": 37.03474800204276, + "trial_min_ms": 30.950796000979608, + "trial_max_ms": 35.4559719999088, + "images_per_second": 30.520956404462048 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "north_europe_v3", + "batch": 8, + "median_ms": 188.96362599843997, + "p95_ms": 209.1836069994315, + "trial_min_ms": 176.49814899777994, + "trial_max_ms": 197.84098799937055, + "images_per_second": 42.336190140985366 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "north_europe_v3", + "batch": 32, + "median_ms": 760.7565639991662, + "p95_ms": 922.7298170007998, + "trial_min_ms": 737.9431469998963, + "trial_max_ms": 802.070398000069, + "images_per_second": 42.063389938801855 + }, + { + "model": "v3-torch", + "device": "cpu", + "preset": "europe", + "batch": 1, + "median_ms": 139.97511000343366, + "p95_ms": 157.91612699831603, + "trial_min_ms": 132.2067729997798, + "trial_max_ms": 148.36850999927265, + "images_per_second": 7.144127266450939 + }, + { + "model": "v3-torch", + "device": "cpu", + "preset": "europe", + "batch": 8, + "median_ms": 1020.2903719982714, + "p95_ms": 1126.8082070018863, + "trial_min_ms": 990.7244099995296, + "trial_max_ms": 1102.0994509999582, + "images_per_second": 7.840905118345617 + }, + { + "model": "v3-torch", + "device": "cpu", + "preset": "europe_v3", + "batch": 1, + "median_ms": 156.06195000145817, + "p95_ms": 174.66607700043824, + "trial_min_ms": 155.75652500047, + "trial_max_ms": 160.84377999868593, + "images_per_second": 6.407711809256878 + }, + { + "model": "v3-torch", + "device": "cpu", + "preset": "europe_v3", + "batch": 8, + "median_ms": 1013.887937002437, + "p95_ms": 1098.4262460005993, + "trial_min_ms": 994.4540770011372, + "trial_max_ms": 1078.8947210021433, + "images_per_second": 7.8904183667990235 + }, + { + "model": "v3-torch", + "device": "cpu", + "preset": "full", + "batch": 1, + "median_ms": 162.19867499967222, + "p95_ms": 183.9224630020908, + "trial_min_ms": 160.09652899811044, + "trial_max_ms": 162.8700189976371, + "images_per_second": 6.165278477164014 + }, + { + "model": "v3-torch", + "device": "cpu", + "preset": "full", + "batch": 8, + "median_ms": 1099.8652199996286, + "p95_ms": 1168.8887240015902, + "trial_min_ms": 1066.5678989971639, + "trial_max_ms": 1130.8798369973374, + "images_per_second": 7.273618489366089 + }, + { + "model": "v3-torch", + "device": "cpu", + "preset": "north_europe", + "batch": 1, + "median_ms": 148.2759509999596, + "p95_ms": 161.5721569978632, + "trial_min_ms": 142.76755700120702, + "trial_max_ms": 153.29030800057808, + "images_per_second": 6.744182001572678 + }, + { + "model": "v3-torch", + "device": "cpu", + "preset": "north_europe", + "batch": 8, + "median_ms": 1082.5685600029828, + "p95_ms": 1133.4843360018567, + "trial_min_ms": 1013.1757369999832, + "trial_max_ms": 1087.7670109985047, + "images_per_second": 7.3898321968429945 + }, + { + "model": "v3-torch", + "device": "cpu", + "preset": "north_europe_v3", + "batch": 1, + "median_ms": 139.39189299708232, + "p95_ms": 159.55598099753843, + "trial_min_ms": 129.97479099794873, + "trial_max_ms": 153.69803499925183, + "images_per_second": 7.174018362896696 + }, + { + "model": "v3-torch", + "device": "cpu", + "preset": "north_europe_v3", + "batch": 8, + "median_ms": 1022.699465000187, + "p95_ms": 1107.3616229987238, + "trial_min_ms": 1004.2549429999781, + "trial_max_ms": 1085.7946290016116, + "images_per_second": 7.8224349124877435 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "europe", + "batch": 1, + "median_ms": 35.489638001308776, + "p95_ms": 57.598117000452476, + "trial_min_ms": 33.89597299974412, + "trial_max_ms": 52.630236998084, + "images_per_second": 28.177238662257484 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "europe", + "batch": 8, + "median_ms": 175.51926099986304, + "p95_ms": 185.99682900094194, + "trial_min_ms": 174.19886200150358, + "trial_max_ms": 176.5289369977836, + "images_per_second": 45.57904331654087 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "europe", + "batch": 32, + "median_ms": 728.2977190006932, + "p95_ms": 884.3167390004965, + "trial_min_ms": 698.9123559978907, + "trial_max_ms": 760.5062379989249, + "images_per_second": 43.938075274913146 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "europe_v3", + "batch": 1, + "median_ms": 35.27583799950662, + "p95_ms": 48.10837100012577, + "trial_min_ms": 33.24329500173917, + "trial_max_ms": 41.260214002249995, + "images_per_second": 28.348015432375732 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "europe_v3", + "batch": 8, + "median_ms": 178.32208699837793, + "p95_ms": 194.90453400067054, + "trial_min_ms": 170.77715800041915, + "trial_max_ms": 192.54146399907768, + "images_per_second": 44.86264228206779 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "europe_v3", + "batch": 32, + "median_ms": 724.5190200010256, + "p95_ms": 921.8273680016864, + "trial_min_ms": 717.8096630013897, + "trial_max_ms": 746.3200019992655, + "images_per_second": 44.167232490259124 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "full", + "batch": 1, + "median_ms": 45.16958599924692, + "p95_ms": 55.23221900148201, + "trial_min_ms": 36.25714399822755, + "trial_max_ms": 48.02743799882592, + "images_per_second": 22.1387904688051 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "full", + "batch": 8, + "median_ms": 191.97120100216125, + "p95_ms": 224.58959399955347, + "trial_min_ms": 185.349908999342, + "trial_max_ms": 204.552421997505, + "images_per_second": 41.672917386759146 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "full", + "batch": 32, + "median_ms": 758.8707609975245, + "p95_ms": 956.4475619990844, + "trial_min_ms": 727.8204619979078, + "trial_max_ms": 767.2486240007856, + "images_per_second": 42.16791797055993 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "north_europe", + "batch": 1, + "median_ms": 36.8857930006925, + "p95_ms": 50.996198999200715, + "trial_min_ms": 32.99324700128636, + "trial_max_ms": 48.603333001665305, + "images_per_second": 27.11070899251714 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "north_europe", + "batch": 8, + "median_ms": 171.64449200208765, + "p95_ms": 187.66877799862414, + "trial_min_ms": 168.77017200022237, + "trial_max_ms": 178.43948399968212, + "images_per_second": 46.6079622287134 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "north_europe", + "batch": 32, + "median_ms": 718.6301279980398, + "p95_ms": 923.7060959967494, + "trial_min_ms": 686.7490500007989, + "trial_max_ms": 768.8245279969124, + "images_per_second": 44.52916563510302 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "north_europe_v3", + "batch": 1, + "median_ms": 35.540962002414744, + "p95_ms": 50.400192998495186, + "trial_min_ms": 33.24394499941263, + "trial_max_ms": 46.86532299820101, + "images_per_second": 28.136548468554604 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "north_europe_v3", + "batch": 8, + "median_ms": 185.47856499935733, + "p95_ms": 197.47024499883992, + "trial_min_ms": 182.4952110000595, + "trial_max_ms": 187.0011249993695, + "images_per_second": 43.131668611021006 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "north_europe_v3", + "batch": 32, + "median_ms": 717.1896030013158, + "p95_ms": 890.1827099980437, + "trial_min_ms": 697.0991640009743, + "trial_max_ms": 741.660445000889, + "images_per_second": 44.61860554877744 + } + ], + "resources": [ + { + "model": "v2", + "device": "cpu", + "load_first_seconds": { + "median": 209.39651592600057, + "min": 198.43300686099974, + "max": 209.59208342499915 + }, + "rss_mib": { + "median": 4122.8125, + "min": 4122.08203125, + "max": 4123.83203125 + }, + "cuda_allocated_mib": { + "median": 0.0, + "min": 0.0, + "max": 0.0 + }, + "cuda_reserved_mib": { + "median": 0.0, + "min": 0.0, + "max": 0.0 + } + }, + { + "model": "v2", + "device": "cuda:0", + "load_first_seconds": { + "median": 209.60287212600088, + "min": 208.6747407030016, + "max": 210.06140313599826 + }, + "rss_mib": { + "median": 4122.58203125, + "min": 4122.25390625, + "max": 4123.69921875 + }, + "cuda_allocated_mib": { + "median": 1935.630859375, + "min": 1935.630859375, + "max": 1935.630859375 + }, + "cuda_reserved_mib": { + "median": 2072.0, + "min": 2072.0, + "max": 2072.0 + } + }, + { + "model": "v3-onnx", + "device": "cpu", + "load_first_seconds": { + "median": 0.38248996100082877, + "min": 0.36779166300038924, + "max": 0.40503490100309136 + }, + "rss_mib": { + "median": 586.5078125, + "min": 572.76953125, + "max": 590.7421875 + }, + "cuda_allocated_mib": null, + "cuda_reserved_mib": null + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "load_first_seconds": { + "median": 1.6538925760032726, + "min": 1.6474964560002263, + "max": 1.6716580809988955 + }, + "rss_mib": { + "median": 1469.08984375, + "min": 1461.17578125, + "max": 1476.80859375 + }, + "cuda_allocated_mib": null, + "cuda_reserved_mib": null + }, + { + "model": "v3-torch", + "device": "cpu", + "load_first_seconds": { + "median": 40.465289795996796, + "min": 39.93423429299946, + "max": 40.48855051400096 + }, + "rss_mib": { + "median": 1573.19921875, + "min": 1568.90234375, + "max": 1636.4609375 + }, + "cuda_allocated_mib": { + "median": 0.0, + "min": 0.0, + "max": 0.0 + }, + "cuda_reserved_mib": { + "median": 0.0, + "min": 0.0, + "max": 0.0 + } + }, + { + "model": "v3-torch", + "device": "cuda:0", + "load_first_seconds": { + "median": 41.788645010001346, + "min": 41.23758513699795, + "max": 42.60878924099961 + }, + "rss_mib": { + "median": 1897.02734375, + "min": 1895.94921875, + "max": 1898.734375 + }, + "cuda_allocated_mib": { + "median": 865.3681640625, + "min": 865.3681640625, + "max": 865.3681640625 + }, + "cuda_reserved_mib": { + "median": 1348.0, + "min": 1348.0, + "max": 1348.0 + } + } + ], + "v3_gpu_components": [ + { + "model": "v3-onnx", + "batch": 1, + "stage": "end_to_end", + "observations": 21, + "median_ms": 32.848500999534735 + }, + { + "model": "v3-onnx", + "batch": 1, + "stage": "prepared", + "observations": 21, + "median_ms": 13.389879000897054 + }, + { + "model": "v3-onnx", + "batch": 1, + "stage": "preprocessing", + "observations": 21, + "median_ms": 16.602722000243375 + }, + { + "model": "v3-onnx", + "batch": 8, + "stage": "end_to_end", + "observations": 21, + "median_ms": 186.86159300341387 + }, + { + "model": "v3-onnx", + "batch": 8, + "stage": "prepared", + "observations": 21, + "median_ms": 50.60579099881579 + }, + { + "model": "v3-onnx", + "batch": 8, + "stage": "preprocessing", + "observations": 21, + "median_ms": 134.49058500191313 + }, + { + "model": "v3-onnx", + "batch": 32, + "stage": "end_to_end", + "observations": 21, + "median_ms": 753.8683550010319 + }, + { + "model": "v3-onnx", + "batch": 32, + "stage": "prepared", + "observations": 21, + "median_ms": 180.64068800231325 + }, + { + "model": "v3-onnx", + "batch": 32, + "stage": "preprocessing", + "observations": 21, + "median_ms": 559.359699000197 + }, + { + "model": "v3-torch", + "batch": 1, + "stage": "end_to_end", + "observations": 21, + "median_ms": 36.8857930006925 + }, + { + "model": "v3-torch", + "batch": 1, + "stage": "prepared", + "observations": 21, + "median_ms": 18.508613997255452 + }, + { + "model": "v3-torch", + "batch": 1, + "stage": "preprocessing", + "observations": 21, + "median_ms": 14.880823000567034 + }, + { + "model": "v3-torch", + "batch": 8, + "stage": "end_to_end", + "observations": 21, + "median_ms": 171.64449200208765 + }, + { + "model": "v3-torch", + "batch": 8, + "stage": "prepared", + "observations": 21, + "median_ms": 46.71529999905033 + }, + { + "model": "v3-torch", + "batch": 8, + "stage": "preprocessing", + "observations": 21, + "median_ms": 126.31524700191221 + }, + { + "model": "v3-torch", + "batch": 32, + "stage": "end_to_end", + "observations": 21, + "median_ms": 718.6301279980398 + }, + { + "model": "v3-torch", + "batch": 32, + "stage": "prepared", + "observations": 21, + "median_ms": 181.38111200096318 + }, + { + "model": "v3-torch", + "batch": 32, + "stage": "preprocessing", + "observations": 21, + "median_ms": 519.4957230014552 + } + ], + "quality_policy": { + "accuracy": "Lead: mini_metrics accuracy (macro); micro_accuracy retained; all and known scopes at each rank", + "macro_f1": "mini_metrics all.f1.0; equal weight over union of truth and predicted species", + "threshold": 0, + "optimal": false, + "known_only": false, + "known_accuracy": "mini_metrics known.micro_accuracy; known_only=True; truth in active preset vocabulary" + }, + "sources_sha256": { + "local-evidence/mambo-v3/quality-full/comparison.json": "b9ac190c4ca959c6a5791adc5ceabc4a500a25f9724ef5ab7ebed57cfd5e4de8", + "local-evidence/mambo-release-comparison-quality/v2-full/report.json": "c9a98044cbc97ab0033b1f794e284b8f8504f26fc0b7574dfa619c16df6db263", + "local-evidence/mambo-release-comparison-quality/v2-full/north_europe/metrics.json": "11340899a76a11997c7b3a4813f0824a730177478bab1d5a9270de851f7fa368", + "local-evidence/mambo-release-comparison-quality/v2-full/europe/metrics.json": "e6bccab2d2d6cee8bc3b9322a404dcdcb456c038ace002efb430aba1191c300b", + "local-evidence/mambo-release-comparison-quality/v2-full/full/metrics.json": "1e6a2aabc59aacc10d03c4653de71b549ddf4a003b7a096d04a4cc7c9c2cc9b2", + "local-evidence/mambo-v3/quality-full/torch-cuda-0-prediction/report.json": "ba80d1580f5b563bd5eb0d9af3af392c6115766c4dcebe619f68e034c938b47d", + "local-evidence/mambo-v3/quality-full/torch-cuda-0-prediction/north_europe/metrics.json": "da3927fad7f5901391b9a9033027d6e20f0a6f4a219e1d7d215bacda1b301599", + "local-evidence/mambo-v3/quality-full/torch-cuda-0-prediction/europe/metrics.json": "a82d3c13819caa0c4e39f933b2dcc8098382172f7a8a2fc00d9cc6c4518cde27", + "local-evidence/mambo-v3/quality-full/torch-cuda-0-prediction/full/metrics.json": "b3a724e48d3ecd783509d90899b0d96ec2f2802a2304551db5c595014561297a", + "local-evidence/mambo-v3/quality-full/torch-cuda-0-prediction/north_europe_v3/metrics.json": "6d434a6483fd447d80b5cfd55d57cfe8c65a7420f52cbd413f2e57cee3b23725", + "local-evidence/mambo-v3/quality-full/torch-cuda-0-prediction/europe_v3/metrics.json": "762b26022265c8bfedcc4745ea12107b6957eca098ba6628f6d9a149b39b77ff", + "local-evidence/mambo-v3/performance/trial-0-torch-cpu-prediction-t4/report.json": "f75f2fd264d09ab6aa7bd194e7a6f8afc28980e41e81e164330f0efe5746e88f", + "local-evidence/mambo-v3/performance/trial-0-onnx-cpu-prediction-t4/report.json": "dbec7f2753ea649998ec3d1c6d5d75608d1465d273755910f531902247335047", + "local-evidence/mambo-v3/performance/trial-0-torch-cuda-0-prediction-t4/report.json": "e9d75960d5ce34a9040f6d0c1af2476bad9c3edcfaa0cb581fdf37d3bc8cc1eb", + "local-evidence/mambo-v3/performance/trial-0-onnx-cuda-0-prediction-t4/report.json": "41705c1cdd32397a1b7504eeb8b018308fee04716e807c9e20551f885ca9e5d2", + "local-evidence/mambo-v3/performance/trial-1-onnx-cuda-0-prediction-t4/report.json": "2f85c06d080971c8d677442928097f46939eaf7010707af25915c71f01c16720", + "local-evidence/mambo-v3/performance/trial-1-torch-cuda-0-prediction-t4/report.json": "38d58fb969176851aba53393228946658242a63d15964085f5c55ba8c617fbe7", + "local-evidence/mambo-v3/performance/trial-1-onnx-cpu-prediction-t4/report.json": "983887ef2d024f811d17ca21e5db55b7dfdcb26f11528a2cdf122fa3f9683e06", + "local-evidence/mambo-v3/performance/trial-1-torch-cpu-prediction-t4/report.json": "e092bf39351e6bb1608c643b319ab3ebdd6168498a9aea2381d07e9d6bc88ae8", + "local-evidence/mambo-v3/performance/trial-2-torch-cpu-prediction-t4/report.json": "ca3ffa96c7cd0c410f6804a94c66aa6fd9e3076739e76ac5276877131ec3acd7", + "local-evidence/mambo-v3/performance/trial-2-onnx-cpu-prediction-t4/report.json": "3c49eb94eeec2316838d18c1e691756ef5ab7e215cffa1c50084bcf0772d7ad5", + "local-evidence/mambo-v3/performance/trial-2-torch-cuda-0-prediction-t4/report.json": "a3958a47226f021d42acdc123d81a7e08540d9113a2ce4f0b6559eb7022fff04", + "local-evidence/mambo-v3/performance/trial-2-onnx-cuda-0-prediction-t4/report.json": "927bf5395c71330f8d924a621e060d73ba5cc48210013f0880d6ec1360ccf28f", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-0-v2-cpu/report.json": "21cfb5b069af6a0e008f3b017a6514409b447d2f63d9b7df4da9972113b1aab8", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-0-v3-torch-cpu/report.json": "ea44ddb694bd1922a717775711c1be2fc167223bba2f6827d69ee692ebefe52e", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-0-v3-onnx-cpu/report.json": "7933e6411f95991c742bf7851fc404918ae8e86e7a03c423d4f07f2d76270f50", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-0-v2-cuda-0/report.json": "8f01c6b3299de7ca8c1e122f3a3a41cc71e0551f27800f42f0729255ce67450a", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-0-v3-torch-cuda-0/report.json": "079ffb75a89f7db4184f936482de647ddc9216d2cc56ca471fd70e2799a074c7", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-0-v3-onnx-cuda-0/report.json": "5985213e519f137a6f8f5d118d43a66692579608aa5169c355a4fc3f0c9ac74b", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-1-v3-onnx-cuda-0/report.json": "1433fafea9fbb203400c83c83b68112b72dd74f0397ace1fa5eea7032899ddd3", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-1-v3-torch-cuda-0/report.json": "7e8a7c1f30e5102378d230fb1d5ca1d1a5cdef106dff66f1cf408ffeaf17f115", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-1-v2-cuda-0/report.json": "f9deaee77c4ee1d3ff00b63c45959cc2dcddbbcd6ee890dcbd4bf9e5ed5cbb69", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-1-v3-onnx-cpu/report.json": "db7e71075abe904f239498fa36c831f1dce1c40284c553f54680cc4d7e62b54f", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-1-v3-torch-cpu/report.json": "6cbadadbd51a877c335516e8abb7420ecd553e2146fb59b6275010fe58cbeabc", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-1-v2-cpu/report.json": "1d3ccb09d35977644d7f13584717b0df977d636abef06594bb55c1d1acb4f430", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-2-v2-cpu/report.json": "9ce8be6fa3462f4ff7440b040eb5ffa54ec6e80d4eedfdc8bfc2e0c21da3d353", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-2-v3-torch-cpu/report.json": "3332f479ebd7213ac6301f507bb63e242d4bb3ac4c5e8e4a7e0da1cfe7eaca2c", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-2-v3-onnx-cpu/report.json": "c0d664560c4f71d97f10734348b2f37f564bedd76cd2e996fab0b0f7e3f5f8fb", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-2-v2-cuda-0-retry1/report.json": "5853f83dee6b7009f8038327253fe92f1baa3d0454a225edf6f192560ebab0f3", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-2-v3-torch-cuda-0/report.json": "c348b2c2af88587f075c562c94734bb68b0a29177085baacd03d669f3e2ee259", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-2-v3-onnx-cuda-0/report.json": "cabf7f6338f2a2741838547315c0da33da45ce021c26e4b8e2e043d9bd4168b6" + }, + "timing_bank_sha256": "aa2aea4ecd76bbce46a38a4787f632763fe60b6296d27aa6a2ed633c59e15b63", + "protocol": "Same laptop and image bank; original v2 preprocessing/CUDA autocast; v2 CPU requires float32 input cast; v3 FP32; four threads; three trials; predictions only." +} diff --git a/docs/assets/mambo-release-metrics.csv b/docs/assets/mambo-release-metrics.csv new file mode 100644 index 0000000..187a8bc --- /dev/null +++ b/docs/assets/mambo-release-metrics.csv @@ -0,0 +1,49 @@ +model,preset,scope,rank,images,macro_accuracy,macro_precision,macro_recall,macro_f1,micro_accuracy,theilU,coverage +v2,north_europe,all,species,58640,0.6852063621352951,0.2742104381019442,0.6852063621352951,0.25753800338546967,0.68712482946794,0.9259639612074944,1.0 +v2,north_europe,all,genus,58640,0.7890053947525617,0.3188818859364664,0.7890053947525617,0.3169285074452811,0.7922919508867667,0.9286450152404832,1.0 +v2,north_europe,all,family,58640,0.8440271040813301,0.26007435892237385,0.8440271040813301,0.2691037692533918,0.9449351978171896,0.865726913911594,1.0 +v2,north_europe,known,species,50598,0.706872966471589,0.27934832747314936,0.706872966471589,0.26468747200295195,0.7963358235503379,0.9284675700829689,1.0 +v2,north_europe,known,genus,58639,0.7914633554838781,0.3189462554934523,0.7914633554838781,0.3174198331740771,0.7923054622350313,0.9286569914847851,1.0 +v2,north_europe,known,family,58640,0.8440271040813301,0.26007435892237385,0.8440271040813301,0.2691037692533918,0.9449351978171896,0.865726913911594,1.0 +v2,europe,all,species,58640,0.6604260262269301,0.220093475997043,0.6604260262269301,0.19998360830548284,0.669594133697135,0.9298644970123321,1.0 +v2,europe,all,genus,58640,0.7728971632770847,0.26145460355851485,0.7728971632770847,0.25527668172822016,0.7764495225102319,0.9304037751304223,1.0 +v2,europe,all,family,58640,0.8353711166095457,0.24311183116521895,0.8353711166095457,0.2512650593074731,0.9423090040927694,0.858730608498533,1.0 +v2,europe,known,species,50598,0.6813090626293627,0.22455003199982063,0.6813090626293627,0.20496609487323514,0.7760188149729238,0.9324736395684865,1.0 +v2,europe,known,genus,58640,0.7728971632770847,0.26145460355851485,0.7728971632770847,0.25527668172822016,0.7764495225102319,0.9304037751304223,1.0 +v2,europe,known,family,58640,0.8353711166095457,0.24311183116521895,0.8353711166095457,0.2512650593074731,0.9423090040927694,0.858730608498533,1.0 +v2,full,all,species,58640,0.5720627970250876,0.1100618404698789,0.5720627970250876,0.08990868448899282,0.5936050477489768,0.9424989337241723,1.0 +v2,full,all,genus,58640,0.7168278641037727,0.1327201662316462,0.7168278641037727,0.12210675669894289,0.7285129604365621,0.9364867523141058,1.0 +v2,full,all,family,58640,0.8069699178640561,0.19682625488877242,0.8069699178640561,0.20522430973656694,0.9265006821282401,0.8320049778627998,1.0 +v2,full,known,species,50598,0.5901517392235093,0.11296990063684895,0.5901517392235093,0.09231932892005533,0.6879520929681016,0.9472050810666933,1.0 +v2,full,known,genus,58640,0.7168278641037727,0.1327201662316462,0.7168278641037727,0.12210675669894289,0.7285129604365621,0.9364867523141058,1.0 +v2,full,known,family,58640,0.8069699178640561,0.19682625488877242,0.8069699178640561,0.20522430973656694,0.9265006821282401,0.8320049778627998,1.0 +v3,north_europe,all,species,58640,0.7123671759291879,0.26361186496219735,0.7123671759291879,0.25450880594788156,0.7078956343792633,0.9282973331913745,1.0 +v3,north_europe,all,genus,58640,0.8054070319557569,0.31882230287858776,0.8054070319557569,0.3207725301986971,0.7936732605729877,0.927078119536916,1.0 +v3,north_europe,all,family,58640,0.8106383132501974,0.27544229106153234,0.8106383132501974,0.2805840235220709,0.9298090040927695,0.8488942298912809,1.0 +v3,north_europe,known,species,50598,0.734892620227344,0.2677964216559137,0.734892620227344,0.2609164468790569,0.8204079212617099,0.9313037775676971,1.0 +v3,north_europe,known,genus,58639,0.8079160881300739,0.31884970853060046,0.8079160881300739,0.3212438169069074,0.7936867954774126,0.9270916152069156,1.0 +v3,north_europe,known,family,58640,0.8106383132501974,0.27544229106153234,0.8106383132501974,0.2805840235220709,0.9298090040927695,0.8488942298912809,1.0 +v3,europe,all,species,58640,0.6906121581308468,0.2125866053945616,0.6906121581308468,0.19931852384419554,0.6894952251023192,0.9327740860469433,1.0 +v3,europe,all,genus,58640,0.7927684087442151,0.25792706709688445,0.7927684087442151,0.25548534308971915,0.7793656207366985,0.930377596554077,1.0 +v3,europe,all,family,58640,0.8061650335232657,0.25177044612587207,0.8061650335232657,0.25562321183354897,0.9286323328785812,0.8415003084731356,1.0 +v3,europe,known,species,50598,0.7124496967278696,0.21701009331649532,0.7124496967278696,0.20477619736063515,0.7990829677062334,0.9361501370706838,1.0 +v3,europe,known,genus,58640,0.7927684087442151,0.25792706709688445,0.7927684087442151,0.25548534308971915,0.7793656207366985,0.930377596554077,1.0 +v3,europe,known,family,58640,0.8061650335232657,0.25177044612587207,0.8061650335232657,0.25562321183354897,0.9286323328785812,0.8415003084731356,1.0 +v3,full,all,species,58640,0.5802757153882665,0.11912807276515047,0.5802757153882665,0.09709532327738142,0.5843281036834925,0.9381503100112119,1.0 +v3,full,all,genus,58640,0.7133531076261048,0.139300115626279,0.7133531076261048,0.12672892757582832,0.7058321964529332,0.927961126268096,1.0 +v3,full,all,family,58640,0.7851379223252065,0.18846238515501548,0.7851379223252065,0.19392386150040025,0.903137789904502,0.803447959660008,1.0 +v3,full,known,species,50598,0.5986243546100299,0.1233403630154899,0.5986243546100299,0.10055972949058657,0.6772006798687695,0.9436554162021304,1.0 +v3,full,known,genus,58640,0.7133531076261048,0.139300115626279,0.7133531076261048,0.12672892757582832,0.7058321964529332,0.927961126268096,1.0 +v3,full,known,family,58640,0.7851379223252065,0.18846238515501548,0.7851379223252065,0.19392386150040025,0.903137789904502,0.803447959660008,1.0 +v3,north_europe_v3,all,species,58640,0.7049027989956338,0.2470742742773393,0.7049027989956338,0.2366924424645238,0.703206002728513,0.9297064107551721,1.0 +v3,north_europe_v3,all,genus,58640,0.8001749661579481,0.3039724405966767,0.8001749661579481,0.30440717730876965,0.7889154160982265,0.9279675082275328,1.0 +v3,north_europe_v3,all,family,58640,0.8066694596309745,0.2691352790869643,0.8066694596309745,0.27323770976338385,0.9289222373806275,0.8462890628674864,1.0 +v3,north_europe_v3,known,species,50598,0.7271922155646657,0.2514163094253105,0.7271922155646657,0.24287275681309572,0.8149729238309814,0.9329194604232633,1.0 +v3,north_europe_v3,known,genus,58640,0.8001749661579481,0.3039724405966767,0.8001749661579481,0.30440717730876965,0.7889154160982265,0.9279675082275328,1.0 +v3,north_europe_v3,known,family,58640,0.8066694596309745,0.2691352790869643,0.8066694596309745,0.27323770976338385,0.9289222373806275,0.8462890628674864,1.0 +v3,europe_v3,all,species,58640,0.6887822210592908,0.2113075222535363,0.6887822210592908,0.19747553631500298,0.6880627557980901,0.93232229829798,1.0 +v3,europe_v3,all,genus,58640,0.7907835796748087,0.25581979303859764,0.7907835796748087,0.2528121859712137,0.7779160982264666,0.9297312779441991,1.0 +v3,europe_v3,all,family,58640,0.804979506038197,0.25026564649749544,0.804979506038197,0.2540250081556085,0.9254945429740792,0.8384429842887284,1.0 +v3,europe_v3,known,species,50598,0.7105618960334976,0.21594007329351536,0.7105618960334976,0.20308773317860726,0.7974228230364837,0.9361858273521857,1.0 +v3,europe_v3,known,genus,58640,0.7907835796748087,0.25581979303859764,0.7907835796748087,0.2528121859712137,0.7779160982264666,0.9297312779441991,1.0 +v3,europe_v3,known,family,58640,0.804979506038197,0.25026564649749544,0.804979506038197,0.2540250081556085,0.9254945429740792,0.8384429842887284,1.0 diff --git a/docs/assets/mambo-release-preset-delta.svg b/docs/assets/mambo-release-preset-delta.svg new file mode 100644 index 0000000..48148ba --- /dev/null +++ b/docs/assets/mambo-release-preset-delta.svg @@ -0,0 +1,330 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.10.9, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + −0.8 + + + + + + + + + + −0.6 + + + + + + + + + + −0.4 + + + + + + + + + + −0.2 + + + + + + + + + + 0.0 + + + + + + + + + + 0.2 + + + + Updated minus legacy (percentage points) + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + + + + + -0.75 pp + + + -0.18 pp + + + Macro species accuracy + + + + + + + + + + + + + + + + + + + + + −0.8 + + + + + + + + + + −0.6 + + + + + + + + + + −0.4 + + + + + + + + + + −0.2 + + + + + + + + + + 0.0 + + + + + + + + + + 0.2 + + + + Updated minus legacy (percentage points) + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + + + + + -0.47 pp + + + -0.14 pp + + + Micro species accuracy + + + + V3 updated lists: accuracy trade-offs on Flemming + + + Northern Europe adds 222 candidate species; Europe adds 72. No removals. Choose lists by geographic scope. + All 58,640 images; threshold 0, no optimization. Both backends agree; filters were not tuned to Flemming. + + + + + + + + + + + diff --git a/docs/assets/mambo-release-quality.svg b/docs/assets/mambo-release-quality.svg new file mode 100644 index 0000000..832de4d --- /dev/null +++ b/docs/assets/mambo-release-quality.svg @@ -0,0 +1,978 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.10.9, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + Mean class accuracy (%) + + + + + + + + + + + + + + + + + + + + + + + + + + + + 68.52 + + + 66.04 + + + 57.21 + + + 71.24 + + + 69.06 + + + 58.03 + + + Species macro accuracy · all truth classes + + + + + + + + + + MAMBO v2 + + + + + + MAMBO v3 (both backends) + + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0.00 + + + + + + + + + + + + + 0.05 + + + + + + + + + + + + + 0.10 + + + + + + + + + + + + + 0.15 + + + + + + + + + + + + + 0.20 + + + + + + + + + + + + + 0.25 + + + + + + + + + + + + + 0.30 + + + + Pinned mini_metrics macro-F1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.258 + + + 0.200 + + + 0.090 + + + 0.255 + + + 0.199 + + + 0.097 + + + Species macro-F1 · truth ∪ predicted classes + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + Mean class accuracy (%) + + + + + + + + + + + + + + + + + + + + + + + + + + + + 78.90 + + + 77.29 + + + 71.68 + + + 80.54 + + + 79.28 + + + 71.34 + + + Genus macro accuracy · all truth classes + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + Mean class accuracy (%) + + + + + + + + + + + + + + + + + + + + + + + + + + + + 84.40 + + + 83.54 + + + 80.70 + + + 81.06 + + + 80.62 + + + 78.51 + + + Family macro accuracy · all truth classes + + + + Flemming: MAMBO v2 versus v3 + + + 58,640 images · threshold 0 (no abstention or optimization) · known_only=False · unknown truth included + V2: original CUDA autocast / BioCLIP recipe. V3: FP32 / release recipe. Real-world comparison of the two release pipelines. + + + + + + + + + + + + + + + + + diff --git a/docs/assets/mambo-release-resources.svg b/docs/assets/mambo-release-resources.svg new file mode 100644 index 0000000..8c542d4 --- /dev/null +++ b/docs/assets/mambo-release-resources.svg @@ -0,0 +1,1356 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.10.9, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + v2 + input cast + + + + + + + + + + v3 PyTorch + + + + + + + + + + v3 ONNX + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 1000 + + + + + + + + + + + + + 2000 + + + + + + + + + + + + + 3000 + + + + + + + + + + + + + 4000 + + + + + + + + + + + + + 5000 + + + + Process peak RSS (MiB) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 4123 + + + 1573 + + + 587 + + + CPU execution · host memory + + + + + + + + + + + + + + + v2 PyTorch + + + + + + + + + + v3 PyTorch + + + + + + + + + + v3 ONNX + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 1000 + + + + + + + + + + + + + 2000 + + + + + + + + + + + + + 3000 + + + + + + + + + + + + + 4000 + + + + + + + + + + + + + 5000 + + + + Process peak RSS (MiB) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 4123 + + + 1897 + + + 1469 + + + GPU execution · host memory + + + + + + + + + + + + + + + v2 + input cast + + + + + + + + + + v3 PyTorch + + + + + + + + + + v3 ONNX + + + + + + + + + + + + + + + + + + 1 + 0 + − + 1 + + + + + + + + + + + + + + + + + + 1 + 0 + 0 + + + + + + + + + + + + + + + + + + 1 + 0 + 1 + + + + + + + + + + + + + + + + + + 1 + 0 + 2 + + + + + + + + + + + + + + + + + + 1 + 0 + 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Seconds · logarithmic scale + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 209.40 + + + 40.47 + + + 0.38 + + + Local load + first completed prediction + + + + + + + + + + + + + + + v2 PyTorch + + + + + + + + + + v3 PyTorch + + + + + + + + + + v3 ONNX + + + + + + + + + + + + + + + + + + 1 + 0 + 0 + + + + + + + + + + + + + + + + + + 1 + 0 + 1 + + + + + + + + + + + + + + + + + + 1 + 0 + 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Seconds · logarithmic scale + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 209.60 + + + 41.79 + + + 1.65 + + + Local load + first completed prediction + + + + Memory and startup costs + + + RSS includes loading and the batch sweep; host memory is not GPU VRAM. Whiskers: three-trial range. + Startup uses cached local files, excludes process/bootstrap setup and downloads; includes classifier initialization. + + + + + + + + + + + + + + + + + diff --git a/docs/assets/mambo-release-species-all.svg b/docs/assets/mambo-release-species-all.svg new file mode 100644 index 0000000..0b5be49 --- /dev/null +++ b/docs/assets/mambo-release-species-all.svg @@ -0,0 +1,1370 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.10.9, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.685 + + + 0.660 + + + 0.572 + + + 0.712 + + + 0.691 + + + 0.580 + + + Macro accuracy + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.274 + + + 0.220 + + + 0.110 + + + 0.264 + + + 0.213 + + + 0.119 + + + Macro precision + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.685 + + + 0.660 + + + 0.572 + + + 0.712 + + + 0.691 + + + 0.580 + + + Macro recall + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.258 + + + 0.200 + + + 0.090 + + + 0.255 + + + 0.199 + + + 0.097 + + + Macro-F1 + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.687 + + + 0.670 + + + 0.594 + + + 0.708 + + + 0.689 + + + 0.584 + + + Micro accuracy + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.926 + + + 0.930 + + + 0.942 + + + 0.928 + + + 0.933 + + + 0.938 + + + Theil U + + + + Species baseline · all Flemming truth + + + Pinned mini_metrics · threshold 0 · no optimization · 58,640 images + Macro accuracy/recall: truth classes. Precision: predicted classes. F1: their union. Coverage is 1.0; full rank tables supplied. + + + + + + + MAMBO v2 + + + + + + MAMBO v3 (both backends) + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/mambo-release-species-known.svg b/docs/assets/mambo-release-species-known.svg new file mode 100644 index 0000000..3f2bca1 --- /dev/null +++ b/docs/assets/mambo-release-species-known.svg @@ -0,0 +1,1370 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.10.9, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.707 + + + 0.681 + + + 0.590 + + + 0.735 + + + 0.712 + + + 0.599 + + + Macro accuracy + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.279 + + + 0.225 + + + 0.113 + + + 0.268 + + + 0.217 + + + 0.123 + + + Macro precision + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.707 + + + 0.681 + + + 0.590 + + + 0.735 + + + 0.712 + + + 0.599 + + + Macro recall + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.265 + + + 0.205 + + + 0.092 + + + 0.261 + + + 0.205 + + + 0.101 + + + Macro-F1 + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.796 + + + 0.776 + + + 0.688 + + + 0.820 + + + 0.799 + + + 0.677 + + + Micro accuracy + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.928 + + + 0.932 + + + 0.947 + + + 0.931 + + + 0.936 + + + 0.944 + + + Theil U + + + + Species baseline · truth within active vocabulary + + + Pinned mini_metrics · threshold 0 · no optimization · 50,598 images + Macro accuracy/recall: truth classes. Precision: predicted classes. F1: their union. Coverage is 1.0; full rank tables supplied. + + + + + + + MAMBO v2 + + + + + + MAMBO v3 (both backends) + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/mambo-release-speed.svg b/docs/assets/mambo-release-speed.svg new file mode 100644 index 0000000..dcb5358 --- /dev/null +++ b/docs/assets/mambo-release-speed.svg @@ -0,0 +1,1413 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.10.9, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 2 + + + + + + + + + + + + + 4 + + + + + + + + + + + + + 6 + + + + + + + + + + + + + 8 + + + + + + + + + + + + + 10 + + + + + + + + + + + + + 12 + + + + End-to-end images / second + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1.3 + + + 1.3 + + + 1.3 + + + 6.7 + + + 7.1 + + + 6.2 + + + 9.6 + + + 9.2 + + + 8.9 + + + CPU · one image · v2 with input adapter + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + End-to-end images / second + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 45.2 + + + 46.5 + + + 41.7 + + + 27.1 + + + 28.2 + + + 22.1 + + + 30.4 + + + 31.3 + + + 25.9 + + + GPU · one image · higher is better + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + End-to-end images / second + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 44.8 + + + 43.3 + + + 43.9 + + + 46.6 + + + 45.6 + + + 41.7 + + + 42.8 + + + 42.1 + + + 39.6 + + + GPU · batch 8 · higher is better + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + End-to-end images / second + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 83.5 + + + 82.7 + + + 83.2 + + + 44.5 + + + 43.9 + + + 42.2 + + + 42.4 + + + 42.6 + + + 39.8 + + + GPU · batch 32 · higher is better + + + + Laptop inference throughput · higher is better + + + i7-12800H / RTX 3080 Ti Laptop · four CPU threads · three trials · decode, preprocessing and CPU results included + Whiskers: trial-median range. V2 CPU requires a float32 input cast; GPU uses published autocast. V3 uses FP32. + + + + + + + MAMBO v2 · PyTorch + + + + + + MAMBO v3 · PyTorch + + + + + + MAMBO v3 · ONNX + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/mambo-tail-metrics.csv b/docs/assets/mambo-tail-metrics.csv new file mode 100644 index 0000000..8b160f7 --- /dev/null +++ b/docs/assets/mambo-tail-metrics.csv @@ -0,0 +1,211 @@ +model,scope,rank,cutoff,domain,class_count,truth_images_in_retained_classes,accepted_predictions_in_retained_classes,report_images,overall_coverage,accuracy,precision,recall,f1 +v2,zero,species,-1,per_model,1205,52788,52788,52788,1.0,0.6856229575537315,0.27957925854223936,0.6856229575537315,0.26198818414445213 +torch,zero,species,-1,per_model,1289,52788,52788,52788,1.0,0.7135646156794592,0.2688723997356786,0.7135646156794592,0.2592869317361528 +onnx,zero,species,-1,per_model,1289,52788,52788,52788,1.0,0.7133861511997317,0.26894112842009715,0.7133861511997317,0.2593624046134099 +torch-tta,zero,species,-1,per_model,1177,52788,52788,52788,1.0,0.7405864004487995,0.3117281910150928,0.7405864004487995,0.3001398043754674 +onnx-tta,zero,species,-1,per_model,1173,52788,52788,52788,1.0,0.7408884646998294,0.3129592874854788,0.7408884646998294,0.30114949302373306 +v2,zero,species,5,per_model,320,44895,39395,52788,1.0,0.7835860088760841,0.827189259853512,0.7835860088760841,0.7771880031099812 +v2,zero,species,5,common,313,44730,39306,52788,1.0,0.7884742372532278,0.8305015444074889,0.7884742372532278,0.7815287772418471 +torch,zero,species,5,per_model,321,44848,40080,52788,1.0,0.8016540743299243,0.8261696121305688,0.8016540743299243,0.7937632511493783 +torch,zero,species,5,common,313,44730,40012,52788,1.0,0.8112118860261139,0.8306457257526494,0.8112118860261139,0.801323823079522 +onnx,zero,species,5,per_model,321,44848,40095,52788,1.0,0.8021426772632025,0.8262878591168301,0.8021426772632025,0.7940157823083626 +onnx,zero,species,5,common,313,44730,40027,52788,1.0,0.8117129772132781,0.8307669950260996,0.8117129772132781,0.8015828087090235 +torch-tta,zero,species,5,per_model,323,44853,41093,52788,1.0,0.8286743235345041,0.8455415603248386,0.8286743235345041,0.8201007330677098 +torch-tta,zero,species,5,common,313,44730,41004,52788,1.0,0.8390964584441899,0.8519293635860037,0.8390964584441899,0.8287585120001666 +onnx-tta,zero,species,5,per_model,323,44853,41099,52788,1.0,0.8289044913540222,0.8454663089232549,0.8289044913540222,0.8200672672516621 +onnx-tta,zero,species,5,common,313,44730,41010,52788,1.0,0.8393339798681654,0.8518517079862864,0.8393339798681654,0.8287239769887179 +v2,zero,species,10,per_model,277,43835,38825,52788,1.0,0.7994793772053351,0.8464715182316649,0.7994793772053351,0.8020074761104702 +v2,zero,species,10,common,271,43652,38723,52788,1.0,0.8043288259343255,0.8497597107470192,0.8043288259343255,0.8062320354321302 +torch,zero,species,10,per_model,285,44492,39612,52788,1.0,0.8171258284359165,0.8511929361965739,0.8171258284359165,0.8180429337935671 +torch,zero,species,10,common,271,43652,39130,52788,1.0,0.8236153818021188,0.8538220455561395,0.8236153818021188,0.8231516237390822 +onnx,zero,species,10,per_model,285,44492,39626,52788,1.0,0.817676149634451,0.8513280853428178,0.817676149634451,0.8183308171409442 +onnx,zero,species,10,common,271,43652,39144,52788,1.0,0.8241941328780684,0.8539641765770972,0.8241941328780684,0.823454379288907 +torch-tta,zero,species,10,per_model,284,44470,40603,52788,1.0,0.8470429977027221,0.8707776696179904,0.8470429977027221,0.8452968243564886 +torch-tta,zero,species,10,common,271,43652,40056,52788,1.0,0.8513634723466735,0.8721124495623291,0.8513634723466735,0.8483517909129423 +onnx-tta,zero,species,10,per_model,284,44470,40609,52788,1.0,0.8473047730749205,0.870692084397175,0.8473047730749205,0.8452587628826032 +onnx-tta,zero,species,10,common,271,43652,40062,52788,1.0,0.8516378052090512,0.8720227587774156,0.8516378052090512,0.8483119036118965 +v2,zero,species,20,per_model,216,42698,37641,52788,1.0,0.8082495823011705,0.8625621889375423,0.8082495823011705,0.8168473325998348 +v2,zero,species,20,common,208,42384,37437,52788,1.0,0.8136982479192534,0.8648542018939747,0.8136982479192534,0.8209483082438459 +torch,zero,species,20,per_model,222,43361,38417,52788,1.0,0.8271275510654174,0.8780867959533072,0.8271275510654174,0.8390189376702701 +torch,zero,species,20,common,208,42384,37796,52788,1.0,0.8339089780399618,0.8827194680660194,0.8339089780399618,0.8454184870285215 +onnx,zero,species,20,per_model,222,43361,38429,52788,1.0,0.8276292942912182,0.8782629747089125,0.8276292942912182,0.8392847349307762 +onnx,zero,species,20,common,208,42384,37811,52788,1.0,0.8344444924444223,0.8825394050561284,0.8344444924444223,0.8455033297180404 +torch-tta,zero,species,20,per_model,223,43375,39483,52788,1.0,0.8552687902032574,0.8920154706737625,0.8552687902032574,0.8618363751815307 +torch-tta,zero,species,20,common,208,42384,38766,52788,1.0,0.859934317761158,0.8943362486856059,0.859934317761158,0.8655942697573586 +onnx-tta,zero,species,20,per_model,223,43375,39484,52788,1.0,0.8552572257583305,0.8920297055771915,0.8552572257583305,0.8618121872907232 +onnx-tta,zero,species,20,common,208,42384,38767,52788,1.0,0.8599219193418374,0.8943515101445709,0.8599219193418374,0.8655683375475027 +v2,zero,genus,-1,per_model,691,52788,52788,52788,1.0,0.7893807671430488,0.3234152967366763,0.7893807671430488,0.3212885858575979 +torch,zero,genus,-1,per_model,713,52788,52788,52788,1.0,0.8053026558890463,0.3221313136590873,0.8053026558890463,0.32303518958456984 +onnx,zero,genus,-1,per_model,710,52788,52788,52788,1.0,0.8053599793321786,0.32303901654923867,0.8053599793321786,0.32445203101159475 +torch-tta,zero,genus,-1,per_model,674,52788,52788,52788,1.0,0.8312879946116835,0.3578921081808226,0.8312879946116835,0.3600905137263134 +onnx-tta,zero,genus,-1,per_model,673,52788,52788,52788,1.0,0.831310673030869,0.358198292987242,0.831310673030869,0.3604852264440997 +v2,zero,genus,5,per_model,244,52582,44975,52788,1.0,0.8198886444355898,0.8176206331689666,0.8198886444355898,0.7926029899466808 +v2,zero,genus,5,common,242,52567,44953,52788,1.0,0.8206876060779148,0.8201078560326218,0.8206876060779148,0.7941995832133611 +torch,zero,genus,5,per_model,242,52567,44773,52788,1.0,0.8383310164872881,0.8166147950822782,0.8383310164872881,0.8056571781128058 +torch,zero,genus,5,common,242,52567,44773,52788,1.0,0.8383310164872881,0.8166147950822782,0.8383310164872881,0.8056571781128058 +onnx,zero,genus,5,per_model,242,52567,44776,52788,1.0,0.8384072898289766,0.816294692710962,0.8384072898289766,0.8055261341500324 +onnx,zero,genus,5,common,242,52567,44776,52788,1.0,0.8384072898289766,0.816294692710962,0.8384072898289766,0.8055261341500324 +torch-tta,zero,genus,5,per_model,243,52575,45481,52788,1.0,0.8642862537522121,0.8433344795518118,0.8642862537522121,0.8345738246636738 +torch-tta,zero,genus,5,common,242,52567,45474,52788,1.0,0.8642419820735022,0.8426871013681416,0.8642419820735022,0.8341657275204107 +onnx-tta,zero,genus,5,per_model,243,52575,45485,52788,1.0,0.8643163049908037,0.8430323470999014,0.8643163049908037,0.8343804242225068 +onnx-tta,zero,genus,5,common,242,52567,45478,52788,1.0,0.8642721574907657,0.842383720435025,0.8642721574907657,0.8339715279038671 +v2,zero,genus,10,per_model,221,52377,44619,52788,1.0,0.8242091812881619,0.8349759270593795,0.8242091812881619,0.8073029077289686 +v2,zero,genus,10,common,218,52338,44570,52788,1.0,0.8246759171734157,0.8375222344229503,0.8246759171734157,0.8087106982251911 +torch,zero,genus,10,per_model,224,52409,44500,52788,1.0,0.8420595718087585,0.836005162953821,0.8420595718087585,0.8201488914933475 +torch,zero,genus,10,common,218,52338,44425,52788,1.0,0.8440854196075196,0.8391956132162525,0.8440854196075196,0.8223122767531698 +onnx,zero,genus,10,per_model,224,52409,44504,52788,1.0,0.8421419742582609,0.8355105285467144,0.8421419742582609,0.8198882695930892 +onnx,zero,genus,10,common,218,52338,44429,52788,1.0,0.8441700900143477,0.8386873650181248,0.8441700900143477,0.8220444817730879 +torch-tta,zero,genus,10,per_model,222,52384,45193,52788,1.0,0.8724264504229726,0.8640463448274117,0.8724264504229726,0.8517515085475365 +torch-tta,zero,genus,10,common,218,52338,45144,52788,1.0,0.8724594243641395,0.864908517355292,0.8724594243641395,0.8519555844726405 +onnx-tta,zero,genus,10,per_model,222,52384,45198,52788,1.0,0.8724593443462958,0.8636328288870722,0.8724593443462958,0.8514582101275701 +onnx-tta,zero,genus,10,common,218,52338,45149,52788,1.0,0.8724929218456889,0.8644874139665057,0.8724929218456889,0.8516569044302893 +v2,zero,genus,20,per_model,178,51193,43632,52788,1.0,0.8447796356264702,0.8683866368462857,0.8447796356264702,0.8409068314387455 +v2,zero,genus,20,common,174,51091,43532,52788,1.0,0.8468431185140185,0.8700188865290819,0.8468431185140185,0.8425197107045038 +torch,zero,genus,20,per_model,180,51668,43510,52788,1.0,0.851621812405513,0.8767852358251572,0.851621812405513,0.8500899477281391 +torch,zero,genus,20,common,174,51091,43120,52788,1.0,0.8572846967941111,0.8799922851408967,0.8572846967941111,0.855133524073762 +onnx,zero,genus,20,per_model,180,51668,43511,52788,1.0,0.8514718324234797,0.8766263792837025,0.8514718324234797,0.8499294903140182 +onnx,zero,genus,20,common,174,51091,43120,52788,1.0,0.8569783049191699,0.8797840089758775,0.8569783049191699,0.8548933267800546 +torch-tta,zero,genus,20,per_model,181,51690,44297,52788,1.0,0.8769067543097299,0.8943059399376523,0.8769067543097299,0.8729588019714802 +torch-tta,zero,genus,20,common,174,51091,43849,52788,1.0,0.8813164944712208,0.8965073033675033,0.8813164944712208,0.876545010864494 +onnx-tta,zero,genus,20,per_model,181,51690,44297,52788,1.0,0.8769470993427563,0.8939963574869481,0.8769470993427563,0.872809760935661 +onnx-tta,zero,genus,20,common,174,51091,43850,52788,1.0,0.8813584625802887,0.8961383784724689,0.8813584625802887,0.8763524180202883 +v2,zero,family,-1,per_model,64,52788,52788,52788,1.0,0.8435038466784595,0.26109238812607927,0.8435038466784595,0.26968398140672784 +torch,zero,family,-1,per_model,60,52788,52788,52788,1.0,0.8104767092433202,0.27533524453595787,0.8104767092433202,0.28049419882782245 +onnx,zero,family,-1,per_model,60,52788,52788,52788,1.0,0.8106325437578626,0.2756918885388057,0.8106325437578626,0.28088792323657213 +torch-tta,zero,family,-1,per_model,60,52788,52788,52788,1.0,0.8579010503993526,0.2856847483669441,0.8579010503993526,0.29704414021357817 +onnx-tta,zero,family,-1,per_model,60,52788,52788,52788,1.0,0.8580571051602935,0.28567061226413676,0.8580571051602935,0.2970778194056521 +v2,zero,family,5,per_model,20,52783,52241,52788,1.0,0.8700294236802284,0.8073706420034537,0.8700294236802284,0.8237730542270192 +v2,zero,family,5,common,20,52783,52241,52788,1.0,0.8700294236802284,0.8073706420034537,0.8700294236802284,0.8237730542270192 +torch,zero,family,5,per_model,20,52783,51891,52788,1.0,0.8570482156298184,0.7593390669412071,0.8570482156298184,0.7831492631501338 +torch,zero,family,5,common,20,52783,51891,52788,1.0,0.8570482156298184,0.7593390669412071,0.8570482156298184,0.7831492631501338 +onnx,zero,family,5,per_model,20,52783,51893,52788,1.0,0.8572274253215421,0.7604089989497507,0.8572274253215421,0.7843304363763831 +onnx,zero,family,5,common,20,52783,51893,52788,1.0,0.8572274253215421,0.7604089989497507,0.8572274253215421,0.7843304363763831 +torch-tta,zero,family,5,per_model,20,52783,52160,52788,1.0,0.8865862079592552,0.7945542451008321,0.8865862079592552,0.8211324206407346 +torch-tta,zero,family,5,common,20,52783,52160,52788,1.0,0.8865862079592552,0.7945542451008321,0.8865862079592552,0.8211324206407346 +onnx-tta,zero,family,5,per_model,20,52783,52160,52788,1.0,0.8867656709343373,0.7945118367924103,0.8867656709343373,0.821233458216956 +onnx-tta,zero,family,5,common,20,52783,52160,52788,1.0,0.8867656709343373,0.7945118367924103,0.8867656709343373,0.821233458216956 +v2,zero,family,10,per_model,20,52783,52241,52788,1.0,0.8700294236802284,0.8073706420034537,0.8700294236802284,0.8237730542270192 +v2,zero,family,10,common,20,52783,52241,52788,1.0,0.8700294236802284,0.8073706420034537,0.8700294236802284,0.8237730542270192 +torch,zero,family,10,per_model,20,52783,51891,52788,1.0,0.8570482156298184,0.7593390669412071,0.8570482156298184,0.7831492631501338 +torch,zero,family,10,common,20,52783,51891,52788,1.0,0.8570482156298184,0.7593390669412071,0.8570482156298184,0.7831492631501338 +onnx,zero,family,10,per_model,20,52783,51893,52788,1.0,0.8572274253215421,0.7604089989497507,0.8572274253215421,0.7843304363763831 +onnx,zero,family,10,common,20,52783,51893,52788,1.0,0.8572274253215421,0.7604089989497507,0.8572274253215421,0.7843304363763831 +torch-tta,zero,family,10,per_model,20,52783,52160,52788,1.0,0.8865862079592552,0.7945542451008321,0.8865862079592552,0.8211324206407346 +torch-tta,zero,family,10,common,20,52783,52160,52788,1.0,0.8865862079592552,0.7945542451008321,0.8865862079592552,0.8211324206407346 +onnx-tta,zero,family,10,per_model,20,52783,52160,52788,1.0,0.8867656709343373,0.7945118367924103,0.8867656709343373,0.821233458216956 +onnx-tta,zero,family,10,common,20,52783,52160,52788,1.0,0.8867656709343373,0.7945118367924103,0.8867656709343373,0.821233458216956 +v2,zero,family,20,per_model,17,52742,52159,52788,1.0,0.8777980291519171,0.8618479765055043,0.8777980291519171,0.8634797826579269 +v2,zero,family,20,common,17,52742,52159,52788,1.0,0.8777980291519171,0.8618479765055043,0.8777980291519171,0.8634797826579269 +torch,zero,family,20,per_model,17,52742,51776,52788,1.0,0.8761006803143303,0.8444656509344529,0.8761006803143303,0.8502787174152917 +torch,zero,family,20,common,17,52742,51776,52788,1.0,0.8761006803143303,0.8444656509344529,0.8761006803143303,0.8502787174152917 +onnx,zero,family,20,per_model,17,52742,51781,52788,1.0,0.8763115152457701,0.8445713671430295,0.8763115152457701,0.8504835558317285 +onnx,zero,family,20,common,17,52742,51781,52788,1.0,0.8763115152457701,0.8445713671430295,0.8763115152457701,0.8504835558317285 +torch-tta,zero,family,20,per_model,17,52742,52060,52788,1.0,0.9024478981808949,0.8736299225701798,0.9024478981808949,0.8812811401338616 +torch-tta,zero,family,20,common,17,52742,52060,52788,1.0,0.9024478981808949,0.8736299225701798,0.9024478981808949,0.8812811401338616 +onnx-tta,zero,family,20,per_model,17,52742,52060,52788,1.0,0.902659031092756,0.8735800304426248,0.902659031092756,0.8814000078705928 +onnx-tta,zero,family,20,common,17,52742,52060,52788,1.0,0.902659031092756,0.8735800304426248,0.902659031092756,0.8814000078705928 +v2,optimized,species,-1,per_model,690,52788,36810,52788,0.6973175721754944,0.8465208024160925,0.6381169943670086,0.5418132969389368,0.4466755276813755 +torch,optimized,species,-1,per_model,654,52788,37381,52788,0.7081344244904145,0.8669405316273155,0.7028135267405736,0.5774611074285403,0.5081384528044552 +onnx,optimized,species,-1,per_model,650,52788,37191,52788,0.7045351216185497,0.8695378035260483,0.7088741319668206,0.5752968296743217,0.5099648536812275 +torch-tta,optimized,species,-1,per_model,681,52788,41343,52788,0.7831893612184587,0.8659206758370823,0.6694908268387493,0.639254202340642,0.5238581475082267 +onnx-tta,optimized,species,-1,per_model,636,52788,39089,52788,0.7404902629385466,0.8755166405852203,0.7362820959348579,0.6075669492667327,0.5430735533140528 +v2,optimized,species,5,per_model,281,42875,31091,52788,0.6973175721754944,0.949227254623375,0.9437368670687469,0.6916423088644161,0.7737956953842571 +v2,optimized,species,5,common,272,42778,31024,52788,0.6973175721754944,0.9521428623131191,0.950834091298276,0.6967497218946193,0.7799317319854288 +torch,optimized,species,5,per_model,288,44180,31486,52788,0.7081344244904145,0.9604545336634476,0.9622152512833568,0.7039086159930352,0.7910306156942066 +torch,optimized,species,5,common,272,42778,30977,52788,0.7081344244904145,0.963494109771882,0.9626322859838096,0.7171390330256306,0.8016422382706132 +onnx,optimized,species,5,per_model,287,44173,31341,52788,0.7045351216185497,0.9610226296998533,0.9619757519565231,0.7010200481362973,0.7888306624960773 +onnx,optimized,species,5,common,272,42778,30845,52788,0.7045351216185497,0.9642506092928128,0.9626937682791291,0.7149144701582824,0.8001046982018765 +torch-tta,optimized,species,5,per_model,295,44279,34630,52788,0.7831893612184587,0.9565023879246428,0.9579592889257424,0.7631267851065484,0.8330906323599061 +torch-tta,optimized,species,5,common,272,42778,33853,52788,0.7831893612184587,0.9585814667783285,0.9585731812083507,0.7743974002343408,0.8413487263251 +onnx-tta,optimized,species,5,per_model,293,44256,32979,52788,0.7404902629385466,0.9624875420542846,0.9631846488302389,0.7304548441650828,0.8110548032550078 +onnx-tta,optimized,species,5,common,272,42778,32341,52788,0.7404902629385466,0.9650388599694326,0.9639006969879439,0.7443741514376615,0.8223569195026881 +v2,optimized,species,10,per_model,243,42227,30743,52788,0.6973175721754944,0.953448505161714,0.9544450850263946,0.7134225852923751,0.79615375924078 +v2,optimized,species,10,common,237,42021,30611,52788,0.6973175721754944,0.9552371110145412,0.9586140054758545,0.7164050701636104,0.8009004286169517 +torch,optimized,species,10,per_model,255,43584,31151,52788,0.7081344244904145,0.963686280781054,0.9676952538780556,0.7171112436175308,0.8061491380093968 +torch,optimized,species,10,common,237,42021,30528,52788,0.7081344244904145,0.9673296490095744,0.9672615516732049,0.7266753942187194,0.8138865890143703 +onnx,optimized,species,10,per_model,255,43584,31014,52788,0.7045351216185497,0.9644807475606031,0.9677553930474765,0.7146917879143063,0.8044523205064164 +onnx,optimized,species,10,common,237,42021,30399,52788,0.7045351216185497,0.9681978678690395,0.9673496769410925,0.7245547988604122,0.8124276972685947 +torch-tta,optimized,species,10,per_model,268,43942,34313,52788,0.7831893612184587,0.9555513324900085,0.9634422815056631,0.7666899243764238,0.8398127135942166 +torch-tta,optimized,species,10,common,237,42021,33322,52788,0.7831893612184587,0.9625685565215116,0.9646515680804644,0.7845362115505334,0.8537896748755333 +onnx-tta,optimized,species,10,per_model,263,43846,32662,52788,0.7404902629385466,0.961629373180915,0.9681806145232891,0.7372508842609241,0.8202847162241308 +onnx-tta,optimized,species,10,common,237,42021,31861,52788,0.7404902629385466,0.9683141861823075,0.9697003821520683,0.7555690214239896,0.8356173638868795 +v2,optimized,species,20,per_model,190,40924,29917,52788,0.6973175721754944,0.9610844376490718,0.9546242144015308,0.720024084306013,0.8034606105897977 +v2,optimized,species,20,common,180,40455,29626,52788,0.6973175721754944,0.9646484348350589,0.960597105510487,0.7264566019960785,0.8110366999373771 +torch,optimized,species,20,per_model,194,41945,30249,52788,0.7081344244904145,0.9726536166037543,0.9673028973830727,0.7249718216154226,0.8139613934096733 +torch,optimized,species,20,common,180,40455,29545,52788,0.7081344244904145,0.9744003816755382,0.968279947854615,0.7355230038915617,0.8220522350709067 +onnx,optimized,species,20,per_model,193,41892,30094,52788,0.7045351216185497,0.9730113961424189,0.9672414097720876,0.7241073248627131,0.8134845543532353 +onnx,optimized,species,20,common,180,40455,29417,52788,0.7045351216185497,0.9749535854270197,0.9683959794573336,0.7328357084727255,0.82024037406168 +torch-tta,optimized,species,20,per_model,205,42565,33383,52788,0.7831893612184587,0.9591300853526652,0.9604484571118049,0.7699762479855812,0.8420134623929408 +torch-tta,optimized,species,20,common,180,40455,32213,52788,0.7831893612184587,0.9705268255352514,0.9657886526261303,0.7926309175203593,0.8597488311609114 +onnx-tta,optimized,species,20,per_model,198,42291,31709,52788,0.7404902629385466,0.9719038952762132,0.9695617529783704,0.7466077391820205,0.8288133411410775 +onnx-tta,optimized,species,20,common,180,40455,30826,52788,0.7404902629385466,0.976210705701146,0.9704033057734655,0.7637449348360044,0.8420413480097133 +v2,optimized,genus,-1,per_model,379,52788,36853,52788,0.6981321512464954,0.9533632911945014,0.7847923719051053,0.6176629588211429,0.5868633065886133 +torch,optimized,genus,-1,per_model,398,52788,39989,52788,0.7575395923315905,0.9547996220084877,0.745381822803767,0.678410498949023,0.6019267109931725 +onnx,optimized,genus,-1,per_model,395,52788,39784,52788,0.7536561339698417,0.9551874761942367,0.7523387061411552,0.6745698413302063,0.6043210367725153 +torch-tta,optimized,genus,-1,per_model,372,52788,41032,52788,0.7772978707281958,0.9627590640417357,0.8166841617561863,0.7031449724257084,0.6655108425187298 +onnx-tta,optimized,genus,-1,per_model,372,52788,41009,52788,0.7768621656437069,0.9629823236784678,0.8168891977985718,0.703150166196618,0.6655370235633971 +v2,optimized,genus,5,per_model,221,51350,34216,52788,0.6981321512464954,0.9716616552337888,0.9644034675161717,0.6868834008659555,0.7807696866753269 +v2,optimized,genus,5,common,215,46868,34160,52788,0.6981321512464954,0.9754975181801082,0.9682273516594799,0.6927141276824689,0.787485243584438 +torch,optimized,genus,5,per_model,226,47997,36422,52788,0.7575395923315905,0.970284104556389,0.9654305304648699,0.7349949980804276,0.8198300630906835 +torch,optimized,genus,5,common,215,46868,35966,52788,0.7575395923315905,0.9730526458225819,0.9696226974149174,0.7475533077376153,0.8310650157210918 +onnx,optimized,genus,5,per_model,226,47997,36257,52788,0.7536561339698417,0.9708040563009604,0.9665082137972659,0.7310313579815346,0.8173152189160263 +onnx,optimized,genus,5,common,215,46868,35808,52788,0.7536561339698417,0.9738759173936625,0.9708203215753252,0.7439396812388471,0.8289781701827873 +torch-tta,optimized,genus,5,per_model,228,48014,37467,52788,0.7772978707281958,0.9739289484518205,0.9704707099468883,0.7536090100054875,0.8347586230965688 +torch-tta,optimized,genus,5,common,215,46868,36949,52788,0.7772978707281958,0.9771086466542604,0.9775547270341163,0.767268013502815,0.8477428518527229 +onnx-tta,optimized,genus,5,per_model,228,48014,37452,52788,0.7768621656437069,0.9742276071763961,0.970789954662006,0.7536163450679126,0.8348013395378682 +onnx-tta,optimized,genus,5,common,215,46868,36936,52788,0.7768621656437069,0.9774284415058453,0.9775831973986752,0.7672866592834245,0.8477266855996483 +v2,optimized,genus,10,per_model,197,50958,34025,52788,0.6981321512464954,0.9707426742420079,0.9676850759993276,0.7030299586868274,0.7949775034079529 +v2,optimized,genus,10,common,192,46467,33937,52788,0.6981321512464954,0.9752941088049124,0.9772224666409165,0.7109088798148795,0.8054635075619047 +torch,optimized,genus,10,per_model,203,47662,36218,52788,0.7575395923315905,0.9725044668174535,0.973428506176096,0.7475181869995279,0.8320199105759426 +torch,optimized,genus,10,common,192,46467,35691,52788,0.7575395923315905,0.9735479156470631,0.9733069820326449,0.7535836525103417,0.8364436102829099 +onnx,optimized,genus,10,per_model,202,47651,36048,52788,0.7536561339698417,0.973280111509321,0.9750664954245438,0.7440944617898129,0.8301947627142042 +onnx,optimized,genus,10,common,192,46467,35536,52788,0.7536561339698417,0.9741721892441434,0.974221935223632,0.7503899701812965,0.834492264816495 +torch-tta,optimized,genus,10,per_model,205,47702,37268,52788,0.7772978707281958,0.9770381133367219,0.9784954355713802,0.7643769766620188,0.8460362463804563 +torch-tta,optimized,genus,10,common,192,46467,36672,52788,0.7772978707281958,0.9775836137284416,0.9789300486595729,0.7732961033321674,0.85232561316201 +onnx-tta,optimized,genus,10,per_model,205,47702,37255,52788,0.7768621656437069,0.9773702801133233,0.9785252947342102,0.7646418740921664,0.8462515189804942 +onnx-tta,optimized,genus,10,common,192,46467,36660,52788,0.7768621656437069,0.9776077796766862,0.9789619295365529,0.7735522735935464,0.8525123269701546 +v2,optimized,genus,20,per_model,156,45483,33405,52788,0.6981321512464954,0.9843358498587619,0.9748388332981804,0.7242019498914946,0.8169005762983504 +v2,optimized,genus,20,common,151,45179,33263,52788,0.6981321512464954,0.9840178517103966,0.9779005369081352,0.7276296542386876,0.8215085827272921 +torch,optimized,genus,20,per_model,165,46690,35635,52788,0.7575395923315905,0.9810178296102066,0.9757921370967003,0.7571265698443955,0.8419323350469788 +torch,optimized,genus,20,common,151,45179,34973,52788,0.7575395923315905,0.9859159179291114,0.9756538685518957,0.7718614744316848,0.8533020792538334 +onnx,optimized,genus,20,per_model,165,46690,35481,52788,0.7536561339698417,0.9817692866417445,0.9765223194080256,0.7541904615905834,0.8401795246684534 +onnx,optimized,genus,20,common,151,45179,34825,52788,0.7536561339698417,0.9866161345901774,0.9761653514032598,0.768748272502419,0.8513772766242683 +torch-tta,optimized,genus,20,per_model,167,46689,36692,52788,0.7772978707281958,0.9857897321742519,0.9793244688724693,0.7752481222536762,0.8561620153740219 +torch-tta,optimized,genus,20,common,151,45179,35938,52788,0.7772978707281958,0.9886115750548432,0.9809062330056771,0.7925083520312406,0.8691592136815407 +onnx-tta,optimized,genus,20,per_model,167,46689,36678,52788,0.7768621656437069,0.9858135534806919,0.9793611223358233,0.7753668121612188,0.8562508653962666 +onnx-tta,optimized,genus,20,common,151,45179,35925,52788,0.7768621656437069,0.9886423026181744,0.9809467702797179,0.792676399490679,0.8692708237591565 +v2,optimized,family,-1,per_model,26,52788,40881,52788,0.7744373721300295,0.9963653352691595,0.841348645086206,0.6466603488658192,0.6545226053114057 +torch,optimized,family,-1,per_model,30,52788,38566,52788,0.7305827081912556,0.9932547854813464,0.7405922673252698,0.6535073068400129,0.5807455159791289 +onnx,optimized,family,-1,per_model,30,52788,38672,52788,0.7325907403197697,0.9932599551447033,0.7406007419898424,0.6548532928566179,0.5815679236552638 +torch-tta,optimized,family,-1,per_model,30,52788,41567,52788,0.7874327498673941,0.9955823574240963,0.7393905133847497,0.700159197162577,0.607256558231014 +onnx-tta,optimized,family,-1,per_model,30,52788,41422,52788,0.7846859134651815,0.9955854528269081,0.7395038777892725,0.6986717712105687,0.6065093177805806 +v2,optimized,family,5,per_model,19,52770,40869,52788,0.7744373721300295,0.9957914408379742,0.9859850593239552,0.6876576692748175,0.8020952610694089 +v2,optimized,family,5,common,19,52770,40869,52788,0.7744373721300295,0.9957914408379742,0.9859850593239552,0.6876576692748175,0.8020952610694089 +torch,optimized,family,5,per_model,19,52770,38530,52788,0.7305827081912556,0.99218975160998,0.9900267939876927,0.7040432580775865,0.816089411195116 +torch,optimized,family,5,common,19,52770,38530,52788,0.7305827081912556,0.99218975160998,0.9900267939876927,0.7040432580775865,0.816089411195116 +onnx,optimized,family,5,per_model,19,52770,38636,52788,0.7325907403197697,0.9921957375359722,0.9900397290020403,0.7056726095713715,0.817387949631118 +onnx,optimized,family,5,common,19,52770,38636,52788,0.7325907403197697,0.9921957375359722,0.9900397290020403,0.7056726095713715,0.817387949631118 +torch-tta,optimized,family,5,per_model,19,52770,41536,52788,0.7874327498673941,0.9948848349121117,0.991701309903039,0.7564680159984232,0.8535629866805483 +torch-tta,optimized,family,5,common,19,52770,41536,52788,0.7874327498673941,0.9948848349121117,0.991701309903039,0.7564680159984232,0.8535629866805483 +onnx-tta,optimized,family,5,per_model,19,52770,41392,52788,0.7846859134651815,0.9948884190627355,0.9918743397836264,0.754667447740729,0.8523831333377587 +onnx-tta,optimized,family,5,common,19,52770,41392,52788,0.7846859134651815,0.9948884190627355,0.9918743397836264,0.754667447740729,0.8523831333377587 +v2,optimized,family,10,per_model,19,52770,40869,52788,0.7744373721300295,0.9957914408379742,0.9859850593239552,0.6876576692748175,0.8020952610694089 +v2,optimized,family,10,common,19,52770,40869,52788,0.7744373721300295,0.9957914408379742,0.9859850593239552,0.6876576692748175,0.8020952610694089 +torch,optimized,family,10,per_model,19,52770,38530,52788,0.7305827081912556,0.99218975160998,0.9900267939876927,0.7040432580775865,0.816089411195116 +torch,optimized,family,10,common,19,52770,38530,52788,0.7305827081912556,0.99218975160998,0.9900267939876927,0.7040432580775865,0.816089411195116 +onnx,optimized,family,10,per_model,19,52770,38636,52788,0.7325907403197697,0.9921957375359722,0.9900397290020403,0.7056726095713715,0.817387949631118 +onnx,optimized,family,10,common,19,52770,38636,52788,0.7325907403197697,0.9921957375359722,0.9900397290020403,0.7056726095713715,0.817387949631118 +torch-tta,optimized,family,10,per_model,19,52770,41536,52788,0.7874327498673941,0.9948848349121117,0.991701309903039,0.7564680159984232,0.8535629866805483 +torch-tta,optimized,family,10,common,19,52770,41536,52788,0.7874327498673941,0.9948848349121117,0.991701309903039,0.7564680159984232,0.8535629866805483 +onnx-tta,optimized,family,10,per_model,19,52770,41392,52788,0.7846859134651815,0.9948884190627355,0.9918743397836264,0.754667447740729,0.8523831333377587 +onnx-tta,optimized,family,10,common,19,52770,41392,52788,0.7846859134651815,0.9948884190627355,0.9918743397836264,0.754667447740729,0.8523831333377587 +v2,optimized,family,20,per_model,15,52686,40812,52788,0.7744373721300295,0.9946691583947672,0.99787772586138,0.6871044763195309,0.8073961361904208 +v2,optimized,family,20,common,15,52686,40812,52788,0.7744373721300295,0.9946691583947672,0.99787772586138,0.6871044763195309,0.8073961361904208 +torch,optimized,family,20,per_model,15,52686,38470,52788,0.7305827081912556,0.9967736853726413,0.9966265316436699,0.6975420951522447,0.8137962822635084 +torch,optimized,family,20,common,15,52686,38470,52788,0.7305827081912556,0.9967736853726413,0.9966265316436699,0.6975420951522447,0.8137962822635084 +onnx,optimized,family,20,per_model,15,52686,38576,52788,0.7325907403197697,0.9967812675455647,0.996642915995177,0.6996059403777053,0.8154410976157778 +onnx,optimized,family,20,common,15,52686,38576,52788,0.7325907403197697,0.9967812675455647,0.996642915995177,0.6996059403777053,0.8154410976157778 +torch-tta,optimized,family,20,per_model,15,52686,41473,52788,0.7874327498673941,0.9970295628184992,0.9979498643387211,0.7536293282011772,0.8548063047552162 +torch-tta,optimized,family,20,common,15,52686,41473,52788,0.7874327498673941,0.9970295628184992,0.9979498643387211,0.7536293282011772,0.8548063047552162 +onnx-tta,optimized,family,20,per_model,15,52686,41329,52788,0.7846859134651815,0.9970341027426228,0.9981690355207985,0.751348608408098,0.8533118238543497 +onnx-tta,optimized,family,20,common,15,52686,41329,52788,0.7846859134651815,0.9970341027426228,0.9981690355207985,0.751348608408098,0.8533118238543497 diff --git a/docs/assets/mambo-tail-metrics.json b/docs/assets/mambo-tail-metrics.json new file mode 100644 index 0000000..e16d674 --- /dev/null +++ b/docs/assets/mambo-tail-metrics.json @@ -0,0 +1,47967 @@ +{ + "revision": "70cc69adc05362863439277048e06386c1f885e1", + "policy": "Strictly > cutoff in both truth and accepted predictions; preserve all per-class FP/FN; macro reaggregation only", + "rows": [ + { + "model": "v2", + "scope": "zero", + "rank": "species", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "10055273", + "10638451", + "10844862", + "10922411", + "10982815", + "11052757", + "11080751", + "11287091", + "11418741", + "11478679", + "11571523", + "11598540", + "11728049", + "11962292", + "12089608", + "12135372", + "12253343", + "1731598", + "1731826", + "1732063", + "1732416", + "1732452", + "1732565", + "1733258", + "1733484", + "1734453", + "1734704", + "1734826", + "1735532", + "1735855", + "1736377", + "1736412", + "1736447", + "1736727", + "1736906", + "1737491", + "1737524", + "1737542", + "1737552", + "1737650", + "1737775", + "1737776", + "1737847", + "1738050", + "1738163", + "1738222", + "1738245", + "1738422", + "1738429", + "1739272", + "1739290", + "1739461", + "1739819", + "1739833", + "1739922", + "1739931", + "1739980", + "1740005", + "1740069", + "1740174", + "1740183", + "1740185", + "1740392", + "1741341", + "1741368", + "1741545", + "1741593", + "1741633", + "1741752", + "1742142", + "1742346", + "1743196", + "1743475", + "1743532", + "1743641", + "1743643", + "1743710", + "1743730", + "1743768", + "1743775", + "1743828", + "1744071", + "1744136", + "1744224", + "1744416", + "1744498", + "1744588", + "1744593", + "1744693", + "1744709", + "1744714", + "1744728", + "1744731", + "1744739", + "1744748", + "1744763", + "1744777", + "1744782", + "1744808", + "1744810", + "1744896", + "1745079", + "1745561", + "1745600", + "1745724", + "1745737", + "1746027", + "1746413", + "1746440", + "1746613", + "1746644", + "1746666", + "1746775", + "1746832", + "1746856", + "1746876", + "1746910", + "1747050", + "1748805", + "1748890", + "1749164", + "1749713", + "1749948", + "1751051", + "1751298", + "1751457", + "1758878", + "1759069", + "1759083", + "1759153", + "1759407", + "1759667", + "1759668", + "1760104", + "1760246", + "1760593", + "1760857", + "1760887", + "1760891", + "1761041", + "1761438", + "1761735", + "1761865", + "1762244", + "1762608", + "1763072", + "1763610", + "1764987", + "1765011", + "1765017", + "1765767", + "1765954", + "1766128", + "1766130", + "1766131", + "1766137", + "1766210", + "1766274", + "1766510", + "1766646", + "1766741", + "1766814", + "1767597", + "1767625", + "1767655", + "1768117", + "1768150", + "1768341", + "1768749", + "1768771", + "1769103", + "1769505", + "1769566", + "1769897", + "1769958", + "1770150", + "1770307", + "1770477", + "1770772", + "1770880", + "1771040", + "1771214", + "1771245", + "1771509", + "1771531", + "1771634", + "1771650", + "1771678", + "1771698", + "1771772", + "1772169", + "1772179", + "1772793", + "1772940", + "1772956", + "1773163", + "1773309", + "1773328", + "1774285", + "1775152", + "1775891", + "1776330", + "1776371", + "1776619", + "1776862", + "1777253", + "1778074", + "1778127", + "1778143", + "1778596", + "1779334", + "1779435", + "1779641", + "1779690", + "1780150", + "1780378", + "1781694", + "1782560", + "1782615", + "1782627", + "1782672", + "1782726", + "1782727", + "1782763", + "1782777", + "1782841", + "1782927", + "1782948", + "1783016", + "1783037", + "1783043", + "1784359", + "1784812", + "1784826", + "1785185", + "1785286", + "1785888", + "1785895", + "1786007", + "1786902", + "1786936", + "1787064", + "1787112", + "1787267", + "1787400", + "1787590", + "1787610", + "1787751", + "1787770", + "1787859", + "1788522", + "1788635", + "1788917", + "1789076", + "1789086", + "1789267", + "1789481", + "1789580", + "1789694", + "1789695", + "1789730", + "1789745", + "1789753", + "1789755", + "1789783", + "1789785", + "1789840", + "1789849", + "1789982", + "1790002", + "1790072", + "1790160", + "1790361", + "1790364", + "1790625", + "1790692", + "1790816", + "1791422", + "1792061", + "1792292", + "1792335", + "1792377", + "1792383", + "1792411", + "1792414", + "1792418", + "1792426", + "1793877", + "1793986", + "1794102", + "1794361", + "1794590", + "1795215", + "1795282", + "1795854", + "1795946", + "1795957", + "1796007", + "1796117", + "1796145", + "1796169", + "1796188", + "1796463", + "1796668", + "1796678", + "1797178", + "1797258", + "1797276", + "1797367", + "1797479", + "1798346", + "1798372", + "1798408", + "1798449", + "1798504", + "1798594", + "1798802", + "1798807", + "1798971", + "1798974", + "1798984", + "1799132", + "1799135", + "1799701", + "1799708", + "1799799", + "1800004", + "1800032", + "1801051", + "1801896", + "1802280", + "1803012", + "1803073", + "1804071", + "1804906", + "1807206", + "1807969", + "1808752", + "1810099", + "1811789", + "1811896", + "1812394", + "1813114", + "1819145", + "1819268", + "1819873", + "1820039", + "1820372", + "1820406", + "1821856", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822787", + "1822796", + "1822819", + "1822830", + "1823726", + "1824113", + "1825064", + "1825077", + "1825083", + "1825156", + "1825176", + "1825539", + "1825971", + "1825983", + "1826022", + "1826033", + "1827125", + "1827645", + "1828162", + "1828637", + "1829322", + "1829363", + "1829533", + "1829776", + "1829785", + "1830122", + "1830125", + "1830131", + "1830144", + "1830191", + "1830380", + "1830410", + "1830457", + "1830632", + "1830838", + "1830843", + "1830937", + "1830962", + "1831002", + "1831009", + "1831128", + "1831136", + "1831168", + "1831643", + "1831752", + "1832819", + "1832853", + "1835156", + "1835393", + "1835407", + "1835433", + "1835457", + "1836899", + "1837172", + "1837420", + "1838838", + "1838911", + "1839851", + "1839893", + "1840297", + "1840301", + "1840345", + "1840346", + "1840360", + "1840478", + "1840483", + "1840596", + "1841158", + "1841159", + "1841261", + "1841675", + "1841813", + "1841821", + "1842196", + "1845270", + "1845962", + "1846112", + "1846141", + "1846219", + "1846604", + "1847097", + "1847407", + "1847956", + "1848202", + "1848356", + "1848426", + "1848657", + "1848864", + "1848920", + "1849284", + "1849630", + "1850008", + "1850238", + "1850246", + "1850279", + "1850506", + "1850522", + "1850538", + "1850781", + "1850971", + "1851555", + "1852150", + "1852177", + "1852311", + "1852430", + "1852956", + "1852978", + "1853064", + "1853587", + "1854202", + "1854237", + "1854347", + "1854792", + "1856289", + "1856384", + "1856595", + "1856686", + "1856701", + "1856730", + "1856768", + "1856867", + "1857577", + "1857626", + "1857828", + "1857829", + "1857878", + "1857924", + "1857978", + "1858074", + "1858113", + "1858531", + "1858698", + "1858762", + "1859046", + "1859100", + "1860408", + "1860671", + "1860688", + "1860983", + "1860987", + "1861395", + "1861644", + "1861862", + "1862578", + "1862580", + "1862719", + "1862837", + "1864161", + "1864358", + "1864377", + "1864652", + "1866568", + "1869489", + "1869803", + "1869852", + "1869976", + "1870202", + "1870249", + "1870250", + "1870450", + "1870988", + "1871252", + "1871407", + "1871698", + "1871826", + "1872315", + "1872368", + "1872901", + "1873048", + "1873079", + "1873411", + "1874375", + "1874743", + "1875008", + "1875120", + "1875327", + "1875827", + "1875865", + "1875869", + "1875918", + "1875952", + "1876329", + "1876409", + "1876542", + "1876623", + "1876854", + "1877941", + "1877988", + "1878470", + "1878490", + "1878862", + "1878879", + "1878895", + "1878907", + "1879252", + "1879452", + "1879630", + "1879735", + "1879765", + "1879970", + "1880040", + "1880064", + "1880138", + "1880139", + "1880140", + "1881151", + "1881834", + "1882158", + "1882210", + "1882905", + "1883161", + "1883386", + "1884212", + "1884255", + "1884273", + "1884280", + "1884312", + "1884332", + "1884370", + "1884403", + "1884465", + "1884970", + "1886084", + "1886579", + "1886587", + "1887108", + "1887173", + "1887177", + "1887290", + "1887701", + "1888579", + "1888733", + "1888743", + "1888759", + "1888826", + "1889287", + "1889833", + "1889942", + "1890187", + "1890534", + "1890576", + "1890656", + "1891059", + "1891326", + "1891386", + "1891426", + "1891473", + "1891493", + "1891494", + "1898286", + "1898544", + "1909398", + "1911112", + "1918868", + "1920496", + "1920712", + "1924494", + "1929270", + "1938214", + "1938810", + "1939432", + "1939677", + "1939680", + "1940807", + "1941377", + "1941437", + "1951557", + "1951649", + "1951713", + "1952014", + "1952062", + "1952130", + "1952229", + "1952449", + "1952532", + "1952806", + "1952812", + "1954563", + "1956440", + "1956524", + "1956599", + "1956710", + "1957266", + "1957300", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1957854", + "1958024", + "1958323", + "1959383", + "1959395", + "1959467", + "1959682", + "1959914", + "1959919", + "1960617", + "1961040", + "1961068", + "1961190", + "1962204", + "1962265", + "1962268", + "1962434", + "1962516", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1963463", + "1964191", + "1964195", + "1964471", + "1964637", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965777", + "1965795", + "1965825", + "1965841", + "1965913", + "1965996", + "1966017", + "1966351", + "1966886", + "1967011", + "1967245", + "1967273", + "1967597", + "1967815", + "1968678", + "1968867", + "1969954", + "1970213", + "1970227", + "1970284", + "1971986", + "1972120", + "1972185", + "1972187", + "1972234", + "1972250", + "1972342", + "1972434", + "1972449", + "1973414", + "1973467", + "1975341", + "1975546", + "1975553", + "1975571", + "1975733", + "1975793", + "1975897", + "1975903", + "1976163", + "1977003", + "1977007", + "1977068", + "1978056", + "1978065", + "1978114", + "1978375", + "1978445", + "1978776", + "1978821", + "1978977", + "1979308", + "1979430", + "1979473", + "1979781", + "1980521", + "1981696", + "1982406", + "1982500", + "1982525", + "1982529", + "1982541", + "1982542", + "1982592", + "1982636", + "1982671", + "1982746", + "1982791", + "1982838", + "1982885", + "1983000", + "1983052", + "1983170", + "1983260", + "1983288", + "1983387", + "1983441", + "1983442", + "1983525", + "1983548", + "1983558", + "1983648", + "1983694", + "1983705", + "1983755", + "1983888", + "1983896", + "1983922", + "1983997", + "1983999", + "1984117", + "1984942", + "1984949", + "1984954", + "1985522", + "1986052", + "1986056", + "1986157", + "1986166", + "1986171", + "1986220", + "1986452", + "1986522", + "1986575", + "1987527", + "1987578", + "1987744", + "1988593", + "1988881", + "1989428", + "1990066", + "1990150", + "1990551", + "1991179", + "1991371", + "1992066", + "1992504", + "1993419", + "4299368", + "4302252", + "4302268", + "4522322", + "4522795", + "4522922", + "4522933", + "4523522", + "4523556", + "4523560", + "4523564", + "4523880", + "4523883", + "4523885", + "4524054", + "4524070", + "4524072", + "4524221", + "4524376", + "4524393", + "4524403", + "4524421", + "4524426", + "4524636", + "4524638", + "4524740", + "4524793", + "4525068", + "4525078", + "4525177", + "4525189", + "4525266", + "4525273", + "4525354", + "4525443", + "4525500", + "4525505", + "4525510", + "4525530", + "4525540", + "4525547", + "4525562", + "4526048", + "4527339", + "4527342", + "4527972", + "4528539", + "4528593", + "4528658", + "4528692", + "4528694", + "4529064", + "4529248", + "4529566", + "4529630", + "4529931", + "4530151", + "4530424", + "4530632", + "4531284", + "4531402", + "4531506", + "4531517", + "4531687", + "4531690", + "4531708", + "4531968", + "4531975", + "4532022", + "4532057", + "4532088", + "4532095", + "4532122", + "4532160", + "4532239", + "4532253", + "4532293", + "4532297", + "4532357", + "4532405", + "4532408", + "4532412", + "4532471", + "4532500", + "4532508", + "4532516", + "4532532", + "4532544", + "4532696", + "4532886", + "4532888", + "4532890", + "4533115", + "4533128", + "4533136", + "4533202", + "4533273", + "4533360", + "4533431", + "4533433", + "4533442", + "4533446", + "4533661", + "4533671", + "4533714", + "4533952", + "4534011", + "4534038", + "4534052", + "4534057", + "4534166", + "4534207", + "4534225", + "4534245", + "4534290", + "4534299", + "4534389", + "4534398", + "4534408", + "4534458", + "4534463", + "4534485", + "4534486", + "4534533", + "4534538", + "4534540", + "4534686", + "4534719", + "4534767", + "4534779", + "4534782", + "4534872", + "4534909", + "4534914", + "4535827", + "5101394", + "5101678", + "5101745", + "5102287", + "5102931", + "5102951", + "5102982", + "5103176", + "5103451", + "5103736", + "5104442", + "5104558", + "5104759", + "5104891", + "5105339", + "5109506", + "5109523", + "5109599", + "5109614", + "5109821", + "5110200", + "5110213", + "5110644", + "5110670", + "5110885", + "5111574", + "5112155", + "5112254", + "5112283", + "5112291", + "5112345", + "5112362", + "5113036", + "5113078", + "5113084", + "5113234", + "5113847", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5116416", + "5116475", + "5116609", + "5116669", + "5116698", + "5116850", + "5116941", + "5117049", + "5117089", + "5117189", + "5117399", + "5117400", + "5118892", + "5118904", + "5118996", + "5119143", + "5119245", + "5119513", + "5119808", + "5120396", + "5120675", + "5122293", + "5122439", + "5123221", + "5123339", + "5123394", + "5123461", + "5123922", + "5124007", + "5124029", + "5124143", + "5124233", + "5124911", + "5125689", + "5126052", + "5126212", + "5126217", + "5126680", + "5130682", + "5131910", + "5134098", + "5135513", + "5141493", + "5141677", + "5142870", + "5142971", + "5143048", + "5143129", + "5143147", + "5143380", + "5143453", + "5143477", + "5143651", + "5143675", + "5143697", + "5143944", + "5144190", + "5144426", + "5144534", + "5144543", + "5144677", + "5144721", + "5145009", + "5145136", + "5145269", + "5145409", + "5145870", + "5145965", + "5146342", + "5146379", + "5146412", + "5146496", + "5146510", + "5146559", + "5146611", + "5146677", + "5146837", + "5146946", + "5146961", + "5147038", + "5147039", + "5147062", + "5147171", + "5147193", + "5147208", + "5147232", + "5147245", + "5147478", + "5147608", + "5147638", + "5147681", + "5147827", + "5148247", + "5148248", + "5148286", + "5148394", + "5148424", + "5148436", + "5148462", + "5148475", + "5148486", + "5148487", + "5149414", + "5149438", + "5149474", + "5149499", + "5149665", + "5149746", + "5149768", + "5149839", + "5714973", + "5768880", + "5769028", + "5769062", + "5769068", + "5769072", + "5769164", + "5769191", + "5769272", + "5770913", + "5770942", + "5771259", + "5771350", + "5771982", + "5772063", + "5772129", + "5772172", + "5772176", + "5772178", + "5772180", + "5772186", + "5772196", + "5772199", + "5772202", + "5772205", + "5772206", + "5772210", + "5772269", + "5772309", + "5772349", + "5772351", + "5879654", + "5880147", + "5880533", + "5880545", + "5880550", + "5880552", + "5880559", + "5880563", + "5883985", + "5884571", + "5884851", + "6097214", + "6097225", + "6097228", + "6097236", + "6121184", + "6544687", + "7429212", + "7438067", + "7443518", + "7446048", + "7448174", + "7588222", + "7596232", + "7624468", + "7656811", + "7681733", + "7730078", + "7734292", + "7752082", + "7753668", + "7762841", + "7780930", + "7825213", + "7869346", + "7874258", + "7875265", + "7877231", + "7895336", + "7937573", + "7940536", + "7960566", + "7964262", + "7972792", + "7981386", + "7988195", + "7993353", + "8000103", + "8007222", + "8015895", + "8049830", + "8073674", + "8086347", + "8094357", + "8105817", + "8160782", + "8186212", + "8208583", + "8223165", + "8237343", + "8237987", + "8262357", + "8292872", + "8313553", + "8361848", + "8361973", + "8369868", + "8388883", + "8394261", + "8397564", + "8407461", + "8421569", + "8424972", + "8532380", + "8537359", + "8581601", + "8742426", + "8756768", + "8823068", + "8858121", + "8869900", + "9092175", + "9101339", + "9174377", + "9242559", + "9262981", + "9414984", + "9473121", + "9530977", + "9674732", + "9734171", + "9812211" + ], + "class_count": 1205, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.6856229575537315, + "precision": 0.27957925854223936, + "recall": 0.6856229575537315, + "f1": 0.26198818414445213 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "species", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "10055273", + "10113008", + "10450501", + "10580256", + "10638451", + "10787705", + "10844862", + "10915497", + "10982815", + "11080751", + "11287091", + "11418741", + "11478679", + "11571523", + "11576787", + "11598540", + "11728049", + "11962292", + "11992983", + "12089608", + "12135372", + "12253343", + "1730978", + "1731598", + "1731826", + "1731860", + "1732063", + "1732416", + "1732452", + "1732565", + "1732662", + "1732685", + "1733258", + "1733484", + "1734453", + "1734704", + "1734826", + "1735532", + "1735855", + "1736377", + "1736425", + "1736484", + "1736560", + "1736727", + "1736898", + "1736906", + "1737491", + "1737524", + "1737526", + "1737533", + "1737542", + "1737552", + "1737650", + "1737775", + "1737776", + "1737847", + "1738050", + "1738163", + "1738222", + "1738245", + "1738317", + "1738700", + "1738794", + "1738839", + "1739272", + "1739290", + "1739461", + "1739605", + "1739819", + "1739833", + "1739922", + "1739980", + "1739999", + "1740005", + "1740069", + "1740116", + "1740174", + "1740185", + "1740374", + "1740482", + "1740623", + "1741056", + "1741147", + "1741341", + "1741368", + "1741545", + "1741551", + "1741615", + "1741633", + "1741634", + "1741667", + "1741752", + "1741756", + "1742142", + "1742185", + "1742263", + "1742346", + "1743196", + "1743475", + "1743532", + "1743641", + "1743710", + "1743730", + "1743768", + "1743775", + "1743828", + "1743862", + "1743867", + "1743898", + "1744071", + "1744136", + "1744180", + "1744224", + "1744498", + "1744542", + "1744588", + "1744709", + "1744728", + "1744731", + "1744739", + "1744742", + "1744748", + "1744782", + "1744808", + "1744810", + "1744896", + "1744901", + "1745079", + "1745131", + "1745558", + "1745579", + "1745600", + "1745634", + "1745737", + "1746027", + "1746174", + "1746440", + "1746613", + "1746666", + "1746775", + "1746832", + "1746856", + "1746876", + "1746910", + "1748203", + "1748321", + "1748456", + "1748805", + "1748890", + "1748942", + "1749070", + "1749164", + "1749608", + "1749948", + "1750097", + "1751207", + "1751216", + "1751298", + "1751299", + "1751457", + "1758878", + "1759055", + "1759069", + "1759079", + "1759083", + "1759153", + "1759407", + "1759620", + "1759673", + "1759686", + "1760104", + "1760246", + "1760593", + "1760857", + "1760887", + "1760891", + "1761041", + "1761438", + "1761735", + "1761865", + "1762244", + "1763072", + "1763610", + "1764531", + "1764987", + "1765011", + "1765017", + "1765044", + "1765767", + "1765954", + "1766128", + "1766130", + "1766131", + "1766137", + "1766210", + "1766274", + "1766418", + "1766510", + "1766646", + "1766741", + "1766814", + "1767597", + "1767625", + "1767655", + "1768117", + "1768150", + "1768341", + "1768702", + "1769057", + "1769103", + "1769505", + "1769519", + "1769566", + "1769897", + "1769958", + "1770150", + "1770307", + "1770477", + "1770772", + "1770880", + "1771040", + "1771204", + "1771214", + "1771245", + "1771385", + "1771391", + "1771509", + "1771531", + "1771650", + "1771678", + "1771698", + "1771772", + "1772169", + "1772179", + "1772793", + "1772940", + "1772956", + "1773163", + "1773309", + "1773328", + "1775152", + "1775891", + "1776330", + "1776619", + "1776862", + "1777253", + "1778074", + "1778127", + "1778143", + "1778517", + "1778596", + "1779435", + "1779690", + "1780150", + "1780378", + "1781008", + "1781694", + "1782560", + "1782615", + "1782627", + "1782672", + "1782726", + "1782763", + "1782777", + "1782841", + "1782927", + "1782948", + "1783016", + "1783037", + "1783043", + "1783855", + "1784359", + "1784812", + "1784826", + "1784853", + "1785185", + "1785286", + "1785888", + "1785895", + "1786007", + "1786902", + "1787064", + "1787112", + "1787267", + "1787400", + "1787504", + "1787590", + "1787610", + "1787770", + "1788425", + "1788522", + "1788635", + "1789086", + "1789267", + "1789481", + "1789553", + "1789580", + "1789694", + "1789695", + "1789730", + "1789745", + "1789753", + "1789783", + "1789785", + "1789849", + "1789982", + "1790002", + "1790072", + "1790160", + "1790361", + "1790364", + "1790692", + "1790816", + "1791422", + "1791784", + "1792061", + "1792335", + "1792377", + "1792379", + "1792383", + "1792411", + "1792414", + "1792418", + "1792426", + "1793877", + "1793986", + "1794102", + "1794590", + "1795215", + "1795854", + "1796007", + "1796117", + "1796145", + "1796169", + "1796217", + "1796463", + "1796668", + "1796678", + "1797178", + "1797258", + "1797276", + "1797367", + "1797479", + "1798346", + "1798372", + "1798449", + "1798504", + "1798594", + "1798802", + "1798807", + "1798971", + "1798974", + "1798984", + "1799132", + "1799135", + "1799701", + "1799708", + "1800004", + "1800032", + "1801051", + "1801896", + "1802280", + "1803012", + "1803073", + "1804071", + "1804906", + "1807206", + "1807969", + "1808752", + "1810099", + "1811789", + "1811896", + "1812394", + "1813114", + "1814630", + "1819145", + "1819268", + "1819873", + "1820039", + "1820372", + "1820406", + "1821856", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822787", + "1822796", + "1822819", + "1822830", + "1823726", + "1824113", + "1825064", + "1825077", + "1825083", + "1825156", + "1825176", + "1825539", + "1825971", + "1825983", + "1826022", + "1826033", + "1827125", + "1827645", + "1828162", + "1828637", + "1829322", + "1829363", + "1829776", + "1829785", + "1830241", + "1830380", + "1830408", + "1830410", + "1830537", + "1830584", + "1830632", + "1830838", + "1830843", + "1830879", + "1830937", + "1830962", + "1831002", + "1831128", + "1831136", + "1831168", + "1831643", + "1831752", + "1831780", + "1832853", + "1833626", + "1835031", + "1835156", + "1835457", + "1836899", + "1837172", + "1837420", + "1837429", + "1838838", + "1838911", + "1838969", + "1839293", + "1839296", + "1839851", + "1839893", + "1840301", + "1840346", + "1840360", + "1840380", + "1840408", + "1840478", + "1840555", + "1840581", + "1841159", + "1841261", + "1841296", + "1841616", + "1841675", + "1841813", + "1845270", + "1845368", + "1845962", + "1845965", + "1846107", + "1846112", + "1846236", + "1846729", + "1847407", + "1847956", + "1848356", + "1848596", + "1848610", + "1848657", + "1848690", + "1848730", + "1848753", + "1848864", + "1848920", + "1849284", + "1849294", + "1849477", + "1849630", + "1849897", + "1850008", + "1850246", + "1850450", + "1850506", + "1850522", + "1850538", + "1850781", + "1850971", + "1851010", + "1851203", + "1851337", + "1851555", + "1852177", + "1852311", + "1852430", + "1852956", + "1852978", + "1853064", + "1853079", + "1853587", + "1853723", + "1854202", + "1854237", + "1854287", + "1854347", + "1854792", + "1856005", + "1856289", + "1856595", + "1856620", + "1856658", + "1856686", + "1856691", + "1856701", + "1856730", + "1856867", + "1857577", + "1857626", + "1857828", + "1857829", + "1857878", + "1857924", + "1857978", + "1858074", + "1858113", + "1858163", + "1858531", + "1858698", + "1858775", + "1859046", + "1859305", + "1860408", + "1860621", + "1860628", + "1860668", + "1860688", + "1860768", + "1860852", + "1860987", + "1861031", + "1861395", + "1861644", + "1862578", + "1862580", + "1862719", + "1862837", + "1864161", + "1864358", + "1864377", + "1864652", + "1866568", + "1867820", + "1869478", + "1869489", + "1869512", + "1869803", + "1869976", + "1870202", + "1870249", + "1870250", + "1870450", + "1870988", + "1871160", + "1871252", + "1871407", + "1871698", + "1871826", + "1872315", + "1872368", + "1872901", + "1873079", + "1873411", + "1874192", + "1874211", + "1874375", + "1875008", + "1875120", + "1875327", + "1875631", + "1875633", + "1875827", + "1875865", + "1875869", + "1875918", + "1875952", + "1876329", + "1876409", + "1876542", + "1876854", + "1877341", + "1877941", + "1877988", + "1878470", + "1878490", + "1878782", + "1878862", + "1878879", + "1878895", + "1878907", + "1878939", + "1879252", + "1879452", + "1879630", + "1879655", + "1879735", + "1879970", + "1880040", + "1880062", + "1880064", + "1880104", + "1880138", + "1880139", + "1880140", + "1880143", + "1881151", + "1881603", + "1881834", + "1882158", + "1882210", + "1882557", + "1882905", + "1883161", + "1883386", + "1884212", + "1884255", + "1884273", + "1884332", + "1884370", + "1884403", + "1884465", + "1884970", + "1886084", + "1886320", + "1886579", + "1886587", + "1887108", + "1887173", + "1887290", + "1887701", + "1888579", + "1888733", + "1888743", + "1888759", + "1888826", + "1889833", + "1889942", + "1890187", + "1890534", + "1890576", + "1890656", + "1890703", + "1890772", + "1891059", + "1891326", + "1891386", + "1891426", + "1891473", + "1891493", + "1891494", + "1911112", + "1918868", + "1920496", + "1920712", + "1926260", + "1939432", + "1939658", + "1939677", + "1940510", + "1940807", + "1941377", + "1951557", + "1951649", + "1951713", + "1952014", + "1952062", + "1952130", + "1952229", + "1952449", + "1952532", + "1952806", + "1952812", + "1954563", + "1956440", + "1956524", + "1956599", + "1957266", + "1957300", + "1957570", + "1957572", + "1957632", + "1957816", + "1957845", + "1957852", + "1958024", + "1958323", + "1959383", + "1959395", + "1959467", + "1959914", + "1959919", + "1960617", + "1961040", + "1961068", + "1961190", + "1962204", + "1962265", + "1962268", + "1962434", + "1962516", + "1962636", + "1962860", + "1962990", + "1963011", + "1963306", + "1963446", + "1963463", + "1964191", + "1964195", + "1964471", + "1964637", + "1964653", + "1964657", + "1965166", + "1965208", + "1965345", + "1965763", + "1965777", + "1965795", + "1965810", + "1965825", + "1965841", + "1965913", + "1965996", + "1966017", + "1966351", + "1966886", + "1967011", + "1967245", + "1967273", + "1967597", + "1967815", + "1968678", + "1968867", + "1969291", + "1969954", + "1970213", + "1970227", + "1970284", + "1971888", + "1972120", + "1972185", + "1972187", + "1972234", + "1972250", + "1972278", + "1972342", + "1972377", + "1972434", + "1972449", + "1973414", + "1973467", + "1975341", + "1975546", + "1975553", + "1975571", + "1975793", + "1975897", + "1975903", + "1976163", + "1977003", + "1977007", + "1977068", + "1978056", + "1978065", + "1978114", + "1978375", + "1978445", + "1978776", + "1978821", + "1978977", + "1979308", + "1979430", + "1979473", + "1979781", + "1980521", + "1981696", + "1982406", + "1982500", + "1982525", + "1982529", + "1982541", + "1982542", + "1982592", + "1982636", + "1982671", + "1982746", + "1982791", + "1982838", + "1982885", + "1983000", + "1983170", + "1983260", + "1983288", + "1983387", + "1983441", + "1983442", + "1983525", + "1983548", + "1983558", + "1983648", + "1983694", + "1983705", + "1983755", + "1983888", + "1983896", + "1983922", + "1983997", + "1983999", + "1984117", + "1984734", + "1984942", + "1984954", + "1985522", + "1986052", + "1986056", + "1986157", + "1986166", + "1986171", + "1986220", + "1986367", + "1986452", + "1986522", + "1986575", + "1987527", + "1987744", + "1988593", + "1988602", + "1988684", + "1988881", + "1989428", + "1990066", + "1990150", + "1990551", + "1991179", + "1991371", + "1992066", + "1992504", + "1993419", + "4299576", + "4302252", + "4302268", + "4522322", + "4522795", + "4522886", + "4522911", + "4522916", + "4522922", + "4523522", + "4523556", + "4523564", + "4523725", + "4523880", + "4523883", + "4523885", + "4524054", + "4524072", + "4524221", + "4524376", + "4524393", + "4524403", + "4524421", + "4524426", + "4524636", + "4524638", + "4524740", + "4524793", + "4524951", + "4525068", + "4525078", + "4525189", + "4525266", + "4525354", + "4525369", + "4525420", + "4525425", + "4525443", + "4525500", + "4525505", + "4525510", + "4525530", + "4525540", + "4525547", + "4525557", + "4525562", + "4525610", + "4526048", + "4526050", + "4527339", + "4527342", + "4527957", + "4527972", + "4528593", + "4528692", + "4528818", + "4529064", + "4529248", + "4529566", + "4529630", + "4530002", + "4530151", + "4530424", + "4531158", + "4531284", + "4531402", + "4531506", + "4531517", + "4531687", + "4531690", + "4531708", + "4531713", + "4531968", + "4531975", + "4532022", + "4532050", + "4532057", + "4532095", + "4532122", + "4532160", + "4532239", + "4532253", + "4532293", + "4532297", + "4532357", + "4532412", + "4532471", + "4532493", + "4532500", + "4532516", + "4532532", + "4532534", + "4532544", + "4532696", + "4532811", + "4532886", + "4532888", + "4532890", + "4533115", + "4533136", + "4533202", + "4533273", + "4533360", + "4533431", + "4533433", + "4533442", + "4533446", + "4533661", + "4533671", + "4533714", + "4533952", + "4534011", + "4534038", + "4534052", + "4534057", + "4534166", + "4534207", + "4534225", + "4534290", + "4534299", + "4534389", + "4534398", + "4534408", + "4534458", + "4534463", + "4534485", + "4534533", + "4534538", + "4534540", + "4534686", + "4534719", + "4534767", + "4534872", + "4534909", + "4534914", + "4535817", + "4535827", + "4536483", + "5101394", + "5101678", + "5101745", + "5102628", + "5102951", + "5102982", + "5103066", + "5103121", + "5103185", + "5103451", + "5103736", + "5103998", + "5104056", + "5104442", + "5104558", + "5104641", + "5104781", + "5104882", + "5104891", + "5104903", + "5105339", + "5109506", + "5109523", + "5109661", + "5109821", + "5110200", + "5110213", + "5110644", + "5110670", + "5110885", + "5111574", + "5112155", + "5112254", + "5112283", + "5112291", + "5112336", + "5112345", + "5112362", + "5113036", + "5113078", + "5113084", + "5113234", + "5113847", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5116416", + "5116475", + "5116609", + "5116669", + "5116698", + "5116850", + "5116941", + "5117049", + "5117089", + "5117189", + "5117399", + "5117400", + "5118892", + "5118904", + "5118996", + "5119143", + "5119245", + "5119513", + "5120396", + "5120465", + "5120668", + "5120675", + "5120767", + "5121040", + "5121177", + "5121517", + "5121737", + "5122439", + "5123042", + "5123221", + "5123339", + "5123394", + "5123461", + "5123922", + "5124007", + "5124029", + "5124143", + "5124233", + "5124911", + "5125689", + "5126052", + "5126212", + "5126217", + "5126675", + "5126680", + "5134667", + "5142870", + "5142971", + "5143048", + "5143129", + "5143147", + "5143380", + "5143453", + "5143477", + "5143651", + "5143675", + "5143697", + "5143944", + "5143947", + "5144190", + "5144426", + "5144534", + "5144543", + "5144677", + "5144721", + "5145009", + "5145136", + "5145186", + "5145269", + "5145409", + "5145965", + "5146342", + "5146379", + "5146412", + "5146496", + "5146510", + "5146559", + "5146611", + "5146659", + "5146677", + "5146837", + "5146883", + "5146946", + "5146961", + "5147038", + "5147039", + "5147062", + "5147150", + "5147171", + "5147193", + "5147208", + "5147232", + "5147245", + "5147478", + "5147608", + "5147681", + "5147827", + "5147834", + "5148247", + "5148248", + "5148286", + "5148394", + "5148424", + "5148436", + "5148462", + "5148475", + "5148486", + "5148487", + "5149414", + "5149438", + "5149474", + "5149665", + "5149746", + "5149820", + "5149836", + "5149839", + "5714973", + "5768880", + "5769028", + "5769062", + "5769068", + "5769072", + "5769164", + "5769191", + "5769272", + "5769709", + "5770913", + "5770922", + "5770942", + "5771230", + "5771236", + "5771259", + "5771350", + "5771357", + "5771982", + "5772063", + "5772129", + "5772176", + "5772178", + "5772186", + "5772196", + "5772202", + "5772205", + "5772206", + "5772210", + "5772269", + "5772349", + "5772351", + "5804895", + "5879654", + "5880147", + "5880512", + "5880533", + "5880545", + "5880550", + "5880552", + "5880559", + "5880563", + "5883985", + "5884571", + "5884851", + "5976947", + "6097214", + "6097225", + "6097228", + "6097234", + "6097236", + "6121184", + "6544687", + "7429212", + "7438067", + "7443518", + "7446048", + "7448174", + "7466487", + "7588222", + "7596232", + "7624468", + "7624494", + "7656811", + "7661023", + "7681733", + "7725644", + "7730078", + "7734292", + "7752082", + "7753668", + "7761138", + "7780930", + "7825213", + "7874258", + "7875265", + "7877231", + "7895336", + "7921916", + "7937573", + "7940536", + "7960566", + "7964262", + "7972792", + "7976145", + "7981386", + "7993353", + "8000103", + "8007222", + "8015612", + "8015895", + "8049830", + "8086347", + "8094357", + "8105817", + "8186212", + "8200050", + "8208583", + "8223165", + "8237343", + "8237987", + "8244266", + "8253467", + "8262357", + "8292872", + "8313553", + "8329661", + "8345820", + "8361848", + "8361973", + "8388883", + "8394261", + "8397564", + "8407461", + "8421569", + "8424972", + "8532380", + "8537359", + "8581601", + "8632989", + "8691947", + "8708745", + "8742426", + "8756768", + "8856895", + "8858121", + "8890502", + "9101339", + "9242559", + "9262981", + "9400895", + "9473121", + "9674732", + "9734171", + "9812211" + ], + "class_count": 1289, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.7135646156794592, + "precision": 0.2688723997356786, + "recall": 0.7135646156794592, + "f1": 0.2592869317361528 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "species", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "10055273", + "10113008", + "10450501", + "10580256", + "10638451", + "10787705", + "10844862", + "10915497", + "10982815", + "11080751", + "11287091", + "11418741", + "11478679", + "11571523", + "11576787", + "11598540", + "11728049", + "11962292", + "11992983", + "12089608", + "12135372", + "12253343", + "1730978", + "1731598", + "1731826", + "1731860", + "1732063", + "1732416", + "1732452", + "1732565", + "1732662", + "1732685", + "1733258", + "1733484", + "1734453", + "1734704", + "1734826", + "1735532", + "1735855", + "1736377", + "1736425", + "1736484", + "1736560", + "1736727", + "1736898", + "1736906", + "1737491", + "1737524", + "1737526", + "1737533", + "1737542", + "1737552", + "1737650", + "1737775", + "1737776", + "1737847", + "1738050", + "1738163", + "1738222", + "1738245", + "1738317", + "1738700", + "1738794", + "1738839", + "1739272", + "1739290", + "1739461", + "1739605", + "1739819", + "1739833", + "1739922", + "1739980", + "1739999", + "1740005", + "1740069", + "1740116", + "1740174", + "1740185", + "1740374", + "1740482", + "1740623", + "1741056", + "1741147", + "1741341", + "1741368", + "1741545", + "1741551", + "1741615", + "1741633", + "1741634", + "1741667", + "1741752", + "1741756", + "1742142", + "1742185", + "1742263", + "1742346", + "1743196", + "1743475", + "1743532", + "1743641", + "1743710", + "1743730", + "1743768", + "1743775", + "1743828", + "1743862", + "1743867", + "1743898", + "1744071", + "1744136", + "1744180", + "1744224", + "1744498", + "1744542", + "1744588", + "1744709", + "1744728", + "1744731", + "1744739", + "1744742", + "1744748", + "1744782", + "1744808", + "1744810", + "1744896", + "1744901", + "1745079", + "1745131", + "1745558", + "1745579", + "1745600", + "1745634", + "1745737", + "1746027", + "1746174", + "1746440", + "1746613", + "1746666", + "1746775", + "1746832", + "1746856", + "1746876", + "1746910", + "1748203", + "1748321", + "1748456", + "1748805", + "1748890", + "1748942", + "1749070", + "1749164", + "1749608", + "1749948", + "1750097", + "1751207", + "1751216", + "1751298", + "1751299", + "1751457", + "1758878", + "1759055", + "1759069", + "1759079", + "1759083", + "1759153", + "1759407", + "1759620", + "1759673", + "1759686", + "1760104", + "1760246", + "1760593", + "1760857", + "1760887", + "1760891", + "1761041", + "1761438", + "1761735", + "1761865", + "1762244", + "1763072", + "1763610", + "1764531", + "1764987", + "1765011", + "1765017", + "1765044", + "1765767", + "1765954", + "1766128", + "1766130", + "1766131", + "1766137", + "1766210", + "1766274", + "1766418", + "1766510", + "1766646", + "1766741", + "1766814", + "1767597", + "1767625", + "1767655", + "1768117", + "1768150", + "1768341", + "1768702", + "1769057", + "1769103", + "1769505", + "1769519", + "1769566", + "1769897", + "1769958", + "1770150", + "1770307", + "1770477", + "1770772", + "1770880", + "1771040", + "1771204", + "1771214", + "1771245", + "1771385", + "1771391", + "1771509", + "1771531", + "1771650", + "1771678", + "1771698", + "1771772", + "1772169", + "1772179", + "1772793", + "1772940", + "1772956", + "1773163", + "1773309", + "1773328", + "1775152", + "1775891", + "1776330", + "1776619", + "1776862", + "1777253", + "1778074", + "1778127", + "1778143", + "1778517", + "1778596", + "1779435", + "1779690", + "1780150", + "1780378", + "1781008", + "1781694", + "1782560", + "1782615", + "1782627", + "1782672", + "1782726", + "1782763", + "1782777", + "1782841", + "1782927", + "1782948", + "1783016", + "1783037", + "1783043", + "1783855", + "1784359", + "1784812", + "1784826", + "1784853", + "1785185", + "1785286", + "1785888", + "1785895", + "1786007", + "1786902", + "1787064", + "1787112", + "1787267", + "1787400", + "1787504", + "1787590", + "1787610", + "1787770", + "1788425", + "1788522", + "1788635", + "1789086", + "1789267", + "1789481", + "1789553", + "1789580", + "1789694", + "1789695", + "1789730", + "1789745", + "1789753", + "1789783", + "1789785", + "1789849", + "1789982", + "1790002", + "1790072", + "1790160", + "1790361", + "1790364", + "1790692", + "1790816", + "1791422", + "1791784", + "1792061", + "1792335", + "1792377", + "1792379", + "1792383", + "1792411", + "1792414", + "1792418", + "1792426", + "1793877", + "1793986", + "1794102", + "1794590", + "1795215", + "1795854", + "1796007", + "1796117", + "1796145", + "1796169", + "1796217", + "1796463", + "1796668", + "1796678", + "1797178", + "1797258", + "1797276", + "1797367", + "1797479", + "1798346", + "1798372", + "1798449", + "1798504", + "1798594", + "1798802", + "1798807", + "1798971", + "1798974", + "1798984", + "1799132", + "1799135", + "1799701", + "1799708", + "1800004", + "1800032", + "1801051", + "1801896", + "1802280", + "1803012", + "1803073", + "1804071", + "1804906", + "1807206", + "1807969", + "1808752", + "1810099", + "1811789", + "1811896", + "1812394", + "1813114", + "1814630", + "1819145", + "1819268", + "1819873", + "1820039", + "1820372", + "1820406", + "1821856", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822787", + "1822796", + "1822819", + "1822830", + "1823726", + "1824113", + "1825064", + "1825077", + "1825083", + "1825156", + "1825176", + "1825539", + "1825971", + "1825983", + "1826022", + "1826033", + "1827125", + "1827645", + "1828162", + "1828637", + "1829322", + "1829363", + "1829776", + "1829785", + "1830241", + "1830380", + "1830408", + "1830410", + "1830537", + "1830584", + "1830632", + "1830838", + "1830843", + "1830879", + "1830937", + "1830962", + "1831002", + "1831128", + "1831136", + "1831168", + "1831643", + "1831752", + "1831780", + "1832853", + "1833626", + "1835031", + "1835156", + "1835457", + "1836899", + "1837172", + "1837420", + "1837429", + "1838838", + "1838911", + "1838969", + "1839293", + "1839296", + "1839851", + "1839893", + "1840301", + "1840346", + "1840360", + "1840380", + "1840408", + "1840478", + "1840555", + "1840581", + "1841159", + "1841261", + "1841296", + "1841616", + "1841675", + "1841813", + "1845270", + "1845368", + "1845962", + "1845965", + "1846107", + "1846112", + "1846236", + "1846729", + "1847407", + "1847956", + "1848356", + "1848596", + "1848610", + "1848636", + "1848657", + "1848730", + "1848753", + "1848864", + "1848920", + "1849284", + "1849294", + "1849477", + "1849630", + "1849897", + "1850008", + "1850246", + "1850450", + "1850506", + "1850522", + "1850538", + "1850781", + "1850971", + "1851010", + "1851203", + "1851337", + "1851555", + "1852177", + "1852311", + "1852430", + "1852956", + "1852978", + "1853064", + "1853079", + "1853587", + "1853723", + "1854202", + "1854237", + "1854287", + "1854347", + "1854792", + "1856005", + "1856289", + "1856595", + "1856620", + "1856658", + "1856686", + "1856691", + "1856701", + "1856730", + "1856867", + "1857577", + "1857626", + "1857828", + "1857829", + "1857878", + "1857924", + "1857978", + "1858074", + "1858113", + "1858163", + "1858531", + "1858698", + "1858775", + "1859046", + "1859305", + "1860408", + "1860621", + "1860628", + "1860668", + "1860688", + "1860768", + "1860852", + "1860987", + "1861031", + "1861395", + "1861644", + "1862578", + "1862580", + "1862719", + "1862837", + "1864161", + "1864358", + "1864377", + "1864652", + "1866568", + "1867820", + "1869478", + "1869489", + "1869512", + "1869803", + "1869976", + "1870202", + "1870249", + "1870250", + "1870450", + "1870988", + "1871160", + "1871252", + "1871407", + "1871698", + "1871826", + "1872315", + "1872368", + "1872901", + "1873079", + "1873411", + "1874192", + "1874211", + "1874375", + "1875008", + "1875120", + "1875327", + "1875631", + "1875633", + "1875827", + "1875865", + "1875869", + "1875918", + "1875952", + "1876329", + "1876409", + "1876542", + "1876854", + "1877341", + "1877941", + "1877988", + "1878470", + "1878490", + "1878782", + "1878862", + "1878879", + "1878895", + "1878907", + "1878939", + "1879252", + "1879452", + "1879630", + "1879655", + "1879735", + "1879970", + "1880040", + "1880062", + "1880064", + "1880104", + "1880138", + "1880139", + "1880140", + "1880143", + "1881151", + "1881603", + "1881834", + "1882158", + "1882210", + "1882557", + "1882905", + "1883161", + "1883386", + "1884212", + "1884255", + "1884273", + "1884332", + "1884370", + "1884403", + "1884465", + "1884970", + "1886084", + "1886320", + "1886579", + "1886587", + "1887108", + "1887173", + "1887290", + "1887701", + "1888579", + "1888733", + "1888743", + "1888759", + "1888826", + "1889833", + "1889942", + "1890187", + "1890534", + "1890576", + "1890656", + "1890703", + "1890772", + "1891059", + "1891326", + "1891386", + "1891426", + "1891473", + "1891493", + "1891494", + "1911112", + "1918868", + "1920496", + "1920712", + "1926260", + "1939432", + "1939658", + "1939677", + "1940510", + "1940807", + "1941377", + "1951557", + "1951649", + "1951713", + "1952014", + "1952062", + "1952130", + "1952229", + "1952449", + "1952532", + "1952806", + "1952812", + "1954563", + "1956440", + "1956524", + "1956599", + "1957266", + "1957300", + "1957570", + "1957572", + "1957632", + "1957816", + "1957845", + "1957852", + "1958024", + "1958323", + "1959383", + "1959395", + "1959467", + "1959914", + "1959919", + "1960617", + "1961040", + "1961068", + "1961190", + "1962204", + "1962265", + "1962268", + "1962434", + "1962516", + "1962636", + "1962860", + "1962990", + "1963011", + "1963306", + "1963446", + "1963463", + "1964191", + "1964195", + "1964471", + "1964637", + "1964653", + "1964657", + "1965166", + "1965208", + "1965345", + "1965763", + "1965777", + "1965795", + "1965810", + "1965825", + "1965841", + "1965913", + "1965996", + "1966017", + "1966351", + "1966886", + "1967011", + "1967245", + "1967273", + "1967597", + "1967815", + "1968678", + "1968867", + "1969291", + "1969954", + "1970213", + "1970227", + "1970284", + "1971888", + "1972120", + "1972185", + "1972187", + "1972234", + "1972250", + "1972278", + "1972342", + "1972377", + "1972434", + "1972449", + "1973414", + "1973467", + "1975341", + "1975546", + "1975553", + "1975571", + "1975793", + "1975897", + "1975903", + "1976163", + "1977003", + "1977007", + "1977068", + "1978056", + "1978065", + "1978114", + "1978375", + "1978445", + "1978776", + "1978821", + "1978977", + "1979308", + "1979430", + "1979473", + "1979781", + "1980521", + "1981696", + "1982406", + "1982500", + "1982525", + "1982529", + "1982541", + "1982542", + "1982592", + "1982636", + "1982671", + "1982746", + "1982791", + "1982838", + "1982885", + "1983000", + "1983170", + "1983260", + "1983288", + "1983387", + "1983441", + "1983442", + "1983525", + "1983548", + "1983558", + "1983648", + "1983694", + "1983705", + "1983755", + "1983888", + "1983896", + "1983922", + "1983997", + "1983999", + "1984117", + "1984734", + "1984942", + "1984954", + "1985522", + "1986052", + "1986056", + "1986157", + "1986166", + "1986171", + "1986220", + "1986367", + "1986452", + "1986522", + "1986575", + "1987527", + "1987744", + "1988593", + "1988602", + "1988684", + "1988881", + "1989428", + "1990066", + "1990150", + "1990551", + "1991179", + "1991371", + "1992066", + "1992504", + "1993419", + "4299576", + "4302252", + "4302268", + "4522322", + "4522795", + "4522886", + "4522911", + "4522916", + "4522922", + "4523522", + "4523556", + "4523564", + "4523725", + "4523880", + "4523883", + "4523885", + "4524054", + "4524072", + "4524221", + "4524376", + "4524393", + "4524403", + "4524421", + "4524426", + "4524636", + "4524638", + "4524740", + "4524793", + "4524951", + "4525068", + "4525078", + "4525189", + "4525266", + "4525354", + "4525369", + "4525420", + "4525425", + "4525443", + "4525500", + "4525505", + "4525510", + "4525530", + "4525540", + "4525547", + "4525557", + "4525562", + "4525610", + "4526048", + "4526050", + "4527339", + "4527342", + "4527957", + "4527972", + "4528593", + "4528692", + "4528818", + "4529064", + "4529248", + "4529566", + "4529630", + "4530002", + "4530151", + "4530424", + "4531158", + "4531284", + "4531402", + "4531506", + "4531517", + "4531687", + "4531690", + "4531708", + "4531713", + "4531968", + "4531975", + "4532022", + "4532050", + "4532057", + "4532095", + "4532122", + "4532160", + "4532239", + "4532253", + "4532293", + "4532297", + "4532357", + "4532412", + "4532471", + "4532493", + "4532500", + "4532516", + "4532532", + "4532534", + "4532544", + "4532696", + "4532811", + "4532886", + "4532888", + "4532890", + "4533115", + "4533136", + "4533202", + "4533273", + "4533360", + "4533431", + "4533433", + "4533442", + "4533446", + "4533661", + "4533671", + "4533714", + "4533952", + "4534011", + "4534038", + "4534052", + "4534057", + "4534166", + "4534207", + "4534225", + "4534290", + "4534299", + "4534389", + "4534398", + "4534408", + "4534458", + "4534463", + "4534485", + "4534533", + "4534538", + "4534540", + "4534686", + "4534719", + "4534767", + "4534872", + "4534909", + "4534914", + "4535817", + "4535827", + "4536483", + "5101394", + "5101678", + "5101745", + "5102628", + "5102951", + "5102982", + "5103066", + "5103121", + "5103185", + "5103451", + "5103736", + "5103998", + "5104056", + "5104442", + "5104558", + "5104641", + "5104781", + "5104882", + "5104891", + "5104903", + "5105339", + "5109506", + "5109523", + "5109661", + "5109821", + "5110200", + "5110213", + "5110644", + "5110670", + "5110885", + "5111574", + "5112155", + "5112254", + "5112283", + "5112291", + "5112336", + "5112345", + "5112362", + "5113036", + "5113078", + "5113084", + "5113234", + "5113847", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5116416", + "5116475", + "5116609", + "5116669", + "5116698", + "5116850", + "5116941", + "5117049", + "5117089", + "5117189", + "5117399", + "5117400", + "5118892", + "5118904", + "5118996", + "5119143", + "5119245", + "5119513", + "5120396", + "5120465", + "5120668", + "5120675", + "5120767", + "5121040", + "5121177", + "5121517", + "5121737", + "5122439", + "5123042", + "5123221", + "5123339", + "5123394", + "5123461", + "5123922", + "5124007", + "5124029", + "5124143", + "5124233", + "5124911", + "5125689", + "5126052", + "5126212", + "5126217", + "5126675", + "5126680", + "5134667", + "5142870", + "5142971", + "5143048", + "5143129", + "5143147", + "5143380", + "5143453", + "5143477", + "5143651", + "5143675", + "5143697", + "5143944", + "5143947", + "5144190", + "5144426", + "5144534", + "5144543", + "5144677", + "5144721", + "5145009", + "5145136", + "5145186", + "5145269", + "5145409", + "5145965", + "5146342", + "5146379", + "5146412", + "5146496", + "5146510", + "5146559", + "5146611", + "5146659", + "5146677", + "5146837", + "5146883", + "5146946", + "5146961", + "5147038", + "5147039", + "5147062", + "5147150", + "5147171", + "5147193", + "5147208", + "5147232", + "5147245", + "5147478", + "5147608", + "5147681", + "5147827", + "5147834", + "5148247", + "5148248", + "5148286", + "5148394", + "5148424", + "5148436", + "5148462", + "5148475", + "5148486", + "5148487", + "5149414", + "5149438", + "5149474", + "5149665", + "5149746", + "5149820", + "5149836", + "5149839", + "5714973", + "5768880", + "5769028", + "5769062", + "5769068", + "5769072", + "5769164", + "5769191", + "5769272", + "5769709", + "5770913", + "5770922", + "5770942", + "5771230", + "5771236", + "5771259", + "5771350", + "5771357", + "5771982", + "5772063", + "5772129", + "5772176", + "5772178", + "5772186", + "5772196", + "5772202", + "5772205", + "5772206", + "5772210", + "5772269", + "5772349", + "5772351", + "5804895", + "5879654", + "5880147", + "5880512", + "5880533", + "5880545", + "5880550", + "5880552", + "5880559", + "5880563", + "5883985", + "5884571", + "5884851", + "5976947", + "6097214", + "6097225", + "6097228", + "6097234", + "6097236", + "6121184", + "6544687", + "7429212", + "7438067", + "7443518", + "7446048", + "7448174", + "7466487", + "7588222", + "7596232", + "7624468", + "7624494", + "7656811", + "7661023", + "7681733", + "7725644", + "7730078", + "7734292", + "7752082", + "7753668", + "7761138", + "7780930", + "7825213", + "7874258", + "7875265", + "7877231", + "7895336", + "7921916", + "7937573", + "7940536", + "7960566", + "7964262", + "7972792", + "7976145", + "7981386", + "7993353", + "8000103", + "8007222", + "8015612", + "8015895", + "8049830", + "8086347", + "8094357", + "8105817", + "8186212", + "8200050", + "8208583", + "8223165", + "8237343", + "8237987", + "8244266", + "8253467", + "8262357", + "8292872", + "8313553", + "8329661", + "8345820", + "8361848", + "8361973", + "8388883", + "8394261", + "8397564", + "8407461", + "8421569", + "8424972", + "8532380", + "8537359", + "8581601", + "8632989", + "8691947", + "8708745", + "8742426", + "8756768", + "8856895", + "8858121", + "8890502", + "9101339", + "9242559", + "9262981", + "9400895", + "9473121", + "9674732", + "9734171", + "9812211" + ], + "class_count": 1289, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.7133861511997317, + "precision": 0.26894112842009715, + "recall": 0.7133861511997317, + "f1": 0.2593624046134099 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "species", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "10055273", + "10113008", + "10580256", + "10638451", + "10844862", + "10915497", + "10982815", + "11287091", + "11418741", + "11478679", + "11571523", + "11598540", + "11728049", + "11962292", + "12089608", + "12135372", + "12253343", + "12318291", + "1730978", + "1731598", + "1731826", + "1731860", + "1732063", + "1732416", + "1732452", + "1732565", + "1732662", + "1732685", + "1733258", + "1733484", + "1734453", + "1734704", + "1734826", + "1735532", + "1735855", + "1736377", + "1736425", + "1736484", + "1736560", + "1736601", + "1736898", + "1737491", + "1737524", + "1737533", + "1737542", + "1737552", + "1737650", + "1737775", + "1737776", + "1737847", + "1738050", + "1738163", + "1738222", + "1738245", + "1738317", + "1738794", + "1738839", + "1739272", + "1739290", + "1739381", + "1739449", + "1739451", + "1739461", + "1739819", + "1739833", + "1739922", + "1739999", + "1740005", + "1740069", + "1740116", + "1740183", + "1740185", + "1740374", + "1740482", + "1740623", + "1741147", + "1741341", + "1741368", + "1741545", + "1741593", + "1741633", + "1741667", + "1741752", + "1741756", + "1742142", + "1742263", + "1743196", + "1743475", + "1743532", + "1743641", + "1743710", + "1743775", + "1743828", + "1743862", + "1744071", + "1744136", + "1744180", + "1744224", + "1744542", + "1744588", + "1744709", + "1744728", + "1744731", + "1744739", + "1744748", + "1744782", + "1744808", + "1744810", + "1745079", + "1745558", + "1745634", + "1745737", + "1746027", + "1746174", + "1746440", + "1746613", + "1746666", + "1746775", + "1746832", + "1746856", + "1746876", + "1746910", + "1748203", + "1748321", + "1748805", + "1748942", + "1749070", + "1749164", + "1749596", + "1749948", + "1751051", + "1751207", + "1751216", + "1751299", + "1758878", + "1759055", + "1759069", + "1759079", + "1759083", + "1759153", + "1759407", + "1759620", + "1759661", + "1759667", + "1759673", + "1759686", + "1760104", + "1760246", + "1760593", + "1760857", + "1760887", + "1760891", + "1761041", + "1761111", + "1761438", + "1761735", + "1761865", + "1762244", + "1763072", + "1763610", + "1764531", + "1764987", + "1765011", + "1765017", + "1765044", + "1765767", + "1765954", + "1766128", + "1766130", + "1766137", + "1766210", + "1766274", + "1766410", + "1766418", + "1766510", + "1766646", + "1766741", + "1766814", + "1767597", + "1767625", + "1767655", + "1768117", + "1768150", + "1768341", + "1768702", + "1769057", + "1769103", + "1769505", + "1769566", + "1769897", + "1769958", + "1770150", + "1770307", + "1770477", + "1770772", + "1770880", + "1771040", + "1771214", + "1771245", + "1771385", + "1771391", + "1771509", + "1771531", + "1771678", + "1771698", + "1771772", + "1772169", + "1772179", + "1772793", + "1772940", + "1772956", + "1773309", + "1773328", + "1775152", + "1775891", + "1776330", + "1776619", + "1776862", + "1777253", + "1778074", + "1778143", + "1778517", + "1778596", + "1779435", + "1779690", + "1780150", + "1780378", + "1781694", + "1782560", + "1782615", + "1782627", + "1782672", + "1782726", + "1782763", + "1782777", + "1782841", + "1782927", + "1782948", + "1783016", + "1783037", + "1783043", + "1784359", + "1784812", + "1784826", + "1784853", + "1785185", + "1785286", + "1785888", + "1785895", + "1786007", + "1786902", + "1787064", + "1787112", + "1787267", + "1787400", + "1787504", + "1787590", + "1787610", + "1787770", + "1788425", + "1788522", + "1788635", + "1789076", + "1789086", + "1789267", + "1789481", + "1789553", + "1789580", + "1789694", + "1789695", + "1789730", + "1789745", + "1789753", + "1789755", + "1789783", + "1789785", + "1789849", + "1789982", + "1790002", + "1790072", + "1790160", + "1790361", + "1790364", + "1790692", + "1790816", + "1791422", + "1791784", + "1792061", + "1792379", + "1792383", + "1792411", + "1792418", + "1793877", + "1793986", + "1794102", + "1794590", + "1795215", + "1795854", + "1796007", + "1796117", + "1796145", + "1796169", + "1796463", + "1796668", + "1796678", + "1797178", + "1797258", + "1797276", + "1797367", + "1797479", + "1798346", + "1798372", + "1798449", + "1798504", + "1798594", + "1798802", + "1798807", + "1798971", + "1798974", + "1799132", + "1799135", + "1799701", + "1799708", + "1799799", + "1800004", + "1800032", + "1801051", + "1801896", + "1802280", + "1803012", + "1803073", + "1804071", + "1804906", + "1807206", + "1807969", + "1808752", + "1810099", + "1811789", + "1811896", + "1812394", + "1813114", + "1819145", + "1819268", + "1819873", + "1820039", + "1820372", + "1820406", + "1821856", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822787", + "1822796", + "1822819", + "1822830", + "1823726", + "1824113", + "1825064", + "1825077", + "1825083", + "1825156", + "1825176", + "1825971", + "1825983", + "1826022", + "1826033", + "1827125", + "1827645", + "1828162", + "1828637", + "1829322", + "1829363", + "1829776", + "1830152", + "1830241", + "1830372", + "1830380", + "1830410", + "1830457", + "1830537", + "1830584", + "1830632", + "1830802", + "1830838", + "1830843", + "1830879", + "1830937", + "1830962", + "1831136", + "1831168", + "1831643", + "1831752", + "1831780", + "1832853", + "1833626", + "1835031", + "1835156", + "1835433", + "1835456", + "1835457", + "1836899", + "1837172", + "1837420", + "1837515", + "1838911", + "1838969", + "1839296", + "1839851", + "1839893", + "1840301", + "1840346", + "1840360", + "1840380", + "1840478", + "1840483", + "1840555", + "1841159", + "1841261", + "1841296", + "1841675", + "1841813", + "1845270", + "1845368", + "1845962", + "1845965", + "1846111", + "1846159", + "1846236", + "1846729", + "1847407", + "1847956", + "1848356", + "1848610", + "1848657", + "1848864", + "1848920", + "1849273", + "1849284", + "1849294", + "1849477", + "1849897", + "1850008", + "1850246", + "1850450", + "1850506", + "1850522", + "1850538", + "1850781", + "1850971", + "1851203", + "1851337", + "1851555", + "1852177", + "1852311", + "1852956", + "1852978", + "1853064", + "1853079", + "1853723", + "1854202", + "1854237", + "1854287", + "1854347", + "1856005", + "1856289", + "1856595", + "1856620", + "1856691", + "1856701", + "1856768", + "1856867", + "1857577", + "1857626", + "1857828", + "1857829", + "1857878", + "1857924", + "1857978", + "1858074", + "1858113", + "1858163", + "1858531", + "1858775", + "1859305", + "1860628", + "1860688", + "1860768", + "1860852", + "1860983", + "1860987", + "1861395", + "1861644", + "1862578", + "1862580", + "1862837", + "1864161", + "1864377", + "1864652", + "1867820", + "1869478", + "1869512", + "1869803", + "1869976", + "1870202", + "1870249", + "1870250", + "1870450", + "1870988", + "1871160", + "1871252", + "1871407", + "1871698", + "1872315", + "1872368", + "1872901", + "1873079", + "1873411", + "1874375", + "1875008", + "1875120", + "1875327", + "1875631", + "1875865", + "1875869", + "1875918", + "1876329", + "1876409", + "1876542", + "1877941", + "1877988", + "1878470", + "1878490", + "1878586", + "1878862", + "1878879", + "1878895", + "1878907", + "1878939", + "1879252", + "1879452", + "1879735", + "1879970", + "1880062", + "1880064", + "1880104", + "1880139", + "1880140", + "1880143", + "1881151", + "1881834", + "1882158", + "1882210", + "1882557", + "1882905", + "1883161", + "1883386", + "1884212", + "1884255", + "1884273", + "1884332", + "1884370", + "1884403", + "1884465", + "1884970", + "1886084", + "1886579", + "1886587", + "1887108", + "1887173", + "1887290", + "1887701", + "1888579", + "1888733", + "1888743", + "1888759", + "1888826", + "1889833", + "1889942", + "1890187", + "1890534", + "1890576", + "1890656", + "1890703", + "1890772", + "1891059", + "1891326", + "1891386", + "1891426", + "1891473", + "1891493", + "1892242", + "1902533", + "1918868", + "1920496", + "1920712", + "1926260", + "1939432", + "1939658", + "1939677", + "1940744", + "1940807", + "1941437", + "1951557", + "1951649", + "1951713", + "1952014", + "1952062", + "1952130", + "1952229", + "1952449", + "1952532", + "1952806", + "1952812", + "1956440", + "1956524", + "1956599", + "1957266", + "1957300", + "1957570", + "1957572", + "1957632", + "1957718", + "1957816", + "1957845", + "1957852", + "1958024", + "1958323", + "1959383", + "1959395", + "1959914", + "1959919", + "1960617", + "1961040", + "1961068", + "1961190", + "1962204", + "1962265", + "1962268", + "1962434", + "1962516", + "1962636", + "1962860", + "1962990", + "1963011", + "1963306", + "1963446", + "1963463", + "1964191", + "1964195", + "1964471", + "1964637", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965777", + "1965795", + "1965825", + "1965841", + "1965913", + "1965996", + "1966017", + "1966351", + "1966886", + "1967011", + "1967245", + "1967273", + "1967597", + "1967815", + "1968678", + "1968867", + "1969291", + "1970213", + "1970227", + "1970284", + "1971858", + "1971888", + "1972120", + "1972185", + "1972187", + "1972234", + "1972250", + "1972278", + "1972342", + "1972434", + "1972449", + "1973414", + "1973467", + "1975341", + "1975546", + "1975553", + "1975571", + "1975897", + "1975903", + "1976163", + "1977003", + "1977007", + "1977068", + "1978056", + "1978065", + "1978114", + "1978375", + "1978445", + "1978776", + "1978821", + "1978977", + "1979308", + "1979430", + "1979473", + "1979781", + "1980521", + "1981696", + "1982406", + "1982500", + "1982525", + "1982529", + "1982541", + "1982542", + "1982592", + "1982636", + "1982671", + "1982746", + "1982791", + "1982838", + "1982885", + "1983000", + "1983170", + "1983260", + "1983288", + "1983387", + "1983441", + "1983442", + "1983525", + "1983548", + "1983558", + "1983648", + "1983694", + "1983705", + "1983755", + "1983888", + "1983896", + "1983922", + "1983997", + "1983999", + "1984117", + "1984734", + "1984942", + "1984954", + "1985522", + "1986052", + "1986056", + "1986157", + "1986166", + "1986171", + "1986220", + "1986367", + "1986452", + "1986522", + "1986575", + "1987527", + "1987744", + "1988593", + "1988602", + "1988684", + "1988881", + "1989428", + "1990066", + "1990150", + "1990551", + "1991179", + "1991371", + "1992066", + "1992504", + "1993419", + "4302252", + "4302268", + "4522322", + "4522795", + "4522916", + "4522922", + "4523522", + "4523560", + "4523725", + "4523880", + "4523883", + "4523885", + "4524054", + "4524070", + "4524072", + "4524376", + "4524393", + "4524403", + "4524421", + "4524426", + "4524636", + "4524638", + "4524740", + "4524793", + "4524890", + "4525078", + "4525189", + "4525354", + "4525420", + "4525425", + "4525500", + "4525505", + "4525510", + "4525530", + "4525540", + "4525547", + "4525562", + "4525610", + "4525859", + "4526048", + "4527339", + "4527342", + "4527957", + "4527972", + "4528692", + "4529064", + "4529248", + "4529566", + "4529630", + "4530002", + "4530151", + "4530424", + "4531145", + "4531284", + "4531402", + "4531506", + "4531517", + "4531687", + "4531690", + "4531708", + "4531968", + "4531975", + "4532022", + "4532050", + "4532057", + "4532095", + "4532122", + "4532239", + "4532253", + "4532293", + "4532297", + "4532357", + "4532405", + "4532412", + "4532471", + "4532493", + "4532500", + "4532516", + "4532534", + "4532544", + "4532696", + "4532811", + "4532886", + "4532888", + "4532890", + "4533115", + "4533136", + "4533202", + "4533273", + "4533360", + "4533431", + "4533433", + "4533442", + "4533446", + "4533661", + "4533671", + "4533952", + "4534038", + "4534052", + "4534057", + "4534166", + "4534207", + "4534225", + "4534290", + "4534299", + "4534389", + "4534398", + "4534408", + "4534458", + "4534463", + "4534485", + "4534533", + "4534538", + "4534540", + "4534686", + "4534719", + "4534762", + "4534767", + "4534872", + "4534909", + "4534914", + "4535817", + "4535827", + "4536483", + "5101678", + "5101745", + "5102951", + "5102982", + "5103066", + "5103121", + "5103451", + "5103736", + "5104056", + "5104442", + "5104558", + "5104641", + "5104781", + "5104891", + "5104903", + "5105088", + "5105339", + "5109523", + "5109661", + "5109821", + "5110200", + "5110213", + "5110644", + "5110670", + "5110871", + "5110885", + "5111574", + "5112155", + "5112254", + "5112283", + "5112291", + "5112336", + "5112345", + "5112362", + "5113036", + "5113078", + "5113234", + "5113847", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5116416", + "5116475", + "5116609", + "5116669", + "5116698", + "5116850", + "5116941", + "5117049", + "5117089", + "5117189", + "5117399", + "5117400", + "5118892", + "5118904", + "5118996", + "5119143", + "5119245", + "5119513", + "5120396", + "5120465", + "5120668", + "5120675", + "5120767", + "5121040", + "5121177", + "5121517", + "5121737", + "5122439", + "5123221", + "5123339", + "5123394", + "5123461", + "5123582", + "5123922", + "5124007", + "5124029", + "5124143", + "5124233", + "5124911", + "5125689", + "5126212", + "5126217", + "5126675", + "5126680", + "5134667", + "5141501", + "5141677", + "5142870", + "5142971", + "5143048", + "5143129", + "5143147", + "5143380", + "5143453", + "5143477", + "5143651", + "5143675", + "5143697", + "5143944", + "5143947", + "5144190", + "5144426", + "5144534", + "5144543", + "5144677", + "5144721", + "5145009", + "5145136", + "5145186", + "5145269", + "5145409", + "5145965", + "5146342", + "5146379", + "5146412", + "5146496", + "5146510", + "5146559", + "5146677", + "5146837", + "5146883", + "5146946", + "5146961", + "5147038", + "5147039", + "5147062", + "5147150", + "5147171", + "5147193", + "5147208", + "5147232", + "5147245", + "5147478", + "5147608", + "5147638", + "5147681", + "5147827", + "5147834", + "5148248", + "5148286", + "5148394", + "5148424", + "5148436", + "5148462", + "5148475", + "5148486", + "5148487", + "5149414", + "5149438", + "5149474", + "5149499", + "5149665", + "5149746", + "5149820", + "5149839", + "5714973", + "5768880", + "5769028", + "5769062", + "5769068", + "5769072", + "5769191", + "5769272", + "5769709", + "5770913", + "5770942", + "5771259", + "5771350", + "5771357", + "5771982", + "5772063", + "5772129", + "5772176", + "5772178", + "5772186", + "5772196", + "5772202", + "5772205", + "5772206", + "5772210", + "5772269", + "5772349", + "5772351", + "5804895", + "5879654", + "5880512", + "5880533", + "5880545", + "5880550", + "5880552", + "5880559", + "5880563", + "5883985", + "5884571", + "5884851", + "6097214", + "6097225", + "6097228", + "6097234", + "6097236", + "6121184", + "6544687", + "7429212", + "7438067", + "7443518", + "7446048", + "7448174", + "7466487", + "7588222", + "7596232", + "7624468", + "7656811", + "7681733", + "7730078", + "7734292", + "7752082", + "7753668", + "7780930", + "7825213", + "7874258", + "7875265", + "7877231", + "7895336", + "7921916", + "7937573", + "7940536", + "7960566", + "7972792", + "7976145", + "7981386", + "7993353", + "8000103", + "8007222", + "8015895", + "8049830", + "8086347", + "8094357", + "8105817", + "8186212", + "8208583", + "8223165", + "8237343", + "8237987", + "8244266", + "8253467", + "8262357", + "8273859", + "8292872", + "8313553", + "8361848", + "8361973", + "8369868", + "8388883", + "8394261", + "8397564", + "8407461", + "8421569", + "8532380", + "8537359", + "8581601", + "8742426", + "8756768", + "8869900", + "8890502", + "9101339", + "9242559", + "9262981", + "9359597", + "9473121", + "9530977", + "9674732", + "9734171", + "9812211" + ], + "class_count": 1177, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.7405864004487995, + "precision": 0.3117281910150928, + "recall": 0.7405864004487995, + "f1": 0.3001398043754674 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "species", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "10055273", + "10113008", + "10580256", + "10638451", + "10844862", + "10915497", + "10982815", + "11287091", + "11418741", + "11478679", + "11571523", + "11598540", + "11728049", + "11962292", + "12089608", + "12135372", + "12253343", + "12318291", + "1730978", + "1731598", + "1731826", + "1731860", + "1732063", + "1732416", + "1732452", + "1732565", + "1732662", + "1732685", + "1733258", + "1733484", + "1734453", + "1734704", + "1734826", + "1735532", + "1735855", + "1736377", + "1736425", + "1736484", + "1736560", + "1736601", + "1736898", + "1737491", + "1737524", + "1737533", + "1737542", + "1737552", + "1737650", + "1737775", + "1737776", + "1737847", + "1738050", + "1738163", + "1738222", + "1738245", + "1738317", + "1738794", + "1738839", + "1739272", + "1739290", + "1739381", + "1739449", + "1739451", + "1739461", + "1739819", + "1739833", + "1739922", + "1739999", + "1740005", + "1740069", + "1740116", + "1740183", + "1740185", + "1740374", + "1740482", + "1740623", + "1741147", + "1741341", + "1741368", + "1741545", + "1741593", + "1741633", + "1741667", + "1741752", + "1741756", + "1742142", + "1742263", + "1743196", + "1743475", + "1743532", + "1743641", + "1743710", + "1743775", + "1743828", + "1743862", + "1744071", + "1744136", + "1744180", + "1744224", + "1744542", + "1744588", + "1744709", + "1744728", + "1744731", + "1744739", + "1744748", + "1744782", + "1744808", + "1744810", + "1745079", + "1745558", + "1745634", + "1745737", + "1746027", + "1746174", + "1746440", + "1746613", + "1746666", + "1746775", + "1746832", + "1746856", + "1746876", + "1746910", + "1748203", + "1748321", + "1748805", + "1748942", + "1749070", + "1749164", + "1749596", + "1749948", + "1751051", + "1751207", + "1751216", + "1751299", + "1758878", + "1759055", + "1759069", + "1759079", + "1759083", + "1759153", + "1759407", + "1759620", + "1759661", + "1759667", + "1759673", + "1759686", + "1760104", + "1760246", + "1760593", + "1760857", + "1760887", + "1760891", + "1761041", + "1761111", + "1761438", + "1761735", + "1761865", + "1762244", + "1763072", + "1763610", + "1764531", + "1764987", + "1765011", + "1765017", + "1765044", + "1765767", + "1765954", + "1766128", + "1766130", + "1766137", + "1766210", + "1766274", + "1766418", + "1766510", + "1766646", + "1766741", + "1766814", + "1767597", + "1767625", + "1767655", + "1768117", + "1768150", + "1768341", + "1768702", + "1769057", + "1769103", + "1769505", + "1769566", + "1769897", + "1769958", + "1770150", + "1770307", + "1770477", + "1770772", + "1770880", + "1771040", + "1771214", + "1771245", + "1771385", + "1771391", + "1771509", + "1771531", + "1771678", + "1771698", + "1771772", + "1772169", + "1772179", + "1772793", + "1772940", + "1772956", + "1773309", + "1773328", + "1775152", + "1775891", + "1776330", + "1776619", + "1776862", + "1777253", + "1778074", + "1778143", + "1778517", + "1778596", + "1779435", + "1779690", + "1780150", + "1780378", + "1781694", + "1782560", + "1782615", + "1782627", + "1782672", + "1782726", + "1782763", + "1782777", + "1782841", + "1782927", + "1782948", + "1783016", + "1783037", + "1783043", + "1784359", + "1784812", + "1784826", + "1784853", + "1785185", + "1785286", + "1785888", + "1785895", + "1786007", + "1786902", + "1787064", + "1787112", + "1787267", + "1787400", + "1787504", + "1787590", + "1787610", + "1787770", + "1788425", + "1788522", + "1788635", + "1789076", + "1789086", + "1789267", + "1789481", + "1789553", + "1789580", + "1789694", + "1789695", + "1789730", + "1789745", + "1789753", + "1789755", + "1789783", + "1789785", + "1789849", + "1789982", + "1790002", + "1790072", + "1790160", + "1790361", + "1790364", + "1790692", + "1790816", + "1791422", + "1791784", + "1792061", + "1792379", + "1792383", + "1792411", + "1792418", + "1793877", + "1793986", + "1794102", + "1794590", + "1795215", + "1795854", + "1796007", + "1796117", + "1796145", + "1796169", + "1796463", + "1796668", + "1796678", + "1797178", + "1797258", + "1797276", + "1797367", + "1797479", + "1798346", + "1798372", + "1798449", + "1798504", + "1798594", + "1798802", + "1798807", + "1798971", + "1798974", + "1799132", + "1799135", + "1799701", + "1799708", + "1799799", + "1800004", + "1800032", + "1801051", + "1801896", + "1802280", + "1803012", + "1803073", + "1804071", + "1804906", + "1807206", + "1807969", + "1808752", + "1810099", + "1811789", + "1811896", + "1812394", + "1813114", + "1819145", + "1819268", + "1819873", + "1820039", + "1820372", + "1820406", + "1821856", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822787", + "1822796", + "1822819", + "1822830", + "1823726", + "1824113", + "1825064", + "1825077", + "1825083", + "1825156", + "1825176", + "1825971", + "1825983", + "1826022", + "1826033", + "1827125", + "1827645", + "1828162", + "1828637", + "1829322", + "1829363", + "1829776", + "1830152", + "1830241", + "1830372", + "1830380", + "1830410", + "1830457", + "1830537", + "1830584", + "1830632", + "1830802", + "1830838", + "1830843", + "1830879", + "1830937", + "1830962", + "1831136", + "1831168", + "1831643", + "1831752", + "1831780", + "1832853", + "1833626", + "1835031", + "1835156", + "1835433", + "1835456", + "1835457", + "1836899", + "1837172", + "1837420", + "1837515", + "1838911", + "1838969", + "1839296", + "1839851", + "1839893", + "1840301", + "1840346", + "1840360", + "1840380", + "1840478", + "1840483", + "1840555", + "1841159", + "1841261", + "1841296", + "1841675", + "1841813", + "1845270", + "1845368", + "1845962", + "1845965", + "1846111", + "1846159", + "1846236", + "1846729", + "1847407", + "1847956", + "1848356", + "1848610", + "1848657", + "1848864", + "1848920", + "1849273", + "1849284", + "1849294", + "1849477", + "1849897", + "1850008", + "1850246", + "1850450", + "1850506", + "1850522", + "1850538", + "1850781", + "1850971", + "1851203", + "1851337", + "1851555", + "1852177", + "1852311", + "1852956", + "1852978", + "1853064", + "1853079", + "1853723", + "1854202", + "1854237", + "1854287", + "1854347", + "1856005", + "1856289", + "1856595", + "1856620", + "1856691", + "1856701", + "1856768", + "1856867", + "1857577", + "1857626", + "1857828", + "1857829", + "1857878", + "1857924", + "1857978", + "1858074", + "1858113", + "1858163", + "1858531", + "1858775", + "1859305", + "1860628", + "1860688", + "1860768", + "1860852", + "1860983", + "1860987", + "1861395", + "1861644", + "1862578", + "1862580", + "1862837", + "1864161", + "1864377", + "1864652", + "1867820", + "1869478", + "1869512", + "1869803", + "1869976", + "1870202", + "1870249", + "1870250", + "1870450", + "1870988", + "1871160", + "1871252", + "1871407", + "1871698", + "1872315", + "1872368", + "1872901", + "1873079", + "1873411", + "1874375", + "1875008", + "1875120", + "1875327", + "1875631", + "1875865", + "1875869", + "1875918", + "1876329", + "1876409", + "1876542", + "1877941", + "1877988", + "1878470", + "1878490", + "1878862", + "1878879", + "1878895", + "1878907", + "1878939", + "1879252", + "1879452", + "1879735", + "1879970", + "1880062", + "1880064", + "1880104", + "1880139", + "1880140", + "1880143", + "1881151", + "1881834", + "1882158", + "1882210", + "1882557", + "1882905", + "1883161", + "1883386", + "1884212", + "1884255", + "1884273", + "1884332", + "1884370", + "1884403", + "1884465", + "1884970", + "1886084", + "1886579", + "1886587", + "1887108", + "1887173", + "1887290", + "1887701", + "1888579", + "1888733", + "1888743", + "1888759", + "1888826", + "1889833", + "1889942", + "1890187", + "1890534", + "1890576", + "1890656", + "1890703", + "1890772", + "1891059", + "1891326", + "1891386", + "1891426", + "1891473", + "1891493", + "1892242", + "1902533", + "1918868", + "1920496", + "1920712", + "1926260", + "1939432", + "1939658", + "1939677", + "1940744", + "1940807", + "1941437", + "1951557", + "1951649", + "1951713", + "1952014", + "1952062", + "1952130", + "1952229", + "1952449", + "1952532", + "1952806", + "1952812", + "1956440", + "1956524", + "1956599", + "1957266", + "1957300", + "1957570", + "1957572", + "1957632", + "1957718", + "1957816", + "1957845", + "1957852", + "1958024", + "1958323", + "1959383", + "1959395", + "1959914", + "1959919", + "1960617", + "1961040", + "1961068", + "1961190", + "1962204", + "1962265", + "1962268", + "1962434", + "1962516", + "1962636", + "1962860", + "1962990", + "1963011", + "1963306", + "1963446", + "1963463", + "1964191", + "1964195", + "1964471", + "1964637", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965777", + "1965795", + "1965825", + "1965841", + "1965913", + "1965996", + "1966017", + "1966351", + "1966886", + "1967011", + "1967245", + "1967273", + "1967597", + "1967815", + "1968678", + "1968867", + "1969291", + "1970213", + "1970227", + "1970284", + "1971858", + "1971888", + "1972120", + "1972185", + "1972187", + "1972234", + "1972250", + "1972278", + "1972342", + "1972434", + "1972449", + "1973414", + "1973467", + "1975341", + "1975546", + "1975553", + "1975571", + "1975897", + "1975903", + "1976163", + "1977003", + "1977007", + "1977068", + "1978056", + "1978065", + "1978114", + "1978375", + "1978445", + "1978776", + "1978821", + "1978977", + "1979308", + "1979430", + "1979473", + "1979781", + "1980521", + "1981696", + "1982406", + "1982500", + "1982525", + "1982529", + "1982541", + "1982542", + "1982592", + "1982636", + "1982671", + "1982746", + "1982791", + "1982838", + "1982885", + "1983000", + "1983170", + "1983260", + "1983288", + "1983387", + "1983441", + "1983442", + "1983525", + "1983548", + "1983558", + "1983648", + "1983694", + "1983705", + "1983755", + "1983888", + "1983896", + "1983922", + "1983997", + "1983999", + "1984117", + "1984734", + "1984942", + "1984954", + "1985522", + "1986052", + "1986056", + "1986157", + "1986166", + "1986171", + "1986220", + "1986367", + "1986452", + "1986522", + "1986575", + "1987527", + "1987744", + "1988593", + "1988602", + "1988684", + "1988881", + "1989428", + "1990066", + "1990150", + "1990551", + "1991179", + "1991371", + "1992066", + "1992504", + "1993419", + "4302252", + "4302268", + "4522322", + "4522795", + "4522916", + "4522922", + "4523522", + "4523560", + "4523725", + "4523880", + "4523883", + "4523885", + "4524054", + "4524070", + "4524072", + "4524376", + "4524393", + "4524403", + "4524421", + "4524426", + "4524636", + "4524638", + "4524740", + "4524793", + "4524890", + "4525078", + "4525189", + "4525354", + "4525420", + "4525425", + "4525500", + "4525505", + "4525510", + "4525530", + "4525540", + "4525547", + "4525562", + "4525610", + "4525859", + "4526048", + "4527339", + "4527342", + "4527957", + "4527972", + "4528692", + "4529064", + "4529248", + "4529566", + "4529630", + "4530002", + "4530151", + "4530424", + "4531145", + "4531284", + "4531402", + "4531506", + "4531517", + "4531687", + "4531690", + "4531708", + "4531968", + "4531975", + "4532022", + "4532050", + "4532057", + "4532095", + "4532122", + "4532239", + "4532253", + "4532293", + "4532297", + "4532357", + "4532405", + "4532412", + "4532471", + "4532493", + "4532500", + "4532516", + "4532534", + "4532544", + "4532696", + "4532811", + "4532886", + "4532888", + "4532890", + "4533115", + "4533136", + "4533202", + "4533273", + "4533360", + "4533431", + "4533433", + "4533442", + "4533446", + "4533661", + "4533671", + "4533952", + "4534038", + "4534052", + "4534057", + "4534166", + "4534207", + "4534225", + "4534290", + "4534299", + "4534389", + "4534398", + "4534408", + "4534458", + "4534463", + "4534485", + "4534533", + "4534538", + "4534540", + "4534686", + "4534719", + "4534762", + "4534767", + "4534872", + "4534909", + "4534914", + "4535817", + "4535827", + "4536483", + "5101678", + "5101745", + "5102951", + "5102982", + "5103066", + "5103121", + "5103451", + "5103736", + "5104056", + "5104442", + "5104558", + "5104641", + "5104781", + "5104891", + "5104903", + "5105088", + "5105339", + "5109523", + "5109661", + "5109821", + "5110200", + "5110213", + "5110644", + "5110670", + "5110871", + "5110885", + "5111574", + "5112155", + "5112254", + "5112283", + "5112291", + "5112336", + "5112345", + "5112362", + "5113036", + "5113078", + "5113234", + "5113847", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5116416", + "5116475", + "5116609", + "5116669", + "5116698", + "5116850", + "5116941", + "5117049", + "5117089", + "5117189", + "5117399", + "5117400", + "5118892", + "5118904", + "5118996", + "5119143", + "5119245", + "5119513", + "5120396", + "5120465", + "5120668", + "5120675", + "5120767", + "5121040", + "5121177", + "5121517", + "5121737", + "5122439", + "5123221", + "5123339", + "5123394", + "5123461", + "5123582", + "5123922", + "5124007", + "5124029", + "5124143", + "5124233", + "5124911", + "5125689", + "5126212", + "5126217", + "5126675", + "5126680", + "5134667", + "5141501", + "5141677", + "5142870", + "5142971", + "5143048", + "5143129", + "5143147", + "5143380", + "5143453", + "5143477", + "5143651", + "5143675", + "5143697", + "5143944", + "5143947", + "5144190", + "5144426", + "5144534", + "5144543", + "5144677", + "5144721", + "5145009", + "5145136", + "5145186", + "5145269", + "5145409", + "5145965", + "5146342", + "5146379", + "5146412", + "5146496", + "5146510", + "5146559", + "5146677", + "5146837", + "5146883", + "5146946", + "5146961", + "5147038", + "5147039", + "5147062", + "5147150", + "5147171", + "5147193", + "5147208", + "5147232", + "5147245", + "5147478", + "5147608", + "5147638", + "5147681", + "5147827", + "5147834", + "5148248", + "5148286", + "5148394", + "5148424", + "5148436", + "5148462", + "5148475", + "5148486", + "5148487", + "5149414", + "5149438", + "5149474", + "5149499", + "5149665", + "5149746", + "5149820", + "5149839", + "5714973", + "5768880", + "5769028", + "5769062", + "5769068", + "5769072", + "5769191", + "5769272", + "5769709", + "5770913", + "5770942", + "5771259", + "5771350", + "5771357", + "5771982", + "5772063", + "5772129", + "5772176", + "5772178", + "5772186", + "5772196", + "5772202", + "5772205", + "5772206", + "5772210", + "5772269", + "5772349", + "5772351", + "5804895", + "5879654", + "5880512", + "5880533", + "5880545", + "5880550", + "5880552", + "5880559", + "5880563", + "5883985", + "5884571", + "5884851", + "6097214", + "6097225", + "6097228", + "6097234", + "6097236", + "6121184", + "6544687", + "7429212", + "7438067", + "7443518", + "7446048", + "7448174", + "7466487", + "7588222", + "7596232", + "7624468", + "7656811", + "7681733", + "7730078", + "7734292", + "7752082", + "7753668", + "7780930", + "7825213", + "7874258", + "7875265", + "7877231", + "7895336", + "7921916", + "7937573", + "7940536", + "7960566", + "7972792", + "7976145", + "7981386", + "7993353", + "8000103", + "8007222", + "8015895", + "8049830", + "8086347", + "8094357", + "8105817", + "8186212", + "8208583", + "8223165", + "8237343", + "8237987", + "8244266", + "8262357", + "8273859", + "8292872", + "8313553", + "8361848", + "8361973", + "8388883", + "8394261", + "8397564", + "8407461", + "8421569", + "8532380", + "8537359", + "8581601", + "8742426", + "8756768", + "8869900", + "8890502", + "9101339", + "9242559", + "9262981", + "9359597", + "9473121", + "9530977", + "9674732", + "9734171", + "9812211" + ], + "class_count": 1173, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.7408884646998294, + "precision": 0.3129592874854788, + "recall": 0.7408884646998294, + "f1": 0.30114949302373306 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1737775", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759083", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1765011", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1786902", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1862580", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1959383", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1965996", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1972342", + "1973414", + "1973467", + "1975553", + "1975571", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 320, + "truth_images_in_retained_classes": 44895, + "accepted_predictions_in_retained_classes": 39395, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.7835860088760841, + "precision": 0.827189259853512, + "recall": 0.7835860088760841, + "f1": 0.7771880031099812 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1959383", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1965996", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1972342", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 313, + "truth_images_in_retained_classes": 44730, + "accepted_predictions_in_retained_classes": 39306, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.7884742372532278, + "precision": 0.8305015444074889, + "recall": 0.7884742372532278, + "f1": 0.7815287772418471 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1737775", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766210", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789783", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1798974", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1839893", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1959383", + "1959395", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1965996", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1972342", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 321, + "truth_images_in_retained_classes": 44848, + "accepted_predictions_in_retained_classes": 40080, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8016540743299243, + "precision": 0.8261696121305688, + "recall": 0.8016540743299243, + "f1": 0.7937632511493783 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1959383", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1965996", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1972342", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 313, + "truth_images_in_retained_classes": 44730, + "accepted_predictions_in_retained_classes": 40012, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8112118860261139, + "precision": 0.8306457257526494, + "recall": 0.8112118860261139, + "f1": 0.801323823079522 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1737775", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766210", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789783", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1798974", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1839893", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1959383", + "1959395", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1965996", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1972342", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 321, + "truth_images_in_retained_classes": 44848, + "accepted_predictions_in_retained_classes": 40095, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8021426772632025, + "precision": 0.8262878591168301, + "recall": 0.8021426772632025, + "f1": 0.7940157823083626 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1959383", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1965996", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1972342", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 313, + "truth_images_in_retained_classes": 44730, + "accepted_predictions_in_retained_classes": 40027, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8117129772132781, + "precision": 0.8307669950260996, + "recall": 0.8117129772132781, + "f1": 0.8015828087090235 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759083", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1765011", + "1766137", + "1766210", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1786902", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789783", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1798974", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1959383", + "1959395", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1965996", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1972342", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118892", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7752082", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 323, + "truth_images_in_retained_classes": 44853, + "accepted_predictions_in_retained_classes": 41093, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8286743235345041, + "precision": 0.8455415603248386, + "recall": 0.8286743235345041, + "f1": 0.8201007330677098 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1959383", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1965996", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1972342", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 313, + "truth_images_in_retained_classes": 44730, + "accepted_predictions_in_retained_classes": 41004, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8390964584441899, + "precision": 0.8519293635860037, + "recall": 0.8390964584441899, + "f1": 0.8287585120001666 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759083", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1765011", + "1766137", + "1766210", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1786902", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789783", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1798974", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1959383", + "1959395", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1965996", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1972342", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118892", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7752082", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 323, + "truth_images_in_retained_classes": 44853, + "accepted_predictions_in_retained_classes": 41099, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8289044913540222, + "precision": 0.8454663089232549, + "recall": 0.8289044913540222, + "f1": 0.8200672672516621 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1959383", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1965996", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1972342", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 313, + "truth_images_in_retained_classes": 44730, + "accepted_predictions_in_retained_classes": 41010, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8393339798681654, + "precision": 0.8518517079862864, + "recall": 0.8393339798681654, + "f1": 0.8287239769887179 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "species", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1862580", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1965996", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 277, + "truth_images_in_retained_classes": 43835, + "accepted_predictions_in_retained_classes": 38825, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.7994793772053351, + "precision": 0.8464715182316649, + "recall": 0.7994793772053351, + "f1": 0.8020074761104702 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "species", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 271, + "truth_images_in_retained_classes": 43652, + "accepted_predictions_in_retained_classes": 38723, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8043288259343255, + "precision": 0.8497597107470192, + "recall": 0.8043288259343255, + "f1": 0.8062320354321302 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "species", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766210", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 285, + "truth_images_in_retained_classes": 44492, + "accepted_predictions_in_retained_classes": 39612, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8171258284359165, + "precision": 0.8511929361965739, + "recall": 0.8171258284359165, + "f1": 0.8180429337935671 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "species", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 271, + "truth_images_in_retained_classes": 43652, + "accepted_predictions_in_retained_classes": 39130, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8236153818021188, + "precision": 0.8538220455561395, + "recall": 0.8236153818021188, + "f1": 0.8231516237390822 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "species", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766210", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 285, + "truth_images_in_retained_classes": 44492, + "accepted_predictions_in_retained_classes": 39626, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.817676149634451, + "precision": 0.8513280853428178, + "recall": 0.817676149634451, + "f1": 0.8183308171409442 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "species", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 271, + "truth_images_in_retained_classes": 43652, + "accepted_predictions_in_retained_classes": 39144, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8241941328780684, + "precision": 0.8539641765770972, + "recall": 0.8241941328780684, + "f1": 0.823454379288907 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "species", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766210", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 284, + "truth_images_in_retained_classes": 44470, + "accepted_predictions_in_retained_classes": 40603, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8470429977027221, + "precision": 0.8707776696179904, + "recall": 0.8470429977027221, + "f1": 0.8452968243564886 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "species", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 271, + "truth_images_in_retained_classes": 43652, + "accepted_predictions_in_retained_classes": 40056, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8513634723466735, + "precision": 0.8721124495623291, + "recall": 0.8513634723466735, + "f1": 0.8483517909129423 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "species", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766210", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 284, + "truth_images_in_retained_classes": 44470, + "accepted_predictions_in_retained_classes": 40609, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8473047730749205, + "precision": 0.870692084397175, + "recall": 0.8473047730749205, + "f1": 0.8452587628826032 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "species", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 271, + "truth_images_in_retained_classes": 43652, + "accepted_predictions_in_retained_classes": 40062, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8516378052090512, + "precision": 0.8720227587774156, + "recall": 0.8516378052090512, + "f1": 0.8483119036118965 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "species", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1742142", + "1743532", + "1746775", + "1746832", + "1758878", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1782948", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1822346", + "1822610", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1862580", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5772210", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 216, + "truth_images_in_retained_classes": 42698, + "accepted_predictions_in_retained_classes": 37641, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8082495823011705, + "precision": 0.8625621889375423, + "recall": 0.8082495823011705, + "f1": 0.8168473325998348 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "species", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1742142", + "1743532", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 208, + "truth_images_in_retained_classes": 42384, + "accepted_predictions_in_retained_classes": 37437, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8136982479192534, + "precision": 0.8648542018939747, + "recall": 0.8136982479192534, + "f1": 0.8209483082438459 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "species", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1741341", + "1742142", + "1743532", + "1746832", + "1759153", + "1760104", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1782948", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1821911", + "1822346", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 222, + "truth_images_in_retained_classes": 43361, + "accepted_predictions_in_retained_classes": 38417, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8271275510654174, + "precision": 0.8780867959533072, + "recall": 0.8271275510654174, + "f1": 0.8390189376702701 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "species", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1742142", + "1743532", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 208, + "truth_images_in_retained_classes": 42384, + "accepted_predictions_in_retained_classes": 37796, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8339089780399618, + "precision": 0.8827194680660194, + "recall": 0.8339089780399618, + "f1": 0.8454184870285215 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "species", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1741341", + "1742142", + "1743532", + "1746832", + "1759153", + "1760104", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1782948", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1821911", + "1822346", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 222, + "truth_images_in_retained_classes": 43361, + "accepted_predictions_in_retained_classes": 38429, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8276292942912182, + "precision": 0.8782629747089125, + "recall": 0.8276292942912182, + "f1": 0.8392847349307762 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "species", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1742142", + "1743532", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 208, + "truth_images_in_retained_classes": 42384, + "accepted_predictions_in_retained_classes": 37811, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8344444924444223, + "precision": 0.8825394050561284, + "recall": 0.8344444924444223, + "f1": 0.8455033297180404 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "species", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1741341", + "1742142", + "1743532", + "1746832", + "1758878", + "1759153", + "1760104", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5772210", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 223, + "truth_images_in_retained_classes": 43375, + "accepted_predictions_in_retained_classes": 39483, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8552687902032574, + "precision": 0.8920154706737625, + "recall": 0.8552687902032574, + "f1": 0.8618363751815307 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "species", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1742142", + "1743532", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 208, + "truth_images_in_retained_classes": 42384, + "accepted_predictions_in_retained_classes": 38766, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.859934317761158, + "precision": 0.8943362486856059, + "recall": 0.859934317761158, + "f1": 0.8655942697573586 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "species", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1741341", + "1742142", + "1743532", + "1746832", + "1758878", + "1759153", + "1760104", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5772210", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 223, + "truth_images_in_retained_classes": 43375, + "accepted_predictions_in_retained_classes": 39484, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8552572257583305, + "precision": 0.8920297055771915, + "recall": 0.8552572257583305, + "f1": 0.8618121872907232 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "species", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1742142", + "1743532", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 208, + "truth_images_in_retained_classes": 42384, + "accepted_predictions_in_retained_classes": 38767, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8599219193418374, + "precision": 0.8943515101445709, + "recall": 0.8599219193418374, + "f1": 0.8655683375475027 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "genus", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "11064851", + "11495707", + "12031311", + "12105049", + "1730815", + "1731584", + "1731817", + "1732062", + "1732397", + "1732442", + "1732496", + "1732661", + "1733242", + "1733338", + "1733574", + "1733840", + "1734388", + "1734683", + "1735487", + "1735814", + "1735869", + "1736266", + "1736359", + "1736409", + "1736444", + "1736460", + "1736725", + "1736895", + "1737021", + "1737335", + "1737519", + "1737647", + "1737701", + "1738049", + "1738143", + "1738215", + "1738242", + "1738265", + "1738583", + "1739000", + "1739060", + "1739418", + "1739446", + "1739724", + "1740664", + "1741141", + "1741338", + "1741540", + "1741585", + "1741717", + "1742061", + "1742345", + "1742419", + "1743188", + "1743467", + "1743485", + "1743516", + "1743637", + "1743690", + "1743723", + "1743762", + "1743811", + "1744049", + "1744133", + "1744237", + "1744240", + "1744587", + "1744691", + "1744761", + "1744928", + "1745076", + "1745086", + "1745549", + "1746012", + "1746399", + "1746437", + "1746600", + "1746749", + "1747044", + "1747242", + "1747949", + "1748277", + "1748799", + "1748889", + "1749137", + "1749712", + "1749732", + "1750339", + "1750759", + "1751227", + "1758873", + "1759029", + "1759152", + "1759405", + "1759552", + "1760088", + "1760588", + "1760738", + "1760849", + "1761017", + "1761401", + "1761728", + "1761857", + "1762232", + "1762605", + "1763285", + "1763597", + "1764920", + "1765763", + "1766123", + "1766265", + "1766366", + "1766624", + "1766708", + "1767590", + "1767644", + "1768106", + "1768136", + "1768222", + "1768302", + "1768411", + "1768691", + "1769098", + "1769504", + "1769819", + "1769945", + "1770123", + "1770274", + "1770396", + "1770592", + "1771501", + "1772155", + "1772359", + "1772783", + "1772926", + "1775081", + "1775149", + "1775887", + "1775910", + "1776168", + "1776299", + "1776576", + "1776846", + "1776978", + "1777243", + "1777868", + "1778073", + "1778114", + "1778136", + "1778574", + "1778695", + "1779429", + "1779630", + "1779682", + "1780139", + "1780300", + "1781683", + "1782524", + "1782607", + "1782659", + "1783394", + "1784809", + "1785140", + "1785281", + "1785873", + "1785931", + "1786886", + "1786930", + "1787061", + "1787107", + "1787399", + "1787522", + "1788466", + "1788764", + "1788916", + "1789061", + "1789246", + "1789474", + "1789545", + "1789671", + "1789826", + "1789978", + "1790356", + "1790601", + "1790683", + "1790794", + "1791382", + "1791874", + "1792055", + "1792280", + "1792324", + "1792405", + "1793856", + "1793981", + "1794099", + "1794570", + "1795126", + "1795443", + "1795782", + "1796225", + "1796408", + "1796469", + "1796639", + "1797073", + "1798083", + "1798340", + "1798362", + "1798377", + "1798440", + "1798478", + "1798514", + "1798902", + "1799687", + "1799702", + "1799789", + "1799993", + "1800016", + "1801046", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1807965", + "1808720", + "1808961", + "1809069", + "1810097", + "1811612", + "1812976", + "1814095", + "1815226", + "1819125", + "1819252", + "1819372", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1824090", + "1824246", + "1825057", + "1825076", + "1825121", + "1825444", + "1825535", + "1825963", + "1826021", + "1826192", + "1827111", + "1827279", + "1827547", + "1827641", + "1828161", + "1828636", + "1829298", + "1829702", + "1830036", + "1830118", + "1830379", + "1830630", + "1830909", + "1831127", + "1831272", + "1831446", + "1831747", + "1832810", + "1833623", + "1835027", + "1835151", + "1835366", + "1835429", + "1836898", + "1837168", + "1837338", + "1839730", + "1840273", + "1841152", + "1841259", + "1841529", + "1842184", + "1842261", + "1843897", + "1845266", + "1845958", + "1846094", + "1846907", + "1847591", + "1847952", + "1848192", + "1848253", + "1848374", + "1848655", + "1848843", + "1849256", + "1849514", + "1849628", + "1849983", + "1850022", + "1850231", + "1850276", + "1850474", + "1850521", + "1850525", + "1850777", + "1850865", + "1851496", + "1852133", + "1852176", + "1852212", + "1852416", + "1852745", + "1852917", + "1853060", + "1853074", + "1853431", + "1853583", + "1853873", + "1854160", + "1854326", + "1854459", + "1854789", + "1855383", + "1856286", + "1856382", + "1856563", + "1856586", + "1856631", + "1856650", + "1856766", + "1856845", + "1857569", + "1857624", + "1857825", + "1857968", + "1858055", + "1858529", + "1858722", + "1859036", + "1859082", + "1859284", + "1860403", + "1860613", + "1860657", + "1861151", + "1861387", + "1861607", + "1861796", + "1862568", + "1862681", + "1863292", + "1863647", + "1864355", + "1864404", + "1864584", + "1866475", + "1867343", + "1869438", + "1869760", + "1869851", + "1869974", + "1870168", + "1870242", + "1870449", + "1870982", + "1871206", + "1871384", + "1871695", + "1871825", + "1872346", + "1872845", + "1873021", + "1873074", + "1873408", + "1873980", + "1874152", + "1874374", + "1874624", + "1874958", + "1875103", + "1875317", + "1875650", + "1875821", + "1875849", + "1875890", + "1876280", + "1876391", + "1876536", + "1876613", + "1876846", + "1877650", + "1877937", + "1878460", + "1878838", + "1879226", + "1879451", + "1879494", + "1879512", + "1879915", + "1881145", + "1881186", + "1881825", + "1882028", + "1882902", + "1883132", + "1883373", + "1884090", + "1884194", + "1884425", + "1884886", + "1884939", + "1886069", + "1886289", + "1886576", + "1887269", + "1887682", + "1888256", + "1888455", + "1888578", + "1888698", + "1889286", + "1889936", + "1890111", + "1890369", + "1891054", + "1891305", + "1891353", + "1894469", + "1894779", + "1898261", + "1898474", + "1906451", + "1909334", + "1911078", + "1912583", + "1918607", + "1920481", + "1920704", + "1929153", + "1938213", + "1938238", + "1939401", + "1939616", + "1940447", + "1940500", + "1940797", + "1941316", + "1942857", + "1944007", + "1951549", + "1951569", + "1951645", + "1952001", + "1952029", + "1952118", + "1952222", + "1952300", + "1952446", + "1952526", + "1952736", + "1952801", + "1954555", + "1954587", + "1955508", + "1955900", + "1956434", + "1956522", + "1956545", + "1956709", + "1956900", + "1957281", + "1957545", + "1957620", + "1957829", + "1957999", + "1958023", + "1958238", + "1959381", + "1959409", + "1959668", + "1959888", + "1960592", + "1960966", + "1961066", + "1961188", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964175", + "1964392", + "1964577", + "1964936", + "1965123", + "1965758", + "1965888", + "1965967", + "1966346", + "1966883", + "1966929", + "1966982", + "1967196", + "1967242", + "1967263", + "1967583", + "1967722", + "1968199", + "1968665", + "1968854", + "1968975", + "1969918", + "1970179", + "1970226", + "1970279", + "1970574", + "1971819", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975336", + "1975542", + "1975570", + "1975729", + "1975783", + "1975885", + "1976155", + "1976515", + "1976949", + "1977104", + "1977419", + "1977775", + "1978019", + "1978112", + "1978364", + "1978506", + "1978749", + "1978814", + "1978974", + "1979106", + "1979243", + "1979727", + "1980342", + "1980511", + "1980718", + "1981690", + "1982367", + "1984922", + "1985507", + "1985969", + "1986081", + "1987269", + "1987509", + "1987555", + "1987711", + "1987792", + "1988533", + "1988779", + "1988876", + "1989161", + "1989996", + "1990136", + "1990531", + "1990677", + "1991135", + "1991357", + "1991817", + "1991946", + "1993403", + "2278098", + "3255940", + "3255956", + "3256169", + "3256188", + "3256294", + "3256322", + "3256356", + "3256568", + "3256934", + "3256950", + "3257150", + "3257220", + "3257225", + "3257328", + "3257405", + "3257500", + "3257694", + "3257798", + "3257894", + "3261008", + "4301067", + "4301098", + "4301121", + "4301340", + "4302289", + "4404424", + "4404934", + "4405245", + "4405430", + "4405493", + "4406069", + "4406268", + "4406291", + "4406298", + "4406360", + "4406622", + "4406931", + "4407165", + "4407354", + "4408190", + "4408204", + "4524069", + "4524400", + "4524792", + "4525072", + "4525607", + "4527338", + "4533124", + "4533660", + "4534405", + "4534456", + "4534532", + "4687068", + "4687943", + "4689528", + "4706578", + "4706723", + "4709385", + "5102272", + "5104758", + "5105328", + "5114254", + "5115807", + "5116471", + "5119806", + "5123346", + "5123443", + "5130576", + "5135400", + "5144176", + "5146397", + "7236046", + "7236059", + "7236098", + "7354470", + "7384515", + "7396883", + "7494486", + "7510496", + "7721234", + "7739898", + "7742506", + "7786896", + "7852351", + "8057237", + "8107362", + "8249110", + "8317469", + "8331787", + "8379138", + "8407958", + "8494978", + "8782295", + "8875114", + "8875890", + "8903953", + "8921795", + "9005880", + "9021546", + "9061491", + "9065472", + "9073940", + "9078027", + "9078901", + "9095083", + "9108102", + "9118632", + "9146182", + "9151414", + "9181278", + "9183600", + "9210500", + "9220793", + "9605252" + ], + "class_count": 691, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.7893807671430488, + "precision": 0.3234152967366763, + "recall": 0.7893807671430488, + "f1": 0.3212885858575979 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "genus", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "11064851", + "11495707", + "12031311", + "12105049", + "1730815", + "1730935", + "1731584", + "1731817", + "1731859", + "1732062", + "1732397", + "1732442", + "1732496", + "1732661", + "1733242", + "1733338", + "1733574", + "1733840", + "1734388", + "1734683", + "1735487", + "1735652", + "1735814", + "1735869", + "1736266", + "1736359", + "1736418", + "1736460", + "1736656", + "1736725", + "1736895", + "1737335", + "1737519", + "1737647", + "1737701", + "1738049", + "1738143", + "1738215", + "1738242", + "1738265", + "1738583", + "1738667", + "1739000", + "1739060", + "1739418", + "1739446", + "1739599", + "1739724", + "1740434", + "1740515", + "1740664", + "1741043", + "1741141", + "1741338", + "1741404", + "1741547", + "1741585", + "1741717", + "1742061", + "1742345", + "1742419", + "1743188", + "1743404", + "1743467", + "1743485", + "1743516", + "1743637", + "1743690", + "1743762", + "1743811", + "1744049", + "1744133", + "1744165", + "1744219", + "1744481", + "1744587", + "1744691", + "1744761", + "1744928", + "1745076", + "1745086", + "1745549", + "1746012", + "1746172", + "1746437", + "1746600", + "1746749", + "1747242", + "1747949", + "1748201", + "1748277", + "1748368", + "1748757", + "1748799", + "1748889", + "1748902", + "1749068", + "1749137", + "1749732", + "1750339", + "1751200", + "1751227", + "1755294", + "1758873", + "1759029", + "1759152", + "1759405", + "1759552", + "1760088", + "1760588", + "1760738", + "1760849", + "1761017", + "1761401", + "1761728", + "1761857", + "1762232", + "1763285", + "1763597", + "1764524", + "1764920", + "1765763", + "1765949", + "1766123", + "1766265", + "1766366", + "1766624", + "1766708", + "1767590", + "1767644", + "1768106", + "1768136", + "1768222", + "1768302", + "1768411", + "1768691", + "1769098", + "1769504", + "1769819", + "1769945", + "1770123", + "1770274", + "1770396", + "1770592", + "1771363", + "1771501", + "1772155", + "1772359", + "1772783", + "1772926", + "1775081", + "1775149", + "1775633", + "1775887", + "1775910", + "1776168", + "1776299", + "1776576", + "1776846", + "1776978", + "1777243", + "1777868", + "1778073", + "1778136", + "1778497", + "1778574", + "1778695", + "1779429", + "1779682", + "1780139", + "1780300", + "1780913", + "1781683", + "1782524", + "1782607", + "1782659", + "1783394", + "1783845", + "1784356", + "1784809", + "1785140", + "1785281", + "1785873", + "1785931", + "1786886", + "1787061", + "1787107", + "1787399", + "1787496", + "1787522", + "1788411", + "1788466", + "1788764", + "1789061", + "1789246", + "1789474", + "1789545", + "1789671", + "1789826", + "1789978", + "1790356", + "1790683", + "1790794", + "1791382", + "1791769", + "1791874", + "1792055", + "1792324", + "1792405", + "1793856", + "1793981", + "1794099", + "1794570", + "1795126", + "1795782", + "1796225", + "1796408", + "1796469", + "1796639", + "1797073", + "1798083", + "1798340", + "1798362", + "1798377", + "1798440", + "1798478", + "1798514", + "1798902", + "1799687", + "1799702", + "1799993", + "1800016", + "1801046", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1807965", + "1808720", + "1808961", + "1809069", + "1810097", + "1811612", + "1812976", + "1814095", + "1814595", + "1815226", + "1819125", + "1819252", + "1819372", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1824090", + "1824246", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827279", + "1827547", + "1827641", + "1828161", + "1828636", + "1829298", + "1829702", + "1830036", + "1830118", + "1830379", + "1830507", + "1830535", + "1830581", + "1830630", + "1830873", + "1830909", + "1831127", + "1831272", + "1831446", + "1831747", + "1831776", + "1832810", + "1833623", + "1835027", + "1835151", + "1835429", + "1836898", + "1837168", + "1837338", + "1838964", + "1839730", + "1840273", + "1841152", + "1841259", + "1841294", + "1841529", + "1842261", + "1843855", + "1843897", + "1845266", + "1845958", + "1846094", + "1846636", + "1846907", + "1847591", + "1847952", + "1848217", + "1848253", + "1848582", + "1848655", + "1848677", + "1848843", + "1849256", + "1849474", + "1849514", + "1849628", + "1849663", + "1849983", + "1850022", + "1850231", + "1850276", + "1850474", + "1850521", + "1850525", + "1850777", + "1850865", + "1851201", + "1851334", + "1851496", + "1852064", + "1852176", + "1852212", + "1852416", + "1852745", + "1852917", + "1853060", + "1853074", + "1853583", + "1853721", + "1853873", + "1854160", + "1854280", + "1854326", + "1854459", + "1854789", + "1855383", + "1856000", + "1856286", + "1856563", + "1856586", + "1856615", + "1856631", + "1856650", + "1856845", + "1857569", + "1857624", + "1857825", + "1857968", + "1858055", + "1858529", + "1858722", + "1859036", + "1859082", + "1860403", + "1860613", + "1860657", + "1861151", + "1861387", + "1861607", + "1862568", + "1862681", + "1863292", + "1863647", + "1864153", + "1864355", + "1864404", + "1864584", + "1866475", + "1867810", + "1869438", + "1869504", + "1869760", + "1869974", + "1870168", + "1870242", + "1870449", + "1870982", + "1871157", + "1871206", + "1871384", + "1871695", + "1871825", + "1872346", + "1872845", + "1873074", + "1873408", + "1873980", + "1874152", + "1874374", + "1874958", + "1875103", + "1875317", + "1875600", + "1875650", + "1875821", + "1875849", + "1875890", + "1876280", + "1876391", + "1876536", + "1876846", + "1877292", + "1877650", + "1877937", + "1878460", + "1878757", + "1878838", + "1879226", + "1879451", + "1879494", + "1879512", + "1879915", + "1881145", + "1881186", + "1881601", + "1881825", + "1882028", + "1882413", + "1882902", + "1883132", + "1883373", + "1884090", + "1884194", + "1884425", + "1884886", + "1884939", + "1886069", + "1886289", + "1886576", + "1887269", + "1887682", + "1888256", + "1888578", + "1888698", + "1889936", + "1890111", + "1890369", + "1891054", + "1891305", + "1891353", + "1894469", + "1894779", + "1895130", + "1906451", + "1911078", + "1912319", + "1913456", + "1918607", + "1920481", + "1920554", + "1920704", + "1939401", + "1939616", + "1940447", + "1940500", + "1940797", + "1941316", + "1951549", + "1951569", + "1951645", + "1952001", + "1952029", + "1952118", + "1952222", + "1952300", + "1952446", + "1952526", + "1952736", + "1952801", + "1954555", + "1954587", + "1955508", + "1955900", + "1956434", + "1956522", + "1956545", + "1956900", + "1957193", + "1957281", + "1957545", + "1957620", + "1957829", + "1957999", + "1958023", + "1958238", + "1959381", + "1959409", + "1959888", + "1960592", + "1960966", + "1961066", + "1961188", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964175", + "1964392", + "1964577", + "1964936", + "1965123", + "1965758", + "1965888", + "1965967", + "1966346", + "1966883", + "1966929", + "1966982", + "1967196", + "1967242", + "1967263", + "1967583", + "1967722", + "1968199", + "1968665", + "1968854", + "1968975", + "1969122", + "1970179", + "1970226", + "1970279", + "1970574", + "1971819", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975336", + "1975542", + "1975570", + "1975729", + "1975783", + "1975885", + "1976155", + "1976515", + "1976949", + "1977104", + "1977419", + "1977775", + "1978019", + "1978112", + "1978364", + "1978506", + "1978749", + "1978814", + "1978974", + "1979106", + "1979243", + "1979727", + "1980342", + "1980511", + "1980718", + "1981690", + "1982367", + "1984731", + "1984922", + "1985507", + "1985969", + "1986081", + "1987269", + "1987509", + "1987711", + "1987792", + "1988533", + "1988779", + "1988876", + "1989161", + "1989996", + "1990136", + "1990531", + "1990677", + "1991135", + "1991357", + "1991817", + "1991946", + "1993403", + "2278098", + "3255940", + "3255956", + "3256169", + "3256188", + "3256294", + "3256322", + "3256568", + "3256934", + "3256950", + "3257150", + "3257152", + "3257220", + "3257225", + "3257328", + "3257405", + "3257500", + "3257694", + "3257798", + "3257894", + "3261008", + "4301067", + "4301098", + "4301121", + "4301340", + "4302289", + "4404424", + "4404729", + "4404934", + "4405245", + "4405430", + "4405493", + "4405983", + "4406069", + "4406268", + "4406291", + "4406298", + "4406360", + "4406622", + "4406931", + "4407138", + "4407165", + "4407310", + "4407354", + "4408190", + "4408204", + "4524069", + "4524400", + "4524792", + "4524913", + "4525072", + "4525607", + "4527338", + "4529834", + "4533124", + "4533660", + "4534405", + "4534456", + "4534532", + "4684145", + "4687068", + "4687943", + "4689528", + "4706578", + "4706723", + "4709385", + "5105328", + "5110641", + "5114254", + "5115807", + "5116471", + "5123346", + "5123443", + "5144176", + "5146397", + "7236046", + "7236091", + "7354470", + "7384515", + "7396883", + "7494486", + "7721234", + "7739898", + "7742506", + "7852351", + "8057237", + "8107362", + "8249110", + "8317469", + "8331787", + "8379138", + "8407958", + "8494978", + "8782295", + "8875890", + "8903953", + "8921795", + "8936210", + "9021546", + "9026655", + "9046214", + "9061491", + "9065472", + "9073940", + "9078027", + "9078901", + "9095083", + "9108102", + "9118632", + "9146182", + "9151414", + "9181278", + "9183600", + "9210500", + "9220793" + ], + "class_count": 713, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8053026558890463, + "precision": 0.3221313136590873, + "recall": 0.8053026558890463, + "f1": 0.32303518958456984 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "genus", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "11064851", + "11495707", + "12031311", + "12105049", + "1730815", + "1730935", + "1731584", + "1731817", + "1731859", + "1732062", + "1732397", + "1732442", + "1732496", + "1732661", + "1733242", + "1733338", + "1733574", + "1733840", + "1734388", + "1734683", + "1735487", + "1735652", + "1735814", + "1735869", + "1736266", + "1736359", + "1736418", + "1736460", + "1736656", + "1736725", + "1736895", + "1737335", + "1737519", + "1737647", + "1737701", + "1738049", + "1738143", + "1738215", + "1738242", + "1738265", + "1738583", + "1738667", + "1739000", + "1739060", + "1739418", + "1739446", + "1739599", + "1739724", + "1740434", + "1740515", + "1740664", + "1741043", + "1741141", + "1741338", + "1741404", + "1741547", + "1741585", + "1741717", + "1742061", + "1742345", + "1742419", + "1743188", + "1743404", + "1743467", + "1743485", + "1743516", + "1743637", + "1743690", + "1743762", + "1743811", + "1744049", + "1744133", + "1744165", + "1744219", + "1744481", + "1744587", + "1744691", + "1744761", + "1744928", + "1745076", + "1745086", + "1745549", + "1746012", + "1746172", + "1746437", + "1746600", + "1746749", + "1747242", + "1747949", + "1748201", + "1748277", + "1748368", + "1748799", + "1748889", + "1748902", + "1749068", + "1749137", + "1749732", + "1750339", + "1751200", + "1751227", + "1755294", + "1758873", + "1759029", + "1759152", + "1759405", + "1759552", + "1760088", + "1760588", + "1760738", + "1760849", + "1761017", + "1761401", + "1761728", + "1761857", + "1762232", + "1763285", + "1763597", + "1764524", + "1764920", + "1765763", + "1765949", + "1766123", + "1766265", + "1766366", + "1766624", + "1766708", + "1767590", + "1767644", + "1768106", + "1768136", + "1768222", + "1768302", + "1768411", + "1768691", + "1769098", + "1769504", + "1769819", + "1769945", + "1770123", + "1770274", + "1770396", + "1770592", + "1771363", + "1771501", + "1772155", + "1772359", + "1772783", + "1772926", + "1775081", + "1775149", + "1775633", + "1775887", + "1775910", + "1776168", + "1776299", + "1776576", + "1776846", + "1776978", + "1777243", + "1777868", + "1778073", + "1778136", + "1778497", + "1778574", + "1778695", + "1779429", + "1779682", + "1780139", + "1780300", + "1780913", + "1781683", + "1782524", + "1782607", + "1782659", + "1783394", + "1783845", + "1784356", + "1784809", + "1785140", + "1785281", + "1785873", + "1785931", + "1786886", + "1787061", + "1787107", + "1787399", + "1787496", + "1787522", + "1788411", + "1788466", + "1788764", + "1789061", + "1789246", + "1789474", + "1789545", + "1789671", + "1789826", + "1789978", + "1790356", + "1790683", + "1790794", + "1791382", + "1791769", + "1791874", + "1792055", + "1792324", + "1792405", + "1793856", + "1793981", + "1794099", + "1794570", + "1795126", + "1795782", + "1796225", + "1796408", + "1796469", + "1796639", + "1797073", + "1798083", + "1798340", + "1798362", + "1798377", + "1798440", + "1798478", + "1798514", + "1798902", + "1799687", + "1799702", + "1799993", + "1800016", + "1801046", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1807965", + "1808720", + "1808961", + "1809069", + "1810097", + "1811612", + "1812976", + "1814095", + "1814595", + "1815226", + "1819125", + "1819252", + "1819372", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1824090", + "1824246", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827279", + "1827547", + "1827641", + "1828161", + "1828636", + "1829298", + "1829702", + "1830036", + "1830118", + "1830379", + "1830507", + "1830535", + "1830581", + "1830630", + "1830873", + "1830909", + "1831127", + "1831272", + "1831446", + "1831747", + "1831776", + "1832810", + "1833623", + "1835027", + "1835151", + "1835429", + "1836898", + "1837168", + "1837338", + "1838964", + "1839730", + "1840273", + "1841152", + "1841259", + "1841294", + "1841529", + "1842261", + "1843855", + "1843897", + "1845266", + "1845958", + "1846094", + "1846636", + "1846907", + "1847591", + "1847952", + "1848217", + "1848253", + "1848582", + "1848655", + "1848677", + "1848843", + "1849256", + "1849474", + "1849514", + "1849628", + "1849663", + "1849983", + "1850022", + "1850231", + "1850276", + "1850474", + "1850521", + "1850525", + "1850777", + "1850865", + "1851201", + "1851334", + "1851496", + "1852064", + "1852176", + "1852212", + "1852416", + "1852745", + "1852917", + "1853060", + "1853074", + "1853583", + "1853721", + "1853873", + "1854160", + "1854280", + "1854326", + "1854459", + "1854789", + "1855383", + "1856000", + "1856286", + "1856563", + "1856586", + "1856615", + "1856631", + "1856650", + "1856845", + "1857569", + "1857624", + "1857825", + "1857968", + "1858055", + "1858529", + "1858722", + "1859036", + "1859082", + "1860403", + "1860613", + "1860657", + "1861151", + "1861387", + "1861607", + "1862568", + "1862681", + "1863292", + "1863647", + "1864153", + "1864355", + "1864404", + "1864584", + "1866475", + "1867810", + "1869438", + "1869504", + "1869760", + "1869974", + "1870168", + "1870242", + "1870449", + "1870982", + "1871157", + "1871206", + "1871384", + "1871695", + "1871825", + "1872346", + "1872845", + "1873074", + "1873408", + "1873980", + "1874152", + "1874374", + "1874958", + "1875103", + "1875317", + "1875600", + "1875650", + "1875821", + "1875849", + "1875890", + "1876280", + "1876391", + "1876536", + "1876846", + "1877292", + "1877650", + "1877937", + "1878460", + "1878757", + "1878838", + "1879226", + "1879451", + "1879494", + "1879512", + "1879915", + "1881145", + "1881186", + "1881601", + "1881825", + "1882028", + "1882413", + "1882902", + "1883132", + "1883373", + "1884090", + "1884194", + "1884425", + "1884886", + "1884939", + "1886069", + "1886289", + "1886576", + "1887269", + "1887682", + "1888256", + "1888578", + "1888698", + "1889936", + "1890111", + "1890369", + "1891054", + "1891305", + "1891353", + "1894469", + "1894779", + "1895130", + "1906451", + "1911078", + "1912319", + "1913456", + "1918607", + "1920481", + "1920554", + "1920704", + "1939401", + "1939616", + "1940447", + "1940500", + "1940797", + "1941316", + "1951549", + "1951569", + "1951645", + "1952001", + "1952029", + "1952118", + "1952222", + "1952300", + "1952446", + "1952526", + "1952736", + "1952801", + "1954555", + "1954587", + "1955508", + "1955900", + "1956434", + "1956522", + "1956545", + "1956900", + "1957193", + "1957281", + "1957545", + "1957620", + "1957829", + "1957999", + "1958023", + "1958238", + "1959381", + "1959409", + "1959888", + "1960592", + "1960966", + "1961066", + "1961188", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964175", + "1964392", + "1964577", + "1964936", + "1965123", + "1965758", + "1965888", + "1965967", + "1966346", + "1966883", + "1966929", + "1966982", + "1967196", + "1967242", + "1967263", + "1967583", + "1967722", + "1968199", + "1968665", + "1968854", + "1968975", + "1969122", + "1970179", + "1970226", + "1970279", + "1970574", + "1971819", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975336", + "1975542", + "1975570", + "1975729", + "1975783", + "1975885", + "1976155", + "1976515", + "1976949", + "1977104", + "1977419", + "1977775", + "1978019", + "1978112", + "1978364", + "1978506", + "1978749", + "1978814", + "1978974", + "1979106", + "1979243", + "1979727", + "1980342", + "1980511", + "1980718", + "1981690", + "1982367", + "1984731", + "1984922", + "1985507", + "1985969", + "1986081", + "1987269", + "1987509", + "1987711", + "1988533", + "1988779", + "1988876", + "1989161", + "1989996", + "1990136", + "1990531", + "1990677", + "1991135", + "1991357", + "1991817", + "1991946", + "1993403", + "2278098", + "3255940", + "3255956", + "3256169", + "3256188", + "3256294", + "3256322", + "3256568", + "3256934", + "3256950", + "3257150", + "3257152", + "3257220", + "3257225", + "3257328", + "3257405", + "3257500", + "3257694", + "3257798", + "3257894", + "3261008", + "4301067", + "4301098", + "4301121", + "4301340", + "4302289", + "4404424", + "4404729", + "4404934", + "4405245", + "4405430", + "4405493", + "4405983", + "4406069", + "4406268", + "4406291", + "4406298", + "4406360", + "4406622", + "4406931", + "4407138", + "4407165", + "4407310", + "4407354", + "4408190", + "4408204", + "4524069", + "4524400", + "4524792", + "4524913", + "4525072", + "4525607", + "4527338", + "4529834", + "4533124", + "4533660", + "4534405", + "4534456", + "4534532", + "4684145", + "4687068", + "4687943", + "4689528", + "4706578", + "4706723", + "4709385", + "5105328", + "5110641", + "5114254", + "5115807", + "5116471", + "5123346", + "5123443", + "5144176", + "5146397", + "7236046", + "7236091", + "7354470", + "7384515", + "7396883", + "7494486", + "7721234", + "7739898", + "7742506", + "7852351", + "8057237", + "8107362", + "8249110", + "8317469", + "8331787", + "8379138", + "8407958", + "8494978", + "8782295", + "8875890", + "8903953", + "8921795", + "8936210", + "9021546", + "9026655", + "9046214", + "9061491", + "9065472", + "9073940", + "9078901", + "9095083", + "9108102", + "9118632", + "9146182", + "9151414", + "9181278", + "9183600", + "9210500", + "9220793" + ], + "class_count": 710, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8053599793321786, + "precision": 0.32303901654923867, + "recall": 0.8053599793321786, + "f1": 0.32445203101159475 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "genus", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "11495707", + "12031311", + "12105049", + "1730935", + "1731584", + "1731817", + "1731859", + "1732062", + "1732397", + "1732442", + "1732496", + "1732661", + "1733242", + "1733338", + "1733840", + "1734388", + "1734683", + "1735487", + "1735631", + "1735814", + "1735869", + "1736266", + "1736359", + "1736418", + "1736460", + "1737335", + "1737519", + "1737647", + "1737701", + "1738049", + "1738143", + "1738215", + "1738242", + "1738265", + "1738583", + "1738667", + "1739000", + "1739060", + "1739336", + "1739418", + "1739446", + "1739724", + "1740434", + "1740515", + "1740664", + "1741141", + "1741338", + "1741404", + "1741540", + "1741585", + "1741717", + "1742061", + "1742419", + "1743188", + "1743467", + "1743485", + "1743516", + "1743637", + "1743690", + "1743762", + "1743811", + "1744049", + "1744133", + "1744165", + "1744219", + "1744481", + "1744587", + "1744691", + "1744761", + "1745076", + "1745086", + "1745549", + "1746012", + "1746172", + "1746437", + "1746600", + "1746749", + "1747242", + "1747949", + "1748201", + "1748277", + "1748757", + "1748799", + "1748902", + "1749068", + "1749137", + "1749732", + "1750339", + "1750759", + "1751200", + "1751227", + "1755294", + "1758873", + "1759029", + "1759152", + "1759405", + "1759552", + "1760088", + "1760588", + "1760738", + "1760849", + "1761017", + "1761094", + "1761401", + "1761728", + "1761857", + "1762232", + "1763285", + "1763597", + "1764524", + "1764920", + "1765763", + "1765949", + "1766123", + "1766265", + "1766366", + "1766624", + "1766708", + "1767590", + "1767644", + "1768106", + "1768136", + "1768222", + "1768302", + "1768411", + "1768691", + "1769051", + "1769098", + "1769504", + "1769819", + "1769945", + "1770123", + "1770274", + "1770396", + "1770592", + "1771363", + "1771501", + "1772155", + "1772359", + "1772783", + "1772926", + "1775081", + "1775149", + "1775633", + "1775887", + "1775910", + "1776168", + "1776299", + "1776576", + "1776846", + "1776978", + "1777243", + "1777868", + "1778073", + "1778136", + "1778497", + "1778574", + "1778695", + "1779429", + "1779682", + "1780139", + "1780300", + "1780913", + "1781683", + "1782524", + "1782607", + "1782659", + "1783394", + "1784356", + "1784809", + "1785140", + "1785281", + "1785873", + "1785931", + "1786886", + "1787061", + "1787107", + "1787399", + "1787496", + "1787522", + "1788411", + "1788466", + "1789061", + "1789246", + "1789474", + "1789545", + "1789671", + "1789826", + "1789978", + "1790356", + "1790683", + "1790794", + "1791382", + "1791769", + "1791874", + "1792055", + "1792324", + "1792405", + "1793856", + "1793981", + "1794099", + "1794570", + "1795126", + "1795782", + "1796225", + "1796408", + "1796469", + "1796639", + "1797073", + "1798083", + "1798340", + "1798362", + "1798377", + "1798440", + "1798478", + "1798514", + "1798902", + "1799687", + "1799702", + "1799789", + "1799993", + "1800016", + "1801046", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1807965", + "1808720", + "1808961", + "1809069", + "1810097", + "1811612", + "1812976", + "1814095", + "1815226", + "1819125", + "1819252", + "1819372", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1824090", + "1824246", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827279", + "1827547", + "1827641", + "1828161", + "1828636", + "1829298", + "1829702", + "1830036", + "1830118", + "1830355", + "1830379", + "1830507", + "1830535", + "1830581", + "1830630", + "1830799", + "1830873", + "1830909", + "1831127", + "1831446", + "1831747", + "1831776", + "1832810", + "1833623", + "1835027", + "1835151", + "1835429", + "1836898", + "1837168", + "1837338", + "1839258", + "1839730", + "1840273", + "1841152", + "1841259", + "1841294", + "1841529", + "1842261", + "1843855", + "1843897", + "1845266", + "1845958", + "1846094", + "1846636", + "1846907", + "1847952", + "1848253", + "1848374", + "1848655", + "1848843", + "1849256", + "1849474", + "1849663", + "1849983", + "1850231", + "1850276", + "1850474", + "1850521", + "1850525", + "1850777", + "1850865", + "1851201", + "1851334", + "1851496", + "1852064", + "1852176", + "1852212", + "1852745", + "1852917", + "1853060", + "1853074", + "1853721", + "1853873", + "1854160", + "1854326", + "1854459", + "1855383", + "1856286", + "1856563", + "1856586", + "1856631", + "1856650", + "1856766", + "1856845", + "1857569", + "1857624", + "1857825", + "1857968", + "1858055", + "1858529", + "1858722", + "1859082", + "1860613", + "1860657", + "1860720", + "1861151", + "1861387", + "1861607", + "1862568", + "1862681", + "1863292", + "1863647", + "1864153", + "1864355", + "1864404", + "1864584", + "1867343", + "1867810", + "1869438", + "1869504", + "1869760", + "1869974", + "1870168", + "1870242", + "1870449", + "1870982", + "1871157", + "1871206", + "1871384", + "1871695", + "1872346", + "1872845", + "1873074", + "1873408", + "1873980", + "1874152", + "1874374", + "1874958", + "1875103", + "1875317", + "1875600", + "1875650", + "1875849", + "1875890", + "1876280", + "1876391", + "1876536", + "1877292", + "1877937", + "1878460", + "1878578", + "1878838", + "1879226", + "1879451", + "1879494", + "1879512", + "1879915", + "1881145", + "1881186", + "1881825", + "1882028", + "1882413", + "1883132", + "1883373", + "1884090", + "1884194", + "1884425", + "1884886", + "1884939", + "1886069", + "1886289", + "1886576", + "1887269", + "1887682", + "1888256", + "1888578", + "1888698", + "1889936", + "1890111", + "1890369", + "1891054", + "1891305", + "1891353", + "1892238", + "1894469", + "1895130", + "1902519", + "1906451", + "1913456", + "1918607", + "1920481", + "1920554", + "1920704", + "1939401", + "1939616", + "1940133", + "1940447", + "1940500", + "1940797", + "1941316", + "1942857", + "1949704", + "1951549", + "1951569", + "1951645", + "1952001", + "1952029", + "1952118", + "1952222", + "1952300", + "1952446", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956434", + "1956522", + "1956545", + "1957193", + "1957281", + "1957545", + "1957620", + "1957829", + "1957999", + "1958023", + "1959381", + "1959888", + "1960592", + "1960966", + "1961066", + "1962165", + "1962369", + "1962632", + "1962857", + "1962956", + "1962995", + "1963299", + "1963445", + "1964175", + "1964392", + "1964577", + "1964936", + "1965123", + "1965758", + "1965888", + "1965967", + "1966346", + "1966883", + "1966929", + "1966982", + "1967196", + "1967242", + "1967263", + "1967583", + "1967722", + "1968199", + "1968665", + "1968854", + "1968975", + "1969122", + "1970179", + "1970226", + "1970279", + "1970574", + "1971819", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975336", + "1975542", + "1975570", + "1975885", + "1976155", + "1976515", + "1976949", + "1977104", + "1977419", + "1977775", + "1978019", + "1978112", + "1978364", + "1978506", + "1978607", + "1978749", + "1978814", + "1978974", + "1979106", + "1979243", + "1979727", + "1980342", + "1980511", + "1980718", + "1981690", + "1982367", + "1984731", + "1984922", + "1985507", + "1985969", + "1986081", + "1987269", + "1987509", + "1987711", + "1988533", + "1988779", + "1988876", + "1989161", + "1989996", + "1990136", + "1990531", + "1990677", + "1991135", + "1991357", + "1991817", + "1991946", + "1993403", + "2278098", + "3255940", + "3255956", + "3256169", + "3256188", + "3256294", + "3256322", + "3256568", + "3256934", + "3256950", + "3257150", + "3257152", + "3257220", + "3257225", + "3257328", + "3257500", + "3257694", + "3257798", + "3257894", + "3261008", + "4301098", + "4301121", + "4301340", + "4302289", + "4404424", + "4404729", + "4404934", + "4405245", + "4405430", + "4405493", + "4405983", + "4406069", + "4406268", + "4406291", + "4406298", + "4406360", + "4406622", + "4406931", + "4407138", + "4407165", + "4407310", + "4407354", + "4408190", + "4524069", + "4524400", + "4524792", + "4525072", + "4525607", + "4527338", + "4533124", + "4533660", + "4534405", + "4534456", + "4534532", + "4684145", + "4687068", + "4687943", + "4689528", + "4706578", + "4706723", + "4709385", + "5105328", + "5110641", + "5114254", + "5115807", + "5116471", + "5123346", + "5123443", + "5144176", + "5146397", + "7236046", + "7236091", + "7354470", + "7384515", + "7396883", + "7494486", + "7721234", + "7739898", + "7742506", + "7852351", + "8057237", + "8107362", + "8249110", + "8317469", + "8331787", + "8379138", + "8407958", + "8494978", + "8782295", + "8875890", + "8903953", + "8921795", + "8936210", + "9021546", + "9026655", + "9061491", + "9065472", + "9073940", + "9078901", + "9095083", + "9108102", + "9118632", + "9146182", + "9151414", + "9181278", + "9183600", + "9210500", + "9220793" + ], + "class_count": 674, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8312879946116835, + "precision": 0.3578921081808226, + "recall": 0.8312879946116835, + "f1": 0.3600905137263134 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "genus", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "11495707", + "12031311", + "12105049", + "1730935", + "1731584", + "1731817", + "1731859", + "1732062", + "1732397", + "1732442", + "1732496", + "1732661", + "1733242", + "1733338", + "1733840", + "1734388", + "1734683", + "1735487", + "1735631", + "1735814", + "1735869", + "1736266", + "1736359", + "1736418", + "1736460", + "1737335", + "1737519", + "1737647", + "1737701", + "1738049", + "1738143", + "1738215", + "1738242", + "1738265", + "1738583", + "1738667", + "1739000", + "1739060", + "1739336", + "1739418", + "1739446", + "1739724", + "1740434", + "1740515", + "1740664", + "1741141", + "1741338", + "1741404", + "1741540", + "1741585", + "1741717", + "1742061", + "1742419", + "1743188", + "1743467", + "1743485", + "1743516", + "1743637", + "1743690", + "1743762", + "1743811", + "1744049", + "1744133", + "1744165", + "1744219", + "1744481", + "1744587", + "1744691", + "1744761", + "1745076", + "1745086", + "1745549", + "1746012", + "1746172", + "1746437", + "1746600", + "1746749", + "1747242", + "1747949", + "1748201", + "1748277", + "1748757", + "1748799", + "1748902", + "1749068", + "1749137", + "1749732", + "1750339", + "1750759", + "1751200", + "1751227", + "1755294", + "1758873", + "1759029", + "1759152", + "1759405", + "1759552", + "1760088", + "1760588", + "1760738", + "1760849", + "1761017", + "1761094", + "1761401", + "1761728", + "1761857", + "1762232", + "1763285", + "1763597", + "1764524", + "1764920", + "1765763", + "1765949", + "1766123", + "1766265", + "1766366", + "1766624", + "1766708", + "1767590", + "1767644", + "1768106", + "1768136", + "1768222", + "1768302", + "1768411", + "1768691", + "1769051", + "1769098", + "1769504", + "1769819", + "1769945", + "1770123", + "1770274", + "1770396", + "1770592", + "1771363", + "1771501", + "1772155", + "1772359", + "1772783", + "1772926", + "1775081", + "1775149", + "1775633", + "1775887", + "1775910", + "1776168", + "1776299", + "1776576", + "1776846", + "1776978", + "1777243", + "1777868", + "1778073", + "1778136", + "1778497", + "1778574", + "1778695", + "1779429", + "1779682", + "1780139", + "1780300", + "1780913", + "1781683", + "1782524", + "1782607", + "1782659", + "1783394", + "1784356", + "1784809", + "1785140", + "1785281", + "1785873", + "1785931", + "1786886", + "1787061", + "1787107", + "1787399", + "1787496", + "1787522", + "1788411", + "1788466", + "1789061", + "1789246", + "1789474", + "1789545", + "1789671", + "1789826", + "1789978", + "1790356", + "1790683", + "1790794", + "1791382", + "1791769", + "1791874", + "1792055", + "1792324", + "1792405", + "1793856", + "1793981", + "1794099", + "1794570", + "1795126", + "1795782", + "1796225", + "1796408", + "1796469", + "1796639", + "1797073", + "1798083", + "1798340", + "1798362", + "1798377", + "1798440", + "1798478", + "1798514", + "1798902", + "1799687", + "1799702", + "1799789", + "1799993", + "1800016", + "1801046", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1807965", + "1808720", + "1808961", + "1809069", + "1810097", + "1811612", + "1812976", + "1814095", + "1815226", + "1819125", + "1819252", + "1819372", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1824090", + "1824246", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827279", + "1827547", + "1827641", + "1828161", + "1828636", + "1829298", + "1829702", + "1830036", + "1830118", + "1830355", + "1830379", + "1830507", + "1830535", + "1830581", + "1830630", + "1830799", + "1830873", + "1830909", + "1831127", + "1831446", + "1831747", + "1831776", + "1832810", + "1833623", + "1835027", + "1835151", + "1835429", + "1836898", + "1837168", + "1837338", + "1839258", + "1839730", + "1840273", + "1841152", + "1841259", + "1841294", + "1841529", + "1842261", + "1843855", + "1843897", + "1845266", + "1845958", + "1846094", + "1846636", + "1846907", + "1847952", + "1848253", + "1848374", + "1848655", + "1848843", + "1849256", + "1849474", + "1849663", + "1849983", + "1850231", + "1850276", + "1850474", + "1850521", + "1850525", + "1850777", + "1850865", + "1851201", + "1851334", + "1851496", + "1852064", + "1852176", + "1852212", + "1852745", + "1852917", + "1853060", + "1853074", + "1853721", + "1853873", + "1854160", + "1854326", + "1854459", + "1855383", + "1856286", + "1856563", + "1856586", + "1856631", + "1856650", + "1856766", + "1856845", + "1857569", + "1857624", + "1857825", + "1857968", + "1858055", + "1858529", + "1858722", + "1859082", + "1860613", + "1860657", + "1860720", + "1861151", + "1861387", + "1861607", + "1862568", + "1862681", + "1863292", + "1863647", + "1864153", + "1864355", + "1864404", + "1864584", + "1867343", + "1867810", + "1869438", + "1869504", + "1869760", + "1869974", + "1870168", + "1870242", + "1870449", + "1870982", + "1871157", + "1871206", + "1871384", + "1871695", + "1872346", + "1872845", + "1873074", + "1873408", + "1873980", + "1874152", + "1874374", + "1874958", + "1875103", + "1875317", + "1875600", + "1875650", + "1875849", + "1875890", + "1876280", + "1876391", + "1876536", + "1877292", + "1877937", + "1878460", + "1878838", + "1879226", + "1879451", + "1879494", + "1879512", + "1879915", + "1881145", + "1881186", + "1881825", + "1882028", + "1882413", + "1883132", + "1883373", + "1884090", + "1884194", + "1884425", + "1884886", + "1884939", + "1886069", + "1886289", + "1886576", + "1887269", + "1887682", + "1888256", + "1888578", + "1888698", + "1889936", + "1890111", + "1890369", + "1891054", + "1891305", + "1891353", + "1892238", + "1894469", + "1895130", + "1902519", + "1906451", + "1913456", + "1918607", + "1920481", + "1920554", + "1920704", + "1939401", + "1939616", + "1940133", + "1940447", + "1940500", + "1940797", + "1941316", + "1942857", + "1949704", + "1951549", + "1951569", + "1951645", + "1952001", + "1952029", + "1952118", + "1952222", + "1952300", + "1952446", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956434", + "1956522", + "1956545", + "1957193", + "1957281", + "1957545", + "1957620", + "1957829", + "1957999", + "1958023", + "1959381", + "1959888", + "1960592", + "1960966", + "1961066", + "1962165", + "1962369", + "1962632", + "1962857", + "1962956", + "1962995", + "1963299", + "1963445", + "1964175", + "1964392", + "1964577", + "1964936", + "1965123", + "1965758", + "1965888", + "1965967", + "1966346", + "1966883", + "1966929", + "1966982", + "1967196", + "1967242", + "1967263", + "1967583", + "1967722", + "1968199", + "1968665", + "1968854", + "1968975", + "1969122", + "1970179", + "1970226", + "1970279", + "1970574", + "1971819", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975336", + "1975542", + "1975570", + "1975885", + "1976155", + "1976515", + "1976949", + "1977104", + "1977419", + "1977775", + "1978019", + "1978112", + "1978364", + "1978506", + "1978607", + "1978749", + "1978814", + "1978974", + "1979106", + "1979243", + "1979727", + "1980342", + "1980511", + "1980718", + "1981690", + "1982367", + "1984731", + "1984922", + "1985507", + "1985969", + "1986081", + "1987269", + "1987509", + "1987711", + "1988533", + "1988779", + "1988876", + "1989161", + "1989996", + "1990136", + "1990531", + "1990677", + "1991135", + "1991357", + "1991817", + "1991946", + "1993403", + "2278098", + "3255940", + "3255956", + "3256169", + "3256188", + "3256294", + "3256322", + "3256568", + "3256934", + "3256950", + "3257150", + "3257152", + "3257220", + "3257225", + "3257328", + "3257500", + "3257694", + "3257798", + "3257894", + "3261008", + "4301098", + "4301121", + "4301340", + "4302289", + "4404424", + "4404729", + "4404934", + "4405245", + "4405430", + "4405493", + "4405983", + "4406069", + "4406268", + "4406291", + "4406298", + "4406360", + "4406622", + "4406931", + "4407138", + "4407165", + "4407310", + "4407354", + "4408190", + "4524069", + "4524400", + "4524792", + "4525072", + "4525607", + "4527338", + "4533124", + "4533660", + "4534405", + "4534456", + "4534532", + "4684145", + "4687068", + "4687943", + "4689528", + "4706578", + "4706723", + "4709385", + "5105328", + "5110641", + "5114254", + "5115807", + "5116471", + "5123346", + "5123443", + "5144176", + "5146397", + "7236046", + "7236091", + "7354470", + "7384515", + "7396883", + "7494486", + "7721234", + "7739898", + "7742506", + "7852351", + "8057237", + "8107362", + "8249110", + "8317469", + "8331787", + "8379138", + "8407958", + "8494978", + "8782295", + "8875890", + "8903953", + "8921795", + "8936210", + "9021546", + "9026655", + "9061491", + "9065472", + "9073940", + "9078901", + "9095083", + "9108102", + "9118632", + "9146182", + "9151414", + "9181278", + "9183600", + "9210500", + "9220793" + ], + "class_count": 673, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.831310673030869, + "precision": 0.358198292987242, + "recall": 0.831310673030869, + "f1": 0.3604852264440997 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1786886", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975570", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 244, + "truth_images_in_retained_classes": 52582, + "accepted_predictions_in_retained_classes": 44975, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8198886444355898, + "precision": 0.8176206331689666, + "recall": 0.8198886444355898, + "f1": 0.7926029899466808 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 242, + "truth_images_in_retained_classes": 52567, + "accepted_predictions_in_retained_classes": 44953, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8206876060779148, + "precision": 0.8201078560326218, + "recall": 0.8206876060779148, + "f1": 0.7941995832133611 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 242, + "truth_images_in_retained_classes": 52567, + "accepted_predictions_in_retained_classes": 44773, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8383310164872881, + "precision": 0.8166147950822782, + "recall": 0.8383310164872881, + "f1": 0.8056571781128058 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 242, + "truth_images_in_retained_classes": 52567, + "accepted_predictions_in_retained_classes": 44773, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8383310164872881, + "precision": 0.8166147950822782, + "recall": 0.8383310164872881, + "f1": 0.8056571781128058 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 242, + "truth_images_in_retained_classes": 52567, + "accepted_predictions_in_retained_classes": 44776, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8384072898289766, + "precision": 0.816294692710962, + "recall": 0.8384072898289766, + "f1": 0.8055261341500324 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 242, + "truth_images_in_retained_classes": 52567, + "accepted_predictions_in_retained_classes": 44776, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8384072898289766, + "precision": 0.816294692710962, + "recall": 0.8384072898289766, + "f1": 0.8055261341500324 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1786886", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 243, + "truth_images_in_retained_classes": 52575, + "accepted_predictions_in_retained_classes": 45481, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8642862537522121, + "precision": 0.8433344795518118, + "recall": 0.8642862537522121, + "f1": 0.8345738246636738 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 242, + "truth_images_in_retained_classes": 52567, + "accepted_predictions_in_retained_classes": 45474, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8642419820735022, + "precision": 0.8426871013681416, + "recall": 0.8642419820735022, + "f1": 0.8341657275204107 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1786886", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 243, + "truth_images_in_retained_classes": 52575, + "accepted_predictions_in_retained_classes": 45485, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8643163049908037, + "precision": 0.8430323470999014, + "recall": 0.8643163049908037, + "f1": 0.8343804242225068 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 242, + "truth_images_in_retained_classes": 52567, + "accepted_predictions_in_retained_classes": 45478, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8642721574907657, + "precision": 0.842383720435025, + "recall": 0.8642721574907657, + "f1": 0.8339715279038671 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "genus", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 221, + "truth_images_in_retained_classes": 52377, + "accepted_predictions_in_retained_classes": 44619, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8242091812881619, + "precision": 0.8349759270593795, + "recall": 0.8242091812881619, + "f1": 0.8073029077289686 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "genus", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 218, + "truth_images_in_retained_classes": 52338, + "accepted_predictions_in_retained_classes": 44570, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8246759171734157, + "precision": 0.8375222344229503, + "recall": 0.8246759171734157, + "f1": 0.8087106982251911 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "genus", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 224, + "truth_images_in_retained_classes": 52409, + "accepted_predictions_in_retained_classes": 44500, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8420595718087585, + "precision": 0.836005162953821, + "recall": 0.8420595718087585, + "f1": 0.8201488914933475 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "genus", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 218, + "truth_images_in_retained_classes": 52338, + "accepted_predictions_in_retained_classes": 44425, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8440854196075196, + "precision": 0.8391956132162525, + "recall": 0.8440854196075196, + "f1": 0.8223122767531698 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "genus", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 224, + "truth_images_in_retained_classes": 52409, + "accepted_predictions_in_retained_classes": 44504, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8421419742582609, + "precision": 0.8355105285467144, + "recall": 0.8421419742582609, + "f1": 0.8198882695930892 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "genus", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 218, + "truth_images_in_retained_classes": 52338, + "accepted_predictions_in_retained_classes": 44429, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8441700900143477, + "precision": 0.8386873650181248, + "recall": 0.8441700900143477, + "f1": 0.8220444817730879 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 222, + "truth_images_in_retained_classes": 52384, + "accepted_predictions_in_retained_classes": 45193, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8724264504229726, + "precision": 0.8640463448274117, + "recall": 0.8724264504229726, + "f1": 0.8517515085475365 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 218, + "truth_images_in_retained_classes": 52338, + "accepted_predictions_in_retained_classes": 45144, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8724594243641395, + "precision": 0.864908517355292, + "recall": 0.8724594243641395, + "f1": 0.8519555844726405 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 222, + "truth_images_in_retained_classes": 52384, + "accepted_predictions_in_retained_classes": 45198, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8724593443462958, + "precision": 0.8636328288870722, + "recall": 0.8724593443462958, + "f1": 0.8514582101275701 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 218, + "truth_images_in_retained_classes": 52338, + "accepted_predictions_in_retained_classes": 45149, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8724929218456889, + "precision": 0.8644874139665057, + "recall": 0.8724929218456889, + "f1": 0.8516569044302893 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "genus", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1758873", + "1759152", + "1763597", + "1766123", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 178, + "truth_images_in_retained_classes": 51193, + "accepted_predictions_in_retained_classes": 43632, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8447796356264702, + "precision": 0.8683866368462857, + "recall": 0.8447796356264702, + "f1": 0.8409068314387455 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "genus", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766123", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 174, + "truth_images_in_retained_classes": 51091, + "accepted_predictions_in_retained_classes": 43532, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8468431185140185, + "precision": 0.8700188865290819, + "recall": 0.8468431185140185, + "f1": 0.8425197107045038 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "genus", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1760088", + "1763597", + "1766123", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1797073", + "1798514", + "1798902", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 180, + "truth_images_in_retained_classes": 51668, + "accepted_predictions_in_retained_classes": 43510, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.851621812405513, + "precision": 0.8767852358251572, + "recall": 0.851621812405513, + "f1": 0.8500899477281391 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "genus", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766123", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 174, + "truth_images_in_retained_classes": 51091, + "accepted_predictions_in_retained_classes": 43120, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8572846967941111, + "precision": 0.8799922851408967, + "recall": 0.8572846967941111, + "f1": 0.855133524073762 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "genus", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1760088", + "1763597", + "1766123", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1797073", + "1798514", + "1798902", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 180, + "truth_images_in_retained_classes": 51668, + "accepted_predictions_in_retained_classes": 43511, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8514718324234797, + "precision": 0.8766263792837025, + "recall": 0.8514718324234797, + "f1": 0.8499294903140182 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "genus", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766123", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 174, + "truth_images_in_retained_classes": 51091, + "accepted_predictions_in_retained_classes": 43120, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8569783049191699, + "precision": 0.8797840089758775, + "recall": 0.8569783049191699, + "f1": 0.8548933267800546 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1758873", + "1759152", + "1760088", + "1763597", + "1766123", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1797073", + "1798514", + "1798902", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 181, + "truth_images_in_retained_classes": 51690, + "accepted_predictions_in_retained_classes": 44297, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8769067543097299, + "precision": 0.8943059399376523, + "recall": 0.8769067543097299, + "f1": 0.8729588019714802 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766123", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 174, + "truth_images_in_retained_classes": 51091, + "accepted_predictions_in_retained_classes": 43849, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8813164944712208, + "precision": 0.8965073033675033, + "recall": 0.8813164944712208, + "f1": 0.876545010864494 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1758873", + "1759152", + "1760088", + "1763597", + "1766123", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1797073", + "1798514", + "1798902", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 181, + "truth_images_in_retained_classes": 51690, + "accepted_predictions_in_retained_classes": 44297, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8769470993427563, + "precision": 0.8939963574869481, + "recall": 0.8769470993427563, + "f1": 0.872809760935661 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766123", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 174, + "truth_images_in_retained_classes": 51091, + "accepted_predictions_in_retained_classes": 43850, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8813584625802887, + "precision": 0.8961383784724689, + "recall": 0.8813584625802887, + "f1": 0.8763524180202883 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "family", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "3528", + "3530", + "3552", + "3553", + "3554", + "3556", + "3563", + "4300664", + "4300668", + "4525436", + "4525465", + "4527533", + "4528997", + "4532185", + "4538", + "4542", + "4554", + "4705755", + "4864", + "4865", + "4867", + "4870", + "5336", + "5338", + "5340", + "5343", + "5345", + "5473", + "5474", + "5481", + "5487", + "6166", + "6946", + "6950", + "6953", + "6954", + "7014", + "7015", + "7016", + "7017", + "7294", + "7297", + "8838", + "8839", + "8840", + "8841", + "8855", + "8860", + "8861", + "8863", + "8864", + "8865", + "8866", + "8868", + "8870", + "8871", + "8874", + "9408", + "9410", + "9412", + "9417", + "9541689", + "9689", + "9717" + ], + "class_count": 64, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8435038466784595, + "precision": 0.26109238812607927, + "recall": 0.8435038466784595, + "f1": 0.26968398140672784 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "family", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "3528", + "3530", + "3552", + "3553", + "3554", + "3556", + "3563", + "4300664", + "4300668", + "4525436", + "4525465", + "4527533", + "4528997", + "4532185", + "4538", + "4542", + "4554", + "4705755", + "4864", + "4865", + "4867", + "4870", + "5320", + "5336", + "5340", + "5343", + "5345", + "5474", + "5481", + "5487", + "6166", + "6946", + "6950", + "6954", + "7014", + "7015", + "7016", + "7017", + "7294", + "7297", + "8838", + "8839", + "8840", + "8841", + "8855", + "8860", + "8861", + "8863", + "8864", + "8865", + "8866", + "8868", + "8871", + "8874", + "9408", + "9410", + "9412", + "9541689", + "9689", + "9717" + ], + "class_count": 60, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8104767092433202, + "precision": 0.27533524453595787, + "recall": 0.8104767092433202, + "f1": 0.28049419882782245 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "family", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "3528", + "3530", + "3552", + "3553", + "3554", + "3556", + "3563", + "4300664", + "4300668", + "4525436", + "4525465", + "4527533", + "4528997", + "4532185", + "4538", + "4542", + "4554", + "4705755", + "4864", + "4865", + "4867", + "4870", + "5320", + "5336", + "5340", + "5343", + "5345", + "5474", + "5481", + "5487", + "6166", + "6946", + "6950", + "6954", + "7014", + "7015", + "7016", + "7017", + "7294", + "7297", + "8838", + "8839", + "8840", + "8841", + "8855", + "8860", + "8861", + "8863", + "8864", + "8865", + "8866", + "8868", + "8871", + "8874", + "9408", + "9410", + "9412", + "9541689", + "9689", + "9717" + ], + "class_count": 60, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8106325437578626, + "precision": 0.2756918885388057, + "recall": 0.8106325437578626, + "f1": 0.28088792323657213 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "family", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "3528", + "3530", + "3552", + "3553", + "3554", + "3556", + "4300664", + "4300668", + "4525436", + "4525465", + "4527533", + "4528997", + "4532185", + "4538", + "4542", + "4554", + "4705755", + "4864", + "4865", + "4867", + "4870", + "5320", + "5336", + "5338", + "5340", + "5343", + "5345", + "5474", + "5481", + "5487", + "6166", + "6946", + "6950", + "6953", + "6954", + "7014", + "7015", + "7016", + "7017", + "7294", + "7297", + "8838", + "8839", + "8840", + "8841", + "8855", + "8860", + "8861", + "8863", + "8864", + "8865", + "8866", + "8868", + "8871", + "8874", + "9408", + "9410", + "9412", + "9689", + "9717" + ], + "class_count": 60, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8579010503993526, + "precision": 0.2856847483669441, + "recall": 0.8579010503993526, + "f1": 0.29704414021357817 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "family", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "3528", + "3530", + "3552", + "3553", + "3554", + "3556", + "4300664", + "4300668", + "4525436", + "4525465", + "4527533", + "4528997", + "4532185", + "4538", + "4542", + "4554", + "4705755", + "4864", + "4865", + "4867", + "4870", + "5320", + "5336", + "5338", + "5340", + "5343", + "5345", + "5474", + "5481", + "5487", + "6166", + "6946", + "6950", + "6953", + "6954", + "7014", + "7015", + "7016", + "7017", + "7294", + "7297", + "8838", + "8839", + "8840", + "8841", + "8855", + "8860", + "8861", + "8863", + "8864", + "8865", + "8866", + "8868", + "8871", + "8874", + "9408", + "9410", + "9412", + "9689", + "9717" + ], + "class_count": 60, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8580571051602935, + "precision": 0.28567061226413676, + "recall": 0.8580571051602935, + "f1": 0.2970778194056521 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 52241, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8700294236802284, + "precision": 0.8073706420034537, + "recall": 0.8700294236802284, + "f1": 0.8237730542270192 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 52241, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8700294236802284, + "precision": 0.8073706420034537, + "recall": 0.8700294236802284, + "f1": 0.8237730542270192 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 51891, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8570482156298184, + "precision": 0.7593390669412071, + "recall": 0.8570482156298184, + "f1": 0.7831492631501338 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 51891, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8570482156298184, + "precision": 0.7593390669412071, + "recall": 0.8570482156298184, + "f1": 0.7831492631501338 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 51893, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8572274253215421, + "precision": 0.7604089989497507, + "recall": 0.8572274253215421, + "f1": 0.7843304363763831 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 51893, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8572274253215421, + "precision": 0.7604089989497507, + "recall": 0.8572274253215421, + "f1": 0.7843304363763831 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 52160, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8865862079592552, + "precision": 0.7945542451008321, + "recall": 0.8865862079592552, + "f1": 0.8211324206407346 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 52160, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8865862079592552, + "precision": 0.7945542451008321, + "recall": 0.8865862079592552, + "f1": 0.8211324206407346 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 52160, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8867656709343373, + "precision": 0.7945118367924103, + "recall": 0.8867656709343373, + "f1": 0.821233458216956 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 52160, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8867656709343373, + "precision": 0.7945118367924103, + "recall": 0.8867656709343373, + "f1": 0.821233458216956 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "family", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 52241, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8700294236802284, + "precision": 0.8073706420034537, + "recall": 0.8700294236802284, + "f1": 0.8237730542270192 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "family", + "cutoff": 10, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 52241, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8700294236802284, + "precision": 0.8073706420034537, + "recall": 0.8700294236802284, + "f1": 0.8237730542270192 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "family", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 51891, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8570482156298184, + "precision": 0.7593390669412071, + "recall": 0.8570482156298184, + "f1": 0.7831492631501338 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "family", + "cutoff": 10, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 51891, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8570482156298184, + "precision": 0.7593390669412071, + "recall": 0.8570482156298184, + "f1": 0.7831492631501338 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "family", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 51893, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8572274253215421, + "precision": 0.7604089989497507, + "recall": 0.8572274253215421, + "f1": 0.7843304363763831 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "family", + "cutoff": 10, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 51893, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8572274253215421, + "precision": 0.7604089989497507, + "recall": 0.8572274253215421, + "f1": 0.7843304363763831 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "family", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 52160, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8865862079592552, + "precision": 0.7945542451008321, + "recall": 0.8865862079592552, + "f1": 0.8211324206407346 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "family", + "cutoff": 10, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 52160, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8865862079592552, + "precision": 0.7945542451008321, + "recall": 0.8865862079592552, + "f1": 0.8211324206407346 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "family", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 52160, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8867656709343373, + "precision": 0.7945118367924103, + "recall": 0.8867656709343373, + "f1": 0.821233458216956 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "family", + "cutoff": 10, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 52160, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8867656709343373, + "precision": 0.7945118367924103, + "recall": 0.8867656709343373, + "f1": 0.821233458216956 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 17, + "truth_images_in_retained_classes": 52742, + "accepted_predictions_in_retained_classes": 52159, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8777980291519171, + "precision": 0.8618479765055043, + "recall": 0.8777980291519171, + "f1": 0.8634797826579269 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "common", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 17, + "truth_images_in_retained_classes": 52742, + "accepted_predictions_in_retained_classes": 52159, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8777980291519171, + "precision": 0.8618479765055043, + "recall": 0.8777980291519171, + "f1": 0.8634797826579269 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 17, + "truth_images_in_retained_classes": 52742, + "accepted_predictions_in_retained_classes": 51776, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8761006803143303, + "precision": 0.8444656509344529, + "recall": 0.8761006803143303, + "f1": 0.8502787174152917 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "common", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 17, + "truth_images_in_retained_classes": 52742, + "accepted_predictions_in_retained_classes": 51776, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8761006803143303, + "precision": 0.8444656509344529, + "recall": 0.8761006803143303, + "f1": 0.8502787174152917 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 17, + "truth_images_in_retained_classes": 52742, + "accepted_predictions_in_retained_classes": 51781, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8763115152457701, + "precision": 0.8445713671430295, + "recall": 0.8763115152457701, + "f1": 0.8504835558317285 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "common", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 17, + "truth_images_in_retained_classes": 52742, + "accepted_predictions_in_retained_classes": 51781, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8763115152457701, + "precision": 0.8445713671430295, + "recall": 0.8763115152457701, + "f1": 0.8504835558317285 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 17, + "truth_images_in_retained_classes": 52742, + "accepted_predictions_in_retained_classes": 52060, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9024478981808949, + "precision": 0.8736299225701798, + "recall": 0.9024478981808949, + "f1": 0.8812811401338616 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "common", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 17, + "truth_images_in_retained_classes": 52742, + "accepted_predictions_in_retained_classes": 52060, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9024478981808949, + "precision": 0.8736299225701798, + "recall": 0.9024478981808949, + "f1": 0.8812811401338616 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 17, + "truth_images_in_retained_classes": 52742, + "accepted_predictions_in_retained_classes": 52060, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.902659031092756, + "precision": 0.8735800304426248, + "recall": 0.902659031092756, + "f1": 0.8814000078705928 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "common", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 17, + "truth_images_in_retained_classes": 52742, + "accepted_predictions_in_retained_classes": 52060, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.902659031092756, + "precision": 0.8735800304426248, + "recall": 0.902659031092756, + "f1": 0.8814000078705928 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "species", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "10638451", + "11418741", + "11478679", + "11571523", + "11598540", + "11962292", + "12089608", + "12135372", + "12253343", + "1731598", + "1732063", + "1732416", + "1732452", + "1733258", + "1734453", + "1734704", + "1734826", + "1735532", + "1736727", + "1737491", + "1737542", + "1737650", + "1737775", + "1737776", + "1737847", + "1738050", + "1739819", + "1739833", + "1739922", + "1739931", + "1740005", + "1740069", + "1740185", + "1741341", + "1741633", + "1741752", + "1742142", + "1743532", + "1743775", + "1744071", + "1744782", + "1745079", + "1746027", + "1746440", + "1746775", + "1746832", + "1746876", + "1746910", + "1758878", + "1759069", + "1759083", + "1759153", + "1759407", + "1760104", + "1760246", + "1760593", + "1761041", + "1761735", + "1761865", + "1762244", + "1763610", + "1765011", + "1766137", + "1766210", + "1766274", + "1766510", + "1766741", + "1767597", + "1767625", + "1768117", + "1768150", + "1768341", + "1768749", + "1769103", + "1769505", + "1769566", + "1769897", + "1769958", + "1770150", + "1770307", + "1770477", + "1770772", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1772793", + "1772940", + "1772956", + "1773309", + "1775152", + "1775891", + "1776330", + "1776862", + "1777253", + "1778074", + "1779435", + "1779690", + "1780150", + "1781694", + "1782560", + "1782615", + "1782627", + "1782672", + "1782726", + "1782763", + "1782777", + "1782841", + "1782927", + "1782948", + "1783016", + "1783037", + "1783043", + "1784826", + "1785185", + "1785286", + "1785888", + "1785895", + "1786902", + "1787112", + "1787267", + "1787610", + "1787770", + "1788635", + "1788917", + "1789267", + "1789580", + "1789694", + "1789695", + "1789730", + "1789745", + "1789755", + "1789783", + "1789785", + "1789982", + "1790002", + "1790072", + "1790160", + "1790692", + "1791422", + "1792383", + "1792411", + "1792418", + "1793877", + "1794590", + "1795215", + "1795854", + "1796117", + "1796145", + "1796169", + "1796188", + "1796463", + "1796668", + "1796678", + "1797178", + "1797258", + "1797367", + "1797479", + "1798346", + "1798449", + "1798504", + "1798802", + "1798807", + "1798974", + "1799132", + "1799135", + "1799701", + "1799708", + "1800004", + "1800032", + "1801051", + "1801896", + "1802280", + "1803012", + "1803073", + "1804071", + "1804906", + "1807206", + "1807969", + "1810099", + "1811789", + "1811896", + "1812394", + "1813114", + "1819145", + "1819268", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822787", + "1822796", + "1822819", + "1822830", + "1823726", + "1825064", + "1825077", + "1825083", + "1825156", + "1825176", + "1825971", + "1825983", + "1826022", + "1826033", + "1827125", + "1828162", + "1828637", + "1830410", + "1830457", + "1830843", + "1830937", + "1830962", + "1831009", + "1831136", + "1831168", + "1831643", + "1832853", + "1835156", + "1836899", + "1839893", + "1841261", + "1845270", + "1847407", + "1850246", + "1850538", + "1850781", + "1852177", + "1857577", + "1857626", + "1857828", + "1861644", + "1862580", + "1862837", + "1864377", + "1869803", + "1870202", + "1870250", + "1870988", + "1871252", + "1871407", + "1872315", + "1872368", + "1872901", + "1873411", + "1874375", + "1875008", + "1875120", + "1875327", + "1875869", + "1876329", + "1876542", + "1877988", + "1878879", + "1878895", + "1879252", + "1879452", + "1879970", + "1880064", + "1880139", + "1880140", + "1881151", + "1881834", + "1882210", + "1883161", + "1884212", + "1884255", + "1884273", + "1884332", + "1884370", + "1884403", + "1884465", + "1884970", + "1886579", + "1886587", + "1887108", + "1887290", + "1887701", + "1888579", + "1888743", + "1888759", + "1888826", + "1889942", + "1890187", + "1890534", + "1890576", + "1890656", + "1891059", + "1891326", + "1891426", + "1891473", + "1891493", + "1891494", + "1920712", + "1951557", + "1951649", + "1951713", + "1952014", + "1952062", + "1952130", + "1952229", + "1952449", + "1952532", + "1952806", + "1952812", + "1956440", + "1956524", + "1956599", + "1957300", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1958024", + "1958323", + "1959383", + "1959395", + "1959914", + "1959919", + "1960617", + "1961040", + "1962204", + "1962265", + "1962434", + "1962516", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1963463", + "1964191", + "1964471", + "1964637", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965777", + "1965825", + "1965841", + "1965913", + "1965996", + "1966017", + "1966351", + "1967011", + "1967245", + "1967273", + "1967597", + "1967815", + "1968678", + "1968867", + "1970213", + "1970227", + "1970284", + "1972120", + "1972187", + "1972234", + "1972250", + "1972342", + "1972434", + "1972449", + "1973414", + "1973467", + "1975546", + "1975553", + "1975571", + "1975793", + "1975897", + "1975903", + "1976163", + "1977003", + "1977068", + "1978056", + "1978065", + "1978114", + "1978375", + "1978445", + "1978776", + "1978977", + "1979308", + "1979430", + "1979473", + "1979781", + "1980521", + "1981696", + "1982406", + "1982500", + "1982525", + "1982529", + "1982541", + "1982542", + "1982592", + "1982636", + "1982671", + "1982746", + "1982885", + "1983000", + "1983052", + "1983170", + "1983260", + "1983288", + "1983387", + "1983441", + "1983442", + "1983525", + "1983548", + "1983648", + "1983694", + "1983705", + "1983755", + "1983896", + "1983922", + "1983997", + "1984117", + "1984942", + "1984949", + "1984954", + "1985522", + "1986052", + "1986056", + "1986157", + "1986166", + "1986171", + "1986220", + "1986452", + "1986522", + "1986575", + "1987527", + "1987744", + "1988593", + "1988881", + "1989428", + "1990066", + "1990150", + "1990551", + "1991371", + "1992066", + "1992504", + "1993419", + "4302268", + "4522322", + "4523522", + "4523880", + "4523885", + "4524054", + "4524070", + "4524072", + "4524376", + "4524393", + "4524421", + "4524426", + "4524636", + "4524638", + "4524793", + "4525078", + "4525500", + "4525510", + "4525530", + "4525540", + "4525547", + "4529566", + "4529630", + "4530151", + "4531284", + "4531402", + "4531506", + "4531517", + "4531687", + "4531690", + "4531708", + "4532022", + "4532095", + "4532253", + "4532293", + "4532297", + "4532357", + "4532500", + "4532544", + "4532696", + "4532886", + "4532888", + "4532890", + "4533115", + "4533136", + "4533202", + "4533273", + "4533360", + "4533431", + "4533433", + "4533442", + "4533446", + "4533671", + "4533952", + "4534057", + "4534166", + "4534207", + "4534290", + "4534299", + "4534398", + "4534408", + "4534463", + "4534485", + "4534533", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "4534914", + "5101678", + "5101745", + "5102951", + "5102982", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112155", + "5112283", + "5112291", + "5112345", + "5112362", + "5113036", + "5113078", + "5113234", + "5113847", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5116475", + "5116609", + "5116669", + "5116698", + "5116850", + "5116941", + "5117049", + "5117089", + "5117189", + "5117400", + "5118892", + "5118996", + "5119143", + "5119245", + "5120396", + "5123922", + "5124007", + "5124029", + "5124143", + "5124233", + "5125689", + "5126052", + "5126212", + "5126217", + "5126680", + "5142870", + "5142971", + "5143048", + "5143129", + "5143147", + "5143380", + "5143453", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5145136", + "5145409", + "5145965", + "5146342", + "5146379", + "5146412", + "5146496", + "5146559", + "5146677", + "5146961", + "5147039", + "5147062", + "5147193", + "5147208", + "5147232", + "5147245", + "5147608", + "5147638", + "5147827", + "5148286", + "5148394", + "5148424", + "5148436", + "5148462", + "5148475", + "5148486", + "5148487", + "5149414", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769028", + "5769062", + "5769068", + "5769072", + "5769191", + "5769272", + "5771259", + "5771350", + "5771982", + "5772063", + "5772176", + "5772180", + "5772186", + "5772196", + "5772199", + "5772202", + "5772205", + "5772206", + "5772210", + "5772309", + "5772351", + "5880533", + "5880545", + "5880552", + "5880559", + "5880563", + "5884851", + "6097214", + "6097236", + "7429212", + "7438067", + "7443518", + "7446048", + "7596232", + "7681733", + "7730078", + "7734292", + "7752082", + "7780930", + "7825213", + "7874258", + "7875265", + "7895336", + "7937573", + "7940536", + "7960566", + "7972792", + "7993353", + "8000103", + "8007222", + "8015895", + "8105817", + "8160782", + "8223165", + "8237343", + "8237987", + "8262357", + "8361848", + "8361973", + "8388883", + "8394261", + "8397564", + "8407461", + "8421569", + "8532380", + "8537359", + "8581601", + "9092175", + "9101339", + "9473121", + "9674732" + ], + "class_count": 690, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 36810, + "report_images": 52788, + "overall_coverage": 0.6973175721754944, + "metrics": { + "accuracy": 0.8465208024160925, + "precision": 0.6381169943670086, + "recall": 0.5418132969389368, + "f1": 0.4466755276813755 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "species", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "10055273", + "10638451", + "11418741", + "11478679", + "11571523", + "11962292", + "12089608", + "12135372", + "12253343", + "1731598", + "1732063", + "1732416", + "1732452", + "1734453", + "1734704", + "1734826", + "1737491", + "1737542", + "1737552", + "1737650", + "1737775", + "1737776", + "1737847", + "1738050", + "1739272", + "1739833", + "1739922", + "1740005", + "1740069", + "1740185", + "1741341", + "1741633", + "1741752", + "1742142", + "1743532", + "1743775", + "1744071", + "1744739", + "1744782", + "1745079", + "1746027", + "1746440", + "1746613", + "1746775", + "1746832", + "1746876", + "1748890", + "1758878", + "1759069", + "1759083", + "1759153", + "1759673", + "1760104", + "1760593", + "1761041", + "1762244", + "1763610", + "1765011", + "1765767", + "1766130", + "1766137", + "1766210", + "1766274", + "1766510", + "1767597", + "1767625", + "1767655", + "1768117", + "1768150", + "1768341", + "1769103", + "1769505", + "1769566", + "1769897", + "1769958", + "1770150", + "1770307", + "1770477", + "1770772", + "1770880", + "1771040", + "1771214", + "1771509", + "1771531", + "1771698", + "1771772", + "1772169", + "1772179", + "1772940", + "1773309", + "1775152", + "1775891", + "1776330", + "1776619", + "1776862", + "1777253", + "1778074", + "1779435", + "1779690", + "1780150", + "1781694", + "1782560", + "1782615", + "1782627", + "1782672", + "1782726", + "1782763", + "1782777", + "1782841", + "1782927", + "1782948", + "1783016", + "1783037", + "1783043", + "1784359", + "1784826", + "1785286", + "1785888", + "1785895", + "1786902", + "1787064", + "1787112", + "1787590", + "1787610", + "1788425", + "1788635", + "1789267", + "1789580", + "1789694", + "1789695", + "1789730", + "1789745", + "1789783", + "1789785", + "1789982", + "1790002", + "1790072", + "1790160", + "1790816", + "1791422", + "1792383", + "1792411", + "1792418", + "1793877", + "1794590", + "1795215", + "1795854", + "1796117", + "1796145", + "1796169", + "1796668", + "1796678", + "1797178", + "1797258", + "1797367", + "1797479", + "1798346", + "1798372", + "1798449", + "1798802", + "1798807", + "1798974", + "1799132", + "1799135", + "1799701", + "1799708", + "1800004", + "1800032", + "1801051", + "1801896", + "1802280", + "1803012", + "1803073", + "1804071", + "1804906", + "1807206", + "1808752", + "1810099", + "1811789", + "1811896", + "1812394", + "1813114", + "1819145", + "1819268", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822787", + "1822796", + "1822819", + "1822830", + "1823726", + "1825064", + "1825077", + "1825156", + "1825176", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830584", + "1830879", + "1830937", + "1830962", + "1831136", + "1831168", + "1831643", + "1831752", + "1832853", + "1835156", + "1836899", + "1837420", + "1839893", + "1840301", + "1840346", + "1840360", + "1841261", + "1845270", + "1847407", + "1848657", + "1850971", + "1852177", + "1852311", + "1854202", + "1854237", + "1857829", + "1858074", + "1858113", + "1858163", + "1862578", + "1862580", + "1862837", + "1864377", + "1870250", + "1870988", + "1871252", + "1871407", + "1872368", + "1872901", + "1873079", + "1874375", + "1875008", + "1875120", + "1875327", + "1875631", + "1875865", + "1875869", + "1876329", + "1876542", + "1878879", + "1878895", + "1878907", + "1879252", + "1879452", + "1879970", + "1880064", + "1880140", + "1880143", + "1881151", + "1881834", + "1882210", + "1883161", + "1884212", + "1884255", + "1884273", + "1884332", + "1884370", + "1884403", + "1884465", + "1884970", + "1886084", + "1886579", + "1886587", + "1887108", + "1887290", + "1888743", + "1888759", + "1888826", + "1889833", + "1889942", + "1890187", + "1890534", + "1890576", + "1890656", + "1891059", + "1891326", + "1891473", + "1891493", + "1939432", + "1951557", + "1951649", + "1951713", + "1952014", + "1952062", + "1952130", + "1952229", + "1952532", + "1952806", + "1952812", + "1956440", + "1956524", + "1956599", + "1957300", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1958024", + "1959383", + "1959395", + "1959914", + "1959919", + "1960617", + "1961040", + "1962204", + "1962265", + "1962434", + "1962516", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1963463", + "1964195", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965777", + "1965825", + "1965841", + "1965913", + "1965996", + "1966017", + "1966351", + "1967245", + "1967273", + "1967815", + "1968678", + "1968867", + "1970213", + "1970227", + "1970284", + "1972120", + "1972185", + "1972187", + "1972234", + "1972250", + "1972342", + "1972434", + "1972449", + "1973414", + "1973467", + "1975546", + "1975553", + "1975571", + "1975897", + "1975903", + "1976163", + "1977003", + "1978065", + "1978114", + "1978375", + "1978445", + "1978776", + "1978977", + "1979308", + "1979430", + "1979473", + "1979781", + "1981696", + "1982406", + "1982500", + "1982525", + "1982529", + "1982541", + "1982542", + "1982592", + "1982636", + "1982671", + "1982746", + "1982885", + "1983170", + "1983260", + "1983288", + "1983387", + "1983441", + "1983442", + "1983525", + "1983548", + "1983648", + "1983694", + "1983705", + "1983755", + "1983888", + "1983896", + "1983922", + "1983999", + "1984117", + "1984954", + "1985522", + "1986052", + "1986056", + "1986157", + "1986166", + "1986171", + "1986220", + "1986522", + "1986575", + "1987527", + "1987744", + "1988593", + "1988684", + "1988881", + "1989428", + "1990066", + "1990150", + "1990551", + "1991371", + "1992066", + "1992504", + "4302252", + "4302268", + "4522322", + "4522922", + "4523522", + "4523880", + "4523885", + "4524054", + "4524072", + "4524376", + "4524393", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525189", + "4525500", + "4525510", + "4525530", + "4525540", + "4525547", + "4527972", + "4529566", + "4529630", + "4530151", + "4531284", + "4531402", + "4531517", + "4531687", + "4531690", + "4531708", + "4531968", + "4532022", + "4532095", + "4532253", + "4532293", + "4532297", + "4532357", + "4532516", + "4532534", + "4532544", + "4532886", + "4532888", + "4532890", + "4533115", + "4533136", + "4533202", + "4533273", + "4533360", + "4533431", + "4533433", + "4533442", + "4533446", + "4533671", + "4533952", + "4534057", + "4534166", + "4534207", + "4534290", + "4534299", + "4534398", + "4534408", + "4534458", + "4534463", + "4534485", + "4534533", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "4534914", + "5101678", + "5101745", + "5102951", + "5103451", + "5104056", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112155", + "5112283", + "5112291", + "5112336", + "5112345", + "5112362", + "5113036", + "5113078", + "5113234", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5116475", + "5116609", + "5116669", + "5116698", + "5116850", + "5116941", + "5117049", + "5117089", + "5117400", + "5118892", + "5118996", + "5119245", + "5120675", + "5123461", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5126217", + "5126680", + "5142870", + "5142971", + "5143048", + "5143129", + "5143147", + "5143380", + "5143453", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5145136", + "5145409", + "5146342", + "5146379", + "5146412", + "5146496", + "5146559", + "5146677", + "5146961", + "5147039", + "5147062", + "5147193", + "5147208", + "5147245", + "5147608", + "5148286", + "5148394", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5769191", + "5769272", + "5771259", + "5771350", + "5771982", + "5772063", + "5772176", + "5772196", + "5772202", + "5772205", + "5772210", + "5772351", + "5880533", + "5880545", + "5880550", + "5880552", + "5880559", + "5880563", + "5884851", + "6097214", + "6097236", + "7438067", + "7443518", + "7446048", + "7596232", + "7681733", + "7730078", + "7752082", + "7780930", + "7825213", + "7874258", + "7895336", + "7940536", + "7960566", + "7972792", + "8000103", + "8007222", + "8015895", + "8049830", + "8105817", + "8223165", + "8237343", + "8237987", + "8244266", + "8262357", + "8361848", + "8361973", + "8397564", + "8407461", + "8421569", + "8537359", + "8581601", + "8742426", + "9101339", + "9473121", + "9674732" + ], + "class_count": 654, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 37381, + "report_images": 52788, + "overall_coverage": 0.7081344244904145, + "metrics": { + "accuracy": 0.8669405316273155, + "precision": 0.7028135267405736, + "recall": 0.5774611074285403, + "f1": 0.5081384528044552 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "species", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "10055273", + "11418741", + "11478679", + "11571523", + "11962292", + "12089608", + "12135372", + "12253343", + "1731598", + "1732063", + "1732416", + "1732452", + "1734453", + "1734704", + "1734826", + "1737491", + "1737542", + "1737552", + "1737650", + "1737775", + "1737776", + "1737847", + "1738050", + "1739272", + "1739833", + "1739922", + "1740005", + "1740069", + "1740185", + "1741341", + "1741633", + "1741752", + "1742142", + "1743532", + "1743775", + "1744071", + "1744739", + "1744782", + "1745079", + "1746027", + "1746440", + "1746613", + "1746775", + "1746832", + "1746876", + "1748890", + "1758878", + "1759069", + "1759083", + "1759153", + "1759673", + "1760104", + "1760593", + "1761041", + "1762244", + "1763610", + "1765011", + "1765767", + "1766130", + "1766137", + "1766210", + "1766274", + "1766510", + "1767597", + "1767625", + "1768117", + "1768150", + "1768341", + "1769103", + "1769505", + "1769566", + "1769897", + "1769958", + "1770150", + "1770307", + "1770477", + "1770772", + "1770880", + "1771040", + "1771214", + "1771509", + "1771531", + "1771698", + "1771772", + "1772169", + "1772179", + "1772940", + "1773309", + "1775152", + "1775891", + "1776330", + "1776619", + "1776862", + "1777253", + "1778074", + "1779435", + "1779690", + "1780150", + "1781694", + "1782560", + "1782615", + "1782627", + "1782672", + "1782726", + "1782763", + "1782777", + "1782841", + "1782927", + "1782948", + "1783016", + "1783037", + "1783043", + "1784359", + "1784826", + "1785286", + "1785888", + "1785895", + "1786902", + "1787064", + "1787112", + "1787590", + "1787610", + "1788425", + "1788635", + "1789267", + "1789580", + "1789694", + "1789695", + "1789730", + "1789745", + "1789783", + "1789785", + "1789982", + "1790002", + "1790072", + "1790160", + "1790816", + "1791422", + "1792383", + "1792411", + "1792418", + "1793877", + "1794590", + "1795215", + "1795854", + "1796117", + "1796145", + "1796169", + "1796668", + "1796678", + "1797178", + "1797258", + "1797367", + "1797479", + "1798346", + "1798372", + "1798449", + "1798802", + "1798807", + "1798974", + "1799132", + "1799135", + "1799701", + "1799708", + "1800004", + "1800032", + "1801051", + "1801896", + "1802280", + "1803012", + "1803073", + "1804071", + "1804906", + "1807206", + "1808752", + "1810099", + "1811789", + "1811896", + "1812394", + "1813114", + "1819145", + "1819268", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822787", + "1822796", + "1822819", + "1822830", + "1823726", + "1825064", + "1825077", + "1825156", + "1825176", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830584", + "1830879", + "1830937", + "1830962", + "1831136", + "1831168", + "1831643", + "1831752", + "1832853", + "1835156", + "1836899", + "1837420", + "1839893", + "1840301", + "1840346", + "1840360", + "1841261", + "1845270", + "1847407", + "1848657", + "1850971", + "1852177", + "1852311", + "1854202", + "1854237", + "1857829", + "1858074", + "1858113", + "1858163", + "1862578", + "1862580", + "1862837", + "1864377", + "1870250", + "1870988", + "1871252", + "1871407", + "1872368", + "1872901", + "1873079", + "1874375", + "1875008", + "1875120", + "1875327", + "1875631", + "1875865", + "1875869", + "1876329", + "1876542", + "1878879", + "1878895", + "1878907", + "1879252", + "1879452", + "1879970", + "1880064", + "1880140", + "1880143", + "1881151", + "1881834", + "1882210", + "1883161", + "1884212", + "1884255", + "1884273", + "1884332", + "1884370", + "1884403", + "1884465", + "1884970", + "1886084", + "1886579", + "1886587", + "1887108", + "1887290", + "1888743", + "1888759", + "1888826", + "1889833", + "1889942", + "1890187", + "1890534", + "1890576", + "1890656", + "1891059", + "1891326", + "1891473", + "1891493", + "1939432", + "1951557", + "1951649", + "1951713", + "1952014", + "1952062", + "1952130", + "1952229", + "1952532", + "1952806", + "1952812", + "1956440", + "1956524", + "1956599", + "1957300", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1958024", + "1959383", + "1959395", + "1959914", + "1959919", + "1960617", + "1961040", + "1962204", + "1962265", + "1962434", + "1962516", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1963463", + "1964195", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965777", + "1965825", + "1965841", + "1965913", + "1965996", + "1966017", + "1966351", + "1967245", + "1967273", + "1967815", + "1968678", + "1968867", + "1970213", + "1970227", + "1970284", + "1972120", + "1972185", + "1972187", + "1972234", + "1972250", + "1972342", + "1972434", + "1972449", + "1973414", + "1973467", + "1975546", + "1975553", + "1975571", + "1975897", + "1975903", + "1976163", + "1977003", + "1978065", + "1978114", + "1978375", + "1978445", + "1978776", + "1978977", + "1979308", + "1979430", + "1979473", + "1979781", + "1981696", + "1982406", + "1982500", + "1982525", + "1982529", + "1982541", + "1982542", + "1982592", + "1982636", + "1982671", + "1982746", + "1982885", + "1983170", + "1983260", + "1983288", + "1983387", + "1983441", + "1983442", + "1983525", + "1983548", + "1983648", + "1983694", + "1983705", + "1983755", + "1983896", + "1983922", + "1983999", + "1984117", + "1984954", + "1985522", + "1986052", + "1986056", + "1986157", + "1986166", + "1986171", + "1986220", + "1986522", + "1986575", + "1987527", + "1987744", + "1988593", + "1988684", + "1988881", + "1989428", + "1990066", + "1990150", + "1990551", + "1991371", + "1992066", + "1992504", + "4302252", + "4302268", + "4522322", + "4522922", + "4523522", + "4523880", + "4523885", + "4524054", + "4524072", + "4524376", + "4524393", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525189", + "4525500", + "4525510", + "4525530", + "4525540", + "4525547", + "4527972", + "4529566", + "4529630", + "4530151", + "4531284", + "4531402", + "4531517", + "4531687", + "4531690", + "4531708", + "4531968", + "4532022", + "4532095", + "4532253", + "4532293", + "4532297", + "4532357", + "4532516", + "4532534", + "4532544", + "4532886", + "4532888", + "4532890", + "4533115", + "4533136", + "4533202", + "4533273", + "4533360", + "4533431", + "4533433", + "4533442", + "4533446", + "4533671", + "4533952", + "4534057", + "4534166", + "4534207", + "4534290", + "4534299", + "4534398", + "4534408", + "4534458", + "4534463", + "4534485", + "4534533", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "4534914", + "5101678", + "5101745", + "5102951", + "5103451", + "5104056", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112155", + "5112283", + "5112291", + "5112336", + "5112345", + "5112362", + "5113036", + "5113078", + "5113234", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5116475", + "5116609", + "5116669", + "5116698", + "5116850", + "5116941", + "5117049", + "5117089", + "5117400", + "5118892", + "5118996", + "5119245", + "5120675", + "5123461", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5126217", + "5126680", + "5142870", + "5142971", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5145136", + "5145409", + "5146342", + "5146379", + "5146412", + "5146496", + "5146559", + "5146677", + "5146961", + "5147039", + "5147062", + "5147193", + "5147208", + "5147245", + "5147608", + "5148286", + "5148394", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5769191", + "5769272", + "5771259", + "5771350", + "5771982", + "5772063", + "5772176", + "5772196", + "5772202", + "5772205", + "5772210", + "5772351", + "5880533", + "5880545", + "5880550", + "5880552", + "5880559", + "5880563", + "5884851", + "6097214", + "6097236", + "7438067", + "7443518", + "7446048", + "7596232", + "7681733", + "7730078", + "7752082", + "7780930", + "7825213", + "7874258", + "7895336", + "7940536", + "7960566", + "7972792", + "8000103", + "8007222", + "8015895", + "8049830", + "8105817", + "8223165", + "8237343", + "8237987", + "8244266", + "8262357", + "8361848", + "8361973", + "8397564", + "8407461", + "8421569", + "8537359", + "8581601", + "8742426", + "9101339", + "9473121", + "9674732" + ], + "class_count": 650, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 37191, + "report_images": 52788, + "overall_coverage": 0.7045351216185497, + "metrics": { + "accuracy": 0.8695378035260483, + "precision": 0.7088741319668206, + "recall": 0.5752968296743217, + "f1": 0.5099648536812275 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "species", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "10055273", + "10638451", + "11418741", + "11478679", + "11571523", + "11962292", + "12089608", + "12135372", + "12253343", + "1731598", + "1732063", + "1732416", + "1732452", + "1733484", + "1734453", + "1734704", + "1734826", + "1735532", + "1737491", + "1737542", + "1737552", + "1737650", + "1737775", + "1737776", + "1737847", + "1738050", + "1739272", + "1739833", + "1739922", + "1740005", + "1740069", + "1740185", + "1740374", + "1741341", + "1741633", + "1741752", + "1742142", + "1743532", + "1743775", + "1743828", + "1744071", + "1744739", + "1744782", + "1745079", + "1746027", + "1746440", + "1746613", + "1746775", + "1746832", + "1746876", + "1758878", + "1759069", + "1759083", + "1759153", + "1759673", + "1760104", + "1760593", + "1761041", + "1761865", + "1762244", + "1763610", + "1765011", + "1765767", + "1766130", + "1766137", + "1766210", + "1766274", + "1766510", + "1767597", + "1767625", + "1767655", + "1768117", + "1768341", + "1769103", + "1769505", + "1769566", + "1769897", + "1769958", + "1770150", + "1770307", + "1770477", + "1770772", + "1770880", + "1771040", + "1771214", + "1771509", + "1771531", + "1771698", + "1771772", + "1772169", + "1772179", + "1772940", + "1773309", + "1775152", + "1775891", + "1776330", + "1776619", + "1776862", + "1777253", + "1778074", + "1778143", + "1779435", + "1779690", + "1780150", + "1781694", + "1782560", + "1782615", + "1782627", + "1782672", + "1782726", + "1782763", + "1782777", + "1782841", + "1782927", + "1782948", + "1783016", + "1783037", + "1783043", + "1784359", + "1784812", + "1784826", + "1785286", + "1785888", + "1785895", + "1786902", + "1787064", + "1787112", + "1787590", + "1787610", + "1788425", + "1788635", + "1789267", + "1789580", + "1789694", + "1789695", + "1789730", + "1789745", + "1789783", + "1789785", + "1789982", + "1790002", + "1790072", + "1790160", + "1790692", + "1791422", + "1791784", + "1792383", + "1792411", + "1792418", + "1793877", + "1794590", + "1795215", + "1795854", + "1796117", + "1796145", + "1796169", + "1796668", + "1796678", + "1797178", + "1797258", + "1797276", + "1797367", + "1797479", + "1798346", + "1798372", + "1798449", + "1798594", + "1798802", + "1798807", + "1798974", + "1799132", + "1799135", + "1799701", + "1799708", + "1800004", + "1800032", + "1801051", + "1801896", + "1802280", + "1803012", + "1803073", + "1804071", + "1804906", + "1807206", + "1808752", + "1810099", + "1811789", + "1811896", + "1812394", + "1813114", + "1819145", + "1819268", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822787", + "1822796", + "1822819", + "1822830", + "1823726", + "1825064", + "1825077", + "1825083", + "1825156", + "1825176", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830584", + "1830843", + "1830879", + "1830937", + "1830962", + "1831136", + "1831168", + "1831643", + "1831752", + "1832853", + "1835156", + "1836899", + "1837420", + "1839893", + "1840346", + "1840360", + "1841261", + "1841813", + "1845270", + "1847407", + "1850971", + "1852978", + "1854202", + "1857626", + "1857829", + "1857978", + "1858074", + "1858113", + "1858163", + "1862578", + "1862580", + "1862837", + "1864377", + "1870250", + "1870988", + "1871252", + "1871407", + "1872315", + "1872368", + "1872901", + "1873079", + "1874375", + "1875008", + "1875120", + "1875327", + "1875865", + "1875869", + "1876329", + "1876542", + "1877941", + "1878862", + "1878879", + "1878895", + "1878907", + "1879252", + "1879452", + "1879970", + "1880064", + "1880104", + "1880139", + "1880140", + "1880143", + "1881151", + "1881834", + "1882210", + "1883161", + "1884212", + "1884255", + "1884273", + "1884332", + "1884370", + "1884403", + "1884465", + "1884970", + "1886084", + "1886579", + "1886587", + "1887108", + "1887290", + "1888579", + "1888733", + "1888743", + "1888759", + "1888826", + "1889833", + "1889942", + "1890187", + "1890534", + "1890576", + "1890656", + "1891059", + "1891326", + "1891473", + "1891493", + "1939432", + "1951557", + "1951649", + "1951713", + "1952014", + "1952062", + "1952130", + "1952229", + "1952532", + "1952806", + "1952812", + "1956440", + "1956524", + "1956599", + "1957266", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1958024", + "1959383", + "1959395", + "1959914", + "1959919", + "1960617", + "1961040", + "1962204", + "1962265", + "1962434", + "1962516", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1964195", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965777", + "1965825", + "1965841", + "1965913", + "1965996", + "1966017", + "1966351", + "1967245", + "1967273", + "1967815", + "1968678", + "1968867", + "1970213", + "1970227", + "1970284", + "1972120", + "1972185", + "1972187", + "1972234", + "1972250", + "1972342", + "1972434", + "1972449", + "1973414", + "1973467", + "1975546", + "1975553", + "1975571", + "1975897", + "1975903", + "1976163", + "1977003", + "1978065", + "1978114", + "1978375", + "1978445", + "1978776", + "1978977", + "1979308", + "1979430", + "1979473", + "1979781", + "1981696", + "1982406", + "1982500", + "1982525", + "1982529", + "1982541", + "1982542", + "1982592", + "1982636", + "1982671", + "1982746", + "1982885", + "1983170", + "1983260", + "1983288", + "1983387", + "1983441", + "1983442", + "1983525", + "1983548", + "1983648", + "1983694", + "1983705", + "1983755", + "1983896", + "1983922", + "1983997", + "1983999", + "1984117", + "1984734", + "1984954", + "1985522", + "1986052", + "1986056", + "1986157", + "1986166", + "1986171", + "1986220", + "1986522", + "1986575", + "1987527", + "1987744", + "1988593", + "1988684", + "1988881", + "1989428", + "1990066", + "1990150", + "1990551", + "1991371", + "1992066", + "1992504", + "4302252", + "4302268", + "4522322", + "4523522", + "4523880", + "4523885", + "4524054", + "4524072", + "4524376", + "4524393", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525189", + "4525500", + "4525510", + "4525530", + "4525540", + "4525547", + "4527972", + "4529566", + "4529630", + "4530151", + "4531284", + "4531402", + "4531506", + "4531517", + "4531687", + "4531690", + "4531708", + "4532022", + "4532057", + "4532095", + "4532253", + "4532293", + "4532297", + "4532357", + "4532534", + "4532544", + "4532696", + "4532886", + "4532888", + "4532890", + "4533115", + "4533136", + "4533202", + "4533273", + "4533360", + "4533431", + "4533433", + "4533442", + "4533446", + "4533671", + "4533952", + "4534038", + "4534057", + "4534166", + "4534207", + "4534290", + "4534299", + "4534398", + "4534408", + "4534458", + "4534463", + "4534485", + "4534533", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "4534914", + "5101678", + "5101745", + "5102951", + "5103451", + "5104056", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112155", + "5112254", + "5112283", + "5112291", + "5112336", + "5112345", + "5112362", + "5113036", + "5113078", + "5113234", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5116475", + "5116609", + "5116669", + "5116698", + "5116850", + "5116941", + "5117049", + "5117089", + "5117399", + "5117400", + "5118892", + "5118996", + "5119245", + "5120675", + "5123461", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5126217", + "5126680", + "5142870", + "5142971", + "5143048", + "5143129", + "5143147", + "5143380", + "5143453", + "5143477", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5145136", + "5145409", + "5146342", + "5146379", + "5146412", + "5146496", + "5146559", + "5146677", + "5146946", + "5146961", + "5147039", + "5147062", + "5147193", + "5147208", + "5147245", + "5147608", + "5147827", + "5148286", + "5148394", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5149820", + "5714973", + "5768880", + "5769068", + "5769072", + "5769191", + "5769272", + "5771259", + "5771350", + "5771982", + "5772063", + "5772176", + "5772186", + "5772196", + "5772202", + "5772205", + "5772210", + "5772349", + "5772351", + "5880533", + "5880545", + "5880550", + "5880552", + "5880559", + "5880563", + "5884851", + "6097214", + "6097236", + "7438067", + "7443518", + "7446048", + "7596232", + "7681733", + "7730078", + "7752082", + "7780930", + "7825213", + "7874258", + "7895336", + "7940536", + "7960566", + "7972792", + "8000103", + "8007222", + "8015895", + "8049830", + "8105817", + "8186212", + "8223165", + "8237343", + "8237987", + "8244266", + "8262357", + "8361848", + "8361973", + "8394261", + "8397564", + "8407461", + "8421569", + "8532380", + "8537359", + "8581601", + "8742426", + "9101339", + "9473121", + "9674732" + ], + "class_count": 681, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 41343, + "report_images": 52788, + "overall_coverage": 0.7831893612184587, + "metrics": { + "accuracy": 0.8659206758370823, + "precision": 0.6694908268387493, + "recall": 0.639254202340642, + "f1": 0.5238581475082267 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "species", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "10055273", + "10638451", + "11418741", + "11478679", + "11571523", + "11962292", + "12089608", + "12135372", + "12253343", + "1731598", + "1732063", + "1732416", + "1732452", + "1733484", + "1734453", + "1734704", + "1734826", + "1735532", + "1737491", + "1737542", + "1737650", + "1737775", + "1737776", + "1737847", + "1738050", + "1739272", + "1739833", + "1739922", + "1740005", + "1740069", + "1740185", + "1740374", + "1741341", + "1741633", + "1741752", + "1742142", + "1743532", + "1743775", + "1744071", + "1744782", + "1745079", + "1746027", + "1746440", + "1746613", + "1746775", + "1746832", + "1746876", + "1758878", + "1759069", + "1759083", + "1759153", + "1759673", + "1760104", + "1760593", + "1761041", + "1761865", + "1762244", + "1763610", + "1765011", + "1765767", + "1766130", + "1766137", + "1766210", + "1766274", + "1766510", + "1767597", + "1767625", + "1767655", + "1768117", + "1768341", + "1769103", + "1769505", + "1769566", + "1769897", + "1769958", + "1770150", + "1770307", + "1770477", + "1770772", + "1770880", + "1771040", + "1771214", + "1771509", + "1771531", + "1771698", + "1771772", + "1772169", + "1772179", + "1772940", + "1773309", + "1775152", + "1775891", + "1776330", + "1776619", + "1776862", + "1777253", + "1778074", + "1778143", + "1779690", + "1780150", + "1781694", + "1782560", + "1782615", + "1782627", + "1782672", + "1782726", + "1782763", + "1782777", + "1782841", + "1782927", + "1782948", + "1783016", + "1783037", + "1783043", + "1784359", + "1784826", + "1785286", + "1785888", + "1785895", + "1786902", + "1787064", + "1787112", + "1787590", + "1787610", + "1788425", + "1788635", + "1789267", + "1789580", + "1789694", + "1789695", + "1789730", + "1789745", + "1789783", + "1789785", + "1789982", + "1790002", + "1790072", + "1790160", + "1790692", + "1791422", + "1792383", + "1792411", + "1792418", + "1793877", + "1794590", + "1795215", + "1795854", + "1796117", + "1796145", + "1796169", + "1796668", + "1796678", + "1797178", + "1797258", + "1797367", + "1797479", + "1798346", + "1798372", + "1798449", + "1798802", + "1798807", + "1798974", + "1799132", + "1799135", + "1799701", + "1799708", + "1800004", + "1800032", + "1801051", + "1801896", + "1802280", + "1803012", + "1803073", + "1804071", + "1804906", + "1807206", + "1810099", + "1811789", + "1811896", + "1812394", + "1813114", + "1819145", + "1819268", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822796", + "1822819", + "1822830", + "1823726", + "1825064", + "1825077", + "1825156", + "1825176", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830584", + "1830937", + "1830962", + "1831136", + "1831643", + "1831752", + "1832853", + "1835156", + "1836899", + "1839893", + "1841261", + "1841813", + "1845270", + "1847407", + "1850971", + "1854202", + "1857829", + "1858074", + "1858113", + "1858163", + "1862578", + "1862580", + "1862837", + "1864377", + "1870250", + "1870988", + "1871252", + "1871407", + "1872368", + "1872901", + "1873079", + "1874375", + "1875008", + "1875120", + "1875327", + "1875865", + "1875869", + "1876329", + "1876542", + "1878879", + "1878895", + "1878907", + "1879252", + "1879452", + "1879970", + "1880064", + "1880139", + "1880140", + "1881151", + "1881834", + "1882210", + "1883161", + "1884212", + "1884255", + "1884273", + "1884332", + "1884370", + "1884403", + "1884465", + "1884970", + "1886084", + "1886579", + "1886587", + "1887108", + "1887290", + "1888579", + "1888743", + "1888759", + "1888826", + "1889833", + "1889942", + "1890187", + "1890534", + "1890576", + "1890656", + "1891059", + "1891326", + "1891473", + "1891493", + "1939432", + "1951557", + "1951649", + "1951713", + "1952014", + "1952062", + "1952130", + "1952229", + "1952532", + "1952806", + "1952812", + "1956440", + "1956524", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1958024", + "1959383", + "1959395", + "1959914", + "1959919", + "1960617", + "1961040", + "1962204", + "1962265", + "1962434", + "1962516", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965777", + "1965825", + "1965841", + "1965913", + "1965996", + "1966017", + "1966351", + "1967245", + "1967273", + "1967815", + "1968678", + "1968867", + "1970213", + "1970227", + "1970284", + "1972120", + "1972185", + "1972187", + "1972234", + "1972250", + "1972342", + "1972434", + "1972449", + "1973414", + "1973467", + "1975546", + "1975553", + "1975571", + "1975897", + "1975903", + "1976163", + "1977003", + "1978065", + "1978114", + "1978375", + "1978445", + "1978776", + "1978977", + "1979308", + "1979430", + "1979473", + "1979781", + "1982406", + "1982500", + "1982525", + "1982529", + "1982541", + "1982542", + "1982592", + "1982636", + "1982671", + "1982746", + "1982885", + "1983170", + "1983260", + "1983288", + "1983387", + "1983441", + "1983442", + "1983525", + "1983548", + "1983648", + "1983694", + "1983705", + "1983755", + "1983896", + "1983922", + "1983997", + "1983999", + "1984117", + "1984734", + "1984954", + "1985522", + "1986052", + "1986056", + "1986157", + "1986166", + "1986171", + "1986220", + "1986522", + "1986575", + "1987527", + "1987744", + "1988593", + "1988881", + "1989428", + "1990066", + "1990150", + "1990551", + "1991371", + "1992066", + "1992504", + "4302268", + "4522322", + "4523522", + "4523880", + "4523885", + "4524054", + "4524072", + "4524376", + "4524393", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525189", + "4525500", + "4525510", + "4525530", + "4525540", + "4525547", + "4527972", + "4529566", + "4529630", + "4530151", + "4531284", + "4531402", + "4531517", + "4531687", + "4531690", + "4531708", + "4532022", + "4532095", + "4532253", + "4532293", + "4532297", + "4532357", + "4532534", + "4532544", + "4532886", + "4532888", + "4532890", + "4533115", + "4533136", + "4533202", + "4533273", + "4533360", + "4533431", + "4533433", + "4533442", + "4533446", + "4533671", + "4533952", + "4534057", + "4534166", + "4534207", + "4534290", + "4534299", + "4534398", + "4534408", + "4534458", + "4534463", + "4534485", + "4534533", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "4534914", + "5101678", + "5101745", + "5102951", + "5103451", + "5104056", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112155", + "5112254", + "5112283", + "5112291", + "5112336", + "5112345", + "5112362", + "5113036", + "5113078", + "5113234", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5116475", + "5116609", + "5116669", + "5116698", + "5116850", + "5116941", + "5117049", + "5117089", + "5117400", + "5118892", + "5118996", + "5119245", + "5120675", + "5123461", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5126217", + "5126680", + "5142870", + "5142971", + "5143048", + "5143129", + "5143147", + "5143380", + "5143453", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5145136", + "5145409", + "5146342", + "5146379", + "5146412", + "5146496", + "5146559", + "5146677", + "5146961", + "5147039", + "5147062", + "5147193", + "5147208", + "5147245", + "5147608", + "5148286", + "5148394", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5769191", + "5769272", + "5771259", + "5771350", + "5771982", + "5772063", + "5772176", + "5772186", + "5772196", + "5772202", + "5772205", + "5772210", + "5772351", + "5880533", + "5880545", + "5880550", + "5880552", + "5880559", + "5880563", + "5884851", + "6097214", + "6097236", + "7438067", + "7443518", + "7446048", + "7596232", + "7681733", + "7730078", + "7752082", + "7780930", + "7825213", + "7874258", + "7895336", + "7940536", + "7960566", + "7972792", + "8000103", + "8007222", + "8015895", + "8049830", + "8105817", + "8223165", + "8237343", + "8237987", + "8244266", + "8262357", + "8361848", + "8361973", + "8397564", + "8407461", + "8421569", + "8537359", + "8581601", + "9101339", + "9473121", + "9674732" + ], + "class_count": 636, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 39089, + "report_images": 52788, + "overall_coverage": 0.7404902629385466, + "metrics": { + "accuracy": 0.8755166405852203, + "precision": 0.7362820959348579, + "recall": 0.6075669492667327, + "f1": 0.5430735533140528 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "species", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975571", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 281, + "truth_images_in_retained_classes": 42875, + "accepted_predictions_in_retained_classes": 31091, + "report_images": 52788, + "overall_coverage": 0.6973175721754944, + "metrics": { + "accuracy": 0.949227254623375, + "precision": 0.9437368670687469, + "recall": 0.6916423088644161, + "f1": 0.7737956953842571 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "species", + "cutoff": 5, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 272, + "truth_images_in_retained_classes": 42778, + "accepted_predictions_in_retained_classes": 31024, + "report_images": 52788, + "overall_coverage": 0.6973175721754944, + "metrics": { + "accuracy": 0.9521428623131191, + "precision": 0.950834091298276, + "recall": 0.6967497218946193, + "f1": 0.7799317319854288 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "species", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766210", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 288, + "truth_images_in_retained_classes": 44180, + "accepted_predictions_in_retained_classes": 31486, + "report_images": 52788, + "overall_coverage": 0.7081344244904145, + "metrics": { + "accuracy": 0.9604545336634476, + "precision": 0.9622152512833568, + "recall": 0.7039086159930352, + "f1": 0.7910306156942066 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "species", + "cutoff": 5, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 272, + "truth_images_in_retained_classes": 42778, + "accepted_predictions_in_retained_classes": 30977, + "report_images": 52788, + "overall_coverage": 0.7081344244904145, + "metrics": { + "accuracy": 0.963494109771882, + "precision": 0.9626322859838096, + "recall": 0.7171390330256306, + "f1": 0.8016422382706132 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "species", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766210", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 287, + "truth_images_in_retained_classes": 44173, + "accepted_predictions_in_retained_classes": 31341, + "report_images": 52788, + "overall_coverage": 0.7045351216185497, + "metrics": { + "accuracy": 0.9610226296998533, + "precision": 0.9619757519565231, + "recall": 0.7010200481362973, + "f1": 0.7888306624960773 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "species", + "cutoff": 5, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 272, + "truth_images_in_retained_classes": 42778, + "accepted_predictions_in_retained_classes": 30845, + "report_images": 52788, + "overall_coverage": 0.7045351216185497, + "metrics": { + "accuracy": 0.9642506092928128, + "precision": 0.9626937682791291, + "recall": 0.7149144701582824, + "f1": 0.8001046982018765 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "species", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766210", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959395", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 295, + "truth_images_in_retained_classes": 44279, + "accepted_predictions_in_retained_classes": 34630, + "report_images": 52788, + "overall_coverage": 0.7831893612184587, + "metrics": { + "accuracy": 0.9565023879246428, + "precision": 0.9579592889257424, + "recall": 0.7631267851065484, + "f1": 0.8330906323599061 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "species", + "cutoff": 5, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 272, + "truth_images_in_retained_classes": 42778, + "accepted_predictions_in_retained_classes": 33853, + "report_images": 52788, + "overall_coverage": 0.7831893612184587, + "metrics": { + "accuracy": 0.9585814667783285, + "precision": 0.9585731812083507, + "recall": 0.7743974002343408, + "f1": 0.8413487263251 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "species", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766210", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959395", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 293, + "truth_images_in_retained_classes": 44256, + "accepted_predictions_in_retained_classes": 32979, + "report_images": 52788, + "overall_coverage": 0.7404902629385466, + "metrics": { + "accuracy": 0.9624875420542846, + "precision": 0.9631846488302389, + "recall": 0.7304548441650828, + "f1": 0.8110548032550078 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "species", + "cutoff": 5, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 272, + "truth_images_in_retained_classes": 42778, + "accepted_predictions_in_retained_classes": 32341, + "report_images": 52788, + "overall_coverage": 0.7404902629385466, + "metrics": { + "accuracy": 0.9650388599694326, + "precision": 0.9639006969879439, + "recall": 0.7443741514376615, + "f1": 0.8223569195026881 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "species", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1758878", + "1759153", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 243, + "truth_images_in_retained_classes": 42227, + "accepted_predictions_in_retained_classes": 30743, + "report_images": 52788, + "overall_coverage": 0.6973175721754944, + "metrics": { + "accuracy": 0.953448505161714, + "precision": 0.9544450850263946, + "recall": 0.7134225852923751, + "f1": 0.79615375924078 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "species", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1759153", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1828637", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1983525", + "1983648", + "1983896", + "1985522", + "1986157", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 237, + "truth_images_in_retained_classes": 42021, + "accepted_predictions_in_retained_classes": 30611, + "report_images": 52788, + "overall_coverage": 0.6973175721754944, + "metrics": { + "accuracy": 0.9552371110145412, + "precision": 0.9586140054758545, + "recall": 0.7164050701636104, + "f1": 0.8009004286169517 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "species", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 255, + "truth_images_in_retained_classes": 43584, + "accepted_predictions_in_retained_classes": 31151, + "report_images": 52788, + "overall_coverage": 0.7081344244904145, + "metrics": { + "accuracy": 0.963686280781054, + "precision": 0.9676952538780556, + "recall": 0.7171112436175308, + "f1": 0.8061491380093968 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "species", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1759153", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1828637", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1983525", + "1983648", + "1983896", + "1985522", + "1986157", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 237, + "truth_images_in_retained_classes": 42021, + "accepted_predictions_in_retained_classes": 30528, + "report_images": 52788, + "overall_coverage": 0.7081344244904145, + "metrics": { + "accuracy": 0.9673296490095744, + "precision": 0.9672615516732049, + "recall": 0.7266753942187194, + "f1": 0.8138865890143703 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "species", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 255, + "truth_images_in_retained_classes": 43584, + "accepted_predictions_in_retained_classes": 31014, + "report_images": 52788, + "overall_coverage": 0.7045351216185497, + "metrics": { + "accuracy": 0.9644807475606031, + "precision": 0.9677553930474765, + "recall": 0.7146917879143063, + "f1": 0.8044523205064164 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "species", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1759153", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1828637", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1983525", + "1983648", + "1983896", + "1985522", + "1986157", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 237, + "truth_images_in_retained_classes": 42021, + "accepted_predictions_in_retained_classes": 30399, + "report_images": 52788, + "overall_coverage": 0.7045351216185497, + "metrics": { + "accuracy": 0.9681978678690395, + "precision": 0.9673496769410925, + "recall": 0.7245547988604122, + "f1": 0.8124276972685947 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "species", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 268, + "truth_images_in_retained_classes": 43942, + "accepted_predictions_in_retained_classes": 34313, + "report_images": 52788, + "overall_coverage": 0.7831893612184587, + "metrics": { + "accuracy": 0.9555513324900085, + "precision": 0.9634422815056631, + "recall": 0.7666899243764238, + "f1": 0.8398127135942166 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "species", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1759153", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1828637", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1983525", + "1983648", + "1983896", + "1985522", + "1986157", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 237, + "truth_images_in_retained_classes": 42021, + "accepted_predictions_in_retained_classes": 33322, + "report_images": 52788, + "overall_coverage": 0.7831893612184587, + "metrics": { + "accuracy": 0.9625685565215116, + "precision": 0.9646515680804644, + "recall": 0.7845362115505334, + "f1": 0.8537896748755333 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "species", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 263, + "truth_images_in_retained_classes": 43846, + "accepted_predictions_in_retained_classes": 32662, + "report_images": 52788, + "overall_coverage": 0.7404902629385466, + "metrics": { + "accuracy": 0.961629373180915, + "precision": 0.9681806145232891, + "recall": 0.7372508842609241, + "f1": 0.8202847162241308 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "species", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1759153", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1828637", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1983525", + "1983648", + "1983896", + "1985522", + "1986157", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 237, + "truth_images_in_retained_classes": 42021, + "accepted_predictions_in_retained_classes": 31861, + "report_images": 52788, + "overall_coverage": 0.7404902629385466, + "metrics": { + "accuracy": 0.9683141861823075, + "precision": 0.9697003821520683, + "recall": 0.7555690214239896, + "f1": 0.8356173638868795 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "species", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1743532", + "1746775", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982541", + "1983525", + "1983648", + "1983896", + "1985522", + "1986166", + "1986220", + "1988593", + "1988881", + "1989428", + "1990150", + "1992066", + "4523522", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 190, + "truth_images_in_retained_classes": 40924, + "accepted_predictions_in_retained_classes": 29917, + "report_images": 52788, + "overall_coverage": 0.6973175721754944, + "metrics": { + "accuracy": 0.9610844376490718, + "precision": 0.9546242144015308, + "recall": 0.720024084306013, + "f1": 0.8034606105897977 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "species", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1743532", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1804071", + "1804906", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1822346", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982541", + "1983525", + "1983648", + "1983896", + "1985522", + "1986220", + "1988593", + "1988881", + "1989428", + "1990150", + "1992066", + "4523522", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534540", + "4534719", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110670", + "5110885", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124233", + "5125689", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 180, + "truth_images_in_retained_classes": 40455, + "accepted_predictions_in_retained_classes": 29626, + "report_images": 52788, + "overall_coverage": 0.6973175721754944, + "metrics": { + "accuracy": 0.9646484348350589, + "precision": 0.960597105510487, + "recall": 0.7264566019960785, + "f1": 0.8110366999373771 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "species", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1742142", + "1743532", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1821911", + "1822346", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982541", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 194, + "truth_images_in_retained_classes": 41945, + "accepted_predictions_in_retained_classes": 30249, + "report_images": 52788, + "overall_coverage": 0.7081344244904145, + "metrics": { + "accuracy": 0.9726536166037543, + "precision": 0.9673028973830727, + "recall": 0.7249718216154226, + "f1": 0.8139613934096733 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "species", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1743532", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1804071", + "1804906", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1822346", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982541", + "1983525", + "1983648", + "1983896", + "1985522", + "1986220", + "1988593", + "1988881", + "1989428", + "1990150", + "1992066", + "4523522", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534540", + "4534719", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110670", + "5110885", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124233", + "5125689", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 180, + "truth_images_in_retained_classes": 40455, + "accepted_predictions_in_retained_classes": 29545, + "report_images": 52788, + "overall_coverage": 0.7081344244904145, + "metrics": { + "accuracy": 0.9744003816755382, + "precision": 0.968279947854615, + "recall": 0.7355230038915617, + "f1": 0.8220522350709067 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "species", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1742142", + "1743532", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1821911", + "1822346", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982541", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534540", + "4534719", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 193, + "truth_images_in_retained_classes": 41892, + "accepted_predictions_in_retained_classes": 30094, + "report_images": 52788, + "overall_coverage": 0.7045351216185497, + "metrics": { + "accuracy": 0.9730113961424189, + "precision": 0.9672414097720876, + "recall": 0.7241073248627131, + "f1": 0.8134845543532353 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "species", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1743532", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1804071", + "1804906", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1822346", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982541", + "1983525", + "1983648", + "1983896", + "1985522", + "1986220", + "1988593", + "1988881", + "1989428", + "1990150", + "1992066", + "4523522", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534540", + "4534719", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110670", + "5110885", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124233", + "5125689", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 180, + "truth_images_in_retained_classes": 40455, + "accepted_predictions_in_retained_classes": 29417, + "report_images": 52788, + "overall_coverage": 0.7045351216185497, + "metrics": { + "accuracy": 0.9749535854270197, + "precision": 0.9683959794573336, + "recall": 0.7328357084727255, + "f1": 0.82024037406168 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "species", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1742142", + "1743532", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1821911", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "8015895", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 205, + "truth_images_in_retained_classes": 42565, + "accepted_predictions_in_retained_classes": 33383, + "report_images": 52788, + "overall_coverage": 0.7831893612184587, + "metrics": { + "accuracy": 0.9591300853526652, + "precision": 0.9604484571118049, + "recall": 0.7699762479855812, + "f1": 0.8420134623929408 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "species", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1743532", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1804071", + "1804906", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1822346", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982541", + "1983525", + "1983648", + "1983896", + "1985522", + "1986220", + "1988593", + "1988881", + "1989428", + "1990150", + "1992066", + "4523522", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534540", + "4534719", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110670", + "5110885", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124233", + "5125689", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 180, + "truth_images_in_retained_classes": 40455, + "accepted_predictions_in_retained_classes": 32213, + "report_images": 52788, + "overall_coverage": 0.7831893612184587, + "metrics": { + "accuracy": 0.9705268255352514, + "precision": 0.9657886526261303, + "recall": 0.7926309175203593, + "f1": 0.8597488311609114 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "species", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1742142", + "1743532", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1821911", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 198, + "truth_images_in_retained_classes": 42291, + "accepted_predictions_in_retained_classes": 31709, + "report_images": 52788, + "overall_coverage": 0.7404902629385466, + "metrics": { + "accuracy": 0.9719038952762132, + "precision": 0.9695617529783704, + "recall": 0.7466077391820205, + "f1": 0.8288133411410775 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "species", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1743532", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1804071", + "1804906", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1822346", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982541", + "1983525", + "1983648", + "1983896", + "1985522", + "1986220", + "1988593", + "1988881", + "1989428", + "1990150", + "1992066", + "4523522", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534540", + "4534719", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110670", + "5110885", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124233", + "5125689", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 180, + "truth_images_in_retained_classes": 40455, + "accepted_predictions_in_retained_classes": 30826, + "report_images": 52788, + "overall_coverage": 0.7404902629385466, + "metrics": { + "accuracy": 0.976210705701146, + "precision": 0.9704033057734655, + "recall": 0.7637449348360044, + "f1": 0.8420413480097133 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "genus", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "11495707", + "12105049", + "1731584", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1735487", + "1737335", + "1737519", + "1737647", + "1737701", + "1738049", + "1738583", + "1739724", + "1741338", + "1741585", + "1741717", + "1742061", + "1742419", + "1743516", + "1743762", + "1744049", + "1744691", + "1744761", + "1745076", + "1746012", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1759405", + "1760088", + "1760588", + "1761017", + "1761857", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1766366", + "1767590", + "1767644", + "1768106", + "1768136", + "1768222", + "1768302", + "1768411", + "1769098", + "1769504", + "1769819", + "1769945", + "1770123", + "1770274", + "1770396", + "1770592", + "1771501", + "1772155", + "1772783", + "1772926", + "1775081", + "1775149", + "1775887", + "1775910", + "1776168", + "1776299", + "1776846", + "1776978", + "1777243", + "1777868", + "1778073", + "1778695", + "1779682", + "1780139", + "1781683", + "1782524", + "1782607", + "1782659", + "1783394", + "1784809", + "1785140", + "1785281", + "1785873", + "1786886", + "1787107", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1790683", + "1791382", + "1791874", + "1792324", + "1792405", + "1793856", + "1794570", + "1795126", + "1795782", + "1796225", + "1796408", + "1796469", + "1796639", + "1797073", + "1798083", + "1798340", + "1798440", + "1798514", + "1798902", + "1799687", + "1799702", + "1799993", + "1800016", + "1801046", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1807965", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819252", + "1819372", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1824246", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827279", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1831127", + "1831446", + "1835151", + "1836898", + "1839730", + "1840273", + "1841259", + "1845266", + "1846907", + "1850525", + "1850777", + "1856631", + "1857624", + "1857825", + "1861607", + "1862568", + "1862681", + "1863292", + "1863647", + "1864355", + "1864404", + "1869760", + "1870168", + "1870242", + "1871206", + "1871384", + "1872346", + "1872845", + "1873408", + "1873980", + "1874374", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1876536", + "1877937", + "1878838", + "1879226", + "1879451", + "1879494", + "1879915", + "1881145", + "1881186", + "1881825", + "1882028", + "1883132", + "1884090", + "1884194", + "1884425", + "1884939", + "1886289", + "1886576", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891054", + "1891305", + "1891353", + "1920704", + "1951549", + "1951569", + "1951645", + "1952001", + "1952029", + "1952118", + "1952222", + "1952300", + "1952446", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956434", + "1956522", + "1956545", + "1957545", + "1957620", + "1957829", + "1958023", + "1958238", + "1959381", + "1959888", + "1960592", + "1960966", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964175", + "1964392", + "1964577", + "1964936", + "1965123", + "1965758", + "1965888", + "1965967", + "1966346", + "1966929", + "1967196", + "1967242", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970226", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975570", + "1975783", + "1975885", + "1976155", + "1976949", + "1977104", + "1977419", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979106", + "1979243", + "1979727", + "1980342", + "1980718", + "1982367", + "1984922", + "1985507", + "1985969", + "1986081", + "1987269", + "1987509", + "1987711", + "1988533", + "1988779", + "1988876", + "1989161", + "1989996", + "1990136", + "1990531", + "1991357", + "1991946", + "1993403", + "2278098", + "3255940", + "3256294", + "3256322", + "3256950", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301121", + "4301340", + "4302289", + "4404424", + "4405245", + "4405430", + "4406069", + "4406360", + "4406622", + "4407165", + "4407354", + "4408190", + "4524069", + "4525072", + "4533124", + "4533660", + "4534405", + "4534532", + "4687068", + "4689528", + "4706723", + "4709385", + "5105328", + "5114254", + "5115807", + "5116471", + "5144176", + "5146397", + "7236046", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "8782295", + "8875114", + "8875890", + "8921795", + "9021546", + "9065472", + "9078901", + "9095083", + "9108102", + "9118632", + "9146182", + "9181278", + "9183600", + "9210500" + ], + "class_count": 379, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 36853, + "report_images": 52788, + "overall_coverage": 0.6981321512464954, + "metrics": { + "accuracy": 0.9533632911945014, + "precision": 0.7847923719051053, + "recall": 0.6176629588211429, + "f1": 0.5868633065886133 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "genus", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "11495707", + "12105049", + "1731584", + "1732062", + "1732397", + "1732442", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737647", + "1737701", + "1738049", + "1738583", + "1739060", + "1739724", + "1741338", + "1741585", + "1741717", + "1742061", + "1742419", + "1743188", + "1743516", + "1743762", + "1744049", + "1744691", + "1744761", + "1745076", + "1746012", + "1746437", + "1746600", + "1746749", + "1747242", + "1747949", + "1748889", + "1758873", + "1759029", + "1759152", + "1759552", + "1760088", + "1760588", + "1761017", + "1762232", + "1763597", + "1764920", + "1765763", + "1766123", + "1766265", + "1766366", + "1767590", + "1767644", + "1768106", + "1768136", + "1768222", + "1768302", + "1768411", + "1769098", + "1769504", + "1769819", + "1769945", + "1770123", + "1770274", + "1770396", + "1771501", + "1772155", + "1772926", + "1775081", + "1775149", + "1775887", + "1775910", + "1776168", + "1776299", + "1776576", + "1776846", + "1776978", + "1777243", + "1777868", + "1778073", + "1778695", + "1779429", + "1779682", + "1780139", + "1781683", + "1782524", + "1782607", + "1782659", + "1783394", + "1784356", + "1784809", + "1785281", + "1785873", + "1786886", + "1787061", + "1787107", + "1787522", + "1788411", + "1789246", + "1789545", + "1789671", + "1789978", + "1790794", + "1791382", + "1791874", + "1792324", + "1792405", + "1793856", + "1794570", + "1795126", + "1795782", + "1796225", + "1796469", + "1796639", + "1797073", + "1798083", + "1798340", + "1798362", + "1798440", + "1798514", + "1798902", + "1799687", + "1799702", + "1799993", + "1800016", + "1801046", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808720", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819252", + "1819372", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830581", + "1830873", + "1830909", + "1831127", + "1831446", + "1831747", + "1832810", + "1835151", + "1836898", + "1837338", + "1839730", + "1840273", + "1841259", + "1843897", + "1845266", + "1846907", + "1848655", + "1850865", + "1852064", + "1852176", + "1852212", + "1852745", + "1854160", + "1855383", + "1856631", + "1857825", + "1858055", + "1861151", + "1862568", + "1862681", + "1863647", + "1864355", + "1864404", + "1870242", + "1870982", + "1871206", + "1871384", + "1872346", + "1872845", + "1873074", + "1873980", + "1874374", + "1874958", + "1875103", + "1875317", + "1875600", + "1875650", + "1875849", + "1876280", + "1876536", + "1878838", + "1879226", + "1879451", + "1879494", + "1879915", + "1881145", + "1881186", + "1881825", + "1882028", + "1883132", + "1884090", + "1884194", + "1884425", + "1884939", + "1886289", + "1886576", + "1887269", + "1888256", + "1888698", + "1889936", + "1890111", + "1890369", + "1891054", + "1891305", + "1891353", + "1894469", + "1939401", + "1951549", + "1951569", + "1951645", + "1952001", + "1952029", + "1952118", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956434", + "1956522", + "1956545", + "1957281", + "1957545", + "1957620", + "1957829", + "1958023", + "1959381", + "1959888", + "1960592", + "1960966", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964175", + "1964577", + "1964936", + "1965123", + "1965758", + "1965888", + "1965967", + "1966346", + "1966929", + "1967196", + "1967242", + "1967263", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970226", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975570", + "1975885", + "1976155", + "1976949", + "1978019", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979106", + "1979243", + "1979727", + "1980342", + "1980718", + "1981690", + "1982367", + "1984922", + "1985507", + "1985969", + "1986081", + "1987269", + "1987509", + "1987711", + "1988533", + "1988779", + "1988876", + "1989161", + "1989996", + "1990136", + "1990531", + "1991357", + "1991946", + "2278098", + "3255940", + "3256169", + "3256294", + "3256322", + "3256934", + "3256950", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3257894", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406291", + "4406298", + "4406360", + "4406622", + "4406931", + "4407165", + "4407354", + "4408190", + "4524069", + "4525072", + "4533124", + "4533660", + "4534405", + "4534456", + "4534532", + "4687068", + "4689528", + "4706723", + "4709385", + "5105328", + "5114254", + "5115807", + "5116471", + "5123443", + "5144176", + "5146397", + "7236046", + "7384515", + "7396883", + "7494486", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8317469", + "8331787", + "8379138", + "8407958", + "8494978", + "8875890", + "8921795", + "8936210", + "9065472", + "9078901", + "9095083", + "9118632", + "9146182", + "9181278", + "9183600", + "9210500", + "9220793" + ], + "class_count": 398, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 39989, + "report_images": 52788, + "overall_coverage": 0.7575395923315905, + "metrics": { + "accuracy": 0.9547996220084877, + "precision": 0.745381822803767, + "recall": 0.678410498949023, + "f1": 0.6019267109931725 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "genus", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "11495707", + "12105049", + "1731584", + "1732062", + "1732397", + "1732442", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737647", + "1737701", + "1738049", + "1738583", + "1739060", + "1739724", + "1741338", + "1741585", + "1741717", + "1742061", + "1742419", + "1743188", + "1743516", + "1743762", + "1744049", + "1744691", + "1744761", + "1745076", + "1746012", + "1746437", + "1746600", + "1746749", + "1747242", + "1747949", + "1748889", + "1758873", + "1759029", + "1759152", + "1759552", + "1760088", + "1760588", + "1761017", + "1762232", + "1763597", + "1764920", + "1765763", + "1766123", + "1766265", + "1766366", + "1767590", + "1767644", + "1768106", + "1768136", + "1768222", + "1768302", + "1768411", + "1769098", + "1769504", + "1769819", + "1769945", + "1770123", + "1770274", + "1770396", + "1771501", + "1772155", + "1772926", + "1775081", + "1775149", + "1775887", + "1775910", + "1776168", + "1776299", + "1776576", + "1776846", + "1776978", + "1777243", + "1777868", + "1778073", + "1778695", + "1779429", + "1779682", + "1780139", + "1781683", + "1782524", + "1782607", + "1782659", + "1783394", + "1784356", + "1784809", + "1785281", + "1785873", + "1786886", + "1787061", + "1787107", + "1787522", + "1788411", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1793856", + "1794570", + "1795126", + "1795782", + "1796225", + "1796469", + "1796639", + "1797073", + "1798083", + "1798340", + "1798362", + "1798440", + "1798514", + "1798902", + "1799687", + "1799702", + "1799993", + "1800016", + "1801046", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819252", + "1819372", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830581", + "1830873", + "1830909", + "1831127", + "1831446", + "1831747", + "1832810", + "1835151", + "1836898", + "1837338", + "1839730", + "1840273", + "1841259", + "1843897", + "1845266", + "1846907", + "1848655", + "1850865", + "1852064", + "1852176", + "1852212", + "1852745", + "1854160", + "1855383", + "1856631", + "1857825", + "1858055", + "1861151", + "1862568", + "1862681", + "1863647", + "1864355", + "1864404", + "1870242", + "1870982", + "1871206", + "1871384", + "1872346", + "1872845", + "1873074", + "1873980", + "1874374", + "1874958", + "1875103", + "1875317", + "1875600", + "1875650", + "1875849", + "1876280", + "1876536", + "1878838", + "1879226", + "1879451", + "1879494", + "1879915", + "1881145", + "1881186", + "1881825", + "1882028", + "1883132", + "1884090", + "1884194", + "1884425", + "1884939", + "1886289", + "1886576", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891054", + "1891305", + "1891353", + "1894469", + "1939401", + "1951549", + "1951569", + "1951645", + "1952001", + "1952029", + "1952118", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956434", + "1956522", + "1956545", + "1957281", + "1957545", + "1957620", + "1957829", + "1958023", + "1959381", + "1959888", + "1960592", + "1960966", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964175", + "1964577", + "1964936", + "1965123", + "1965758", + "1965888", + "1965967", + "1966346", + "1966929", + "1967196", + "1967242", + "1967263", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970226", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975570", + "1975885", + "1976155", + "1976949", + "1978019", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979106", + "1979243", + "1979727", + "1980342", + "1980718", + "1981690", + "1982367", + "1984922", + "1985507", + "1985969", + "1986081", + "1987269", + "1987509", + "1987711", + "1988533", + "1988779", + "1988876", + "1989161", + "1989996", + "1990136", + "1990531", + "1991357", + "1991946", + "2278098", + "3255940", + "3256169", + "3256294", + "3256322", + "3256934", + "3256950", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3257894", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406291", + "4406298", + "4406360", + "4406622", + "4406931", + "4407165", + "4407354", + "4408190", + "4524069", + "4525072", + "4533124", + "4533660", + "4534405", + "4534456", + "4534532", + "4687068", + "4689528", + "4706723", + "4709385", + "5105328", + "5114254", + "5115807", + "5116471", + "5123443", + "5144176", + "5146397", + "7236046", + "7384515", + "7396883", + "7494486", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8317469", + "8331787", + "8379138", + "8407958", + "8494978", + "8875890", + "8921795", + "8936210", + "9065472", + "9078901", + "9095083", + "9118632", + "9146182", + "9181278", + "9183600", + "9210500", + "9220793" + ], + "class_count": 395, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 39784, + "report_images": 52788, + "overall_coverage": 0.7536561339698417, + "metrics": { + "accuracy": 0.9551874761942367, + "precision": 0.7523387061411552, + "recall": 0.6745698413302063, + "f1": 0.6043210367725153 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "11495707", + "12105049", + "1731584", + "1732062", + "1732397", + "1733338", + "1733840", + "1734388", + "1734683", + "1735487", + "1737335", + "1737519", + "1737647", + "1737701", + "1738049", + "1738583", + "1739060", + "1739724", + "1741338", + "1741585", + "1741717", + "1742061", + "1742419", + "1743188", + "1743516", + "1743762", + "1744049", + "1744691", + "1744761", + "1745076", + "1746012", + "1746437", + "1746600", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1759552", + "1760088", + "1760588", + "1761017", + "1761857", + "1762232", + "1763597", + "1764920", + "1765763", + "1766123", + "1766265", + "1766366", + "1767590", + "1767644", + "1768106", + "1768222", + "1768302", + "1768411", + "1769098", + "1769504", + "1769819", + "1769945", + "1770123", + "1770274", + "1770396", + "1771501", + "1772155", + "1772926", + "1775081", + "1775149", + "1775887", + "1775910", + "1776168", + "1776299", + "1776576", + "1776846", + "1776978", + "1777243", + "1777868", + "1778073", + "1778695", + "1779682", + "1780139", + "1781683", + "1782524", + "1782607", + "1782659", + "1783394", + "1784356", + "1784809", + "1785281", + "1785873", + "1786886", + "1787061", + "1787107", + "1787522", + "1788411", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1793856", + "1794570", + "1795126", + "1795782", + "1796225", + "1796469", + "1796639", + "1797073", + "1798083", + "1798340", + "1798440", + "1798514", + "1798902", + "1799687", + "1799702", + "1799993", + "1800016", + "1801046", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819252", + "1819372", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1831127", + "1831446", + "1831747", + "1832810", + "1835151", + "1836898", + "1839730", + "1841259", + "1843897", + "1845266", + "1846907", + "1852064", + "1854160", + "1856631", + "1857825", + "1858055", + "1862568", + "1862681", + "1863647", + "1864355", + "1864404", + "1870242", + "1870982", + "1871206", + "1871384", + "1872346", + "1872845", + "1873074", + "1873980", + "1874374", + "1874958", + "1875103", + "1875317", + "1875650", + "1875849", + "1876280", + "1876536", + "1878838", + "1879226", + "1879451", + "1879494", + "1879915", + "1881145", + "1881186", + "1881825", + "1882028", + "1883132", + "1884090", + "1884194", + "1884425", + "1884939", + "1886069", + "1886289", + "1886576", + "1887269", + "1888578", + "1888698", + "1889936", + "1890111", + "1890369", + "1891054", + "1891305", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952029", + "1952118", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956434", + "1956522", + "1956545", + "1957545", + "1957620", + "1957829", + "1958023", + "1959381", + "1959888", + "1960592", + "1960966", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965888", + "1965967", + "1966346", + "1966929", + "1967196", + "1967242", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970226", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975570", + "1975885", + "1976155", + "1976949", + "1978019", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979106", + "1979243", + "1979727", + "1980342", + "1980718", + "1982367", + "1984922", + "1985507", + "1985969", + "1986081", + "1987269", + "1987509", + "1987711", + "1988533", + "1988779", + "1988876", + "1989161", + "1989996", + "1990136", + "1990531", + "1991357", + "1991946", + "2278098", + "3255940", + "3256169", + "3256294", + "3256322", + "3256934", + "3256950", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406291", + "4406360", + "4406622", + "4407165", + "4407354", + "4408190", + "4524069", + "4525072", + "4533124", + "4533660", + "4534405", + "4534532", + "4687068", + "4689528", + "4706723", + "4709385", + "5105328", + "5114254", + "5115807", + "5116471", + "5123443", + "5144176", + "5146397", + "7236046", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8317469", + "8331787", + "8379138", + "8407958", + "8494978", + "8875890", + "8921795", + "8936210", + "9065472", + "9078901", + "9095083", + "9118632", + "9146182", + "9181278", + "9183600", + "9210500", + "9220793" + ], + "class_count": 372, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 41032, + "report_images": 52788, + "overall_coverage": 0.7772978707281958, + "metrics": { + "accuracy": 0.9627590640417357, + "precision": 0.8166841617561863, + "recall": 0.7031449724257084, + "f1": 0.6655108425187298 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "11495707", + "12105049", + "1731584", + "1732062", + "1732397", + "1733338", + "1733840", + "1734388", + "1734683", + "1735487", + "1737335", + "1737519", + "1737647", + "1737701", + "1738049", + "1738583", + "1739060", + "1739724", + "1741338", + "1741585", + "1741717", + "1742061", + "1742419", + "1743188", + "1743516", + "1743762", + "1744049", + "1744691", + "1744761", + "1745076", + "1746012", + "1746437", + "1746600", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1759552", + "1760088", + "1760588", + "1761017", + "1761857", + "1762232", + "1763597", + "1764920", + "1765763", + "1766123", + "1766265", + "1766366", + "1767590", + "1767644", + "1768106", + "1768222", + "1768302", + "1768411", + "1769098", + "1769504", + "1769819", + "1769945", + "1770123", + "1770274", + "1770396", + "1771501", + "1772155", + "1772926", + "1775081", + "1775149", + "1775887", + "1775910", + "1776168", + "1776299", + "1776576", + "1776846", + "1776978", + "1777243", + "1777868", + "1778073", + "1778695", + "1779682", + "1780139", + "1781683", + "1782524", + "1782607", + "1782659", + "1783394", + "1784356", + "1784809", + "1785281", + "1785873", + "1786886", + "1787061", + "1787107", + "1787522", + "1788411", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1793856", + "1794570", + "1795126", + "1795782", + "1796225", + "1796469", + "1796639", + "1797073", + "1798083", + "1798340", + "1798440", + "1798514", + "1798902", + "1799687", + "1799702", + "1799993", + "1800016", + "1801046", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819252", + "1819372", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1831127", + "1831446", + "1831747", + "1832810", + "1835151", + "1836898", + "1839730", + "1841259", + "1843897", + "1845266", + "1846907", + "1852064", + "1854160", + "1856631", + "1857825", + "1858055", + "1862568", + "1862681", + "1863647", + "1864355", + "1864404", + "1870242", + "1870982", + "1871206", + "1871384", + "1872346", + "1872845", + "1873074", + "1873980", + "1874374", + "1874958", + "1875103", + "1875317", + "1875650", + "1875849", + "1876280", + "1876536", + "1878838", + "1879226", + "1879451", + "1879494", + "1879915", + "1881145", + "1881186", + "1881825", + "1882028", + "1883132", + "1884090", + "1884194", + "1884425", + "1884939", + "1886069", + "1886289", + "1886576", + "1887269", + "1888578", + "1888698", + "1889936", + "1890111", + "1890369", + "1891054", + "1891305", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952029", + "1952118", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956434", + "1956522", + "1956545", + "1957545", + "1957620", + "1957829", + "1958023", + "1959381", + "1959888", + "1960592", + "1960966", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965888", + "1965967", + "1966346", + "1966929", + "1967196", + "1967242", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970226", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975570", + "1975885", + "1976155", + "1976949", + "1978019", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979106", + "1979243", + "1979727", + "1980342", + "1980718", + "1982367", + "1984922", + "1985507", + "1985969", + "1986081", + "1987269", + "1987509", + "1987711", + "1988533", + "1988779", + "1988876", + "1989161", + "1989996", + "1990136", + "1990531", + "1991357", + "1991946", + "2278098", + "3255940", + "3256169", + "3256294", + "3256322", + "3256934", + "3256950", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406291", + "4406360", + "4406622", + "4407165", + "4407354", + "4408190", + "4524069", + "4525072", + "4533124", + "4533660", + "4534405", + "4534532", + "4687068", + "4689528", + "4706723", + "4709385", + "5105328", + "5114254", + "5115807", + "5116471", + "5123443", + "5144176", + "5146397", + "7236046", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8317469", + "8331787", + "8379138", + "8407958", + "8494978", + "8875890", + "8921795", + "8936210", + "9065472", + "9078901", + "9095083", + "9118632", + "9146182", + "9181278", + "9183600", + "9210500", + "9220793" + ], + "class_count": 372, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 41009, + "report_images": 52788, + "overall_coverage": 0.7768621656437069, + "metrics": { + "accuracy": 0.9629823236784678, + "precision": 0.8168891977985718, + "recall": 0.703150166196618, + "f1": 0.6655370235633971 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "genus", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 221, + "truth_images_in_retained_classes": 51350, + "accepted_predictions_in_retained_classes": 34216, + "report_images": 52788, + "overall_coverage": 0.6981321512464954, + "metrics": { + "accuracy": 0.9716616552337888, + "precision": 0.9644034675161717, + "recall": 0.6868834008659555, + "f1": 0.7807696866753269 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 215, + "truth_images_in_retained_classes": 46868, + "accepted_predictions_in_retained_classes": 34160, + "report_images": 52788, + "overall_coverage": 0.6981321512464954, + "metrics": { + "accuracy": 0.9754975181801082, + "precision": 0.9682273516594799, + "recall": 0.6927141276824689, + "f1": 0.787485243584438 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "genus", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 226, + "truth_images_in_retained_classes": 47997, + "accepted_predictions_in_retained_classes": 36422, + "report_images": 52788, + "overall_coverage": 0.7575395923315905, + "metrics": { + "accuracy": 0.970284104556389, + "precision": 0.9654305304648699, + "recall": 0.7349949980804276, + "f1": 0.8198300630906835 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 215, + "truth_images_in_retained_classes": 46868, + "accepted_predictions_in_retained_classes": 35966, + "report_images": 52788, + "overall_coverage": 0.7575395923315905, + "metrics": { + "accuracy": 0.9730526458225819, + "precision": 0.9696226974149174, + "recall": 0.7475533077376153, + "f1": 0.8310650157210918 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "genus", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 226, + "truth_images_in_retained_classes": 47997, + "accepted_predictions_in_retained_classes": 36257, + "report_images": 52788, + "overall_coverage": 0.7536561339698417, + "metrics": { + "accuracy": 0.9708040563009604, + "precision": 0.9665082137972659, + "recall": 0.7310313579815346, + "f1": 0.8173152189160263 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 215, + "truth_images_in_retained_classes": 46868, + "accepted_predictions_in_retained_classes": 35808, + "report_images": 52788, + "overall_coverage": 0.7536561339698417, + "metrics": { + "accuracy": 0.9738759173936625, + "precision": 0.9708203215753252, + "recall": 0.7439396812388471, + "f1": 0.8289781701827873 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 228, + "truth_images_in_retained_classes": 48014, + "accepted_predictions_in_retained_classes": 37467, + "report_images": 52788, + "overall_coverage": 0.7772978707281958, + "metrics": { + "accuracy": 0.9739289484518205, + "precision": 0.9704707099468883, + "recall": 0.7536090100054875, + "f1": 0.8347586230965688 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 215, + "truth_images_in_retained_classes": 46868, + "accepted_predictions_in_retained_classes": 36949, + "report_images": 52788, + "overall_coverage": 0.7772978707281958, + "metrics": { + "accuracy": 0.9771086466542604, + "precision": 0.9775547270341163, + "recall": 0.767268013502815, + "f1": 0.8477428518527229 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 228, + "truth_images_in_retained_classes": 48014, + "accepted_predictions_in_retained_classes": 37452, + "report_images": 52788, + "overall_coverage": 0.7768621656437069, + "metrics": { + "accuracy": 0.9742276071763961, + "precision": 0.970789954662006, + "recall": 0.7536163450679126, + "f1": 0.8348013395378682 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 215, + "truth_images_in_retained_classes": 46868, + "accepted_predictions_in_retained_classes": 36936, + "report_images": 52788, + "overall_coverage": 0.7768621656437069, + "metrics": { + "accuracy": 0.9774284415058453, + "precision": 0.9775831973986752, + "recall": 0.7672866592834245, + "f1": 0.8477266855996483 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "genus", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1739724", + "1741338", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759152", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795782", + "1796225", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 197, + "truth_images_in_retained_classes": 50958, + "accepted_predictions_in_retained_classes": 34025, + "report_images": 52788, + "overall_coverage": 0.6981321512464954, + "metrics": { + "accuracy": 0.9707426742420079, + "precision": 0.9676850759993276, + "recall": 0.7030299586868274, + "f1": 0.7949775034079529 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "genus", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1739724", + "1741338", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1759152", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795782", + "1796225", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1828636", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 192, + "truth_images_in_retained_classes": 46467, + "accepted_predictions_in_retained_classes": 33937, + "report_images": 52788, + "overall_coverage": 0.6981321512464954, + "metrics": { + "accuracy": 0.9752941088049124, + "precision": 0.9772224666409165, + "recall": 0.7109088798148795, + "f1": 0.8054635075619047 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "genus", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 203, + "truth_images_in_retained_classes": 47662, + "accepted_predictions_in_retained_classes": 36218, + "report_images": 52788, + "overall_coverage": 0.7575395923315905, + "metrics": { + "accuracy": 0.9725044668174535, + "precision": 0.973428506176096, + "recall": 0.7475181869995279, + "f1": 0.8320199105759426 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "genus", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1739724", + "1741338", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1759152", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795782", + "1796225", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1828636", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 192, + "truth_images_in_retained_classes": 46467, + "accepted_predictions_in_retained_classes": 35691, + "report_images": 52788, + "overall_coverage": 0.7575395923315905, + "metrics": { + "accuracy": 0.9735479156470631, + "precision": 0.9733069820326449, + "recall": 0.7535836525103417, + "f1": 0.8364436102829099 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "genus", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 202, + "truth_images_in_retained_classes": 47651, + "accepted_predictions_in_retained_classes": 36048, + "report_images": 52788, + "overall_coverage": 0.7536561339698417, + "metrics": { + "accuracy": 0.973280111509321, + "precision": 0.9750664954245438, + "recall": 0.7440944617898129, + "f1": 0.8301947627142042 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "genus", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1739724", + "1741338", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1759152", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795782", + "1796225", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1828636", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 192, + "truth_images_in_retained_classes": 46467, + "accepted_predictions_in_retained_classes": 35536, + "report_images": 52788, + "overall_coverage": 0.7536561339698417, + "metrics": { + "accuracy": 0.9741721892441434, + "precision": 0.974221935223632, + "recall": 0.7503899701812965, + "f1": 0.834492264816495 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 205, + "truth_images_in_retained_classes": 47702, + "accepted_predictions_in_retained_classes": 37268, + "report_images": 52788, + "overall_coverage": 0.7772978707281958, + "metrics": { + "accuracy": 0.9770381133367219, + "precision": 0.9784954355713802, + "recall": 0.7643769766620188, + "f1": 0.8460362463804563 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1739724", + "1741338", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1759152", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795782", + "1796225", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1828636", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 192, + "truth_images_in_retained_classes": 46467, + "accepted_predictions_in_retained_classes": 36672, + "report_images": 52788, + "overall_coverage": 0.7772978707281958, + "metrics": { + "accuracy": 0.9775836137284416, + "precision": 0.9789300486595729, + "recall": 0.7732961033321674, + "f1": 0.85232561316201 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 205, + "truth_images_in_retained_classes": 47702, + "accepted_predictions_in_retained_classes": 37255, + "report_images": 52788, + "overall_coverage": 0.7768621656437069, + "metrics": { + "accuracy": 0.9773702801133233, + "precision": 0.9785252947342102, + "recall": 0.7646418740921664, + "f1": 0.8462515189804942 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1739724", + "1741338", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1759152", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795782", + "1796225", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1828636", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 192, + "truth_images_in_retained_classes": 46467, + "accepted_predictions_in_retained_classes": 36660, + "report_images": 52788, + "overall_coverage": 0.7768621656437069, + "metrics": { + "accuracy": 0.9776077796766862, + "precision": 0.9789619295365529, + "recall": 0.7735522735935464, + "f1": 0.8525123269701546 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "genus", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766265", + "1767644", + "1768222", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1782659", + "1783394", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1812976", + "1815226", + "1819125", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879915", + "1881145", + "1882028", + "1884090", + "1884425", + "1884939", + "1887269", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406622", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "9146182", + "9181278" + ], + "class_count": 156, + "truth_images_in_retained_classes": 45483, + "accepted_predictions_in_retained_classes": 33405, + "report_images": 52788, + "overall_coverage": 0.6981321512464954, + "metrics": { + "accuracy": 0.9843358498587619, + "precision": 0.9748388332981804, + "recall": 0.7242019498914946, + "f1": 0.8169005762983504 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "genus", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766265", + "1767644", + "1768222", + "1769098", + "1769504", + "1769819", + "1771501", + "1772155", + "1775910", + "1776168", + "1782659", + "1783394", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1812976", + "1815226", + "1819125", + "1820270", + "1822307", + "1822545", + "1822778", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879915", + "1881145", + "1882028", + "1884090", + "1884425", + "1884939", + "1887269", + "1890111", + "1890369", + "1891353", + "1951549", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1989161", + "1990136", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406622", + "4525072", + "4533124", + "5105328", + "5115807", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "9146182", + "9181278" + ], + "class_count": 151, + "truth_images_in_retained_classes": 45179, + "accepted_predictions_in_retained_classes": 33263, + "report_images": 52788, + "overall_coverage": 0.6981321512464954, + "metrics": { + "accuracy": 0.9840178517103966, + "precision": 0.9779005369081352, + "recall": 0.7276296542386876, + "f1": 0.8215085827272921 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "genus", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1887269", + "1890111", + "1890369", + "1891353", + "1951549", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 165, + "truth_images_in_retained_classes": 46690, + "accepted_predictions_in_retained_classes": 35635, + "report_images": 52788, + "overall_coverage": 0.7575395923315905, + "metrics": { + "accuracy": 0.9810178296102066, + "precision": 0.9757921370967003, + "recall": 0.7571265698443955, + "f1": 0.8419323350469788 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "genus", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766265", + "1767644", + "1768222", + "1769098", + "1769504", + "1769819", + "1771501", + "1772155", + "1775910", + "1776168", + "1782659", + "1783394", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1812976", + "1815226", + "1819125", + "1820270", + "1822307", + "1822545", + "1822778", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879915", + "1881145", + "1882028", + "1884090", + "1884425", + "1884939", + "1887269", + "1890111", + "1890369", + "1891353", + "1951549", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1989161", + "1990136", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406622", + "4525072", + "4533124", + "5105328", + "5115807", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "9146182", + "9181278" + ], + "class_count": 151, + "truth_images_in_retained_classes": 45179, + "accepted_predictions_in_retained_classes": 34973, + "report_images": 52788, + "overall_coverage": 0.7575395923315905, + "metrics": { + "accuracy": 0.9859159179291114, + "precision": 0.9756538685518957, + "recall": 0.7718614744316848, + "f1": 0.8533020792538334 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "genus", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1887269", + "1890111", + "1890369", + "1891353", + "1951549", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 165, + "truth_images_in_retained_classes": 46690, + "accepted_predictions_in_retained_classes": 35481, + "report_images": 52788, + "overall_coverage": 0.7536561339698417, + "metrics": { + "accuracy": 0.9817692866417445, + "precision": 0.9765223194080256, + "recall": 0.7541904615905834, + "f1": 0.8401795246684534 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "genus", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766265", + "1767644", + "1768222", + "1769098", + "1769504", + "1769819", + "1771501", + "1772155", + "1775910", + "1776168", + "1782659", + "1783394", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1812976", + "1815226", + "1819125", + "1820270", + "1822307", + "1822545", + "1822778", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879915", + "1881145", + "1882028", + "1884090", + "1884425", + "1884939", + "1887269", + "1890111", + "1890369", + "1891353", + "1951549", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1989161", + "1990136", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406622", + "4525072", + "4533124", + "5105328", + "5115807", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "9146182", + "9181278" + ], + "class_count": 151, + "truth_images_in_retained_classes": 45179, + "accepted_predictions_in_retained_classes": 34825, + "report_images": 52788, + "overall_coverage": 0.7536561339698417, + "metrics": { + "accuracy": 0.9866161345901774, + "precision": 0.9761653514032598, + "recall": 0.768748272502419, + "f1": 0.8513772766242683 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1887269", + "1890111", + "1890369", + "1891353", + "1951549", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1989161", + "1990136", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 167, + "truth_images_in_retained_classes": 46689, + "accepted_predictions_in_retained_classes": 36692, + "report_images": 52788, + "overall_coverage": 0.7772978707281958, + "metrics": { + "accuracy": 0.9857897321742519, + "precision": 0.9793244688724693, + "recall": 0.7752481222536762, + "f1": 0.8561620153740219 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766265", + "1767644", + "1768222", + "1769098", + "1769504", + "1769819", + "1771501", + "1772155", + "1775910", + "1776168", + "1782659", + "1783394", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1812976", + "1815226", + "1819125", + "1820270", + "1822307", + "1822545", + "1822778", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879915", + "1881145", + "1882028", + "1884090", + "1884425", + "1884939", + "1887269", + "1890111", + "1890369", + "1891353", + "1951549", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1989161", + "1990136", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406622", + "4525072", + "4533124", + "5105328", + "5115807", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "9146182", + "9181278" + ], + "class_count": 151, + "truth_images_in_retained_classes": 45179, + "accepted_predictions_in_retained_classes": 35938, + "report_images": 52788, + "overall_coverage": 0.7772978707281958, + "metrics": { + "accuracy": 0.9886115750548432, + "precision": 0.9809062330056771, + "recall": 0.7925083520312406, + "f1": 0.8691592136815407 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1887269", + "1890111", + "1890369", + "1891353", + "1951549", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1989161", + "1990136", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 167, + "truth_images_in_retained_classes": 46689, + "accepted_predictions_in_retained_classes": 36678, + "report_images": 52788, + "overall_coverage": 0.7768621656437069, + "metrics": { + "accuracy": 0.9858135534806919, + "precision": 0.9793611223358233, + "recall": 0.7753668121612188, + "f1": 0.8562508653962666 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766265", + "1767644", + "1768222", + "1769098", + "1769504", + "1769819", + "1771501", + "1772155", + "1775910", + "1776168", + "1782659", + "1783394", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1812976", + "1815226", + "1819125", + "1820270", + "1822307", + "1822545", + "1822778", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879915", + "1881145", + "1882028", + "1884090", + "1884425", + "1884939", + "1887269", + "1890111", + "1890369", + "1891353", + "1951549", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1989161", + "1990136", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406622", + "4525072", + "4533124", + "5105328", + "5115807", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "9146182", + "9181278" + ], + "class_count": 151, + "truth_images_in_retained_classes": 45179, + "accepted_predictions_in_retained_classes": 35925, + "report_images": 52788, + "overall_coverage": 0.7768621656437069, + "metrics": { + "accuracy": 0.9886423026181744, + "precision": 0.9809467702797179, + "recall": 0.792676399490679, + "f1": 0.8692708237591565 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "family", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3553", + "3556", + "4300668", + "4527533", + "4532185", + "4542", + "5336", + "5343", + "5345", + "5474", + "5481", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8870", + "8874", + "9412", + "9689", + "9717" + ], + "class_count": 26, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 40881, + "report_images": 52788, + "overall_coverage": 0.7744373721300295, + "metrics": { + "accuracy": 0.9963653352691595, + "precision": 0.841348645086206, + "recall": 0.6466603488658192, + "f1": 0.6545226053114057 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "family", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3553", + "3556", + "4300668", + "4527533", + "4532185", + "4542", + "4864", + "4870", + "5336", + "5343", + "5345", + "5474", + "6166", + "6950", + "7015", + "7016", + "7294", + "8838", + "8840", + "8841", + "8860", + "8861", + "8863", + "8868", + "8874", + "9412", + "9689", + "9717" + ], + "class_count": 30, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 38566, + "report_images": 52788, + "overall_coverage": 0.7305827081912556, + "metrics": { + "accuracy": 0.9932547854813464, + "precision": 0.7405922673252698, + "recall": 0.6535073068400129, + "f1": 0.5807455159791289 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "family", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3553", + "3556", + "4300668", + "4527533", + "4532185", + "4542", + "4864", + "4870", + "5336", + "5343", + "5345", + "5474", + "6166", + "6950", + "7015", + "7016", + "7294", + "8838", + "8840", + "8841", + "8860", + "8861", + "8863", + "8868", + "8874", + "9412", + "9689", + "9717" + ], + "class_count": 30, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 38672, + "report_images": 52788, + "overall_coverage": 0.7325907403197697, + "metrics": { + "accuracy": 0.9932599551447033, + "precision": 0.7406007419898424, + "recall": 0.6548532928566179, + "f1": 0.5815679236552638 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "family", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3553", + "3556", + "4300668", + "4527533", + "4532185", + "4542", + "4864", + "4870", + "5336", + "5343", + "5345", + "5474", + "6166", + "6950", + "7015", + "7016", + "7294", + "8838", + "8840", + "8841", + "8860", + "8861", + "8863", + "8868", + "8874", + "9412", + "9689", + "9717" + ], + "class_count": 30, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 41567, + "report_images": 52788, + "overall_coverage": 0.7874327498673941, + "metrics": { + "accuracy": 0.9955823574240963, + "precision": 0.7393905133847497, + "recall": 0.700159197162577, + "f1": 0.607256558231014 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "family", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3553", + "3556", + "4300668", + "4527533", + "4532185", + "4542", + "4864", + "4870", + "5336", + "5343", + "5345", + "5474", + "6166", + "6950", + "7015", + "7016", + "7294", + "8838", + "8840", + "8841", + "8860", + "8861", + "8863", + "8868", + "8874", + "9412", + "9689", + "9717" + ], + "class_count": 30, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 41422, + "report_images": 52788, + "overall_coverage": 0.7846859134651815, + "metrics": { + "accuracy": 0.9955854528269081, + "precision": 0.7395038777892725, + "recall": 0.6986717712105687, + "f1": 0.6065093177805806 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "family", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 40869, + "report_images": 52788, + "overall_coverage": 0.7744373721300295, + "metrics": { + "accuracy": 0.9957914408379742, + "precision": 0.9859850593239552, + "recall": 0.6876576692748175, + "f1": 0.8020952610694089 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "family", + "cutoff": 5, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 40869, + "report_images": 52788, + "overall_coverage": 0.7744373721300295, + "metrics": { + "accuracy": 0.9957914408379742, + "precision": 0.9859850593239552, + "recall": 0.6876576692748175, + "f1": 0.8020952610694089 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "family", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 38530, + "report_images": 52788, + "overall_coverage": 0.7305827081912556, + "metrics": { + "accuracy": 0.99218975160998, + "precision": 0.9900267939876927, + "recall": 0.7040432580775865, + "f1": 0.816089411195116 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "family", + "cutoff": 5, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 38530, + "report_images": 52788, + "overall_coverage": 0.7305827081912556, + "metrics": { + "accuracy": 0.99218975160998, + "precision": 0.9900267939876927, + "recall": 0.7040432580775865, + "f1": 0.816089411195116 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "family", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 38636, + "report_images": 52788, + "overall_coverage": 0.7325907403197697, + "metrics": { + "accuracy": 0.9921957375359722, + "precision": 0.9900397290020403, + "recall": 0.7056726095713715, + "f1": 0.817387949631118 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "family", + "cutoff": 5, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 38636, + "report_images": 52788, + "overall_coverage": 0.7325907403197697, + "metrics": { + "accuracy": 0.9921957375359722, + "precision": 0.9900397290020403, + "recall": 0.7056726095713715, + "f1": 0.817387949631118 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "family", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 41536, + "report_images": 52788, + "overall_coverage": 0.7874327498673941, + "metrics": { + "accuracy": 0.9948848349121117, + "precision": 0.991701309903039, + "recall": 0.7564680159984232, + "f1": 0.8535629866805483 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "family", + "cutoff": 5, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 41536, + "report_images": 52788, + "overall_coverage": 0.7874327498673941, + "metrics": { + "accuracy": 0.9948848349121117, + "precision": 0.991701309903039, + "recall": 0.7564680159984232, + "f1": 0.8535629866805483 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "family", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 41392, + "report_images": 52788, + "overall_coverage": 0.7846859134651815, + "metrics": { + "accuracy": 0.9948884190627355, + "precision": 0.9918743397836264, + "recall": 0.754667447740729, + "f1": 0.8523831333377587 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "family", + "cutoff": 5, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 41392, + "report_images": 52788, + "overall_coverage": 0.7846859134651815, + "metrics": { + "accuracy": 0.9948884190627355, + "precision": 0.9918743397836264, + "recall": 0.754667447740729, + "f1": 0.8523831333377587 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "family", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 40869, + "report_images": 52788, + "overall_coverage": 0.7744373721300295, + "metrics": { + "accuracy": 0.9957914408379742, + "precision": 0.9859850593239552, + "recall": 0.6876576692748175, + "f1": 0.8020952610694089 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "family", + "cutoff": 10, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 40869, + "report_images": 52788, + "overall_coverage": 0.7744373721300295, + "metrics": { + "accuracy": 0.9957914408379742, + "precision": 0.9859850593239552, + "recall": 0.6876576692748175, + "f1": 0.8020952610694089 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "family", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 38530, + "report_images": 52788, + "overall_coverage": 0.7305827081912556, + "metrics": { + "accuracy": 0.99218975160998, + "precision": 0.9900267939876927, + "recall": 0.7040432580775865, + "f1": 0.816089411195116 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "family", + "cutoff": 10, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 38530, + "report_images": 52788, + "overall_coverage": 0.7305827081912556, + "metrics": { + "accuracy": 0.99218975160998, + "precision": 0.9900267939876927, + "recall": 0.7040432580775865, + "f1": 0.816089411195116 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "family", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 38636, + "report_images": 52788, + "overall_coverage": 0.7325907403197697, + "metrics": { + "accuracy": 0.9921957375359722, + "precision": 0.9900397290020403, + "recall": 0.7056726095713715, + "f1": 0.817387949631118 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "family", + "cutoff": 10, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 38636, + "report_images": 52788, + "overall_coverage": 0.7325907403197697, + "metrics": { + "accuracy": 0.9921957375359722, + "precision": 0.9900397290020403, + "recall": 0.7056726095713715, + "f1": 0.817387949631118 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "family", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 41536, + "report_images": 52788, + "overall_coverage": 0.7874327498673941, + "metrics": { + "accuracy": 0.9948848349121117, + "precision": 0.991701309903039, + "recall": 0.7564680159984232, + "f1": 0.8535629866805483 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "family", + "cutoff": 10, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 41536, + "report_images": 52788, + "overall_coverage": 0.7874327498673941, + "metrics": { + "accuracy": 0.9948848349121117, + "precision": 0.991701309903039, + "recall": 0.7564680159984232, + "f1": 0.8535629866805483 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "family", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 41392, + "report_images": 52788, + "overall_coverage": 0.7846859134651815, + "metrics": { + "accuracy": 0.9948884190627355, + "precision": 0.9918743397836264, + "recall": 0.754667447740729, + "f1": 0.8523831333377587 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "family", + "cutoff": 10, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 41392, + "report_images": 52788, + "overall_coverage": 0.7846859134651815, + "metrics": { + "accuracy": 0.9948884190627355, + "precision": 0.9918743397836264, + "recall": 0.754667447740729, + "f1": 0.8523831333377587 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "family", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9717" + ], + "class_count": 15, + "truth_images_in_retained_classes": 52686, + "accepted_predictions_in_retained_classes": 40812, + "report_images": 52788, + "overall_coverage": 0.7744373721300295, + "metrics": { + "accuracy": 0.9946691583947672, + "precision": 0.99787772586138, + "recall": 0.6871044763195309, + "f1": 0.8073961361904208 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "family", + "cutoff": 20, + "domain": "common", + "classes": [ + "3530", + "3552", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9717" + ], + "class_count": 15, + "truth_images_in_retained_classes": 52686, + "accepted_predictions_in_retained_classes": 40812, + "report_images": 52788, + "overall_coverage": 0.7744373721300295, + "metrics": { + "accuracy": 0.9946691583947672, + "precision": 0.99787772586138, + "recall": 0.6871044763195309, + "f1": 0.8073961361904208 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "family", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9717" + ], + "class_count": 15, + "truth_images_in_retained_classes": 52686, + "accepted_predictions_in_retained_classes": 38470, + "report_images": 52788, + "overall_coverage": 0.7305827081912556, + "metrics": { + "accuracy": 0.9967736853726413, + "precision": 0.9966265316436699, + "recall": 0.6975420951522447, + "f1": 0.8137962822635084 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "family", + "cutoff": 20, + "domain": "common", + "classes": [ + "3530", + "3552", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9717" + ], + "class_count": 15, + "truth_images_in_retained_classes": 52686, + "accepted_predictions_in_retained_classes": 38470, + "report_images": 52788, + "overall_coverage": 0.7305827081912556, + "metrics": { + "accuracy": 0.9967736853726413, + "precision": 0.9966265316436699, + "recall": 0.6975420951522447, + "f1": 0.8137962822635084 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "family", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9717" + ], + "class_count": 15, + "truth_images_in_retained_classes": 52686, + "accepted_predictions_in_retained_classes": 38576, + "report_images": 52788, + "overall_coverage": 0.7325907403197697, + "metrics": { + "accuracy": 0.9967812675455647, + "precision": 0.996642915995177, + "recall": 0.6996059403777053, + "f1": 0.8154410976157778 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "family", + "cutoff": 20, + "domain": "common", + "classes": [ + "3530", + "3552", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9717" + ], + "class_count": 15, + "truth_images_in_retained_classes": 52686, + "accepted_predictions_in_retained_classes": 38576, + "report_images": 52788, + "overall_coverage": 0.7325907403197697, + "metrics": { + "accuracy": 0.9967812675455647, + "precision": 0.996642915995177, + "recall": 0.6996059403777053, + "f1": 0.8154410976157778 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "family", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9717" + ], + "class_count": 15, + "truth_images_in_retained_classes": 52686, + "accepted_predictions_in_retained_classes": 41473, + "report_images": 52788, + "overall_coverage": 0.7874327498673941, + "metrics": { + "accuracy": 0.9970295628184992, + "precision": 0.9979498643387211, + "recall": 0.7536293282011772, + "f1": 0.8548063047552162 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "family", + "cutoff": 20, + "domain": "common", + "classes": [ + "3530", + "3552", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9717" + ], + "class_count": 15, + "truth_images_in_retained_classes": 52686, + "accepted_predictions_in_retained_classes": 41473, + "report_images": 52788, + "overall_coverage": 0.7874327498673941, + "metrics": { + "accuracy": 0.9970295628184992, + "precision": 0.9979498643387211, + "recall": 0.7536293282011772, + "f1": 0.8548063047552162 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "family", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9717" + ], + "class_count": 15, + "truth_images_in_retained_classes": 52686, + "accepted_predictions_in_retained_classes": 41329, + "report_images": 52788, + "overall_coverage": 0.7846859134651815, + "metrics": { + "accuracy": 0.9970341027426228, + "precision": 0.9981690355207985, + "recall": 0.751348608408098, + "f1": 0.8533118238543497 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "family", + "cutoff": 20, + "domain": "common", + "classes": [ + "3530", + "3552", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9717" + ], + "class_count": 15, + "truth_images_in_retained_classes": 52686, + "accepted_predictions_in_retained_classes": 41329, + "report_images": 52788, + "overall_coverage": 0.7846859134651815, + "metrics": { + "accuracy": 0.9970341027426228, + "precision": 0.9981690355207985, + "recall": 0.751348608408098, + "f1": 0.8533118238543497 + } + } + ] +} diff --git a/docs/assets/mambo-threshold-comparison.json b/docs/assets/mambo-threshold-comparison.json new file mode 100644 index 0000000..a344868 --- /dev/null +++ b/docs/assets/mambo-threshold-comparison.json @@ -0,0 +1,15613 @@ +{ + "revision": "70cc69adc05362863439277048e06386c1f885e1", + "preset": "north_europe", + "policy": "MacroF1; eps=0.01; use_quantiles=True; n_bootstraps=0; per-rank thresholds; all truth", + "split": "MetricDF.split((0.9, 0.1), strata=('label',), seed=42); report/calibration; grouped by instance_id", + "curve": "51 uniform confidence values plus 21 calibration quantiles per rank, and selected thresholds; reporting data", + "models": { + "v2": { + "source": "local-evidence/mambo-release-comparison-quality/v2-full/north_europe/mini_metric.csv", + "source_sha256": "1381e2b24fa5a36574b4e1a0d9dfcfa41a5daabce6516e7451757f6ed96a5414", + "identities": { + "full": "0f6e02db8e7eaaabc9617dcb0af5e0a7def4886578e46b4f919316b4ca6e7165", + "report": "80144bd4f34d9705bcae1dad496ccf13a7160b5709139b34710e5d75a3252fed", + "calibration": "07e2e6f88b36f3e9f348adaf4526ed62e8725eba4116780a0410bf5d18f5d3fd" + }, + "report_images": 52788, + "calibration_images": 5852, + "thresholds": [ + 0.7484260499477386, + 0.8759860098361969, + 0.9553309082984924 + ], + "full_zero": { + "accuracy": { + "0": 0.6852063621352951, + "1": 0.7890053947525617, + "2": 0.8440271040813301 + }, + "precision": { + "0": 0.2742104381019442, + "1": 0.3188818859364664, + "2": 0.2600743589223739 + }, + "recall": { + "0": 0.6852063621352951, + "1": 0.7890053947525617, + "2": 0.8440271040813301 + }, + "f1": { + "0": 0.25753800338546956, + "1": 0.31692850744528095, + "2": 0.26910376925339174 + }, + "micro_accuracy": { + "0": 0.68712482946794, + "1": 0.7922919508867667, + "2": 0.9449351978171896 + }, + "theilU": { + "0": 0.9259639612074944, + "1": 0.9286450152404832, + "2": 0.865726913911594 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "report_zero": { + "accuracy": { + "0": 0.6856229575537315, + "1": 0.7893807671430488, + "2": 0.8435038466784595 + }, + "precision": { + "0": 0.2795792585422393, + "1": 0.3234152967366764, + "2": 0.2610923881260793 + }, + "recall": { + "0": 0.6856229575537315, + "1": 0.7893807671430488, + "2": 0.8435038466784595 + }, + "f1": { + "0": 0.2619881841444527, + "1": 0.3212885858575979, + "2": 0.2696839814067278 + }, + "micro_accuracy": { + "0": 0.6871258619383193, + "1": 0.792225505796772, + "2": 0.9454610896415853 + }, + "theilU": { + "0": 0.9268446802176634, + "1": 0.9293295014713818, + "2": 0.8669636504107465 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "report_optimized": { + "accuracy": { + "0": 0.8465208024160925, + "1": 0.9533632911945014, + "2": 0.9963653352691595 + }, + "precision": { + "0": 0.6381169943670084, + "1": 0.784792371905105, + "2": 0.841348645086206 + }, + "recall": { + "0": 0.5418132969389368, + "1": 0.6176629588211429, + "2": 0.6466603488658192 + }, + "f1": { + "0": 0.44667552768137514, + "1": 0.5868633065886132, + "2": 0.6545226053114057 + }, + "micro_accuracy": { + "0": 0.8340124966041836, + "1": 0.9258405014517136, + "2": 0.9986057092536875 + }, + "theilU": { + "0": 0.9268446802176634, + "1": 0.9293295014713818, + "2": 0.8669636504107465 + }, + "coverage": { + "0": 0.6973175721754944, + "1": 0.6981321512464954, + "2": 0.7744373721300295 + } + }, + "known_zero": { + "accuracy": { + "0": 0.7073027348676835, + "1": 0.7918398972587593, + "2": 0.8435038466784595 + }, + "precision": { + "0": 0.28480672905864074, + "1": 0.32348654616668093, + "2": 0.2610923881260793 + }, + "recall": { + "0": 0.7073027348676835, + "1": 0.7918398972587593, + "2": 0.8435038466784595 + }, + "f1": { + "0": 0.2693143628906898, + "1": 0.32179539408479596, + "2": 0.2696839814067278 + }, + "micro_accuracy": { + "0": 0.7963467111618512, + "1": 0.7922405137628583, + "2": 0.9454610896415853 + }, + "theilU": { + "0": 0.9292730961939166, + "1": 0.9293424074794282, + "2": 0.8669636504107465 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known_optimized": { + "accuracy": { + "0": 0.8766863543952852, + "1": 0.9565841131242125, + "2": 0.9963653352691595 + }, + "precision": { + "0": 0.6554069382956795, + "1": 0.7849689255774214, + "2": 0.841348645086206 + }, + "recall": { + "0": 0.5589457332057807, + "1": 0.6195871424934829, + "2": 0.6466603488658192 + }, + "f1": { + "0": 0.46704984507862823, + "1": 0.588501193813758, + "2": 0.6545226053114057 + }, + "micro_accuracy": { + "0": 0.9549286136427261, + "1": 0.9258656246608054, + "2": 0.9986057092536875 + }, + "theilU": { + "0": 0.9292730961939166, + "1": 0.9293424074794282, + "2": 0.8669636504107465 + }, + "coverage": { + "0": 0.7058268200579608, + "1": 0.6981264326444011, + "2": 0.7744373721300295 + } + }, + "calibration_zero": { + "accuracy": { + "0": 0.7234356272559329, + "1": 0.8174898444279297, + "2": 0.8654342469799546 + }, + "precision": { + "0": 0.44773205659042525, + "1": 0.4838679824327559, + "2": 0.4026920030783285 + }, + "recall": { + "0": 0.7234356272559329, + "1": 0.8174898444279297, + "2": 0.8654342469799546 + }, + "f1": { + "0": 0.3992460838711431, + "1": 0.4620410630676452, + "2": 0.4117679180319759 + }, + "micro_accuracy": { + "0": 0.6871155160628845, + "1": 0.7928913192071086, + "2": 0.9401913875598086 + }, + "theilU": { + "0": 0.9495520172149795, + "1": 0.9531896899689808, + "2": 0.8647477723749251 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "calibration_optimized": { + "accuracy": { + "0": 0.888343995217596, + "1": 0.9732206219933451, + "2": 0.9998907975137955 + }, + "precision": { + "0": 0.807502621527049, + "1": 0.9203715569385426, + "2": 0.9981361769132305 + }, + "recall": { + "0": 0.5796937024197353, + "1": 0.6560626942847588, + "2": 0.7033521890103556 + }, + "f1": { + "0": 0.5456887340622165, + "1": 0.6840498465459532, + "2": 0.7994593831472765 + }, + "micro_accuracy": { + "0": 0.8309273305603132, + "1": 0.9286062378167641, + "2": 0.9995597622716267 + }, + "theilU": { + "0": 0.9495520172149795, + "1": 0.9531896899689808, + "2": 0.8647477723749251 + }, + "coverage": { + "0": 0.6983937115516062, + "1": 0.7012987012987013, + "2": 0.7763157894736842 + } + }, + "curve": [ + { + "thresholds": [ + 0.0, + 0.0, + 0.0 + ], + "scores": { + "accuracy": { + "0": 0.6856229575537315, + "1": 0.7893807671430488, + "2": 0.8435038466784595 + }, + "precision": { + "0": 0.2795792585422393, + "1": 0.3234152967366764, + "2": 0.2610923881260793 + }, + "recall": { + "0": 0.6856229575537315, + "1": 0.7893807671430488, + "2": 0.8435038466784595 + }, + "f1": { + "0": 0.2619881841444527, + "1": 0.3212885858575979, + "2": 0.2696839814067278 + }, + "micro_accuracy": { + "0": 0.6871258619383193, + "1": 0.792225505796772, + "2": 0.9454610896415853 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + }, + { + "thresholds": [ + 0.02, + 0.02, + 0.02 + ], + "scores": { + "accuracy": { + "0": 0.6856251028729057, + "1": 0.7893807671430488, + "2": 0.8435038466784595 + }, + "precision": { + "0": 0.28005676368065474, + "1": 0.3234152967366764, + "2": 0.2610923881260793 + }, + "recall": { + "0": 0.6856229575537315, + "1": 0.7893807671430488, + "2": 0.8435038466784595 + }, + "f1": { + "0": 0.2624237422228308, + "1": 0.3212885858575979, + "2": 0.2696839814067278 + }, + "micro_accuracy": { + "0": 0.6871518963361497, + "1": 0.792225505796772, + "2": 0.9454610896415853 + }, + "coverage": { + "0": 0.9999621126013488, + "1": 1.0, + "2": 1.0 + } + } + }, + { + "thresholds": [ + 0.0236353520303964, + 0.0323581583797931, + 0.04 + ], + "scores": { + "accuracy": { + "0": 0.6856554953032706, + "1": 0.7896992960879018, + "2": 0.8435038466784595 + }, + "precision": { + "0": 0.28030051151724356, + "1": 0.32343700216381954, + "2": 0.2610923881260793 + }, + "recall": { + "0": 0.6856229575537315, + "1": 0.7893807671430488, + "2": 0.8435038466784595 + }, + "f1": { + "0": 0.26264634316477603, + "1": 0.3213056550228934, + "2": 0.2696839814067278 + }, + "micro_accuracy": { + "0": 0.687216990962657, + "1": 0.7923605979650997, + "2": 0.9454610896415853 + }, + "coverage": { + "0": 0.9998673941047208, + "1": 0.9998295067060695, + "2": 1.0 + } + } + }, + { + "thresholds": [ + 0.04, + 0.04, + 0.06 + ], + "scores": { + "accuracy": { + "0": 0.6862450346780916, + "1": 0.7898249229917869, + "2": 0.8435038466784595 + }, + "precision": { + "0": 0.28148926741772523, + "1": 0.32446462965904294, + "2": 0.2610923881260793 + }, + "recall": { + "0": 0.6856143669312551, + "1": 0.789365988482667, + "2": 0.8435038466784595 + }, + "f1": { + "0": 0.26365503926272216, + "1": 0.3223073481736938, + "2": 0.2696839814067278 + }, + "micro_accuracy": { + "0": 0.6878626967570642, + "1": 0.792577991736477, + "2": 0.9454610896415853 + }, + "coverage": { + "0": 0.998901265439115, + "1": 0.9995074638175343, + "2": 1.0 + } + } + }, + { + "thresholds": [ + 0.06, + 0.06, + 0.08 + ], + "scores": { + "accuracy": { + "0": 0.6894649602995151, + "1": 0.79159502768785, + "2": 0.8435038466784595 + }, + "precision": { + "0": 0.2862577388741877, + "1": 0.3263148567978791, + "2": 0.2610923881260793 + }, + "recall": { + "0": 0.6853793752768238, + "1": 0.7893038766814248, + "2": 0.8435038466784595 + }, + "f1": { + "0": 0.26718136558707756, + "1": 0.32386474580272234, + "2": 0.2696839814067278 + }, + "micro_accuracy": { + "0": 0.689901833954798, + "1": 0.7940489527751932, + "2": 0.9454610896415853 + }, + "coverage": { + "0": 0.9957566113510646, + "1": 0.9976320375842994, + "2": 1.0 + } + } + }, + { + "thresholds": [ + 0.08, + 0.08, + 0.1 + ], + "scores": { + "accuracy": { + "0": 0.692485514085883, + "1": 0.794239065221558, + "2": 0.843528389602472 + }, + "precision": { + "0": 0.29378055849853313, + "1": 0.33378858302599473, + "2": 0.26140675149806564 + }, + "recall": { + "0": 0.6851263062476582, + "1": 0.7892266548760095, + "2": 0.8435038466784595 + }, + "f1": { + "0": 0.27316182282493223, + "1": 0.33022314018658927, + "2": 0.26984083032549366 + }, + "micro_accuracy": { + "0": 0.6930047603571223, + "1": 0.7967258104476759, + "2": 0.9455327371930888 + }, + "coverage": { + "0": 0.9908880806243844, + "1": 0.9939948473137834, + "2": 0.9999242252026976 + } + } + }, + { + "thresholds": [ + 0.1, + 0.1, + 0.1171935871243476 + ], + "scores": { + "accuracy": { + "0": 0.6959281587101183, + "1": 0.7976600952592978, + "2": 0.843749431285826 + }, + "precision": { + "0": 0.3046706681940116, + "1": 0.3458219283587655, + "2": 0.2655886420449551 + }, + "recall": { + "0": 0.6846986764190035, + "1": 0.788922096400204, + "2": 0.8435038466784595 + }, + "f1": { + "0": 0.2818999573792663, + "1": 0.34101240009707434, + "2": 0.274144521327657 + }, + "micro_accuracy": { + "0": 0.6965821007482064, + "1": 0.7998774720961844, + "2": 0.9456760648779748 + }, + "coverage": { + "0": 0.9849018716374933, + "1": 0.9894862468742897, + "2": 0.9997726756080928 + } + } + }, + { + "thresholds": [ + 0.12, + 0.12, + 0.12 + ], + "scores": { + "accuracy": { + "0": 0.7015813766250063, + "1": 0.8057800432810739, + "2": 0.8438187613860694 + }, + "precision": { + "0": 0.3139885481773248, + "1": 0.3523245741285125, + "2": 0.2655886420449551 + }, + "recall": { + "0": 0.6838489895700982, + "1": 0.7882107281325333, + "2": 0.8435038466784595 + }, + "f1": { + "0": 0.2892051764900348, + "1": 0.34617303448414605, + "2": 0.274144521327657 + }, + "micro_accuracy": { + "0": 0.6998878012922196, + "1": 0.8032518760823552, + "2": 0.9457119035888885 + }, + "coverage": { + "0": 0.9792755929377889, + "1": 0.9845040539516556, + "2": 0.9997347882094415 + } + } + }, + { + "thresholds": [ + 0.14, + 0.14, + 0.14 + ], + "scores": { + "accuracy": { + "0": 0.7053314100259017, + "1": 0.8098096173244427, + "2": 0.8461277280594726 + }, + "precision": { + "0": 0.32055398181288797, + "1": 0.3601468487082147, + "2": 0.2700300825566228 + }, + "recall": { + "0": 0.6826193801579724, + "1": 0.7870158946376119, + "2": 0.8434094607806111 + }, + "f1": { + "0": 0.29383272753274103, + "1": 0.35249177016000977, + "2": 0.2786493437686548 + }, + "micro_accuracy": { + "0": 0.7034845240412693, + "1": 0.8069645966337783, + "2": 0.9463554308252428 + }, + "coverage": { + "0": 0.9731378343562931, + "1": 0.9791998181404865, + "2": 0.9990149276350686 + } + } + }, + { + "thresholds": [ + 0.16, + 0.16, + 0.16 + ], + "scores": { + "accuracy": { + "0": 0.7103311043133109, + "1": 0.8150607888193588, + "2": 0.8477136267846012 + }, + "precision": { + "0": 0.32841109200874, + "1": 0.36579334252570045, + "2": 0.27320842530636946 + }, + "recall": { + "0": 0.6818705668128108, + "1": 0.7854082647216847, + "2": 0.8433726606725157 + }, + "f1": { + "0": 0.29987313853875996, + "1": 0.35691650043182005, + "2": 0.28104534769621065 + }, + "micro_accuracy": { + "0": 0.7069076950194872, + "1": 0.810350863544422, + "2": 0.9470837208419535 + }, + "coverage": { + "0": 0.9672463438660301, + "1": 0.9740092445252709, + "2": 0.9980866863681139 + } + } + }, + { + "thresholds": [ + 0.18, + 0.18, + 0.18 + ], + "scores": { + "accuracy": { + "0": 0.7133137126760448, + "1": 0.8182744585021388, + "2": 0.8489839201748891 + }, + "precision": { + "0": 0.3376879818611841, + "1": 0.37484274621314434, + "2": 0.275725690206896 + }, + "recall": { + "0": 0.6805931682435648, + "1": 0.7843946789124046, + "2": 0.8432952173584995 + }, + "f1": { + "0": 0.3071853108536345, + "1": 0.36474302785797924, + "2": 0.28237286932372846 + }, + "micro_accuracy": { + "0": 0.7106015497150969, + "1": 0.8138543377923805, + "2": 0.9481877102617224 + }, + "coverage": { + "0": 0.9608054860953247, + "1": 0.9686292339167992, + "2": 0.9966848526180192 + } + } + }, + { + "thresholds": [ + 0.2, + 0.2, + 0.2 + ], + "scores": { + "accuracy": { + "0": 0.7201179313020685, + "1": 0.8219653670359793, + "2": 0.8513059873920608 + }, + "precision": { + "0": 0.3491571384717765, + "1": 0.38426061340415973, + "2": 0.2858575931117377 + }, + "recall": { + "0": 0.6799298506567768, + "1": 0.7835665938479829, + "2": 0.8430042993871405 + }, + "f1": { + "0": 0.31608755733081806, + "1": 0.3726312923407876, + "2": 0.2923904398909383 + }, + "micro_accuracy": { + "0": 0.7142630335986029, + "1": 0.8172038781490295, + "2": 0.9496496039000609 + }, + "coverage": { + "0": 0.9545540653178752, + "1": 0.9632681670076533, + "2": 0.9947715389861332 + } + } + }, + { + "thresholds": [ + 0.21000864356756208, + 0.22, + 0.22 + ], + "scores": { + "accuracy": { + "0": 0.7228925151634673, + "1": 0.8281356676703304, + "2": 0.8530138232012336 + }, + "precision": { + "0": 0.3527922224637752, + "1": 0.3931601894136246, + "2": 0.2873166187778037 + }, + "recall": { + "0": 0.6795061239427823, + "1": 0.7825155734997562, + "2": 0.8417939049919092 + }, + "f1": { + "0": 0.3189505539928912, + "1": 0.37985883582118485, + "2": 0.2929145782298702 + }, + "micro_accuracy": { + "0": 0.7161061664974215, + "1": 0.8202047349907118, + "2": 0.9514192452325959 + }, + "coverage": { + "0": 0.9514094112298249, + "1": 0.958589073274229, + "2": 0.9924035765704327 + } + } + }, + { + "thresholds": [ + 0.22, + 0.24, + 0.24 + ], + "scores": { + "accuracy": { + "0": 0.7260385262592369, + "1": 0.8315549902362985, + "2": 0.8548680377492878 + }, + "precision": { + "0": 0.3553603570282042, + "1": 0.40153625278408994, + "2": 0.28967378506945035 + }, + "recall": { + "0": 0.6790888780708505, + "1": 0.7779842867482618, + "2": 0.8415724187538085 + }, + "f1": { + "0": 0.3207253549039112, + "1": 0.38529662188321284, + "2": 0.29421721211302054 + }, + "micro_accuracy": { + "0": 0.7175892643182363, + "1": 0.8234463838415967, + "2": 0.9531390520655938 + }, + "coverage": { + "0": 0.9486246874289611, + "1": 0.9529059634765477, + "2": 0.9900166704554065 + } + } + }, + { + "thresholds": [ + 0.24, + 0.24172188639640804, + 0.26 + ], + "scores": { + "accuracy": { + "0": 0.7304832475377805, + "1": 0.8315952842899021, + "2": 0.8576228026630673 + }, + "precision": { + "0": 0.3641473852350683, + "1": 0.401670277233397, + "2": 0.2904030152137765 + }, + "recall": { + "0": 0.675906046358126, + "1": 0.7777840042889266, + "2": 0.8408966530289704 + }, + "f1": { + "0": 0.3266634592159669, + "1": 0.3853290714953957, + "2": 0.29457750282433676 + }, + "micro_accuracy": { + "0": 0.7214275655340294, + "1": 0.8236674622116149, + "2": 0.9548489849176804 + }, + "coverage": { + "0": 0.9416344623778131, + "1": 0.9524892020913844, + "2": 0.9872319466545427 + } + } + }, + { + "thresholds": [ + 0.26, + 0.26, + 0.28 + ], + "scores": { + "accuracy": { + "0": 0.7363009920260201, + "1": 0.8372004986944337, + "2": 0.8629746084664507 + }, + "precision": { + "0": 0.3744643602749915, + "1": 0.4101335361275512, + "2": 0.30232394082082586 + }, + "recall": { + "0": 0.6735821034148729, + "1": 0.7761794039931362, + "2": 0.8369456149801462 + }, + "f1": { + "0": 0.3330813782828472, + "1": 0.3909835009047214, + "2": 0.3050863199216497 + }, + "micro_accuracy": { + "0": 0.7246729047676915, + "1": 0.8265867066466767, + "2": 0.9571018734235709 + }, + "coverage": { + "0": 0.935326210502387, + "1": 0.9476585587633554, + "2": 0.9838789118739107 + } + } + }, + { + "thresholds": [ + 0.28, + 0.28, + 0.3 + ], + "scores": { + "accuracy": { + "0": 0.7396903883120828, + "1": 0.8421783821428711, + "2": 0.8645071601852107 + }, + "precision": { + "0": 0.38628673721604956, + "1": 0.41961458344435987, + "2": 0.3091410768925494 + }, + "recall": { + "0": 0.6708981307712321, + "1": 0.7743872489652027, + "2": 0.83585968740951 + }, + "f1": { + "0": 0.3412912087376304, + "1": 0.39856212996829893, + "2": 0.3111412926088325 + }, + "micro_accuracy": { + "0": 0.7280406439370753, + "1": 0.8300175011566856, + "2": 0.9590610510046368 + }, + "coverage": { + "0": 0.9284496476471925, + "1": 0.9417102371751156, + "2": 0.9805258770932788 + } + } + }, + { + "thresholds": [ + 0.3, + 0.3, + 0.32 + ], + "scores": { + "accuracy": { + "0": 0.7417313161028707, + "1": 0.8445806477827644, + "2": 0.8664468729715237 + }, + "precision": { + "0": 0.39350167735699043, + "1": 0.4258942619665507, + "2": 0.3113815405846213 + }, + "recall": { + "0": 0.6686433995249466, + "1": 0.7724392617185202, + "2": 0.8316718476421493 + }, + "f1": { + "0": 0.34588431348802307, + "1": 0.40305476460134165, + "2": 0.31153299590021677 + }, + "micro_accuracy": { + "0": 0.7313798067036809, + "1": 0.8329723712174881, + "2": 0.9611260833317177 + }, + "coverage": { + "0": 0.9212320982041373, + "1": 0.9359134651814807, + "2": 0.9770591801166932 + } + } + }, + { + "thresholds": [ + 0.32, + 0.32, + 0.34 + ], + "scores": { + "accuracy": { + "0": 0.7463891786671563, + "1": 0.8535494799677813, + "2": 0.8698142431594695 + }, + "precision": { + "0": 0.4053857453109944, + "1": 0.4370933438278736, + "2": 0.33028952855290117 + }, + "recall": { + "0": 0.6649505688173692, + "1": 0.7685652704423974, + "2": 0.8307462813108796 + }, + "f1": { + "0": 0.3525269879765659, + "1": 0.4112374100626365, + "2": 0.32968512135931993 + }, + "micro_accuracy": { + "0": 0.7347175597828339, + "1": 0.8361917953314051, + "2": 0.9629132372112934 + }, + "coverage": { + "0": 0.9141850420550125, + "1": 0.9300219746912177, + "2": 0.973573539440782 + } + } + }, + { + "thresholds": [ + 0.34, + 0.34, + 0.36 + ], + "scores": { + "accuracy": { + "0": 0.7492330418965651, + "1": 0.8561133908120545, + "2": 0.8767969439734032 + }, + "precision": { + "0": 0.4163602109072065, + "1": 0.45194251085762593, + "2": 0.3446944310916479 + }, + "recall": { + "0": 0.6625732025911344, + "1": 0.7660345690111648, + "2": 0.8294255927199516 + }, + "f1": { + "0": 0.3605583190771206, + "1": 0.42269062511276906, + "2": 0.3430475330694983 + }, + "micro_accuracy": { + "0": 0.7377980042586948, + "1": 0.8390693860817874, + "2": 0.9646693488535604 + }, + "coverage": { + "0": 0.9074410850950974, + "1": 0.924168371599606, + "2": 0.9699552928695916 + } + } + }, + { + "thresholds": [ + 0.3537990897893905, + 0.36, + 0.38 + ], + "scores": { + "accuracy": { + "0": 0.7538583339517668, + "1": 0.8593990128447897, + "2": 0.87957741512099 + }, + "precision": { + "0": 0.4212561423299973, + "1": 0.46139860633273433, + "2": 0.3553676673377232 + }, + "recall": { + "0": 0.661276805931529, + "1": 0.7642864984780214, + "2": 0.8285615094793783 + }, + "f1": { + "0": 0.3636222428292602, + "1": 0.42968035384752934, + "2": 0.35133185314648663 + }, + "micro_accuracy": { + "0": 0.7401280571008713, + "1": 0.8424179905095935, + "2": 0.9664282214600686 + }, + "coverage": { + "0": 0.902383117375161, + "1": 0.9182011063120407, + "2": 0.9666022580889596 + } + } + }, + { + "thresholds": [ + 0.36, + 0.38, + 0.4 + ], + "scores": { + "accuracy": { + "0": 0.7565568732390137, + "1": 0.8669009187423931, + "2": 0.885232969913842 + }, + "precision": { + "0": 0.42347829588384334, + "1": 0.47166886260425755, + "2": 0.3714145064527272 + }, + "recall": { + "0": 0.6607818075996174, + "1": 0.7616744428290579, + "2": 0.8270365447898671 + }, + "f1": { + "0": 0.3650718648840585, + "1": 0.4358005310276752, + "2": 0.3662212187319817 + }, + "micro_accuracy": { + "0": 0.7412653645394848, + "1": 0.84559449857686, + "2": 0.9681924582489132 + }, + "coverage": { + "0": 0.9000530423581117, + "1": 0.9118170796393119, + "2": 0.963040842615746 + } + } + }, + { + "thresholds": [ + 0.38, + 0.4, + 0.42 + ], + "scores": { + "accuracy": { + "0": 0.7620820129428135, + "1": 0.8696888075908672, + "2": 0.9292295136739749 + }, + "precision": { + "0": 0.43330524957634076, + "1": 0.4806609468097513, + "2": 0.3739908173250862 + }, + "recall": { + "0": 0.6559202395916996, + "1": 0.7588796988994825, + "2": 0.825863549704312 + }, + "f1": { + "0": 0.3694633222970301, + "1": 0.44190548952918013, + "2": 0.36735780811565355 + }, + "micro_accuracy": { + "0": 0.7448245111153576, + "1": 0.8488552174459001, + "2": 0.9700578696845806 + }, + "coverage": { + "0": 0.892191407137986, + "1": 0.9051678411760249, + "2": 0.9591384405546716 + } + } + }, + { + "thresholds": [ + 0.4, + 0.40697115063667294, + 0.44 + ], + "scores": { + "accuracy": { + "0": 0.76498577566663, + "1": 0.8703321851456043, + "2": 0.930997660939321 + }, + "precision": { + "0": 0.44196982487850534, + "1": 0.48533247562537324, + "2": 0.3767013980226072 + }, + "recall": { + "0": 0.6527987211199754, + "1": 0.7582318038681712, + "2": 0.8236324012919481 + }, + "f1": { + "0": 0.37431741191868334, + "1": 0.4455956070663132, + "2": 0.3685334273838971 + }, + "micro_accuracy": { + "0": 0.7485758341542811, + "1": 0.8498982823346826, + "2": 0.9720039682539683 + }, + "coverage": { + "0": 0.8845570963097674, + "1": 0.9032545275441388, + "2": 0.9547624460104569 + } + } + }, + { + "thresholds": [ + 0.42, + 0.42, + 0.45111105740070345 + ], + "scores": { + "accuracy": { + "0": 0.768864658345758, + "1": 0.8767747848694591, + "2": 0.9358799659713064 + }, + "precision": { + "0": 0.45038831483734376, + "1": 0.4898044867288474, + "2": 0.37744451148972147 + }, + "recall": { + "0": 0.6486974178982069, + "1": 0.7557248785817791, + "2": 0.8231183238338401 + }, + "f1": { + "0": 0.37920797548638824, + "1": 0.4480895039848331, + "2": 0.36875024258203765 + }, + "micro_accuracy": { + "0": 0.7520680792241733, + "1": 0.8519189451067953, + "2": 0.9726280636889498 + }, + "coverage": { + "0": 0.8770743350761536, + "1": 0.8993331817837388, + "2": 0.9530006819731757 + } + } + }, + { + "thresholds": [ + 0.44, + 0.44, + 0.46 + ], + "scores": { + "accuracy": { + "0": 0.7731713457187648, + "1": 0.8807751436227357, + "2": 0.9378393055260615 + }, + "precision": { + "0": 0.46026453616908874, + "1": 0.502189859660842, + "2": 0.3857539820083362 + }, + "recall": { + "0": 0.6439124383090291, + "1": 0.751809458523179, + "2": 0.8225878187878916 + }, + "f1": { + "0": 0.38519694731640847, + "1": 0.4566113420047224, + "2": 0.37666240835839665 + }, + "micro_accuracy": { + "0": 0.7558433629862201, + "1": 0.8549540564055769, + "2": 0.9735144177154692 + }, + "coverage": { + "0": 0.8688338258695159, + "1": 0.8926839433204516, + "2": 0.9512768053345457 + } + } + }, + { + "thresholds": [ + 0.46, + 0.46, + 0.48 + ], + "scores": { + "accuracy": { + "0": 0.7780060841455319, + "1": 0.8864871459596081, + "2": 0.9397362809363515 + }, + "precision": { + "0": 0.4699273072427158, + "1": 0.5125705228776535, + "2": 0.39646328769619704 + }, + "recall": { + "0": 0.6393549427290771, + "1": 0.7485406402662007, + "2": 0.821317725180187 + }, + "f1": { + "0": 0.38936522113210703, + "1": 0.4635460640406912, + "2": 0.3859044936095559 + }, + "micro_accuracy": { + "0": 0.7598872544701841, + "1": 0.8582542532273233, + "2": 0.9753985239114347 + }, + "coverage": { + "0": 0.8602712737743426, + "1": 0.8863378040463742, + "2": 0.9471281351822384 + } + } + }, + { + "thresholds": [ + 0.479143737256527, + 0.48, + 0.5 + ], + "scores": { + "accuracy": { + "0": 0.7882274037908994, + "1": 0.8960667540249149, + "2": 0.9495342523067642 + }, + "precision": { + "0": 0.4815172811000527, + "1": 0.5228375244491988, + "2": 0.3986846065549518 + }, + "recall": { + "0": 0.6337387679164644, + "1": 0.7430287851053136, + "2": 0.8198959581587275 + }, + "f1": { + "0": 0.39417035934404154, + "1": 0.46788756880748655, + "2": 0.38704027308822264 + }, + "micro_accuracy": { + "0": 0.7636638775146876, + "1": 0.8617418116738901, + "2": 0.9768637532133676 + }, + "coverage": { + "0": 0.851254072895355, + "1": 0.8785519436235508, + "2": 0.9432446768204895 + } + } + }, + { + "thresholds": [ + 0.48, + 0.5, + 0.52 + ], + "scores": { + "accuracy": { + "0": 0.788297189954357, + "1": 0.9007455287162172, + "2": 0.9523579503964864 + }, + "precision": { + "0": 0.4821756626078358, + "1": 0.5362543506919683, + "2": 0.4086856646229382 + }, + "recall": { + "0": 0.633623093437942, + "1": 0.7399094638419738, + "2": 0.8106313379533677 + }, + "f1": { + "0": 0.39415603359620555, + "1": 0.4769949097087, + "2": 0.39381144929482775 + }, + "micro_accuracy": { + "0": 0.763876828535168, + "1": 0.8656713169521405, + "2": 0.9785671039354188 + }, + "coverage": { + "0": 0.8508183678108661, + "1": 0.870406152913541, + "2": 0.9386603015836933 + } + } + }, + { + "thresholds": [ + 0.5, + 0.52, + 0.54 + ], + "scores": { + "accuracy": { + "0": 0.7933647153703338, + "1": 0.9056542611163141, + "2": 0.9548203459590092 + }, + "precision": { + "0": 0.49805879775399464, + "1": 0.5467266998338093, + "2": 0.42024626378101604 + }, + "recall": { + "0": 0.6291378012560022, + "1": 0.7347840834279914, + "2": 0.8084325392696734 + }, + "f1": { + "0": 0.40309811738918916, + "1": 0.48275685960778364, + "2": 0.4035983020645816 + }, + "micro_accuracy": { + "0": 0.7690745837657357, + "1": 0.8699746946858841, + "2": 0.9801147305049358 + }, + "coverage": { + "0": 0.8396984163067364, + "1": 0.8608964158520876, + "2": 0.9345495188300371 + } + } + }, + { + "thresholds": [ + 0.52, + 0.54, + 0.56 + ], + "scores": { + "accuracy": { + "0": 0.7978730000069773, + "1": 0.9093851130928823, + "2": 0.9592970568769567 + }, + "precision": { + "0": 0.5086181169997136, + "1": 0.5625874192026116, + "2": 0.422230374509393 + }, + "recall": { + "0": 0.6232342703071942, + "1": 0.7307951572236216, + "2": 0.8069656600204749 + }, + "f1": { + "0": 0.4080543002074898, + "1": 0.49164343876928324, + "2": 0.4041291595058658 + }, + "micro_accuracy": { + "0": 0.7746817474127667, + "1": 0.8736418779300997, + "2": 0.9816485732325804 + }, + "coverage": { + "0": 0.8273850117450936, + "1": 0.8525990755474729, + "2": 0.9300788057891946 + } + } + }, + { + "thresholds": [ + 0.54, + 0.5492531061172486, + 0.58 + ], + "scores": { + "accuracy": { + "0": 0.8011341211383649, + "1": 0.9105500325754434, + "2": 0.9601500162042858 + }, + "precision": { + "0": 0.5212353137342385, + "1": 0.5658138883501845, + "2": 0.43269967478992266 + }, + "recall": { + "0": 0.6154099095795471, + "1": 0.7288211220419086, + "2": 0.8042673319160089 + }, + "f1": { + "0": 0.41367078154174236, + "1": 0.49360536657314036, + "2": 0.41288287037890536 + }, + "micro_accuracy": { + "0": 0.7797818012999072, + "1": 0.8752705446593927, + "2": 0.9827557992063167 + }, + "coverage": { + "0": 0.8160945669470334, + "1": 0.8489997726756081, + "2": 0.926081685231492 + } + } + }, + { + "thresholds": [ + 0.56, + 0.56, + 0.6 + ], + "scores": { + "accuracy": { + "0": 0.8044939569193892, + "1": 0.9116935383112089, + "2": 0.963078908887324 + }, + "precision": { + "0": 0.5269860060113801, + "1": 0.5688597908296337, + "2": 0.44356229232178634 + }, + "recall": { + "0": 0.6084913600181087, + "1": 0.7271247577253878, + "2": 0.8026937891231549 + }, + "f1": { + "0": 0.4148859064243914, + "1": 0.4944601899137064, + "2": 0.4224015604212334 + }, + "micro_accuracy": { + "0": 0.7847749888258957, + "1": 0.8766340052467544, + "2": 0.9838898592417549 + }, + "coverage": { + "0": 0.8052777146321134, + "1": 0.8448700462226264, + "2": 0.9218951276805335 + } + } + }, + { + "thresholds": [ + 0.5685244202613831, + 0.58, + 0.62 + ], + "scores": { + "accuracy": { + "0": 0.8048652518808226, + "1": 0.917899111483499, + "2": 0.9644652884911543 + }, + "precision": { + "0": 0.5306960484895935, + "1": 0.5827134891781429, + "2": 0.4676284265763729 + }, + "recall": { + "0": 0.6057599338795269, + "1": 0.7228192655645438, + "2": 0.801285646799651 + }, + "f1": { + "0": 0.41609940033034637, + "1": 0.5024510541523488, + "2": 0.4440265230383049 + }, + "micro_accuracy": { + "0": 0.7870374757189558, + "1": 0.8803081803761613, + "2": 0.9851535237151293 + }, + "coverage": { + "0": 0.7996893233310601, + "1": 0.835985451238918, + "2": 0.9174244146396908 + } + } + }, + { + "thresholds": [ + 0.58, + 0.6, + 0.64 + ], + "scores": { + "accuracy": { + "0": 0.8072856451883191, + "1": 0.9208322212088266, + "2": 0.9658143534349576 + }, + "precision": { + "0": 0.5389202554932224, + "1": 0.5946326455348465, + "2": 0.4790588345218743 + }, + "recall": { + "0": 0.602366265401922, + "1": 0.7174675406009315, + "2": 0.7968920984209682 + }, + "f1": { + "0": 0.4190124691129626, + "1": 0.5092427050461559, + "2": 0.44939580807177315 + }, + "micro_accuracy": { + "0": 0.7902848131511039, + "1": 0.8835937678738932, + "2": 0.9864242122306638 + }, + "coverage": { + "0": 0.7928317041751913, + "1": 0.8280101538228385, + "2": 0.9125937713116618 + } + } + }, + { + "thresholds": [ + 0.6, + 0.62, + 0.66 + ], + "scores": { + "accuracy": { + "0": 0.812982662753591, + "1": 0.9264913852359948, + "2": 0.9665404296878589 + }, + "precision": { + "0": 0.5531433602004631, + "1": 0.606383533032525, + "2": 0.49210629017188634 + }, + "recall": { + "0": 0.5947982925054555, + "1": 0.7116783087763782, + "2": 0.7938523482778995 + }, + "f1": { + "0": 0.42367825181233804, + "1": 0.5145356783318985, + "2": 0.4606037140021268 + }, + "micro_accuracy": { + "0": 0.7953244737607915, + "1": 0.8869864596330699, + "2": 0.9871161423478642 + }, + "coverage": { + "0": 0.7811623853906191, + "1": 0.8198454194135031, + "2": 0.9086724255512616 + } + } + }, + { + "thresholds": [ + 0.62, + 0.64, + 0.68 + ], + "scores": { + "accuracy": { + "0": 0.8174102576776441, + "1": 0.9291551043477293, + "2": 0.9685809948419092 + }, + "precision": { + "0": 0.5644784141979927, + "1": 0.6248966797080169, + "2": 0.49330388424373883 + }, + "recall": { + "0": 0.5875700691321352, + "1": 0.7056831169911759, + "2": 0.7885604162130602 + }, + "f1": { + "0": 0.42761194302714567, + "1": 0.5257553143639654, + "2": 0.45988155561967103 + }, + "micro_accuracy": { + "0": 0.8012410125086181, + "1": 0.8907739764441952, + "2": 0.9879742724853868 + }, + "coverage": { + "0": 0.769341517011442, + "1": 0.8106387815412593, + "2": 0.904201712510419 + } + } + }, + { + "thresholds": [ + 0.64, + 0.66, + 0.6958589136600495 + ], + "scores": { + "accuracy": { + "0": 0.8238208754147821, + "1": 0.9307693620980368, + "2": 0.9701101050481722 + }, + "precision": { + "0": 0.5772527704462415, + "1": 0.6344426455991637, + "2": 0.5096414235730106 + }, + "recall": { + "0": 0.5824797264220842, + "1": 0.7011867959033681, + "2": 0.7859405045656769 + }, + "f1": { + "0": 0.43246034937790995, + "1": 0.5303398623621043, + "2": 0.47323396546721097 + }, + "micro_accuracy": { + "0": 0.8067985692488556, + "1": 0.8939769268879609, + "2": 0.98894783377542 + }, + "coverage": { + "0": 0.7573501553383345, + "1": 0.8029665833143896, + "2": 0.8998636053648557 + } + } + }, + { + "thresholds": [ + 0.6565299034118652, + 0.6691723704338074, + 0.7000000000000001 + ], + "scores": { + "accuracy": { + "0": 0.8259110593072747, + "1": 0.9316166318158218, + "2": 0.9701972493446308 + }, + "precision": { + "0": 0.5834195432185107, + "1": 0.6377036801524625, + "2": 0.5098036818136686 + }, + "recall": { + "0": 0.5780391806859115, + "1": 0.6994300091652399, + "2": 0.7817733112683922 + }, + "f1": { + "0": 0.43411673716703486, + "1": 0.5320825421328166, + "2": 0.47177548436047534 + }, + "micro_accuracy": { + "0": 0.8109893447394396, + "1": 0.8955690950902065, + "2": 0.9892303152925308 + }, + "coverage": { + "0": 0.7484845040539516, + "1": 0.7990641812533151, + "2": 0.898840645601273 + } + } + }, + { + "thresholds": [ + 0.66, + 0.68, + 0.72 + ], + "scores": { + "accuracy": { + "0": 0.8261349410066672, + "1": 0.934281927319884, + "2": 0.9713169406676776 + }, + "precision": { + "0": 0.5858929734156744, + "1": 0.6435763836851517, + "2": 0.5238892897046304 + }, + "recall": { + "0": 0.5771664807953762, + "1": 0.6968974774260187, + "2": 0.7786746337052538 + }, + "f1": { + "0": 0.43487311930707695, + "1": 0.5355101616850729, + "2": 0.48328661415847063 + }, + "micro_accuracy": { + "0": 0.8117847083005557, + "1": 0.8975178235055676, + "2": 0.990127955258029 + }, + "coverage": { + "0": 0.7465143593240888, + "1": 0.7944798060165189, + "2": 0.8942183829658256 + } + } + }, + { + "thresholds": [ + 0.68, + 0.7000000000000001, + 0.74 + ], + "scores": { + "accuracy": { + "0": 0.8344423853510767, + "1": 0.9386135658075512, + "2": 0.974642294066771 + }, + "precision": { + "0": 0.5968463401541488, + "1": 0.6573111430970107, + "2": 0.5565963557109618 + }, + "recall": { + "0": 0.5717642523729206, + "1": 0.6898256336652248, + "2": 0.7756901330852325 + }, + "f1": { + "0": 0.4386941029811446, + "1": 0.5415852040218777, + "2": 0.5106193874853928 + }, + "micro_accuracy": { + "0": 0.8175278465346535, + "1": 0.900696234551543, + "2": 0.9911161294445983 + }, + "coverage": { + "0": 0.7347124346442373, + "1": 0.786334015306509, + "2": 0.8891983026445405 + } + } + }, + { + "thresholds": [ + 0.7000000000000001, + 0.72, + 0.76 + ], + "scores": { + "accuracy": { + "0": 0.8395841303134072, + "1": 0.9399241568767652, + "2": 0.9756140939215947 + }, + "precision": { + "0": 0.6098737913258159, + "1": 0.6704574655339746, + "2": 0.5755342260972793 + }, + "recall": { + "0": 0.5619640670374774, + "1": 0.6799613063221245, + "2": 0.7504506757358773 + }, + "f1": { + "0": 0.44092038002206324, + "1": 0.5468194132002746, + "2": 0.5157071324749651 + }, + "micro_accuracy": { + "0": 0.8226410155738778, + "1": 0.9034855155303675, + "2": 0.9920279450528255 + }, + "coverage": { + "0": 0.7237440327347124, + "1": 0.7788323103735697, + "2": 0.8839698416306736 + } + } + }, + { + "thresholds": [ + 0.72, + 0.74, + 0.78 + ], + "scores": { + "accuracy": { + "0": 0.8423501196062877, + "1": 0.9402964583121297, + "2": 0.9768824341625362 + }, + "precision": { + "0": 0.625437304885391, + "1": 0.683561538591604, + "2": 0.5940637891203783 + }, + "recall": { + "0": 0.5528512219426744, + "1": 0.6749686656589812, + "2": 0.7470814327717062 + }, + "f1": { + "0": 0.4449499115437451, + "1": 0.5542333882041446, + "2": 0.531177040427964 + }, + "micro_accuracy": { + "0": 0.8273883827786779, + "1": 0.9063038236307268, + "2": 0.9929506111626102 + }, + "coverage": { + "0": 0.7132492233083276, + "1": 0.7699098279912101, + "2": 0.8787413806168068 + } + } + }, + { + "thresholds": [ + 0.74, + 0.76, + 0.8 + ], + "scores": { + "accuracy": { + "0": 0.8463649579970157, + "1": 0.940216182509555, + "2": 0.9774283680831387 + }, + "precision": { + "0": 0.6371715558637081, + "1": 0.6925092932203307, + "2": 0.5969830983078246 + }, + "recall": { + "0": 0.5477329787807753, + "1": 0.6688145458396724, + "2": 0.7441754993023312 + }, + "f1": { + "0": 0.44891146151293565, + "1": 0.5580536322120937, + "2": 0.5325763988664586 + }, + "micro_accuracy": { + "0": 0.8321368813083607, + "1": 0.9090320814355758, + "2": 0.9937857158377333 + }, + "coverage": { + "0": 0.7019398348109419, + "1": 0.7611388952034553, + "2": 0.8718458740622869 + } + } + }, + { + "thresholds": [ + 0.7456764996051789, + 0.78, + 0.8200000000000001 + ], + "scores": { + "accuracy": { + "0": 0.8470722914376193, + "1": 0.9448668247874524, + "2": 0.9775813449374122 + }, + "precision": { + "0": 0.6391890475798446, + "1": 0.709993588972809, + "2": 0.6179778523808357 + }, + "recall": { + "0": 0.5433424478932868, + "1": 0.6624124710344891, + "2": 0.7326713495230904 + }, + "f1": { + "0": 0.4479025251155606, + "1": 0.5681195205862982, + "2": 0.5444082207241341 + }, + "micro_accuracy": { + "0": 0.8333514011599544, + "1": 0.911995162631327, + "2": 0.9945648600670626 + }, + "coverage": { + "0": 0.6989846177161476, + "1": 0.7518943699325604, + "2": 0.8643820565279988 + } + } + }, + { + "thresholds": [ + 0.7484260499477386, + 0.7870529741048813, + 0.84 + ], + "scores": { + "accuracy": { + "0": 0.8465208024160925, + "1": 0.945291067080785, + "2": 0.9783773542142998 + }, + "precision": { + "0": 0.6381169943670084, + "1": 0.7145816417888794, + "2": 0.6185898839417044 + }, + "recall": { + "0": 0.5418132969389368, + "1": 0.6599159648524986, + "2": 0.7245824597984994 + }, + "f1": { + "0": 0.44667552768137514, + "1": 0.5697131097832999, + "2": 0.5412518110331637 + }, + "micro_accuracy": { + "0": 0.8340124966041836, + "1": 0.9128938377831204, + "2": 0.9952446253207113 + }, + "coverage": { + "0": 0.6973175721754944, + "1": 0.7485602788512541, + "2": 0.8564825339092218 + } + } + }, + { + "thresholds": [ + 0.76, + 0.8, + 0.8514585137367249 + ], + "scores": { + "accuracy": { + "0": 0.8489431692878796, + "1": 0.9453774504583593, + "2": 0.9804985839228043 + }, + "precision": { + "0": 0.6493315943552593, + "1": 0.7247916942850378, + "2": 0.638741334793761 + }, + "recall": { + "0": 0.5385761013245209, + "1": 0.655635629605617, + "2": 0.7186775364269672 + }, + "f1": { + "0": 0.4512554180613582, + "1": 0.5742293393881358, + "2": 0.555762605625137 + }, + "micro_accuracy": { + "0": 0.8370829675153644, + "1": 0.9145912013881801, + "2": 0.9956623289956623 + }, + "coverage": { + "0": 0.6904599530196257, + "1": 0.7423656891717815, + "2": 0.8516140031825414 + } + } + }, + { + "thresholds": [ + 0.78, + 0.8200000000000001, + 0.86 + ], + "scores": { + "accuracy": { + "0": 0.8543496914643167, + "1": 0.9468540662604529, + "2": 0.9846489425961643 + }, + "precision": { + "0": 0.6667958656933289, + "1": 0.7426004170812949, + "2": 0.6814804889041144 + }, + "recall": { + "0": 0.5286308050491648, + "1": 0.6473190645399111, + "2": 0.7170747307068346 + }, + "f1": { + "0": 0.4549898339955342, + "1": 0.5826868669138732, + "2": 0.5920820321167594 + }, + "micro_accuracy": { + "0": 0.8420934976388074, + "1": 0.9173051040480381, + "2": 0.9957997274291204 + }, + "coverage": { + "0": 0.6779381677654013, + "1": 0.7319087671440478, + "2": 0.8479010381147231 + } + } + }, + { + "thresholds": [ + 0.8, + 0.84, + 0.88 + ], + "scores": { + "accuracy": { + "0": 0.8571043269845959, + "1": 0.9479971122287032, + "2": 0.9852665821141021 + }, + "precision": { + "0": 0.6875065744641273, + "1": 0.7519126469653977, + "2": 0.681702435173093 + }, + "recall": { + "0": 0.5189745717918203, + "1": 0.6380836030276239, + "2": 0.7112934918478875 + }, + "f1": { + "0": 0.4596967511459941, + "1": 0.5818180608519495, + "2": 0.5893607177079055 + }, + "micro_accuracy": { + "0": 0.846808631782725, + "1": 0.9198485326601451, + "2": 0.9962061334176415 + }, + "coverage": { + "0": 0.6654163825111767, + "1": 0.7203909979540805, + "2": 0.8388648935364098 + } + } + }, + { + "thresholds": [ + 0.8200000000000001, + 0.86, + 0.9 + ], + "scores": { + "accuracy": { + "0": 0.8619585155027756, + "1": 0.9531534141743057, + "2": 0.986257109518924 + }, + "precision": { + "0": 0.7071329036531397, + "1": 0.7689164934422168, + "2": 0.7071672289650286 + }, + "recall": { + "0": 0.5091597355871952, + "1": 0.6283594242093068, + "2": 0.698142746101181 + }, + "f1": { + "0": 0.46284330029270326, + "1": 0.5860897743308765, + "2": 0.6055676977756497 + }, + "micro_accuracy": { + "0": 0.8517926666279273, + "1": 0.9231344679259398, + "2": 0.9967507207908105 + }, + "coverage": { + "0": 0.6520042433886489, + "1": 0.7090437220580434, + "2": 0.8278775479275593 + } + } + }, + { + "thresholds": [ + 0.8264622539281845, + 0.8759860098361969, + 0.92 + ], + "scores": { + "accuracy": { + "0": 0.8637848262532208, + "1": 0.9533632911945014, + "2": 0.988153084741252 + }, + "precision": { + "0": 0.7085403828053932, + "1": 0.784792371905105, + "2": 0.7435245532287457 + }, + "recall": { + "0": 0.5061620123123874, + "1": 0.6176629588211429, + "2": 0.6836274899557798 + }, + "f1": { + "0": 0.461866851630814, + "1": 0.5868633065886132, + "2": 0.6261130948318617 + }, + "micro_accuracy": { + "0": 0.8532459169935023, + "1": 0.9258405014517136, + "2": 0.9974399553155837 + }, + "coverage": { + "0": 0.6472304311585967, + "1": 0.6981321512464954, + "2": 0.8139728726225657 + } + } + }, + { + "thresholds": [ + 0.84, + 0.8782991468906403, + 0.9364732980728149 + ], + "scores": { + "accuracy": { + "0": 0.8670729969060553, + "1": 0.9533159076814397, + "2": 0.9927708608307263 + }, + "precision": { + "0": 0.719885379479109, + "1": 0.7870150011024752, + "2": 0.7489214434586575 + }, + "recall": { + "0": 0.5010430254085447, + "1": 0.6166634784228663, + "2": 0.6685411756299292 + }, + "f1": { + "0": 0.46257936134522293, + "1": 0.587756280670877, + "2": 0.6193749423273058 + }, + "micro_accuracy": { + "0": 0.8556964280412126, + "1": 0.9261675637470776, + "2": 0.997982818358726 + }, + "coverage": { + "0": 0.6380048495870273, + "1": 0.6968629233916799, + "2": 0.7982496021823141 + } + } + }, + { + "thresholds": [ + 0.86, + 0.88, + 0.9400000000000001 + ], + "scores": { + "accuracy": { + "0": 0.8706884912621817, + "1": 0.9535461644178388, + "2": 0.9941523987471009 + }, + "precision": { + "0": 0.7315950064925006, + "1": 0.7897417800991028, + "2": 0.7768469419092289 + }, + "recall": { + "0": 0.4896275602320039, + "1": 0.6157729176051233, + "2": 0.6652857270977391 + }, + "f1": { + "0": 0.4615205075654005, + "1": 0.5888425955261315, + "2": 0.6402708487484874 + }, + "micro_accuracy": { + "0": 0.8605266358550231, + "1": 0.926511830533395, + "2": 0.9981643064892958 + }, + "coverage": { + "0": 0.6230203834204744, + "1": 0.6957452451314693, + "2": 0.7946124119117981 + } + } + }, + { + "thresholds": [ + 0.88, + 0.9, + 0.9553309082984924 + ], + "scores": { + "accuracy": { + "0": 0.8793579893163278, + "1": 0.9568801185512408, + "2": 0.9963653352691595 + }, + "precision": { + "0": 0.7550323783486348, + "1": 0.8211946224210389, + "2": 0.841348645086206 + }, + "recall": { + "0": 0.4755547780712371, + "1": 0.6042394158387125, + "2": 0.6466603488658192 + }, + "f1": { + "0": 0.46165809067739916, + "1": 0.597889469434143, + "2": 0.6545226053114057 + }, + "micro_accuracy": { + "0": 0.8653810089391761, + "1": 0.929561008178935, + "2": 0.9986057092536875 + }, + "coverage": { + "0": 0.6060847162233841, + "1": 0.6809502159581723, + "2": 0.7744373721300295 + } + } + }, + { + "thresholds": [ + 0.8903758764266968, + 0.92, + 0.96 + ], + "scores": { + "accuracy": { + "0": 0.881825084120903, + "1": 0.9605049154328256, + "2": 0.9963510429161949 + }, + "precision": { + "0": 0.7742583039758238, + "1": 0.8442414682151989, + "2": 0.8412084293924852 + }, + "recall": { + "0": 0.46896066132093595, + "1": 0.589338697650042, + "2": 0.6390855348255022 + }, + "f1": { + "0": 0.46378207381995684, + "1": 0.5989102808804448, + "2": 0.6496969678563335 + }, + "micro_accuracy": { + "0": 0.8673708920187794, + "1": 0.9329754119427707, + "2": 0.9986414385930245 + }, + "coverage": { + "0": 0.59718117754035, + "1": 0.6633515192846859, + "2": 0.7669167234977646 + } + } + }, + { + "thresholds": [ + 0.9, + 0.9384227305650711, + 0.9707285761833192 + ], + "scores": { + "accuracy": { + "0": 0.886591232582187, + "1": 0.9655906990330169, + "2": 0.9969807550506485 + }, + "precision": { + "0": 0.7858127606113039, + "1": 0.8718273283163155, + "2": 0.8426490305365167 + }, + "recall": { + "0": 0.4632320753750467, + "1": 0.5711784918349673, + "2": 0.6148343118521129 + }, + "f1": { + "0": 0.46285037780071864, + "1": 0.6004209623980667, + "2": 0.6340292729908725 + }, + "micro_accuracy": { + "0": 0.8692711520499855, + "1": 0.9365902528139548, + "2": 0.9989575122683008 + }, + "coverage": { + "0": 0.5881829203606881, + "1": 0.6429112677123588, + "2": 0.7450367507766916 + } + } + }, + { + "thresholds": [ + 0.92, + 0.9400000000000001, + 0.98 + ], + "scores": { + "accuracy": { + "0": 0.9011322075678474, + "1": 0.9689250623553353, + "2": 0.9982386290893209 + }, + "precision": { + "0": 0.8090470115825958, + "1": 0.8777217439050252, + "2": 0.9374678404832453 + }, + "recall": { + "0": 0.4454532693078384, + "1": 0.5702029500310949, + "2": 0.5938620938982623 + }, + "f1": { + "0": 0.4571434450073653, + "1": 0.6034004690909296, + "2": 0.6850994808799825 + }, + "micro_accuracy": { + "0": 0.8740968691463741, + "1": 0.9370474360868922, + "2": 0.9991555837027655 + }, + "coverage": { + "0": 0.5663408350382663, + "1": 0.6409600666818216, + "2": 0.7178904296431007 + } + } + }, + { + "thresholds": [ + 0.9358231902122498, + 0.96, + 0.9848238646984101 + ], + "scores": { + "accuracy": { + "0": 0.906510836908015, + "1": 0.9734821989427783, + "2": 0.9984932116567069 + }, + "precision": { + "0": 0.8293059967395912, + "1": 0.9137623339505435, + "2": 0.9374350444644793 + }, + "recall": { + "0": 0.42752571910339243, + "1": 0.5371145246291884, + "2": 0.5725432168299244 + }, + "f1": { + "0": 0.4507449343115663, + "1": 0.5964815767708255, + "2": 0.6681871407805318 + }, + "micro_accuracy": { + "0": 0.8778930566640064, + "1": 0.9420434052608668, + "2": 0.999293132510467 + }, + "coverage": { + "0": 0.5459384708645905, + "1": 0.6092672577100856, + "2": 0.6967871485943775 + } + } + }, + { + "thresholds": [ + 0.9400000000000001, + 0.9656149983406068, + 0.9913917630910873 + ], + "scores": { + "accuracy": { + "0": 0.9091312269166707, + "1": 0.97456479184628, + "2": 0.9988747475369835 + }, + "precision": { + "0": 0.8365020870222727, + "1": 0.9257302625855923, + "2": 0.9492221081967291 + }, + "recall": { + "0": 0.42232054957550946, + "1": 0.5241133346626884, + "2": 0.5328327796209631 + }, + "f1": { + "0": 0.44914814164225647, + "1": 0.5911845260376621, + "2": 0.6303100265743733 + }, + "micro_accuracy": { + "0": 0.8788388725283971, + "1": 0.944186932503651, + "2": 0.9995343964614131 + }, + "coverage": { + "0": 0.5403500795635372, + "1": 0.5966886413578844, + "2": 0.6509812836250664 + } + } + }, + { + "thresholds": [ + 0.96, + 0.98, + 0.9955343961715699 + ], + "scores": { + "accuracy": { + "0": 0.9201380814593091, + "1": 0.9769537159818455, + "2": 0.9995620811336337 + }, + "precision": { + "0": 0.8823555769833847, + "1": 0.9521627782748059, + "2": 0.9937719515821347 + }, + "recall": { + "0": 0.3927936410731383, + "1": 0.4860069643277699, + "2": 0.49380290755818107 + }, + "f1": { + "0": 0.4391054394630887, + "1": 0.5680042616944154, + "2": 0.6231337382901458 + }, + "micro_accuracy": { + "0": 0.8849031772889641, + "1": 0.9509928324016599, + "2": 0.9996496703716679 + }, + "coverage": { + "0": 0.5038076835644465, + "1": 0.5523793286352959, + "2": 0.5948132151246496 + } + } + }, + { + "thresholds": [ + 0.9607052505016327, + 0.9813370376825332, + 0.9973954737186431 + ], + "scores": { + "accuracy": { + "0": 0.9203827833915593, + "1": 0.9803763280122324, + "2": 0.9995305447848821 + }, + "precision": { + "0": 0.8845675894068831, + "1": 0.9520908484587497, + "2": 0.9937235211674139 + }, + "recall": { + "0": 0.39195270168420143, + "1": 0.48121352266587647, + "2": 0.45835787078723805 + }, + "f1": { + "0": 0.4393158234480972, + "1": 0.5629300215932652, + "2": 0.5899000568822463 + }, + "micro_accuracy": { + "0": 0.8854728582745482, + "1": 0.9520213392455052, + "2": 0.9996172182204127 + }, + "coverage": { + "0": 0.5021785254224445, + "1": 0.5468477684322195, + "2": 0.5443850875198909 + } + } + }, + { + "thresholds": [ + 0.9772910118103028, + 0.9892962574958801, + 0.9983085989952087 + ], + "scores": { + "accuracy": { + "0": 0.9224784524624318, + "1": 0.9853381275150243, + "2": 0.9994750383727553 + }, + "precision": { + "0": 0.9167404636415023, + "1": 0.9628836565616, + "2": 0.9933536987752971 + }, + "recall": { + "0": 0.3500126339945987, + "1": 0.4410249313010055, + "2": 0.40695199945860056 + }, + "f1": { + "0": 0.4090910901421534, + "1": 0.5264544678877461, + "2": 0.530128710967798 + }, + "micro_accuracy": { + "0": 0.8939842414641264, + "1": 0.9584759297284965, + "2": 0.9995818921281691 + }, + "coverage": { + "0": 0.45440251572327045, + "1": 0.498181404864742, + "2": 0.49838978555732366 + } + } + }, + { + "thresholds": [ + 0.98, + 0.9940865129232407, + 0.9988986492156983 + ], + "scores": { + "accuracy": { + "0": 0.9259260133987012, + "1": 0.9886773439576837, + "2": 0.999510892985462 + }, + "precision": { + "0": 0.9287696568079125, + "1": 0.9673937777616789, + "2": 0.9932858564489312 + }, + "recall": { + "0": 0.34305526024314237, + "1": 0.39533064865966283, + "2": 0.37802951388086015 + }, + "f1": { + "0": 0.40545315973152146, + "1": 0.48215579452674406, + "2": 0.4996853730936106 + }, + "micro_accuracy": { + "0": 0.8960351670863386, + "1": 0.9644070676180768, + "2": 0.9995806424557577 + }, + "coverage": { + "0": 0.44386981889823446, + "1": 0.44601045692202773, + "2": 0.45173145411836024 + } + } + }, + { + "thresholds": [ + 0.9875957727432252, + 0.9965847253799439, + 0.9992938041687012 + ], + "scores": { + "accuracy": { + "0": 0.9331721505692478, + "1": 0.9907195641472741, + "2": 0.9995552014846872 + }, + "precision": { + "0": 0.9422783803784637, + "1": 0.9671581118504539, + "2": 0.9924074965852764 + }, + "recall": { + "0": 0.3103849278937484, + "1": 0.3544472807213365, + "2": 0.3411563972986156 + }, + "f1": { + "0": 0.3731481520556834, + "1": 0.43949427729293655, + "2": 0.46023275905537747 + }, + "micro_accuracy": { + "0": 0.906255888449218, + "1": 0.9702378104215512, + "2": 0.9996706502305448 + }, + "coverage": { + "0": 0.4021368492839282, + "1": 0.3959043722058043, + "2": 0.4026293854663939 + } + } + }, + { + "thresholds": [ + 0.9932747930288315, + 0.9979124128818512, + 0.9995260596275328 + ], + "scores": { + "accuracy": { + "0": 0.9352463965386525, + "1": 0.9914784173418828, + "2": 0.999563264394016 + }, + "precision": { + "0": 0.9508631823086221, + "1": 0.9763256115542089, + "2": 0.9995051240748992 + }, + "recall": { + "0": 0.27226119379753927, + "1": 0.30749579213358735, + "2": 0.31424500410311856 + }, + "f1": { + "0": 0.33390137949934684, + "1": 0.3924551263234857, + "2": 0.43067504037440046 + }, + "micro_accuracy": { + "0": 0.9229348829631239, + "1": 0.9735764590271333, + "2": 0.9997324199935781 + }, + "coverage": { + "0": 0.34881033568235204, + "1": 0.34699174054709403, + "2": 0.353981965598242 + } + } + }, + { + "thresholds": [ + 0.9960826754570007, + 0.9987055897712708, + 0.9996948003768921 + ], + "scores": { + "accuracy": { + "0": 0.9573140772989064, + "1": 0.9925696431860658, + "2": 0.9997660694509847 + }, + "precision": { + "0": 0.9607018462729368, + "1": 0.9759817588055099, + "2": 0.9994063575910344 + }, + "recall": { + "0": 0.23800497399583997, + "1": 0.26067454450586236, + "2": 0.2787525297122127 + }, + "f1": { + "0": 0.2983482724305761, + "1": 0.3414928648913302, + "2": 0.39011506147599617 + }, + "micro_accuracy": { + "0": 0.9419760855884204, + "1": 0.9767953716513647, + "2": 0.9998108448928121 + }, + "coverage": { + "0": 0.3010153822838524, + "1": 0.30124270667575964, + "2": 0.30044707130408427 + } + } + }, + { + "thresholds": [ + 0.9978011250495912, + 0.9992076456546783, + 0.9997953176498412 + ], + "scores": { + "accuracy": { + "0": 0.9708235983178943, + "1": 0.9913075596255322, + "2": 0.9997214337089178 + }, + "precision": { + "0": 0.9746213607645572, + "1": 0.9755145939723172, + "2": 0.9992375117389883 + }, + "recall": { + "0": 0.19821929544214625, + "1": 0.21949172259808997, + "2": 0.20217148462215026 + }, + "f1": { + "0": 0.25544425709876367, + "1": 0.2923870092827054, + "2": 0.30481093108822277 + }, + "micro_accuracy": { + "0": 0.9604975499434603, + "1": 0.9806089986365703, + "2": 0.999771897810219 + }, + "coverage": { + "0": 0.25128817155414107, + "1": 0.250094718496628, + "2": 0.2491475335303478 + } + } + }, + { + "thresholds": [ + 0.9988435983657837, + 0.999499273300171, + 0.9998620271682739 + ], + "scores": { + "accuracy": { + "0": 0.9683993379169851, + "1": 0.9916418296737117, + "2": 0.9996706188263316 + }, + "precision": { + "0": 0.9713779728036155, + "1": 0.9792603548847767, + "2": 0.9988940585239571 + }, + "recall": { + "0": 0.15619606172629563, + "1": 0.1834233948558034, + "2": 0.1683170144739328 + }, + "f1": { + "0": 0.20716032616418617, + "1": 0.24917453600280476, + "2": 0.2614486273050826 + }, + "micro_accuracy": { + "0": 0.9705014749262537, + "1": 0.9824943224829674, + "2": 0.9997144488863506 + }, + "coverage": { + "0": 0.19907933621277563, + "1": 0.2001970144729863, + "2": 0.19902250511479883 + } + } + }, + { + "thresholds": [ + 0.9993874788284302, + 0.9997047066688538, + 0.9999080121517181 + ], + "scores": { + "accuracy": { + "0": 0.9734026054590572, + "1": 0.9890064523536952, + "2": 0.9997335081826407 + }, + "precision": { + "0": 0.9766218822426014, + "1": 0.9779898251796572, + "2": 0.9986558482321194 + }, + "recall": { + "0": 0.11601045771952677, + "1": 0.14716721280469058, + "2": 0.14282164383349263 + }, + "f1": { + "0": 0.1574276747905172, + "1": 0.2024921138815404, + "2": 0.22602166338437504 + }, + "micro_accuracy": { + "0": 0.975282038281151, + "1": 0.984552008238929, + "2": 0.9997513983840896 + }, + "coverage": { + "0": 0.14944684397969235, + "1": 0.14715465636129424, + "2": 0.15240206107448662 + } + } + }, + { + "thresholds": [ + 0.9996896624565124, + 0.9998403072357179, + 0.9999478816986085 + ], + "scores": { + "accuracy": { + "0": 0.9735666954768076, + "1": 0.9851212780383991, + "2": 0.9995986261837987 + }, + "precision": { + "0": 0.9762307984584486, + "1": 0.9801817499273991, + "2": 0.99756177540831 + }, + "recall": { + "0": 0.08287248268135407, + "1": 0.10181907018837157, + "2": 0.10147293482047917 + }, + "f1": { + "0": 0.11537168947420108, + "1": 0.1447058301405982, + "2": 0.16249847102038203 + }, + "micro_accuracy": { + "0": 0.9773798303487277, + "1": 0.9902818270165209, + "2": 0.9996181748759069 + }, + "coverage": { + "0": 0.10049632492233083, + "1": 0.09746533303023415, + "2": 0.09922709706751534 + } + } + }, + { + "thresholds": [ + 0.9998803675174713, + 0.9999271392822265, + 0.999975073337555 + ], + "scores": { + "accuracy": { + "0": 0.984, + "1": 0.9857723577235772, + "2": 0.9997667910447762 + }, + "precision": { + "0": 0.9865591397849464, + "1": 0.9838709677419355, + "2": 0.9999384842519685 + }, + "recall": { + "0": 0.04411898815251362, + "1": 0.057582958130658946, + "2": 0.06258298773516474 + }, + "f1": { + "0": 0.06412087465442835, + "1": 0.0844458044292747, + "2": 0.1037415985418921 + }, + "micro_accuracy": { + "0": 0.9918864097363083, + "1": 0.9981460882461994, + "2": 0.99962852897474 + }, + "coverage": { + "0": 0.04669621883761461, + "1": 0.05109115708115481, + "2": 0.050996438584526786 + } + } + }, + { + "thresholds": [ + 0.9999982118606568, + 0.9999982118606568, + 0.9999992847442628 + ], + "scores": { + "accuracy": { + "0": null, + "1": null, + "2": 1.0 + }, + "precision": { + "0": null, + "1": null, + "2": 1.0 + }, + "recall": { + "0": 0.0, + "1": 0.0, + "2": 9.089093550847099e-05 + }, + "f1": { + "0": 0.0, + "1": 0.0, + "2": 0.00018147404100256836 + }, + "micro_accuracy": { + "0": null, + "1": null, + "2": 1.0 + }, + "coverage": { + "0": 0.0, + "1": 0.0, + "2": 7.577479730241721e-05 + } + } + }, + { + "thresholds": [ + 1.0, + 1.0, + 1.0 + ], + "scores": { + "accuracy": { + "0": null, + "1": null, + "2": null + }, + "precision": { + "0": null, + "1": null, + "2": null + }, + "recall": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "f1": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "micro_accuracy": { + "0": null, + "1": null, + "2": null + }, + "coverage": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + } + } + } + ] + }, + "torch": { + "source": "local-evidence/mambo-accelerated-quality/torch-cuda-0-prediction/north_europe/mini_metric.csv", + "source_sha256": "b6793f4f24ba092912a5d468a86f2f3402d1281a6e63190e623d1cadc13fc027", + "identities": { + "full": "0f6e02db8e7eaaabc9617dcb0af5e0a7def4886578e46b4f919316b4ca6e7165", + "report": "80144bd4f34d9705bcae1dad496ccf13a7160b5709139b34710e5d75a3252fed", + "calibration": "07e2e6f88b36f3e9f348adaf4526ed62e8725eba4116780a0410bf5d18f5d3fd" + }, + "report_images": 52788, + "calibration_images": 5852, + "thresholds": [ + 0.8099595010280609, + 0.82109534740448, + 0.970800906419754 + ], + "full_zero": { + "accuracy": { + "0": 0.7124755690715492, + "1": 0.8053483819748223, + "2": 0.8105098078966045 + }, + "precision": { + "0": 0.26342704573380454, + "1": 0.3189366087734117, + "2": 0.27535126159560075 + }, + "recall": { + "0": 0.7124755690715492, + "1": 0.8053483819748223, + "2": 0.8105098078966045 + }, + "f1": { + "0": 0.25428952382168724, + "1": 0.32041240991084785, + "2": 0.28044633693466975 + }, + "micro_accuracy": { + "0": 0.7078274215552524, + "1": 0.7936903137789905, + "2": 0.9296896316507504 + }, + "theilU": { + "0": 0.928300449968092, + "1": 0.9269683891259273, + "2": 0.848717056770075 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "report_zero": { + "accuracy": { + "0": 0.7135646156794592, + "1": 0.8053026558890463, + "2": 0.8104767092433202 + }, + "precision": { + "0": 0.2688723997356787, + "1": 0.3221313136590869, + "2": 0.2753352445359579 + }, + "recall": { + "0": 0.7135646156794592, + "1": 0.8053026558890463, + "2": 0.8104767092433202 + }, + "f1": { + "0": 0.2592869317361528, + "1": 0.32303518958457, + "2": 0.2804941988278224 + }, + "micro_accuracy": { + "0": 0.7077555505039024, + "1": 0.7939683261347276, + "2": 0.9298325376979617 + }, + "theilU": { + "0": 0.9292211983468999, + "1": 0.9278616328176507, + "2": 0.8486962980431905 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "report_optimized": { + "accuracy": { + "0": 0.8669405316273155, + "1": 0.9547996220084877, + "2": 0.9932547854813464 + }, + "precision": { + "0": 0.7028135267405738, + "1": 0.745381822803767, + "2": 0.74059226732527 + }, + "recall": { + "0": 0.5774611074285403, + "1": 0.678410498949023, + "2": 0.6535073068400129 + }, + "f1": { + "0": 0.5081384528044555, + "1": 0.6019267109931725, + "2": 0.5807455159791289 + }, + "micro_accuracy": { + "0": 0.8338193199753886, + "1": 0.9077246242716747, + "2": 0.997951563553389 + }, + "theilU": { + "0": 0.9292211983468999, + "1": 0.9278616328176507, + "2": 0.8486962980431905 + }, + "coverage": { + "0": 0.7081344244904145, + "1": 0.7575395923315905, + "2": 0.7305827081912556 + } + }, + "known_zero": { + "accuracy": { + "0": 0.7361279236851337, + "1": 0.8078113869042769, + "2": 0.8104767092433202 + }, + "precision": { + "0": 0.2738542317578795, + "1": 0.32216140875960464, + "2": 0.2753352445359579 + }, + "recall": { + "0": 0.7361279236851337, + "1": 0.8078113869042769, + "2": 0.8104767092433202 + }, + "f1": { + "0": 0.26625840334333606, + "1": 0.3235133592367779, + "2": 0.2804941988278224 + }, + "micro_accuracy": { + "0": 0.8202555545797839, + "1": 0.7939833671169038, + "2": 0.9298325376979617 + }, + "theilU": { + "0": 0.9324282979117112, + "1": 0.9278762362942725, + "2": 0.8486962980431905 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known_optimized": { + "accuracy": { + "0": 0.8950879514853453, + "1": 0.9579612101608337, + "2": 0.9932547854813464 + }, + "precision": { + "0": 0.7274246435276156, + "1": 0.7455458647985177, + "2": 0.74059226732527 + }, + "recall": { + "0": 0.5957207471891266, + "1": 0.6805239272946587, + "2": 0.6535073068400129 + }, + "f1": { + "0": 0.536222132076529, + "1": 0.6035241537526418, + "2": 0.5807455159791289 + }, + "micro_accuracy": { + "0": 0.969125054412039, + "1": 0.9077473241972592, + "2": 0.997951563553389 + }, + "theilU": { + "0": 0.9324282979117112, + "1": 0.9278762362942725, + "2": 0.8486962980431905 + }, + "coverage": { + "0": 0.7061122332484412, + "1": 0.7575349991475174, + "2": 0.7305827081912556 + } + }, + "calibration_zero": { + "accuracy": { + "0": 0.7431928073366078, + "1": 0.8356042367797194, + "2": 0.8492252662006303 + }, + "precision": { + "0": 0.44283216408639003, + "1": 0.47899556907578955, + "2": 0.3398730861115349 + }, + "recall": { + "0": 0.7431928073366078, + "1": 0.8356042367797194, + "2": 0.8492252662006303 + }, + "f1": { + "0": 0.4024595628388436, + "1": 0.4663674702082115, + "2": 0.34745500035047533 + }, + "micro_accuracy": { + "0": 0.7084757347915243, + "1": 0.7911825017088175, + "2": 0.9284005468215994 + }, + "theilU": { + "0": 0.954259253906316, + "1": 0.9534771364475659, + "2": 0.8586883764262561 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "calibration_optimized": { + "accuracy": { + "0": 0.9087050351179481, + "1": 0.973462276709025, + "2": 0.9994922429367045 + }, + "precision": { + "0": 0.8482813983760845, + "1": 0.8843100424805983, + "2": 0.9029309874313405 + }, + "recall": { + "0": 0.6176015410523515, + "1": 0.7189420501301624, + "2": 0.7032656378963092 + }, + "f1": { + "0": 0.601488158405302, + "1": 0.7145410434590399, + "2": 0.7261852919766372 + }, + "micro_accuracy": { + "0": 0.8334935127342624, + "1": 0.9085598741855763, + "2": 0.9974648536529154 + }, + "theilU": { + "0": 0.954259253906316, + "1": 0.9534771364475659, + "2": 0.8586883764262561 + }, + "coverage": { + "0": 0.7112098427887902, + "1": 0.7605946684894054, + "2": 0.741455912508544 + } + }, + "curve": [ + { + "thresholds": [ + 0.0, + 0.0, + 0.0 + ], + "scores": { + "accuracy": { + "0": 0.7135646156794592, + "1": 0.8053026558890463, + "2": 0.8104767092433202 + }, + "precision": { + "0": 0.2688723997356787, + "1": 0.3221313136590869, + "2": 0.2753352445359579 + }, + "recall": { + "0": 0.7135646156794592, + "1": 0.8053026558890463, + "2": 0.8104767092433202 + }, + "f1": { + "0": 0.2592869317361528, + "1": 0.32303518958457, + "2": 0.2804941988278224 + }, + "micro_accuracy": { + "0": 0.7077555505039024, + "1": 0.7939683261347276, + "2": 0.9298325376979617 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + }, + { + "thresholds": [ + 0.0166451707482337, + 0.02, + 0.02 + ], + "scores": { + "accuracy": { + "0": 0.7135733255087736, + "1": 0.8053167755502332, + "2": 0.8104767092433202 + }, + "precision": { + "0": 0.2688723997356787, + "1": 0.3221313136590869, + "2": 0.2753352445359579 + }, + "recall": { + "0": 0.7135646156794592, + "1": 0.8053026558890463, + "2": 0.8104767092433202 + }, + "f1": { + "0": 0.2592869317361528, + "1": 0.32303518958457, + "2": 0.2804941988278224 + }, + "micro_accuracy": { + "0": 0.7077689582662398, + "1": 0.7939833671169038, + "2": 0.9298325376979617 + }, + "coverage": { + "0": 0.9999810563006744, + "1": 0.9999810563006744, + "2": 1.0 + } + } + }, + { + "thresholds": [ + 0.02, + 0.0225094985216856, + 0.04 + ], + "scores": { + "accuracy": { + "0": 0.7136102579991642, + "1": 0.8053345126744323, + "2": 0.8104767092433202 + }, + "precision": { + "0": 0.26888116867259654, + "1": 0.3225856596586061, + "2": 0.2753352445359579 + }, + "recall": { + "0": 0.7135646156794592, + "1": 0.8053026558890463, + "2": 0.8104767092433202 + }, + "f1": { + "0": 0.2592921813345108, + "1": 0.3234888906935371, + "2": 0.2804941988278224 + }, + "micro_accuracy": { + "0": 0.7078360046985714, + "1": 0.7940284934828736, + "2": 0.9298325376979617 + }, + "coverage": { + "0": 0.9998863378040463, + "1": 0.9999242252026976, + "2": 1.0 + } + } + }, + { + "thresholds": [ + 0.04, + 0.04, + 0.06 + ], + "scores": { + "accuracy": { + "0": 0.7154068545364011, + "1": 0.8066214784413376, + "2": 0.8104767092433202 + }, + "precision": { + "0": 0.2735851339877319, + "1": 0.32479638848141157, + "2": 0.2753352445359579 + }, + "recall": { + "0": 0.7135168562526097, + "1": 0.8052716015282977, + "2": 0.8104767092433202 + }, + "f1": { + "0": 0.2633110843139634, + "1": 0.32553059221159353, + "2": 0.2804941988278224 + }, + "micro_accuracy": { + "0": 0.7097693506098719, + "1": 0.7950561541963879, + "2": 0.9298325376979617 + }, + "coverage": { + "0": 0.9970826703038569, + "1": 0.9985602788512541, + "2": 1.0 + } + } + }, + { + "thresholds": [ + 0.06, + 0.06, + 0.08 + ], + "scores": { + "accuracy": { + "0": 0.7217586913025288, + "1": 0.8100011144830764, + "2": 0.8104767092433202 + }, + "precision": { + "0": 0.2806641421279727, + "1": 0.32977259794213715, + "2": 0.2753352445359579 + }, + "recall": { + "0": 0.7133346973623459, + "1": 0.8051354843772913, + "2": 0.8104767092433202 + }, + "f1": { + "0": 0.2686130308855364, + "1": 0.3297199460975378, + "2": 0.2804941988278224 + }, + "micro_accuracy": { + "0": 0.7132840411914179, + "1": 0.7981023872577971, + "2": 0.9298325376979617 + }, + "coverage": { + "0": 0.9915321664014549, + "1": 0.9942979465029931, + "2": 1.0 + } + } + }, + { + "thresholds": [ + 0.08, + 0.08, + 0.0918381661176681 + ], + "scores": { + "accuracy": { + "0": 0.7281971166083666, + "1": 0.8211596640434917, + "2": 0.8107109063197128 + }, + "precision": { + "0": 0.2912107679074111, + "1": 0.3350508616470955, + "2": 0.2753411448936671 + }, + "recall": { + "0": 0.7123636129432008, + "1": 0.8037733528980473, + "2": 0.8104767092433202 + }, + "f1": { + "0": 0.2766754154991814, + "1": 0.3334172654852787, + "2": 0.28049956989146435 + }, + "micro_accuracy": { + "0": 0.7177591683511406, + "1": 0.8021659957830171, + "2": 0.9298677679687796 + }, + "coverage": { + "0": 0.9840304614685156, + "1": 0.9882927938167766, + "2": 0.9999621126013488 + } + } + }, + { + "thresholds": [ + 0.1, + 0.1, + 0.1 + ], + "scores": { + "accuracy": { + "0": 0.7339701051859209, + "1": 0.8272389675168235, + "2": 0.8107343235819404 + }, + "precision": { + "0": 0.3018591319207022, + "1": 0.34633642849694746, + "2": 0.2753686397410408 + }, + "recall": { + "0": 0.7119125033357695, + "1": 0.8032023946505402, + "2": 0.8104767092433202 + }, + "f1": { + "0": 0.2855034576590097, + "1": 0.3434322393181366, + "2": 0.28051980246178837 + }, + "micro_accuracy": { + "0": 0.7224431983546441, + "1": 0.8066103264644594, + "2": 0.9299206183809181 + }, + "coverage": { + "0": 0.9763393195423202, + "1": 0.9818140486474198, + "2": 0.999905281503372 + } + } + }, + { + "thresholds": [ + 0.12, + 0.12, + 0.12 + ], + "scores": { + "accuracy": { + "0": 0.7394872554926166, + "1": 0.8316607829745173, + "2": 0.8114460906616722 + }, + "precision": { + "0": 0.31097177261475584, + "1": 0.3553276116660215, + "2": 0.2755653428632906 + }, + "recall": { + "0": 0.7109638550029029, + "1": 0.8023190248903622, + "2": 0.8104259307636924 + }, + "f1": { + "0": 0.292312895442343, + "1": 0.3508185508474658, + "2": 0.28070516788949856 + }, + "micro_accuracy": { + "0": 0.7269278898795558, + "1": 0.8112807958343048, + "2": 0.9304741861479249 + }, + "coverage": { + "0": 0.9688565583087065, + "1": 0.9749943168902023, + "2": 0.9991475335303478 + } + } + }, + { + "thresholds": [ + 0.14, + 0.14, + 0.14 + ], + "scores": { + "accuracy": { + "0": 0.7452474918961705, + "1": 0.8378513950372982, + "2": 0.8127040233150439 + }, + "precision": { + "0": 0.3203662679717986, + "1": 0.3639662340510054, + "2": 0.28105675795028584 + }, + "recall": { + "0": 0.7100814488038172, + "1": 0.8011202967026021, + "2": 0.8102936343247459 + }, + "f1": { + "0": 0.2993489243985061, + "1": 0.357806660653504, + "2": 0.28597475756208096 + }, + "micro_accuracy": { + "0": 0.7311162772370858, + "1": 0.8155567728304249, + "2": 0.9314285714285714 + }, + "coverage": { + "0": 0.9615442903690232, + "1": 0.9683261347275895, + "2": 0.9978593619762067 + } + } + }, + { + "thresholds": [ + 0.16, + 0.16, + 0.16 + ], + "scores": { + "accuracy": { + "0": 0.7481635566642026, + "1": 0.8408583755377148, + "2": 0.8147720580176724 + }, + "precision": { + "0": 0.33086660145486885, + "1": 0.3727895277165683, + "2": 0.28169910113589186 + }, + "recall": { + "0": 0.7083700228288919, + "1": 0.7998002397778846, + "2": 0.8100238466034935 + }, + "f1": { + "0": 0.30679701064976345, + "1": 0.3647895367339863, + "2": 0.28645950036895657 + }, + "micro_accuracy": { + "0": 0.735162173964826, + "1": 0.819370593564142, + "2": 0.9329363418439176 + }, + "coverage": { + "0": 0.9543456846252937, + "1": 0.9619231643555354, + "2": 0.9957187239524135 + } + } + }, + { + "thresholds": [ + 0.17741721794009208, + 0.18, + 0.18 + ], + "scores": { + "accuracy": { + "0": 0.7501504682372294, + "1": 0.8439244930369613, + "2": 0.8177545500583719 + }, + "precision": { + "0": 0.338471701858713, + "1": 0.38025551623525655, + "2": 0.28277232493972526 + }, + "recall": { + "0": 0.7075812151832255, + "1": 0.7982677235188925, + "2": 0.8096836601224761 + }, + "f1": { + "0": 0.3123133286828766, + "1": 0.3704947464877397, + "2": 0.2872011317152052 + }, + "micro_accuracy": { + "0": 0.7381846510327195, + "1": 0.823100255744335, + "2": 0.9355300586090376 + }, + "coverage": { + "0": 0.9483594756384026, + "1": 0.9555391376828067, + "2": 0.992289914374479 + } + } + }, + { + "thresholds": [ + 0.18, + 0.2, + 0.2 + ], + "scores": { + "accuracy": { + "0": 0.7505482335001089, + "1": 0.84841801995001, + "2": 0.82096462189951 + }, + "precision": { + "0": 0.338861844732852, + "1": 0.3894846242647861, + "2": 0.3004988096817156 + }, + "recall": { + "0": 0.707442106286529, + "1": 0.796194773322834, + "2": 0.8089263562614329 + }, + "f1": { + "0": 0.3124796799287409, + "1": 0.37797069871756794, + "2": 0.30434782501482033 + }, + "micro_accuracy": { + "0": 0.7384446221511396, + "1": 0.8268946801293052, + "2": 0.9376855736260368 + }, + "coverage": { + "0": 0.9475638402667272, + "1": 0.9493445480033341, + "2": 0.9889179358945215 + } + } + }, + { + "thresholds": [ + 0.2, + 0.20620039030909534, + 0.22 + ], + "scores": { + "accuracy": { + "0": 0.7549549197088121, + "1": 0.8492134406177841, + "2": 0.8233930296461522 + }, + "precision": { + "0": 0.35218684797873306, + "1": 0.3935520754689149, + "2": 0.3072001792259708 + }, + "recall": { + "0": 0.7051558431304843, + "1": 0.7960161352250787, + "2": 0.808076625725409 + }, + "f1": { + "0": 0.3229475992554557, + "1": 0.38153619836286884, + "2": 0.31063797938220206 + }, + "micro_accuracy": { + "0": 0.7421694027595931, + "1": 0.8279460269865068, + "2": 0.9404070326626399 + }, + "coverage": { + "0": 0.9404599530196257, + "1": 0.9476585587633554, + "2": 0.9848071531408653 + } + } + }, + { + "thresholds": [ + 0.22, + 0.22, + 0.24 + ], + "scores": { + "accuracy": { + "0": 0.759781483157454, + "1": 0.8576466485897288, + "2": 0.8292540641410173 + }, + "precision": { + "0": 0.36486940957075936, + "1": 0.4021365583914975, + "2": 0.3148179280878986 + }, + "recall": { + "0": 0.7028600809985364, + "1": 0.7937900404114935, + "2": 0.8070714320386277 + }, + "f1": { + "0": 0.3327557381008877, + "1": 0.3885716054204484, + "2": 0.31747240135235766 + }, + "micro_accuracy": { + "0": 0.7458800129891217, + "1": 0.8307887018361525, + "2": 0.9432492509906253 + }, + "coverage": { + "0": 0.9333939531711752, + "1": 0.942979465029931, + "2": 0.9800522846101387 + } + } + }, + { + "thresholds": [ + 0.24, + 0.24, + 0.26 + ], + "scores": { + "accuracy": { + "0": 0.7639614686211269, + "1": 0.8638938156419015, + "2": 0.8323222602465634 + }, + "precision": { + "0": 0.3746518205725823, + "1": 0.41437508362734893, + "2": 0.3166908332665429 + }, + "recall": { + "0": 0.7013874616900879, + "1": 0.7919720507755309, + "2": 0.8062429901012375 + }, + "f1": { + "0": 0.33982557035852734, + "1": 0.39885331221215237, + "2": 0.31859094405331667 + }, + "micro_accuracy": { + "0": 0.7491365392082728, + "1": 0.8341825387197218, + "2": 0.9458808913735538 + }, + "coverage": { + "0": 0.9269341517011442, + "1": 0.9369174812457377, + "2": 0.9759036144578314 + } + } + }, + { + "thresholds": [ + 0.26, + 0.26, + 0.28 + ], + "scores": { + "accuracy": { + "0": 0.7692021797356665, + "1": 0.87035768388788, + "2": 0.8345828461626078 + }, + "precision": { + "0": 0.385110592153362, + "1": 0.42690399109403965, + "2": 0.319030308675881 + }, + "recall": { + "0": 0.6973963676410317, + "1": 0.789890028394428, + "2": 0.8051291899084394 + }, + "f1": { + "0": 0.34717732058898326, + "1": 0.4088950201797339, + "2": 0.3199881820405873 + }, + "micro_accuracy": { + "0": 0.7525107013500164, + "1": 0.8376640553464239, + "2": 0.9487149464317077 + }, + "coverage": { + "0": 0.9205122376297643, + "1": 0.9309881033568235, + "2": 0.9707319845419413 + } + } + }, + { + "thresholds": [ + 0.28, + 0.28, + 0.3 + ], + "scores": { + "accuracy": { + "0": 0.771618993687329, + "1": 0.8723543370982486, + "2": 0.8382416110843092 + }, + "precision": { + "0": 0.39410665229086783, + "1": 0.4409289256135193, + "2": 0.333151436869522 + }, + "recall": { + "0": 0.6960191130015355, + "1": 0.7879049358691609, + "2": 0.8042581721596772 + }, + "f1": { + "0": 0.35400391666857906, + "1": 0.42098277997242933, + "2": 0.3333683820535288 + }, + "micro_accuracy": { + "0": 0.7558129895967174, + "1": 0.8409630660879535, + "2": 0.9514054965303642 + }, + "coverage": { + "0": 0.9141092672577101, + "1": 0.9252860498598167, + "2": 0.9663938773963779 + } + } + }, + { + "thresholds": [ + 0.3, + 0.3, + 0.32 + ], + "scores": { + "accuracy": { + "0": 0.7769960332563189, + "1": 0.8744761886845657, + "2": 0.8408557591738733 + }, + "precision": { + "0": 0.4060637790691401, + "1": 0.4510948825098404, + "2": 0.33582318659567545 + }, + "recall": { + "0": 0.6940909188904745, + "1": 0.7856560922021604, + "2": 0.8027640430676763 + }, + "f1": { + "0": 0.36245196865392665, + "1": 0.4288860683340336, + "2": 0.33503020016046964 + }, + "micro_accuracy": { + "0": 0.7589591512822654, + "1": 0.8439992580226303, + "2": 0.9537095376860676 + }, + "coverage": { + "0": 0.9071000985072365, + "1": 0.9191293475789952, + "2": 0.9621126013487914 + } + } + }, + { + "thresholds": [ + 0.32, + 0.32, + 0.34 + ], + "scores": { + "accuracy": { + "0": 0.7805300855897349, + "1": 0.8768207344273474, + "2": 0.8424451698403806 + }, + "precision": { + "0": 0.4105520897983795, + "1": 0.4543069919433308, + "2": 0.3393223569901384 + }, + "recall": { + "0": 0.6893138132416223, + "1": 0.7805089981269553, + "2": 0.7983149286313321 + }, + "f1": { + "0": 0.3646675363038223, + "1": 0.429893957370439, + "2": 0.3365015159795294 + }, + "micro_accuracy": { + "0": 0.7618606998654105, + "1": 0.8466115222754317, + "2": 0.9562566802581054 + }, + "coverage": { + "0": 0.9008107903311359, + "1": 0.9137872243691748, + "2": 0.9570735773281807 + } + } + }, + { + "thresholds": [ + 0.34, + 0.34, + 0.36 + ], + "scores": { + "accuracy": { + "0": 0.7839195821012004, + "1": 0.8830257472781262, + "2": 0.8442749008380109 + }, + "precision": { + "0": 0.4158189863765381, + "1": 0.46129826442321076, + "2": 0.3407272274264858 + }, + "recall": { + "0": 0.6868118605426153, + "1": 0.777684401615449, + "2": 0.7933409740227914 + }, + "f1": { + "0": 0.3681460212342982, + "1": 0.43482824882058013, + "2": 0.33640507774840056 + }, + "micro_accuracy": { + "0": 0.7643782822293749, + "1": 0.8493919355848056, + "2": 0.9589834421270498 + }, + "coverage": { + "0": 0.8945972569523376, + "1": 0.9081420019701447, + "2": 0.9518830037129651 + } + } + }, + { + "thresholds": [ + 0.34057822525501247, + 0.36, + 0.3746608167886734 + ], + "scores": { + "accuracy": { + "0": 0.7839454070579771, + "1": 0.8850077714421728, + "2": 0.8461872289403207 + }, + "precision": { + "0": 0.4159144245779362, + "1": 0.46996516016061624, + "2": 0.3427957166089875 + }, + "recall": { + "0": 0.6867397718084247, + "1": 0.7749884202065629, + "2": 0.7923438922358974 + }, + "f1": { + "0": 0.36815181692659316, + "1": 0.4402238813031856, + "2": 0.3373518837755704 + }, + "micro_accuracy": { + "0": 0.7644404905636398, + "1": 0.8521667926429831, + "2": 0.9606527253480336 + }, + "coverage": { + "0": 0.8943509888611048, + "1": 0.9022505114798818, + "2": 0.9484541941350307 + } + } + }, + { + "thresholds": [ + 0.36, + 0.38, + 0.38 + ], + "scores": { + "accuracy": { + "0": 0.7855585734920851, + "1": 0.8870601320263148, + "2": 0.846704577115119 + }, + "precision": { + "0": 0.42410579198162157, + "1": 0.4778113262868447, + "2": 0.3441532770030813 + }, + "recall": { + "0": 0.6825445052852879, + "1": 0.7726960288150291, + "2": 0.7919513013262884 + }, + "f1": { + "0": 0.3732541513620813, + "1": 0.4457039700263973, + "2": 0.33793985793123993 + }, + "micro_accuracy": { + "0": 0.7671814342391536, + "1": 0.854509365035792, + "2": 0.9612984519380775 + }, + "coverage": { + "0": 0.888118511782981, + "1": 0.897116768962643, + "2": 0.947147078881564 + } + } + }, + { + "thresholds": [ + 0.38, + 0.3974795162677765, + 0.4 + ], + "scores": { + "accuracy": { + "0": 0.7891699506446412, + "1": 0.8928088007027862, + "2": 0.8911536130216103 + }, + "precision": { + "0": 0.4325444997545349, + "1": 0.4858279965133085, + "2": 0.34724511309566586 + }, + "recall": { + "0": 0.6806544956452801, + "1": 0.7712834939939591, + "2": 0.7907016281827942 + }, + "f1": { + "0": 0.3786685031095155, + "1": 0.45085307227098625, + "2": 0.3395397819049904 + }, + "micro_accuracy": { + "0": 0.770081615120275, + "1": 0.8570518537393299, + "2": 0.9638951431328402 + }, + "coverage": { + "0": 0.8820186406001363, + "1": 0.8921345760400091, + "2": 0.9423353792528605 + } + } + }, + { + "thresholds": [ + 0.4, + 0.4, + 0.42 + ], + "scores": { + "accuracy": { + "0": 0.7950331522220915, + "1": 0.8930853818581228, + "2": 0.8926287817301746 + }, + "precision": { + "0": 0.442080607920921, + "1": 0.4870202069124637, + "2": 0.34912024280495113 + }, + "recall": { + "0": 0.677886106390055, + "1": 0.7712146258837445, + "2": 0.7895101684485681 + }, + "f1": { + "0": 0.38395365420794386, + "1": 0.4517975899903134, + "2": 0.34043052848949945 + }, + "micro_accuracy": { + "0": 0.7726869578384926, + "1": 0.8574676980618837, + "2": 0.9659887302324642 + }, + "coverage": { + "0": 0.8757103887247102, + "1": 0.8914147154656361, + "2": 0.9379593847086459 + } + } + }, + { + "thresholds": [ + 0.42, + 0.42, + 0.44 + ], + "scores": { + "accuracy": { + "0": 0.8012361453335349, + "1": 0.9014839621048408, + "2": 0.8942312593957857 + }, + "precision": { + "0": 0.45131483302593933, + "1": 0.4979598328306612, + "2": 0.35798665607260177 + }, + "recall": { + "0": 0.6731865176039974, + "1": 0.7684428559225457, + "2": 0.7879801015067978 + }, + "f1": { + "0": 0.38893645094491863, + "1": 0.45916219628773275, + "2": 0.3479535683375828 + }, + "micro_accuracy": { + "0": 0.7751269146131555, + "1": 0.8600761432176927, + "2": 0.9682791113277284 + }, + "coverage": { + "0": 0.8694589679472607, + "1": 0.8856937182693037, + "2": 0.9328256421914072 + } + } + }, + { + "thresholds": [ + 0.44, + 0.44, + 0.46 + ], + "scores": { + "accuracy": { + "0": 0.8044480111038569, + "1": 0.9053172319660167, + "2": 0.8955699999386315 + }, + "precision": { + "0": 0.457680545644752, + "1": 0.5038640500845135, + "2": 0.3604783978550451 + }, + "recall": { + "0": 0.6710198431112988, + "1": 0.7642268727261265, + "2": 0.7863542302268336 + }, + "f1": { + "0": 0.39312487249420525, + "1": 0.46282334528052266, + "2": 0.34906403870030717 + }, + "micro_accuracy": { + "0": 0.7780825525004937, + "1": 0.862358281522277, + "2": 0.9699269596441833 + }, + "coverage": { + "0": 0.8632833219671138, + "1": 0.8805599757520649, + "2": 0.9285064787451693 + } + } + }, + { + "thresholds": [ + 0.46, + 0.46, + 0.48 + ], + "scores": { + "accuracy": { + "0": 0.8079224776983499, + "1": 0.907423323474449, + "2": 0.8988943032436549 + }, + "precision": { + "0": 0.46840498611879194, + "1": 0.5092826981387928, + "2": 0.36340273184309035 + }, + "recall": { + "0": 0.6681413216228919, + "1": 0.7617856093278055, + "2": 0.7844534905383678 + }, + "f1": { + "0": 0.4002623663272118, + "1": 0.4663649442480995, + "2": 0.3501414720820841 + }, + "micro_accuracy": { + "0": 0.7808700649896105, + "1": 0.864557865812761, + "2": 0.9717460838185844 + }, + "coverage": { + "0": 0.8569750700916875, + "1": 0.8755588391301053, + "2": 0.9239221035083731 + } + } + }, + { + "thresholds": [ + 0.48, + 0.48, + 0.5 + ], + "scores": { + "accuracy": { + "0": 0.8114452443246722, + "1": 0.9090670195569455, + "2": 0.9032471820435628 + }, + "precision": { + "0": 0.4759716279292438, + "1": 0.5182645218164755, + "2": 0.3648374994714145 + }, + "recall": { + "0": 0.6639278709764616, + "1": 0.7594273449491095, + "2": 0.7827423163175757 + }, + "f1": { + "0": 0.4035501720427342, + "1": 0.47179298213319654, + "2": 0.3504761460148044 + }, + "micro_accuracy": { + "0": 0.7837639198218262, + "1": 0.8673227232152577, + "2": 0.9732269832436777 + }, + "coverage": { + "0": 0.8505720997196332, + "1": 0.8701030537243313, + "2": 0.9191293475789952 + } + } + }, + { + "thresholds": [ + 0.4948954820632934, + 0.5, + 0.52 + ], + "scores": { + "accuracy": { + "0": 0.8129358550599816, + "1": 0.9101521106933558, + "2": 0.9094617166328978 + }, + "precision": { + "0": 0.48412787974962296, + "1": 0.5263975111640745, + "2": 0.37486836300271614 + }, + "recall": { + "0": 0.6604023720222549, + "1": 0.7539572680573703, + "2": 0.7807726679065837 + }, + "f1": { + "0": 0.40898817120482334, + "1": 0.4764290992179604, + "2": 0.3586930425801887 + }, + "micro_accuracy": { + "0": 0.7863038894621147, + "1": 0.8696176180563164, + "2": 0.9749311123541965 + }, + "coverage": { + "0": 0.8445480033340911, + "1": 0.8644957187239524, + "2": 0.914355535348943 + } + } + }, + { + "thresholds": [ + 0.5, + 0.52, + 0.54 + ], + "scores": { + "accuracy": { + "0": 0.8135001913968379, + "1": 0.9123817529190185, + "2": 0.9103279199544886 + }, + "precision": { + "0": 0.48792636238553916, + "1": 0.5359219504624648, + "2": 0.3850326735658165 + }, + "recall": { + "0": 0.6597181768678811, + "1": 0.7498268022644977, + "2": 0.7772056212496301 + }, + "f1": { + "0": 0.4115777679786959, + "1": 0.4824418116040693, + "2": 0.366614532231499 + }, + "micro_accuracy": { + "0": 0.7873474067579416, + "1": 0.8722906458305744, + "2": 0.9765166340508806 + }, + "coverage": { + "0": 0.842634689702205, + "1": 0.8582632416458286, + "2": 0.9099416534060771 + } + } + }, + { + "thresholds": [ + 0.52, + 0.54, + 0.56 + ], + "scores": { + "accuracy": { + "0": 0.8158344208155098, + "1": 0.9139550659350106, + "2": 0.9158430083356393 + }, + "precision": { + "0": 0.49900237349216514, + "1": 0.5542272154797224, + "2": 0.3950514588014782 + }, + "recall": { + "0": 0.655411664169929, + "1": 0.7459518047294019, + "2": 0.7754630923351656 + }, + "f1": { + "0": 0.41737493852373375, + "1": 0.49664657599625855, + "2": 0.3749393298702557 + }, + "micro_accuracy": { + "0": 0.7908434391606486, + "1": 0.8753004005340453, + "2": 0.9779424075004185 + }, + "coverage": { + "0": 0.8341668561036599, + "1": 0.8513298476926574, + "2": 0.9052057285746761 + } + } + }, + { + "thresholds": [ + 0.54, + 0.5568314939737321, + 0.58 + ], + "scores": { + "accuracy": { + "0": 0.8203835885086881, + "1": 0.9158805447156358, + "2": 0.9149893034808769 + }, + "precision": { + "0": 0.5156584956201206, + "1": 0.5675878936208083, + "2": 0.39555380125860373 + }, + "recall": { + "0": 0.6507387282060666, + "1": 0.7434397816109488, + "2": 0.7681940485942907 + }, + "f1": { + "0": 0.42865754433758435, + "1": 0.5070718278245269, + "2": 0.3734798339181391 + }, + "micro_accuracy": { + "0": 0.7947057878182612, + "1": 0.8775989794319733, + "2": 0.9793437105595288 + }, + "coverage": { + "0": 0.8251307115253467, + "1": 0.8464234295673259, + "2": 0.9005834659392287 + } + } + }, + { + "thresholds": [ + 0.56, + 0.56, + 0.6 + ], + "scores": { + "accuracy": { + "0": 0.8245041246357564, + "1": 0.9161721255911156, + "2": 0.9193487474688847 + }, + "precision": { + "0": 0.527735775593821, + "1": 0.5719276708143174, + "2": 0.4092402619495512 + }, + "recall": { + "0": 0.6475941402480345, + "1": 0.7429010183896981, + "2": 0.7662127085090916 + }, + "f1": { + "0": 0.4365241327092934, + "1": 0.509969449815363, + "2": 0.38535740102209437 + }, + "micro_accuracy": { + "0": 0.7981551440424595, + "1": 0.8781766841468334, + "2": 0.9805895039539899 + }, + "coverage": { + "0": 0.817363794801849, + "1": 0.8453057513071153, + "2": 0.89592331590513 + } + } + }, + { + "thresholds": [ + 0.58, + 0.58, + 0.6074856579303741 + ], + "scores": { + "accuracy": { + "0": 0.8276782766335854, + "1": 0.9175943663332026, + "2": 0.9231255831067025 + }, + "precision": { + "0": 0.5345082182433154, + "1": 0.5780046558273265, + "2": 0.4111249044299102 + }, + "recall": { + "0": 0.6431322226048997, + "1": 0.739196289740425, + "2": 0.765343607867457 + }, + "f1": { + "0": 0.43917280118166846, + "1": 0.5134122496454819, + "2": 0.3861143959964363 + }, + "micro_accuracy": { + "0": 0.8004722274172433, + "1": 0.8803087060522634, + "2": 0.9812048397008031 + }, + "coverage": { + "0": 0.8103356823520497, + "1": 0.8394710919148292, + "2": 0.8940100022732439 + } + } + }, + { + "thresholds": [ + 0.6, + 0.6, + 0.62 + ], + "scores": { + "accuracy": { + "0": 0.8320505820623306, + "1": 0.9248874482864945, + "2": 0.9235275777228764 + }, + "precision": { + "0": 0.5466127629418331, + "1": 0.5847240963354107, + "2": 0.41294211559494315 + }, + "recall": { + "0": 0.6388341968461365, + "1": 0.736542901937428, + "2": 0.763432253128448 + }, + "f1": { + "0": 0.44533364648194634, + "1": 0.5162191739001678, + "2": 0.38623726471563957 + }, + "micro_accuracy": { + "0": 0.8038109180204005, + "1": 0.8830389415535702, + "2": 0.9821158958001063 + }, + "coverage": { + "0": 0.8023035538379935, + "1": 0.8333143896340077, + "2": 0.8908274607865424 + } + } + }, + { + "thresholds": [ + 0.6194985747337342, + 0.62, + 0.64 + ], + "scores": { + "accuracy": { + "0": 0.8347374149124119, + "1": 0.9263855817931299, + "2": 0.925152252639741 + }, + "precision": { + "0": 0.5549309261446816, + "1": 0.5913387861326783, + "2": 0.4258836444091773 + }, + "recall": { + "0": 0.6322797547069895, + "1": 0.7310929186515712, + "2": 0.7597125431557636 + }, + "f1": { + "0": 0.4482571520107697, + "1": 0.5190194278838909, + "2": 0.39536344604778373 + }, + "micro_accuracy": { + "0": 0.8071464351310736, + "1": 0.885593220338983, + "2": 0.9833465164503923 + }, + "coverage": { + "0": 0.7941767068273092, + "1": 0.8270819125558839, + "2": 0.8861294233537925 + } + } + }, + { + "thresholds": [ + 0.62, + 0.64, + 0.66 + ], + "scores": { + "accuracy": { + "0": 0.8350617627834742, + "1": 0.9325280827738057, + "2": 0.9259987761544274 + }, + "precision": { + "0": 0.557293554776649, + "1": 0.6042510478725724, + "2": 0.44041472978398505 + }, + "recall": { + "0": 0.6322476162880292, + "1": 0.728606654703852, + "2": 0.7576062573194366 + }, + "f1": { + "0": 0.4499845925016404, + "1": 0.5269865801747221, + "2": 0.4056535861196955 + }, + "micro_accuracy": { + "0": 0.8072774994034837, + "1": 0.8877176796217277, + "2": 0.9845720793313135 + }, + "coverage": { + "0": 0.7939304387360764, + "1": 0.8213040842615746, + "2": 0.8816208229142987 + } + } + }, + { + "thresholds": [ + 0.64, + 0.66, + 0.68 + ], + "scores": { + "accuracy": { + "0": 0.8391599515104731, + "1": 0.9339293023093996, + "2": 0.9267553828248155 + }, + "precision": { + "0": 0.5720678203089301, + "1": 0.6128943086510181, + "2": 0.4427599237998884 + }, + "recall": { + "0": 0.6273584799907261, + "1": 0.725833258922429, + "2": 0.7555238762157156 + }, + "f1": { + "0": 0.4568985818717488, + "1": 0.5321080178481364, + "2": 0.4061892991686389 + }, + "micro_accuracy": { + "0": 0.8100081955358435, + "1": 0.8898312961844124, + "2": 0.9855476344782891 + }, + "coverage": { + "0": 0.7858983102220202, + "1": 0.8152231567780556, + "2": 0.8769038417822232 + } + } + }, + { + "thresholds": [ + 0.66, + 0.68, + 0.7000000000000001 + ], + "scores": { + "accuracy": { + "0": 0.8416213774432921, + "1": 0.9371646913144945, + "2": 0.9280640424521848 + }, + "precision": { + "0": 0.5841379631248658, + "1": 0.6315831952962271, + "2": 0.4545105213814647 + }, + "recall": { + "0": 0.6228563044755979, + "1": 0.7222963246340339, + "2": 0.7534899200283318 + }, + "f1": { + "0": 0.4631243831262261, + "1": 0.5443775167284013, + "2": 0.415702510205127 + }, + "micro_accuracy": { + "0": 0.8126020321142272, + "1": 0.8921708601521358, + "2": 0.9865624660805383 + }, + "coverage": { + "0": 0.7774683640221263, + "1": 0.8093695536864439, + "2": 0.8726415094339622 + } + } + }, + { + "thresholds": [ + 0.68, + 0.7000000000000001, + 0.72 + ], + "scores": { + "accuracy": { + "0": 0.8473405210744432, + "1": 0.9392482138768081, + "2": 0.9298139404573997 + }, + "precision": { + "0": 0.6035118439421646, + "1": 0.6474183095508496, + "2": 0.4885059775865586 + }, + "recall": { + "0": 0.6180262989092915, + "1": 0.715647013523098, + "2": 0.7514138171417587 + }, + "f1": { + "0": 0.47311313063104304, + "1": 0.55409259513012, + "2": 0.4457704580303461 + }, + "micro_accuracy": { + "0": 0.8152637154189146, + "1": 0.8945120800302001, + "2": 0.9877883607130374 + }, + "coverage": { + "0": 0.7689815867242555, + "1": 0.8029097522164128, + "2": 0.8671667803288626 + } + } + }, + { + "thresholds": [ + 0.7000000000000001, + 0.72, + 0.74 + ], + "scores": { + "accuracy": { + "0": 0.8505915688318719, + "1": 0.9426783214354663, + "2": 0.9317399849170638 + }, + "precision": { + "0": 0.6229833054302747, + "1": 0.6655388641391287, + "2": 0.5140834989196863 + }, + "recall": { + "0": 0.6132590872112189, + "1": 0.7116307660915959, + "2": 0.7479442633520913 + }, + "f1": { + "0": 0.4831400861370421, + "1": 0.5658965325793259, + "2": 0.46763288242891465 + }, + "micro_accuracy": { + "0": 0.8182021912350598, + "1": 0.8968569321182993, + "2": 0.9888285356145405 + }, + "coverage": { + "0": 0.7607789649162688, + "1": 0.7961847389558233, + "2": 0.8614268394332045 + } + } + }, + { + "thresholds": [ + 0.72, + 0.723375940322876, + 0.76 + ], + "scores": { + "accuracy": { + "0": 0.8545458227282784, + "1": 0.942957054254891, + "2": 0.9357534435042484 + }, + "precision": { + "0": 0.6391575337096764, + "1": 0.6678135935421345, + "2": 0.5148871198386059 + }, + "recall": { + "0": 0.6091834507392115, + "1": 0.7110863196012656, + "2": 0.7456663176727382 + }, + "f1": { + "0": 0.49145384680819854, + "1": 0.5670810916467267, + "2": 0.4671378311167504 + }, + "micro_accuracy": { + "0": 0.8211693548387097, + "1": 0.897107871164475, + "2": 0.9898444587030113 + }, + "coverage": { + "0": 0.7516859892399788, + "1": 0.7951807228915663, + "2": 0.8561983784193378 + } + } + }, + { + "thresholds": [ + 0.7349455654621124, + 0.74, + 0.78 + ], + "scores": { + "accuracy": { + "0": 0.8555596144418682, + "1": 0.9447583415775558, + "2": 0.933147567003428 + }, + "precision": { + "0": 0.648779580251861, + "1": 0.6826588841262298, + "2": 0.5460424260185787 + }, + "recall": { + "0": 0.6051174032724297, + "1": 0.7084118880658226, + "2": 0.7394220424679174 + }, + "f1": { + "0": 0.4940932399586941, + "1": 0.5748512500859088, + "2": 0.4905550825247364 + }, + "micro_accuracy": { + "0": 0.8232646834477498, + "1": 0.8991477613731845, + "2": 0.9907314573446516 + }, + "coverage": { + "0": 0.7450556944760173, + "1": 0.7890997954080473, + "2": 0.850250056831098 + } + } + }, + { + "thresholds": [ + 0.74, + 0.76, + 0.8 + ], + "scores": { + "accuracy": { + "0": 0.8551461752725971, + "1": 0.9457854684303053, + "2": 0.9337082289767283 + }, + "precision": { + "0": 0.6509242394755482, + "1": 0.6996374620219, + "2": 0.5492507000441765 + }, + "recall": { + "0": 0.6038571452918515, + "1": 0.7017571169333634, + "2": 0.7361775734923548 + }, + "f1": { + "0": 0.4949008075985547, + "1": 0.5840199967087703, + "2": 0.4900286801540286 + }, + "micro_accuracy": { + "0": 0.8239391697073307, + "1": 0.9011971694455215, + "2": 0.9912979119474287 + }, + "coverage": { + "0": 0.7424225202697583, + "1": 0.781692808971736, + "2": 0.8446427218307191 + } + } + }, + { + "thresholds": [ + 0.76, + 0.78, + 0.8133293718099595 + ], + "scores": { + "accuracy": { + "0": 0.8567967846688476, + "1": 0.9467700731334758, + "2": 0.9570242618960957 + }, + "precision": { + "0": 0.6659177044601013, + "1": 0.7160208776416441, + "2": 0.5494842196858498 + }, + "recall": { + "0": 0.5974140900658498, + "1": 0.6963803016230707, + "2": 0.7335512328004075 + }, + "f1": { + "0": 0.5005653573143374, + "1": 0.5936670682814554, + "2": 0.48906739615312067 + }, + "micro_accuracy": { + "0": 0.8267610729236653, + "1": 0.9033882560015646, + "2": 0.9917247288552166 + }, + "coverage": { + "0": 0.7330832765022354, + "1": 0.7749109646131697, + "2": 0.8401341213912252 + } + } + }, + { + "thresholds": [ + 0.78, + 0.8, + 0.8200000000000001 + ], + "scores": { + "accuracy": { + "0": 0.8594768293784096, + "1": 0.9497414606795416, + "2": 0.9598160525239752 + }, + "precision": { + "0": 0.6801592462530972, + "1": 0.7248035533158547, + "2": 0.5509860155230463 + }, + "recall": { + "0": 0.5909385003050688, + "1": 0.6877655661261414, + "2": 0.7323471609196228 + }, + "f1": { + "0": 0.5053238559110679, + "1": 0.5932836839342758, + "2": 0.48942952556410124 + }, + "micro_accuracy": { + "0": 0.8295656724228153, + "1": 0.9053086419753087, + "2": 0.992153936598381 + }, + "coverage": { + "0": 0.7240281882245965, + "1": 0.7672198226869743, + "2": 0.8378040463741759 + } + } + }, + { + "thresholds": [ + 0.8, + 0.8200000000000001, + 0.84 + ], + "scores": { + "accuracy": { + "0": 0.8630110118936432, + "1": 0.9547028365067901, + "2": 0.9606917539054599 + }, + "precision": { + "0": 0.6912492840401537, + "1": 0.7431233700468567, + "2": 0.5545916355348101 + }, + "recall": { + "0": 0.5832717108841252, + "1": 0.6785525969288249, + "2": 0.7242883656484974 + }, + "f1": { + "0": 0.5055056505568667, + "1": 0.6003488312802274, + "2": 0.4876785529022798 + }, + "micro_accuracy": { + "0": 0.8324223932077475, + "1": 0.9075235501361785, + "2": 0.993035098536229 + }, + "coverage": { + "0": 0.7139880275820262, + "1": 0.7581457907100099, + "2": 0.8295635371675381 + } + } + }, + { + "thresholds": [ + 0.8099595010280609, + 0.82109534740448, + 0.86 + ], + "scores": { + "accuracy": { + "0": 0.8669405316273155, + "1": 0.9547996220084877, + "2": 0.9671792491234769 + }, + "precision": { + "0": 0.7028135267405738, + "1": 0.745381822803767, + "2": 0.5686706031318407 + }, + "recall": { + "0": 0.5774611074285403, + "1": 0.678410498949023, + "2": 0.7191850515166035 + }, + "f1": { + "0": 0.5081384528044555, + "1": 0.6019267109931725, + "2": 0.4949138393543726 + }, + "micro_accuracy": { + "0": 0.8338193199753886, + "1": 0.9077246242716747, + "2": 0.9939372982941448 + }, + "coverage": { + "0": 0.7081344244904145, + "1": 0.7575395923315905, + "2": 0.8217776767447147 + } + } + }, + { + "thresholds": [ + 0.8200000000000001, + 0.84, + 0.88 + ], + "scores": { + "accuracy": { + "0": 0.869498450987878, + "1": 0.9560018453273437, + "2": 0.9675506137914426 + }, + "precision": { + "0": 0.7115847925239849, + "1": 0.7609893314312659, + "2": 0.6017328732151986 + }, + "recall": { + "0": 0.5730995625813546, + "1": 0.6678520880306139, + "2": 0.7132880725116423 + }, + "f1": { + "0": 0.5106737303649882, + "1": 0.6055166444307686, + "2": 0.5209196214268884 + }, + "micro_accuracy": { + "0": 0.834947005043286, + "1": 0.9094083708689711, + "2": 0.9946406934476653 + }, + "coverage": { + "0": 0.702413427294082, + "1": 0.7486171099492309, + "2": 0.8129878002576343 + } + } + }, + { + "thresholds": [ + 0.8306558251380922, + 0.8454969972372055, + 0.9 + ], + "scores": { + "accuracy": { + "0": 0.8697590647610641, + "1": 0.9564807989833612, + "2": 0.976522296069616 + }, + "precision": { + "0": 0.7216050336631377, + "1": 0.7730099057714284, + "2": 0.6077983288636156 + }, + "recall": { + "0": 0.5674980482953075, + "1": 0.6654440868469829, + "2": 0.707140267165422 + }, + "f1": { + "0": 0.512671309418482, + "1": 0.6110728137192303, + "2": 0.519696439204633 + }, + "micro_accuracy": { + "0": 0.8362399673513807, + "1": 0.9101366106343, + "2": 0.9954190181586342 + }, + "coverage": { + "0": 0.6962756687125862, + "1": 0.7460407668409487, + "2": 0.8022467227400166 + } + } + }, + { + "thresholds": [ + 0.84, + 0.86, + 0.9111802697181702 + ], + "scores": { + "accuracy": { + "0": 0.8703402493615706, + "1": 0.9619788342035192, + "2": 0.9881819993607475 + }, + "precision": { + "0": 0.7235824950939453, + "1": 0.7834797660890495, + "2": 0.6259209120985145 + }, + "recall": { + "0": 0.5601275514377435, + "1": 0.6589928190641673, + "2": 0.7039713154234601 + }, + "f1": { + "0": 0.5091976680444896, + "1": 0.6134685776060603, + "2": 0.5336614440730103 + }, + "micro_accuracy": { + "0": 0.836978294871443, + "1": 0.9120496130387986, + "2": 0.9957622074613718 + }, + "coverage": { + "0": 0.6903652345229977, + "1": 0.7392210350837312, + "2": 0.7956922027733576 + } + } + }, + { + "thresholds": [ + 0.86, + 0.88, + 0.92 + ], + "scores": { + "accuracy": { + "0": 0.8765362932344806, + "1": 0.9637579279788103, + "2": 0.9899730159540868 + }, + "precision": { + "0": 0.747093985215198, + "1": 0.8000482067246265, + "2": 0.627521757632179 + }, + "recall": { + "0": 0.5512424853531099, + "1": 0.6511869248645938, + "2": 0.700927092092323 + }, + "f1": { + "0": 0.5153313559250967, + "1": 0.6195048776940024, + "2": 0.5331282606436634 + }, + "micro_accuracy": { + "0": 0.8396556061834345, + "1": 0.9147315043557405, + "2": 0.9959246296207508 + }, + "coverage": { + "0": 0.6776729559748428, + "1": 0.7284799575661135, + "2": 0.7902174736682579 + } + } + }, + { + "thresholds": [ + 0.88, + 0.9, + 0.9400000000000001 + ], + "scores": { + "accuracy": { + "0": 0.8830208634588658, + "1": 0.9652212597814974, + "2": 0.9928076230580295 + }, + "precision": { + "0": 0.7620127130591278, + "1": 0.8156814860848794, + "2": 0.6294274446280421 + }, + "recall": { + "0": 0.5445108063190227, + "1": 0.642752102433535, + "2": 0.6855264120436473 + }, + "f1": { + "0": 0.5170218108656535, + "1": 0.6247933936292172, + "2": 0.5265848249923473 + }, + "micro_accuracy": { + "0": 0.842766757865937, + "1": 0.9168716443174906, + "2": 0.9967651815909425 + }, + "coverage": { + "0": 0.6646965219368038, + "1": 0.7162423278017731, + "2": 0.7730165946806092 + } + } + }, + { + "thresholds": [ + 0.9, + 0.92, + 0.96 + ], + "scores": { + "accuracy": { + "0": 0.8883325240808758, + "1": 0.9661292023820532, + "2": 0.9930361990459136 + }, + "precision": { + "0": 0.7804330307655294, + "1": 0.8308755942637392, + "2": 0.6927578760132808 + }, + "recall": { + "0": 0.5299738208913127, + "1": 0.6287467301361546, + "2": 0.6641347649986203 + }, + "f1": { + "0": 0.5149058087966454, + "1": 0.6232311666966236, + "2": 0.5676737474327977 + }, + "micro_accuracy": { + "0": 0.8456088173547935, + "1": 0.9190962099125365, + "2": 0.9974476257865609 + }, + "coverage": { + "0": 0.6496931120709252, + "1": 0.7017503978176859, + "2": 0.749621126013488 + } + } + }, + { + "thresholds": [ + 0.9007869422435761, + 0.924729597568512, + 0.9662523120641708 + ], + "scores": { + "accuracy": { + "0": 0.8885312629120675, + "1": 0.9661699543515949, + "2": 0.9931839191357568 + }, + "precision": { + "0": 0.7805944969928401, + "1": 0.830765775145992, + "2": 0.715989791885142 + }, + "recall": { + "0": 0.5298358756742398, + "1": 0.6256403761924226, + "2": 0.659351951962697 + }, + "f1": { + "0": 0.5149139363519448, + "1": 0.6209799951986819, + "2": 0.5839830325420262 + }, + "micro_accuracy": { + "0": 0.84582384871301, + "1": 0.9198641304347827, + "2": 0.9977708883138179 + }, + "coverage": { + "0": 0.6491248010911571, + "1": 0.6971281351822384, + "2": 0.7393536409790104 + } + } + }, + { + "thresholds": [ + 0.92, + 0.9400000000000001, + 0.970800906419754 + ], + "scores": { + "accuracy": { + "0": 0.8950164643210189, + "1": 0.9695368593184023, + "2": 0.9932547854813464 + }, + "precision": { + "0": 0.8040699749652211, + "1": 0.8582022686291958, + "2": 0.74059226732527 + }, + "recall": { + "0": 0.5153800078565562, + "1": 0.6111746156068716, + "2": 0.6535073068400129 + }, + "f1": { + "0": 0.5137528881782403, + "1": 0.627273015752276, + "2": 0.5807455159791289 + }, + "micro_accuracy": { + "0": 0.8492311388755406, + "1": 0.9224784662406224, + "2": 0.997951563553389 + }, + "coverage": { + "0": 0.6307494127453209, + "1": 0.681783738728499, + "2": 0.7305827081912556 + } + } + }, + { + "thresholds": [ + 0.9400000000000001, + 0.96, + 0.98 + ], + "scores": { + "accuracy": { + "0": 0.8977603303553258, + "1": 0.9707026911621689, + "2": 0.9951993157465505 + }, + "precision": { + "0": 0.8348855245957182, + "1": 0.8875780882814134, + "2": 0.7677883833828869 + }, + "recall": { + "0": 0.49411409803457207, + "1": 0.5869876804314287, + "2": 0.6368870643575197 + }, + "f1": { + "0": 0.5111539192223238, + "1": 0.6268523151354871, + "2": 0.5910540442970046 + }, + "micro_accuracy": { + "0": 0.8531831690911935, + "1": 0.9263471667534873, + "2": 0.9983422903130932 + }, + "coverage": { + "0": 0.6055353489429416, + "1": 0.6545805864969311, + "2": 0.7085132984769266 + } + } + }, + { + "thresholds": [ + 0.9447115302085878, + 0.9661324799060822, + 0.9839736998081207 + ], + "scores": { + "accuracy": { + "0": 0.8976383094079616, + "1": 0.9721080173326774, + "2": 0.9952787863073226 + }, + "precision": { + "0": 0.8358835320411591, + "1": 0.8961374238668409, + "2": 0.7964153490876714 + }, + "recall": { + "0": 0.4870561307521863, + "1": 0.5793435512925595, + "2": 0.627652475953288 + }, + "f1": { + "0": 0.506078319145354, + "1": 0.6259992137233813, + "2": 0.6063101216401618 + }, + "micro_accuracy": { + "0": 0.853749683303775, + "1": 0.9279531268401837, + "2": 0.9985280488469715 + }, + "coverage": { + "0": 0.5981662499052816, + "1": 0.6434038038948245, + "2": 0.6949685534591195 + } + } + }, + { + "thresholds": [ + 0.96, + 0.98, + 0.9926552206277847 + ], + "scores": { + "accuracy": { + "0": 0.8988945216145116, + "1": 0.9779900667987546, + "2": 0.9952077780141686 + }, + "precision": { + "0": 0.8617502110752365, + "1": 0.9170934717021288, + "2": 0.9062000485062581 + }, + "recall": { + "0": 0.46771055824514823, + "1": 0.5463025853809537, + "2": 0.5700390457871931 + }, + "f1": { + "0": 0.5011615066874043, + "1": 0.6065006991411882, + "2": 0.6263345006018707 + }, + "micro_accuracy": { + "0": 0.8572375617355563, + "1": 0.9325594423005104, + "2": 0.9990024352316405 + }, + "coverage": { + "0": 0.5715124649541562, + "1": 0.6086989467303175, + "2": 0.6456581041145715 + } + } + }, + { + "thresholds": [ + 0.9707445681095125, + 0.9835098385810853, + 0.9965948343276978 + ], + "scores": { + "accuracy": { + "0": 0.9062367456555975, + "1": 0.9782877846703276, + "2": 0.9959301023906816 + }, + "precision": { + "0": 0.8729027936547273, + "1": 0.9271442767909179, + "2": 0.9061013748239709 + }, + "recall": { + "0": 0.4513502052516364, + "1": 0.5347767459011784, + "2": 0.5320584791639112 + }, + "f1": { + "0": 0.49053571651818084, + "1": 0.6018785904537931, + "2": 0.5946945567639036 + }, + "micro_accuracy": { + "0": 0.8609734973150874, + "1": 0.9342619979009636, + "2": 0.9992047587237968 + }, + "coverage": { + "0": 0.5468098810335682, + "1": 0.5956467378949761, + "2": 0.5955330756990225 + } + } + }, + { + "thresholds": [ + 0.98, + 0.9922655999660492, + 0.9982456207275392 + ], + "scores": { + "accuracy": { + "0": 0.9134660997939574, + "1": 0.9826328737370472, + "2": 0.9954052001661279 + }, + "precision": { + "0": 0.8978459042096237, + "1": 0.9437141620064265, + "2": 0.9056736601442275 + }, + "recall": { + "0": 0.425753841130749, + "1": 0.4831577994331249, + "2": 0.49812373013877775 + }, + "f1": { + "0": 0.47584327989955616, + "1": 0.559693934735415, + "2": 0.566351757760869 + }, + "micro_accuracy": { + "0": 0.8648708242989968, + "1": 0.940019494534568, + "2": 0.9992400953334946 + }, + "coverage": { + "0": 0.5154770023490187, + "1": 0.5441767068273092, + "2": 0.5484390391755702 + } + } + }, + { + "thresholds": [ + 0.9834887981414796, + 0.9964078664779664, + 0.9991312026977539 + ], + "scores": { + "accuracy": { + "0": 0.9129446757501628, + "1": 0.9825866793510077, + "2": 0.9954384327178303 + }, + "precision": { + "0": 0.9059183818231211, + "1": 0.9494286397894636, + "2": 0.9039414443226458 + }, + "recall": { + "0": 0.4124590564989005, + "1": 0.43902847454827276, + "2": 0.4497605067478926 + }, + "f1": { + "0": 0.4669122471494267, + "1": 0.5217599353693266, + "2": 0.5267491567047328 + }, + "micro_accuracy": { + "0": 0.8666641392121924, + "1": 0.9464175177963479, + "2": 0.9993084104967918 + }, + "coverage": { + "0": 0.49967795711146473, + "1": 0.48965674016822003, + "2": 0.49304766234750325 + } + } + }, + { + "thresholds": [ + 0.9916833281517028, + 0.9981183141469955, + 0.9995197594165803 + ], + "scores": { + "accuracy": { + "0": 0.926169279286835, + "1": 0.9849759073340263, + "2": 0.9948076243417509 + }, + "precision": { + "0": 0.924682739663025, + "1": 0.9557793197217371, + "2": 0.8984634941014342 + }, + "recall": { + "0": 0.36507175330192254, + "1": 0.3948965425591936, + "2": 0.4089800345815027 + }, + "f1": { + "0": 0.4271564748504445, + "1": 0.47811269852583044, + "2": 0.4887704088370563 + }, + "micro_accuracy": { + "0": 0.8732581003676156, + "1": 0.9507478081485302, + "2": 0.9993146284000857 + }, + "coverage": { + "0": 0.4431689020231871, + "1": 0.440781995908161, + "2": 0.4422406607562325 + } + } + }, + { + "thresholds": [ + 0.9955784201622011, + 0.9990368843078613, + 0.9997327446937562 + ], + "scores": { + "accuracy": { + "0": 0.9275458872885384, + "1": 0.9798781104441883, + "2": 0.9946341928707643 + }, + "precision": { + "0": 0.9257710707706125, + "1": 0.9603319105524699, + "2": 0.9406313587469497 + }, + "recall": { + "0": 0.3165966609987137, + "1": 0.3509594144678274, + "2": 0.37693654672629645 + }, + "f1": { + "0": 0.3787483978491254, + "1": 0.4358170533687341, + "2": 0.4760749136264469 + }, + "micro_accuracy": { + "0": 0.8799345272482187, + "1": 0.9549637275427236, + "2": 0.9993735845419939 + }, + "coverage": { + "0": 0.3934985223914526, + "1": 0.3890846404485868, + "2": 0.3931385921042661 + } + } + }, + { + "thresholds": [ + 0.9977071881294252, + 0.9994589567184449, + 0.9998481810092927 + ], + "scores": { + "accuracy": { + "0": 0.9384159399033912, + "1": 0.9805885361061143, + "2": 0.9992966806444485 + }, + "precision": { + "0": 0.9390249748525807, + "1": 0.9621872182903556, + "2": 0.9869590191507204 + }, + "recall": { + "0": 0.2806288674725043, + "1": 0.314098829570648, + "2": 0.34784865301516155 + }, + "f1": { + "0": 0.34246227887214714, + "1": 0.39848508974898844, + "2": 0.4652975312609765 + }, + "micro_accuracy": { + "0": 0.8862540860989528, + "1": 0.9595881737598414, + "2": 0.9996180081855389 + }, + "coverage": { + "0": 0.3419148291278321, + "1": 0.344074410850951, + "2": 0.34714329014169887 + } + } + }, + { + "thresholds": [ + 0.9988190412521363, + 0.9997101068496703, + 0.9999167561531067 + ], + "scores": { + "accuracy": { + "0": 0.9456232300240067, + "1": 0.9792949755884731, + "2": 0.999363876742606 + }, + "precision": { + "0": 0.9494363565119665, + "1": 0.9590992651373006, + "2": 0.9849631659902182 + }, + "recall": { + "0": 0.24235821495883889, + "1": 0.2665116226367584, + "2": 0.30954243184957136 + }, + "f1": { + "0": 0.30280863316490564, + "1": 0.3442207655646623, + "2": 0.4231762105109771 + }, + "micro_accuracy": { + "0": 0.8949527841094106, + "1": 0.9625408209003009, + "2": 0.9996807355852116 + }, + "coverage": { + "0": 0.2908805031446541, + "1": 0.2958437523679624, + "2": 0.296677275138289 + } + } + }, + { + "thresholds": [ + 0.9993969202041626, + 0.9998453855514526, + 0.9999547004699708 + ], + "scores": { + "accuracy": { + "0": 0.9471891418619082, + "1": 0.9862804406675553, + "2": 0.9993156445541669 + }, + "precision": { + "0": 0.951261364815079, + "1": 0.967035459961284, + "2": 0.9906737176877808 + }, + "recall": { + "0": 0.20740260924304382, + "1": 0.22009317132975698, + "2": 0.2773595069453509 + }, + "f1": { + "0": 0.2655844930571704, + "1": 0.2940482346934407, + "2": 0.3863323028181745 + }, + "micro_accuracy": { + "0": 0.9037233213896245, + "1": 0.9660385959580611, + "2": 0.9996934865900383 + }, + "coverage": { + "0": 0.24319921194210806, + "1": 0.24933697052360385, + "2": 0.24721527619913616 + } + } + }, + { + "thresholds": [ + 0.9997055649757385, + 0.9999301433563232, + 0.999976396560669 + ], + "scores": { + "accuracy": { + "0": 0.9433599930968911, + "1": 0.9836367652405504, + "2": 0.9991329584353785 + }, + "precision": { + "0": 0.9508442964593203, + "1": 0.9642508158796917, + "2": 0.9884047532947605 + }, + "recall": { + "0": 0.17020661886717497, + "1": 0.17625585238523653, + "2": 0.23947973598180503 + }, + "f1": { + "0": 0.22019243800285607, + "1": 0.24064765170914199, + "2": 0.3405196572670941 + }, + "micro_accuracy": { + "0": 0.9159769008662175, + "1": 0.9669291338582677, + "2": 0.9996179925508547 + }, + "coverage": { + "0": 0.19682503599302872, + "1": 0.19246798514813973, + "2": 0.19835947563840267 + } + } + }, + { + "thresholds": [ + 0.9998770654201508, + 0.9999669015407562, + 0.9999889135360718 + ], + "scores": { + "accuracy": { + "0": 0.951936016083128, + "1": 0.9827473504361541, + "2": 0.9989433324510965 + }, + "precision": { + "0": 0.9597348554806537, + "1": 0.969444156000138, + "2": 0.9969027613973804 + }, + "recall": { + "0": 0.12528622061406092, + "1": 0.13887605411986617, + "2": 0.15452418754703273 + }, + "f1": { + "0": 0.16880314061956103, + "1": 0.19247687991191748, + "2": 0.2411561617389106 + }, + "micro_accuracy": { + "0": 0.9376461418550273, + "1": 0.9687172774869109, + "2": 0.9996154832094335 + }, + "coverage": { + "0": 0.14582859740850193, + "1": 0.14472986284761688, + "2": 0.14779874213836477 + } + } + }, + { + "thresholds": [ + 0.9999603986740113, + 0.999985933303833, + 0.9999958276748656 + ], + "scores": { + "accuracy": { + "0": 0.96026819882481, + "1": 0.9789204097714735, + "2": 0.9994850047592663 + }, + "precision": { + "0": 0.9653640228021032, + "1": 0.977760736196319, + "2": 0.9928211439287389 + }, + "recall": { + "0": 0.08795181857286369, + "1": 0.09794033395134712, + "2": 0.10167231075686439 + }, + "f1": { + "0": 0.12132978367438589, + "1": 0.13925883750030774, + "2": 0.16583707999265668 + }, + "micro_accuracy": { + "0": 0.9502784407319014, + "1": 0.9656177156177156, + "2": 0.999589995899959 + }, + "coverage": { + "0": 0.09524892020913844, + "1": 0.09752216412821095, + "2": 0.09240736531029779 + } + } + }, + { + "thresholds": [ + 0.9999903321266175, + 0.9999959468841552, + 0.9999985694885254 + ], + "scores": { + "accuracy": { + "0": 0.9683098591549296, + "1": 0.9881345796745664, + "2": 0.9990880410135069 + }, + "precision": { + "0": 0.976823708206687, + "1": 0.9833333333333333, + "2": 0.9718771566597653 + }, + "recall": { + "0": 0.049670262265187864, + "1": 0.048793069399277786, + "2": 0.07062629466483594 + }, + "f1": { + "0": 0.07126029473242274, + "1": 0.07507472894752276, + "2": 0.11612967010875166 + }, + "micro_accuracy": { + "0": 0.9455987910842463, + "1": 0.9506781750924784, + "2": 0.9992421371731717 + }, + "coverage": { + "0": 0.05014397211487459, + "1": 0.046090020459195274, + "2": 0.04999242252026976 + } + } + }, + { + "thresholds": [ + 1.0, + 1.0, + 1.0 + ], + "scores": { + "accuracy": { + "0": 0.9444444444444444, + "1": 0.9682539682539684, + "2": 1.0 + }, + "precision": { + "0": 0.9444444444444444, + "1": 0.9545454545454546, + "2": 1.0 + }, + "recall": { + "0": 0.001252177557345573, + "1": 0.0019495329536034565, + "2": 0.01639557694868904 + }, + "f1": { + "0": 0.002346743016790488, + "1": 0.003650574960165601, + "2": 0.02703065176536078 + }, + "micro_accuracy": { + "0": 0.8979591836734694, + "1": 0.9298245614035088, + "2": 1.0 + }, + "coverage": { + "0": 0.0009282412669546109, + "1": 0.0010797908615594453, + "2": 0.005304235811169205 + } + } + } + ] + }, + "onnx": { + "source": "local-evidence/mambo-accelerated-quality/onnx-cuda-0-prediction/north_europe/mini_metric.csv", + "source_sha256": "b8624ec148e1d67d6685be4e79e35b990a7692e4109f306430ddfc015e3d543f", + "identities": { + "full": "0f6e02db8e7eaaabc9617dcb0af5e0a7def4886578e46b4f919316b4ca6e7165", + "report": "80144bd4f34d9705bcae1dad496ccf13a7160b5709139b34710e5d75a3252fed", + "calibration": "07e2e6f88b36f3e9f348adaf4526ed62e8725eba4116780a0410bf5d18f5d3fd" + }, + "report_images": 52788, + "calibration_images": 5852, + "thresholds": [ + 0.8161613345146179, + 0.8301631808280945, + 0.9698503911495209 + ], + "full_zero": { + "accuracy": { + "0": 0.7123551106111988, + "1": 0.805001260196705, + "2": 0.8106416408810809 + }, + "precision": { + "0": 0.26343028004895147, + "1": 0.3188298295664697, + "2": 0.27563597431734277 + }, + "recall": { + "0": 0.7123551106111988, + "1": 0.805001260196705, + "2": 0.8106416408810809 + }, + "f1": { + "0": 0.2543210234001847, + "1": 0.3212342539755369, + "2": 0.28076917349510716 + }, + "micro_accuracy": { + "0": 0.7078444747612551, + "1": 0.7936221009549795, + "2": 0.9298601637107776 + }, + "theilU": { + "0": 0.9282787583085454, + "1": 0.9270081304640697, + "2": 0.8488811049574605 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "report_zero": { + "accuracy": { + "0": 0.7133861511997317, + "1": 0.8053599793321786, + "2": 0.8106325437578626 + }, + "precision": { + "0": 0.2689411284200973, + "1": 0.32303901654923844, + "2": 0.2756918885388057 + }, + "recall": { + "0": 0.7133861511997317, + "1": 0.8053599793321786, + "2": 0.8106325437578626 + }, + "f1": { + "0": 0.25936240461341, + "1": 0.32445203101159487, + "2": 0.28088792323657213 + }, + "micro_accuracy": { + "0": 0.7078123816018792, + "1": 0.793949382435402, + "2": 0.9300409183905433 + }, + "theilU": { + "0": 0.9291859354966914, + "1": 0.9278774326101347, + "2": 0.8489407553438706 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "report_optimized": { + "accuracy": { + "0": 0.8695378035260483, + "1": 0.9551874761942367, + "2": 0.9932599551447033 + }, + "precision": { + "0": 0.7088741319668206, + "1": 0.7523387061411551, + "2": 0.7406007419898425 + }, + "recall": { + "0": 0.5752968296743217, + "1": 0.6745698413302063, + "2": 0.6548532928566179 + }, + "f1": { + "0": 0.5099648536812272, + "1": 0.6043210367725153, + "2": 0.5815679236552638 + }, + "micro_accuracy": { + "0": 0.8345029711489339, + "1": 0.908581339231852, + "2": 0.9979571783202317 + }, + "theilU": { + "0": 0.9291859354966914, + "1": 0.9278774326101347, + "2": 0.8489407553438706 + }, + "coverage": { + "0": 0.7045351216185497, + "1": 0.7536561339698417, + "2": 0.7325907403197697 + } + }, + "known_zero": { + "accuracy": { + "0": 0.7359438160598023, + "1": 0.8078688889251138, + "2": 0.8106325437578626 + }, + "precision": { + "0": 0.27389983335544515, + "1": 0.3230691966641643, + "2": 0.2756918885388057 + }, + "recall": { + "0": 0.7359438160598023, + "1": 0.8078688889251138, + "2": 0.8106325437578626 + }, + "f1": { + "0": 0.266315326129971, + "1": 0.32493422231455543, + "2": 0.28088792323657213 + }, + "micro_accuracy": { + "0": 0.8203214191622025, + "1": 0.7939644230587076, + "2": 0.9300409183905433 + }, + "theilU": { + "0": 0.9323702972359517, + "1": 0.9278920368877236, + "2": 0.8489407553438706 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known_optimized": { + "accuracy": { + "0": 0.8978307906255943, + "1": 0.958350348631966, + "2": 0.9932599551447033 + }, + "precision": { + "0": 0.7337958308449367, + "1": 0.752504050056499, + "2": 0.7406007419898425 + }, + "recall": { + "0": 0.5934880337746956, + "1": 0.6766713050103627, + "2": 0.6548532928566179 + }, + "f1": { + "0": 0.5382986298299348, + "1": 0.6059367197707097, + "2": 0.5815679236552638 + }, + "micro_accuracy": { + "0": 0.9697840827422429, + "1": 0.9086041776638263, + "2": 0.9979571783202317 + }, + "theilU": { + "0": 0.9323702972359517, + "1": 0.9278920368877236, + "2": 0.8489407553438706 + }, + "coverage": { + "0": 0.7026214103802582, + "1": 0.7536514672173072, + "2": 0.7325907403197697 + } + }, + "calibration_zero": { + "accuracy": { + "0": 0.7430789391063041, + "1": 0.8315920980901614, + "2": 0.8491264519713813 + }, + "precision": { + "0": 0.4435113545221054, + "1": 0.4756659977776627, + "2": 0.3394307665358129 + }, + "recall": { + "0": 0.7430789391063041, + "1": 0.8315920980901614, + "2": 0.8491264519713813 + }, + "f1": { + "0": 0.40300238516178827, + "1": 0.46306039720704983, + "2": 0.3471036479087719 + }, + "micro_accuracy": { + "0": 0.7081339712918661, + "1": 0.7906698564593302, + "2": 0.9282296650717703 + }, + "theilU": { + "0": 0.954116113510863, + "1": 0.953655537431556, + "2": 0.8580508752393747 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "calibration_optimized": { + "accuracy": { + "0": 0.9122749701335368, + "1": 0.973864726625716, + "2": 0.9994937740250923 + }, + "precision": { + "0": 0.8510626577154353, + "1": 0.8845032192436618, + "2": 0.9029315347725212 + }, + "recall": { + "0": 0.6156853061930037, + "1": 0.7124031638615914, + "2": 0.7039240888934983 + }, + "f1": { + "0": 0.6018573695717253, + "1": 0.7095377082146889, + "2": 0.7266095397411778 + }, + "micro_accuracy": { + "0": 0.8340569223347805, + "1": 0.9093990058743787, + "2": 0.9974718455527465 + }, + "theilU": { + "0": 0.954116113510863, + "1": 0.953655537431556, + "2": 0.8580508752393747 + }, + "coverage": { + "0": 0.7084757347915243, + "1": 0.7563226247436774, + "2": 0.7435064935064936 + } + }, + "curve": [ + { + "thresholds": [ + 0.0, + 0.0, + 0.0 + ], + "scores": { + "accuracy": { + "0": 0.7133861511997317, + "1": 0.8053599793321786, + "2": 0.8106325437578626 + }, + "precision": { + "0": 0.2689411284200973, + "1": 0.32303901654923844, + "2": 0.2756918885388057 + }, + "recall": { + "0": 0.7133861511997317, + "1": 0.8053599793321786, + "2": 0.8106325437578626 + }, + "f1": { + "0": 0.25936240461341, + "1": 0.32445203101159487, + "2": 0.28088792323657213 + }, + "micro_accuracy": { + "0": 0.7078123816018792, + "1": 0.793949382435402, + "2": 0.9300409183905433 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + }, + { + "thresholds": [ + 0.0167619809508323, + 0.02, + 0.02 + ], + "scores": { + "accuracy": { + "0": 0.7133948610290463, + "1": 0.8053740989933655, + "2": 0.8106325437578626 + }, + "precision": { + "0": 0.2689411284200973, + "1": 0.32303901654923844, + "2": 0.2756918885388057 + }, + "recall": { + "0": 0.7133861511997317, + "1": 0.8053599793321786, + "2": 0.8106325437578626 + }, + "f1": { + "0": 0.25936240461341, + "1": 0.32445203101159487, + "2": 0.28088792323657213 + }, + "micro_accuracy": { + "0": 0.7078257904408283, + "1": 0.7939644230587076, + "2": 0.9300409183905433 + }, + "coverage": { + "0": 0.9999810563006744, + "1": 0.9999810563006744, + "2": 1.0 + } + } + }, + { + "thresholds": [ + 0.02, + 0.0228103883564472, + 0.04 + ], + "scores": { + "accuracy": { + "0": 0.7134317985455608, + "1": 0.8054160520729053, + "2": 0.8106325437578626 + }, + "precision": { + "0": 0.2689498973570152, + "1": 0.32350860294694506, + "2": 0.2756918885388057 + }, + "recall": { + "0": 0.7133861511997317, + "1": 0.8053599793321786, + "2": 0.8106325437578626 + }, + "f1": { + "0": 0.259367654211768, + "1": 0.3249149424364671, + "2": 0.28088792323657213 + }, + "micro_accuracy": { + "0": 0.70789284225683, + "1": 0.7940245912509709, + "2": 0.9300409183905433 + }, + "coverage": { + "0": 0.9998863378040463, + "1": 0.999905281503372, + "2": 1.0 + } + } + }, + { + "thresholds": [ + 0.04, + 0.04, + 0.06 + ], + "scores": { + "accuracy": { + "0": 0.7152112462522486, + "1": 0.8067081642362355, + "2": 0.8106325437578626 + }, + "precision": { + "0": 0.2732407257045685, + "1": 0.3257578168981015, + "2": 0.2756918885388057 + }, + "recall": { + "0": 0.7133500057504438, + "1": 0.8053599793321786, + "2": 0.8106325437578626 + }, + "f1": { + "0": 0.263129660580778, + "1": 0.3269914919402833, + "2": 0.28088792323657213 + }, + "micro_accuracy": { + "0": 0.7098238881395216, + "1": 0.7950940962209744, + "2": 0.9300409183905433 + }, + "coverage": { + "0": 0.9971395014018337, + "1": 0.9985602788512541, + "2": 1.0 + } + } + }, + { + "thresholds": [ + 0.06, + 0.06, + 0.08 + ], + "scores": { + "accuracy": { + "0": 0.7216373092458712, + "1": 0.8100811312125765, + "2": 0.8106558790565468 + }, + "precision": { + "0": 0.28070531989226544, + "1": 0.3307290260122494, + "2": 0.2756918885388057 + }, + "recall": { + "0": 0.7131568167605388, + "1": 0.8052179784983853, + "2": 0.8106325437578626 + }, + "f1": { + "0": 0.26871786500526934, + "1": 0.33119161729589486, + "2": 0.28088792323657213 + }, + "micro_accuracy": { + "0": 0.7133958767220131, + "1": 0.7981404919313354, + "2": 0.9300585371398261 + }, + "coverage": { + "0": 0.9914563916041524, + "1": 0.9942979465029931, + "2": 0.9999810563006744 + } + } + }, + { + "thresholds": [ + 0.08, + 0.08, + 0.092640534043312 + ], + "scores": { + "accuracy": { + "0": 0.7280194093049356, + "1": 0.821291028647412, + "2": 0.8108694056164214 + }, + "precision": { + "0": 0.29103969529517204, + "1": 0.33607184948501345, + "2": 0.27570151968741496 + }, + "recall": { + "0": 0.7121656982298983, + "1": 0.8038437553212547, + "2": 0.8106325437578626 + }, + "f1": { + "0": 0.2765706985441269, + "1": 0.33493208536973024, + "2": 0.28089507183813783 + }, + "micro_accuracy": { + "0": 0.7177507844533851, + "1": 0.8021851638872916, + "2": 0.9300937766410913 + }, + "coverage": { + "0": 0.9840683488671668, + "1": 0.9882927938167766, + "2": 0.9999431689020232 + } + } + }, + { + "thresholds": [ + 0.1, + 0.1, + 0.1 + ], + "scores": { + "accuracy": { + "0": 0.7337437577396957, + "1": 0.8273640952318694, + "2": 0.8108901572825726 + }, + "precision": { + "0": 0.3016118217234353, + "1": 0.3471916627910424, + "2": 0.2757254191999838 + }, + "recall": { + "0": 0.7116501305567737, + "1": 0.8032929446988698, + "2": 0.8106325437578626 + }, + "f1": { + "0": 0.2853455658783026, + "1": 0.3448609839938559, + "2": 0.2809136063684844 + }, + "micro_accuracy": { + "0": 0.7224485836243694, + "1": 0.8066875048236475, + "2": 0.9301290188128754 + }, + "coverage": { + "0": 0.9763582632416459, + "1": 0.9818140486474198, + "2": 0.999905281503372 + } + } + }, + { + "thresholds": [ + 0.12, + 0.12, + 0.12 + ], + "scores": { + "accuracy": { + "0": 0.7392829455512485, + "1": 0.8317072301825809, + "2": 0.811530379742219 + }, + "precision": { + "0": 0.3110133662406354, + "1": 0.35634188723499427, + "2": 0.27578901768312203 + }, + "recall": { + "0": 0.7106988817461454, + "1": 0.8023344483782012, + "2": 0.8105817652782349 + }, + "f1": { + "0": 0.29216555837922986, + "1": 0.352373753075415, + "2": 0.2809523161456017 + }, + "micro_accuracy": { + "0": 0.7270238560813453, + "1": 0.8112419367373902, + "2": 0.930647454735046 + }, + "coverage": { + "0": 0.9687807835114041, + "1": 0.9749943168902023, + "2": 0.999185420928999 + } + } + }, + { + "thresholds": [ + 0.14, + 0.14, + 0.14 + ], + "scores": { + "accuracy": { + "0": 0.7434522917634424, + "1": 0.8377864534991097, + "2": 0.8128150155584857 + }, + "precision": { + "0": 0.32049503487492487, + "1": 0.3645434095994383, + "2": 0.2812999995556893 + }, + "recall": { + "0": 0.7097354850858043, + "1": 0.8010083202839473, + "2": 0.8104476176441149 + }, + "f1": { + "0": 0.2994558327427106, + "1": 0.35831440098258827, + "2": 0.28623588894687346 + }, + "micro_accuracy": { + "0": 0.7310707532303813, + "1": 0.8155392981495246, + "2": 0.9316550860006835 + }, + "coverage": { + "0": 0.9617337273622794, + "1": 0.9684397969235432, + "2": 0.9978404182768811 + } + } + }, + { + "thresholds": [ + 0.16, + 0.16, + 0.16 + ], + "scores": { + "accuracy": { + "0": 0.7478115129480699, + "1": 0.8408163684650996, + "2": 0.8149719404833623 + }, + "precision": { + "0": 0.3318824250953348, + "1": 0.37279050884588305, + "2": 0.2816910156354521 + }, + "recall": { + "0": 0.7080216578515646, + "1": 0.79984731352252, + "2": 0.8101749404258952 + }, + "f1": { + "0": 0.3077048798636413, + "1": 0.3647851290304528, + "2": 0.28650271535238875 + }, + "micro_accuracy": { + "0": 0.7351872804144584, + "1": 0.8193686863714235, + "2": 0.9331265933564172 + }, + "coverage": { + "0": 0.9543646283246192, + "1": 0.9620178828521634, + "2": 0.9957187239524135 + } + } + }, + { + "thresholds": [ + 0.1771061792969703, + 0.18, + 0.18 + ], + "scores": { + "accuracy": { + "0": 0.7498534834413028, + "1": 0.8437187068499409, + "2": 0.81867085176141 + }, + "precision": { + "0": 0.3389265462606063, + "1": 0.3803322253419352, + "2": 0.28293281417118965 + }, + "recall": { + "0": 0.7072236748245034, + "1": 0.798220287153605, + "2": 0.8098329027497043 + }, + "f1": { + "0": 0.31252314655185837, + "1": 0.37052304281430637, + "2": 0.28740523930207035 + }, + "micro_accuracy": { + "0": 0.7381351869606904, + "1": 0.8231527191260731, + "2": 0.935667379352474 + }, + "coverage": { + "0": 0.9483973630370539, + "1": 0.9555012502841554, + "2": 0.9923467454724558 + } + } + }, + { + "thresholds": [ + 0.18, + 0.2, + 0.2 + ], + "scores": { + "accuracy": { + "0": 0.7500283518469476, + "1": 0.8483777723085861, + "2": 0.82129058287655 + }, + "precision": { + "0": 0.3399764116637914, + "1": 0.3900698230576411, + "2": 0.30614323617370987 + }, + "recall": { + "0": 0.7069388289334648, + "1": 0.7963635723215526, + "2": 0.8090155411897573 + }, + "f1": { + "0": 0.31339905672161344, + "1": 0.37852404829773845, + "2": 0.3100900376599778 + }, + "micro_accuracy": { + "0": 0.7384732274963011, + "1": 0.8269641396100657, + "2": 0.9379454364319105 + }, + "coverage": { + "0": 0.9474501780707737, + "1": 0.9492877169053573, + "2": 0.9887853299992423 + } + } + }, + { + "thresholds": [ + 0.2, + 0.20667465552687642, + 0.22 + ], + "scores": { + "accuracy": { + "0": 0.7548443099009435, + "1": 0.8493215926736324, + "2": 0.8234776904699019 + }, + "precision": { + "0": 0.352804052409931, + "1": 0.393780195383966, + "2": 0.30725628084668355 + }, + "recall": { + "0": 0.7049230797621903, + "1": 0.7961661412822494, + "2": 0.8081725875403748 + }, + "f1": { + "0": 0.32351240752801413, + "1": 0.38180855139350706, + "2": 0.31073427135619536 + }, + "micro_accuracy": { + "0": 0.7421453315072908, + "1": 0.8280915725282415, + "2": 0.9404432132963989 + }, + "coverage": { + "0": 0.9405925589149049, + "1": 0.9474691217700992, + "2": 0.9847692657422141 + } + } + }, + { + "thresholds": [ + 0.22, + 0.22, + 0.24 + ], + "scores": { + "accuracy": { + "0": 0.7594908566152528, + "1": 0.8578735565866165, + "2": 0.8293627516517791 + }, + "precision": { + "0": 0.365782686268571, + "1": 0.4020873106141575, + "2": 0.3149032896922568 + }, + "recall": { + "0": 0.7028919732322909, + "1": 0.7944982384206007, + "2": 0.807135190947241 + }, + "f1": { + "0": 0.3336533063093199, + "1": 0.38861279598418436, + "2": 0.31757721825160296 + }, + "micro_accuracy": { + "0": 0.7458958176911058, + "1": 0.8308189871637773, + "2": 0.9433437071115149 + }, + "coverage": { + "0": 0.9335265590664545, + "1": 0.9430362961279078, + "2": 0.9800143972114874 + } + } + }, + { + "thresholds": [ + 0.24, + 0.24, + 0.26 + ], + "scores": { + "accuracy": { + "0": 0.7635693395683111, + "1": 0.8638377769986186, + "2": 0.8324184475643961 + }, + "precision": { + "0": 0.37576730610432946, + "1": 0.41504289383793364, + "2": 0.31679586552656464 + }, + "recall": { + "0": 0.7009253315787347, + "1": 0.791948634930954, + "2": 0.8062489590780243 + }, + "f1": { + "0": 0.34076122787194435, + "1": 0.3994767720039988, + "2": 0.318700764764693 + }, + "micro_accuracy": { + "0": 0.7491722192699178, + "1": 0.8341757308640977, + "2": 0.9459727048591563 + }, + "coverage": { + "0": 0.9268394332045162, + "1": 0.9369932560430401, + "2": 0.9758088959612033 + } + } + }, + { + "thresholds": [ + 0.26, + 0.26, + 0.28 + ], + "scores": { + "accuracy": { + "0": 0.7692606390055128, + "1": 0.8702905462966479, + "2": 0.8344725068374593 + }, + "precision": { + "0": 0.38542521872654295, + "1": 0.42761964664120394, + "2": 0.318939168594326 + }, + "recall": { + "0": 0.6974018483494486, + "1": 0.7899179876930018, + "2": 0.8051542662357258 + }, + "f1": { + "0": 0.3474564561946686, + "1": 0.40958809993056633, + "2": 0.3199368649618886 + }, + "micro_accuracy": { + "0": 0.7526447947968551, + "1": 0.837626663411061, + "2": 0.9487354617125907 + }, + "coverage": { + "0": 0.9203985754338108, + "1": 0.9310070470561491, + "2": 0.970750928241267 + } + } + }, + { + "thresholds": [ + 0.28, + 0.28, + 0.3 + ], + "scores": { + "accuracy": { + "0": 0.7725859507641404, + "1": 0.8726259932007965, + "2": 0.8382281099415309 + }, + "precision": { + "0": 0.3945251642393624, + "1": 0.4417248508338098, + "2": 0.33332162039942964 + }, + "recall": { + "0": 0.6959773175027597, + "1": 0.7879785533647826, + "2": 0.8042671639986306 + }, + "f1": { + "0": 0.3543253882660422, + "1": 0.4217432180931911, + "2": 0.3335362017060267 + }, + "micro_accuracy": { + "0": 0.7559125297958338, + "1": 0.8410007575292263, + "2": 0.9515585179376593 + }, + "coverage": { + "0": 0.9139387739637796, + "1": 0.925267106160491, + "2": 0.9663181025990756 + } + } + }, + { + "thresholds": [ + 0.3, + 0.3, + 0.32 + ], + "scores": { + "accuracy": { + "0": 0.7762104804225579, + "1": 0.8747388079118475, + "2": 0.8409541022849736 + }, + "precision": { + "0": 0.40572263028215255, + "1": 0.4509636491646401, + "2": 0.3364326557863627 + }, + "recall": { + "0": 0.6937886749479651, + "1": 0.7854522072270695, + "2": 0.8029942780367477 + }, + "f1": { + "0": 0.36200012799905856, + "1": 0.4287285044431418, + "2": 0.33548591777898634 + }, + "micro_accuracy": { + "0": 0.7590809399477807, + "1": 0.8440816999525959, + "2": 0.9538616045055335 + }, + "coverage": { + "0": 0.906929605213306, + "1": 0.9191293475789952, + "2": 0.9619989391528377 + } + } + }, + { + "thresholds": [ + 0.32, + 0.32, + 0.34 + ], + "scores": { + "accuracy": { + "0": 0.7804208665313092, + "1": 0.8772171194307609, + "2": 0.8425552376088427 + }, + "precision": { + "0": 0.41063391420757483, + "1": 0.45534460063578913, + "2": 0.340136997194161 + }, + "recall": { + "0": 0.6893378801276361, + "1": 0.7805304800338374, + "2": 0.8014728191944541 + }, + "f1": { + "0": 0.36472232984985253, + "1": 0.4307771157453053, + "2": 0.33748500479368804 + }, + "micro_accuracy": { + "0": 0.7617866004962779, + "1": 0.8467295532289831, + "2": 0.956318654131618 + }, + "coverage": { + "0": 0.900848677729787, + "1": 0.9137493369705236, + "2": 0.9571304084261575 + } + } + }, + { + "thresholds": [ + 0.33869456946849824, + 0.34, + 0.36 + ], + "scores": { + "accuracy": { + "0": 0.7822079030229553, + "1": 0.8801818500043139, + "2": 0.8441365732795846 + }, + "precision": { + "0": 0.41524731842373147, + "1": 0.4617753798614477, + "2": 0.34052365497632464 + }, + "recall": { + "0": 0.6876369198237797, + "1": 0.7784225678838699, + "2": 0.7934996208700578 + }, + "f1": { + "0": 0.36790025454376546, + "1": 0.43507909693712915, + "2": 0.33638592243828563 + }, + "micro_accuracy": { + "0": 0.7642465666462112, + "1": 0.8494899555666813, + "2": 0.958930276981853 + }, + "coverage": { + "0": 0.8952223990300826, + "1": 0.9081041145714935, + "2": 0.9520345533075699 + } + } + }, + { + "thresholds": [ + 0.34, + 0.36, + 0.37503301501274106 + ], + "scores": { + "accuracy": { + "0": 0.7822974063946339, + "1": 0.8849620912252918, + "2": 0.8462833416106459 + }, + "precision": { + "0": 0.41545092096398484, + "1": 0.4693076258849002, + "2": 0.34333182839304643 + }, + "recall": { + "0": 0.687389030883057, + "1": 0.7755879029968491, + "2": 0.7924203347456775 + }, + "f1": { + "0": 0.36793005311675375, + "1": 0.43961475728672206, + "2": 0.3376777916706937 + }, + "micro_accuracy": { + "0": 0.7644244002625505, + "1": 0.8521403228853945, + "2": 0.9607670795045945 + }, + "coverage": { + "0": 0.8946919754489657, + "1": 0.9023452299765098, + "2": 0.9483215882397514 + } + } + }, + { + "thresholds": [ + 0.36, + 0.38, + 0.38 + ], + "scores": { + "accuracy": { + "0": 0.7856610421219459, + "1": 0.8875711682521333, + "2": 0.8469802392232333 + }, + "precision": { + "0": 0.4232094676571947, + "1": 0.4778495331123042, + "2": 0.34423982179188495 + }, + "recall": { + "0": 0.6828882050328446, + "1": 0.7728740302251098, + "2": 0.7921626152902179 + }, + "f1": { + "0": 0.37291943007451384, + "1": 0.4457669655974664, + "2": 0.33809399066346724 + }, + "micro_accuracy": { + "0": 0.7672340244006484, + "1": 0.8544794239986486, + "2": 0.9614553746449575 + }, + "coverage": { + "0": 0.8881563991816321, + "1": 0.8971925437599454, + "2": 0.9470713040842615 + } + } + }, + { + "thresholds": [ + 0.38, + 0.39594480991363523, + 0.4 + ], + "scores": { + "accuracy": { + "0": 0.7895340324943902, + "1": 0.8923578497459264, + "2": 0.8903402969413311 + }, + "precision": { + "0": 0.432616469514816, + "1": 0.48464342101464686, + "2": 0.3473456813283844 + }, + "recall": { + "0": 0.6806507883706033, + "1": 0.771884058275359, + "2": 0.7907041081262358 + }, + "f1": { + "0": 0.37871036247198203, + "1": 0.45014676984901103, + "2": 0.3396369640756426 + }, + "micro_accuracy": { + "0": 0.7699527491408935, + "1": 0.8567911714770798, + "2": 0.9638362883447915 + }, + "coverage": { + "0": 0.8820186406001363, + "1": 0.8926271122224748, + "2": 0.9423732666515117 + } + } + }, + { + "thresholds": [ + 0.4, + 0.4, + 0.42 + ], + "scores": { + "accuracy": { + "0": 0.7950450193198869, + "1": 0.893055394894665, + "2": 0.8928679951259277 + }, + "precision": { + "0": 0.44145004915870967, + "1": 0.48682206283434654, + "2": 0.3488378149157679 + }, + "recall": { + "0": 0.6780374148341559, + "1": 0.7714837033279205, + "2": 0.7896491609503584 + }, + "f1": { + "0": 0.3835340873656414, + "1": 0.45176847686667926, + "2": 0.3403865455877892 + }, + "micro_accuracy": { + "0": 0.772615184944841, + "1": 0.8573675039313188, + "2": 0.9660722580123998 + }, + "coverage": { + "0": 0.875767219822687, + "1": 0.8914526028642873, + "2": 0.9380351595059483 + } + } + }, + { + "thresholds": [ + 0.42, + 0.42, + 0.44 + ], + "scores": { + "accuracy": { + "0": 0.8014953206811135, + "1": 0.9011455572341767, + "2": 0.8944244402628663 + }, + "precision": { + "0": 0.45050968074706743, + "1": 0.49590441021494636, + "2": 0.357731316313625 + }, + "recall": { + "0": 0.6732984758302977, + "1": 0.7683326618980545, + "2": 0.7879977075411427 + }, + "f1": { + "0": 0.38847065369687944, + "1": 0.4575424668272323, + "2": 0.3477580179579796 + }, + "micro_accuracy": { + "0": 0.7751655917727035, + "1": 0.8600607408674823, + "2": 0.9683577724521711 + }, + "coverage": { + "0": 0.8694400242479351, + "1": 0.8857316056679548, + "2": 0.9327498673941047 + } + } + }, + { + "thresholds": [ + 0.44, + 0.44, + 0.46 + ], + "scores": { + "accuracy": { + "0": 0.804324246118129, + "1": 0.9053463245243778, + "2": 0.8954761019572214 + }, + "precision": { + "0": 0.45855512780971547, + "1": 0.5039378607652643, + "2": 0.3605083083206587 + }, + "recall": { + "0": 0.6705908855776433, + "1": 0.764142845376752, + "2": 0.7864238843787428 + }, + "f1": { + "0": 0.39375624607090726, + "1": 0.4628240029780335, + "2": 0.34909840959853355 + }, + "micro_accuracy": { + "0": 0.7780362551024887, + "1": 0.8623152550394768, + "2": 0.9699510403916769 + }, + "coverage": { + "0": 0.8631886034704858, + "1": 0.8805599757520649, + "2": 0.928620140941123 + } + } + }, + { + "thresholds": [ + 0.46, + 0.46, + 0.48 + ], + "scores": { + "accuracy": { + "0": 0.806927045988926, + "1": 0.9070998595508281, + "2": 0.8989869918652388 + }, + "precision": { + "0": 0.4666994134626624, + "1": 0.5093823050893108, + "2": 0.36337438099804525 + }, + "recall": { + "0": 0.6681191552859147, + "1": 0.7618185636611512, + "2": 0.7844860705095039 + }, + "f1": { + "0": 0.39893352112670794, + "1": 0.466472237332488, + "2": 0.3501382750631744 + }, + "micro_accuracy": { + "0": 0.7807319984086991, + "1": 0.8644603071598529, + "2": 0.9717062369295116 + }, + "coverage": { + "0": 0.8571266196862923, + "1": 0.875767219822687, + "2": 0.9239599909070243 + } + } + }, + { + "thresholds": [ + 0.48, + 0.48, + 0.5 + ], + "scores": { + "accuracy": { + "0": 0.8114795403201085, + "1": 0.9088299343175352, + "2": 0.9033154355994537 + }, + "precision": { + "0": 0.47582644947336944, + "1": 0.5179949315114452, + "2": 0.3648333428051001 + }, + "recall": { + "0": 0.6638326272497753, + "1": 0.759356680196707, + "2": 0.7827012814105415 + }, + "f1": { + "0": 0.40338547823703075, + "1": 0.4715346646448021, + "2": 0.350450437456427 + }, + "micro_accuracy": { + "0": 0.7838205151056056, + "1": 0.8672371744621549, + "2": 0.9733451524459379 + }, + "coverage": { + "0": 0.8502690005304235, + "1": 0.8699704478290521, + "2": 0.9189399105857392 + } + } + }, + { + "thresholds": [ + 0.49522406011819836, + 0.5, + 0.52 + ], + "scores": { + "accuracy": { + "0": 0.8131985125810017, + "1": 0.9101458380234865, + "2": 0.9070507630394776 + }, + "precision": { + "0": 0.4853266940319181, + "1": 0.5273743814782698, + "2": 0.3750239048221222 + }, + "recall": { + "0": 0.6606467960582939, + "1": 0.7540719468184587, + "2": 0.780832701194339 + }, + "f1": { + "0": 0.410065316356706, + "1": 0.4765459648018024, + "2": 0.3587824510578402 + }, + "micro_accuracy": { + "0": 0.7864545944005743, + "1": 0.8697729464363987, + "2": 0.9749958568114021 + }, + "coverage": { + "0": 0.8444343411381374, + "1": 0.8643631128286732, + "2": 0.914450253845571 + } + } + }, + { + "thresholds": [ + 0.5, + 0.52, + 0.54 + ], + "scores": { + "accuracy": { + "0": 0.8133431406315472, + "1": 0.9120370020002934, + "2": 0.9104159203753839 + }, + "precision": { + "0": 0.488870495928512, + "1": 0.5360001699088766, + "2": 0.38544476420516655 + }, + "recall": { + "0": 0.659636802643364, + "1": 0.7497994172091164, + "2": 0.7772239165613246 + }, + "f1": { + "0": 0.41171843402205593, + "1": 0.4824481326818766, + "2": 0.3668617961911676 + }, + "micro_accuracy": { + "0": 0.7874359204964475, + "1": 0.8723512272647007, + "2": 0.9765994212312369 + }, + "coverage": { + "0": 0.842539971205577, + "1": 0.8582253542471774, + "2": 0.9099227097067515 + } + } + }, + { + "thresholds": [ + 0.52, + 0.54, + 0.56 + ], + "scores": { + "accuracy": { + "0": 0.8153853796607643, + "1": 0.9145300809525654, + "2": 0.9160727770931864 + }, + "precision": { + "0": 0.4987396038467206, + "1": 0.5558769751696645, + "2": 0.3951022870331049 + }, + "recall": { + "0": 0.655240680202325, + "1": 0.7462475330743252, + "2": 0.775538241217725 + }, + "f1": { + "0": 0.4172495668263773, + "1": 0.498288881992045, + "2": 0.37499806223346055 + }, + "micro_accuracy": { + "0": 0.7908746110694738, + "1": 0.8753254266705236, + "2": 0.978024737866516 + }, + "coverage": { + "0": 0.8341100250056831, + "1": 0.851348791391983, + "2": 0.9051488974766992 + } + } + }, + { + "thresholds": [ + 0.54, + 0.5573162794113159, + 0.58 + ], + "scores": { + "accuracy": { + "0": 0.8202354894196735, + "1": 0.9157785993905069, + "2": 0.9150494453035672 + }, + "precision": { + "0": 0.5173863301811525, + "1": 0.568294414066488, + "2": 0.39905183282170725 + }, + "recall": { + "0": 0.6510393255023516, + "1": 0.7432729631793155, + "2": 0.7681305561704497 + }, + "f1": { + "0": 0.43019199509505107, + "1": 0.5072161808807105, + "2": 0.37694491757901133 + }, + "micro_accuracy": { + "0": 0.7946192870096183, + "1": 0.877669337869902, + "2": 0.97946862443991 + }, + "coverage": { + "0": 0.8252443737213003, + "1": 0.8462908236720467, + "2": 0.9005266348412518 + } + } + }, + { + "thresholds": [ + 0.56, + 0.56, + 0.6 + ], + "scores": { + "accuracy": { + "0": 0.8246344703505881, + "1": 0.9161843564937088, + "2": 0.9194908009007208 + }, + "precision": { + "0": 0.5283244296815983, + "1": 0.5708352400590635, + "2": 0.40904357025412913 + }, + "recall": { + "0": 0.6474767062601254, + "1": 0.7423444494319529, + "2": 0.7661598143186765 + }, + "f1": { + "0": 0.4369698462138334, + "1": 0.5091265918004917, + "2": 0.38524340547274233 + }, + "micro_accuracy": { + "0": 0.7979379054680259, + "1": 0.8780416760026888, + "2": 0.9807379215561899 + }, + "coverage": { + "0": 0.8176100628930818, + "1": 0.8454573009017201, + "2": 0.8959422596044555 + } + } + }, + { + "thresholds": [ + 0.58, + 0.58, + 0.6062131464481354 + ], + "scores": { + "accuracy": { + "0": 0.8274376383805522, + "1": 0.9180150884080034, + "2": 0.9219844207825076 + }, + "precision": { + "0": 0.5334455169098995, + "1": 0.578460057146473, + "2": 0.40951827175125743 + }, + "recall": { + "0": 0.6425741875049275, + "1": 0.7391341990622226, + "2": 0.7654605283779076 + }, + "f1": { + "0": 0.4379589484202672, + "1": 0.5137760873762149, + "2": 0.3852807660654326 + }, + "micro_accuracy": { + "0": 0.8005798592438449, + "1": 0.880472064265728, + "2": 0.9811272796594014 + }, + "coverage": { + "0": 0.8102030764567705, + "1": 0.8395089793134803, + "2": 0.8943509888611048 + } + } + }, + { + "thresholds": [ + 0.6, + 0.6, + 0.62 + ], + "scores": { + "accuracy": { + "0": 0.8318500076978149, + "1": 0.924725106405336, + "2": 0.9235989194281718 + }, + "precision": { + "0": 0.5458248808505984, + "1": 0.5859917010945801, + "2": 0.4219990011447766 + }, + "recall": { + "0": 0.6385574329010715, + "1": 0.736499159988166, + "2": 0.7634893266177312 + }, + "f1": { + "0": 0.4446330401242315, + "1": 0.5172855051950217, + "2": 0.39470708140752464 + }, + "micro_accuracy": { + "0": 0.8038252656434475, + "1": 0.8830536989041968, + "2": 0.9821561496416342 + }, + "coverage": { + "0": 0.8022656664393423, + "1": 0.8332575585360309, + "2": 0.8907137985905887 + } + } + }, + { + "thresholds": [ + 0.6193500757217408, + 0.62, + 0.64 + ], + "scores": { + "accuracy": { + "0": 0.8365708084338256, + "1": 0.9294504152877463, + "2": 0.9251719241831572 + }, + "precision": { + "0": 0.5557179364237996, + "1": 0.5922906136507499, + "2": 0.4264955299639828 + }, + "recall": { + "0": 0.6318684378664445, + "1": 0.7308566051901757, + "2": 0.7598981586682257 + }, + "f1": { + "0": 0.4486169786063067, + "1": 0.5198691864504508, + "2": 0.39566769150613273 + }, + "micro_accuracy": { + "0": 0.8070941271885883, + "1": 0.8855349945034812, + "2": 0.9834099412079103 + }, + "coverage": { + "0": 0.7941577631279836, + "1": 0.8271576873531863, + "2": 0.8860915359551413 + } + } + }, + { + "thresholds": [ + 0.62, + 0.64, + 0.66 + ], + "scores": { + "accuracy": { + "0": 0.8368951762047117, + "1": 0.9323792253568945, + "2": 0.9259678576739241 + }, + "precision": { + "0": 0.5573096737462295, + "1": 0.6055855100696447, + "2": 0.4411144610364568 + }, + "recall": { + "0": 0.6318218646604747, + "1": 0.7285595317143749, + "2": 0.757823188780079 + }, + "f1": { + "0": 0.44976741304800766, + "1": 0.5280902298398918, + "2": 0.4062108634058074 + }, + "micro_accuracy": { + "0": 0.8072013171395166, + "1": 0.8878047655294905, + "2": 0.9845747309171375 + }, + "coverage": { + "0": 0.7939114950367507, + "1": 0.8212661968629233, + "2": 0.8817723725089035 + } + } + }, + { + "thresholds": [ + 0.64, + 0.66, + 0.68 + ], + "scores": { + "accuracy": { + "0": 0.8391003901960424, + "1": 0.9339274656951841, + "2": 0.9268284085699229 + }, + "precision": { + "0": 0.5730440719516031, + "1": 0.6128803738519706, + "2": 0.44272558783599386 + }, + "recall": { + "0": 0.6273222466116648, + "1": 0.7259822629803604, + "2": 0.7555024910286355 + }, + "f1": { + "0": 0.4575328877972292, + "1": 0.5321926313773904, + "2": 0.4061591826041261 + }, + "micro_accuracy": { + "0": 0.8099783080260303, + "1": 0.8898336585819162, + "2": 0.9855288451154453 + }, + "coverage": { + "0": 0.7859740850193225, + "1": 0.8154125937713117, + "2": 0.8770743350761536 + } + } + }, + { + "thresholds": [ + 0.66, + 0.68, + 0.7000000000000001 + ], + "scores": { + "accuracy": { + "0": 0.8418760645620806, + "1": 0.9366373301191168, + "2": 0.9280709211187287 + }, + "precision": { + "0": 0.585749326188919, + "1": 0.6314766593206947, + "2": 0.45450769269215247 + }, + "recall": { + "0": 0.6228737827879822, + "1": 0.7233650421290828, + "2": 0.7535608412062839 + }, + "f1": { + "0": 0.4642532976239161, + "1": 0.5448991928030186, + "2": 0.4157281455165222 + }, + "micro_accuracy": { + "0": 0.8125350293637449, + "1": 0.8921993119105015, + "2": 0.9865624660805383 + }, + "coverage": { + "0": 0.7773925892248238, + "1": 0.8094074410850951, + "2": 0.8726415094339622 + } + } + }, + { + "thresholds": [ + 0.68, + 0.7000000000000001, + 0.72 + ], + "scores": { + "accuracy": { + "0": 0.8467921998913034, + "1": 0.9393059078234464, + "2": 0.9298002907285362 + }, + "precision": { + "0": 0.6018362029086355, + "1": 0.6472896830971239, + "2": 0.4768702415515736 + }, + "recall": { + "0": 0.618499057760121, + "1": 0.7156286671982628, + "2": 0.7515516126143819 + }, + "f1": { + "0": 0.47199036999553784, + "1": 0.5539580807175407, + "2": 0.4352122380189852 + }, + "micro_accuracy": { + "0": 0.8151542023844713, + "1": 0.8945840707964602, + "2": 0.9877678512920207 + }, + "coverage": { + "0": 0.7690384178222324, + "1": 0.8027392589224824, + "2": 0.8672614988254906 + } + } + }, + { + "thresholds": [ + 0.7000000000000001, + 0.72, + 0.74 + ], + "scores": { + "accuracy": { + "0": 0.8505765431292961, + "1": 0.9426077320386232, + "2": 0.9317370154845029 + }, + "precision": { + "0": 0.6220874914824229, + "1": 0.6653497304193363, + "2": 0.5140701931039222 + }, + "recall": { + "0": 0.6130308866443115, + "1": 0.7117618603304872, + "2": 0.7478033780126322 + }, + "f1": { + "0": 0.482906771719501, + "1": 0.5659081909185883, + "2": 0.46758162541547865 + }, + "micro_accuracy": { + "0": 0.8180346648072517, + "1": 0.8966813369810872, + "2": 0.988829026937878 + }, + "coverage": { + "0": 0.7607031901189665, + "1": 0.796298401151777, + "2": 0.8614647268318557 + } + } + }, + { + "thresholds": [ + 0.72, + 0.7233478188514709, + 0.76 + ], + "scores": { + "accuracy": { + "0": 0.8527641023249498, + "1": 0.9428025796463384, + "2": 0.935747565760967 + }, + "precision": { + "0": 0.6398161853149689, + "1": 0.6678128417725981, + "2": 0.5297157913073556 + }, + "recall": { + "0": 0.6091218948181332, + "1": 0.7111445780225057, + "2": 0.7456272791923845 + }, + "f1": { + "0": 0.4919561266052118, + "1": 0.5671096501037651, + "2": 0.47978322966676773 + }, + "micro_accuracy": { + "0": 0.8210192205960148, + "1": 0.8970840480274442, + "2": 0.9898887094276169 + }, + "coverage": { + "0": 0.7520080321285141, + "1": 0.7951807228915663, + "2": 0.8561983784193378 + } + } + }, + { + "thresholds": [ + 0.7342727482318878, + 0.74, + 0.78 + ], + "scores": { + "accuracy": { + "0": 0.854886409715426, + "1": 0.9446406913435519, + "2": 0.9331121388047589 + }, + "precision": { + "0": 0.6508005185872108, + "1": 0.682396027724621, + "2": 0.5460069993672308 + }, + "recall": { + "0": 0.60524633727997, + "1": 0.7080615854710526, + "2": 0.7395639540293978 + }, + "f1": { + "0": 0.4947735093153466, + "1": 0.5744176692050887, + "2": 0.49061073568146535 + }, + "micro_accuracy": { + "0": 0.8230241423125794, + "1": 0.8990185020757842, + "2": 0.9907102120834076 + }, + "coverage": { + "0": 0.7454345684625293, + "1": 0.789402894597257, + "2": 0.850344775327726 + } + } + }, + { + "thresholds": [ + 0.74, + 0.76, + 0.8 + ], + "scores": { + "accuracy": { + "0": 0.8559040323213707, + "1": 0.9456410829987761, + "2": 0.9337720804559677 + }, + "precision": { + "0": 0.6525577751953842, + "1": 0.7016948212907842, + "2": 0.5492553753856487 + }, + "recall": { + "0": 0.6039604348976962, + "1": 0.7017802799243268, + "2": 0.7360668873626399 + }, + "f1": { + "0": 0.49510778046787124, + "1": 0.5854273782584912, + "2": 0.4899775053554504 + }, + "micro_accuracy": { + "0": 0.8240802163596469, + "1": 0.9012432445532317, + "2": 0.9913417971378583 + }, + "coverage": { + "0": 0.7424793513677351, + "1": 0.7816738652724105, + "2": 0.8445480033340911 + } + } + }, + { + "thresholds": [ + 0.76, + 0.78, + 0.8138482809066773 + ], + "scores": { + "accuracy": { + "0": 0.8565514221246198, + "1": 0.9467152054730794, + "2": 0.9570008941293794 + }, + "precision": { + "0": 0.665487206634999, + "1": 0.7164905935994884, + "2": 0.549534403655428 + }, + "recall": { + "0": 0.5972797052716972, + "1": 0.6969072724197788, + "2": 0.7337048765827759 + }, + "f1": { + "0": 0.5001589047146829, + "1": 0.594083451913037, + "2": 0.48914702541363786 + }, + "micro_accuracy": { + "0": 0.8268420644561032, + "1": 0.9032329008137233, + "2": 0.991748021554348 + }, + "coverage": { + "0": 0.7329885580056074, + "1": 0.775233007501705, + "2": 0.8402098961885277 + } + } + }, + { + "thresholds": [ + 0.78, + 0.8, + 0.8200000000000001 + ], + "scores": { + "accuracy": { + "0": 0.8594425159637977, + "1": 0.9497731296606361, + "2": 0.9584460859992482 + }, + "precision": { + "0": 0.6803796479926846, + "1": 0.7250231448997243, + "2": 0.5510102272412862 + }, + "recall": { + "0": 0.5912552869226927, + "1": 0.6876225545188672, + "2": 0.7316741146348918 + }, + "f1": { + "0": 0.5055427382170709, + "1": 0.5931863584151059, + "2": 0.489199491894374 + }, + "micro_accuracy": { + "0": 0.8294744002302279, + "1": 0.9051758198340577, + "2": 0.9921530494561408 + }, + "coverage": { + "0": 0.7240850193225733, + "1": 0.7671440478896719, + "2": 0.8377093278775479 + } + } + }, + { + "thresholds": [ + 0.8, + 0.8200000000000001, + 0.84 + ], + "scores": { + "accuracy": { + "0": 0.8630288507624861, + "1": 0.9548524817476478, + "2": 0.9606842084704642 + }, + "precision": { + "0": 0.6915274520715989, + "1": 0.7451875427736744, + "2": 0.5545822389275297 + }, + "recall": { + "0": 0.5828557765175574, + "1": 0.6785600634730545, + "2": 0.7243886229400459 + }, + "f1": { + "0": 0.5053541561207143, + "1": 0.6018749578408727, + "2": 0.48771913617938517 + }, + "micro_accuracy": { + "0": 0.8323604330290809, + "1": 0.9075462268865567, + "2": 0.9930146555266401 + }, + "coverage": { + "0": 0.713950140183375, + "1": 0.7581268470106842, + "2": 0.8298476926574221 + } + } + }, + { + "thresholds": [ + 0.8161613345146179, + 0.8301631808280945, + 0.86 + ], + "scores": { + "accuracy": { + "0": 0.8695378035260483, + "1": 0.9551874761942367, + "2": 0.9671542034207682 + }, + "precision": { + "0": 0.7088741319668206, + "1": 0.7523387061411551, + "2": 0.5686471940061053 + }, + "recall": { + "0": 0.5752968296743217, + "1": 0.6745698413302063, + "2": 0.7192232247395872 + }, + "f1": { + "0": 0.5099648536812272, + "1": 0.6043210367725153, + "2": 0.49492012335978447 + }, + "micro_accuracy": { + "0": 0.8345029711489339, + "1": 0.908581339231852, + "2": 0.9938243156051249 + }, + "coverage": { + "0": 0.7045351216185497, + "1": 0.7536561339698417, + "2": 0.8220807759339244 + } + } + }, + { + "thresholds": [ + 0.8200000000000001, + 0.84, + 0.88 + ], + "scores": { + "accuracy": { + "0": 0.8695777913019803, + "1": 0.9559818537903364, + "2": 0.9675780257776521 + }, + "precision": { + "0": 0.7115585581709526, + "1": 0.7643505171945459, + "2": 0.6018716109607208 + }, + "recall": { + "0": 0.5733625467504319, + "1": 0.6712888991621954, + "2": 0.7135515603555062 + }, + "f1": { + "0": 0.5108360475147855, + "1": 0.6105340361704961, + "2": 0.5210778540335645 + }, + "micro_accuracy": { + "0": 0.8349106203995794, + "1": 0.9094864659752087, + "2": 0.9947338987790102 + }, + "coverage": { + "0": 0.702602864287338, + "1": 0.7488444343411381, + "2": 0.8129878002576343 + } + } + }, + { + "thresholds": [ + 0.8304834783077241, + 0.8466564118862152, + 0.9 + ], + "scores": { + "accuracy": { + "0": 0.8700626078235132, + "1": 0.9562166588597012, + "2": 0.9765346357718081 + }, + "precision": { + "0": 0.7209237858478275, + "1": 0.7724817982894848, + "2": 0.6078089642572123 + }, + "recall": { + "0": 0.5680601982894443, + "1": 0.6624414705403012, + "2": 0.7074072356074954 + }, + "f1": { + "0": 0.5132009324373984, + "1": 0.6086201578985313, + "2": 0.519811991675415 + }, + "micro_accuracy": { + "0": 0.8361440539658361, + "1": 0.9102111334129424, + "2": 0.9954662447755555 + }, + "coverage": { + "0": 0.6964461620065167, + "1": 0.7456050617564598, + "2": 0.8022467227400166 + } + } + }, + { + "thresholds": [ + 0.84, + 0.86, + 0.9113053202629089 + ], + "scores": { + "accuracy": { + "0": 0.870807439381201, + "1": 0.9619950870917762, + "2": 0.9881806370371451 + }, + "precision": { + "0": 0.728047202771161, + "1": 0.7833968530381784, + "2": 0.6259214961933744 + }, + "recall": { + "0": 0.5622057558143685, + "1": 0.6588142802816883, + "2": 0.7038532721935533 + }, + "f1": { + "0": 0.5125140208569766, + "1": 0.6133249196210829, + "2": 0.5336202551951297 + }, + "micro_accuracy": { + "0": 0.836876903239966, + "1": 0.9118491184911849, + "2": 0.9957625101176022 + }, + "coverage": { + "0": 0.6905167841176025, + "1": 0.7392589224823823, + "2": 0.7957490338713344 + } + } + }, + { + "thresholds": [ + 0.86, + 0.88, + 0.92 + ], + "scores": { + "accuracy": { + "0": 0.8767157778954701, + "1": 0.9639422994499816, + "2": 0.9899520627145026 + }, + "precision": { + "0": 0.7470933831005223, + "1": 0.8022760264971416, + "2": 0.6259455850635617 + }, + "recall": { + "0": 0.5511437353778985, + "1": 0.6508768221580731, + "2": 0.7012156530329198 + }, + "f1": { + "0": 0.515267763394556, + "1": 0.6209694519604654, + "2": 0.5324101288359855 + }, + "micro_accuracy": { + "0": 0.8394599278785676, + "1": 0.9146988453136378, + "2": 0.9958535065433105 + }, + "coverage": { + "0": 0.6776729559748428, + "1": 0.7284231264681367, + "2": 0.7903690232628627 + } + } + }, + { + "thresholds": [ + 0.88, + 0.9, + 0.9400000000000001 + ], + "scores": { + "accuracy": { + "0": 0.8847851535654307, + "1": 0.9652200616893406, + "2": 0.992808084240924 + }, + "precision": { + "0": 0.763315651819457, + "1": 0.8156816231675286, + "2": 0.6294835758063362 + }, + "recall": { + "0": 0.5443793258364626, + "1": 0.6427151356967854, + "2": 0.6856059888621686 + }, + "f1": { + "0": 0.5177952355850329, + "1": 0.624753431000947, + "2": 0.5266383317737757 + }, + "micro_accuracy": { + "0": 0.842573072759387, + "1": 0.9168143465495807, + "2": 0.9967661325885638 + }, + "coverage": { + "0": 0.6649617337273622, + "1": 0.7162044404031219, + "2": 0.7732439190725164 + } + } + }, + { + "thresholds": [ + 0.9, + 0.92, + 0.96 + ], + "scores": { + "accuracy": { + "0": 0.8883033919792224, + "1": 0.9661219626084472, + "2": 0.9930330897644929 + }, + "precision": { + "0": 0.7804014626751528, + "1": 0.8284608091834336, + "2": 0.6927585802170017 + }, + "recall": { + "0": 0.529869925872639, + "1": 0.6287727428260098, + "2": 0.6642854244462157 + }, + "f1": { + "0": 0.5147923311450079, + "1": 0.6215733666268982, + "2": 0.5677697524702323 + }, + "micro_accuracy": { + "0": 0.8454966906726535, + "1": 0.9190400345544367, + "2": 0.9974228757674525 + }, + "coverage": { + "0": 0.6497120557702508, + "1": 0.7017314541183602, + "2": 0.7497726756080928 + } + } + }, + { + "thresholds": [ + 0.9003619253635406, + 0.9249056339263916, + 0.966318890452385 + ], + "scores": { + "accuracy": { + "0": 0.888431166825793, + "1": 0.9661617648520878, + "2": 0.9931833312394449 + }, + "precision": { + "0": 0.7805312748143705, + "1": 0.8355510142797448, + "2": 0.7159905461181523 + }, + "recall": { + "0": 0.5297831320812968, + "1": 0.6254696459164157, + "2": 0.6593958573831591 + }, + "f1": { + "0": 0.5148560581051409, + "1": 0.6242263512932396, + "2": 0.5840166810554773 + }, + "micro_accuracy": { + "0": 0.8456062551056133, + "1": 0.919898888315077, + "2": 0.9977710025364454 + }, + "coverage": { + "0": 0.6493142380844131, + "1": 0.696957641888308, + "2": 0.7393915283776616 + } + } + }, + { + "thresholds": [ + 0.92, + 0.9400000000000001, + 0.9698503911495209 + ], + "scores": { + "accuracy": { + "0": 0.8949680288662317, + "1": 0.9695416434362019, + "2": 0.9932599551447033 + }, + "precision": { + "0": 0.8036647951367848, + "1": 0.8582292321411249, + "2": 0.7406007419898425 + }, + "recall": { + "0": 0.5152955755914757, + "1": 0.6115176109990221, + "2": 0.6548532928566179 + }, + "f1": { + "0": 0.5136917017851453, + "1": 0.6277394253978815, + "2": 0.5815679236552638 + }, + "micro_accuracy": { + "0": 0.8491257585771796, + "1": 0.9224911763888503, + "2": 0.9979571783202317 + }, + "coverage": { + "0": 0.6305599757520649, + "1": 0.6816511328332197, + "2": 0.7325907403197697 + } + } + }, + { + "thresholds": [ + 0.9400000000000001, + 0.96, + 0.98 + ], + "scores": { + "accuracy": { + "0": 0.8977269936312184, + "1": 0.9705015349409328, + "2": 0.9928229802438632 + }, + "precision": { + "0": 0.8327788512605917, + "1": 0.8874262009098404, + "2": 0.7677890479865929 + }, + "recall": { + "0": 0.4944545944504423, + "1": 0.5867101863471069, + "2": 0.6370307716776455 + }, + "f1": { + "0": 0.5106880857768454, + "1": 0.6265915019453329, + "2": 0.5911347762196182 + }, + "micro_accuracy": { + "0": 0.8529558961526431, + "1": 0.9262195474798912, + "2": 0.9983163633448249 + }, + "coverage": { + "0": 0.6056300674395696, + "1": 0.6547321360915359, + "2": 0.7088542850647874 + } + } + }, + { + "thresholds": [ + 0.9446139454841613, + 0.9658359616994857, + 0.9839341759681702 + ], + "scores": { + "accuracy": { + "0": 0.8976354559313371, + "1": 0.9722220875670287, + "2": 0.9952787020823213 + }, + "precision": { + "0": 0.8358679963173027, + "1": 0.896742873618556, + "2": 0.7964166897977134 + }, + "recall": { + "0": 0.4873935163489439, + "1": 0.5799640461829901, + "2": 0.6278137660248637 + }, + "f1": { + "0": 0.5064991586098891, + "1": 0.6266610526291488, + "2": 0.606429423735434 + }, + "micro_accuracy": { + "0": 0.8535211267605634, + "1": 0.9278065427159332, + "2": 0.998528650445492 + }, + "coverage": { + "0": 0.598526180192468, + "1": 0.6439342274759415, + "2": 0.6952527089490036 + } + } + }, + { + "thresholds": [ + 0.96, + 0.98, + 0.9926248431205751 + ], + "scores": { + "accuracy": { + "0": 0.8988020659563206, + "1": 0.9777074079525111, + "2": 0.9952084513769254 + }, + "precision": { + "0": 0.8617355210345629, + "1": 0.9141349965261888, + "2": 0.9060406925062958 + }, + "recall": { + "0": 0.46771519317829846, + "1": 0.546354721781792, + "2": 0.568569470028998 + }, + "f1": { + "0": 0.5011726074403569, + "1": 0.604802775819381, + "2": 0.6253888420051623 + }, + "micro_accuracy": { + "0": 0.8571570609485302, + "1": 0.9324849880215301, + "2": 0.9990033417365305 + }, + "coverage": { + "0": 0.5715882397514587, + "1": 0.6088694400242479, + "2": 0.6462453587936652 + } + } + }, + { + "thresholds": [ + 0.9707498282194138, + 0.9833930492401123, + 0.9965927124023437 + ], + "scores": { + "accuracy": { + "0": 0.9041524611166658, + "1": 0.9781354290873504, + "2": 0.9959302985873032 + }, + "precision": { + "0": 0.8747566682032913, + "1": 0.9243629890946211, + "2": 0.9061015022886759 + }, + "recall": { + "0": 0.4515233756188578, + "1": 0.5353090464112795, + "2": 0.5322120216455102 + }, + "f1": { + "0": 0.4915196344453004, + "1": 0.6006583644268111, + "2": 0.5948486972105078 + }, + "micro_accuracy": { + "0": 0.8610572259941804, + "1": 0.9342209793765293, + "2": 0.9992052137974885 + }, + "coverage": { + "0": 0.546866712131545, + "1": 0.5961392740774418, + "2": 0.5958740622868833 + } + } + }, + { + "thresholds": [ + 0.98, + 0.9922053903341294, + 0.9982518643140792 + ], + "scores": { + "accuracy": { + "0": 0.9134680874449982, + "1": 0.9826931641207572, + "2": 0.9953998061075107 + }, + "precision": { + "0": 0.897838848703892, + "1": 0.9438338883168258, + "2": 0.9056735935416286 + }, + "recall": { + "0": 0.4255705880380188, + "1": 0.4845031365475568, + "2": 0.4981339316808536 + }, + "f1": { + "0": 0.4756765237545595, + "1": 0.561368904592936, + "2": 0.5663551988760385 + }, + "micro_accuracy": { + "0": 0.864705018000147, + "1": 0.9398713267257868, + "2": 0.9992054993264016 + }, + "coverage": { + "0": 0.5156853830416004, + "1": 0.5447260741077518, + "2": 0.548401151776919 + } + } + }, + { + "thresholds": [ + 0.9833782911300659, + 0.9964023232460022, + 0.9991329908370972 + ], + "scores": { + "accuracy": { + "0": 0.9127889933003995, + "1": 0.982583640893198, + "2": 0.9954386169609984 + }, + "precision": { + "0": 0.9037761212359212, + "1": 0.949428703607106, + "2": 0.9039412780170919 + }, + "recall": { + "0": 0.41259437473357397, + "1": 0.43930089909622216, + "2": 0.45009572471735165 + }, + "f1": { + "0": 0.46615016558295036, + "1": 0.5219507387484761, + "2": 0.5269565621090039 + }, + "micro_accuracy": { + "0": 0.8665025563340276, + "1": 0.9463201454151681, + "2": 0.9993080914856813 + }, + "coverage": { + "0": 0.5002083806925817, + "1": 0.4898272334621505, + "2": 0.492820337955596 + } + } + }, + { + "thresholds": [ + 0.991622605919838, + 0.998111343383789, + 0.9995186567306519 + ], + "scores": { + "accuracy": { + "0": 0.9265521907718223, + "1": 0.9849788165326858, + "2": 0.9948112868705463 + }, + "precision": { + "0": 0.9250628093426638, + "1": 0.9557801188041781, + "2": 0.8984649482877849 + }, + "recall": { + "0": 0.3665708275310541, + "1": 0.39511482207906384, + "2": 0.409339693353794 + }, + "f1": { + "0": 0.42913664891464487, + "1": 0.478303208700939, + "2": 0.4891709355450282 + }, + "micro_accuracy": { + "0": 0.8732238105397909, + "1": 0.9505562953735126, + "2": 0.9993154201608763 + }, + "coverage": { + "0": 0.4439455936955369, + "1": 0.4409903766007426, + "2": 0.4427521406380238 + } + } + }, + { + "thresholds": [ + 0.9955868721008302, + 0.9990381002426147, + 0.9997335314750672 + ], + "scores": { + "accuracy": { + "0": 0.9303506269639643, + "1": 0.979873703253866, + "2": 0.9946343568751175 + }, + "precision": { + "0": 0.9307323155284073, + "1": 0.9603318788803099, + "2": 0.9406314848417875 + }, + "recall": { + "0": 0.3165488921658092, + "1": 0.35088765928060883, + "2": 0.376952435350341 + }, + "f1": { + "0": 0.3801769563181794, + "1": 0.43570862050185327, + "2": 0.4760931491166865 + }, + "micro_accuracy": { + "0": 0.879998073032084, + "1": 0.9546008086122071, + "2": 0.9993736147248723 + }, + "coverage": { + "0": 0.39323331060089417, + "1": 0.38889520345533074, + "2": 0.39315753580359175 + } + } + }, + { + "thresholds": [ + 0.9976853013038636, + 0.9994611501693724, + 0.9998489141464233 + ], + "scores": { + "accuracy": { + "0": 0.9384070111045844, + "1": 0.9805795875434529, + "2": 0.9992972123615242 + }, + "precision": { + "0": 0.9390214129602982, + "1": 0.9621872615602298, + "2": 0.9869588473590027 + }, + "recall": { + "0": 0.28129453423745754, + "1": 0.3137939415028552, + "2": 0.3478352280835123 + }, + "f1": { + "0": 0.34308976666754587, + "1": 0.39811208002674503, + "2": 0.4652961417100612 + }, + "micro_accuracy": { + "0": 0.8858689647552757, + "1": 0.9593872265388218, + "2": 0.9996178204848221 + }, + "coverage": { + "0": 0.3429188451920891, + "1": 0.3437713116617413, + "2": 0.34697279684776844 + } + } + }, + { + "thresholds": [ + 0.9988131999969482, + 0.999712574481964, + 0.9999171137809754 + ], + "scores": { + "accuracy": { + "0": 0.945814330215107, + "1": 0.9792909112704391, + "2": 0.9993653777164007 + }, + "precision": { + "0": 0.9523051310091266, + "1": 0.9590944484739194, + "2": 0.9849629485216465 + }, + "recall": { + "0": 0.24237666257434126, + "1": 0.2662652324148882, + "2": 0.3095777449605491 + }, + "f1": { + "0": 0.30339185182846024, + "1": 0.3439837108522769, + "2": 0.4232941870140969 + }, + "micro_accuracy": { + "0": 0.8949765747006767, + "1": 0.9623307450426747, + "2": 0.9996804499265035 + }, + "coverage": { + "0": 0.2911267712358869, + "1": 0.29519966659089186, + "2": 0.29641206334773057 + } + } + }, + { + "thresholds": [ + 0.9993962049484252, + 0.9998449981212616, + 0.9999548196792604 + ], + "scores": { + "accuracy": { + "0": 0.9471868351250367, + "1": 0.9862852041416424, + "2": 0.9993156445541669 + }, + "precision": { + "0": 0.9512615874277804, + "1": 0.967035459961284, + "2": 0.9906737512044023 + }, + "recall": { + "0": 0.20736178731446436, + "1": 0.22011332416809082, + "2": 0.27753198799411855 + }, + "f1": { + "0": 0.2655225977588522, + "1": 0.2940276386707367, + "2": 0.386503668038708 + }, + "micro_accuracy": { + "0": 0.9035422343324251, + "1": 0.9659177167147411, + "2": 0.9996934631006207 + }, + "coverage": { + "0": 0.24333181783738728, + "1": 0.2495642949155111, + "2": 0.24719633249981057 + } + } + }, + { + "thresholds": [ + 0.999705684185028, + 0.9999300718307496, + 0.999976396560669 + ], + "scores": { + "accuracy": { + "0": 0.9435629698331013, + "1": 0.983635951136766, + "2": 0.9991324132858601 + }, + "precision": { + "0": 0.9510205463718836, + "1": 0.9642508097552444, + "2": 0.9884043593564951 + }, + "recall": { + "0": 0.17074003745241678, + "1": 0.1762585943166468, + "2": 0.2396072655920544 + }, + "f1": { + "0": 0.22098193800429003, + "1": 0.24071821852633785, + "2": 0.3407105854181973 + }, + "micro_accuracy": { + "0": 0.9160489072879561, + "1": 0.9666404251131667, + "2": 0.9996180290297937 + }, + "coverage": { + "0": 0.1967682048950519, + "1": 0.19250587254679094, + "2": 0.19837841933772826 + } + } + }, + { + "thresholds": [ + 0.9998770773410797, + 0.9999672174453736, + 0.9999888360500335 + ], + "scores": { + "accuracy": { + "0": 0.9521354517010403, + "1": 0.9825581953343514, + "2": 0.9989435258358806 + }, + "precision": { + "0": 0.9599033288886845, + "1": 0.9691190692590099, + "2": 0.9969035078821014 + }, + "recall": { + "0": 0.1255202818541267, + "1": 0.1383005318683087, + "2": 0.15452997931754672 + }, + "f1": { + "0": 0.1692454915356679, + "1": 0.19149385953106912, + "2": 0.2411753416551965 + }, + "micro_accuracy": { + "0": 0.9374837535742137, + "1": 0.9685122015219103, + "2": 0.9996155817529472 + }, + "coverage": { + "0": 0.1457528226111995, + "1": 0.144388876259756, + "2": 0.14783662953701598 + } + } + }, + { + "thresholds": [ + 0.99996018409729, + 0.9999860525131226, + 0.9999958276748656 + ], + "scores": { + "accuracy": { + "0": 0.9604752623031971, + "1": 0.978909465020576, + "2": 0.9994873996499771 + }, + "precision": { + "0": 0.9656180796926099, + "1": 0.977760736196319, + "2": 0.9928221288515408 + }, + "recall": { + "0": 0.08838666887353218, + "1": 0.0978286003384769, + "2": 0.10085893051934469 + }, + "f1": { + "0": 0.12175430091954242, + "1": 0.13909118559469982, + "2": 0.1649098224659093 + }, + "micro_accuracy": { + "0": 0.950426333531628, + "1": 0.9656853187755898, + "2": 0.9995904157280361 + }, + "coverage": { + "0": 0.0955330756990225, + "1": 0.09716223384102447, + "2": 0.09250208380692582 + } + } + }, + { + "thresholds": [ + 0.9999903321266175, + 0.9999958813190459, + 0.9999985694885254 + ], + "scores": { + "accuracy": { + "0": 0.9683098591549296, + "1": 0.9882334581772784, + "2": 0.9990993788819876 + }, + "precision": { + "0": 0.976823708206687, + "1": 0.9834710743801653, + "2": 0.9718771566597653 + }, + "recall": { + "0": 0.04962266720621259, + "1": 0.04894005805982943, + "2": 0.07070741577200587 + }, + "f1": { + "0": 0.07119248593578795, + "1": 0.07533375615776314, + "2": 0.11626553535672922 + }, + "micro_accuracy": { + "0": 0.9451588502269289, + "1": 0.9507793273174734, + "2": 0.9992424242424243 + }, + "coverage": { + "0": 0.05008714101689778, + "1": 0.04618473895582329, + "2": 0.050011366219595364 + } + } + }, + { + "thresholds": [ + 1.0, + 1.0, + 1.0 + ], + "scores": { + "accuracy": { + "0": 0.9444444444444444, + "1": 0.9682539682539684, + "2": 1.0 + }, + "precision": { + "0": 0.9444444444444444, + "1": 0.9545454545454546, + "2": 1.0 + }, + "recall": { + "0": 0.001252177557345573, + "1": 0.0019495329536034565, + "2": 0.01638694523768372 + }, + "f1": { + "0": 0.002346743016790488, + "1": 0.003650574960165601, + "2": 0.02701365005451571 + }, + "micro_accuracy": { + "0": 0.8979591836734694, + "1": 0.9298245614035088, + "2": 1.0 + }, + "coverage": { + "0": 0.0009282412669546109, + "1": 0.0010797908615594453, + "2": 0.005247404713192392 + } + } + } + ] + }, + "torch-tta": { + "source": "local-evidence/mambo-default-tta-quality/torch-cuda-0-prediction/north_europe/mini_metric.csv", + "source_sha256": "98cb30415e962f816c9cd978c5463d7c674fca47f95491f93e829a06d8dce2fa", + "identities": { + "full": "0f6e02db8e7eaaabc9617dcb0af5e0a7def4886578e46b4f919316b4ca6e7165", + "report": "80144bd4f34d9705bcae1dad496ccf13a7160b5709139b34710e5d75a3252fed", + "calibration": "07e2e6f88b36f3e9f348adaf4526ed62e8725eba4116780a0410bf5d18f5d3fd" + }, + "report_images": 52788, + "calibration_images": 5852, + "thresholds": [ + 0.7392672300338745, + 0.869922012090683, + 0.964760661125183 + ], + "full_zero": { + "accuracy": { + "0": 0.7394942213066358, + "1": 0.8303908427754559, + "2": 0.857176291043506 + }, + "precision": { + "0": 0.3045154257441184, + "1": 0.3505904633143813, + "2": 0.28541955682278985 + }, + "recall": { + "0": 0.7394942213066358, + "1": 0.8303908427754559, + "2": 0.857176291043506 + }, + "f1": { + "0": 0.29354423320754985, + "1": 0.35320899933676164, + "2": 0.2967297720520215 + }, + "micro_accuracy": { + "0": 0.7318724420190996, + "1": 0.8158594815825375, + "2": 0.9476637107776262 + }, + "theilU": { + "0": 0.9406189646961585, + "1": 0.9419385064155936, + "2": 0.8801009206026382 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "report_zero": { + "accuracy": { + "0": 0.7405864004487995, + "1": 0.8312879946116835, + "2": 0.8579010503993526 + }, + "precision": { + "0": 0.3117281910150932, + "1": 0.3578921081808225, + "2": 0.2856847483669441 + }, + "recall": { + "0": 0.7405864004487995, + "1": 0.8312879946116835, + "2": 0.8579010503993526 + }, + "f1": { + "0": 0.3001398043754676, + "1": 0.3600905137263135, + "2": 0.29704414021357817 + }, + "micro_accuracy": { + "0": 0.7321360915359552, + "1": 0.8163029476396151, + "2": 0.9478669394559369 + }, + "theilU": { + "0": 0.9416287278244636, + "1": 0.9429697597956094, + "2": 0.8802152497213216 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "report_optimized": { + "accuracy": { + "0": 0.8659206758370823, + "1": 0.9627590640417357, + "2": 0.9955823574240963 + }, + "precision": { + "0": 0.6694908268387498, + "1": 0.8166841617561862, + "2": 0.7393905133847496 + }, + "recall": { + "0": 0.639254202340642, + "1": 0.7031449724257084, + "2": 0.700159197162577 + }, + "f1": { + "0": 0.5238581475082266, + "1": 0.6655108425187298, + "2": 0.6072565582310141 + }, + "micro_accuracy": { + "0": 0.8257020535519919, + "1": 0.9116055761356989, + "2": 0.998243799167609 + }, + "theilU": { + "0": 0.9416287278244636, + "1": 0.9429697597956094, + "2": 0.8802152497213216 + }, + "coverage": { + "0": 0.7831893612184587, + "1": 0.7772978707281958, + "2": 0.7874327498673941 + } + }, + "known_zero": { + "accuracy": { + "0": 0.764004152241647, + "1": 0.833877676837888, + "2": 0.8579010503993526 + }, + "precision": { + "0": 0.3188318073270972, + "1": 0.35795084878232625, + "2": 0.2856847483669441 + }, + "recall": { + "0": 0.764004152241647, + "1": 0.833877676837888, + "2": 0.8579010503993526 + }, + "f1": { + "0": 0.3101697044824459, + "1": 0.3606630257586462, + "2": 0.29704414021357817 + }, + "micro_accuracy": { + "0": 0.8485114604373408, + "1": 0.8163184117301608, + "2": 0.9478669394559369 + }, + "theilU": { + "0": 0.9441781207808398, + "1": 0.9429838194118607, + "2": 0.8802152497213216 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known_optimized": { + "accuracy": { + "0": 0.8932655392845691, + "1": 0.9659260346471361, + "2": 0.9955823574240963 + }, + "precision": { + "0": 0.6940179671454589, + "1": 0.8168602180942144, + "2": 0.7393905133847496 + }, + "recall": { + "0": 0.6594677739561563, + "1": 0.7053354552058507, + "2": 0.700159197162577 + }, + "f1": { + "0": 0.5535005846842079, + "1": 0.6673916212438911, + "2": 0.6072565582310141 + }, + "micro_accuracy": { + "0": 0.9623646820027063, + "1": 0.9116277936194584, + "2": 0.998243799167609 + }, + "theilU": { + "0": 0.9441781207808398, + "1": 0.9429838194118607, + "2": 0.8802152497213216 + }, + "coverage": { + "0": 0.7787828225169052, + "1": 0.7772936518460984, + "2": 0.7874327498673941 + } + }, + "calibration_zero": { + "accuracy": { + "0": 0.768414983363882, + "1": 0.8538124541139522, + "2": 0.8686121025173176 + }, + "precision": { + "0": 0.4839236475497513, + "1": 0.5172752120633655, + "2": 0.3828841637187067 + }, + "recall": { + "0": 0.768414983363882, + "1": 0.8538124541139522, + "2": 0.8686121025173176 + }, + "f1": { + "0": 0.4421948505193077, + "1": 0.5029817114927149, + "2": 0.39248243176721537 + }, + "micro_accuracy": { + "0": 0.7294941900205059, + "1": 0.8118591934381408, + "2": 0.9458304853041695 + }, + "theilU": { + "0": 0.9589075503757323, + "1": 0.9605194779995736, + "2": 0.8896158193694642 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "calibration_optimized": { + "accuracy": { + "0": 0.8911752669559129, + "1": 0.9779780541665041, + "2": 0.9996369170022905 + }, + "precision": { + "0": 0.8282279025717094, + "1": 0.9266086911891874, + "2": 0.9496721741042599 + }, + "recall": { + "0": 0.6739933965102308, + "1": 0.7404661738439429, + "2": 0.7564679389414893 + }, + "f1": { + "0": 0.6307325978180464, + "1": 0.757396958354487, + "2": 0.794600193920395 + }, + "micro_accuracy": { + "0": 0.8257460248311914, + "1": 0.9128238910847607, + "2": 0.9982769760930433 + }, + "theilU": { + "0": 0.9589075503757323, + "1": 0.9605194779995736, + "2": 0.8896158193694642 + }, + "coverage": { + "0": 0.7845181134654818, + "1": 0.7781954887218046, + "2": 0.793403964456596 + } + }, + "curve": [ + { + "thresholds": [ + 0.0, + 0.0, + 0.0 + ], + "scores": { + "accuracy": { + "0": 0.7405864004487995, + "1": 0.8312879946116835, + "2": 0.8579010503993526 + }, + "precision": { + "0": 0.3117281910150932, + "1": 0.3578921081808225, + "2": 0.2856847483669441 + }, + "recall": { + "0": 0.7405864004487995, + "1": 0.8312879946116835, + "2": 0.8579010503993526 + }, + "f1": { + "0": 0.3001398043754676, + "1": 0.3600905137263135, + "2": 0.29704414021357817 + }, + "micro_accuracy": { + "0": 0.7321360915359552, + "1": 0.8163029476396151, + "2": 0.9478669394559369 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + }, + { + "thresholds": [ + 0.0157533306628465, + 0.02, + 0.02 + ], + "scores": { + "accuracy": { + "0": 0.7405877461797323, + "1": 0.8313027366509226, + "2": 0.8579010503993526 + }, + "precision": { + "0": 0.3117281690904613, + "1": 0.3579258234740001, + "2": 0.2856847483669441 + }, + "recall": { + "0": 0.7405771008914586, + "1": 0.8312879946116835, + "2": 0.8579010503993526 + }, + "f1": { + "0": 0.30013766521767266, + "1": 0.36011285013445765, + "2": 0.29704414021357817 + }, + "micro_accuracy": { + "0": 0.73214488690183, + "1": 0.8163338764066229, + "2": 0.9478669394559369 + }, + "coverage": { + "0": 0.9999621126013488, + "1": 0.9999621126013488, + "2": 1.0 + } + } + }, + { + "thresholds": [ + 0.02, + 0.024413613602519, + 0.04 + ], + "scores": { + "accuracy": { + "0": 0.7407467859198141, + "1": 0.8313972841596273, + "2": 0.8579010503993526 + }, + "precision": { + "0": 0.3118078626006602, + "1": 0.3579578172656688, + "2": 0.2856847483669441 + }, + "recall": { + "0": 0.7405771008914586, + "1": 0.8312879946116835, + "2": 0.8579010503993526 + }, + "f1": { + "0": 0.300199623162366, + "1": 0.36015750294004456, + "2": 0.29704414021357817 + }, + "micro_accuracy": { + "0": 0.732255864185835, + "1": 0.8164266767715044, + "2": 0.9478669394559369 + }, + "coverage": { + "0": 0.999810563006744, + "1": 0.9998484504053952, + "2": 1.0 + } + } + }, + { + "thresholds": [ + 0.04, + 0.04, + 0.06 + ], + "scores": { + "accuracy": { + "0": 0.7424742057770811, + "1": 0.8329750260398557, + "2": 0.8579010503993526 + }, + "precision": { + "0": 0.3157615393569001, + "1": 0.36006970855406867, + "2": 0.2856847483669441 + }, + "recall": { + "0": 0.7403188478377138, + "1": 0.8312265272240776, + "2": 0.8579010503993526 + }, + "f1": { + "0": 0.3032491538432533, + "1": 0.3620353016946325, + "2": 0.29704414021357817 + }, + "micro_accuracy": { + "0": 0.7342823475748822, + "1": 0.8176797677110812, + "2": 0.9478669394559369 + }, + "coverage": { + "0": 0.996741683715996, + "1": 0.9982003485640676, + "2": 1.0 + } + } + }, + { + "thresholds": [ + 0.06, + 0.06, + 0.08 + ], + "scores": { + "accuracy": { + "0": 0.7457570870307209, + "1": 0.8354760082246451, + "2": 0.8579037718989251 + }, + "precision": { + "0": 0.32682481493754706, + "1": 0.3672122795221003, + "2": 0.2856847483669441 + }, + "recall": { + "0": 0.7399662265840292, + "1": 0.8309638240201127, + "2": 0.8579010503993526 + }, + "f1": { + "0": 0.31265021122739517, + "1": 0.3681471314765713, + "2": 0.29704414021357817 + }, + "micro_accuracy": { + "0": 0.7378759506248328, + "1": 0.8206452350553576, + "2": 0.9478848959024002 + }, + "coverage": { + "0": 0.9913995605061756, + "1": 0.9941085095097371, + "2": 0.9999810563006744 + } + } + }, + { + "thresholds": [ + 0.08, + 0.08, + 0.1 + ], + "scores": { + "accuracy": { + "0": 0.7492231361469615, + "1": 0.8383511538819259, + "2": 0.85790930585883 + }, + "precision": { + "0": 0.3352577327581519, + "1": 0.3757202291406542, + "2": 0.29052686274604483 + }, + "recall": { + "0": 0.739562943850595, + "1": 0.8300977897887498, + "2": 0.8579010503993526 + }, + "f1": { + "0": 0.31935790991122287, + "1": 0.3746622710374591, + "2": 0.3020787866578761 + }, + "micro_accuracy": { + "0": 0.7411057322883049, + "1": 0.8239179125906925, + "2": 0.9479208108364119 + }, + "coverage": { + "0": 0.9861332120936577, + "1": 0.989562021671592, + "2": 0.9999431689020232 + } + } + }, + { + "thresholds": [ + 0.1, + 0.1, + 0.1001347824931144 + ], + "scores": { + "accuracy": { + "0": 0.7561552074263708, + "1": 0.8463922808087143, + "2": 0.85790930585883 + }, + "precision": { + "0": 0.3481574839858455, + "1": 0.3846236846067464, + "2": 0.29052686274604483 + }, + "recall": { + "0": 0.7386395108370444, + "1": 0.8288434857965126, + "2": 0.8579010503993526 + }, + "f1": { + "0": 0.3294680001319352, + "1": 0.3822173704726841, + "2": 0.3020787866578761 + }, + "micro_accuracy": { + "0": 0.7448103908152615, + "1": 0.8272790241274484, + "2": 0.9479208108364119 + }, + "coverage": { + "0": 0.9801091157081154, + "1": 0.9845798287489581, + "2": 0.9999431689020232 + } + } + }, + { + "thresholds": [ + 0.12, + 0.12, + 0.12 + ], + "scores": { + "accuracy": { + "0": 0.7614267935706313, + "1": 0.8496113132930823, + "2": 0.8583733297981256 + }, + "precision": { + "0": 0.35868603020807677, + "1": 0.396409872399775, + "2": 0.29061359534512354 + }, + "recall": { + "0": 0.7380565234415434, + "1": 0.8278759419796428, + "2": 0.8578934569901413 + }, + "f1": { + "0": 0.3374338605639821, + "1": 0.3926065498239829, + "2": 0.30213780878952395 + }, + "micro_accuracy": { + "0": 0.7483087091757388, + "1": 0.8310115316152, + "2": 0.9484039730078095 + }, + "coverage": { + "0": 0.9744638933090854, + "1": 0.9790861559445329, + "2": 0.9993938016215806 + } + } + }, + { + "thresholds": [ + 0.14, + 0.14, + 0.14 + ], + "scores": { + "accuracy": { + "0": 0.7671366906849528, + "1": 0.8543685515114483, + "2": 0.8601144029670225 + }, + "precision": { + "0": 0.36871626782061295, + "1": 0.4078060179550085, + "2": 0.29621104908741475 + }, + "recall": { + "0": 0.7366771700385545, + "1": 0.8271097887099927, + "2": 0.8576928136598218 + }, + "f1": { + "0": 0.34498132480138166, + "1": 0.40236437456703356, + "2": 0.30763682047163704 + }, + "micro_accuracy": { + "0": 0.7515253441802253, + "1": 0.8341729067392785, + "2": 0.9494134619034964 + }, + "coverage": { + "0": 0.9687050087141017, + "1": 0.9739903008259453, + "2": 0.9979919678714859 + } + } + }, + { + "thresholds": [ + 0.16, + 0.16, + 0.16 + ], + "scores": { + "accuracy": { + "0": 0.7738918977450888, + "1": 0.8588204942621896, + "2": 0.8617734756933195 + }, + "precision": { + "0": 0.38018908103209725, + "1": 0.4200834962317706, + "2": 0.2969885677059594 + }, + "recall": { + "0": 0.7337925919693249, + "1": 0.8226170484919202, + "2": 0.8573085735067174 + }, + "f1": { + "0": 0.3533428902402474, + "1": 0.41138006081988887, + "2": 0.30807460425871563 + }, + "micro_accuracy": { + "0": 0.7547656050203608, + "1": 0.8373406833997967, + "2": 0.950798782807151 + }, + "coverage": { + "0": 0.9629650678184436, + "1": 0.9690838827006137, + "2": 0.9960597105402743 + } + } + }, + { + "thresholds": [ + 0.18, + 0.18, + 0.18 + ], + "scores": { + "accuracy": { + "0": 0.7770020080764029, + "1": 0.8649958050622745, + "2": 0.8635129725362596 + }, + "precision": { + "0": 0.38956378171053624, + "1": 0.4282056271857995, + "2": 0.30282594148422204 + }, + "recall": { + "0": 0.7331402258214638, + "1": 0.8216050408641674, + "2": 0.8570594334058912 + }, + "f1": { + "0": 0.360271510745969, + "1": 0.41802758219737846, + "2": 0.31383978666615375 + }, + "micro_accuracy": { + "0": 0.7570917429379089, + "1": 0.8399725004910626, + "2": 0.9522593432562749 + }, + "coverage": { + "0": 0.9583049177843449, + "1": 0.9644237326665152, + "2": 0.9939948473137834 + } + } + }, + { + "thresholds": [ + 0.2, + 0.2, + 0.2 + ], + "scores": { + "accuracy": { + "0": 0.7784096740195873, + "1": 0.8704319371949272, + "2": 0.865418185811226 + }, + "precision": { + "0": 0.3983941221387625, + "1": 0.44041677282114744, + "2": 0.3037724840274606 + }, + "recall": { + "0": 0.7324496715326255, + "1": 0.8202875908890818, + "2": 0.8565891514649081 + }, + "f1": { + "0": 0.3670854467894437, + "1": 0.4277570575597303, + "2": 0.3144013181680204 + }, + "micro_accuracy": { + "0": 0.7596400262232552, + "1": 0.8426984032999782, + "2": 0.9542569866574913 + }, + "coverage": { + "0": 0.9535689929529438, + "1": 0.9598204137303933, + "2": 0.9910206865196636 + } + } + }, + { + "thresholds": [ + 0.22, + 0.22, + 0.22 + ], + "scores": { + "accuracy": { + "0": 0.7804987727883166, + "1": 0.872983097178873, + "2": 0.8671681662490045 + }, + "precision": { + "0": 0.4109980120582559, + "1": 0.4525172801813426, + "2": 0.30684184460202546 + }, + "recall": { + "0": 0.7314632591571847, + "1": 0.8191449161495307, + "2": 0.8558209180850981 + }, + "f1": { + "0": 0.3769584151416559, + "1": 0.4384568551778127, + "2": 0.31618659303690344 + }, + "micro_accuracy": { + "0": 0.7626830779067676, + "1": 0.8455115236621842, + "2": 0.9562616248969339 + }, + "coverage": { + "0": 0.9480753201485186, + "1": 0.9551034325983178, + "2": 0.9879328635295901 + } + } + }, + { + "thresholds": [ + 0.22111147120594973, + 0.24, + 0.24 + ], + "scores": { + "accuracy": { + "0": 0.7806307394798084, + "1": 0.8751219507882727, + "2": 0.8742924729576368 + }, + "precision": { + "0": 0.41190501118588246, + "1": 0.46179961531661334, + "2": 0.3132934298450209 + }, + "recall": { + "0": 0.7313936205550358, + "1": 0.8178386311416572, + "2": 0.8550266993401295 + }, + "f1": { + "0": 0.3777176858846957, + "1": 0.44574480314483783, + "2": 0.3224241798918152 + }, + "micro_accuracy": { + "0": 0.7628880404581526, + "1": 0.8482377800813332, + "2": 0.958622813263794 + }, + "coverage": { + "0": 0.9476964461620065, + "1": 0.9502917329696143, + "2": 0.9843335606577253 + } + } + }, + { + "thresholds": [ + 0.24, + 0.25371578335762024, + 0.26 + ], + "scores": { + "accuracy": { + "0": 0.7824357304053218, + "1": 0.877225231806333, + "2": 0.8758028231601421 + }, + "precision": { + "0": 0.42037656216113684, + "1": 0.46720974120506376, + "2": 0.31449909852466756 + }, + "recall": { + "0": 0.7304212518653747, + "1": 0.8166576999779861, + "2": 0.8540023697254082 + }, + "f1": { + "0": 0.38397524369647545, + "1": 0.44940142369388764, + "2": 0.3229578106452858 + }, + "micro_accuracy": { + "0": 0.7653795154096517, + "1": 0.8498270311343958, + "2": 0.9606544077879935 + }, + "coverage": { + "0": 0.9429036902326287, + "1": 0.9473554595741457, + "2": 0.9807532014851861 + } + } + }, + { + "thresholds": [ + 0.26, + 0.26, + 0.28 + ], + "scores": { + "accuracy": { + "0": 0.7841371999847402, + "1": 0.8778755675810899, + "2": 0.8771015014563739 + }, + "precision": { + "0": 0.42602671244910834, + "1": 0.47067938103791307, + "2": 0.32197953451314504 + }, + "recall": { + "0": 0.7291464067082633, + "1": 0.8164485611767577, + "2": 0.8533853505207756 + }, + "f1": { + "0": 0.38752279647680893, + "1": 0.4522955062477177, + "2": 0.3299809946326001 + }, + "micro_accuracy": { + "0": 0.7675855801272342, + "1": 0.8505367299527358, + "2": 0.9625336770492121 + }, + "coverage": { + "0": 0.9379972721072971, + "1": 0.9458967947260741, + "2": 0.9773622793059028 + } + } + }, + { + "thresholds": [ + 0.28, + 0.28, + 0.3 + ], + "scores": { + "accuracy": { + "0": 0.7927627567251719, + "1": 0.8883167833650782, + "2": 0.8783769548082113 + }, + "precision": { + "0": 0.433024914209946, + "1": 0.4772280927070614, + "2": 0.3364799675281957 + }, + "recall": { + "0": 0.7254766185960972, + "1": 0.8137255105434333, + "2": 0.8522221066252991 + }, + "f1": { + "0": 0.3912400622845851, + "1": 0.4567752605872105, + "2": 0.3436403847978977 + }, + "micro_accuracy": { + "0": 0.7701354892441448, + "1": 0.8530086536526464, + "2": 0.9645310037550829 + }, + "coverage": { + "0": 0.9325793741001743, + "1": 0.9413124194892779, + "2": 0.9736493142380844 + } + } + }, + { + "thresholds": [ + 0.3, + 0.3, + 0.32 + ], + "scores": { + "accuracy": { + "0": 0.7977662351755508, + "1": 0.8935825243962093, + "2": 0.8798696397659453 + }, + "precision": { + "0": 0.4433320225709998, + "1": 0.48579629719950146, + "2": 0.3392200362634125 + }, + "recall": { + "0": 0.7218506916959294, + "1": 0.811113093517867, + "2": 0.851094509933296 + }, + "f1": { + "0": 0.39884102111681236, + "1": 0.46354820344018083, + "2": 0.3450321766053871 + }, + "micro_accuracy": { + "0": 0.7724988765880959, + "1": 0.8552969486178796, + "2": 0.9667389308802562 + }, + "coverage": { + "0": 0.9274456315829355, + "1": 0.9368227627491097, + "2": 0.9699363491702659 + } + } + }, + { + "thresholds": [ + 0.32, + 0.32, + 0.34 + ], + "scores": { + "accuracy": { + "0": 0.8015008491027902, + "1": 0.9017149435354963, + "2": 0.8825927183472111 + }, + "precision": { + "0": 0.4526353645148916, + "1": 0.4919770792072776, + "2": 0.3483574998651505 + }, + "recall": { + "0": 0.7195701088669217, + "1": 0.8090116389684526, + "2": 0.8502779863982279 + }, + "f1": { + "0": 0.4055745502423724, + "1": 0.4681079756240914, + "2": 0.35323451847027953 + }, + "micro_accuracy": { + "0": 0.7746432604455394, + "1": 0.8574997461155682, + "2": 0.9686354458667399 + }, + "coverage": { + "0": 0.9226528756535576, + "1": 0.9326930362961279, + "2": 0.9663749336970524 + } + } + }, + { + "thresholds": [ + 0.34, + 0.34, + 0.36 + ], + "scores": { + "accuracy": { + "0": 0.8032756297782976, + "1": 0.9037852480325208, + "2": 0.8852859668445923 + }, + "precision": { + "0": 0.46216790942585123, + "1": 0.4998985341050316, + "2": 0.3564243588372749 + }, + "recall": { + "0": 0.7177782729309229, + "1": 0.808076881532267, + "2": 0.849272944305007 + }, + "f1": { + "0": 0.4127816432054499, + "1": 0.47464011759969044, + "2": 0.36069385176930735 + }, + "micro_accuracy": { + "0": 0.7768421052631579, + "1": 0.8595761173326806, + "2": 0.9701513094465104 + }, + "coverage": { + "0": 0.9178222323255285, + "1": 0.9286769720390998, + "2": 0.9627756308251876 + } + } + }, + { + "thresholds": [ + 0.36, + 0.36, + 0.38 + ], + "scores": { + "accuracy": { + "0": 0.8061381059627792, + "1": 0.9054575788264251, + "2": 0.8866154752476598 + }, + "precision": { + "0": 0.47429670474927055, + "1": 0.5129235737981633, + "2": 0.3646217925602855 + }, + "recall": { + "0": 0.7153800078290851, + "1": 0.8050384213267415, + "2": 0.8480432594191671 + }, + "f1": { + "0": 0.4200739922235611, + "1": 0.48324626454035446, + "2": 0.3682736553468255 + }, + "micro_accuracy": { + "0": 0.7790482910328512, + "1": 0.861880264802935, + "2": 0.9720329442436452 + }, + "coverage": { + "0": 0.9128400394028946, + "1": 0.9242820337955596, + "2": 0.9591384405546716 + } + } + }, + { + "thresholds": [ + 0.38, + 0.38, + 0.4 + ], + "scores": { + "accuracy": { + "0": 0.8093184821227967, + "1": 0.9105604895663061, + "2": 0.8887698185931181 + }, + "precision": { + "0": 0.48025847980441544, + "1": 0.5196491929190563, + "2": 0.3656345363764338 + }, + "recall": { + "0": 0.7131336940713673, + "1": 0.8026259438319515, + "2": 0.8468788101285939 + }, + "f1": { + "0": 0.423673618354235, + "1": 0.48777335973733965, + "2": 0.3686677133357867 + }, + "micro_accuracy": { + "0": 0.7811547614077569, + "1": 0.8641756612012853, + "2": 0.9734657075481046 + }, + "coverage": { + "0": 0.9075168598923998, + "1": 0.9196787148594378, + "2": 0.95595589906797 + } + } + }, + { + "thresholds": [ + 0.4, + 0.4, + 0.42 + ], + "scores": { + "accuracy": { + "0": 0.814190463348711, + "1": 0.912992993634013, + "2": 0.8903408409704704 + }, + "precision": { + "0": 0.49007296071072415, + "1": 0.5284966024360187, + "2": 0.3769717318249915 + }, + "recall": { + "0": 0.7106139965749866, + "1": 0.799884121658498, + "2": 0.845755145355968 + }, + "f1": { + "0": 0.4301986050352946, + "1": 0.4945548677506391, + "2": 0.37860702408692926 + }, + "micro_accuracy": { + "0": 0.7830267909632989, + "1": 0.8657643114367316, + "2": 0.9751298223274507 + }, + "coverage": { + "0": 0.9022505114798818, + "1": 0.9153216640145487, + "2": 0.9521292718041979 + } + } + }, + { + "thresholds": [ + 0.4085436761379242, + 0.42, + 0.4351663589477539 + ], + "scores": { + "accuracy": { + "0": 0.8144892563273332, + "1": 0.9143323124569571, + "2": 0.9317947928846937 + }, + "precision": { + "0": 0.4924399980539364, + "1": 0.536901765831565, + "2": 0.3856310101180946 + }, + "recall": { + "0": 0.7093855720717483, + "1": 0.7979009894813711, + "2": 0.8448828121640822 + }, + "f1": { + "0": 0.43135514595533125, + "1": 0.5009079353630228, + "2": 0.3866796100261019 + }, + "micro_accuracy": { + "0": 0.7837394268400455, + "1": 0.8675107064155336, + "2": 0.9759790914350698 + }, + "coverage": { + "0": 0.9003182541486702, + "1": 0.9112298249602182, + "2": 0.9495150412972645 + } + } + }, + { + "thresholds": [ + 0.42, + 0.44, + 0.44 + ], + "scores": { + "accuracy": { + "0": 0.8159504319273879, + "1": 0.9175446311011675, + "2": 0.931968981138224 + }, + "precision": { + "0": 0.49911540895707357, + "1": 0.5464809732850113, + "2": 0.387037486216462 + }, + "recall": { + "0": 0.708356339309623, + "1": 0.7965545510924884, + "2": 0.8444646565209648 + }, + "f1": { + "0": 0.43618610936538416, + "1": 0.5084794212239823, + "2": 0.3874049453259014 + }, + "micro_accuracy": { + "0": 0.7851834649326521, + "1": 0.8694852941176471, + "2": 0.976315526709935 + }, + "coverage": { + "0": 0.8972872622565735, + "1": 0.9068727741153293, + "2": 0.9486057437296356 + } + } + }, + { + "thresholds": [ + 0.44, + 0.46, + 0.46 + ], + "scores": { + "accuracy": { + "0": 0.8185307969054935, + "1": 0.9184814735543901, + "2": 0.9332969976341314 + }, + "precision": { + "0": 0.5075816027761572, + "1": 0.5574234341608942, + "2": 0.3971184047312322 + }, + "recall": { + "0": 0.7062229878556056, + "1": 0.7944260155430212, + "2": 0.8403339965993295 + }, + "f1": { + "0": 0.44140615073757483, + "1": 0.5172970281113275, + "2": 0.39590244852804596 + }, + "micro_accuracy": { + "0": 0.7873154148518007, + "1": 0.8712800588049984, + "2": 0.9779871692060946 + }, + "coverage": { + "0": 0.8915852087595666, + "1": 0.9020042433886489, + "2": 0.9449117223611427 + } + } + }, + { + "thresholds": [ + 0.46, + 0.47360937893390653, + 0.48 + ], + "scores": { + "accuracy": { + "0": 0.8227497306118742, + "1": 0.9208035920851505, + "2": 0.9356590860997592 + }, + "precision": { + "0": 0.5200863712002146, + "1": 0.5650578002932166, + "2": 0.39842384692510235 + }, + "recall": { + "0": 0.7033176734320288, + "1": 0.7919918141524325, + "2": 0.8360099761731539 + }, + "f1": { + "0": 0.4502395949225765, + "1": 0.5225166479820076, + "2": 0.39588093766543786 + }, + "micro_accuracy": { + "0": 0.7896234488660676, + "1": 0.8728043354490437, + "2": 0.9794804671768023 + }, + "coverage": { + "0": 0.8854285064787452, + "1": 0.8983670531181329, + "2": 0.9407441085095097 + } + } + }, + { + "thresholds": [ + 0.48, + 0.48, + 0.5 + ], + "scores": { + "accuracy": { + "0": 0.8252206175960227, + "1": 0.9211823534240594, + "2": 0.9403427405426371 + }, + "precision": { + "0": 0.530159022761887, + "1": 0.5695896380728542, + "2": 0.3992178074425096 + }, + "recall": { + "0": 0.6979071899947216, + "1": 0.7911100668967964, + "2": 0.8314466876398727 + }, + "f1": { + "0": 0.4562322021250188, + "1": 0.5260708045812226, + "2": 0.39543481048181933 + }, + "micro_accuracy": { + "0": 0.791896551724138, + "1": 0.8732314060058285, + "2": 0.9807299565261348 + }, + "coverage": { + "0": 0.8789876487080397, + "1": 0.8970599378646662, + "2": 0.9368606501477609 + } + } + }, + { + "thresholds": [ + 0.5, + 0.5, + 0.52 + ], + "scores": { + "accuracy": { + "0": 0.8257679484498556, + "1": 0.9238806315798356, + "2": 0.9422231966941484 + }, + "precision": { + "0": 0.5356637417261088, + "1": 0.5758432555760209, + "2": 0.4018027505276448 + }, + "recall": { + "0": 0.6938779514436627, + "1": 0.7886470023309753, + "2": 0.8297266876274239 + }, + "f1": { + "0": 0.45840728486992033, + "1": 0.5301569975412581, + "2": 0.3964973577911489 + }, + "micro_accuracy": { + "0": 0.7946874592763129, + "1": 0.8754567083014699, + "2": 0.9819891163092918 + }, + "coverage": { + "0": 0.8722058043494734, + "1": 0.8917935894521483, + "2": 0.9329393043873607 + } + } + }, + { + "thresholds": [ + 0.52, + 0.52, + 0.54 + ], + "scores": { + "accuracy": { + "0": 0.8282544312763146, + "1": 0.9256559818110086, + "2": 0.9457990600741752 + }, + "precision": { + "0": 0.5474108901738939, + "1": 0.5915396802073292, + "2": 0.42335753679425747 + }, + "recall": { + "0": 0.6915315709428661, + "1": 0.7867253650934746, + "2": 0.80562235734794 + }, + "f1": { + "0": 0.46628623600582575, + "1": 0.5427407402080506, + "2": 0.4092297626088781 + }, + "micro_accuracy": { + "0": 0.7981506639204172, + "1": 0.8779758088643843, + "2": 0.9832504686608525 + }, + "coverage": { + "0": 0.8645525498219292, + "1": 0.8864514662423278, + "2": 0.9296809881033569 + } + } + }, + { + "thresholds": [ + 0.54, + 0.54, + 0.56 + ], + "scores": { + "accuracy": { + "0": 0.8294050859145015, + "1": 0.9266399265178432, + "2": 0.9464854308983579 + }, + "precision": { + "0": 0.5618323221225616, + "1": 0.6071751148151976, + "2": 0.4248732096383385 + }, + "recall": { + "0": 0.686694082070545, + "1": 0.7826451748903362, + "2": 0.8026355749174192 + }, + "f1": { + "0": 0.4753762543819342, + "1": 0.5542226868078467, + "2": 0.4093239825009507 + }, + "micro_accuracy": { + "0": 0.8015032607494197, + "1": 0.880494623655914, + "2": 0.9843085106382978 + }, + "coverage": { + "0": 0.8569182389937107, + "1": 0.8808820186406001, + "2": 0.9259680230355384 + } + } + }, + { + "thresholds": [ + 0.56, + 0.56, + 0.58 + ], + "scores": { + "accuracy": { + "0": 0.833645446676373, + "1": 0.9285620489388198, + "2": 0.9481742920518095 + }, + "precision": { + "0": 0.5731113797984781, + "1": 0.6185018271856951, + "2": 0.43548019200631727 + }, + "recall": { + "0": 0.6832262601675011, + "1": 0.780813848380668, + "2": 0.800934289541279 + }, + "f1": { + "0": 0.4823991265691447, + "1": 0.5632037373511436, + "2": 0.4186426629202878 + }, + "micro_accuracy": { + "0": 0.8043672213052594, + "1": 0.8827690643591131, + "2": 0.9851727112169877 + }, + "coverage": { + "0": 0.8493218155641433, + "1": 0.875672501326059, + "2": 0.922444494960976 + } + } + }, + { + "thresholds": [ + 0.564783900976181, + 0.58, + 0.6 + ], + "scores": { + "accuracy": { + "0": 0.8339020746357689, + "1": 0.9296737162520987, + "2": 0.950035375136402 + }, + "precision": { + "0": 0.5757325028485333, + "1": 0.6325706462041654, + "2": 0.4392335105674446 + }, + "recall": { + "0": 0.6821227608254857, + "1": 0.7773607968172264, + "2": 0.7991374389095438 + }, + "f1": { + "0": 0.48389393195862157, + "1": 0.5727835312449313, + "2": 0.4203665167771333 + }, + "micro_accuracy": { + "0": 0.8049423540977746, + "1": 0.88468315603994, + "2": 0.9860232121874292 + }, + "coverage": { + "0": 0.8478442070167462, + "1": 0.8708229142987043, + "2": 0.9189399105857392 + } + } + }, + { + "thresholds": [ + 0.58, + 0.6, + 0.62 + ], + "scores": { + "accuracy": { + "0": 0.838887696675453, + "1": 0.9304725855239624, + "2": 0.9513127786332014 + }, + "precision": { + "0": 0.5836626841835245, + "1": 0.6369805642602512, + "2": 0.45624433078195364 + }, + "recall": { + "0": 0.6778259488082439, + "1": 0.7742710764789974, + "2": 0.7977250714799574 + }, + "f1": { + "0": 0.4870131206180509, + "1": 0.574846660418297, + "2": 0.4352000490121753 + }, + "micro_accuracy": { + "0": 0.806791858765321, + "1": 0.8865471735276739, + "2": 0.9870237380740495 + }, + "coverage": { + "0": 0.8423315905129953, + "1": 0.8655944532848374, + "2": 0.9153406077138744 + } + } + }, + { + "thresholds": [ + 0.6, + 0.62, + 0.64 + ], + "scores": { + "accuracy": { + "0": 0.8433405053469263, + "1": 0.9335994359962447, + "2": 0.9518311072773475 + }, + "precision": { + "0": 0.5922917544554824, + "1": 0.6493828831713773, + "2": 0.45932417887408133 + }, + "recall": { + "0": 0.6735136238673823, + "1": 0.7711913065586354, + "2": 0.7942122965063213 + }, + "f1": { + "0": 0.49122687751793154, + "1": 0.5835878099955036, + "2": 0.4360361101763694 + }, + "micro_accuracy": { + "0": 0.8090787414078628, + "1": 0.8885290683585575, + "2": 0.9879475510670573 + }, + "coverage": { + "0": 0.8350572099719633, + "1": 0.8599113434871561, + "2": 0.9116276426460559 + } + } + }, + { + "thresholds": [ + 0.62, + 0.64, + 0.66 + ], + "scores": { + "accuracy": { + "0": 0.8456728036086991, + "1": 0.9345386218388265, + "2": 0.9504130518791651 + }, + "precision": { + "0": 0.6017081017195444, + "1": 0.6563517938481643, + "2": 0.45950018652813823 + }, + "recall": { + "0": 0.6690029154596254, + "1": 0.7667844454936324, + "2": 0.7887529362434649 + }, + "f1": { + "0": 0.4955602532474231, + "1": 0.586873753072077, + "2": 0.43459488325704465 + }, + "micro_accuracy": { + "0": 0.8117676675210546, + "1": 0.8904722856319673, + "2": 0.9886505883334724 + }, + "coverage": { + "0": 0.8277638857316056, + "1": 0.8547586572705917, + "2": 0.9080093960748655 + } + } + }, + { + "thresholds": [ + 0.64, + 0.66, + 0.68 + ], + "scores": { + "accuracy": { + "0": 0.8490976179709434, + "1": 0.9413625835507294, + "2": 0.9517353620506981 + }, + "precision": { + "0": 0.6089573665135384, + "1": 0.6666909359331916, + "2": 0.4739665006434012 + }, + "recall": { + "0": 0.6622437769665233, + "1": 0.7608743136500334, + "2": 0.7861711832362505 + }, + "f1": { + "0": 0.4972320493005686, + "1": 0.592325310446054, + "2": 0.44576123038686644 + }, + "micro_accuracy": { + "0": 0.8137372525494901, + "1": 0.892263099219621, + "2": 0.9893784174470492 + }, + "coverage": { + "0": 0.8210578161703418, + "1": 0.849624914753353, + "2": 0.9042395999090702 + } + } + }, + { + "thresholds": [ + 0.66, + 0.6622604340314866, + 0.7000000000000001 + ], + "scores": { + "accuracy": { + "0": 0.8529801808585096, + "1": 0.941323062631637, + "2": 0.9519555188854704 + }, + "precision": { + "0": 0.6191522219838402, + "1": 0.6668541982321273, + "2": 0.4761694470533551 + }, + "recall": { + "0": 0.6573744455521335, + "1": 0.7601987118950719, + "2": 0.7847640233298259 + }, + "f1": { + "0": 0.5021227086700802, + "1": 0.5920537704757267, + "2": 0.4461110636862203 + }, + "micro_accuracy": { + "0": 0.8159633369003861, + "1": 0.8926029231284168, + "2": 0.9900698476815619 + }, + "coverage": { + "0": 0.8143138592104266, + "1": 0.8489618852769569, + "2": 0.9004319163446238 + } + } + }, + { + "thresholds": [ + 0.68, + 0.68, + 0.72 + ], + "scores": { + "accuracy": { + "0": 0.8558937734472942, + "1": 0.9426209301478328, + "2": 0.9536376432733452 + }, + "precision": { + "0": 0.6313912007942875, + "1": 0.6747846644968789, + "2": 0.5037184619199501 + }, + "recall": { + "0": 0.6524127310036258, + "1": 0.7581639176800293, + "2": 0.7800662695865808 + }, + "f1": { + "0": 0.5074267680982871, + "1": 0.5960035751106463, + "2": 0.4651326815106287 + }, + "micro_accuracy": { + "0": 0.8187153723354306, + "1": 0.8942176184390485, + "2": 0.9909263959390863 + }, + "coverage": { + "0": 0.806925816473441, + "1": 0.8449079336212776, + "2": 0.8956581041145715 + } + } + }, + { + "thresholds": [ + 0.7000000000000001, + 0.7000000000000001, + 0.7256358802318573 + ], + "scores": { + "accuracy": { + "0": 0.8612397149971023, + "1": 0.9458597496685615, + "2": 0.9539011552837727 + }, + "precision": { + "0": 0.6449381041264283, + "1": 0.6905251527466493, + "2": 0.5038594319488854 + }, + "recall": { + "0": 0.6492277109877416, + "1": 0.754841056305495, + "2": 0.7796118456062395 + }, + "f1": { + "0": 0.5147079585414646, + "1": 0.605764667596171, + "2": 0.46504869377039276 + }, + "micro_accuracy": { + "0": 0.8215556082523121, + "1": 0.8966646342840368, + "2": 0.9911898004998094 + }, + "coverage": { + "0": 0.7988558005607335, + "1": 0.8388838372357353, + "2": 0.8944835947563841 + } + } + }, + { + "thresholds": [ + 0.7013918280601502, + 0.72, + 0.74 + ], + "scores": { + "accuracy": { + "0": 0.8612592871982399, + "1": 0.9464876683184433, + "2": 0.9552692219379086 + }, + "precision": { + "0": 0.6467996328218246, + "1": 0.7033503379498547, + "2": 0.518130615014001 + }, + "recall": { + "0": 0.648741954916294, + "1": 0.749527998067361, + "2": 0.7779048994711388 + }, + "f1": { + "0": 0.5159025352577546, + "1": 0.6128222544241069, + "2": 0.4767143743192152 + }, + "micro_accuracy": { + "0": 0.8217913423201063, + "1": 0.898264607546569, + "2": 0.9915830641047441 + }, + "coverage": { + "0": 0.7982117147836629, + "1": 0.8328976282488444, + "2": 0.8912631658710313 + } + } + }, + { + "thresholds": [ + 0.72, + 0.74, + 0.76 + ], + "scores": { + "accuracy": { + "0": 0.8627923598464875, + "1": 0.9504441370707825, + "2": 0.9566638476216514 + }, + "precision": { + "0": 0.6591134034757654, + "1": 0.7139442370214132, + "2": 0.5459362001580562 + }, + "recall": { + "0": 0.6445302772804082, + "1": 0.7460931886967076, + "2": 0.7749834423346821 + }, + "f1": { + "0": 0.520806896074642, + "1": 0.6195200372956101, + "2": 0.5009867295434599 + }, + "micro_accuracy": { + "0": 0.8235956671779141, + "1": 0.8999885465582408, + "2": 0.9923068703921359 + }, + "coverage": { + "0": 0.7904826854588164, + "1": 0.8269871940592559, + "2": 0.8864704099416534 + } + } + }, + { + "thresholds": [ + 0.7392672300338745, + 0.76, + 0.78 + ], + "scores": { + "accuracy": { + "0": 0.8659206758370823, + "1": 0.955701662120945, + "2": 0.9568074516033286 + }, + "precision": { + "0": 0.6694908268387498, + "1": 0.7245991333049994, + "2": 0.5613815874352024 + }, + "recall": { + "0": 0.639254202340642, + "1": 0.7387274032356047, + "2": 0.7709488290444216 + }, + "f1": { + "0": 0.5238581475082266, + "1": 0.6232685759150135, + "2": 0.5132131254445778 + }, + "micro_accuracy": { + "0": 0.8257020535519919, + "1": 0.9020793427338395, + "2": 0.9930385458295733 + }, + "coverage": { + "0": 0.7831893612184587, + "1": 0.8208494354777601, + "2": 0.8816776540122755 + } + } + }, + { + "thresholds": [ + 0.74, + 0.78, + 0.8 + ], + "scores": { + "accuracy": { + "0": 0.8660251169906156, + "1": 0.9558540194054381, + "2": 0.9574691843308909 + }, + "precision": { + "0": 0.6694910040387244, + "1": 0.7315176901132866, + "2": 0.5630842396048013 + }, + "recall": { + "0": 0.6391209710195863, + "1": 0.7347075677897364, + "2": 0.768279622066695 + }, + "f1": { + "0": 0.5237770716830012, + "1": 0.623635473859606, + "2": 0.5131282859954788 + }, + "micro_accuracy": { + "0": 0.8257881874712671, + "1": 0.9037942271880819, + "2": 0.9936268579329416 + }, + "coverage": { + "0": 0.7829241494279002, + "1": 0.813821323027961, + "2": 0.8768659543835721 + } + } + }, + { + "thresholds": [ + 0.76, + 0.8, + 0.8200000000000001 + ], + "scores": { + "accuracy": { + "0": 0.8679120255990703, + "1": 0.9560909623540756, + "2": 0.9615807882397353 + }, + "precision": { + "0": 0.6861879993697683, + "1": 0.744690256607668, + "2": 0.582014385628191 + }, + "recall": { + "0": 0.6328288124972921, + "1": 0.728648284795071, + "2": 0.7641846835140491 + }, + "f1": { + "0": 0.5314997713032426, + "1": 0.6314422568258956, + "2": 0.5275589384246898 + }, + "micro_accuracy": { + "0": 0.8285217986984391, + "1": 0.9052302925019954, + "2": 0.9943459823855605 + }, + "coverage": { + "0": 0.7743047662347503, + "1": 0.8069637038720922, + "2": 0.871126013487914 + } + } + }, + { + "thresholds": [ + 0.78, + 0.8178495526313782, + 0.84 + ], + "scores": { + "accuracy": { + "0": 0.8679264283644141, + "1": 0.9575463468854754, + "2": 0.9617137032762465 + }, + "precision": { + "0": 0.6973335376338138, + "1": 0.7633606790043705, + "2": 0.6005770892222951 + }, + "recall": { + "0": 0.6264862412658959, + "1": 0.7240700762437333, + "2": 0.7613985188626582 + }, + "f1": { + "0": 0.5348002941670937, + "1": 0.6403891149209414, + "2": 0.5421165988142704 + }, + "micro_accuracy": { + "0": 0.830426164519326, + "1": 0.9070675979637741, + "2": 0.9946999561979851 + }, + "coverage": { + "0": 0.7645677047813897, + "1": 0.8000871410168978, + "2": 0.8649693112070925 + } + } + }, + { + "thresholds": [ + 0.8, + 0.8200000000000001, + 0.86 + ], + "scores": { + "accuracy": { + "0": 0.8685561185021473, + "1": 0.9575325681771746, + "2": 0.9597647268578883 + }, + "precision": { + "0": 0.7127233427660208, + "1": 0.765338845733388, + "2": 0.6412593986657874 + }, + "recall": { + "0": 0.618199730670569, + "1": 0.7232287068426331, + "2": 0.7540449714415071 + }, + "f1": { + "0": 0.5384472833900663, + "1": 0.6414975761159004, + "2": 0.5737319020482594 + }, + "micro_accuracy": { + "0": 0.8323003186871095, + "1": 0.9071536929932682, + "2": 0.9954938039804732 + }, + "coverage": { + "0": 0.7549253618246571, + "1": 0.7991967871485943, + "2": 0.8576002121694325 + } + } + }, + { + "thresholds": [ + 0.8103895634412766, + 0.84, + 0.88 + ], + "scores": { + "accuracy": { + "0": 0.873068122998845, + "1": 0.9587840489386819, + "2": 0.9614561299225758 + }, + "precision": { + "0": 0.7229059700682495, + "1": 0.7841179321590122, + "2": 0.6658140379095349 + }, + "recall": { + "0": 0.6149672372822299, + "1": 0.7180443329503644, + "2": 0.7459102341523275 + }, + "f1": { + "0": 0.5425842893326037, + "1": 0.6515104166595421, + "2": 0.589880549745751 + }, + "micro_accuracy": { + "0": 0.8336744233052882, + "1": 0.9089254932005363, + "2": 0.9958784476228668 + }, + "coverage": { + "0": 0.7497726756080928, + "1": 0.7912404334318406, + "2": 0.8503068879290748 + } + } + }, + { + "thresholds": [ + 0.8200000000000001, + 0.86, + 0.8892806261777878 + ], + "scores": { + "accuracy": { + "0": 0.8728679298631105, + "1": 0.9597792598113881, + "2": 0.9583871716477937 + }, + "precision": { + "0": 0.7302325487524555, + "1": 0.8044468108688305, + "2": 0.6637613338355366 + }, + "recall": { + "0": 0.6093728496483722, + "1": 0.7072301432900153, + "2": 0.7407173727226047 + }, + "f1": { + "0": 0.5409218879775108, + "1": 0.6586789571007916, + "2": 0.5865013528611877 + }, + "micro_accuracy": { + "0": 0.8344983604890572, + "1": 0.9106874666925052, + "2": 0.9961058144219148 + }, + "coverage": { + "0": 0.7452640751685989, + "1": 0.7820337955595968, + "2": 0.8464423732666515 + } + } + }, + { + "thresholds": [ + 0.84, + 0.869922012090683, + 0.9 + ], + "scores": { + "accuracy": { + "0": 0.8769269805347432, + "1": 0.9627590640417357, + "2": 0.9645260442621209 + }, + "precision": { + "0": 0.7442978691723345, + "1": 0.8166841617561862, + "2": 0.6639873669283907 + }, + "recall": { + "0": 0.6016581018718588, + "1": 0.7031449724257084, + "2": 0.7369032513855218 + }, + "f1": { + "0": 0.5439121789284385, + "1": 0.6655108425187298, + "2": 0.5848601161863883 + }, + "micro_accuracy": { + "0": 0.8373167458187074, + "1": 0.9116055761356989, + "2": 0.9964424029541565 + }, + "coverage": { + "0": 0.7339546866712131, + "1": 0.7772978707281958, + "2": 0.8413275744487384 + } + } + }, + { + "thresholds": [ + 0.86, + 0.88, + 0.92 + ], + "scores": { + "accuracy": { + "0": 0.8774254944722376, + "1": 0.9657849312916683, + "2": 0.9647114107133942 + }, + "precision": { + "0": 0.7596043505358325, + "1": 0.8288030433350464, + "2": 0.6869689989799962 + }, + "recall": { + "0": 0.5923256367659963, + "1": 0.6961779367427098, + "2": 0.7290421187513579 + }, + "f1": { + "0": 0.5468754480560355, + "1": 0.6696681370500921, + "2": 0.6007575543263776 + }, + "micro_accuracy": { + "0": 0.8398865337640847, + "1": 0.913005034999386, + "2": 0.996918933722841 + }, + "coverage": { + "0": 0.7212434644237327, + "1": 0.7712927180419792, + "2": 0.8300371296506782 + } + } + }, + { + "thresholds": [ + 0.88, + 0.9, + 0.9400000000000001 + ], + "scores": { + "accuracy": { + "0": 0.8882002242037912, + "1": 0.9670203717521686, + "2": 0.9781614922384197 + }, + "precision": { + "0": 0.7852154140060232, + "1": 0.8434772895799222, + "2": 0.690899900951909 + }, + "recall": { + "0": 0.582807177302222, + "1": 0.6851313873283835, + "2": 0.7171244904543138 + }, + "f1": { + "0": 0.5556971539137543, + "1": 0.6718879720187338, + "2": 0.5958883925053272 + }, + "micro_accuracy": { + "0": 0.8430841797764854, + "1": 0.9148262625255497, + "2": 0.9975143447859317 + }, + "coverage": { + "0": 0.7068462529362733, + "1": 0.7599833295445935, + "2": 0.8154694248692885 + } + } + }, + { + "thresholds": [ + 0.8939348995685578, + 0.9169912785291671, + 0.9588932752609253 + ], + "scores": { + "accuracy": { + "0": 0.8907349998898831, + "1": 0.9679171391596187, + "2": 0.9914113430862983 + }, + "precision": { + "0": 0.7992017020354023, + "1": 0.8571871263381592, + "2": 0.739293558241876 + }, + "recall": { + "0": 0.5762135216235852, + "1": 0.6745673184147293, + "2": 0.7051209174422324 + }, + "f1": { + "0": 0.5581397972687833, + "1": 0.6745765000705487, + "2": 0.6098272253678202 + }, + "micro_accuracy": { + "0": 0.8449658772669186, + "1": 0.916563204702663, + "2": 0.9980728968405025 + }, + "coverage": { + "0": 0.6967303174964007, + "1": 0.7476509812836251, + "2": 0.7962415700538001 + } + } + }, + { + "thresholds": [ + 0.9, + 0.92, + 0.96 + ], + "scores": { + "accuracy": { + "0": 0.8946723223240497, + "1": 0.9680629104890521, + "2": 0.9914428135005212 + }, + "precision": { + "0": 0.8021353989540583, + "1": 0.857194863299276, + "2": 0.7392946941740896 + }, + "recall": { + "0": 0.5706803564139407, + "1": 0.6733765395011476, + "2": 0.7041487848093837 + }, + "f1": { + "0": 0.5547257091906621, + "1": 0.673812235658984, + "2": 0.6092976825277341 + }, + "micro_accuracy": { + "0": 0.8457640581774357, + "1": 0.9169313648260615, + "2": 0.9980928768952035 + }, + "coverage": { + "0": 0.6916155186784876, + "1": 0.7454913995605061, + "2": 0.7946502993104494 + } + } + }, + { + "thresholds": [ + 0.92, + 0.9400000000000001, + 0.964760661125183 + ], + "scores": { + "accuracy": { + "0": 0.8955084410825387, + "1": 0.9728889200483483, + "2": 0.9955823574240963 + }, + "precision": { + "0": 0.8179890429357201, + "1": 0.8772322343633124, + "2": 0.7393905133847496 + }, + "recall": { + "0": 0.5558190501817113, + "1": 0.6574260341135374, + "2": 0.700159197162577 + }, + "f1": { + "0": 0.552121099885854, + "1": 0.6739506169753227, + "2": 0.6072565582310141 + }, + "micro_accuracy": { + "0": 0.8481657704327261, + "1": 0.9198969099002942, + "2": 0.998243799167609 + }, + "coverage": { + "0": 0.6728612563461392, + "1": 0.7276843221944381, + "2": 0.7874327498673941 + } + } + }, + { + "thresholds": [ + 0.9400000000000001, + 0.96, + 0.98 + ], + "scores": { + "accuracy": { + "0": 0.9015217020267193, + "1": 0.9753341230239733, + "2": 0.9956952732139847 + }, + "precision": { + "0": 0.8481058742251684, + "1": 0.8964483743745064, + "2": 0.7904683826694126 + }, + "recall": { + "0": 0.5340470612441686, + "1": 0.6339597903306023, + "2": 0.6712077753964215 + }, + "f1": { + "0": 0.5485544353212021, + "1": 0.6674368946495778, + "2": 0.6326994066606993 + }, + "micro_accuracy": { + "0": 0.8513430746347012, + "1": 0.9230498945888967, + "2": 0.9986494260060526 + }, + "coverage": { + "0": 0.6495226187769948, + "1": 0.700878987648708, + "2": 0.7574259301356369 + } + } + }, + { + "thresholds": [ + 0.9400830596685409, + 0.9623951733112336, + 0.9829540997743608 + ], + "scores": { + "accuracy": { + "0": 0.9015213230483747, + "1": 0.9753094701159627, + "2": 0.9957236507443196 + }, + "precision": { + "0": 0.848095143571776, + "1": 0.8994013694018362, + "2": 0.8538416295509121 + }, + "recall": { + "0": 0.5338966062467273, + "1": 0.6314594591320635, + "2": 0.6649476693811502 + }, + "f1": { + "0": 0.5484443545793559, + "1": 0.6673585662110235, + "2": 0.6773385749353905 + }, + "micro_accuracy": { + "0": 0.8513375536042475, + "1": 0.9236145102518083, + "2": 0.9987341772151899 + }, + "coverage": { + "0": 0.64937106918239, + "1": 0.6966355989997727, + "2": 0.7482761233613701 + } + } + }, + { + "thresholds": [ + 0.96, + 0.98, + 0.9931119441986084 + ], + "scores": { + "accuracy": { + "0": 0.9007307764009433, + "1": 0.9769769927601076, + "2": 0.9962757001926406 + }, + "precision": { + "0": 0.8688602149968949, + "1": 0.9238115476261227, + "2": 0.8964573976570537 + }, + "recall": { + "0": 0.5044547623579014, + "1": 0.59214124891185, + "2": 0.628755812463295 + }, + "f1": { + "0": 0.5341531841748264, + "1": 0.6500388683285047, + "2": 0.6803360283100598 + }, + "micro_accuracy": { + "0": 0.8551647743007477, + "1": 0.9283031948697209, + "2": 0.9990446294527091 + }, + "coverage": { + "0": 0.6156512843828142, + "1": 0.6557929832537698, + "2": 0.6940024247935137 + } + } + }, + { + "thresholds": [ + 0.968298327922821, + 0.9829350560903549, + 0.9968007922172547 + ], + "scores": { + "accuracy": { + "0": 0.9076298233726804, + "1": 0.9778396943746799, + "2": 0.9963518987362167 + }, + "precision": { + "0": 0.880036155615882, + "1": 0.9339767231608709, + "2": 0.9500985664224181 + }, + "recall": { + "0": 0.49063244091458935, + "1": 0.5821459983488723, + "2": 0.5982630188012411 + }, + "f1": { + "0": 0.5259996503084539, + "1": 0.6462002647532972, + "2": 0.6830633162366865 + }, + "micro_accuracy": { + "0": 0.8566122785854866, + "1": 0.9292807615465977, + "2": 0.9992660227239365 + }, + "coverage": { + "0": 0.5967644161551868, + "1": 0.6447677502462681, + "2": 0.6452413427294083 + } + } + }, + { + "thresholds": [ + 0.98, + 0.9914740920066833, + 0.9984663963317871 + ], + "scores": { + "accuracy": { + "0": 0.9140472371288523, + "1": 0.9789688442390945, + "2": 0.9955344536572177 + }, + "precision": { + "0": 0.9043033883858217, + "1": 0.9423740513497921, + "2": 0.9472330464716916 + }, + "recall": { + "0": 0.45991964562178267, + "1": 0.5376650550381672, + "2": 0.5368175209756265 + }, + "f1": { + "0": 0.5077561422491333, + "1": 0.6104223127939457, + "2": 0.6231417007368808 + }, + "micro_accuracy": { + "0": 0.8611702667072305, + "1": 0.9341163806749826, + "2": 0.9992647763961257 + }, + "coverage": { + "0": 0.5604114571493521, + "1": 0.5983556868985376, + "2": 0.5926157460028795 + } + } + }, + { + "thresholds": [ + 0.9837267845869063, + 0.996181696653366, + 0.9991970777511597 + ], + "scores": { + "accuracy": { + "0": 0.9175154037568073, + "1": 0.9801771660058008, + "2": 0.9956182845363498 + }, + "precision": { + "0": 0.9113644580452812, + "1": 0.9526438322648789, + "2": 0.9466409618115678 + }, + "recall": { + "0": 0.4462820444958074, + "1": 0.4862104422916158, + "2": 0.4995342032615694 + }, + "f1": { + "0": 0.4967958440684157, + "1": 0.5663266039849079, + "2": 0.5923877275251487 + }, + "micro_accuracy": { + "0": 0.8626385113945223, + "1": 0.9401090832808895, + "2": 0.999478115649572 + }, + "coverage": { + "0": 0.5436462832461924, + "1": 0.5418276881109343, + "2": 0.5444798060165189 + } + } + }, + { + "thresholds": [ + 0.9909754395484924, + 0.9981385469436646, + 0.9995541572570801 + ], + "scores": { + "accuracy": { + "0": 0.9224826036781808, + "1": 0.9793222361938133, + "2": 0.9952663350372687 + }, + "precision": { + "0": 0.9259898898282758, + "1": 0.9527810434506255, + "2": 0.991246958250539 + }, + "recall": { + "0": 0.4048140396023669, + "1": 0.4343426633370291, + "2": 0.46332263246734706 + }, + "f1": { + "0": 0.4632810594153543, + "1": 0.5173491741523389, + "2": 0.5855626524516249 + }, + "micro_accuracy": { + "0": 0.8668243913607571, + "1": 0.9442163167273573, + "2": 0.9995411440807587 + }, + "coverage": { + "0": 0.4964385845267864, + "1": 0.4890126543911495, + "2": 0.4954156247632038 + } + } + }, + { + "thresholds": [ + 0.9953113883733749, + 0.9990327894687653, + 0.9997492790222169 + ], + "scores": { + "accuracy": { + "0": 0.926034547058813, + "1": 0.9812806123103641, + "2": 0.9991547104962129 + }, + "precision": { + "0": 0.9336381921423307, + "1": 0.9637883239225851, + "2": 0.99093550316367 + }, + "recall": { + "0": 0.3587794785774434, + "1": 0.39431048194782464, + "2": 0.4329618750570841 + }, + "f1": { + "0": 0.42280255210853357, + "1": 0.4791580712509513, + "2": 0.5557113491439347 + }, + "micro_accuracy": { + "0": 0.870291095890411, + "1": 0.9484438313647728, + "2": 0.9995314363605384 + }, + "coverage": { + "0": 0.44252481624611656, + "1": 0.43945593695536866, + "2": 0.44472228536788666 + } + } + }, + { + "thresholds": [ + 0.9975371837615968, + 0.9994630217552184, + 0.9998589992523194 + ], + "scores": { + "accuracy": { + "0": 0.9313125212251779, + "1": 0.981866328209891, + "2": 0.9994197487454543 + }, + "precision": { + "0": 0.9373845967320148, + "1": 0.9660388130640787, + "2": 0.9898720396996044 + }, + "recall": { + "0": 0.3147527816583985, + "1": 0.35298806003244504, + "2": 0.39130852457988263 + }, + "f1": { + "0": 0.37789084963155256, + "1": 0.43871959822191153, + "2": 0.512975274017867 + }, + "micro_accuracy": { + "0": 0.8753155952612157, + "1": 0.9522481365712911, + "2": 0.9996634453579499 + }, + "coverage": { + "0": 0.3901644313101462, + "1": 0.3939342274759415, + "2": 0.3940100022732439 + } + } + }, + { + "thresholds": [ + 0.9987033247947694, + 0.9997110962867736, + 0.9999233663082123 + ], + "scores": { + "accuracy": { + "0": 0.9475848764517509, + "1": 0.984876159942198, + "2": 0.9993426502900025 + }, + "precision": { + "0": 0.9519436863406033, + "1": 0.9657183830827069, + "2": 0.9860759975204548 + }, + "recall": { + "0": 0.28253071189734474, + "1": 0.3120263118314203, + "2": 0.34493011934877893 + }, + "f1": { + "0": 0.3453504169466674, + "1": 0.3951232081490325, + "2": 0.46324612201173226 + }, + "micro_accuracy": { + "0": 0.8811122828439807, + "1": 0.9572130513995473, + "2": 0.9996659428762318 + }, + "coverage": { + "0": 0.34130863074941276, + "1": 0.34312722588467076, + "2": 0.3402477835871789 + } + } + }, + { + "thresholds": [ + 0.9993016123771669, + 0.9998360157012939, + 0.9999556183815004 + ], + "scores": { + "accuracy": { + "0": 0.9449030971073483, + "1": 0.9825776284204991, + "2": 0.9992307228032624 + }, + "precision": { + "0": 0.9526365091195719, + "1": 0.9649247615279918, + "2": 0.9858949057426691 + }, + "recall": { + "0": 0.2436221491684348, + "1": 0.26927744439046775, + "2": 0.3173217868834379 + }, + "f1": { + "0": 0.30311496754430983, + "1": 0.34804098134974154, + "2": 0.4310795716736065 + }, + "micro_accuracy": { + "0": 0.8870395458357525, + "1": 0.9603270938478247, + "2": 0.9996105919003115 + }, + "coverage": { + "0": 0.2936462832461923, + "1": 0.29652572554368417, + "2": 0.2918845192089111 + } + } + }, + { + "thresholds": [ + 0.9996441006660463, + 0.999919891357422, + 0.9999743700027466 + ], + "scores": { + "accuracy": { + "0": 0.941897076211469, + "1": 0.9845509642684617, + "2": 0.9990765544536225 + }, + "precision": { + "0": 0.9545452898582109, + "1": 0.9663554776703325, + "2": 0.9844382224407668 + }, + "recall": { + "0": 0.20545987357608933, + "1": 0.2178058136801946, + "2": 0.28819361904854796 + }, + "f1": { + "0": 0.2599550276604233, + "1": 0.29034603423642164, + "2": 0.39689122226871193 + }, + "micro_accuracy": { + "0": 0.89789441089952, + "1": 0.9642019696732843, + "2": 0.9995376791493297 + }, + "coverage": { + "0": 0.24471470788815639, + "1": 0.24236568917178147, + "2": 0.24585132984769265 + } + } + }, + { + "thresholds": [ + 0.9998284101486207, + 0.9999610662460328, + 0.9999865293502808 + ], + "scores": { + "accuracy": { + "0": 0.9494365557600467, + "1": 0.9803029093551383, + "2": 0.9996182808397126 + }, + "precision": { + "0": 0.9562737905373998, + "1": 0.9628636594824845, + "2": 0.9914250743136911 + }, + "recall": { + "0": 0.16820896556639875, + "1": 0.16953220067607208, + "2": 0.24418626250042755 + }, + "f1": { + "0": 0.21793005404415428, + "1": 0.22996728377250691, + "2": 0.3457736191020759 + }, + "micro_accuracy": { + "0": 0.9128872487132175, + "1": 0.9658886894075404, + "2": 0.9997081144191476 + }, + "coverage": { + "0": 0.19506327195574752, + "1": 0.18992952943850874, + "2": 0.19470334166856104 + } + } + }, + { + "thresholds": [ + 0.9999265670776368, + 0.9999796569347381, + 0.9999933242797852 + ], + "scores": { + "accuracy": { + "0": 0.9550926766880073, + "1": 0.980461510518777, + "2": 0.9996448251918388 + }, + "precision": { + "0": 0.9589322615073687, + "1": 0.9695794480241675, + "2": 0.9970718641078752 + }, + "recall": { + "0": 0.12832419271073775, + "1": 0.13733663941529364, + "2": 0.159600646761486 + }, + "f1": { + "0": 0.17153110409132377, + "1": 0.18949687149517686, + "2": 0.24636893141506938 + }, + "micro_accuracy": { + "0": 0.9379662347860228, + "1": 0.9664753456822333, + "2": 0.9997364259356879 + }, + "coverage": { + "0": 0.1447488065469425, + "1": 0.1452223990300826, + "2": 0.14374479048268546 + } + } + }, + { + "thresholds": [ + 0.9999752044677734, + 0.9999914050102235, + 0.9999967694282531 + ], + "scores": { + "accuracy": { + "0": 0.9584696978696444, + "1": 0.9737095306609449, + "2": 0.9994757065129717 + }, + "precision": { + "0": 0.9645292963759694, + "1": 0.9701425438596492, + "2": 0.9928221288515408 + }, + "recall": { + "0": 0.08805514296342391, + "1": 0.09684671800419796, + "2": 0.11836585198921437 + }, + "f1": { + "0": 0.120502177452844, + "1": 0.1361960229969324, + "2": 0.18861965174983022 + }, + "micro_accuracy": { + "0": 0.9503602882305845, + "1": 0.9635137814792782, + "2": 0.999618829807509 + }, + "coverage": { + "0": 0.0946427218307191, + "1": 0.0955330756990225, + "2": 0.09939759036144578 + } + } + }, + { + "thresholds": [ + 0.9999936163425446, + 0.9999970197677612, + 0.9999990463256836 + ], + "scores": { + "accuracy": { + "0": 0.963173504695996, + "1": 0.9815497382198953, + "2": 0.9990448343079924 + }, + "precision": { + "0": 0.9755425002646344, + "1": 0.983, + "2": 0.9811111111111112 + }, + "recall": { + "0": 0.05009910707616046, + "1": 0.05560983170076135, + "2": 0.07368219693482024 + }, + "f1": { + "0": 0.0715760521716819, + "1": 0.08234772695429043, + "2": 0.12131174080518332 + }, + "micro_accuracy": { + "0": 0.9420234937476317, + "1": 0.9502090459901178, + "2": 0.9992343032159265 + }, + "coverage": { + "0": 0.04999242252026976, + "1": 0.04984087292566492, + "2": 0.049480942638478444 + } + } + }, + { + "thresholds": [ + 1.0, + 1.0, + 1.0 + ], + "scores": { + "accuracy": { + "0": 0.95, + "1": 0.9710144927536232, + "2": 1.0 + }, + "precision": { + "0": 0.95, + "1": 0.9583333333333334, + "2": 1.0 + }, + "recall": { + "0": 0.001962286384242331, + "1": 0.002759801937539602, + "2": 0.022136315662904072 + }, + "f1": { + "0": 0.0036126928068550518, + "1": 0.005108670591177205, + "2": 0.035421981994672294 + }, + "micro_accuracy": { + "0": 0.8961038961038961, + "1": 0.9148936170212766, + "2": 1.0 + }, + "coverage": { + "0": 0.0014586648480715313, + "1": 0.0017807077366068045, + "2": 0.007065999848450405 + } + } + } + ] + }, + "onnx-tta": { + "source": "local-evidence/mambo-default-tta-quality/onnx-cuda-0-prediction/north_europe/mini_metric.csv", + "source_sha256": "bc5674dfd2130a75c94433b9efce5fc9bca07b6ac7668708d4a101a9c605e0e5", + "identities": { + "full": "0f6e02db8e7eaaabc9617dcb0af5e0a7def4886578e46b4f919316b4ca6e7165", + "report": "80144bd4f34d9705bcae1dad496ccf13a7160b5709139b34710e5d75a3252fed", + "calibration": "07e2e6f88b36f3e9f348adaf4526ed62e8725eba4116780a0410bf5d18f5d3fd" + }, + "report_images": 52788, + "calibration_images": 5852, + "thresholds": [ + 0.8280269503593445, + 0.8708856105804443, + 0.966471254825592 + ], + "full_zero": { + "accuracy": { + "0": 0.7398002960321982, + "1": 0.8304111700220072, + "2": 0.8573137738657032 + }, + "precision": { + "0": 0.30560509035336597, + "1": 0.35093141039439896, + "2": 0.2853888893805401 + }, + "recall": { + "0": 0.7398002960321982, + "1": 0.8304111700220072, + "2": 0.8573137738657032 + }, + "f1": { + "0": 0.29443636070255275, + "1": 0.35360877971608073, + "2": 0.2967466662087087 + }, + "micro_accuracy": { + "0": 0.7319406548431105, + "1": 0.8158594815825375, + "2": 0.9476978171896316 + }, + "theilU": { + "0": 0.9406019271139017, + "1": 0.9419354628293558, + "2": 0.8801548412074369 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "report_zero": { + "accuracy": { + "0": 0.7408884646998294, + "1": 0.831310673030869, + "2": 0.8580571051602935 + }, + "precision": { + "0": 0.3129592874854792, + "1": 0.35819829298724193, + "2": 0.2856706122641368 + }, + "recall": { + "0": 0.7408884646998294, + "1": 0.831310673030869, + "2": 0.8580571051602935 + }, + "f1": { + "0": 0.3011494930237334, + "1": 0.36048522644409975, + "2": 0.297077819405652 + }, + "micro_accuracy": { + "0": 0.7322118663332575, + "1": 0.8163029476396151, + "2": 0.9479237705539137 + }, + "theilU": { + "0": 0.9416043541781303, + "1": 0.9429777628243508, + "2": 0.8802934722288728 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "report_optimized": { + "accuracy": { + "0": 0.8755166405852203, + "1": 0.9629823236784678, + "2": 0.9955854528269081 + }, + "precision": { + "0": 0.7362820959348587, + "1": 0.8168891977985718, + "2": 0.7395038777892725 + }, + "recall": { + "0": 0.6075669492667327, + "1": 0.703150166196618, + "2": 0.6986717712105687 + }, + "f1": { + "0": 0.5430735533140526, + "1": 0.6655370235633968, + "2": 0.6065093177805807 + }, + "micro_accuracy": { + "0": 0.8355803422957866, + "1": 0.911799848813675, + "2": 0.998285935010381 + }, + "theilU": { + "0": 0.9416043541781303, + "1": 0.9429777628243508, + "2": 0.8802934722288728 + }, + "coverage": { + "0": 0.7404902629385466, + "1": 0.7768621656437069, + "2": 0.7846859134651815 + } + }, + "known_zero": { + "accuracy": { + "0": 0.7643157679314445, + "1": 0.8339004259063546, + "2": 0.8580571051602935 + }, + "precision": { + "0": 0.32010697284017264, + "1": 0.35825712113062574, + "2": 0.2856706122641368 + }, + "recall": { + "0": 0.7643157679314445, + "1": 0.8339004259063546, + "2": 0.8580571051602935 + }, + "f1": { + "0": 0.31123876107268367, + "1": 0.3610591777989773, + "2": 0.297077819405652 + }, + "micro_accuracy": { + "0": 0.8485992798805656, + "1": 0.8163184117301608, + "2": 0.9479237705539137 + }, + "theilU": { + "0": 0.9441435804167174, + "1": 0.942991822846314, + "2": 0.8802934722288728 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known_optimized": { + "accuracy": { + "0": 0.9036381600900988, + "1": 0.966150028690568, + "2": 0.9955854528269081 + }, + "precision": { + "0": 0.7641741013547309, + "1": 0.8170652541366, + "2": 0.7395038777892725 + }, + "recall": { + "0": 0.6267785524056018, + "1": 0.705340665156732, + "2": 0.6986717712105687 + }, + "f1": { + "0": 0.5758793313296239, + "1": 0.6674178728574118, + "2": 0.6065093177805807 + }, + "micro_accuracy": { + "0": 0.9719676229020354, + "1": 0.9118220834959032, + "2": 0.998285935010381 + }, + "theilU": { + "0": 0.9441435804167174, + "1": 0.942991822846314, + "2": 0.8802934722288728 + }, + "coverage": { + "0": 0.7377711425309563, + "1": 0.7768579385075871, + "2": 0.7846859134651815 + } + }, + "calibration_zero": { + "accuracy": { + "0": 0.7687701032394073, + "1": 0.8538124541139522, + "2": 0.8685825691446063 + }, + "precision": { + "0": 0.4847160695718284, + "1": 0.5184639515113375, + "2": 0.3826107811942373 + }, + "recall": { + "0": 0.7687701032394073, + "1": 0.8538124541139522, + "2": 0.8685825691446063 + }, + "f1": { + "0": 0.4430255135086433, + "1": 0.5041458550744518, + "2": 0.39228445312410354 + }, + "micro_accuracy": { + "0": 0.7294941900205059, + "1": 0.8118591934381408, + "2": 0.9456596035543404 + }, + "theilU": { + "0": 0.9588446607588915, + "1": 0.9603409164900499, + "2": 0.8893754433031703 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "calibration_optimized": { + "accuracy": { + "0": 0.9108463773306322, + "1": 0.9779606204147607, + "2": 0.9996735638566714 + }, + "precision": { + "0": 0.880314153798674, + "1": 0.9266086911891874, + "2": 0.9496688607549484 + }, + "recall": { + "0": 0.6377095021001528, + "1": 0.7402264841524345, + "2": 0.7548837775873369 + }, + "f1": { + "0": 0.6324462567697632, + "1": 0.7572256161677625, + "2": 0.7935862907114528 + }, + "micro_accuracy": { + "0": 0.8357933579335793, + "1": 0.912967032967033, + "2": 0.9984868136619109 + }, + "theilU": { + "0": 0.9588446607588915, + "1": 0.9603409164900499, + "2": 0.8893754433031703 + }, + "coverage": { + "0": 0.7409432672590567, + "1": 0.777511961722488, + "2": 0.790498974709501 + } + }, + "curve": [ + { + "thresholds": [ + 0.0, + 0.0, + 0.0 + ], + "scores": { + "accuracy": { + "0": 0.7408884646998294, + "1": 0.831310673030869, + "2": 0.8580571051602935 + }, + "precision": { + "0": 0.3129592874854792, + "1": 0.35819829298724193, + "2": 0.2856706122641368 + }, + "recall": { + "0": 0.7408884646998294, + "1": 0.831310673030869, + "2": 0.8580571051602935 + }, + "f1": { + "0": 0.3011494930237334, + "1": 0.36048522644409975, + "2": 0.297077819405652 + }, + "micro_accuracy": { + "0": 0.7322118663332575, + "1": 0.8163029476396151, + "2": 0.9479237705539137 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + }, + { + "thresholds": [ + 0.015950521454215, + 0.02, + 0.02 + ], + "scores": { + "accuracy": { + "0": 0.740889810430762, + "1": 0.8313254150701082, + "2": 0.8580571051602935 + }, + "precision": { + "0": 0.3129592654647709, + "1": 0.3582300554179332, + "2": 0.2856706122641368 + }, + "recall": { + "0": 0.7408791651424883, + "1": 0.831310673030869, + "2": 0.8580571051602935 + }, + "f1": { + "0": 0.30114734657128267, + "1": 0.3605068098594936, + "2": 0.297077819405652 + }, + "micro_accuracy": { + "0": 0.7322206645701512, + "1": 0.8163338764066229, + "2": 0.9479237705539137 + }, + "coverage": { + "0": 0.9999621126013488, + "1": 0.9999621126013488, + "2": 1.0 + } + } + }, + { + "thresholds": [ + 0.02, + 0.0239239763468503, + 0.04 + ], + "scores": { + "accuracy": { + "0": 0.7410488501708439, + "1": 0.8314157287048344, + "2": 0.8580571051602935 + }, + "precision": { + "0": 0.3130393082015701, + "1": 0.358263923254293, + "2": 0.2856706122641368 + }, + "recall": { + "0": 0.7408791651424883, + "1": 0.831310673030869, + "2": 0.8580571051602935 + }, + "f1": { + "0": 0.3012095157962648, + "1": 0.3605537634261564, + "2": 0.297077819405652 + }, + "micro_accuracy": { + "0": 0.732331653340407, + "1": 0.8164112085788446, + "2": 0.9479237705539137 + }, + "coverage": { + "0": 0.999810563006744, + "1": 0.9998673941047208, + "2": 1.0 + } + } + }, + { + "thresholds": [ + 0.04, + 0.04, + 0.06 + ], + "scores": { + "accuracy": { + "0": 0.7426095802970574, + "1": 0.8329664318414006, + "2": 0.8580571051602935 + }, + "precision": { + "0": 0.31674763275753215, + "1": 0.36037998808055566, + "2": 0.2856706122641368 + }, + "recall": { + "0": 0.740461269687722, + "1": 0.8312492056432632, + "2": 0.8580571051602935 + }, + "f1": { + "0": 0.3039583606084498, + "1": 0.3624408295973815, + "2": 0.297077819405652 + }, + "micro_accuracy": { + "0": 0.7343533212962083, + "1": 0.817695285811888, + "2": 0.9479237705539137 + }, + "coverage": { + "0": 0.9967227400166705, + "1": 0.9981814048647419, + "2": 1.0 + } + } + }, + { + "thresholds": [ + 0.06, + 0.06, + 0.08 + ], + "scores": { + "accuracy": { + "0": 0.7460477041142287, + "1": 0.8354982570408676, + "2": 0.8580598272214246 + }, + "precision": { + "0": 0.3278611813253453, + "1": 0.3676629877959982, + "2": 0.2856706122641368 + }, + "recall": { + "0": 0.7400996168361355, + "1": 0.8309865024392983, + "2": 0.8580571051602935 + }, + "f1": { + "0": 0.3133880769684323, + "1": 0.36863595472715455, + "2": 0.297077819405652 + }, + "micro_accuracy": { + "0": 0.7379564693967247, + "1": 0.8206452350553576, + "2": 0.9479417280769886 + }, + "coverage": { + "0": 0.9913427294081988, + "1": 0.9941085095097371, + "2": 0.9999810563006744 + } + } + }, + { + "thresholds": [ + 0.08, + 0.08, + 0.0999075770378112 + ], + "scores": { + "accuracy": { + "0": 0.7493955682703097, + "1": 0.8383763190709993, + "2": 0.8580653615509174 + }, + "precision": { + "0": 0.33634125202567466, + "1": 0.3762181302522879, + "2": 0.2905124870482747 + }, + "recall": { + "0": 0.7397009819275772, + "1": 0.8301133615945212, + "2": 0.8580571051602935 + }, + "f1": { + "0": 0.32012563592243987, + "1": 0.3751806142871327, + "2": 0.3021130366837139 + }, + "micro_accuracy": { + "0": 0.7412295869356388, + "1": 0.8239145416953825, + "2": 0.9479776451643459 + }, + "coverage": { + "0": 0.986019549897704, + "1": 0.9895430779722664, + "2": 0.9999431689020232 + } + } + }, + { + "thresholds": [ + 0.1, + 0.1, + 0.1 + ], + "scores": { + "accuracy": { + "0": 0.7563665005973177, + "1": 0.8464222466897784, + "2": 0.8581003232184629 + }, + "precision": { + "0": 0.34968163802632196, + "1": 0.3846854097004968, + "2": 0.29051422175466407 + }, + "recall": { + "0": 0.7388339631243787, + "1": 0.8288795909340242, + "2": 0.8580571051602935 + }, + "f1": { + "0": 0.33056079534601945, + "1": 0.38240544445409363, + "2": 0.30211389976198105 + }, + "micro_accuracy": { + "0": 0.7449600865918008, + "1": 0.8272823472823473, + "2": 0.9479956047287057 + }, + "coverage": { + "0": 0.9800901720087899, + "1": 0.9845987724482838, + "2": 0.9999242252026976 + } + } + }, + { + "thresholds": [ + 0.12, + 0.12, + 0.12 + ], + "scores": { + "accuracy": { + "0": 0.7625714918130634, + "1": 0.8497179242133248, + "2": 0.8585294449520916 + }, + "precision": { + "0": 0.3594914502917909, + "1": 0.39687827178836016, + "2": 0.2905996046302943 + }, + "recall": { + "0": 0.7381916443987615, + "1": 0.8278936050918533, + "2": 0.8580495117510821 + }, + "f1": { + "0": 0.3379915660037187, + "1": 0.3931285955316415, + "2": 0.3021722660099376 + }, + "micro_accuracy": { + "0": 0.7484252274671437, + "1": 0.8310886644219978, + "2": 0.9484608385776025 + }, + "coverage": { + "0": 0.974388118511783, + "1": 0.9789724937485792, + "2": 0.9993938016215806 + } + } + }, + { + "thresholds": [ + 0.14, + 0.14, + 0.14 + ], + "scores": { + "accuracy": { + "0": 0.7672160919781337, + "1": 0.8544217285804823, + "2": 0.860270342500555 + }, + "precision": { + "0": 0.37002843841643523, + "1": 0.4083357577146017, + "2": 0.2961974043006112 + }, + "recall": { + "0": 0.7366712339930792, + "1": 0.8270981606071889, + "2": 0.8578392959282768 + }, + "f1": { + "0": 0.34583206444201803, + "1": 0.40293143370342366, + "2": 0.307670231670346 + }, + "micro_accuracy": { + "0": 0.7515350619891275, + "1": 0.8341502314544676, + "2": 0.9494694481881514 + }, + "coverage": { + "0": 0.9687428961127529, + "1": 0.9739713571266196, + "2": 0.9979730241721604 + } + } + }, + { + "thresholds": [ + 0.16, + 0.16, + 0.16 + ], + "scores": { + "accuracy": { + "0": 0.773475195583108, + "1": 0.8588774741931797, + "2": 0.861903012312373 + }, + "precision": { + "0": 0.38114457198207047, + "1": 0.4207728063858412, + "2": 0.29696685337608164 + }, + "recall": { + "0": 0.7341402245203328, + "1": 0.8229443946790418, + "2": 0.8574628138523821 + }, + "f1": { + "0": 0.3539517392905796, + "1": 0.4121629724367216, + "2": 0.3081029321547972 + }, + "micro_accuracy": { + "0": 0.7547262605000689, + "1": 0.8373543442558848, + "2": 0.9508377550826345 + }, + "coverage": { + "0": 0.9629650678184436, + "1": 0.9689323331060089, + "2": 0.9960786542396 + } + } + }, + { + "thresholds": [ + 0.18, + 0.18, + 0.18 + ], + "scores": { + "accuracy": { + "0": 0.7770258012636315, + "1": 0.8649499091537803, + "2": 0.8636760700222802 + }, + "precision": { + "0": 0.38994202141164924, + "1": 0.42806995201500586, + "2": 0.3027369310064925 + }, + "recall": { + "0": 0.733134576356869, + "1": 0.821629779668204, + "2": 0.8572183776637996 + }, + "f1": { + "0": 0.36059902709402175, + "1": 0.41793815824733366, + "2": 0.31384245168393615 + }, + "micro_accuracy": { + "0": 0.7571019076801423, + "1": 0.8399426472610139, + "2": 0.9523718767272104 + }, + "coverage": { + "0": 0.9582670303856937, + "1": 0.964480563764492, + "2": 0.9939569599151322 + } + } + }, + { + "thresholds": [ + 0.2, + 0.2, + 0.2 + ], + "scores": { + "accuracy": { + "0": 0.7782400632793491, + "1": 0.8703640744502253, + "2": 0.8654875492368518 + }, + "precision": { + "0": 0.3983552845987228, + "1": 0.4405734251247726, + "2": 0.3040514926875982 + }, + "recall": { + "0": 0.7321556987823791, + "1": 0.820032740939077, + "2": 0.8566580864341529 + }, + "f1": { + "0": 0.3669095026406158, + "1": 0.4277323394302547, + "2": 0.31457131145055967 + }, + "micro_accuracy": { + "0": 0.7595804279158472, + "1": 0.8426786665877198, + "2": 0.9543143326834117 + }, + "coverage": { + "0": 0.9535689929529438, + "1": 0.9598204137303933, + "2": 0.9910206865196636 + } + } + }, + { + "thresholds": [ + 0.22, + 0.22, + 0.22 + ], + "scores": { + "accuracy": { + "0": 0.780475166559865, + "1": 0.8728463326986747, + "2": 0.8673660569887384 + }, + "precision": { + "0": 0.4109821838099945, + "1": 0.4516915482504057, + "2": 0.30694292869397616 + }, + "recall": { + "0": 0.7313893790669066, + "1": 0.8190850559932441, + "2": 0.8558513359955886 + }, + "f1": { + "0": 0.37690915333104147, + "1": 0.43763882434578627, + "2": 0.3162630741384478 + }, + "micro_accuracy": { + "0": 0.7626536117494255, + "1": 0.8454321869173708, + "2": 0.9564275166369407 + }, + "coverage": { + "0": 0.9480374327498674, + "1": 0.9551034325983178, + "2": 0.9877813139349853 + } + } + }, + { + "thresholds": [ + 0.2208323277533054, + 0.24, + 0.24 + ], + "scores": { + "accuracy": { + "0": 0.7804767417089097, + "1": 0.8750586107857088, + "2": 0.8742343800372262 + }, + "precision": { + "0": 0.4109913229209418, + "1": 0.4608052531198458, + "2": 0.3132946812522768 + }, + "recall": { + "0": 0.7313579410395472, + "1": 0.817823539415891, + "2": 0.855117516899894 + }, + "f1": { + "0": 0.376905325173804, + "1": 0.4448319518546298, + "2": 0.3224616249884756 + }, + "micro_accuracy": { + "0": 0.7627203325472641, + "1": 0.8480457616646403, + "2": 0.9585730503550057 + }, + "coverage": { + "0": 0.9479048268545882, + "1": 0.9504622262635447, + "2": 0.9845229976509813 + } + } + }, + { + "thresholds": [ + 0.24, + 0.25287065804004666, + 0.26 + ], + "scores": { + "accuracy": { + "0": 0.7822990067272626, + "1": 0.876849117376825, + "2": 0.8759816752727514 + }, + "precision": { + "0": 0.4198251750146811, + "1": 0.46537126169735604, + "2": 0.31455597829884013 + }, + "recall": { + "0": 0.730366047417989, + "1": 0.8168576175441995, + "2": 0.8540780004667501 + }, + "f1": { + "0": 0.3834801337745707, + "1": 0.44849544635540844, + "2": 0.32301299921299853 + }, + "micro_accuracy": { + "0": 0.7652069104057855, + "1": 0.8496061732837551, + "2": 0.9606937979255596 + }, + "coverage": { + "0": 0.9430173524285822, + "1": 0.9476017276653785, + "2": 0.9807721451845116 + } + } + }, + { + "thresholds": [ + 0.26, + 0.26, + 0.28 + ], + "scores": { + "accuracy": { + "0": 0.7853950244533375, + "1": 0.8803953942713991, + "2": 0.877209818495524 + }, + "precision": { + "0": 0.42645032787470083, + "1": 0.47061019591107706, + "2": 0.3220549316725158 + }, + "recall": { + "0": 0.7290750804879409, + "1": 0.816417979816427, + "2": 0.8534256479368267 + }, + "f1": { + "0": 0.38786478712344546, + "1": 0.45220105526939885, + "2": 0.33004064438511554 + }, + "micro_accuracy": { + "0": 0.7673855100557305, + "1": 0.8504145139973567, + "2": 0.9626613935093637 + }, + "coverage": { + "0": 0.9381677654012276, + "1": 0.9460104569220278, + "2": 0.9771538986133212 + } + } + }, + { + "thresholds": [ + 0.28, + 0.28, + 0.3 + ], + "scores": { + "accuracy": { + "0": 0.7926786490882397, + "1": 0.888221969481094, + "2": 0.8784569475962828 + }, + "precision": { + "0": 0.43349787707271314, + "1": 0.4780525626528896, + "2": 0.3365452759866636 + }, + "recall": { + "0": 0.7256689066111349, + "1": 0.8140910718108895, + "2": 0.8522751704761103 + }, + "f1": { + "0": 0.39174992328289265, + "1": 0.4577642431530706, + "2": 0.3436941684526758 + }, + "micro_accuracy": { + "0": 0.7700948627841313, + "1": 0.8530802825688812, + "2": 0.9645337639345538 + }, + "coverage": { + "0": 0.9325793741001743, + "1": 0.9412555883913011, + "2": 0.9737250890353868 + } + } + }, + { + "thresholds": [ + 0.3, + 0.3, + 0.32 + ], + "scores": { + "accuracy": { + "0": 0.7975603803268244, + "1": 0.8936301956499766, + "2": 0.8799553730733393 + }, + "precision": { + "0": 0.443240906540024, + "1": 0.48547660584287367, + "2": 0.3392454180229264 + }, + "recall": { + "0": 0.7217650059961761, + "1": 0.8111246623146062, + "2": 0.8511832141224732 + }, + "f1": { + "0": 0.39873812189743485, + "1": 0.46328719215975306, + "2": 0.3450693440759551 + }, + "micro_accuracy": { + "0": 0.7724738035418837, + "1": 0.8552711391483683, + "2": 0.9668177024334987 + }, + "coverage": { + "0": 0.9274266878836099, + "1": 0.9369174812457377, + "2": 0.9699552928695916 + } + } + }, + { + "thresholds": [ + 0.32, + 0.32, + 0.34 + ], + "scores": { + "accuracy": { + "0": 0.8013881914660103, + "1": 0.9016524409830848, + "2": 0.8817267446769119 + }, + "precision": { + "0": 0.453709951521567, + "1": 0.49297343761660045, + "2": 0.3483860648833396 + }, + "recall": { + "0": 0.7196159172447888, + "1": 0.8092173408465396, + "2": 0.8503261568109047 + }, + "f1": { + "0": 0.406496499796794, + "1": 0.4691130078063828, + "2": 0.3532660659781026 + }, + "micro_accuracy": { + "0": 0.7745955489857929, + "1": 0.8574358766068926, + "2": 0.9686379050120548 + }, + "coverage": { + "0": 0.9227097067515344, + "1": 0.9328066984920815, + "2": 0.9664507084943548 + } + } + }, + { + "thresholds": [ + 0.34, + 0.34, + 0.36 + ], + "scores": { + "accuracy": { + "0": 0.8033671087380885, + "1": 0.9036544165403748, + "2": 0.8852853417209576 + }, + "precision": { + "0": 0.46266550747394874, + "1": 0.5006997289279373, + "2": 0.35645658525044965 + }, + "recall": { + "0": 0.7177674144559312, + "1": 0.8081598604228669, + "2": 0.8493136802696281 + }, + "f1": { + "0": 0.41319613786232107, + "1": 0.4754941469750645, + "2": 0.360730185885486 + }, + "micro_accuracy": { + "0": 0.7768306777841988, + "1": 0.8595582386653342, + "2": 0.9702097516823422 + }, + "coverage": { + "0": 0.9178601197241797, + "1": 0.9288285216337047, + "2": 0.9627566871258619 + } + } + }, + { + "thresholds": [ + 0.36, + 0.36, + 0.38 + ], + "scores": { + "accuracy": { + "0": 0.8061159791694724, + "1": 0.9053191145421334, + "2": 0.8866350891254445 + }, + "precision": { + "0": 0.4753023599260483, + "1": 0.5137904005578058, + "2": 0.3645790123282969 + }, + "recall": { + "0": 0.7152197694537384, + "1": 0.8048293901429157, + "2": 0.8480231065130868 + }, + "f1": { + "0": 0.42088392191290896, + "1": 0.48394150506753747, + "2": 0.36824251204586056 + }, + "micro_accuracy": { + "0": 0.7789445286073007, + "1": 0.8618477681682174, + "2": 0.9720290771175727 + }, + "coverage": { + "0": 0.9128400394028946, + "1": 0.9243388648935364, + "2": 0.9590058346593923 + } + } + }, + { + "thresholds": [ + 0.38, + 0.38, + 0.4 + ], + "scores": { + "accuracy": { + "0": 0.8102718744255003, + "1": 0.9106335976620314, + "2": 0.8887590601223734 + }, + "precision": { + "0": 0.48026387830211076, + "1": 0.5205366724830406, + "2": 0.365497275421929 + }, + "recall": { + "0": 0.7133108958838734, + "1": 0.8025712905191771, + "2": 0.8469842965451629 + }, + "f1": { + "0": 0.4237305192158521, + "1": 0.48860497020747673, + "2": 0.3684940650876208 + }, + "micro_accuracy": { + "0": 0.781108443795011, + "1": 0.8640932685177556, + "2": 0.9735267308683073 + }, + "coverage": { + "0": 0.9074979161930742, + "1": 0.9196787148594378, + "2": 0.9560127301659468 + } + } + }, + { + "thresholds": [ + 0.4, + 0.4, + 0.42 + ], + "scores": { + "accuracy": { + "0": 0.8142029651733383, + "1": 0.9127337753893178, + "2": 0.8903954446245749 + }, + "precision": { + "0": 0.4894925400165572, + "1": 0.5263323086213255, + "2": 0.3843170320582827 + }, + "recall": { + "0": 0.7104877698259232, + "1": 0.7997681691598476, + "2": 0.8458356381290326 + }, + "f1": { + "0": 0.42963953139139893, + "1": 0.4925337110195625, + "2": 0.38610953189122915 + }, + "micro_accuracy": { + "0": 0.7829903401931961, + "1": 0.8656580499617113, + "2": 0.9751706026301653 + }, + "coverage": { + "0": 0.9020989618852769, + "1": 0.9153027203152232, + "2": 0.9521671592028491 + } + } + }, + { + "thresholds": [ + 0.40726801455020906, + 0.42, + 0.4348362550139427 + ], + "scores": { + "accuracy": { + "0": 0.814371421668353, + "1": 0.9147977310703275, + "2": 0.8913454793916152 + }, + "precision": { + "0": 0.49265026967526404, + "1": 0.5379319699416657, + "2": 0.38699608818993664 + }, + "recall": { + "0": 0.7094086191288954, + "1": 0.7978078655614076, + "2": 0.8449444533928958 + }, + "f1": { + "0": 0.4316444171880959, + "1": 0.5018266064292585, + "2": 0.3875062521496413 + }, + "micro_accuracy": { + "0": 0.7836422155373709, + "1": 0.8674621157004179, + "2": 0.9761572226656026 + }, + "coverage": { + "0": 0.9005266348412518, + "1": 0.9113245434568462, + "2": 0.9494582101992877 + } + } + }, + { + "thresholds": [ + 0.42, + 0.44, + 0.44 + ], + "scores": { + "accuracy": { + "0": 0.8165726597160966, + "1": 0.9172908680692804, + "2": 0.9320590302683619 + }, + "precision": { + "0": 0.4992309522216963, + "1": 0.5475470219890185, + "2": 0.38732556448234834 + }, + "recall": { + "0": 0.7082293689829622, + "1": 0.7966156419980953, + "2": 0.8445572067500937 + }, + "f1": { + "0": 0.43618024574507347, + "1": 0.5094742690804192, + "2": 0.38757340693724673 + }, + "micro_accuracy": { + "0": 0.785136704317534, + "1": 0.8694181043485526, + "2": 0.9764757568495886 + }, + "coverage": { + "0": 0.8972683185572479, + "1": 0.9069864363112828, + "2": 0.9486246874289611 + } + } + }, + { + "thresholds": [ + 0.44, + 0.46, + 0.46 + ], + "scores": { + "accuracy": { + "0": 0.818202698416671, + "1": 0.9187062744587372, + "2": 0.9333303723941576 + }, + "precision": { + "0": 0.5083246840838409, + "1": 0.5598411462238067, + "2": 0.39714760012361144 + }, + "recall": { + "0": 0.7061064471834975, + "1": 0.794747283616046, + "2": 0.8402737241890896 + }, + "f1": { + "0": 0.4421810224917585, + "1": 0.5195520475653899, + "2": 0.3959015737574555 + }, + "micro_accuracy": { + "0": 0.7873307975095093, + "1": 0.871444775868588, + "2": 0.9780272654370489 + }, + "coverage": { + "0": 0.8914715465636129, + "1": 0.9018337500947184, + "2": 0.9449117223611427 + } + } + }, + { + "thresholds": [ + 0.46, + 0.4721683979034424, + 0.48 + ], + "scores": { + "accuracy": { + "0": 0.8216528268918604, + "1": 0.9191271979155018, + "2": 0.9356936341534471 + }, + "precision": { + "0": 0.5197542840367871, + "1": 0.5646489743852565, + "2": 0.39848590943735746 + }, + "recall": { + "0": 0.7033856431369601, + "1": 0.7918106282071572, + "2": 0.8359966759326691 + }, + "f1": { + "0": 0.45005094795386347, + "1": 0.5221822984510738, + "2": 0.39591057599179935 + }, + "micro_accuracy": { + "0": 0.7895299830990736, + "1": 0.8725417869864891, + "2": 0.9796000563868136 + }, + "coverage": { + "0": 0.885485337576722, + "1": 0.898745927104645, + "2": 0.9406872774115329 + } + } + }, + { + "thresholds": [ + 0.48, + 0.48, + 0.5 + ], + "scores": { + "accuracy": { + "0": 0.8250727833287097, + "1": 0.921304494230147, + "2": 0.9403285848012863 + }, + "precision": { + "0": 0.5294065693297344, + "1": 0.5684430608972063, + "2": 0.39918063028234924 + }, + "recall": { + "0": 0.6980545289622085, + "1": 0.7914010398404115, + "2": 0.8315904635233705 + }, + "f1": { + "0": 0.45566964173481894, + "1": 0.5251583572397656, + "2": 0.3954566839294379 + }, + "micro_accuracy": { + "0": 0.7918713903973795, + "1": 0.8732605528221805, + "2": 0.9807342417013707 + }, + "coverage": { + "0": 0.8790634235053422, + "1": 0.897116768962643, + "2": 0.9370690308403425 + } + } + }, + { + "thresholds": [ + 0.5, + 0.5, + 0.52 + ], + "scores": { + "accuracy": { + "0": 0.8258764744309126, + "1": 0.9239423548854965, + "2": 0.9413572060575478 + }, + "precision": { + "0": 0.5371887096441423, + "1": 0.5773885750653416, + "2": 0.40359946510948885 + }, + "recall": { + "0": 0.693896845329986, + "1": 0.7889399287021546, + "2": 0.8299056827127178 + }, + "f1": { + "0": 0.45959939045256354, + "1": 0.5314216593392571, + "2": 0.39869109560731425 + }, + "micro_accuracy": { + "0": 0.7948094255619502, + "1": 0.8755947323704333, + "2": 0.9821124015268415 + }, + "coverage": { + "0": 0.8722626354474502, + "1": 0.8918693642494506, + "2": 0.9330150791846632 + } + } + }, + { + "thresholds": [ + 0.52, + 0.52, + 0.54 + ], + "scores": { + "accuracy": { + "0": 0.8278567132033317, + "1": 0.9254899098874031, + "2": 0.9458681438289553 + }, + "precision": { + "0": 0.5475253505950252, + "1": 0.5905135861117196, + "2": 0.423434024635639 + }, + "recall": { + "0": 0.691673753255708, + "1": 0.7867644745546887, + "2": 0.8057073351862506 + }, + "f1": { + "0": 0.46647619773128607, + "1": 0.5418630290818433, + "2": 0.4092956877918488 + }, + "micro_accuracy": { + "0": 0.7980899811626583, + "1": 0.8780133356129253, + "2": 0.9833713726768829 + }, + "coverage": { + "0": 0.8648556490111389, + "1": 0.8864135788436766, + "2": 0.9296052133060544 + } + } + }, + { + "thresholds": [ + 0.54, + 0.54, + 0.56 + ], + "scores": { + "accuracy": { + "0": 0.8297028621027938, + "1": 0.926765421807196, + "2": 0.9464879313570388 + }, + "precision": { + "0": 0.5626650435675139, + "1": 0.6081904664846746, + "2": 0.42486752399223343 + }, + "recall": { + "0": 0.686856842117402, + "1": 0.782932191397333, + "2": 0.8026342561437356 + }, + "f1": { + "0": 0.4760733446836429, + "1": 0.5553838361820364, + "2": 0.4093211170854322 + }, + "micro_accuracy": { + "0": 0.8016496030780798, + "1": 0.8805832132642308, + "2": 0.9843072264506098 + }, + "coverage": { + "0": 0.8566909146018035, + "1": 0.8809009623399258, + "2": 0.925892248238236 + } + } + }, + { + "thresholds": [ + 0.56, + 0.56, + 0.58 + ], + "scores": { + "accuracy": { + "0": 0.8341827562067438, + "1": 0.9289461100033847, + "2": 0.9480548438988666 + }, + "precision": { + "0": 0.5737812635528933, + "1": 0.6197140139591367, + "2": 0.43547720360620623 + }, + "recall": { + "0": 0.6831795653950545, + "1": 0.7808420980116791, + "2": 0.8009834173515145 + }, + "f1": { + "0": 0.48277968610449334, + "1": 0.564002359186121, + "2": 0.4186556387807235 + }, + "micro_accuracy": { + "0": 0.8043720722730314, + "1": 0.8827716003980444, + "2": 0.9851546137735616 + }, + "coverage": { + "0": 0.849246040766841, + "1": 0.8756914450253845, + "2": 0.9225960445555809 + } + } + }, + { + "thresholds": [ + 0.5642488598823548, + 0.58, + 0.6 + ], + "scores": { + "accuracy": { + "0": 0.8343967507844856, + "1": 0.9296693535248078, + "2": 0.9500768780238483 + }, + "precision": { + "0": 0.576766466944545, + "1": 0.6325941970062141, + "2": 0.43934306877275126 + }, + "recall": { + "0": 0.6817380832627986, + "1": 0.7771235868551002, + "2": 0.7991651235752025 + }, + "f1": { + "0": 0.48445702278574443, + "1": 0.5726753101536495, + "2": 0.42043376133080945 + }, + "micro_accuracy": { + "0": 0.8049429063037697, + "1": 0.8847526217309951, + "2": 0.9861062439446724 + }, + "coverage": { + "0": 0.8477494885201182, + "1": 0.870690308403425, + "2": 0.9189777979843904 + } + } + }, + { + "thresholds": [ + 0.58, + 0.6, + 0.62 + ], + "scores": { + "accuracy": { + "0": 0.840016542849061, + "1": 0.9304978229804818, + "2": 0.9513026650344162 + }, + "precision": { + "0": 0.5827800373403128, + "1": 0.6373570707159779, + "2": 0.45620187988519756 + }, + "recall": { + "0": 0.676394741560293, + "1": 0.7740104276669912, + "2": 0.797676589317333 + }, + "f1": { + "0": 0.48580643509897997, + "1": 0.5750553951542571, + "2": 0.435166670753753 + }, + "micro_accuracy": { + "0": 0.8068557547403226, + "1": 0.8865491955784174, + "2": 0.9870237380740495 + }, + "coverage": { + "0": 0.8422179283170418, + "1": 0.8654429036902326, + "2": 0.9153406077138744 + } + } + }, + { + "thresholds": [ + 0.6, + 0.62, + 0.64 + ], + "scores": { + "accuracy": { + "0": 0.8434050884702118, + "1": 0.9334972883429207, + "2": 0.9518665592286801 + }, + "precision": { + "0": 0.5924877077608144, + "1": 0.6497495342411421, + "2": 0.45932648178267177 + }, + "recall": { + "0": 0.67335275941804, + "1": 0.7712223146170564, + "2": 0.7941774654119973 + }, + "f1": { + "0": 0.4912442056663382, + "1": 0.5839091456019678, + "2": 0.4360227184902962 + }, + "micro_accuracy": { + "0": 0.8090269902472216, + "1": 0.8884875448758892, + "2": 0.9879683311514245 + }, + "coverage": { + "0": 0.8352277032658938, + "1": 0.8601007804804122, + "2": 0.9116276426460559 + } + } + }, + { + "thresholds": [ + 0.62, + 0.64, + 0.66 + ], + "scores": { + "accuracy": { + "0": 0.8453515960940717, + "1": 0.9349890148369837, + "2": 0.9503677505486245 + }, + "precision": { + "0": 0.6004984612137487, + "1": 0.6580445727308348, + "2": 0.459554988014946 + }, + "recall": { + "0": 0.6672070956028153, + "1": 0.7671891885765426, + "2": 0.7889250953405956 + }, + "f1": { + "0": 0.4937547279284535, + "1": 0.5884020800330996, + "2": 0.4346883335571761 + }, + "micro_accuracy": { + "0": 0.8117420949068778, + "1": 0.8905512334596716, + "2": 0.9886522455620684 + }, + "coverage": { + "0": 0.8279533227248617, + "1": 0.8546828824732894, + "2": 0.9081420019701447 + } + } + }, + { + "thresholds": [ + 0.64, + 0.66, + 0.68 + ], + "scores": { + "accuracy": { + "0": 0.849510905460206, + "1": 0.941167926018317, + "2": 0.9517455996214104 + }, + "precision": { + "0": 0.6110614384928408, + "1": 0.6667159016221129, + "2": 0.4739752602875825 + }, + "recall": { + "0": 0.6622471197486555, + "1": 0.760417751338982, + "2": 0.7860720751349883 + }, + "f1": { + "0": 0.49888280813554536, + "1": 0.592116152062726, + "2": 0.44573157867046714 + }, + "micro_accuracy": { + "0": 0.8139336317902801, + "1": 0.8923601819641424, + "2": 0.9894403821575981 + }, + "coverage": { + "0": 0.820906266575737, + "1": 0.8495112525573995, + "2": 0.9041638251117678 + } + } + }, + { + "thresholds": [ + 0.66, + 0.6641409486532212, + 0.7000000000000001 + ], + "scores": { + "accuracy": { + "0": 0.8530784254621185, + "1": 0.9413540245413293, + "2": 0.9519731134663748 + }, + "precision": { + "0": 0.6200853636129756, + "1": 0.6684306475816483, + "2": 0.47640811297769775 + }, + "recall": { + "0": 0.6573378313172051, + "1": 0.7600138308687868, + "2": 0.7840505827382493 + }, + "f1": { + "0": 0.5028067961767968, + "1": 0.5933555345224482, + "2": 0.4460861412747428 + }, + "micro_accuracy": { + "0": 0.8159694755944349, + "1": 0.892621944413439, + "2": 0.9901108843394281 + }, + "coverage": { + "0": 0.8142380844131242, + "1": 0.8485830112904448, + "2": 0.9003371978479957 + } + } + }, + { + "thresholds": [ + 0.68, + 0.68, + 0.72 + ], + "scores": { + "accuracy": { + "0": 0.8565870875685644, + "1": 0.9433004359366995, + "2": 0.9536276956716655 + }, + "precision": { + "0": 0.6302499175365239, + "1": 0.6747260623600524, + "2": 0.5037151109795719 + }, + "recall": { + "0": 0.6534541243833436, + "1": 0.7576792507787716, + "2": 0.7801491039086691 + }, + "f1": { + "0": 0.5070833858574163, + "1": 0.5956940628128364, + "2": 0.4651625807682649 + }, + "micro_accuracy": { + "0": 0.818482622673832, + "1": 0.8941469210249053, + "2": 0.9909058223885964 + }, + "coverage": { + "0": 0.8072478593619762, + "1": 0.8450594832158824, + "2": 0.8957149352125483 + } + } + }, + { + "thresholds": [ + 0.7000000000000001, + 0.7000000000000001, + 0.7265320539474488 + ], + "scores": { + "accuracy": { + "0": 0.8607155124745121, + "1": 0.945030910750408, + "2": 0.9550453730370514 + }, + "precision": { + "0": 0.6454744315883106, + "1": 0.6894534142252635, + "2": 0.503873671253715 + }, + "recall": { + "0": 0.6492096741301047, + "1": 0.754679270016291, + "2": 0.7795729848430055 + }, + "f1": { + "0": 0.5152711842533374, + "1": 0.6053073134285726, + "2": 0.4650402150631324 + }, + "micro_accuracy": { + "0": 0.8214980314026848, + "1": 0.8965338150615333, + "2": 0.9912304857124701 + }, + "coverage": { + "0": 0.7987042509661286, + "1": 0.8389217246343866, + "2": 0.8943131014624536 + } + } + }, + { + "thresholds": [ + 0.7015465497970581, + 0.72, + 0.74 + ], + "scores": { + "accuracy": { + "0": 0.860684518603136, + "1": 0.9464961406955328, + "2": 0.9552600432937275 + }, + "precision": { + "0": 0.6478672204501922, + "1": 0.7034869583318902, + "2": 0.5181285778325745 + }, + "recall": { + "0": 0.6485348615879072, + "1": 0.7496591280792626, + "2": 0.7779193775717113 + }, + "f1": { + "0": 0.5162958921527044, + "1": 0.6129431266588365, + "2": 0.4767210562684453 + }, + "micro_accuracy": { + "0": 0.8218049753133309, + "1": 0.8982808022922636, + "2": 0.9915828851999064 + }, + "coverage": { + "0": 0.7980601651890581, + "1": 0.8330302341441237, + "2": 0.8912442221717057 + } + } + }, + { + "thresholds": [ + 0.72, + 0.74, + 0.76 + ], + "scores": { + "accuracy": { + "0": 0.8627696913793397, + "1": 0.9504155038731678, + "2": 0.9566545408328925 + }, + "precision": { + "0": 0.6602730541638716, + "1": 0.7157350696610114, + "2": 0.5458928751562709 + }, + "recall": { + "0": 0.6446075775342126, + "1": 0.7466807871477184, + "2": 0.7749523569592671 + }, + "f1": { + "0": 0.5216387963076135, + "1": 0.621315833375916, + "2": 0.5009516162942736 + }, + "micro_accuracy": { + "0": 0.8236083487095924, + "1": 0.9000274838532363, + "2": 0.9922871488088879 + }, + "coverage": { + "0": 0.7905395165567932, + "1": 0.8271197999545351, + "2": 0.8866598469349094 + } + } + }, + { + "thresholds": [ + 0.74, + 0.76, + 0.78 + ], + "scores": { + "accuracy": { + "0": 0.8660094924837376, + "1": 0.9555635348434637, + "2": 0.9567270155114911 + }, + "precision": { + "0": 0.6696387429318983, + "1": 0.7246432737278267, + "2": 0.561379117244237 + }, + "recall": { + "0": 0.639112569953864, + "1": 0.7387340909983309, + "2": 0.7711916626337704 + }, + "f1": { + "0": 0.5237697832934405, + "1": 0.6233625307746671, + "2": 0.5132983314590772 + }, + "micro_accuracy": { + "0": 0.8257586757659359, + "1": 0.9020753018306055, + "2": 0.9930175099366205 + }, + "coverage": { + "0": 0.782791543532621, + "1": 0.8206221110858528, + "2": 0.8817344851102523 + } + } + }, + { + "thresholds": [ + 0.76, + 0.78, + 0.8 + ], + "scores": { + "accuracy": { + "0": 0.8681478259083769, + "1": 0.9557905396242385, + "2": 0.9573925336101781 + }, + "precision": { + "0": 0.6861951645200371, + "1": 0.7314738899655855, + "2": 0.5630824718743183 + }, + "recall": { + "0": 0.6327669329140457, + "1": 0.7344038157698674, + "2": 0.7683558773208468 + }, + "f1": { + "0": 0.531605423621865, + "1": 0.6234757508922391, + "2": 0.5131618146455549 + }, + "micro_accuracy": { + "0": 0.8284525993883792, + "1": 0.9036899080433012, + "2": 0.9936265825519596 + }, + "coverage": { + "0": 0.774323709934076, + "1": 0.8137266045313328, + "2": 0.8768280669849208 + } + } + }, + { + "thresholds": [ + 0.78, + 0.8, + 0.8200000000000001 + ], + "scores": { + "accuracy": { + "0": 0.8679002098990244, + "1": 0.9561499239845278, + "2": 0.9615148807994387 + }, + "precision": { + "0": 0.6962093718459521, + "1": 0.7446893933030373, + "2": 0.5663125555899495 + }, + "recall": { + "0": 0.6263089062067271, + "1": 0.7287505110170497, + "2": 0.7641250150122423 + }, + "f1": { + "0": 0.5339012693977214, + "1": 0.6315307401552623, + "2": 0.5132892137065024 + }, + "micro_accuracy": { + "0": 0.8303677636796194, + "1": 0.9052683476545993, + "2": 0.9942804949655307 + }, + "coverage": { + "0": 0.7644161551867849, + "1": 0.8068879290747897, + "2": 0.8710881260892627 + } + } + }, + { + "thresholds": [ + 0.8, + 0.8173000812530518, + 0.84 + ], + "scores": { + "accuracy": { + "0": 0.8687396782055973, + "1": 0.9574296850635112, + "2": 0.9617420148999293 + }, + "precision": { + "0": 0.711926533395416, + "1": 0.7612636352496397, + "2": 0.6182481616565773 + }, + "recall": { + "0": 0.6187323253658831, + "1": 0.72413085327449, + "2": 0.7613421559232516 + }, + "f1": { + "0": 0.539196599080422, + "1": 0.640414254426473, + "2": 0.5580319442335372 + }, + "micro_accuracy": { + "0": 0.832396486825596, + "1": 0.9068231841526045, + "2": 0.9947650859708684 + }, + "coverage": { + "0": 0.7549064181253315, + "1": 0.8004281276047587, + "2": 0.8648745927104645 + } + } + }, + { + "thresholds": [ + 0.810045599937439, + 0.8200000000000001, + 0.86 + ], + "scores": { + "accuracy": { + "0": 0.870699432932174, + "1": 0.9576547962600784, + "2": 0.9597191423643536 + }, + "precision": { + "0": 0.7202958483088095, + "1": 0.7632958223032213, + "2": 0.6411675634636241 + }, + "recall": { + "0": 0.614955089315207, + "1": 0.7235081828489902, + "2": 0.7540666573688601 + }, + "f1": { + "0": 0.5407977871279015, + "1": 0.6417176885877567, + "2": 0.5736994601267553 + }, + "micro_accuracy": { + "0": 0.8334385654754388, + "1": 0.9070654879002631, + "2": 0.9954282432969654 + }, + "coverage": { + "0": 0.7500757747973024, + "1": 0.7992536182465712, + "2": 0.8577328180647117 + } + } + }, + { + "thresholds": [ + 0.8200000000000001, + 0.84, + 0.88 + ], + "scores": { + "accuracy": { + "0": 0.873212719635245, + "1": 0.9588407072548629, + "2": 0.9582128582385835 + }, + "precision": { + "0": 0.7284264060103924, + "1": 0.7840804997993491, + "2": 0.6636061023610282 + }, + "recall": { + "0": 0.6093998487827893, + "1": 0.7176342465242725, + "2": 0.7425988016566217 + }, + "f1": { + "0": 0.540960548228617, + "1": 0.6511774276013057, + "2": 0.5872782340256574 + }, + "micro_accuracy": { + "0": 0.8345155467419215, + "1": 0.9089820646057326, + "2": 0.995900543623563 + }, + "coverage": { + "0": 0.7451125255739941, + "1": 0.7911078275365614, + "2": 0.8502690005304235 + } + } + }, + { + "thresholds": [ + 0.8280269503593445, + 0.86, + 0.8882197618484498 + ], + "scores": { + "accuracy": { + "0": 0.8755166405852203, + "1": 0.9597750860913724, + "2": 0.9583659280353924 + }, + "precision": { + "0": 0.7362820959348587, + "1": 0.8044117951579158, + "2": 0.6637474101835045 + }, + "recall": { + "0": 0.6075669492667327, + "1": 0.707563243940928, + "2": 0.7409207458226198 + }, + "f1": { + "0": 0.5430735533140526, + "1": 0.6588712967338904, + "2": 0.5865824425722952 + }, + "micro_accuracy": { + "0": 0.8355803422957866, + "1": 0.9106740620534308, + "2": 0.9959968690595997 + }, + "coverage": { + "0": 0.7404902629385466, + "1": 0.7821285140562249, + "2": 0.8470675153443965 + } + } + }, + { + "thresholds": [ + 0.84, + 0.8708856105804443, + 0.9 + ], + "scores": { + "accuracy": { + "0": 0.8769224490575912, + "1": 0.9629823236784678, + "2": 0.9645260385390046 + }, + "precision": { + "0": 0.7442543157731273, + "1": 0.8168891977985718, + "2": 0.6639873022110607 + }, + "recall": { + "0": 0.6014535765299508, + "1": 0.703150166196618, + "2": 0.7368696388075908 + }, + "f1": { + "0": 0.5437236656636083, + "1": 0.6655370235633968, + "2": 0.5848466217757495 + }, + "micro_accuracy": { + "0": 0.8371924933529518, + "1": 0.911799848813675, + "2": 0.9964420023870111 + }, + "coverage": { + "0": 0.7338599681745851, + "1": 0.7768621656437069, + "2": 0.8412328559521103 + } + } + }, + { + "thresholds": [ + 0.86, + 0.88, + 0.92 + ], + "scores": { + "accuracy": { + "0": 0.8792286866477582, + "1": 0.9657786887953099, + "2": 0.9646760912453242 + }, + "precision": { + "0": 0.7589793036489415, + "1": 0.8287011609081786, + "2": 0.686966461932264 + }, + "recall": { + "0": 0.5923447925665252, + "1": 0.6962414785381901, + "2": 0.7290134169926065 + }, + "f1": { + "0": 0.546687692148275, + "1": 0.6696744629969015, + "2": 0.6007366943693582 + }, + "micro_accuracy": { + "0": 0.8397814724345336, + "1": 0.9129708756937283, + "2": 0.9968965359864908 + }, + "coverage": { + "0": 0.7212434644237327, + "1": 0.7714253239372585, + "2": 0.8301507918466318 + } + } + }, + { + "thresholds": [ + 0.88, + 0.9, + 0.9400000000000001 + ], + "scores": { + "accuracy": { + "0": 0.8881939767019219, + "1": 0.9670996231033473, + "2": 0.9781653526457934 + }, + "precision": { + "0": 0.7851414291925571, + "1": 0.8436053547004757, + "2": 0.6909003493431481 + }, + "recall": { + "0": 0.58282573774426, + "1": 0.685594659899926, + "2": 0.7172838569843555 + }, + "f1": { + "0": 0.5556807211623839, + "1": 0.6721140489488696, + "2": 0.5959725420201509 + }, + "micro_accuracy": { + "0": 0.8430232558139535, + "1": 0.9147536080161519, + "2": 0.9975379183796715 + }, + "coverage": { + "0": 0.707054633628855, + "1": 0.7600022732439191, + "2": 0.8155830870652421 + } + } + }, + { + "thresholds": [ + 0.8937377750873566, + 0.9172637760639191, + 0.9589176177978515 + ], + "scores": { + "accuracy": { + "0": 0.8909743658123396, + "1": 0.9679024780389913, + "2": 0.9914099927551457 + }, + "precision": { + "0": 0.7999819927343933, + "1": 0.8571761492520562, + "2": 0.7392934423661511 + }, + "recall": { + "0": 0.5776174738700263, + "1": 0.6747444387942375, + "2": 0.7049905252823764 + }, + "f1": { + "0": 0.5596097287337237, + "1": 0.67482540891783, + "2": 0.6097549468736347 + }, + "micro_accuracy": { + "0": 0.8448744428742254, + "1": 0.9163794851003446, + "2": 0.9980728968405025 + }, + "coverage": { + "0": 0.697052360384936, + "1": 0.7475941501856482, + "2": 0.7962415700538001 + } + } + }, + { + "thresholds": [ + 0.9, + 0.92, + 0.96 + ], + "scores": { + "accuracy": { + "0": 0.8949919585301784, + "1": 0.9681021829095615, + "2": 0.9933949494814979 + }, + "precision": { + "0": 0.8020716238964553, + "1": 0.8573629012800298, + "2": 0.739312514650181 + }, + "recall": { + "0": 0.5711452405107444, + "1": 0.6734312365614762, + "2": 0.7043557897606709 + }, + "f1": { + "0": 0.5550549519629179, + "1": 0.6738503870324001, + "2": 0.609419602563795 + }, + "micro_accuracy": { + "0": 0.8456756312647203, + "1": 0.9167788986862501, + "2": 0.9981407322654462 + }, + "coverage": { + "0": 0.6917102371751156, + "1": 0.7454913995605061, + "2": 0.7947260741077518 + } + } + }, + { + "thresholds": [ + 0.92, + 0.9400000000000001, + 0.966471254825592 + ], + "scores": { + "accuracy": { + "0": 0.8957767835624498, + "1": 0.9726542438470203, + "2": 0.9955854528269081 + }, + "precision": { + "0": 0.8182594626456583, + "1": 0.8735618842739201, + "2": 0.7395038777892725 + }, + "recall": { + "0": 0.5554809343411186, + "1": 0.6574712200821651, + "2": 0.6986717712105687 + }, + "f1": { + "0": 0.5520059255576415, + "1": 0.6714835135094154, + "2": 0.6065093177805807 + }, + "micro_accuracy": { + "0": 0.8480121635319293, + "1": 0.9198406706412225, + "2": 0.998285935010381 + }, + "coverage": { + "0": 0.6728044252481624, + "1": 0.727646434795787, + "2": 0.7846859134651815 + } + } + }, + { + "thresholds": [ + 0.9400000000000001, + 0.96, + 0.98 + ], + "scores": { + "accuracy": { + "0": 0.9013505089477285, + "1": 0.9752950677587091, + "2": 0.9956956033513816 + }, + "precision": { + "0": 0.8456499151805978, + "1": 0.8964360610911901, + "2": 0.7904686497581408 + }, + "recall": { + "0": 0.5339801666958917, + "1": 0.63426965311141, + "2": 0.6714464744415302 + }, + "f1": { + "0": 0.5471785556062708, + "1": 0.6676929300709147, + "2": 0.6328377333948696 + }, + "micro_accuracy": { + "0": 0.8512177337027855, + "1": 0.9229085603112841, + "2": 0.9986497299459892 + }, + "coverage": { + "0": 0.6494847313783436, + "1": 0.7010684246419641, + "2": 0.7575964234295673 + } + } + }, + { + "thresholds": [ + 0.9401487052440644, + 0.9626085698604585, + 0.9830389022827148 + ], + "scores": { + "accuracy": { + "0": 0.9013489509973637, + "1": 0.9752962778710735, + "2": 0.9957223420416491 + }, + "precision": { + "0": 0.8456525277037532, + "1": 0.9022078884997011, + "2": 0.8538413755473735 + }, + "recall": { + "0": 0.5338394045510066, + "1": 0.6313432782731246, + "2": 0.6646996767339038 + }, + "f1": { + "0": 0.5470732974105376, + "1": 0.6691753900168186, + "2": 0.6771703021147755 + }, + "micro_accuracy": { + "0": 0.8512736716174024, + "1": 0.9235498966155186, + "2": 0.9987338246093849 + }, + "coverage": { + "0": 0.6492195195877851, + "1": 0.6962946124119118, + "2": 0.7480677426687884 + } + } + }, + { + "thresholds": [ + 0.96, + 0.98, + 0.9931254148483276 + ], + "scores": { + "accuracy": { + "0": 0.9008028366870268, + "1": 0.9771462948998824, + "2": 0.9962749640577209 + }, + "precision": { + "0": 0.868852213327367, + "1": 0.9254813608920299, + "2": 0.8964573727394919 + }, + "recall": { + "0": 0.5045919142349061, + "1": 0.5924477978591141, + "2": 0.6286837426567555 + }, + "f1": { + "0": 0.5343229886512725, + "1": 0.6506375298796191, + "2": 0.6802764870917095 + }, + "micro_accuracy": { + "0": 0.8550024612355402, + "1": 0.9283094075849918, + "2": 0.999044603373915 + }, + "coverage": { + "0": 0.6157460028794423, + "1": 0.6558498143517466, + "2": 0.6939834810941881 + } + } + }, + { + "thresholds": [ + 0.9681806206703186, + 0.9829536110162734, + 0.9967779815196992 + ], + "scores": { + "accuracy": { + "0": 0.9076420542603991, + "1": 0.9778373458608859, + "2": 0.9963513658138929 + }, + "precision": { + "0": 0.8800516658493764, + "1": 0.9339767231608709, + "2": 0.9500987164349732 + }, + "recall": { + "0": 0.4910632013550715, + "1": 0.5819184449113037, + "2": 0.5992691077492797 + }, + "f1": { + "0": 0.5265140342387152, + "1": 0.6460356616121775, + "2": 0.6839936208490379 + }, + "micro_accuracy": { + "0": 0.8564268493845959, + "1": 0.9292641354178911, + "2": 0.9992665180143175 + }, + "coverage": { + "0": 0.59718117754035, + "1": 0.6446162006516633, + "2": 0.6456770478138971 + } + } + }, + { + "thresholds": [ + 0.98, + 0.9915003895759583, + 0.9984682559967042 + ], + "scores": { + "accuracy": { + "0": 0.9142480837593111, + "1": 0.9789690918523727, + "2": 0.9955358011469674 + }, + "precision": { + "0": 0.9054316601379209, + "1": 0.942373982004299, + "2": 0.9472329602333835 + }, + "recall": { + "0": 0.4601162131776475, + "1": 0.537128632439936, + "2": 0.5369684974795139 + }, + "f1": { + "0": 0.5080963898945071, + "1": 0.6099925087537343, + "2": 0.6232596136519938 + }, + "micro_accuracy": { + "0": 0.8611514926130025, + "1": 0.9341671944268525, + "2": 0.9992649878563211 + }, + "coverage": { + "0": 0.5603356823520497, + "1": 0.5982420247025839, + "2": 0.5927862392968098 + } + } + }, + { + "thresholds": [ + 0.9837145298719406, + 0.9961918264627456, + 0.9992004811763763 + ], + "scores": { + "accuracy": { + "0": 0.9173894958348995, + "1": 0.9801716842031851, + "2": 0.9956171015368966 + }, + "precision": { + "0": 0.9111944501471072, + "1": 0.9526417139935408, + "2": 0.9466402935737126 + }, + "recall": { + "0": 0.44637542453304024, + "1": 0.4860152539435413, + "2": 0.49936592815838055 + }, + "f1": { + "0": 0.49680678480018636, + "1": 0.5661640932159095, + "2": 0.5922292460696175 + }, + "micro_accuracy": { + "0": 0.8624076912358924, + "1": 0.9399216673660652, + "2": 0.9994779521804197 + }, + "coverage": { + "0": 0.5438357202394484, + "1": 0.5417140259149806, + "2": 0.5443093127225884 + } + } + }, + { + "thresholds": [ + 0.9909707605838776, + 0.9981474876403809, + 0.9995549917221069 + ], + "scores": { + "accuracy": { + "0": 0.9226732588389033, + "1": 0.9793237956348064, + "2": 0.9952654376772794 + }, + "precision": { + "0": 0.9261726468469372, + "1": 0.952780069889678, + "2": 0.9912468817743226 + }, + "recall": { + "0": 0.4040904903655869, + "1": 0.43426325079615746, + "2": 0.46421101098424783 + }, + "f1": { + "0": 0.46302311329384627, + "1": 0.5172729957093558, + "2": 0.5861461448813108 + }, + "micro_accuracy": { + "0": 0.8666056166056166, + "1": 0.9440741027827301, + "2": 0.9995410914375311 + }, + "coverage": { + "0": 0.4964764719254376, + "1": 0.48878532999924224, + "2": 0.49535879366522695 + } + } + }, + { + "thresholds": [ + 0.9953224390745163, + 0.9990358114242552, + 0.9997485339641571 + ], + "scores": { + "accuracy": { + "0": 0.9258440983335173, + "1": 0.981279466988423, + "2": 0.9991547170692637 + }, + "precision": { + "0": 0.9334567308683698, + "1": 0.9637883239225851, + "2": 0.9909366423707013 + }, + "recall": { + "0": 0.3583805534403548, + "1": 0.3942566981580702, + "2": 0.43320356126072573 + }, + "f1": { + "0": 0.42214170291497527, + "1": 0.4790830065745257, + "2": 0.5559982979186752 + }, + "micro_accuracy": { + "0": 0.8702950370402089, + "1": 0.9483896003104385, + "2": 0.9995318152798468 + }, + "coverage": { + "0": 0.4423922103508373, + "1": 0.4393612184587406, + "2": 0.4450822156550731 + } + } + }, + { + "thresholds": [ + 0.9975503087043761, + 0.9994596838951111, + 0.9998600482940674 + ], + "scores": { + "accuracy": { + "0": 0.9312329144191163, + "1": 0.9819044313738574, + "2": 0.9994197143975043 + }, + "precision": { + "0": 0.9373212181297006, + "1": 0.9660431290510416, + "2": 0.9898697504611537 + }, + "recall": { + "0": 0.3145284572888511, + "1": 0.3532791965360437, + "2": 0.3910182121031496 + }, + "f1": { + "0": 0.3776565680174864, + "1": 0.4390617579806251, + "2": 0.5126226031939918 + }, + "micro_accuracy": { + "0": 0.8752429071123202, + "1": 0.9521041506533435, + "2": 0.9996629105268227 + }, + "coverage": { + "0": 0.389937106918239, + "1": 0.39433204516177917, + "2": 0.39338486019549895 + } + } + }, + { + "thresholds": [ + 0.9987074375152587, + 0.9997126638889313, + 0.9999242186546324 + ], + "scores": { + "accuracy": { + "0": 0.9475809053982756, + "1": 0.9848708438702063, + "2": 0.9993413836634175 + }, + "precision": { + "0": 0.9519452900307181, + "1": 0.9657178541744774, + "2": 0.9860715961443066 + }, + "recall": { + "0": 0.2824123713134273, + "1": 0.31180289461222715, + "2": 0.3446676983681051 + }, + "f1": { + "0": 0.34523581308371754, + "1": 0.3948433440852503, + "2": 0.46298483021111675 + }, + "micro_accuracy": { + "0": 0.8809021219864459, + "1": 0.9570599613152805, + "2": 0.9996649167876689 + }, + "coverage": { + "0": 0.34102447525952867, + "1": 0.3427862392968099, + "2": 0.33920588012427066 + } + } + }, + { + "thresholds": [ + 0.9992964148521424, + 0.9998370170593261, + 0.9999558925628662 + ], + "scores": { + "accuracy": { + "0": 0.9452268457462674, + "1": 0.9825660745311098, + "2": 0.9992303661291769 + }, + "precision": { + "0": 0.9528131933515639, + "1": 0.9649247474174065, + "2": 0.9858947516748305 + }, + "recall": { + "0": 0.243935562331392, + "1": 0.26913270702486125, + "2": 0.31722180703378045 + }, + "f1": { + "0": 0.30341078843870073, + "1": 0.3478446447877839, + "2": 0.430965191751402 + }, + "micro_accuracy": { + "0": 0.8868495620814013, + "1": 0.9601636933307757, + "2": 0.9996102124342233 + }, + "coverage": { + "0": 0.29415776312798364, + "1": 0.29626051375312573, + "2": 0.29160036371902703 + } + } + }, + { + "thresholds": [ + 0.9996419548988341, + 0.9999200403690338, + 0.999974489212036 + ], + "scores": { + "accuracy": { + "0": 0.9420893176977566, + "1": 0.9845500541121588, + "2": 0.9992008966575969 + }, + "precision": { + "0": 0.9546981170307824, + "1": 0.966355454916321, + "2": 0.9844776002868147 + }, + "recall": { + "0": 0.20561108908174355, + "1": 0.21770495042482726, + "2": 0.28768501341099934 + }, + "f1": { + "0": 0.2601458228426709, + "1": 0.29022239076662526, + "2": 0.39653254996626364 + }, + "micro_accuracy": { + "0": 0.8978976657906941, + "1": 0.9637885186923197, + "2": 0.999614167759858 + }, + "coverage": { + "0": 0.24509358187466848, + "1": 0.24221413957717663, + "2": 0.24549139956050617 + } + } + }, + { + "thresholds": [ + 0.9998294591903688, + 0.9999610185623169, + 0.9999865055084228 + ], + "scores": { + "accuracy": { + "0": 0.9494354161129437, + "1": 0.9803022896161308, + "2": 0.9996192647871751 + }, + "precision": { + "0": 0.9562734814804871, + "1": 0.9628636594824845, + "2": 0.9914253441027162 + }, + "recall": { + "0": 0.16777048665618488, + "1": 0.16961054362513622, + "2": 0.24431723316021 + }, + "f1": { + "0": 0.21745764577817578, + "1": 0.23014525089138316, + "2": 0.3459416738939565 + }, + "micro_accuracy": { + "0": 0.9127856101118134, + "1": 0.9658886894075404, + "2": 0.9997084264748761 + }, + "coverage": { + "0": 0.19483594756384026, + "1": 0.18992952943850874, + "2": 0.19491172236114268 + } + } + }, + { + "thresholds": [ + 0.9999263703823089, + 0.9999795794486999, + 0.9999933242797852 + ], + "scores": { + "accuracy": { + "0": 0.9549007794281774, + "1": 0.9804634019892214, + "2": 0.9996446057200086 + }, + "precision": { + "0": 0.9587552453931764, + "1": 0.9695794480241675, + "2": 0.9970709091061251 + }, + "recall": { + "0": 0.1281579632885123, + "1": 0.13750461659283214, + "2": 0.15960422212144712 + }, + "f1": { + "0": 0.171261367588915, + "1": 0.1897352351749051, + "2": 0.24633039114224953 + }, + "micro_accuracy": { + "0": 0.9379743522638053, + "1": 0.9663023679417122, + "2": 0.9997366688610928 + }, + "coverage": { + "0": 0.1447677502462681, + "1": 0.14560127301659467, + "2": 0.14387739637796468 + } + } + }, + { + "thresholds": [ + 0.9999751806259155, + 0.9999914050102235, + 0.999996781349182 + ], + "scores": { + "accuracy": { + "0": 0.9586943465204335, + "1": 0.9737012523302664, + "2": 0.9994787206765261 + }, + "precision": { + "0": 0.9647220719391435, + "1": 0.9701425438596492, + "2": 0.9928221288515408 + }, + "recall": { + "0": 0.08783660917517165, + "1": 0.09667423765331769, + "2": 0.11801763526197206 + }, + "f1": { + "0": 0.12022555225276674, + "1": 0.13606838779478872, + "2": 0.18809733360001032 + }, + "micro_accuracy": { + "0": 0.9501900380076015, + "1": 0.9627279936558287, + "2": 0.9996194100856327 + }, + "coverage": { + "0": 0.09469955292869592, + "1": 0.0955520193983481, + "2": 0.09954913995605062 + } + } + }, + { + "thresholds": [ + 0.9999936163425446, + 0.9999970197677612, + 0.9999990463256836 + ], + "scores": { + "accuracy": { + "0": 0.9631740196078432, + "1": 0.9814009457861848, + "2": 0.9990448343079924 + }, + "precision": { + "0": 0.9755425002646344, + "1": 0.9828629032258065, + "2": 0.9811111111111112 + }, + "recall": { + "0": 0.05009631202973387, + "1": 0.05483541137016527, + "2": 0.07369236257631447 + }, + "f1": { + "0": 0.07155322295420898, + "1": 0.08111108089186914, + "2": 0.1213299090136771 + }, + "micro_accuracy": { + "0": 0.9424895951570186, + "1": 0.9501711677443895, + "2": 0.9992343032159265 + }, + "coverage": { + "0": 0.05006819731757218, + "1": 0.04980298552701372, + "2": 0.049480942638478444 + } + } + }, + { + "thresholds": [ + 1.0, + 1.0, + 1.0 + ], + "scores": { + "accuracy": { + "0": 0.95, + "1": 0.9723320158102766, + "2": 1.0 + }, + "precision": { + "0": 0.95, + "1": 0.9583333333333334, + "2": 1.0 + }, + "recall": { + "0": 0.001962286384242331, + "1": 0.002759801937539602, + "2": 0.02219090524518843 + }, + "f1": { + "0": 0.0036126928068550518, + "1": 0.005108670591177205, + "2": 0.03552886944676924 + }, + "micro_accuracy": { + "0": 0.8961038961038961, + "1": 0.9247311827956989, + "2": 1.0 + }, + "coverage": { + "0": 0.0014586648480715313, + "1": 0.0017617640372812003, + "2": 0.007122830946427218 + } + } + } + ] + } + }, + "tta_threshold_sensitivity": { + "torch-tta": { + "calibration_max_f1": 0.6347280058274741, + "operating_points": [ + { + "selected_by": "torch-tta", + "threshold": 0.7392672300338745, + "calibration": { + "precision": { + "0": 0.8282279025717098 + }, + "recall": { + "0": 0.6739933965102308 + }, + "f1": { + "0": 0.6307325978180466 + }, + "coverage": { + "0": 0.7845181134654818 + } + }, + "report": { + "precision": { + "0": 0.6694908268387493 + }, + "recall": { + "0": 0.639254202340642 + }, + "f1": { + "0": 0.523858147508227 + }, + "coverage": { + "0": 0.7831893612184587 + } + } + }, + { + "selected_by": "onnx-tta", + "threshold": 0.8280269503593445, + "calibration": { + "precision": { + "0": 0.8803141537986743 + }, + "recall": { + "0": 0.6376967556149961 + }, + "f1": { + "0": 0.633977006332856 + }, + "coverage": { + "0": 0.7406015037593985 + } + }, + "report": { + "precision": { + "0": 0.7366238061924407 + }, + "recall": { + "0": 0.6077235928880539 + }, + "f1": { + "0": 0.5433237416901201 + }, + "coverage": { + "0": 0.7405660377358491 + } + } + } + ] + }, + "onnx-tta": { + "calibration_max_f1": 0.6346849651181691, + "operating_points": [ + { + "selected_by": "torch-tta", + "threshold": 0.7392672300338745, + "calibration": { + "precision": { + "0": 0.8282279025717098 + }, + "recall": { + "0": 0.673688317354558 + }, + "f1": { + "0": 0.6305349204609847 + }, + "coverage": { + "0": 0.7843472317156528 + } + }, + "report": { + "precision": { + "0": 0.6696469729770929 + }, + "recall": { + "0": 0.6391918811108502 + }, + "f1": { + "0": 0.5238253429694868 + }, + "coverage": { + "0": 0.7829809805258771 + } + } + }, + { + "selected_by": "onnx-tta", + "threshold": 0.8280269503593445, + "calibration": { + "precision": { + "0": 0.8803141537986743 + }, + "recall": { + "0": 0.6377095021001528 + }, + "f1": { + "0": 0.6324462567697632 + }, + "coverage": { + "0": 0.7409432672590567 + } + }, + "report": { + "precision": { + "0": 0.7362820959348579 + }, + "recall": { + "0": 0.6075669492667327 + }, + "f1": { + "0": 0.5430735533140524 + }, + "coverage": { + "0": 0.7404902629385466 + } + } + } + ] + } + } +} diff --git a/docs/assets/mambo-threshold-comparison.svg b/docs/assets/mambo-threshold-comparison.svg new file mode 100644 index 0000000..50504fe --- /dev/null +++ b/docs/assets/mambo-threshold-comparison.svg @@ -0,0 +1,1779 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.10.9, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + V2 + + + + + + + + + + V3 + PyTorch + + + + + + + + + + V3 + ONNX + + + + + + + + + + PyTorch + + TTA + + + + + + + + + + ONNX + + TTA + + + + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.262 + + + 0.259 + + + 0.259 + + + 0.300 + + + 0.301 + + + 0.447 + + + 0.508 + + + 0.510 + + + 0.524 + + + 0.543 + + + Species · Macro-F1 + + + + + + + + + + + + + + + V2 + + + + + + + + + + V3 + PyTorch + + + + + + + + + + V3 + ONNX + + + + + + + + + + PyTorch + + TTA + + + + + + + + + + ONNX + + TTA + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1.000 + + + 1.000 + + + 1.000 + + + 1.000 + + + 1.000 + + + 0.697 + + + 0.708 + + + 0.705 + + + 0.783 + + + 0.740 + + + Species · Image coverage + + + + + + + + + + + + + + + V2 + + + + + + + + + + V3 + PyTorch + + + + + + + + + + V3 + ONNX + + + + + + + + + + PyTorch + + TTA + + + + + + + + + + ONNX + + TTA + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.321 + + + 0.323 + + + 0.324 + + + 0.360 + + + 0.360 + + + 0.587 + + + 0.602 + + + 0.604 + + + 0.666 + + + 0.666 + + + Genus · Macro-F1 + + + + + + + + + + + + + + + V2 + + + + + + + + + + V3 + PyTorch + + + + + + + + + + V3 + ONNX + + + + + + + + + + PyTorch + + TTA + + + + + + + + + + ONNX + + TTA + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1.000 + + + 1.000 + + + 1.000 + + + 1.000 + + + 1.000 + + + 0.698 + + + 0.758 + + + 0.754 + + + 0.777 + + + 0.777 + + + Genus · Image coverage + + + + + + + + + + + + + + + V2 + + + + + + + + + + V3 + PyTorch + + + + + + + + + + V3 + ONNX + + + + + + + + + + PyTorch + + TTA + + + + + + + + + + ONNX + + TTA + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.270 + + + 0.280 + + + 0.281 + + + 0.297 + + + 0.297 + + + 0.655 + + + 0.581 + + + 0.582 + + + 0.607 + + + 0.607 + + + Family · Macro-F1 + + + + + + + + + + + + + + + V2 + + + + + + + + + + V3 + PyTorch + + + + + + + + + + V3 + ONNX + + + + + + + + + + PyTorch + + TTA + + + + + + + + + + ONNX + + TTA + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1.000 + + + 1.000 + + + 1.000 + + + 1.000 + + + 1.000 + + + 0.774 + + + 0.731 + + + 0.733 + + + 0.787 + + + 0.785 + + + Family · Image coverage + + + + Threshold optimization · same reporting partition before and after + + + Legacy northern Europe; same reporting images for all pipelines; all truth, including unknown taxa. + mini_metrics: Macro-F1 calibration on separate 10%; seed 42. Coverage = fraction of images accepted at each rank. + Calibration/report split is image-level; TTA was previously selected using a subset of Flemming. + + + + + + + Threshold zero + + + + + + Calibrated threshold + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/mambo-threshold-curves.svg b/docs/assets/mambo-threshold-curves.svg new file mode 100644 index 0000000..3206f06 --- /dev/null +++ b/docs/assets/mambo-threshold-curves.svg @@ -0,0 +1,3985 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.10.9, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + Macro recall (all truth retained) + + + + + + + + + + + + + + + + + 0.00 + + + + + + + + + + + + + 0.25 + + + + + + + + + + + + + 0.50 + + + + + + + + + + + + + 0.75 + + + + + + + + + + + + + 1.00 + + + + Macro precision + + + + + + + + + + + + + + + + + + + + + + + + + Species + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + Image coverage + + + + + + + + + + + + + + 0.00 + + + + + + + + + + + + + 0.25 + + + + + + + + + + + + + 0.50 + + + + + + + + + + + + + 0.75 + + + + + + + + + + + + + 1.00 + + + + Micro accuracy among accepted + + + + + + + + + + + + + + + + + + + + + + + + + Species + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + Macro recall (all truth retained) + + + + + + + + + + + + + + 0.00 + + + + + + + + + + + + + 0.25 + + + + + + + + + + + + + 0.50 + + + + + + + + + + + + + 0.75 + + + + + + + + + + + + + 1.00 + + + + Macro precision + + + + + + + + + + + + + + + + + + + + + + + + + Genus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + Image coverage + + + + + + + + + + + + + + 0.00 + + + + + + + + + + + + + 0.25 + + + + + + + + + + + + + 0.50 + + + + + + + + + + + + + 0.75 + + + + + + + + + + + + + 1.00 + + + + Micro accuracy among accepted + + + + + + + + + + + + + + + + + + + + + + + + + Genus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + Macro recall (all truth retained) + + + + + + + + + + + + + + 0.00 + + + + + + + + + + + + + 0.25 + + + + + + + + + + + + + 0.50 + + + + + + + + + + + + + 0.75 + + + + + + + + + + + + + 1.00 + + + + Macro precision + + + + + + + + + + + + + + + + + + + + + + + + + Family + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + Image coverage + + + + + + + + + + + + + + 0.00 + + + + + + + + + + + + + 0.25 + + + + + + + + + + + + + 0.50 + + + + + + + + + + + + + 0.75 + + + + + + + + + + + + + 1.00 + + + + Micro accuracy among accepted + + + + + + + + + + + + + + + + + + + + + + + + + Family + + + + Confidence threshold trade-offs · circles: threshold 0 · stars: calibrated + + + Legacy northern Europe; same reporting images for all pipelines; all truth, including unknown taxa. + mini_metrics: Macro-F1 calibration on separate 10%; seed 42. Coverage = fraction of images accepted at each rank. + Calibration/report split is image-level; TTA was previously selected using a subset of Flemming. + + + + + + + MAMBO v2 + + + + + + V3 PyTorch + + + + + + V3 ONNX + + + + + + V3 PyTorch + TTA + + + + + + V3 ONNX + TTA + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/mambo-threshold-metrics.csv b/docs/assets/mambo-threshold-metrics.csv new file mode 100644 index 0000000..7fd699f --- /dev/null +++ b/docs/assets/mambo-threshold-metrics.csv @@ -0,0 +1,91 @@ +model,rank,scope,threshold,accuracy,precision,recall,f1,micro_accuracy,theilU,coverage +v2,species,report_zero,0,0.6856229575537315,0.2795792585422393,0.6856229575537315,0.2619881841444527,0.6871258619383193,0.9268446802176634,1.0 +v2,genus,report_zero,0,0.7893807671430488,0.3234152967366764,0.7893807671430488,0.3212885858575979,0.792225505796772,0.9293295014713818,1.0 +v2,family,report_zero,0,0.8435038466784595,0.2610923881260793,0.8435038466784595,0.2696839814067278,0.9454610896415853,0.8669636504107465,1.0 +v2,species,report_optimized,0.7484260499477386,0.8465208024160925,0.6381169943670084,0.5418132969389368,0.44667552768137514,0.8340124966041836,0.9268446802176634,0.6973175721754944 +v2,genus,report_optimized,0.8759860098361969,0.9533632911945014,0.784792371905105,0.6176629588211429,0.5868633065886132,0.9258405014517136,0.9293295014713818,0.6981321512464954 +v2,family,report_optimized,0.9553309082984924,0.9963653352691595,0.841348645086206,0.6466603488658192,0.6545226053114057,0.9986057092536875,0.8669636504107465,0.7744373721300295 +v2,species,known_zero,0,0.7073027348676835,0.28480672905864074,0.7073027348676835,0.2693143628906898,0.7963467111618512,0.9292730961939166,1.0 +v2,genus,known_zero,0,0.7918398972587593,0.32348654616668093,0.7918398972587593,0.32179539408479596,0.7922405137628583,0.9293424074794282,1.0 +v2,family,known_zero,0,0.8435038466784595,0.2610923881260793,0.8435038466784595,0.2696839814067278,0.9454610896415853,0.8669636504107465,1.0 +v2,species,known_optimized,0.7484260499477386,0.8766863543952852,0.6554069382956795,0.5589457332057807,0.46704984507862823,0.9549286136427261,0.9292730961939166,0.7058268200579608 +v2,genus,known_optimized,0.8759860098361969,0.9565841131242125,0.7849689255774214,0.6195871424934829,0.588501193813758,0.9258656246608054,0.9293424074794282,0.6981264326444011 +v2,family,known_optimized,0.9553309082984924,0.9963653352691595,0.841348645086206,0.6466603488658192,0.6545226053114057,0.9986057092536875,0.8669636504107465,0.7744373721300295 +v2,species,calibration_zero,0,0.7234356272559329,0.44773205659042525,0.7234356272559329,0.3992460838711431,0.6871155160628845,0.9495520172149795,1.0 +v2,genus,calibration_zero,0,0.8174898444279297,0.4838679824327559,0.8174898444279297,0.4620410630676452,0.7928913192071086,0.9531896899689808,1.0 +v2,family,calibration_zero,0,0.8654342469799546,0.4026920030783285,0.8654342469799546,0.4117679180319759,0.9401913875598086,0.8647477723749251,1.0 +v2,species,calibration_optimized,0.7484260499477386,0.888343995217596,0.807502621527049,0.5796937024197353,0.5456887340622165,0.8309273305603132,0.9495520172149795,0.6983937115516062 +v2,genus,calibration_optimized,0.8759860098361969,0.9732206219933451,0.9203715569385426,0.6560626942847588,0.6840498465459532,0.9286062378167641,0.9531896899689808,0.7012987012987013 +v2,family,calibration_optimized,0.9553309082984924,0.9998907975137955,0.9981361769132305,0.7033521890103556,0.7994593831472765,0.9995597622716267,0.8647477723749251,0.7763157894736842 +torch,species,report_zero,0,0.7135646156794592,0.2688723997356787,0.7135646156794592,0.2592869317361528,0.7077555505039024,0.9292211983468999,1.0 +torch,genus,report_zero,0,0.8053026558890463,0.3221313136590869,0.8053026558890463,0.32303518958457,0.7939683261347276,0.9278616328176507,1.0 +torch,family,report_zero,0,0.8104767092433202,0.2753352445359579,0.8104767092433202,0.2804941988278224,0.9298325376979617,0.8486962980431905,1.0 +torch,species,report_optimized,0.8099595010280609,0.8669405316273155,0.7028135267405738,0.5774611074285403,0.5081384528044555,0.8338193199753886,0.9292211983468999,0.7081344244904145 +torch,genus,report_optimized,0.82109534740448,0.9547996220084877,0.745381822803767,0.678410498949023,0.6019267109931725,0.9077246242716747,0.9278616328176507,0.7575395923315905 +torch,family,report_optimized,0.970800906419754,0.9932547854813464,0.74059226732527,0.6535073068400129,0.5807455159791289,0.997951563553389,0.8486962980431905,0.7305827081912556 +torch,species,known_zero,0,0.7361279236851337,0.2738542317578795,0.7361279236851337,0.26625840334333606,0.8202555545797839,0.9324282979117112,1.0 +torch,genus,known_zero,0,0.8078113869042769,0.32216140875960464,0.8078113869042769,0.3235133592367779,0.7939833671169038,0.9278762362942725,1.0 +torch,family,known_zero,0,0.8104767092433202,0.2753352445359579,0.8104767092433202,0.2804941988278224,0.9298325376979617,0.8486962980431905,1.0 +torch,species,known_optimized,0.8099595010280609,0.8950879514853453,0.7274246435276156,0.5957207471891266,0.536222132076529,0.969125054412039,0.9324282979117112,0.7061122332484412 +torch,genus,known_optimized,0.82109534740448,0.9579612101608337,0.7455458647985177,0.6805239272946587,0.6035241537526418,0.9077473241972592,0.9278762362942725,0.7575349991475174 +torch,family,known_optimized,0.970800906419754,0.9932547854813464,0.74059226732527,0.6535073068400129,0.5807455159791289,0.997951563553389,0.8486962980431905,0.7305827081912556 +torch,species,calibration_zero,0,0.7431928073366078,0.44283216408639003,0.7431928073366078,0.4024595628388436,0.7084757347915243,0.954259253906316,1.0 +torch,genus,calibration_zero,0,0.8356042367797194,0.47899556907578955,0.8356042367797194,0.4663674702082115,0.7911825017088175,0.9534771364475659,1.0 +torch,family,calibration_zero,0,0.8492252662006303,0.3398730861115349,0.8492252662006303,0.34745500035047533,0.9284005468215994,0.8586883764262561,1.0 +torch,species,calibration_optimized,0.8099595010280609,0.9087050351179481,0.8482813983760845,0.6176015410523515,0.601488158405302,0.8334935127342624,0.954259253906316,0.7112098427887902 +torch,genus,calibration_optimized,0.82109534740448,0.973462276709025,0.8843100424805983,0.7189420501301624,0.7145410434590399,0.9085598741855763,0.9534771364475659,0.7605946684894054 +torch,family,calibration_optimized,0.970800906419754,0.9994922429367045,0.9029309874313405,0.7032656378963092,0.7261852919766372,0.9974648536529154,0.8586883764262561,0.741455912508544 +onnx,species,report_zero,0,0.7133861511997317,0.2689411284200973,0.7133861511997317,0.25936240461341,0.7078123816018792,0.9291859354966914,1.0 +onnx,genus,report_zero,0,0.8053599793321786,0.32303901654923844,0.8053599793321786,0.32445203101159487,0.793949382435402,0.9278774326101347,1.0 +onnx,family,report_zero,0,0.8106325437578626,0.2756918885388057,0.8106325437578626,0.28088792323657213,0.9300409183905433,0.8489407553438706,1.0 +onnx,species,report_optimized,0.8161613345146179,0.8695378035260483,0.7088741319668206,0.5752968296743217,0.5099648536812272,0.8345029711489339,0.9291859354966914,0.7045351216185497 +onnx,genus,report_optimized,0.8301631808280945,0.9551874761942367,0.7523387061411551,0.6745698413302063,0.6043210367725153,0.908581339231852,0.9278774326101347,0.7536561339698417 +onnx,family,report_optimized,0.9698503911495209,0.9932599551447033,0.7406007419898425,0.6548532928566179,0.5815679236552638,0.9979571783202317,0.8489407553438706,0.7325907403197697 +onnx,species,known_zero,0,0.7359438160598023,0.27389983335544515,0.7359438160598023,0.266315326129971,0.8203214191622025,0.9323702972359517,1.0 +onnx,genus,known_zero,0,0.8078688889251138,0.3230691966641643,0.8078688889251138,0.32493422231455543,0.7939644230587076,0.9278920368877236,1.0 +onnx,family,known_zero,0,0.8106325437578626,0.2756918885388057,0.8106325437578626,0.28088792323657213,0.9300409183905433,0.8489407553438706,1.0 +onnx,species,known_optimized,0.8161613345146179,0.8978307906255943,0.7337958308449367,0.5934880337746956,0.5382986298299348,0.9697840827422429,0.9323702972359517,0.7026214103802582 +onnx,genus,known_optimized,0.8301631808280945,0.958350348631966,0.752504050056499,0.6766713050103627,0.6059367197707097,0.9086041776638263,0.9278920368877236,0.7536514672173072 +onnx,family,known_optimized,0.9698503911495209,0.9932599551447033,0.7406007419898425,0.6548532928566179,0.5815679236552638,0.9979571783202317,0.8489407553438706,0.7325907403197697 +onnx,species,calibration_zero,0,0.7430789391063041,0.4435113545221054,0.7430789391063041,0.40300238516178827,0.7081339712918661,0.954116113510863,1.0 +onnx,genus,calibration_zero,0,0.8315920980901614,0.4756659977776627,0.8315920980901614,0.46306039720704983,0.7906698564593302,0.953655537431556,1.0 +onnx,family,calibration_zero,0,0.8491264519713813,0.3394307665358129,0.8491264519713813,0.3471036479087719,0.9282296650717703,0.8580508752393747,1.0 +onnx,species,calibration_optimized,0.8161613345146179,0.9122749701335368,0.8510626577154353,0.6156853061930037,0.6018573695717253,0.8340569223347805,0.954116113510863,0.7084757347915243 +onnx,genus,calibration_optimized,0.8301631808280945,0.973864726625716,0.8845032192436618,0.7124031638615914,0.7095377082146889,0.9093990058743787,0.953655537431556,0.7563226247436774 +onnx,family,calibration_optimized,0.9698503911495209,0.9994937740250923,0.9029315347725212,0.7039240888934983,0.7266095397411778,0.9974718455527465,0.8580508752393747,0.7435064935064936 +torch-tta,species,report_zero,0,0.7405864004487995,0.3117281910150932,0.7405864004487995,0.3001398043754676,0.7321360915359552,0.9416287278244636,1.0 +torch-tta,genus,report_zero,0,0.8312879946116835,0.3578921081808225,0.8312879946116835,0.3600905137263135,0.8163029476396151,0.9429697597956094,1.0 +torch-tta,family,report_zero,0,0.8579010503993526,0.2856847483669441,0.8579010503993526,0.29704414021357817,0.9478669394559369,0.8802152497213216,1.0 +torch-tta,species,report_optimized,0.7392672300338745,0.8659206758370823,0.6694908268387498,0.639254202340642,0.5238581475082266,0.8257020535519919,0.9416287278244636,0.7831893612184587 +torch-tta,genus,report_optimized,0.869922012090683,0.9627590640417357,0.8166841617561862,0.7031449724257084,0.6655108425187298,0.9116055761356989,0.9429697597956094,0.7772978707281958 +torch-tta,family,report_optimized,0.964760661125183,0.9955823574240963,0.7393905133847496,0.700159197162577,0.6072565582310141,0.998243799167609,0.8802152497213216,0.7874327498673941 +torch-tta,species,known_zero,0,0.764004152241647,0.3188318073270972,0.764004152241647,0.3101697044824459,0.8485114604373408,0.9441781207808398,1.0 +torch-tta,genus,known_zero,0,0.833877676837888,0.35795084878232625,0.833877676837888,0.3606630257586462,0.8163184117301608,0.9429838194118607,1.0 +torch-tta,family,known_zero,0,0.8579010503993526,0.2856847483669441,0.8579010503993526,0.29704414021357817,0.9478669394559369,0.8802152497213216,1.0 +torch-tta,species,known_optimized,0.7392672300338745,0.8932655392845691,0.6940179671454589,0.6594677739561563,0.5535005846842079,0.9623646820027063,0.9441781207808398,0.7787828225169052 +torch-tta,genus,known_optimized,0.869922012090683,0.9659260346471361,0.8168602180942144,0.7053354552058507,0.6673916212438911,0.9116277936194584,0.9429838194118607,0.7772936518460984 +torch-tta,family,known_optimized,0.964760661125183,0.9955823574240963,0.7393905133847496,0.700159197162577,0.6072565582310141,0.998243799167609,0.8802152497213216,0.7874327498673941 +torch-tta,species,calibration_zero,0,0.768414983363882,0.4839236475497513,0.768414983363882,0.4421948505193077,0.7294941900205059,0.9589075503757323,1.0 +torch-tta,genus,calibration_zero,0,0.8538124541139522,0.5172752120633655,0.8538124541139522,0.5029817114927149,0.8118591934381408,0.9605194779995736,1.0 +torch-tta,family,calibration_zero,0,0.8686121025173176,0.3828841637187067,0.8686121025173176,0.39248243176721537,0.9458304853041695,0.8896158193694642,1.0 +torch-tta,species,calibration_optimized,0.7392672300338745,0.8911752669559129,0.8282279025717094,0.6739933965102308,0.6307325978180464,0.8257460248311914,0.9589075503757323,0.7845181134654818 +torch-tta,genus,calibration_optimized,0.869922012090683,0.9779780541665041,0.9266086911891874,0.7404661738439429,0.757396958354487,0.9128238910847607,0.9605194779995736,0.7781954887218046 +torch-tta,family,calibration_optimized,0.964760661125183,0.9996369170022905,0.9496721741042599,0.7564679389414893,0.794600193920395,0.9982769760930433,0.8896158193694642,0.793403964456596 +onnx-tta,species,report_zero,0,0.7408884646998294,0.3129592874854792,0.7408884646998294,0.3011494930237334,0.7322118663332575,0.9416043541781303,1.0 +onnx-tta,genus,report_zero,0,0.831310673030869,0.35819829298724193,0.831310673030869,0.36048522644409975,0.8163029476396151,0.9429777628243508,1.0 +onnx-tta,family,report_zero,0,0.8580571051602935,0.2856706122641368,0.8580571051602935,0.297077819405652,0.9479237705539137,0.8802934722288728,1.0 +onnx-tta,species,report_optimized,0.8280269503593445,0.8755166405852203,0.7362820959348587,0.6075669492667327,0.5430735533140526,0.8355803422957866,0.9416043541781303,0.7404902629385466 +onnx-tta,genus,report_optimized,0.8708856105804443,0.9629823236784678,0.8168891977985718,0.703150166196618,0.6655370235633968,0.911799848813675,0.9429777628243508,0.7768621656437069 +onnx-tta,family,report_optimized,0.966471254825592,0.9955854528269081,0.7395038777892725,0.6986717712105687,0.6065093177805807,0.998285935010381,0.8802934722288728,0.7846859134651815 +onnx-tta,species,known_zero,0,0.7643157679314445,0.32010697284017264,0.7643157679314445,0.31123876107268367,0.8485992798805656,0.9441435804167174,1.0 +onnx-tta,genus,known_zero,0,0.8339004259063546,0.35825712113062574,0.8339004259063546,0.3610591777989773,0.8163184117301608,0.942991822846314,1.0 +onnx-tta,family,known_zero,0,0.8580571051602935,0.2856706122641368,0.8580571051602935,0.297077819405652,0.9479237705539137,0.8802934722288728,1.0 +onnx-tta,species,known_optimized,0.8280269503593445,0.9036381600900988,0.7641741013547309,0.6267785524056018,0.5758793313296239,0.9719676229020354,0.9441435804167174,0.7377711425309563 +onnx-tta,genus,known_optimized,0.8708856105804443,0.966150028690568,0.8170652541366,0.705340665156732,0.6674178728574118,0.9118220834959032,0.942991822846314,0.7768579385075871 +onnx-tta,family,known_optimized,0.966471254825592,0.9955854528269081,0.7395038777892725,0.6986717712105687,0.6065093177805807,0.998285935010381,0.8802934722288728,0.7846859134651815 +onnx-tta,species,calibration_zero,0,0.7687701032394073,0.4847160695718284,0.7687701032394073,0.4430255135086433,0.7294941900205059,0.9588446607588915,1.0 +onnx-tta,genus,calibration_zero,0,0.8538124541139522,0.5184639515113375,0.8538124541139522,0.5041458550744518,0.8118591934381408,0.9603409164900499,1.0 +onnx-tta,family,calibration_zero,0,0.8685825691446063,0.3826107811942373,0.8685825691446063,0.39228445312410354,0.9456596035543404,0.8893754433031703,1.0 +onnx-tta,species,calibration_optimized,0.8280269503593445,0.9108463773306322,0.880314153798674,0.6377095021001528,0.6324462567697632,0.8357933579335793,0.9588446607588915,0.7409432672590567 +onnx-tta,genus,calibration_optimized,0.8708856105804443,0.9779606204147607,0.9266086911891874,0.7402264841524345,0.7572256161677625,0.912967032967033,0.9603409164900499,0.777511961722488 +onnx-tta,family,calibration_optimized,0.966471254825592,0.9996735638566714,0.9496688607549484,0.7548837775873369,0.7935862907114528,0.9984868136619109,0.8893754433031703,0.790498974709501 diff --git a/docs/assets/preset-overlap.svg b/docs/assets/preset-overlap.svg new file mode 100644 index 0000000..6d1803d --- /dev/null +++ b/docs/assets/preset-overlap.svg @@ -0,0 +1,13149 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.10.9, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/preset-overlap.tsv b/docs/assets/preset-overlap.tsv new file mode 100644 index 0000000..78136c5 --- /dev/null +++ b/docs/assets/preset-overlap.tsv @@ -0,0 +1,626 @@ +row_preset column_preset shared_species jaccard_percent row_coverage_percent +north_america north_america 4425 100.000000 100.000000 +north_america central_america 1408 30.240550 31.819209 +north_america caribbean 648 13.926499 14.644068 +north_america south_america 839 16.476826 18.960452 +north_america arctic 418 7.524752 9.446328 +north_america europe 356 5.026119 8.045198 +north_america europe_v3 384 5.387961 8.677966 +north_america north_europe 314 5.157687 7.096045 +north_america north_europe_v3 341 5.427344 7.706215 +north_america mediterranean 313 4.608363 7.073446 +north_america middle_east 98 1.894452 2.214689 +north_america africa 92 1.750048 2.079096 +north_america north_africa 32 0.691294 0.723164 +north_america subsaharan_africa 84 1.635196 1.898305 +north_america madagascar 13 0.287674 0.293785 +north_america asia 330 3.865074 7.457627 +north_america south_asia 80 1.356622 1.807910 +north_america southeast_asia 61 1.010603 1.378531 +north_america east_asia 289 3.819720 6.531073 +north_america japan 64 1.265322 1.446328 +north_america oceania 147 2.243932 3.322034 +north_america australia 89 1.433172 2.011299 +north_america tasmania 6 0.127850 0.135593 +north_america new_zealand 45 0.936524 1.016949 +north_america oceania_excluding_australia_nz 89 1.898464 2.011299 +central_america north_america 1408 30.240550 85.906040 +central_america central_america 1639 100.000000 100.000000 +central_america caribbean 721 40.189521 43.990238 +central_america south_america 1031 48.770104 62.904210 +central_america arctic 22 0.695103 1.342282 +central_america europe 29 0.627163 1.769372 +central_america europe_v3 36 0.767754 2.196461 +central_america north_europe 12 0.332963 0.732154 +central_america north_europe_v3 17 0.444910 1.037218 +central_america mediterranean 41 0.958392 2.501525 +central_america middle_east 29 1.180782 1.769372 +central_america africa 47 1.868045 2.867602 +central_america north_africa 14 0.752284 0.854179 +central_america subsaharan_africa 46 1.925492 2.806589 +central_america madagascar 8 0.460299 0.488103 +central_america asia 51 0.845631 3.111653 +central_america south_asia 32 1.012979 1.952410 +central_america southeast_asia 26 0.791476 1.586333 +central_america east_asia 39 0.775348 2.379500 +central_america japan 15 0.646273 0.915192 +central_america oceania 58 1.504930 3.538743 +central_america australia 34 0.977292 2.074436 +central_america tasmania 1 0.052301 0.061013 +central_america new_zealand 11 0.535801 0.671141 +central_america oceania_excluding_australia_nz 42 2.154951 2.562538 +caribbean north_america 648 13.926499 73.972603 +caribbean central_america 721 40.189521 82.305936 +caribbean caribbean 876 100.000000 100.000000 +caribbean south_america 781 48.782011 89.155251 +caribbean arctic 1 0.041271 0.114155 +caribbean europe 9 0.231899 1.027397 +caribbean europe_v3 13 0.329197 1.484018 +caribbean north_europe 2 0.070151 0.228311 +caribbean north_europe_v3 5 0.162866 0.570776 +caribbean mediterranean 18 0.508762 2.054795 +caribbean middle_east 16 0.937866 1.826484 +caribbean africa 34 1.925255 3.881279 +caribbean north_africa 7 0.633484 0.799087 +caribbean subsaharan_africa 34 2.075702 3.881279 +caribbean madagascar 9 0.924025 1.027397 +caribbean asia 38 0.719561 4.337900 +caribbean south_asia 29 1.208837 3.310502 +caribbean southeast_asia 26 1.030928 2.968037 +caribbean east_asia 23 0.537007 2.625571 +caribbean japan 9 0.575448 1.027397 +caribbean oceania 49 1.580645 5.593607 +caribbean australia 26 0.954479 2.968037 +caribbean tasmania 0 0.000000 0.000000 +caribbean new_zealand 5 0.385802 0.570776 +caribbean oceania_excluding_australia_nz 34 2.847571 3.881279 +south_america north_america 839 16.476826 55.710491 +south_america central_america 1031 48.770104 68.459495 +south_america caribbean 781 48.782011 51.859230 +south_america south_america 1506 100.000000 100.000000 +south_america arctic 9 0.295567 0.597610 +south_america europe 30 0.668151 1.992032 +south_america europe_v3 35 0.768049 2.324037 +south_america north_europe 20 0.577534 1.328021 +south_america north_europe_v3 25 0.679348 1.660027 +south_america mediterranean 39 0.940439 2.589641 +south_america middle_east 31 1.335631 2.058433 +south_america africa 51 2.143758 3.386454 +south_america north_africa 13 0.751880 0.863214 +south_america subsaharan_africa 50 2.220249 3.320053 +south_america madagascar 13 0.812500 0.863214 +south_america asia 60 1.018849 3.984064 +south_america south_asia 40 1.325381 2.656042 +south_america southeast_asia 31 0.985065 2.058433 +south_america east_asia 40 0.816993 2.656042 +south_america japan 13 0.593607 0.863214 +south_america oceania 63 1.695371 4.183267 +south_america australia 38 1.137044 2.523240 +south_america tasmania 2 0.112486 0.132802 +south_america new_zealand 12 0.625326 0.796813 +south_america oceania_excluding_australia_nz 38 2.087912 2.523240 +arctic north_america 418 7.524752 27.002584 +arctic central_america 22 0.695103 1.421189 +arctic caribbean 1 0.041271 0.064599 +arctic south_america 9 0.295567 0.581395 +arctic arctic 1548 100.000000 100.000000 +arctic europe 1385 43.594586 89.470284 +arctic europe_v3 1399 43.245750 90.374677 +arctic north_europe 1350 62.068966 87.209302 +arctic north_europe_v3 1388 58.838491 89.664083 +arctic mediterranean 1079 34.264846 69.702842 +arctic middle_east 228 10.526316 14.728682 +arctic africa 38 1.561216 2.454780 +arctic north_africa 28 1.594533 1.808786 +arctic subsaharan_africa 25 1.078051 1.614987 +arctic madagascar 2 0.120992 0.129199 +arctic asia 910 17.909860 58.785530 +arctic south_asia 32 1.043025 2.067183 +arctic southeast_asia 3 0.093255 0.193798 +arctic east_asia 865 21.030878 55.878553 +arctic japan 105 4.906542 6.782946 +arctic oceania 30 0.791348 1.937984 +arctic australia 17 0.499266 1.098191 +arctic tasmania 3 0.164926 0.193798 +arctic new_zealand 27 1.387461 1.744186 +arctic oceania_excluding_australia_nz 3 0.158144 0.193798 +europe north_america 356 5.026119 11.811546 +europe central_america 29 0.627163 0.962177 +europe caribbean 9 0.231899 0.298607 +europe south_america 30 0.668151 0.995355 +europe arctic 1385 43.594586 45.952223 +europe europe 3014 100.000000 100.000000 +europe europe_v3 3014 97.666883 100.000000 +europe north_europe 1977 65.593895 65.593895 +europe north_europe_v3 2184 72.103004 72.461845 +europe mediterranean 2583 83.027965 85.700066 +europe middle_east 714 22.695486 23.689449 +europe africa 306 8.425110 10.152621 +europe north_africa 219 7.225338 7.266092 +europe subsaharan_africa 181 4.987600 6.005309 +europe madagascar 16 0.515298 0.530856 +europe asia 1554 26.325597 51.559390 +europe south_asia 138 3.116531 4.578633 +europe southeast_asia 31 0.665951 1.028534 +europe east_asia 1188 22.602740 39.416058 +europe japan 165 4.653130 5.474453 +europe oceania 88 1.692633 2.919708 +europe australia 65 1.347709 2.156603 +europe tasmania 9 0.274474 0.298607 +europe new_zealand 57 1.685393 1.891175 +europe oceania_excluding_australia_nz 21 0.627803 0.696749 +europe_v3 north_america 384 5.387961 12.443292 +europe_v3 central_america 36 0.767754 1.166559 +europe_v3 caribbean 13 0.329197 0.421257 +europe_v3 south_america 35 0.768049 1.134154 +europe_v3 arctic 1399 43.245750 45.333765 +europe_v3 europe 3014 97.666883 97.666883 +europe_v3 europe_v3 3086 100.000000 100.000000 +europe_v3 north_europe 1977 64.063513 64.063513 +europe_v3 north_europe_v3 2199 71.257291 71.257291 +europe_v3 mediterranean 2625 83.572111 85.061568 +europe_v3 middle_east 734 22.951845 23.784835 +europe_v3 africa 328 8.908202 10.628645 +europe_v3 north_africa 223 7.195870 7.226183 +europe_v3 subsaharan_africa 202 5.489130 6.545690 +europe_v3 madagascar 16 0.503620 0.518471 +europe_v3 asia 1604 27.071730 51.976669 +europe_v3 south_asia 151 3.365277 4.893065 +europe_v3 southeast_asia 38 0.805085 1.231367 +europe_v3 east_asia 1223 23.105989 39.630590 +europe_v3 japan 175 4.850333 5.670771 +europe_v3 oceania 96 1.824055 3.110823 +europe_v3 australia 73 1.493759 2.365522 +europe_v3 tasmania 10 0.298507 0.324044 +europe_v3 new_zealand 60 1.738626 1.944264 +europe_v3 oceania_excluding_australia_nz 24 0.702988 0.777706 +north_europe north_america 314 5.157687 15.882650 +north_europe central_america 12 0.332963 0.606980 +north_europe caribbean 2 0.070151 0.101163 +north_europe south_america 20 0.577534 1.011634 +north_europe arctic 1350 62.068966 68.285281 +north_europe europe 1977 65.593895 100.000000 +north_europe europe_v3 1977 64.063513 100.000000 +north_europe north_europe 1977 100.000000 100.000000 +north_europe north_europe_v3 1977 89.904502 100.000000 +north_europe mediterranean 1602 52.438625 81.031866 +north_europe middle_east 406 16.797683 20.536166 +north_europe africa 92 3.275187 4.653515 +north_europe north_africa 65 3.026071 3.287810 +north_europe subsaharan_africa 51 1.873622 2.579666 +north_europe madagascar 2 0.096061 0.101163 +north_europe asia 1125 21.246459 56.904401 +north_europe south_asia 53 1.524741 2.680830 +north_europe southeast_asia 8 0.219720 0.404654 +north_europe east_asia 987 22.330317 49.924127 +north_europe japan 131 5.151396 6.626201 +north_europe oceania 49 1.166389 2.478503 +north_europe australia 31 0.811518 1.568032 +north_europe tasmania 8 0.356665 0.404654 +north_europe new_zealand 40 1.693480 2.023268 +north_europe oceania_excluding_australia_nz 5 0.215146 0.252908 +north_europe_v3 north_america 341 5.427344 15.507049 +north_europe_v3 central_america 17 0.444910 0.773079 +north_europe_v3 caribbean 5 0.162866 0.227376 +north_europe_v3 south_america 25 0.679348 1.136880 +north_europe_v3 arctic 1388 58.838491 63.119600 +north_europe_v3 europe 2184 72.103004 99.317872 +north_europe_v3 europe_v3 2199 71.257291 100.000000 +north_europe_v3 north_europe 1977 89.904502 89.904502 +north_europe_v3 north_europe_v3 2199 100.000000 100.000000 +north_europe_v3 mediterranean 1788 57.845357 81.309686 +north_europe_v3 middle_east 459 17.749420 20.873124 +north_europe_v3 africa 124 4.134712 5.638927 +north_europe_v3 north_africa 89 3.793691 4.047294 +north_europe_v3 subsaharan_africa 76 2.603631 3.456116 +north_europe_v3 madagascar 6 0.260870 0.272851 +north_europe_v3 asia 1241 22.977226 56.434743 +north_europe_v3 south_asia 71 1.929348 3.228740 +north_europe_v3 southeast_asia 13 0.336962 0.591178 +north_europe_v3 east_asia 1078 23.687102 49.022283 +north_europe_v3 japan 142 5.156137 6.457481 +north_europe_v3 oceania 61 1.382906 2.773988 +north_europe_v3 australia 42 1.041925 1.909959 +north_europe_v3 tasmania 9 0.365260 0.409277 +north_europe_v3 new_zealand 47 1.823826 2.137335 +north_europe_v3 oceania_excluding_australia_nz 10 0.393546 0.454752 +mediterranean north_america 313 4.608363 11.679104 +mediterranean central_america 41 0.958392 1.529851 +mediterranean caribbean 18 0.508762 0.671642 +mediterranean south_america 39 0.940439 1.455224 +mediterranean arctic 1079 34.264846 40.261194 +mediterranean europe 2583 83.027965 96.380597 +mediterranean europe_v3 2625 83.572111 97.947761 +mediterranean north_europe 1602 52.438625 59.776119 +mediterranean north_europe_v3 1788 57.845357 66.716418 +mediterranean mediterranean 2680 100.000000 100.000000 +mediterranean middle_east 776 28.218182 28.955224 +mediterranean africa 355 10.926439 13.246269 +mediterranean north_africa 236 8.805970 8.805970 +mediterranean subsaharan_africa 227 6.986765 8.470149 +mediterranean madagascar 23 0.832127 0.858209 +mediterranean asia 1502 26.721224 56.044776 +mediterranean south_asia 174 4.287827 6.492537 +mediterranean southeast_asia 48 1.115242 1.791045 +mediterranean east_asia 1092 21.761658 40.746269 +mediterranean japan 160 4.973578 5.970149 +mediterranean oceania 96 1.976529 3.582090 +mediterranean australia 73 1.629101 2.723881 +mediterranean tasmania 9 0.305603 0.335821 +mediterranean new_zealand 51 1.669941 1.902985 +mediterranean oceania_excluding_australia_nz 28 0.932091 1.044776 +middle_east north_america 98 1.894452 11.583924 +middle_east central_america 29 1.180782 3.427896 +middle_east caribbean 16 0.937866 1.891253 +middle_east south_america 31 1.335631 3.664303 +middle_east arctic 228 10.526316 26.950355 +middle_east europe 714 22.695486 84.397163 +middle_east europe_v3 734 22.951845 86.761229 +middle_east north_europe 406 16.797683 47.990544 +middle_east north_europe_v3 459 17.749420 54.255319 +middle_east mediterranean 776 28.218182 91.725768 +middle_east middle_east 846 100.000000 100.000000 +middle_east africa 240 15.686275 28.368794 +middle_east north_africa 154 16.594828 18.203310 +middle_east subsaharan_africa 179 12.235133 21.158392 +middle_east madagascar 33 3.586957 3.900709 +middle_east asia 835 18.747194 98.699764 +middle_east south_asia 212 9.698079 25.059102 +middle_east southeast_asia 72 2.943581 8.510638 +middle_east east_asia 474 12.467123 56.028369 +middle_east japan 95 6.560773 11.229314 +middle_east oceania 70 2.295835 8.274232 +middle_east australia 60 2.255639 7.092199 +middle_east tasmania 4 0.358423 0.472813 +middle_east new_zealand 25 2.006421 2.955083 +middle_east oceania_excluding_australia_nz 28 2.393162 3.309693 +africa north_america 92 1.750048 9.956710 +africa central_america 47 1.868045 5.086580 +africa caribbean 34 1.925255 3.679654 +africa south_america 51 2.143758 5.519481 +africa arctic 38 1.561216 4.112554 +africa europe 306 8.425110 33.116883 +africa europe_v3 328 8.908202 35.497835 +africa north_europe 92 3.275187 9.956710 +africa north_europe_v3 124 4.134712 13.419913 +africa mediterranean 355 10.926439 38.419913 +africa middle_east 240 15.686275 25.974026 +africa africa 924 100.000000 100.000000 +africa north_africa 236 25.541126 25.541126 +africa subsaharan_africa 796 86.147186 86.147186 +africa madagascar 107 11.580087 11.580087 +africa asia 351 6.997608 37.987013 +africa south_asia 190 8.311461 20.562771 +africa southeast_asia 120 4.846527 12.987013 +africa east_asia 213 5.143685 23.051948 +africa japan 64 4.110469 6.926407 +africa oceania 132 4.306688 14.285714 +africa australia 119 4.441956 12.878788 +africa tasmania 6 0.503356 0.649351 +africa new_zealand 33 2.507599 3.571429 +africa oceania_excluding_australia_nz 59 4.847987 6.385281 +north_africa north_america 32 0.691294 13.559322 +north_africa central_america 14 0.752284 5.932203 +north_africa caribbean 7 0.633484 2.966102 +north_africa south_america 13 0.751880 5.508475 +north_africa arctic 28 1.594533 11.864407 +north_africa europe 219 7.225338 92.796610 +north_africa europe_v3 223 7.195870 94.491525 +north_africa north_europe 65 3.026071 27.542373 +north_africa north_europe_v3 89 3.793691 37.711864 +north_africa mediterranean 236 8.805970 100.000000 +north_africa middle_east 154 16.594828 65.254237 +north_africa africa 236 25.541126 100.000000 +north_africa north_africa 236 100.000000 100.000000 +north_africa subsaharan_africa 113 12.295974 47.881356 +north_africa madagascar 14 4.255319 5.932203 +north_africa asia 164 3.632337 69.491525 +north_africa south_asia 65 3.772490 27.542373 +north_africa southeast_asia 22 1.166490 9.322034 +north_africa east_asia 97 2.717848 41.101695 +north_africa japan 29 3.207965 12.288136 +north_africa oceania 29 1.169355 12.288136 +north_africa australia 24 1.150527 10.169492 +north_africa tasmania 2 0.393701 0.847458 +north_africa new_zealand 14 2.163833 5.932203 +north_africa oceania_excluding_australia_nz 15 2.617801 6.355932 +subsaharan_africa north_america 84 1.635196 10.552764 +subsaharan_africa central_america 46 1.925492 5.778894 +subsaharan_africa caribbean 34 2.075702 4.271357 +subsaharan_africa south_america 50 2.220249 6.281407 +subsaharan_africa arctic 25 1.078051 3.140704 +subsaharan_africa europe 181 4.987600 22.738693 +subsaharan_africa europe_v3 202 5.489130 25.376884 +subsaharan_africa north_europe 51 1.873622 6.407035 +subsaharan_africa north_europe_v3 76 2.603631 9.547739 +subsaharan_africa mediterranean 227 6.986765 28.517588 +subsaharan_africa middle_east 179 12.235133 22.487437 +subsaharan_africa africa 796 86.147186 100.000000 +subsaharan_africa north_africa 113 12.295974 14.195980 +subsaharan_africa subsaharan_africa 796 100.000000 100.000000 +subsaharan_africa madagascar 107 13.442211 13.442211 +subsaharan_africa asia 281 5.667608 35.301508 +subsaharan_africa south_asia 178 8.202765 22.361809 +subsaharan_africa southeast_asia 118 5.021277 14.824121 +subsaharan_africa east_asia 171 4.217016 21.482412 +subsaharan_africa japan 59 4.114365 7.412060 +subsaharan_africa oceania 129 4.387755 16.206030 +subsaharan_africa australia 118 4.623824 14.824121 +subsaharan_africa tasmania 6 0.563910 0.753769 +subsaharan_africa new_zealand 32 2.691337 4.020101 +subsaharan_africa oceania_excluding_australia_nz 58 5.321101 7.286432 +madagascar north_america 13 0.287674 12.149533 +madagascar central_america 8 0.460299 7.476636 +madagascar caribbean 9 0.924025 8.411215 +madagascar south_america 13 0.812500 12.149533 +madagascar arctic 2 0.120992 1.869159 +madagascar europe 16 0.515298 14.953271 +madagascar europe_v3 16 0.503620 14.953271 +madagascar north_europe 2 0.096061 1.869159 +madagascar north_europe_v3 6 0.260870 5.607477 +madagascar mediterranean 23 0.832127 21.495327 +madagascar middle_east 33 3.586957 30.841121 +madagascar africa 107 11.580087 100.000000 +madagascar north_africa 14 4.255319 13.084112 +madagascar subsaharan_africa 107 13.442211 100.000000 +madagascar madagascar 107 100.000000 100.000000 +madagascar asia 54 1.201068 50.467290 +madagascar south_asia 44 2.724458 41.121495 +madagascar southeast_asia 35 2.006881 32.710280 +madagascar east_asia 39 1.114923 36.448598 +madagascar japan 16 2.030457 14.953271 +madagascar oceania 34 1.449275 31.775701 +madagascar australia 31 1.589744 28.971963 +madagascar tasmania 0 0.000000 0.000000 +madagascar new_zealand 5 0.948767 4.672897 +madagascar oceania_excluding_australia_nz 21 4.794521 19.626168 +asia north_america 330 3.865074 7.427414 +asia central_america 51 0.845631 1.147873 +asia caribbean 38 0.719561 0.855278 +asia south_america 60 1.018849 1.350439 +asia arctic 910 17.909860 20.481657 +asia europe 1554 26.325597 34.976367 +asia europe_v3 1604 27.071730 36.101733 +asia north_europe 1125 21.246459 25.320729 +asia north_europe_v3 1241 22.977226 27.931578 +asia mediterranean 1502 26.721224 33.805987 +asia middle_east 835 18.747194 18.793608 +asia africa 351 6.997608 7.900068 +asia north_africa 164 3.632337 3.691200 +asia subsaharan_africa 281 5.667608 6.324555 +asia madagascar 54 1.201068 1.215395 +asia asia 4443 100.000000 100.000000 +asia south_asia 1552 34.931353 34.931353 +asia southeast_asia 1658 37.199910 37.317128 +asia east_asia 3430 77.200090 77.200090 +asia japan 697 15.687598 15.687598 +asia oceania 565 9.185498 12.716633 +asia australia 486 8.334762 10.938555 +asia tasmania 11 0.233744 0.247580 +asia new_zealand 50 1.037775 1.125366 +asia oceania_excluding_australia_nz 282 6.248615 6.347063 +south_asia north_america 80 1.356622 5.154639 +south_asia central_america 32 1.012979 2.061856 +south_asia caribbean 29 1.208837 1.868557 +south_asia south_america 40 1.325381 2.577320 +south_asia arctic 32 1.043025 2.061856 +south_asia europe 138 3.116531 8.891753 +south_asia europe_v3 151 3.365277 9.729381 +south_asia north_europe 53 1.524741 3.414948 +south_asia north_europe_v3 71 1.929348 4.574742 +south_asia mediterranean 174 4.287827 11.211340 +south_asia middle_east 212 9.698079 13.659794 +south_asia africa 190 8.311461 12.242268 +south_asia north_africa 65 3.772490 4.188144 +south_asia subsaharan_africa 178 8.202765 11.469072 +south_asia madagascar 44 2.724458 2.835052 +south_asia asia 1552 34.931353 100.000000 +south_asia south_asia 1552 100.000000 100.000000 +south_asia southeast_asia 1143 54.925517 73.646907 +south_asia east_asia 1218 32.359192 78.479381 +south_asia japan 301 15.451745 19.394330 +south_asia oceania 356 10.262323 22.938144 +south_asia australia 316 10.160772 20.360825 +south_asia tasmania 3 0.164564 0.193299 +south_asia new_zealand 25 1.280738 1.610825 +south_asia oceania_excluding_australia_nz 165 9.488212 10.631443 +southeast_asia north_america 61 1.010603 3.648325 +southeast_asia central_america 26 0.791476 1.555024 +southeast_asia caribbean 26 1.030928 1.555024 +southeast_asia south_america 31 0.985065 1.854067 +southeast_asia arctic 3 0.093255 0.179426 +southeast_asia europe 31 0.665951 1.854067 +southeast_asia europe_v3 38 0.805085 2.272727 +southeast_asia north_europe 8 0.219720 0.478469 +southeast_asia north_europe_v3 13 0.336962 0.777512 +southeast_asia mediterranean 48 1.115242 2.870813 +southeast_asia middle_east 72 2.943581 4.306220 +southeast_asia africa 120 4.846527 7.177033 +southeast_asia north_africa 22 1.166490 1.315789 +southeast_asia subsaharan_africa 118 5.021277 7.057416 +southeast_asia madagascar 35 2.006881 2.093301 +southeast_asia asia 1658 37.199910 99.162679 +southeast_asia south_asia 1143 54.925517 68.361244 +southeast_asia southeast_asia 1672 100.000000 100.000000 +southeast_asia east_asia 1186 30.286006 70.933014 +southeast_asia japan 285 13.675624 17.045455 +southeast_asia oceania 473 13.623272 28.289474 +southeast_asia australia 409 13.037934 24.461722 +southeast_asia tasmania 5 0.257599 0.299043 +southeast_asia new_zealand 22 1.060241 1.315789 +southeast_asia oceania_excluding_australia_nz 280 16.055046 16.746411 +east_asia north_america 289 3.819720 8.425656 +east_asia central_america 39 0.775348 1.137026 +east_asia caribbean 23 0.537007 0.670554 +east_asia south_america 40 0.816993 1.166181 +east_asia arctic 865 21.030878 25.218659 +east_asia europe 1188 22.602740 34.635569 +east_asia europe_v3 1223 23.105989 35.655977 +east_asia north_europe 987 22.330317 28.775510 +east_asia north_europe_v3 1078 23.687102 31.428571 +east_asia mediterranean 1092 21.761658 31.836735 +east_asia middle_east 474 12.467123 13.819242 +east_asia africa 213 5.143685 6.209913 +east_asia north_africa 97 2.717848 2.827988 +east_asia subsaharan_africa 171 4.217016 4.985423 +east_asia madagascar 39 1.114923 1.137026 +east_asia asia 3430 77.200090 100.000000 +east_asia south_asia 1218 32.359192 35.510204 +east_asia southeast_asia 1186 30.286006 34.577259 +east_asia east_asia 3430 100.000000 100.000000 +east_asia japan 697 20.320700 20.320700 +east_asia oceania 398 7.502356 11.603499 +east_asia australia 348 7.021792 10.145773 +east_asia tasmania 9 0.243572 0.262391 +east_asia new_zealand 47 1.234244 1.370262 +east_asia oceania_excluding_australia_nz 171 4.735530 4.985423 +japan north_america 64 1.265322 9.182209 +japan central_america 15 0.646273 2.152080 +japan caribbean 9 0.575448 1.291248 +japan south_america 13 0.593607 1.865136 +japan arctic 105 4.906542 15.064562 +japan europe 165 4.653130 23.672884 +japan europe_v3 175 4.850333 25.107604 +japan north_europe 131 5.151396 18.794835 +japan north_europe_v3 142 5.156137 20.373027 +japan mediterranean 160 4.973578 22.955524 +japan middle_east 95 6.560773 13.629842 +japan africa 64 4.110469 9.182209 +japan north_africa 29 3.207965 4.160689 +japan subsaharan_africa 59 4.114365 8.464849 +japan madagascar 16 2.030457 2.295552 +japan asia 697 15.687598 100.000000 +japan south_asia 301 15.451745 43.185079 +japan southeast_asia 285 13.675624 40.889527 +japan east_asia 697 20.320700 100.000000 +japan japan 697 100.000000 100.000000 +japan oceania 130 4.577465 18.651363 +japan australia 108 4.384896 15.494978 +japan tasmania 3 0.309917 0.430416 +japan new_zealand 19 1.722575 2.725968 +japan oceania_excluding_australia_nz 71 7.259714 10.186514 +oceania north_america 147 2.243932 6.467224 +oceania central_america 58 1.504930 2.551694 +oceania caribbean 49 1.580645 2.155741 +oceania south_america 63 1.695371 2.771667 +oceania arctic 30 0.791348 1.319842 +oceania europe 88 1.692633 3.871535 +oceania europe_v3 96 1.824055 4.223493 +oceania north_europe 49 1.166389 2.155741 +oceania north_europe_v3 61 1.382906 2.683678 +oceania mediterranean 96 1.976529 4.223493 +oceania middle_east 70 2.295835 3.079630 +oceania africa 132 4.306688 5.807303 +oceania north_africa 29 1.169355 1.275847 +oceania subsaharan_africa 129 4.387755 5.675319 +oceania madagascar 34 1.449275 1.495821 +oceania asia 565 9.185498 24.857017 +oceania south_asia 356 10.262323 15.662121 +oceania southeast_asia 473 13.623272 20.809503 +oceania east_asia 398 7.502356 17.509899 +oceania japan 130 4.577465 5.719314 +oceania oceania 2273 100.000000 100.000000 +oceania australia 1874 82.446106 82.446106 +oceania tasmania 274 12.054553 12.054553 +oceania new_zealand 425 18.697756 18.697756 +oceania oceania_excluding_australia_nz 352 15.486142 15.486142 +australia north_america 89 1.433172 4.749200 +australia central_america 34 0.977292 1.814301 +australia caribbean 26 0.954479 1.387407 +australia south_america 38 1.137044 2.027748 +australia arctic 17 0.499266 0.907150 +australia europe 65 1.347709 3.468517 +australia europe_v3 73 1.493759 3.895411 +australia north_europe 31 0.811518 1.654216 +australia north_europe_v3 42 1.041925 2.241195 +australia mediterranean 73 1.629101 3.895411 +australia middle_east 60 2.255639 3.201708 +australia africa 119 4.441956 6.350053 +australia north_africa 24 1.150527 1.280683 +australia subsaharan_africa 118 4.623824 6.296692 +australia madagascar 31 1.589744 1.654216 +australia asia 486 8.334762 25.933831 +australia south_asia 316 10.160772 16.862327 +australia southeast_asia 409 13.037934 21.824973 +australia east_asia 348 7.021792 18.569904 +australia japan 108 4.384896 5.763074 +australia oceania 1874 82.446106 100.000000 +australia australia 1874 100.000000 100.000000 +australia tasmania 274 14.621131 14.621131 +australia new_zealand 130 5.993545 6.937033 +australia oceania_excluding_australia_nz 251 12.708861 13.393810 +tasmania north_america 6 0.127850 2.189781 +tasmania central_america 1 0.052301 0.364964 +tasmania caribbean 0 0.000000 0.000000 +tasmania south_america 2 0.112486 0.729927 +tasmania arctic 3 0.164926 1.094891 +tasmania europe 9 0.274474 3.284672 +tasmania europe_v3 10 0.298507 3.649635 +tasmania north_europe 8 0.356665 2.919708 +tasmania north_europe_v3 9 0.365260 3.284672 +tasmania mediterranean 9 0.305603 3.284672 +tasmania middle_east 4 0.358423 1.459854 +tasmania africa 6 0.503356 2.189781 +tasmania north_africa 2 0.393701 0.729927 +tasmania subsaharan_africa 6 0.563910 2.189781 +tasmania madagascar 0 0.000000 0.000000 +tasmania asia 11 0.233744 4.014599 +tasmania south_asia 3 0.164564 1.094891 +tasmania southeast_asia 5 0.257599 1.824818 +tasmania east_asia 9 0.243572 3.284672 +tasmania japan 3 0.309917 1.094891 +tasmania oceania 274 12.054553 100.000000 +tasmania australia 274 14.621131 100.000000 +tasmania tasmania 274 100.000000 100.000000 +tasmania new_zealand 46 7.044410 16.788321 +tasmania oceania_excluding_australia_nz 8 1.294498 2.919708 +new_zealand north_america 45 0.936524 10.588235 +new_zealand central_america 11 0.535801 2.588235 +new_zealand caribbean 5 0.385802 1.176471 +new_zealand south_america 12 0.625326 2.823529 +new_zealand arctic 27 1.387461 6.352941 +new_zealand europe 57 1.685393 13.411765 +new_zealand europe_v3 60 1.738626 14.117647 +new_zealand north_europe 40 1.693480 9.411765 +new_zealand north_europe_v3 47 1.823826 11.058824 +new_zealand mediterranean 51 1.669941 12.000000 +new_zealand middle_east 25 2.006421 5.882353 +new_zealand africa 33 2.507599 7.764706 +new_zealand north_africa 14 2.163833 3.294118 +new_zealand subsaharan_africa 32 2.691337 7.529412 +new_zealand madagascar 5 0.948767 1.176471 +new_zealand asia 50 1.037775 11.764706 +new_zealand south_asia 25 1.280738 5.882353 +new_zealand southeast_asia 22 1.060241 5.176471 +new_zealand east_asia 47 1.234244 11.058824 +new_zealand japan 19 1.722575 4.470588 +new_zealand oceania 425 18.697756 100.000000 +new_zealand australia 130 5.993545 30.588235 +new_zealand tasmania 46 7.044410 10.823529 +new_zealand new_zealand 425 100.000000 100.000000 +new_zealand oceania_excluding_australia_nz 30 4.016064 7.058824 +oceania_excluding_australia_nz north_america 89 1.898464 25.284091 +oceania_excluding_australia_nz central_america 42 2.154951 11.931818 +oceania_excluding_australia_nz caribbean 34 2.847571 9.659091 +oceania_excluding_australia_nz south_america 38 2.087912 10.795455 +oceania_excluding_australia_nz arctic 3 0.158144 0.852273 +oceania_excluding_australia_nz europe 21 0.627803 5.965909 +oceania_excluding_australia_nz europe_v3 24 0.702988 6.818182 +oceania_excluding_australia_nz north_europe 5 0.215146 1.420455 +oceania_excluding_australia_nz north_europe_v3 10 0.393546 2.840909 +oceania_excluding_australia_nz mediterranean 28 0.932091 7.954545 +oceania_excluding_australia_nz middle_east 28 2.393162 7.954545 +oceania_excluding_australia_nz africa 59 4.847987 16.761364 +oceania_excluding_australia_nz north_africa 15 2.617801 4.261364 +oceania_excluding_australia_nz subsaharan_africa 58 5.321101 16.477273 +oceania_excluding_australia_nz madagascar 21 4.794521 5.965909 +oceania_excluding_australia_nz asia 282 6.248615 80.113636 +oceania_excluding_australia_nz south_asia 165 9.488212 46.875000 +oceania_excluding_australia_nz southeast_asia 280 16.055046 79.545455 +oceania_excluding_australia_nz east_asia 171 4.735530 48.579545 +oceania_excluding_australia_nz japan 71 7.259714 20.170455 +oceania_excluding_australia_nz oceania 352 15.486142 100.000000 +oceania_excluding_australia_nz australia 251 12.708861 71.306818 +oceania_excluding_australia_nz tasmania 8 1.294498 2.272727 +oceania_excluding_australia_nz new_zealand 30 4.016064 8.522727 +oceania_excluding_australia_nz oceania_excluding_australia_nz 352 100.000000 100.000000 diff --git a/docs/benchmarks.md b/docs/benchmarks.md index 31ea886..c06b6c0 100644 --- a/docs/benchmarks.md +++ b/docs/benchmarks.md @@ -1,8 +1,8 @@ # Benchmark findings -These are the current conclusions of the quantization branch, based on local +These are the retained quantization findings, based on local measurements. They do not certify HPC, Spark/desktop, or ARM performance. -The [branch roadmap](quantization-roadmap.md) defines the remaining work and +The [quantization roadmap](quantization-roadmap.md) defines the remaining work and completion criteria. Exact configurations, trials and superseded findings remain in the [historical experiment record](https://github.com/asgersvenning/mini_trainer/blob/f5c69e7cab2bfde8a5467026b293858b93e628f9/docs/archive/benchmark-history.md). diff --git a/docs/mambo-accelerated-deployment.md b/docs/mambo-accelerated-deployment.md new file mode 100644 index 0000000..5413d93 --- /dev/null +++ b/docs/mambo-accelerated-deployment.md @@ -0,0 +1,117 @@ +# Historical MAMBO preparation and precision comparison + +This study qualified faster preparation and mixed precision before the later +streaming and TTA work. It explains the precision choice; use the +[current deployment guide](../deployment/README.md) for integration defaults and +[current comparisons](../deployment/README.md#release-comparison) for adoption. +Weights, standard ONNX graphs, presets and prediction interfaces were unchanged. + +| Execution | Automatic precision in this study | FP32 reference | +|---|---|---| +| PyTorch CUDA | FP16 backbone; FP32 classifier and embeddings | Autocast disabled; matmul/cuDNN TF32 disabled | +| ONNX CUDA | TF32 execution of the standard FP32 graph | TF32 disabled | +| CPU, either backend | FP32 | FP32 | + +BF16 passed subset qualification but was not evaluated on the full dataset. +FP16 had broader hardware support and smaller sampled changes from FP32. +Preparation kept interpolation arithmetic while using contiguous arrays and +computing only the retained crop. These combined changes were measured together; +the study does not isolate their individual contributions. + +## Qualification + +Both native FP16/BF16 and ONNX TF32 were qualified on the same seeded 4,096-image +subset against FP32. All predictive scores use the pinned mini_metrics revision, +threshold zero and no optimization. Prepared pixels were byte-identical on 256 +real images plus frozen synthetic edge cases. Outputs and normalized embeddings +remain float32. Prediction/embedding modes agreed on the checked species labels; +custom-list filtering and same-batch embedding equivalence passed. + +## Full evaluation and timing + +Both accelerated backends completed all **58,640 Flemming images**, using the +same five presets and sample order as the FP32 reference. Every predictive metric +comes from `mini_metrics` commit `70cc69adc05362863439277048e06386c1f885e1`: +`threshold=0`, `optimal=False`, `simple=True`, `hierarchical=False`. +The primary results include all truth, including species outside the selected list. +Known-truth results retain 50,598 images at species level; membership is checked +separately at each rank. The [metric definitions](mambo-release-comparison.md#prediction-quality) +explain the different macro denominators, including predicted-only classes in F1. + +Across five presets, three ranks and both truth populations, the largest +macro-accuracy difference from FP32 was below **0.094 percentage points**. +Northern-Europe macro-F1 over all truth was 0.2575 for v2, 0.2545 for v3 FP32, +and 0.2543 for both accelerated paths. No precision variant uniformly improved +every score. The figures and complete CSV retain the geographic comparisons. + +![Macro-led species quality over all truth](assets/mambo-accelerated-quality-all.svg) + +![Macro-led species quality over known truth](assets/mambo-accelerated-quality-known.svg) + +The [complete metric CSV](assets/mambo-accelerated-metrics.csv) retains 108 rows / +756 scores: macro accuracy, precision, recall and F1, micro accuracy, Theil U and +coverage, at species/genus/family level for both populations and all five v3 lists. +The [compact evidence](assets/mambo-accelerated-comparison.json) includes hashes +and can regenerate the figures without access to the image dataset. + +### Speed and memory + +![Complete-pipeline throughput by batch size](assets/mambo-accelerated-speed.svg) + +Northern Europe, **images per second** (higher is better): + +| Pipeline | CPU batch 1 | CPU batch 8 | GPU batch 1 | GPU batch 8 | GPU batch 32 | +|---|---:|---:|---:|---:|---:| +| MAMBO v2 | 1.26 | 1.39 | 45.2 | 44.8 | 83.5 | +| Original v3 PyTorch FP32 | 6.74 | 7.39 | 27.1 | 46.6 | 44.5 | +| Updated v3 PyTorch auto | 5.70 | 7.84 | 29.8 | 126.7 | **136.2** | +| Original v3 ONNX FP32 | 9.64 | 9.71 | 30.4 | 42.8 | 42.4 | +| Updated v3 ONNX auto | 10.08 | 10.81 | 46.7 | 114.1 | **111.3** | + +At GPU batch 32, PyTorch improved **3.06×** and ONNX **2.62×** over their original +pipelines. This was not a uniform CPU speedup: native batch-1 throughput fell +from 6.74 to 5.70 images/s. The early sequential pipeline plateaued around batch +8–32; that plateau is not a limit of the current streaming implementation. + +![Peak host memory for the complete sweep](assets/mambo-accelerated-memory.svg) + +| Updated runtime | CPU peak host RSS | GPU-run peak host RSS | CPU loading + first image | GPU loading + first image | +|---|---:|---:|---:|---:| +| PyTorch | 1,618 MiB | 2,512 MiB | 42.04 s | 42.96 s | +| ONNX | 689 MiB | 1,619 MiB | 0.37 s | 1.46 s | + +Host memory increases versus the previous v3 sweep, while remaining below v2. +Native peak allocated GPU memory falls from 865 to **598 MiB** (v2: 1,936 MiB). +These are PyTorch allocator counters, not total device memory; an equivalent ONNX +allocator peak is unavailable. Host RSS includes loading and the entire batch +sweep. Startup excludes interpreter launch and explicit runtime setup. The native +startup cost included historical classifier initialization; see the +[FP32 report](mambo-v3-evaluation.md#startup-and-process-memory). + +These compare the combined adapter changes against the recorded pre-change +pipeline on the same i7-12800H / RTX 3080 Ti Laptop GPU (16 GB), Linux/WSL2, +on AC power. They do not isolate AMP from preprocessing, and laptop conditions +vary between runs. Three fresh-process trials use the same seeded image bank, +four CPU threads, two warmups and seven observations per cell. Error bars show +the range of trial medians; reported throughput uses the median of all 21 +observations. All speed figures include decoding, preparation, inference and +completed CPU results. Native CPU model threads were also explicitly set to four. +The v2 CPU result requires its documented caller-side float32 input cast. + +## Evidence and replay + +The [evidence JSON](assets/mambo-accelerated-comparison.json) contains the FP32 +reference, automatic-precision results and source hashes. Regenerate its figures +and metric CSV without images or new inference: + +```sh +.venv/bin/python -m dev.releases.mambo_v3.acceleration_report \ + --data docs/assets/mambo-accelerated-comparison.json \ + --output /tmp/mambo-acceleration-figures +``` + +The [historical report](https://github.com/asgersvenning/mini_trainer/blob/595582c212e7f248b400f7a782857bc5bdfe5111/docs/mambo-accelerated-deployment.md#reproduce) +retains original collection commands. Replaying them with today's adapter measures +a different pipeline. For new collection use the +[evaluation workflow](../dev/releases/mambo_v3/evaluation.md); for current platform +coverage use [final qualification](../dev/releases/mambo_v3/final-qualification.md). diff --git a/docs/mambo-batch-scaling.md b/docs/mambo-batch-scaling.md new file mode 100644 index 0000000..eceb5e6 --- /dev/null +++ b/docs/mambo-batch-scaling.md @@ -0,0 +1,38 @@ +# Historical FP32 batch-scaling diagnosis + +At adapter revision `a99b855`, V3's plateau had two causes: serial, allocation-heavy +CPU preprocessing and strict FP32 backbone execution. Batch sizes reached the +model correctly. This diagnosis motivated the implemented +[preparation and mixed-precision changes](mambo-accelerated-deployment.md); +it does not describe the current pipeline. + +## Findings worth retaining + +- Advanced indexing produced non-contiguous arrays, interpolation promoted + intermediates to float64, and the adapter resized pixels later discarded by + the crop. Contiguous intermediates plus computing only the retained crop + reduced preparation of 32 images from 562 to 300 ms in the controlled probe. +- With GPU-resident input, native batch-32 throughput rose from 177.6 images/s + in FP32/NCHW to 371.4 with FP16/NCHW and 418.4 with FP16/channels-last. + Layout alone did not help. Convolutions, batch normalization and SiLU dominated; + the classifier contributed about 0.15% of kernel time. +- V2 used a different backbone at 224 pixels with autocast; V3 used 384 pixels + and FP32. Neither model size alone nor a larger batch predicts relative speed. +- ONNX convolution ran on CUDA. Small CPU graph nodes were not evidence of a + silent CPU backbone fallback. + +These are controlled laptop interventions, not current release benchmarks. +They establish preparation and precision effects, not a hardware-counter +distinction between arithmetic and memory-bandwidth limits. + +## Evidence and replay + +[Recorded measurements](assets/mambo-batch-diagnosis.json) retain the sweeps. +Replay the retired probes with the matching historical adapter; the +[historical report](https://github.com/asgersvenning/mini_trainer/blob/852bf712e85b8d1a6b9c9c6d31b3b5d807904303/docs/mambo-batch-scaling.md) +records commands, environments and methodology. Do not apply its monkey patches +to current code. + +For current work use the [pipeline review](mambo-inference-pipeline-review.md), +[pipeline probe](../dev/releases/mambo_v3/pipeline-probe.md) and +[target speed check](../dev/releases/mambo_v3/speed-smoke.md). diff --git a/docs/mambo-compact-tta.md b/docs/mambo-compact-tta.md new file mode 100644 index 0000000..a32ae54 --- /dev/null +++ b/docs/mambo-compact-tta.md @@ -0,0 +1,20 @@ +# Preliminary TTA composition study + +This exploratory study shortlisted the recipes evaluated in the +[full comparison and selection record](mambo-composed-tta.md). Its useful finding +was to combine padding with rotations inside existing views, rather than add +separate inference passes. Three-view ±30° rotations with stronger padding +deserved full evaluation; the later comparison selected 25% padding. + +The sample comprised 38 flagged errors, 128 controls and 1,024 randomly selected +Flemming reporting images. The random sample was disjoint from the flagged +cases, but not independent of the previously studied reporting population. +Fixed thresholds came from ordinary V3, not candidate-specific calibration. +These results cannot replace the full-data comparison. + +The [recorded evidence](assets/mambo-compact-tta.json) retains all candidates. +Replay uses [compact_tta.py](../dev/releases/mambo_v3/compact_tta.py) and +[compact_tta_metrics.py](../dev/releases/mambo_v3/compact_tta_metrics.py); +[historical commands and tables](https://github.com/asgersvenning/mini_trainer/blob/852bf712e85b8d1a6b9c9c6d31b3b5d807904303/docs/mambo-compact-tta.md) +are available in Git. For integration decisions, use the +[deployment README](../deployment/README.md). diff --git a/docs/mambo-composed-tta.md b/docs/mambo-composed-tta.md new file mode 100644 index 0000000..45b8298 --- /dev/null +++ b/docs/mambo-composed-tta.md @@ -0,0 +1,53 @@ +# TTA recipe selection + +When TTA is enabled, use `rotation30_pad25_3`: original plus ±30° rotations, +each with 25% edge padding. It improved the Flemming comparison on both PyTorch +and ONNX at the same three-view cost as the previous `padded_scale` recipe. +TTA remains off by default; explicit `padded_scale` preserves the previous option. +See [the API and spatial policy](mambo-tta.md) and +[current release comparisons](../deployment/README.md#release-comparison). + +## Evidence for the choice + +Native PyTorch, legacy northern Europe, all truth, full-support macro-F1: + +| Operating point | Recipe | Species | Genus | Family | +|---|---|---:|---:|---:| +| No threshold | Previous padded scale | 0.3001 | 0.3601 | 0.2970 | +| No threshold | Selected three views | 0.3201 | 0.3873 | 0.3592 | +| Approximately 80% coverage | Previous padded scale | 0.5140 | 0.6404 | 0.6105 | +| Approximately 80% coverage | Selected three views | 0.5729 | 0.6990 | 0.7560 | + +The five-view mixed-padding candidate added modest species/genus gains at +80% coverage (0.5770/0.7126), but lower family F1 (0.6969) and two extra passes. +It remains an explicit alternative, not the default. Improvements were not +universal across metrics: recipe-specific calibration increased coverage/F1 +while reducing family macro accuracy relative to the old recipe. + +Metrics use pinned `mini_metrics`, 52,788 reporting images and 5,852 separate +calibration images. Recipe exploration used some reporting images, so this is +not independent validation. These out-of-domain results should be read alongside +the in-domain comparison; neither establishes a universal TTA benefit. + +Matched-coverage thresholds use reporting confidences without labels and retain +ties. They are diagnostic operating points, distinct from thresholds optimized +on the calibration split. Support >5 results in this study intersect eleven +pipelines and therefore differ from the current five-pipeline comparison. +No rows are removed when truncating the class macro average. Compare all three +ranks in the [exploratory figure](assets/mambo-composed-tta.svg) and +[complete metric table](assets/mambo-composed-tta.csv). + +## Provenance + +The [complete evidence](assets/mambo-composed-tta.json) retains metrics, thresholds +and source identities and remains an input to +[release promotion reporting](../dev/releases/mambo_v3/promoted_report.py). +Collection timings are not speed benchmarks: the native and ONNX jobs overlapped. + +For replay, use [composed_full.py](../dev/releases/mambo_v3/composed_full.py), +[composed_metrics.py](../dev/releases/mambo_v3/composed_metrics.py) and +[composed_report.py](../dev/releases/mambo_v3/composed_report.py) for the figure. +The CSV retains the full tables; this selection page is maintained separately. +The [historical report](https://github.com/asgersvenning/mini_trainer/blob/852bf712e85b8d1a6b9c9c6d31b3b5d807904303/docs/mambo-composed-tta.md) +records exact commands and the native run's older nested precision-metadata caveat; +its top-level `effective_precision=fp16` describes actual execution. diff --git a/docs/mambo-confidence-thresholds.md b/docs/mambo-confidence-thresholds.md new file mode 100644 index 0000000..a03fcef --- /dev/null +++ b/docs/mambo-confidence-thresholds.md @@ -0,0 +1,138 @@ +# Confidence thresholds and the MAMBO comparison + +**Historical padded-scale TTA evidence.** The [deployment README](../deployment/README.md#release-comparison) +contains the current rotation-and-padding default comparison. + +Thresholding substantially changes the quality comparison, at the cost of rejecting +images. These results use **legacy northern Europe** for V2, V3 PyTorch/ONNX and +both V3 backends with padded-scale TTA. Deployment defaults remain threshold zero. + +## Method and interpretation + +Metrics, splitting and calibration use `mini_metrics` revision +`70cc69adc05362863439277048e06386c1f885e1`: + +- `MetricDF.split((0.9, 0.1), strata=("label",), seed=42)` groups ranks by image ID, + yielding **5,852 calibration / 52,788 reporting images**. Identity hashes verify + matching truth/partitions across pipelines. Both operating points below use the + reporting partition, including unknown truth—not the full 58,640-image population. +- `OptimalConfidenceThreshold(crit=MacroF1, eps=0.01, use_quantiles=True, + n_bootstraps=0)` fits each pipeline/rank on calibration only. Its exact F1 curve + and connected near-optimal plateau selector need not select the exact maximum. + Results match `evaluate_file(optimal=True, seed=42)`; full-data threshold-zero + checks separately reproduce the earlier comparison. +- Coverage is the fraction accepted at each rank (`confidence >= threshold`), + distinct from vocabulary coverage. Independent thresholds and + `hierarchical=False` do not implement species-to-family fallback. + +Macro accuracy averages accepted-prediction accuracy within truth taxa, excluding +those with no accepted predictions; micro accuracy averages all accepted images. +Recall counts rejection as misses. Macro-F1 penalizes rejection and includes +truth-supported and predicted-only taxa; precision averages predicted-class groups. +Interpret accuracy/precision together with recall and coverage. + +This single image-level split is not site/observation-level or stability validation. +Prior TTA selection used Flemming, so it is not independent model/TTA validation +either. Thresholds are specific to these pipelines, scores and preset; deployment +still defaults to zero. + +## Effect on the model comparison + +Calibration raises Macro-F1 at every rank while lowering coverage and recall. +V3 overtakes V2 at species level; TTA further improves species/genus F1. At family +level the ranking reverses: V2 leads calibrated F1, while V3 + TTA retains more +recall. The [family audit](mambo-family-precision.md) explains how rare predicted-only +groups cause that reversal. Compare coverage alongside scores. + +![Macro-F1 and coverage before and after calibration](assets/mambo-threshold-comparison.svg) + +Coverage at threshold zero is 100%; all other columns except the before/after F1 pair use calibrated thresholds. + +### Species + +| Pipeline | Threshold | Macro-F1 zero → calibrated | Coverage | Macro accuracy | Micro accuracy | Macro precision | Macro recall | +|---|---:|---:|---:|---:|---:|---:|---:| +| MAMBO v2 | 0.7484 | 0.2620 → 0.4467 | 69.73% | 84.65% | 83.40% | 0.6381 | 0.5418 | +| V3 PyTorch | 0.8100 | 0.2593 → 0.5081 | 70.81% | 86.69% | 83.38% | 0.7028 | 0.5775 | +| V3 ONNX | 0.8162 | 0.2594 → 0.5100 | 70.45% | 86.95% | 83.45% | 0.7089 | 0.5753 | +| V3 PyTorch + TTA | 0.7393 | 0.3001 → 0.5239 | 78.32% | 86.59% | 82.57% | 0.6695 | 0.6393 | +| V3 ONNX + TTA | 0.8280 | 0.3011 → 0.5431 | 74.05% | 87.55% | 83.56% | 0.7363 | 0.6076 | + +### Genus + +| Pipeline | Threshold | Macro-F1 zero → calibrated | Coverage | Macro accuracy | Micro accuracy | Macro precision | Macro recall | +|---|---:|---:|---:|---:|---:|---:|---:| +| MAMBO v2 | 0.8760 | 0.3213 → 0.5869 | 69.81% | 95.34% | 92.58% | 0.7848 | 0.6177 | +| V3 PyTorch | 0.8211 | 0.3230 → 0.6019 | 75.75% | 95.48% | 90.77% | 0.7454 | 0.6784 | +| V3 ONNX | 0.8302 | 0.3245 → 0.6043 | 75.37% | 95.52% | 90.86% | 0.7523 | 0.6746 | +| V3 PyTorch + TTA | 0.8699 | 0.3601 → 0.6655 | 77.73% | 96.28% | 91.16% | 0.8167 | 0.7031 | +| V3 ONNX + TTA | 0.8709 | 0.3605 → 0.6655 | 77.69% | 96.30% | 91.18% | 0.8169 | 0.7032 | + +### Family + +| Pipeline | Threshold | Macro-F1 zero → calibrated | Coverage | Macro accuracy | Micro accuracy | Macro precision | Macro recall | +|---|---:|---:|---:|---:|---:|---:|---:| +| MAMBO v2 | 0.9553 | 0.2697 → 0.6545 | 77.44% | 99.64% | 99.86% | 0.8413 | 0.6467 | +| V3 PyTorch | 0.9708 | 0.2805 → 0.5807 | 73.06% | 99.33% | 99.80% | 0.7406 | 0.6535 | +| V3 ONNX | 0.9699 | 0.2809 → 0.5816 | 73.26% | 99.33% | 99.80% | 0.7406 | 0.6549 | +| V3 PyTorch + TTA | 0.9648 | 0.2970 → 0.6073 | 78.74% | 99.56% | 99.82% | 0.7394 | 0.7002 | +| V3 ONNX + TTA | 0.9665 | 0.2971 → 0.6065 | 78.47% | 99.56% | 99.83% | 0.7395 | 0.6987 | + +## TTA backend threshold sensitivity + +The selected species threshold differs substantially between PyTorch (0.7393) +and ONNX (0.8280). Applying **each threshold to both backends** isolates the effect: + +| Shared species threshold | PyTorch TTA Macro-F1 / coverage | ONNX TTA Macro-F1 / coverage | +|---|---:|---:| +| 0.7393 | 0.5239 / 78.32% | 0.5238 / 78.30% | +| 0.8280 | 0.5433 / 74.06% | 0.5431 / 74.05% | + +Both thresholds are within 0.01 of each backend's calibration maximum F1 +(about 0.6347). Shared-threshold results nearly coincide: the apparent ONNX +advantage chiefly reflects near-optimal threshold selection. Keep the selected +values rather than choosing a new winner on reporting data; validate threshold +stability before adopting defaults. + +## Precision–recall and accuracy–coverage curves + +![Five-pipeline precision–recall and accuracy–coverage curves](assets/mambo-threshold-curves.svg) + +Left: macro precision/recall; right: accepted-image micro accuracy/coverage. +Dashed lines are ONNX; circles mark threshold zero, stars the calibrated points. +Similar coverage helps distinguish discrimination from stronger rejection; +calibration optimizes Macro-F1, not a shared coverage target. + +These are **top-prediction rejection curves**, not one-vs-rest PR curves or AP/AUC +estimates. Each point uses `evaluate_file` on reporting data. The grid combines +51 uniform thresholds, 21 calibration-confidence quantiles per rank and selected +thresholds, deduplicated. Lines follow threshold order without smoothing or a +monotonic envelope; changing class domains can make macro precision irregular. +Calibration uses the exact F1 curve, not this plotting grid. Undefined results stay null. + +The [tail comparison](mambo-tail-metrics.md) supplements full-support results with +common-class support >5/10/20 averages. Excluding rare and predicted-only families +changes the question; retain the untruncated comparison. + +## Evidence and reproduction + +The [CSV](assets/mambo-threshold-metrics.csv) retains all/known-truth reporting +scores, calibration scores, thresholds, Theil U and coverage. Known-only results +reuse all-truth calibration. The [JSON](assets/mambo-threshold-comparison.json) +retains curve points, source/partition hashes and full-data checks. + +Collect from the retained prediction directories in +[`SOURCES`](../dev/releases/mambo_v3/threshold_report.py), or regenerate charts +directly from committed evidence without predictions or inference: + +```sh +/path/to/pinned-metrics-env/bin/python -m dev.releases.mambo_v3.threshold_report \ + --evidence local-evidence --output local-evidence/mambo-threshold-study +.venv/bin/python -m dev.releases.mambo_v3.threshold_report \ + --data docs/assets/mambo-threshold-comparison.json \ + --output /tmp/mambo-threshold-charts +``` + +Before adoption, validate coverage/recall in the target workflow and define abstention +or fallback. The deployment CLI accepts one scalar threshold, not these three +independently calibrated rank thresholds. diff --git a/docs/mambo-deployment-defaults.md b/docs/mambo-deployment-defaults.md new file mode 100644 index 0000000..28cd154 --- /dev/null +++ b/docs/mambo-deployment-defaults.md @@ -0,0 +1,94 @@ +# MAMBO regional choice and historical padded-scale evidence + +The [deployment README](../deployment/README.md#release-comparison) contains the +current model, timing and rotation-and-padding TTA comparisons. This page retains +the evidence for the northern-Europe preset choice and aggregate regional effect. + +These historical results use `padded_scale`: original plus 8% and 15% edge-padded +views, with FP32 leaf logits averaged before filtering and hierarchy reduction. +It was the earlier accuracy/cost choice; it is **not the current enabled-TTA +default**. The [candidate study](mambo-tta.md) records its selection. + +## Northern-Europe preset choice + +Legacy `north_europe` retains the 1,977-species V2 vocabulary. The explicit +`north_europe_v3` option adds 222 species without removals, using the same +geographic filter and a minimum of 3 regional records instead of 26, plus a global +minimum of 25. Both cover the same 50,598 species-labelled Flemming images (86.29%). + +Holding PyTorch inference fixed, macro accuracy was: + +| Rank | Legacy | Updated | Legacy + padded-scale TTA | Updated + padded-scale TTA | +|---|---:|---:|---:|---:| +| Species | 71.25% | 70.46% | 73.95% | 73.10% | +| Genus | 80.53% | 80.01% | 83.04% | 82.78% | +| Family | 81.05% | 80.66% | 85.72% | 83.47% | + +ONNX, macro-F1 and micro accuracy showed the same preference for the legacy list. +The additions permit more plausible regional species, but Flemming contains no +examples of them: their recognition benefit is unmeasured. Legacy therefore +combines better measured discrimination with V2 comparability. The updated list +remains an explicit broader option. The V3 API/CLI default is global (`full`); +see [geographic definitions](model-presets.md). + +### Regional filtering effect + +![Paired regional gains across pipelines](assets/mambo-defaults-regional-effect.svg) + +Each point compares two presets **within the same pipeline**. Black marks are the +median of five changes (V2, V3 PyTorch/ONNX, and each V3 backend with padded-scale +TTA); grey lines show their min–max range. These related pipelines are not +independent replicates; no confidence intervals or significance are implied. +All comparisons retain the same 58,640 images, including out-of-vocabulary truth. +This supports regional filtering for northern-European images, not use of that +vocabulary elsewhere. + +## Population, metrics and retained results + +The [complete CSV](assets/mambo-defaults-metrics.csv) retains all presets, +species/genus/family, all/known truth, macro accuracy/precision/recall/F1, micro +accuracy, Theil U and coverage. The [source JSON](assets/mambo-defaults-comparison.json) +also retains historical timings, memory measurements and provenance hashes. + +Predictive metrics used `mini_metrics` commit +`70cc69adc05362863439277048e06386c1f885e1` with `threshold=0`, `optimal=False`, +`simple=True` and `hierarchical=False`. The full population is 58,640 images / +522 truth species. Legacy northern-Europe known-truth counts are 50,598 species, +58,639 genus and 58,640 family images. See [metric definitions](mambo-release-comparison.md#prediction-quality) +for macro denominators. TTA selection used 1,024 images from this same dataset, +so these are descriptive comparisons, not independent validation. + +[Threshold](mambo-confidence-thresholds.md) and [tail](mambo-tail-metrics.md) +analyses instead use 5,852 calibration images and 52,788 reporting images. +Do not mix those populations with the full-data results here. The +[family audit](mambo-family-precision.md) explains the rare predicted-only classes +that affect macro precision and F1. Current deployment figures retain both +thresholded/unthresholded results, coverage and support >5 comparisons. + +Historical laptop timing used an i7-12800H / RTX 3080 Ti Laptop, four CPU threads, +a seeded 32-image bank, three fresh processes, two warmups and seven observations +per cell (CPU batches 1/8; GPU 1/8/32). Reported throughput includes decoding +through completed CPU results, all three TTA views; it excludes the separate +single-view prepared-input diagnostic. Host RSS covers loading and the batch +sweep; PyTorch allocated GPU bytes are not total VRAM or an ONNX measurement. +First use excludes interpreter launch and explicit runtime setup. V2 CPU used +the documented float32 input cast. Use the current README for adoption decisions. + +## Reproduce the regional figure and metric table + +Regenerate the retained figure and complete exports without inference or +recalculating metrics: + +```sh +python -m dev.releases.mambo_v3.defaults_report \ + --data docs/assets/mambo-defaults-comparison.json \ + --output /tmp/mambo-historical-defaults +``` + +Retired per-rank, speed and memory plots remain reproducible with the +[historical generator](https://github.com/asgersvenning/mini_trainer/blob/e80c170c99921374e49dac68ace7e9186c16e340/dev/releases/mambo_v3/defaults_report.py) +and retained JSON. + +The [release comparison runbook](../dev/releases/mambo_v3/release-comparison.md) +describes collecting new evidence. Pin `padded_scale` explicitly when reproducing +this historical recipe; bare `tta=True` selects the current default. diff --git a/docs/mambo-deployment-evidence.md b/docs/mambo-deployment-evidence.md new file mode 100644 index 0000000..c7f6178 --- /dev/null +++ b/docs/mambo-deployment-evidence.md @@ -0,0 +1,132 @@ +# Deployment comparison evidence + +Complete results supporting the [integration guide](../deployment/README.md). +The complementary [in-domain/HPC evidence](mambo-indomain-evidence.md) uses the same +calibration and support policy on a separate image domain; the tables below remain Flemming-only. +This reference retains both confidence settings, full and truncated support, +all three ranks, coverage, timing ranges and historical-study boundaries. + +Results use the **same 52,788 Flemming reporting images** for both confidence +settings, including out-of-vocabulary truth. Calibrated thresholds were fitted on +5,852 separate images using pinned `mini_metrics` Macro-F1, independently for each +pipeline and rank. No-threshold results use threshold zero. All comparisons use +the shared legacy `north_europe` preset; TTA uses `rotation30_pad25_3`. +V3 uses automatic GPU precision. Deployment defaults remain threshold zero. + +In each metric cell, values are **full support / support >5**. Full support retains +each model’s complete class domain, including predicted-only classes. Support >5 +retains classes with more than five truth instances and **accepted predictions in +every pipeline**, separately for each confidence setting. These class sets can differ +between settings; truncation is a change in averaging domain, not improved predictions. +Coverage is the percentage of reporting images accepted, and is identical for both +averaging domains. No evaluation rows are dropped; per-class FP/FN remain intact. + +### Species + +| Pipeline | Confidence | Macro accuracy (full / >5) | Macro-F1 (full / >5) | Coverage | +|---|---|---:|---:|---:| +| MAMBO v2 | None | 68.56% / 79.01% | 0.2620 / 0.7836 | 100.00% | +| MAMBO v2 | Calibrated | 84.65% / 95.23% | 0.4467 / 0.7800 | 69.73% | +| V3 PyTorch | None | 71.36% / 81.59% | 0.2593 / 0.8066 | 100.00% | +| V3 PyTorch | Calibrated | 86.69% / 96.36% | 0.5081 / 0.8016 | 70.81% | +| V3 ONNX | None | 71.34% / 81.64% | 0.2594 / 0.8068 | 100.00% | +| V3 ONNX | Calibrated | 86.95% / 96.44% | 0.5100 / 0.8001 | 70.45% | +| V3 PyTorch + TTA | None | 74.94% / 86.53% | 0.3201 / 0.8574 | 100.00% | +| V3 PyTorch + TTA | Calibrated | 86.34% / 96.39% | 0.5661 / 0.8619 | 81.16% | +| V3 ONNX + TTA | None | 74.93% / 86.55% | 0.3197 / 0.8575 | 100.00% | +| V3 ONNX + TTA | Calibrated | 86.35% / 96.37% | 0.5676 / 0.8627 | 81.33% | + +### Genus + +| Pipeline | Confidence | Macro accuracy (full / >5) | Macro-F1 (full / >5) | Coverage | +|---|---|---:|---:|---:| +| MAMBO v2 | None | 78.94% / 82.07% | 0.3213 / 0.7942 | 100.00% | +| MAMBO v2 | Calibrated | 95.34% / 97.55% | 0.5869 / 0.7875 | 69.81% | +| V3 PyTorch | None | 80.53% / 83.83% | 0.3230 / 0.8057 | 100.00% | +| V3 PyTorch | Calibrated | 95.48% / 97.31% | 0.6019 / 0.8311 | 75.75% | +| V3 ONNX | None | 80.54% / 83.84% | 0.3245 / 0.8055 | 100.00% | +| V3 ONNX | Calibrated | 95.52% / 97.39% | 0.6043 / 0.8290 | 75.37% | +| V3 PyTorch + TTA | None | 84.73% / 88.13% | 0.3873 / 0.8552 | 100.00% | +| V3 PyTorch + TTA | Calibrated | 95.77% / 97.55% | 0.6776 / 0.8858 | 84.32% | +| V3 ONNX + TTA | None | 84.73% / 88.12% | 0.3877 / 0.8549 | 100.00% | +| V3 ONNX + TTA | Calibrated | 95.79% / 97.56% | 0.6760 / 0.8857 | 84.31% | + +### Family + +| Pipeline | Confidence | Macro accuracy (full / >5) | Macro-F1 (full / >5) | Coverage | +|---|---|---:|---:|---:| +| MAMBO v2 | None | 84.35% / 87.00% | 0.2697 / 0.8238 | 100.00% | +| MAMBO v2 | Calibrated | 99.64% / 99.58% | 0.6545 / 0.8021 | 77.44% | +| V3 PyTorch | None | 81.05% / 85.70% | 0.2805 / 0.7831 | 100.00% | +| V3 PyTorch | Calibrated | 99.33% / 99.22% | 0.5807 / 0.8161 | 73.06% | +| V3 ONNX | None | 81.06% / 85.72% | 0.2809 / 0.7843 | 100.00% | +| V3 ONNX | Calibrated | 99.33% / 99.22% | 0.5816 / 0.8174 | 73.26% | +| V3 PyTorch + TTA | None | 86.37% / 89.32% | 0.3592 / 0.8506 | 100.00% | +| V3 PyTorch + TTA | Calibrated | 98.92% / 98.75% | 0.7074 / 0.8802 | 82.09% | +| V3 ONNX + TTA | None | 86.37% / 89.32% | 0.3591 / 0.8502 | 100.00% | +| V3 ONNX + TTA | Calibrated | 98.92% / 98.75% | 0.7077 / 0.8806 | 82.13% | + +### Support retained and comparison figure + +Counts below describe truth classes outside the truncated average, not rejected images. +The prediction range counts accepted predictions into excluded classes, divided by all +52,788 reporting images. Truth and prediction counts must not be added. + +| Confidence | Rank | Shared classes | Truth outside: images / % | Accepted predictions outside: images / % (pipeline range) | +|---|---|---:|---:|---:| +| None | Species | 311 | 8,079 / 15.30% | 11,060–13,504 / 20.95%–25.58% | +| None | Genus | 242 | 221 / 0.42% | 6,814–8,015 / 12.91%–15.18% | +| None | Family | 20 | 5 / 0.01% | 385–897 / 0.73%–1.70% | +| Calibrated | Species | 273 | 10,001 / 18.95% | 5,780–7,678 / 10.95%–14.54% | +| Calibrated | Genus | 215 | 5,920 / 11.21% | 2,693–4,684 / 5.10%–8.87% | +| Calibrated | Family | 19 | 18 / 0.03% | 11–36 / 0.02%–0.07% | + +![Both confidence settings, full and truncated macro metrics, and coverage](assets/mambo-promoted-quality.svg) + +The [metric export](assets/mambo-promoted-tail.csv) retains macro precision, +recall and support cutoffs −1/5/10/20; the [JSON](assets/mambo-promoted-tail.json) +records exact class sets. The [threshold evidence](assets/mambo-promoted-thresholds.json) +contains per-rank calibrated thresholds, all full-support metrics and prediction hashes. +These are optional study operating points, not automatic deployment thresholds; +the CLI's `--threshold` applies one scalar to all ranks. The +[recipe comparison](mambo-composed-tta.md) shows the prior and new recipes +at matched coverage. Thresholding and truncation can change rankings; neither +should be confused with an improvement in underlying predictions. + +Regional filtering improves results on Flemming. The [single regional-effect figure](mambo-deployment-defaults.md#regional-filtering-effect) +summarizes global → Europe → northern Europe across pipelines and ranks using +the earlier padded-scale TTA; the new recipe has been fully evaluated only for northern Europe. +We recommend legacy `north_europe` here: the updated list adds 222 species but +no Flemming species coverage, and lowers measured accuracy/F1. It remains available +as `north_europe_v3` for broader eligibility; the V3 API/CLI default is now global (`full`). + +Speed remains **images per second**, measured end to end on an i7-12800H / RTX +3080 Ti Laptop, with four preparation/runtime CPU threads. CPU uses FP32. +New TTA timings use three fresh processes per backend/device, +with seven observations per cell. V2 and single-view V3 reuse the same earlier +image-bank measurements; laptop conditions can vary between campaigns. + +| Pipeline | CPU B1 | GPU B1 | GPU B8 | GPU B32 | +|---|---:|---:|---:|---:| +| MAMBO v2 | 1.26 | 45.19 | 44.85 | 83.49 | +| V3 PyTorch | 5.70 | 29.84 | 126.73 | 136.24 | +| V3 ONNX | 10.08 | 46.71 | 114.11 | 111.27 | +| V3 PyTorch + TTA | 2.04 | 10.10 | 41.74 | 50.89 | +| V3 ONNX + TTA | 3.39 | 16.50 | 39.40 | 38.27 | + +![CPU and GPU throughput](assets/mambo-promoted-speed.svg) + +The [timing evidence](assets/mambo-promoted-speed.json) retains trial ranges +and process-memory measurements. The [earlier comparison](mambo-deployment-defaults.md) +uses the previous padded-scale TTA; the [frequency curves](mambo-frequency-comparison.md) +compare single-view models only. Neither measures the new recipe. +The [loading study](mambo-loading-scaling.md) explains scheduling limits; +`preprocess_workers` / `--preprocess-workers` tunes preparation separately from +ONNX runtime `threads` and defaults to it. + +Use ordinary V3 for throughput and enable TTA when its accuracy/cost trade-off fits. +Recipe exploration used this Flemming dataset, so these results are descriptive, +not independent validation. The complementary [in-domain evaluation](mambo-indomain-evidence.md) is complete. +[Installed qualification](../dev/releases/mambo_v3/final-qualification.md) records +runtime/platform limits and the selected license; publication remains separate. +See the [evaluation workflow](../dev/releases/mambo_v3/evaluation.md). diff --git a/docs/mambo-family-precision.md b/docs/mambo-family-precision.md new file mode 100644 index 0000000..d83b11b --- /dev/null +++ b/docs/mambo-family-precision.md @@ -0,0 +1,87 @@ +# Rare-family sensitivity in the historical comparison + +**Historical padded-scale TTA evidence.** See the [deployment README](../deployment/README.md#release-comparison) +for the current rotation-and-padding comparison. + +V3's lower calibrated family macro precision and F1 came from **more predicted-only +families surviving rejection**, despite better recall. V2/V3 have identical parent +mappings for all 12,632 species; their shared northern-Europe list spans 67 families. +The 52,788-image Flemming reporting partition contains 23 truth families. + +## Effect on the averages + +The [threshold study](mambo-confidence-thresholds.md) defines the shared all-truth +reporting partition, separate per-pipeline calibration and pinned `mini_metrics`. +At the calibrated thresholds, all five pipelines predict the same 22 truth-present +families; Gelechiidae has truth support but no accepted predictions. Each additional +predicted-only family contributes a zero-precision, zero-F1 group—even a singleton. + +Precision and F1 cells show **official / truth-group diagnostic** scores. The diagnostic uses +`mini_metrics` to reaggregate its per-class outputs over truth-present families; +it changes the averaging domain, not predictions, thresholds or image rows. +It is explanatory, not a replacement benchmark. + +| Pipeline | Predicted-only families / images | Macro precision | Macro-F1 | Macro recall | Coverage | +|---|---:|---:|---:|---:|---:| +| MAMBO v2 | 3 / 4 | 0.8413 / 0.9561 | 0.6545 / 0.7399 | 0.6467 | 77.44% | +| V3 PyTorch | 7 / 31 | 0.7406 / 0.9762 | 0.5807 / 0.7575 | 0.6535 | 73.06% | +| V3 ONNX | 7 / 31 | 0.7406 / 0.9762 | 0.5816 / 0.7586 | 0.6549 | 73.26% | +| V3 PyTorch + TTA | 7 / 24 | 0.7394 / 0.9747 | 0.6073 / 0.7921 | 0.7002 | 78.74% | +| V3 ONNX + TTA | 7 / 23 | 0.7395 / 0.9748 | 0.6065 / 0.7911 | 0.6987 | 78.47% | + +The package weights give the precision decomposition: + +- V2: `0.956078 × 22 / (22 + 3) = 0.841349`. +- V3 PyTorch: `0.976235 × 22 / (22 + 7) = 0.740592`. + +Macro-F1 averages per-family F1, not the harmonic mean of macro precision/recall. +Its domain includes all 23 truth families plus predicted-only families: 26 groups +for V2, 30 for V3. Recall is unaffected by removing predicted-only groups because +they have no truth support. + +Bedelliidae accounts for 21 of V3's 31 accepted predicted-only cases (15 labelled +Erebidae, six Geometridae); the other six families have one or two cases each. +These are label-based errors, not expert-confirmed misidentifications or evidence +that a family cannot occur locally. The [per-family CSV](assets/mambo-family-precision.csv) +retains all five pipelines' counts and metric weights. + +## Why calibration changes the ranking + +At threshold zero, V2 predicts **41 absent families / 408 images**, versus +**37 / 756** for ordinary V3 (535 images for either TTA backend). Calibration +removes more of V2's low-confidence groups, leaving 3 versus 7. A shared family +threshold of **0.96** still leaves 3 groups for V2, 8 for ordinary V3 and 7 for TTA: +separate optimized thresholds are not the sole cause. + +Keep full-support metrics, recall and coverage alongside [tail-truncated results](mambo-tail-metrics.md). +Truncation intentionally hides this rare-family failure mode. Removing absent +families from deployment based on Flemming would tailor the vocabulary to the test. + +## Evidence and reproduction + +The [JSON](assets/mambo-family-precision.json) retains official scores, diagnostic +aggregations, confusion counts, source hashes and the verified name/taxonomy audit. +The CSV covers threshold zero, calibrated thresholds and 0.96. A blank metric with +zero weight means the package did not emit that group. + +The [audit script](../dev/releases/mambo_v3/family_precision_report.py) uses public +per-class calls (`aggregate=False`) and the pinned package's `_aggregate_groups`. +Prepare names/taxonomy with PyArrow/PyTorch, then use the existing pinned metrics +environment; no inference is needed: + +```python +from pathlib import Path +from dev.releases.mambo_v3.family_precision_report import prepare_taxonomy +from dev.releases.mambo_v3.evaluation_data import write_json + +write_json(Path("/tmp/family-taxonomy.json"), prepare_taxonomy( + Path("examples/global_lepi/0032836-250426092105405_processing_metadata_postprocessed_quality_filtered.parquet"), + Path("local-evidence/mambo-v3/MAMBO/hierarchical_bioclip2_ft_neu_v1.pt"), + Path("local-evidence/mambo-bundle-final/classes.json"), +)) +``` + +```sh +/path/to/pinned-metrics-env/bin/python -m dev.releases.mambo_v3.family_precision_report \ + --taxonomy /tmp/family-taxonomy.json --output /tmp/family-precision +``` diff --git a/docs/mambo-frequency-comparison.md b/docs/mambo-frequency-comparison.md new file mode 100644 index 0000000..100ec0f --- /dev/null +++ b/docs/mambo-frequency-comparison.md @@ -0,0 +1,56 @@ +# Accuracy versus class frequency + +Single-view V2/V3 evidence. For the comparison including default TTA, see the +[deployment README](../deployment/README.md#release-comparison). + +![Macro accuracy by training and evaluation frequency](assets/mambo-frequency-accuracy.svg) + +These curves compare MAMBO v2 with the single-view automatic v3 PyTorch/ONNX paths on the same +58,640 Flemming images. Northern Europe leads; Europe and global use the same +legacy lists in both releases. All 522 truth species remain in the main curves. + +Every bin's macro and micro accuracy is computed by pinned `mini_metrics` +`70cc69adc05362863439277048e06386c1f885e1`, with threshold 0, no optimization, +`simple=True` and `hierarchical=False`. The plot leads with **macro species +accuracy**, giving equal weight to each ground-truth species within a bin. Lines +connect descriptive bins; they are not fitted learning curves. Labels report the +number of species in each bin, and gaps denote empty bins. + +The two axes answer different questions: + +- **Training frequency:** rows per species in the pinned v3 source metadata's + training split, `set` 2–9. The split contains 5,063,857 rows. Validation (`set=1`) + and test (`set=0`) are excluded, with no extra deduplication. This is a common + reference axis for both models, **not verified v2 training exposure**, an epoch + count or a measure of effective exposure under sampling/pretraining. +- **Flemming frequency:** images per truth species in this expert evaluation set. + It describes evaluation support, not abundance in nature or training frequency. + Species with few images have particularly uncertain individual accuracies. + +For northern Europe, v3 improves macro accuracy in every occupied Flemming-support +bin. For species with 1–4 evaluation images, it rises from about **57.2% to 61.9%**; +for 20–99 images, from **74.2% to 77.1%**. The curves are not monotonic. In particular, +the highest occupied training bin contains only six species, so its shape should +not be generalized to common species overall. The 16 species absent from the +training metadata are outside the vocabulary and have zero species accuracy here. + +The [compact data](assets/mambo-frequency-comparison.json) retains bin counts, +image denominators, all/known-truth macro and micro accuracy, per-species support, +source hashes and metric provenance. Known-only results exclude truth outside the +selected vocabulary; the plotted all-truth curves do not. + +## Reproduce + +```sh +python -m dev.releases.mambo_v3.frequency_comparison counts \ + --metadata /path/to/pinned-metadata.parquet --output /path/to/new-counts.json +/path/to/pinned-metrics-env/bin/python -m dev.releases.mambo_v3.frequency_comparison measure \ + --counts /path/to/new-counts.json --v2 /path/to/v2-full \ + --v3 /path/to/mambo-accelerated-quality --output /path/to/new-frequency.json +python -m dev.releases.mambo_v3.frequency_comparison render \ + --data /path/to/new-frequency.json --output /path/to/charts +``` + +The metadata hash must match `construction.toml`. The measurement step checks +completed prediction reports, CSV hashes and identical image/truth identities. +The rendering step needs only the compact JSON, not images or the large metadata. diff --git a/docs/mambo-hpc-evidence.md b/docs/mambo-hpc-evidence.md new file mode 100644 index 0000000..b53b89b --- /dev/null +++ b/docs/mambo-hpc-evidence.md @@ -0,0 +1,62 @@ +# Current HPC deployment timings + +These measurements support the [deployment guide](../deployment/README.md). +A fresh full NVIDIA B200 / AMD EPYC 9655 allocation with a 48-vCPU quota ran commit +`503de96` on 25 September 2026. Runtime versions were PyTorch 2.14.0+cu132 and +ONNX Runtime 1.22.0; automatic precision selected FP16 and TF32 respectively. + +Global vocabulary; batch 256; no embeddings; four runtime threads. Streaming uses +48 preparation workers, 128 readers, a 4,096-image window, two prefetched batches +and a 1 GiB encoded-byte budget. Each variant runs in a separate process with three +warmed repetitions. The error bars show their range, not a confidence interval. +Updated request timing processes 256 images per call. Streaming processes the same 4,096 +images per pass, including pipeline startup and final result completion. These +modes must not be pooled. The figure retains the earlier CPU and smaller-batch +GPU request curves, replacing the batch-256 request points and streaming bars. +Updated points are not joined to older curves. Circles/lines are earlier evidence; +diamonds/bars are updated. This is warm-storage throughput, not cold WEKA performance. + +![CPU and GPU request throughput with updated B200 streaming](assets/mambo-hpc-current-speed.svg) + +| Variant | Request images/s | Streaming images/s | Peak host GiB | +|---|---:|---:|---:| +| V3 PyTorch | 1,469.3 | 1,975.7 | 4.01 | +| V3 ONNX | 761.9 | 996.5 | 4.75 | +| V3 PyTorch + TTA | 391.4 | 623.9 | 5.84 | +| V3 ONNX + TTA | 211.8 | 396.1 | 7.35 | + +Host memory is the high-water mark of each complete benchmark process, not a +per-mode or GPU-memory measurement. TTA uses `rotation30_pad25_3`. Both ONNX sessions +used the optimized graph profile with no failed compatibility attempts. + +[Raw repetition timings](assets/mambo-hpc-current-speed.csv) retain both execution +modes. [Provenance](assets/mambo-hpc-current-provenance.json) records configuration, +runtime versions, source report hashes, sample/bundle identities and hardware. +These improvements do not establish GPU saturation or general HPC scalability. +No new quality evaluation was performed by this speed check. + +## Earlier CPU and V2 comparisons + +CPU and V2 have not been rerun; their values in the combined figure are unchanged. +The [earlier campaign figure](assets/mambo-indomain-speed.svg), +[request observations](assets/mambo-indomain-speed.csv), +[streaming observations](assets/mambo-indomain-streaming-speed.csv), and +[campaign provenance](assets/mambo-indomain-campaign.json) retain the EPYC CPU, +V2 and batch-size comparisons. They use an earlier V3 adapter and a different +streaming protocol; do not present them as current implementation timings or join +them to the new batch-256 points as one scaling curve. The laptop results in the +main guide are also retained as historical consumer-device evidence. + +## Reproduce the published figure + +With the extracted B200 archive available locally: + +```sh +.venv/bin/python -m dev.releases.mambo_v3.hpc_speed_report \ + --source local-evidence/ucloud-speed-smoke-2026-09-25/b200-full-gather \ + --output docs/assets \ + --baseline docs/assets/mambo-indomain-speed.csv +``` + +The [speed workflow](../dev/releases/mambo_v3/speed-smoke.md) records how to run the +experiment. Further throughput work is deferred for the deployment freeze. diff --git a/docs/mambo-indomain-evidence.md b/docs/mambo-indomain-evidence.md new file mode 100644 index 0000000..0c00738 --- /dev/null +++ b/docs/mambo-indomain-evidence.md @@ -0,0 +1,86 @@ +# In-domain deployment evidence + +Global vocabulary; 568,939 reporting images and 63,974 separate calibration images from the original 632,913-image test split. All truth is in vocabulary. Shared label-stratified 90/10 split, seed 42, grouped by image ID; per-rank mini_metrics Macro-F1 calibration, eps=0.01, quantiles, no bootstraps. + +The recipe was selected on Flemming. These general photographs complement the more deployment-relevant Flemming monitoring crops; their different TTA response does not invalidate that deployment evidence. + +Full support / >5 values use the same reporting rows. >5 requires truth and accepted-prediction support in every pipeline, separately per confidence setting. No rows are removed; per-class FP/FN remain intact. + +## Species + +| Pipeline | Confidence | Threshold | Macro accuracy (full / >5) | Macro-F1 (full / >5) | Coverage | +|---|---|---:|---:|---:|---:| +| MAMBO v2 | None | 0.0000 | 87.75% / 89.20% | 0.8504 / 0.8701 | 100.00% | +| MAMBO v2 | Calibrated | 0.3833 | 90.37% / 91.77% | 0.8577 / 0.8795 | 96.00% | +| V3 PyTorch | None | 0.0000 | 92.96% / 93.72% | 0.9145 / 0.9258 | 100.00% | +| V3 PyTorch | Calibrated | 0.5272 | 94.59% / 95.33% | 0.9207 / 0.9325 | 97.46% | +| V3 ONNX | None | 0.0000 | 92.95% / 93.72% | 0.9145 / 0.9258 | 100.00% | +| V3 ONNX | Calibrated | 0.5275 | 94.60% / 95.33% | 0.9208 / 0.9326 | 97.45% | +| V3 PyTorch + TTA | None | 0.0000 | 90.32% / 91.61% | 0.8931 / 0.9073 | 100.00% | +| V3 PyTorch + TTA | Calibrated | 0.3543 | 92.43% / 93.63% | 0.8991 / 0.9146 | 96.99% | +| V3 ONNX + TTA | None | 0.0000 | 90.33% / 91.62% | 0.8932 / 0.9074 | 100.00% | +| V3 ONNX + TTA | Calibrated | 0.3529 | 92.44% / 93.64% | 0.8991 / 0.9147 | 97.00% | + +## Genus + +| Pipeline | Confidence | Threshold | Macro accuracy (full / >5) | Macro-F1 (full / >5) | Coverage | +|---|---|---:|---:|---:|---:| +| MAMBO v2 | None | 0.0000 | 94.49% / 94.80% | 0.9214 / 0.9273 | 100.00% | +| MAMBO v2 | Calibrated | 0.5076 | 97.10% / 97.34% | 0.9316 / 0.9383 | 96.27% | +| V3 PyTorch | None | 0.0000 | 97.00% / 97.14% | 0.9600 / 0.9637 | 100.00% | +| V3 PyTorch | Calibrated | 0.6511 | 98.44% / 98.52% | 0.9671 / 0.9705 | 98.04% | +| V3 ONNX | None | 0.0000 | 97.00% / 97.14% | 0.9600 / 0.9636 | 100.00% | +| V3 ONNX | Calibrated | 0.6541 | 98.44% / 98.53% | 0.9671 / 0.9704 | 98.02% | +| V3 PyTorch + TTA | None | 0.0000 | 95.25% / 95.55% | 0.9422 / 0.9468 | 100.00% | +| V3 PyTorch + TTA | Calibrated | 0.4268 | 97.15% / 97.41% | 0.9493 / 0.9541 | 97.27% | +| V3 ONNX + TTA | None | 0.0000 | 95.24% / 95.54% | 0.9422 / 0.9468 | 100.00% | +| V3 ONNX + TTA | Calibrated | 0.4292 | 97.17% / 97.43% | 0.9494 / 0.9542 | 97.25% | + +## Family + +| Pipeline | Confidence | Threshold | Macro accuracy (full / >5) | Macro-F1 (full / >5) | Coverage | +|---|---|---:|---:|---:|---:| +| MAMBO v2 | None | 0.0000 | 97.06% / 96.97% | 0.9598 / 0.9602 | 100.00% | +| MAMBO v2 | Calibrated | 0.6285 | 98.86% / 98.83% | 0.9637 / 0.9650 | 98.52% | +| V3 PyTorch | None | 0.0000 | 98.47% / 98.43% | 0.9804 / 0.9798 | 100.00% | +| V3 PyTorch | Calibrated | 0.8646 | 99.49% / 99.47% | 0.9828 / 0.9823 | 98.98% | +| V3 ONNX | None | 0.0000 | 98.46% / 98.41% | 0.9800 / 0.9794 | 100.00% | +| V3 ONNX | Calibrated | 0.8654 | 99.49% / 99.47% | 0.9828 / 0.9823 | 98.98% | +| V3 PyTorch + TTA | None | 0.0000 | 96.81% / 96.72% | 0.9645 / 0.9644 | 100.00% | +| V3 PyTorch + TTA | Calibrated | 0.6618 | 98.85% / 98.81% | 0.9666 / 0.9665 | 97.72% | +| V3 ONNX + TTA | None | 0.0000 | 96.81% / 96.72% | 0.9645 / 0.9644 | 100.00% | +| V3 ONNX + TTA | Calibrated | 0.6640 | 98.85% / 98.81% | 0.9665 / 0.9664 | 97.70% | + +## Support outside the truncated average + +| Confidence | Rank | Shared classes | Truth images outside | Proportion | +|---|---|---:|---:|---:| +| zero | species | 10732 | 9,681 | 1.70% | +| zero | genus | 4077 | 1,912 | 0.34% | +| zero | family | 101 | 13 | 0.00% | +| optimized | species | 10602 | 10,680 | 1.88% | +| optimized | genus | 4042 | 2,143 | 0.38% | +| optimized | family | 101 | 13 | 0.00% | + +Machine-readable [metrics](assets/mambo-indomain-tail.csv), [thresholds and split identities](assets/mambo-indomain-thresholds.json), and [class domains](assets/mambo-indomain-support.json) retain provenance and supplementary metrics. Thresholds are dataset-specific evidence, not new deployment defaults. + +## Historical HPC timing boundaries + +The latest V3 B200 timings are in the [current HPC evidence](mambo-hpc-evidence.md). The observations below predate the pipeline improvements. + +The EPYC 9655/B200 campaign retains 3 fresh-process trials per variant/device, 7 request observations per cell and 3 streaming observations per cell. Global and northern-Europe timing presets are available. CPU runtime threads: 4; streaming preparation workers: 48; readers: 256. Request, streaming and prepared-input diagnostics have different boundaries; do not pool them. The short streaming bank contains 1,024 images and includes pipeline startup. Prepared-input diagnostics exclude decoding/hierarchy reduction but include transfers, and remain supplementary. + +[Request observations](assets/mambo-indomain-speed.csv) and [streaming observations](assets/mambo-indomain-streaming-speed.csv) retain all trials. [Campaign provenance](assets/mambo-indomain-campaign.json) identifies source hashes and runtime environments. Peak host memory spans each complete benchmark process and its tested batch sizes; it is not per-cell model memory. V2 was tested through batch 32 on GPU, V3 through batch 256. + +## Reproduce + +Use the pinned mini_metrics environment described in the [UCloud workflow](../dev/releases/mambo_v3/ucloud-release.md). From the repository root, with the extracted archive beneath `local-evidence/ucloud-2026-09-25/`: + +```sh +python -m dev.releases.mambo_v3.indomain_report \ + --root local-evidence/ucloud-2026-09-25/mambo-results/runs-transfers \ + --output local-evidence/ucloud-2026-09-25/presentation +python -m dev.releases.mambo_v3.indomain_speed \ + --source local-evidence/ucloud-2026-09-25/mambo-results/summary-transfers \ + --output local-evidence/ucloud-2026-09-25/presentation +``` diff --git a/docs/mambo-inference-pipeline-review.md b/docs/mambo-inference-pipeline-review.md new file mode 100644 index 0000000..f9c6f27 --- /dev/null +++ b/docs/mambo-inference-pipeline-review.md @@ -0,0 +1,136 @@ +# V2/V3 inference pipeline: decisions and remaining limits + +The 25 September 2026 review compared V3 `0eb90b2` with V2 +`32b3cd661778356b2e8c4cff5b10fa9061aa6f5d`; the final measured stack was `503de96`. +Further throughput work is **deferred for the release freeze**. +[HPC evidence](mambo-hpc-evidence.md) owns current timings, historical comparisons +and measurement provenance. This page retains implementation decisions and limits +needed for future performance work. + +## What the evidence established + +V3 initially lacked V2's AMP use and shifted hierarchy reduction, selection and +preprocessing into costly portable CPU/NumPy work. Restoring AMP and native +hierarchy repaired regressions. V2 itself read requests serially, transferred per +image and translated labels through scalar device reads; its evaluation harness +also differed from its public API. Different backbones, resolutions and precision +prevent attributing a V2/V3 end-to-end ratio solely to model or adapter efficiency. + +The original 632,913-image Torch collection spent 549.3 s waiting for staged inputs +across 875.7 s total. Background assembly took 647.2 s, model-stream intervals +212.9 s, H2D 27.5 s and D2H 1.36 s. **These times overlap:** ready-batch delivery, +rather than bulk output transfer or CSV writing, was the consequential target. +Utilization samples are neither phase timings nor SM occupancy, and event +intervals can include host-submission gaps. + +A [resident-batch reference](../dev/releases/mambo_v3/pipeline-probe.md#measure-resident-gpu-throughput) +reached 3,667 / 3,781 / 3,818 images/s at batches 256 / 512 / 1,024 with almost +continuous kernels. The small gain justified prioritizing the host pipeline over +larger batches. This reference excludes transfers and CPU results and predates the +final normalization changes; it is not an application throughput ceiling. + +## Current implementation and ownership + +```text +Batch producer Backend executor Result consumer +read → decode → prepare → H2D → inference → D2H → format / save / yield +owns bounded batch storage owns device buffers/events owns completed results +``` + +- [Input admission](../deployment/mambo_deploy/streaming.py) has one owner reserving + bytes in input order and dispatching reads. IO workers perform filesystem work, + never capacity waits. Read lookahead, encoded bytes and prepared batches have + independent bounds; workers fill disjoint reusable batch slices and completion + events preserve output order without serial stacking or future polling. +- [Preparation](../deployment/mambo_deploy/preprocessing.py) uses native Torch + JPEG/PNG decoding where supported, with a portable fallback. Torch CUDA stages + nearest-square uint8 inputs and finishes interpolation/crop/normalization on + device: batch-256 input storage is 108 MiB versus 432 MiB float32, not total + memory. CPU and standalone ONNX prepare FP32 without requiring Torch. +- [TTA](../deployment/mambo_deploy/augmentation.py) decodes once and preserves + geometry and logit averaging. Virtual edge padding avoids allocating padded + originals; custom transforms retain full-resolution copy isolation. Arbitrary + rotation uses Pillow after the slower NumPy sampler was removed. +- [Transfers](../deployment/mambo_deploy/transfers.py) and + [result completion](../deployment/mambo_deploy/result_worker.py) separate Torch + submission from waiting: a dedicated download stream and bounded result worker + overlap completion with inference. Events protect device-slot reuse and pinned + output lifetime. ONNX retains a synchronous output boundary; I/O binding alone + does not make it asynchronous. +- [Prediction](../deployment/mambo_deploy/predictor.py) reuses hierarchy/vocabulary + plans, avoids repeated top-1 scans and normalized-probability matrices, and + retains public raw logits and optional embeddings. Backend imports resolve at + initialization/first use rather than per hot operation. + +Request and streaming retain different scheduling/collection costs. Raw-logit +outputs, per-view head work and the shared core's embedding-context concurrency +boundary constrain further simplification. Core changes require the separate +feature-branch route. + +## Consequential negative results + +| Attempt | Observation | Durable lesson | +| --- | --- | --- | +| Early transfer overlap | No demonstrated B200 end-to-end gain; input delivery still dominated. | An asynchronous producer can remain the bottleneck. Improve service demands and ownership before adding queues. | +| IO workers waiting for ordered admission (`0c6ace2`) | Torch streaming fell from 1,232.4 to 604.8 images/s; moving admission to its owner recovered 1,226.8. | Capacity waits must not occupy IO worker slots. Local tests did not establish high-concurrency throughput. | +| NumPy rotation sampling only needed pixels (`0ac0422`) | Non-TTA Torch improved to 1,826.6 images/s with native decode, but Torch/ONNX TTA fell 21–24% from the preceding run. | Extra array passes, gathers and allocations can outweigh fewer sampled pixels. Restore the faster compiled operator. | + +Final gains reflect the combined stack, not isolated patch attribution. Imported +baseline/compact reports agree on sample order, bundle/lists, settings and runtimes; +the final run used another GPU UUID with the same full B200 model and 48-vCPU quota. +Torch's three streaming passes ranged 1,795–2,109 images/s. Small median changes +warrant less weight than large gains. The preparation-run comparison above came +from the operator's summary, not a complete imported archive. + +## If performance work resumes + +Throughput approaches the slowest stage's capacity only when stage resources are +sufficiently independent. Preparation and postprocessing share CPU/GIL/memory +bandwidth; transfers and kernels share memory fabrics. Outstanding IO hides +latency but supplies no downstream compute. Use actual CPU quota/NUMA placement +and per-GPU demand rather than host-wide CPU counts. + +The final counters identify two investigation priorities: + +- **ONNX preparation and contention:** background input wait was 10.93 s across + 12.50 s elapsed without TTA, and 26.38 s across 30.71 s with TTA. This points to the producer before + inference kernels; background waits are not GPU-idle percentages or proof of + storage latency. +- **Torch submission and buffer reuse under load:** H2D averaged 2.6 ms/batch + versus 52.4 ms transfer-worker elapsed, including slot availability/dispatch. + Preparation consumed 88.8 worker-seconds across 6.30 s wall time, far below 48 + continuously active workers. Inspect submission, slot reuse and result completion + before adding workers; these counters do not isolate their individual costs. + +Final Torch streaming was 53.9% of the earlier resident throughput, **not GPU +utilization**. Saturation and general HPC scalability remain unproven. Use the +[mocked pipeline probe](../dev/releases/mambo_v3/pipeline-probe.md) and one +representative timeline, then the existing +[four-variant smoke](../dev/releases/mambo_v3/speed-smoke.md). Preserve ordering, +geometry, partial batches, embeddings, custom transforms, early close and buffer +lifetimes. Unchanged numerical behavior does not require another quality campaign. + +Prefer maintained backend mechanisms when they simplify ownership: +[DataLoader](https://docs.pytorch.org/docs/main/data.html), +[torchvision native operations](https://docs.pytorch.org/vision/stable/transforms.html#performance-considerations) +and [ORT I/O binding](https://onnxruntime.ai/docs/execution-providers/CUDA-ExecutionProvider.html#performance-tuning). +[DALI](https://docs.nvidia.com/deeplearning/dali/user-guide/docs/pipeline.html) is an +optional acceleration reference, not a dependency. +[Triton batching](https://docs.nvidia.com/deeplearning/triton-inference-server/user-guide/docs/user_guide/batcher.html) +combines independent requests; it cannot repair an underfed offline pipeline. +Keep a bounded portable path for restricted installations. + +## Retained evidence + +Final archive SHA-256: +`d51ee3105af4e37aa048bb16fed4c94a9cd87dfefd2a574bbe9e924aec7e6947`. +Ignored local reports and `gather-analysis.json` are under +`local-evidence/ucloud-speed-smoke-2026-09-25/`, final reports in `b200-full-gather/`. +Earlier mechanism checks are in `local-evidence/pipeline-review/`, +`compact-preparation/` and `stream-owner/`; they are not B200 timing substitutes or +remotely available evidence. + +The linked HPC page retains public timing repetitions, hashes and execution scopes. +The smoke produced no new quality metrics; +[installed release qualification](../dev/releases/mambo_v3/final-qualification.md) +is separate evidence. diff --git a/docs/mambo-integration.md b/docs/mambo-integration.md new file mode 100644 index 0000000..ce14650 --- /dev/null +++ b/docs/mambo-integration.md @@ -0,0 +1,134 @@ +# MAMBO integration details + +Start with the [deployment quickstart](../deployment/README.md). This page covers +runtime choices, restricted environments and optional tuning; these are not +additional steps for the default ONNX/CPU integration. + +## Runtime installation + +Use an activated Python 3.12+ environment. The commands target the prepared public release; reviewers can substitute the +supplied wheels before publication. Choose one runtime installation: + +| Environment | Installation | Predictor options / CLI | +|---|---|---| +| CPU, without PyTorch | `uv pip install 'mambo-v3[onnx]==0.3.0'` | Defaults: `backend="onnx", device="cpu"` / `--backend onnx --device cpu` | +| NVIDIA GPU, without the training package | `uv pip install 'mambo-v3[onnx-cuda]==0.3.0'` | `backend="onnx", device="cuda:0"` / `--backend onnx --device cuda:0` | +| PyTorch CPU or NVIDIA GPU | `uv pip install --torch-backend=auto 'mambo-v3[torch]==0.3.0'` | `backend="torch", device="cpu"` or `device="cuda:0"` / `--backend torch --device cpu` or `--device cuda:0` | + +For an environment with ONNX Runtime already provisioned, install the base +`mambo-v3==0.3.0` without extras. Do not install CPU and GPU ONNX Runtime +packages together. Use the application's dependency management to select and +record versions; inference never installs or replaces runtime packages. If you +use `uv run`, pass `--no-sync` to retain the installed environment. + +ONNX removes the training-package dependency and provides the same Python and CLI +interface on CPU or CUDA. The adapter currently exposes only CPU and NVIDIA CUDA; +it does not automatically enable other ONNX execution providers. Availability of +a compatible runtime wheel and adequate memory still matters on edge hardware. +Linux measurements do not establish support for every OS or accelerator. + +CUDA requires a compatible NVIDIA driver and runtime build. The `onnx-cuda` extra +requests CUDA/cuDNN dependencies; it cannot guarantee that a wheel includes kernels +for every GPU architecture. The B200 evidence uses ONNX Runtime 1.22.0, recorded in +[the measured environment](mambo-hpc-evidence.md), not a universal version pin. +Requested unavailable CUDA raises an error rather than silently switching the +whole model to CPU; ONNX may place individual operators on CPU. + +ONNX/CUDA probes each graph once when first loaded. A GPU-kernel compatibility +failure triggers a checked retry with graph optimizations disabled and a warning. +If that also fails, inference stops with an error. Sessions are reused; inspect +`predictor.onnx_session_info` when diagnosing a runtime problem. This check does +not guarantee every batch-dependent execution path. + +## Restricted and offline environments + +Models are cached in `~/.cache/mambo` (or `$XDG_CACHE_HOME/mambo`). Set `MAMBO_CACHE` +to a writable persistent directory when the default home is unsuitable. +First use requires outbound access to the public ERDA model files; later calls +reuse verified assets. + +For deployment without network access, provision dependencies beforehand and either: + +- Run the intended backend and output mode on a connected machine, copy its model + cache, set `MAMBO_CACHE` to that location and set `MAMBO_OFFLINE=1`. Include a call + with embeddings if the application will request them; that uses another ONNX graph. +- Supply a complete release bundle and pass `Predictor(bundle="/path/to/bundle")`, + `--bundle /path/to/bundle`, or set `MAMBO_BUNDLE`. Keep each ONNX graph beside its + external `model.onnx.data` file. An explicit bundle is read locally. + +The same model files serve CPU and CUDA for each backend. No training dataset or +metadata parquet is required. Prediction results and model caches are separate: +the API returns results to the application; the CLI writes to its chosen output +directory. Raw PyTorch checkpoints require the matching architecture/runtime; +use the release adapter rather than loading them as arbitrary models. + +## Moving from V2 + +For existing callers, `mini_trainer.deploy.Predictor` preserves native result +containers/device tensors, native/CUDA defaults, callable prediction and +`class_mask` (`-1` resets it). The portable `mambo_deploy.Predictor` instead defaults +to ONNX/CPU and returns CPU results. The two entry points share release model assets. + +Keep `europe` or `north_europe` for the legacy preset; `_v3` presets deliberately +change eligibility. Supply original pixels to the portable API, not tensors +normalized by an old preprocessing pipeline. Match class identities using GBIF +IDs rather than positions. V3 embeddings have width 1,280; recreate stored +embeddings if migrating a similarity index from V2. Confidence thresholds are +model/list specific. + +`weights=` is not a V2/V3 selection switch: a native override must match the pinned +release checkpoint. Keep the V2 runtime/assets separately if you still need to run +V2. Preserving its calling conventions does not imply identical predictions or a +shared embedding space. + +For an interactive application, call `predictor.configure(model="north_europe", tta=True)` +to change scope and TTA while reusing loaded models. Omitted settings stay unchanged; +`class_list=[...]` selects custom species, `model="full"` resets the scope, and +`tta=False` disables TTA. Finish any active stream before reconfiguring. + +## Streaming controls + +`predict_stream(paths)` yields ordered prediction batches; `embeddings=True` yields +`(prediction, vectors)` pairs. Consume each batch without retaining it to keep +output memory bounded. Use `contextlib.closing` when stopping early; shutdown waits +for filesystem calls already in progress. + +Start with defaults, then change the resource relevant to your workload. These +options belong to `predict_stream`, not the constructor or CLI: + +| Option | Default | When it matters | +|---|---|---| +| `read_workers` | `32` | Concurrent file reads, useful for storage latency. | +| `read_window` | `max(128, batch_size)` images | Maximum lookahead; follows larger batches automatically unless explicitly set. | +| `prepare_workers` | Predictor's `preprocess_workers` | Decoding and image preparation; shares CPU capacity with your application. | +| `prefetch_batches` | `2` | Prepared input buffer size; trades memory for overlap. | +| `encoded_budget` | `256 * 1024**2` bytes | Encoded image buffer budget; a larger single file fails explicitly. | + +These budgets do not bound total process memory: model weights, decoded images, +prepared views and results also consume memory. `predict()` accumulates results +for the whole input collection; submit bounded requests there. The CLI streams +predictions and embeddings to disk and publishes the output directory only when +the complete run succeeds. + +For diagnostics, `stats={}` collects queue/buffer and wait statistics; +`device_prefetch=False` disables device staging. These are not routine integration +settings. Calls using one predictor share serialized inference; adding caller +threads alone does not create concurrent model execution. + +## Versioning and model identity + +The distribution name `mambo-v3` identifies the model generation. Package updates +within that distribution retain the released V3 weights and existing preset +identities; changed weights belong to a new model-generation package. Pin +`mambo-v3==0.3.0` to preserve the adapter implementation too, and retain your +application's resolved runtime dependencies for reproducibility. + +The Python namespace stays `mambo_deploy`. Do not install multiple model-generation +packages or the older `mambo-deploy` candidate in one environment; use separate +environments for comparisons. The `model=` argument selects geographic scope, +not a trained-model release. Result metadata identifies the model and selected +list. Explicit local bundles are an advanced override, not an automatic upgrade. + +Model files are cached by their SHA-256 identity and reused across metadata-only +updates. Copies placed beside ONNX graphs keep bundles relocatable; there is no +runtime package installation or mutable remote "latest model" lookup. diff --git a/docs/mambo-loading-scaling.md b/docs/mambo-loading-scaling.md new file mode 100644 index 0000000..6bc336f --- /dev/null +++ b/docs/mambo-loading-scaling.md @@ -0,0 +1,31 @@ +# Historical loading and scheduling diagnosis + +After initial GPU acceleration, the synchronous adapter still prepared each +batch before running inference. Increasing batch size could not hide that +per-image cost. This led to the bounded streaming implementation described in +the [current pipeline review](mambo-inference-pipeline-review.md). + +## Findings worth retaining + +At four preparation workers, native batch-32 prepared-input throughput was +343.7 images/s versus 129.1 for the complete synchronous request. ONNX reached +203.3 versus 100.5. Prepared-input timing included transfers and CPU species +scores, but excluded loading and hierarchy; separately measured medians are +not additive. + +One-batch lookahead improved native throughput from 128.2 to 154.2 images/s +and ONNX from 99.6 to 155.2. Eight workers helped native slightly but reduced +ONNX lookahead throughput to 132.7. The lesson is to budget preparation and +runtime threads separately and overlap stages, rather than assume more workers +or larger batches always help. + +This was a warm-cache laptop experiment on 128 images, not an HPC worker-count +recommendation or a replacement for fresh-process release benchmarks. + +## Evidence and replay + +[Recorded measurements](assets/mambo-loading-scaling.json) retain all sweeps; +the [historical report](https://github.com/asgersvenning/mini_trainer/blob/852bf712e85b8d1a6b9c9c6d31b3b5d807904303/docs/mambo-loading-scaling.md) +records the method and commands for its retired diagnostic tools. +Use the [pipeline probe](../dev/releases/mambo_v3/pipeline-probe.md) and +[speed smoke](../dev/releases/mambo_v3/speed-smoke.md) for current behavior. diff --git a/docs/mambo-release-comparison.md b/docs/mambo-release-comparison.md new file mode 100644 index 0000000..8988533 --- /dev/null +++ b/docs/mambo-release-comparison.md @@ -0,0 +1,154 @@ +# MAMBO_v2 → v3: real-world deployment comparison + +Historical comparison of V2 and the **original V3 FP32 pipeline** on the same +**58,640 Flemming images** and laptop. Northern Europe leads; Europe and global +show the effect of broader vocabularies. V3 includes PyTorch and standard ONNX. +The [acceleration study](mambo-accelerated-deployment.md) records subsequent +FP16/TF32 improvements; use the [deployment guide](../deployment/README.md#release-comparison) +for current adoption comparisons. + +## Prediction quality + +![Species, genus and family accuracy, plus species macro-F1 for all three lists](assets/mambo-release-quality.svg) + +Macro metrics weight classes equally; micro accuracy weights images equally. +Northern-Europe macro accuracy improves while macro-F1 falls slightly. Global +macro accuracy improves despite lower micro accuracy: both views matter. + +| Preset | v2 macro accuracy | v3 macro accuracy | v2 macro-F1 | v3 macro-F1 | v2 micro accuracy | v3 micro accuracy | +|---|---:|---:|---:|---:|---:|---:| +| Northern Europe | 68.52% | 71.24% | 0.2575 | 0.2545 | 68.71% | 70.79% | +| Europe | 66.04% | 69.06% | 0.2000 | 0.1993 | 66.96% | 68.95% | +| Global | 57.21% | 58.03% | 0.0899 | 0.0971 | 59.36% | 58.43% | + +The [complete CSV](assets/mambo-release-metrics.csv) retains 48 rows / 336 scores: +macro accuracy, precision, recall and F1, micro accuracy, Theil U and coverage, +at all three ranks, both truth populations and including updated European lists. +The chart JSON also retains these complete results. + +![Six species metrics over all Flemming truth](assets/mambo-release-species-all.svg) + +![Six species metrics restricted to known truth](assets/mambo-release-species-known.svg) + +Both releases use identical legacy lists. Predictive metrics come from +`mini_metrics` commit `70cc69adc05362863439277048e06386c1f885e1`: + +| Display | `metrics.json` source | Averaging and population | +|---|---|---| +| Lead species/genus/family accuracy | `all.accuracy["0"/"1"/"2"]` | Macro: equal weight per ground-truth class | +| Additional micro accuracy | `all.micro_accuracy[rank]` | Equal weight per image | +| Species macro-F1 | `all.f1["0"]` | Equal weight over the union of true and predicted species | +| Known-truth accuracy | `known.micro_accuracy[rank]` | Micro, restricted to truth in the active preset vocabulary | + +Calls use `threshold=0`, `optimal=False`, `simple=True`, `hierarchical=False`; +the main chart uses `known_only=False`. No predictions are rejected or thresholds +fitted. Lists limit predictions, **not evaluation truth**: all 522 species remain, +including 8,042 images from 16 species outside the vocabulary. Known-only species +results retain 50,598 images from 506 species for each list; membership is checked +separately at genus and family level. Lists were not tuned to Flemming. + +Macro precision averages predicted classes, recall averages truth classes, and +F1 averages their union. Predicted-only species therefore count in F1, whereas +classes with neither truth nor predictions do not: northern Europe has 1,221 +active classes for V2 and 1,308 for V3, rather than just the 506 known species or +every preset species. At threshold zero, macro accuracy equals macro recall. +Theil U is an information-based association score, not accuracy. + +## Inference speed + +V2's CPU API failed with `expected scalar type BFloat16 but found Float`. +CPU bars use the value-preserving caller adaptation +`predictor.preproc = lambda x: original_preproc(x).float()`. +V2 GPU and quality measurements use the unchanged published path. + +![CPU and GPU throughput by model pipeline and region](assets/mambo-release-speed.svg) + +For northern Europe, the measured medians are: + +| Pipeline | CPU, batch 1 | GPU, batch 1 | GPU, batch 8 | GPU, batch 32 | +|---|---:|---:|---:|---:| +| v2 PyTorch (CPU input cast) | 1.26 | 45.2 | 44.8 | 83.5 | +| v3 PyTorch | 6.74 | 27.1 | 46.6 | 44.5 | +| v3 ONNX | 9.64 | 30.4 | 42.8 | 42.4 | + +All speeds are **images per second; higher is better**. V3 improves CPU throughput; +V2 leads GPU batches 1 and 32 in this historical FP32 comparison. + +Timings include decoding, preparation, classification and completed CPU results. +Three fresh-process trials use the same seeded image bank; whiskers span trial +medians. Source data also retains CPU batch 8 and updated-list timings. + +### Why v3 throughput plateaus + +This historical adapter passed whole NCHW batches, up to 32, but decoded and +prepared images serially before inference. Three-trial northern-Europe timings +separate preparation from backend execution: + +| Backend | Batch | CPU preparation, ms/batch | Prepared backend, ms/batch | End-to-end, images/s | +|---|---:|---:|---:|---:| +| PyTorch | 1 | 14.9 | 18.5 | 27.1 | +| PyTorch | 8 | 126.3 | 46.7 | 46.6 | +| PyTorch | 32 | 519.5 | 181.4 | 44.5 | +| ONNX | 1 | 16.6 | 13.4 | 30.4 | +| ONNX | 8 | 134.5 | 50.6 | 42.8 | +| ONNX | 32 | 559.4 | 180.6 | 42.4 | + +These separately timed medians are not additive. The +[batch-scaling diagnosis](mambo-batch-scaling.md) retains shape/provider checks and +controlled interventions identifying non-contiguous, partly float64 interpolation +and strict FP32 execution. The linked acceleration study measures the resulting fixes. + +## Memory and startup + +![Host process memory and loading time for the released pipelines](assets/mambo-release-resources.svg) + +Median peak host memory during CPU execution falls from **4,123 MiB** for adapted +v2 to **1,573 MiB** for v3 PyTorch and **587 MiB** for v3 ONNX. Loading plus the first +CPU prediction falls from **209 s** to **40.5 s** and **0.38 s**, respectively. + +Native GPU allocator peaks during the batch sweep are: + +| Pipeline | Peak allocated GPU memory | Peak reserved GPU memory | +|---|---:|---:| +| v2 PyTorch | 1,936 MiB | 2,072 MiB | +| v3 PyTorch | 865 MiB | 1,348 MiB | +| v3 ONNX | Not measured comparably | Not measured comparably | + +GPU counters exclude allocations outside PyTorch; ONNX snapshots are not comparable +allocator peaks. Host RSS covers loading and the full sweep (CPU batches 1/8; +GPU also 32), not GPU VRAM. Startup uses cached assets and includes construction, +classifier initialization and the first completed prediction, excluding process +launch and explicit runtime setup. Reuse the predictor to amortize this cost. + +## Updated v3 European lists + +![Accuracy changes from legacy to updated European presets](assets/mambo-release-preset-delta.svg) + +Updated northern Europe adds 222 species and Europe adds 72, with no removals. +Their macro accuracy becomes **70.49% / 68.88%**, micro accuracy **70.32% / 68.81%** +and macro-F1 **0.2367 / 0.1975**, versus the legacy values above. Broader occurrence +eligibility costs some measured Flemming performance. The +[preset catalogue](model-presets.md) defines geographic scope and construction. + +## Reproduce and interpret + +The [comparison workflow](../dev/releases/mambo_v3/release-comparison.md) pins the +historical source, head weights, external BioCLIP-2 backbone and metric revision. +[Chart source data](assets/mambo-release-comparison.json) contains compact metrics, +timing summaries and evidence hashes, and can regenerate the figures without +image data. Raw predictions and timing observations remain under `local-evidence/`. + +V2 uses its original release API, including a 512-pixel initial resize, BioCLIP +preprocessing to 224 pixels and CUDA float16 autocast. V3 uses its 384-pixel release +recipe and FP32. These choices are part of the real-world pipeline comparison. +The v2 historical code is unchanged, running with the documented contemporary +comparison environment. Both releases use the same PyTorch/CUDA installation; +ONNX Runtime is 1.30.0. Hardware is an i7-12800H / RTX 3080 Ti Laptop GPU (16 GB), +on AC power under Linux/WSL2, with four CPU threads and TF32 disabled. + +The earlier [v3 qualification report](mambo-v3-evaluation.md) covers embedding-mode +consistency, additional timing detail and installed-package checks. +[In-domain comparison](mambo-indomain-evidence.md) has since completed with the +original test split. [Final qualification](../dev/releases/mambo_v3/final-qualification.md) +owns current provenance, notices and platform limits; this historical comparison +does not certify final release packages. diff --git a/docs/mambo-tail-metrics.md b/docs/mambo-tail-metrics.md new file mode 100644 index 0000000..1a069fb --- /dev/null +++ b/docs/mambo-tail-metrics.md @@ -0,0 +1,85 @@ +# Tail-truncated release metrics + +**Historical padded-scale TTA evidence.** The [deployment README](../deployment/README.md#release-comparison) +contains the current rotation-and-padding default comparison. + +These metrics change the **class averaging domain**, not the evaluation images: + +- Support **>5, >10 or >20** requires strictly more than that many truth instances + **and accepted predictions**. Main tables intersect qualifying classes across all + five pipelines; exact-boundary counts do not qualify. +- Support **>−1** is the untruncated baseline: each model's union of truth and + accepted-prediction classes, including zero support in either domain. It does not + intersect models, which would hide model-specific predicted-only families. + Baseline class counts follow model-column order; undefined groups keep the + package's own treatment. + +The legacy northern-Europe preset, 52,788 reporting images, calibration and pinned +`mini_metrics` revision match the [threshold study](mambo-confidence-thresholds.md). +Per-class accuracy/precision/recall/F1 use that **complete partition**; the package's +aggregator then averages selected groups. Cross-domain mistakes still contribute +false positives/negatives. **No image rows are dropped or acceptance decisions changed.** + +Classes are selected using reporting support, so this is descriptive analysis. +Domains can differ between threshold zero and calibration. Positive cutoffs hide +the [rare-family failure mode](mambo-family-precision.md); retain full-support scores. + +## Calibrated thresholds + +Macro-F1: full-support baseline, followed by the shared truncated class sets. + +| Rank | Support > | Classes retained | V2 | V3 PyTorch | V3 ONNX | PyTorch + TTA | ONNX + TTA | +|---|---:|---:|---:|---:|---:|---:|---:| +| Species | −1 | 690 / 654 / 650 / 681 / 636 | 0.4467 | 0.5081 | 0.5100 | 0.5239 | 0.5431 | +| Species | 5 | 272 | 0.7799 | 0.8016 | 0.8001 | 0.8413 | 0.8224 | +| Species | 10 | 237 | 0.8009 | 0.8139 | 0.8124 | 0.8538 | 0.8356 | +| Species | 20 | 180 | 0.8110 | 0.8221 | 0.8202 | 0.8597 | 0.8420 | +| Genus | −1 | 379 / 398 / 395 / 372 / 372 | 0.5869 | 0.6019 | 0.6043 | 0.6655 | 0.6655 | +| Genus | 5 | 215 | 0.7875 | 0.8311 | 0.8290 | 0.8477 | 0.8477 | +| Genus | 10 | 192 | 0.8055 | 0.8364 | 0.8345 | 0.8523 | 0.8525 | +| Genus | 20 | 151 | 0.8215 | 0.8533 | 0.8514 | 0.8692 | 0.8693 | +| Family | −1 | 26 / 30 / 30 / 30 / 30 | 0.6545 | 0.5807 | 0.5816 | 0.6073 | 0.6065 | +| Family | 5 | 19 | 0.8021 | 0.8161 | 0.8174 | 0.8536 | 0.8524 | +| Family | 10 | 19 | 0.8021 | 0.8161 | 0.8174 | 0.8536 | 0.8524 | +| Family | 20 | 15 | 0.8074 | 0.8138 | 0.8154 | 0.8548 | 0.8533 | + +V3 leads family F1 on these commonly represented classes, despite V2 leading full +support: the domains answer different questions. Separately calibrated TTA backends +also have different coverage; [shared-threshold results](mambo-confidence-thresholds.md#tta-backend-threshold-sensitivity) +show closely aligned predictions. + +## Threshold zero + +| Rank | Support > | Classes retained | V2 | V3 PyTorch | V3 ONNX | PyTorch + TTA | ONNX + TTA | +|---|---:|---:|---:|---:|---:|---:|---:| +| Species | −1 | 1205 / 1289 / 1289 / 1177 / 1173 | 0.2620 | 0.2593 | 0.2594 | 0.3001 | 0.3011 | +| Species | 5 | 313 | 0.7815 | 0.8013 | 0.8016 | 0.8288 | 0.8287 | +| Species | 10 | 271 | 0.8062 | 0.8232 | 0.8235 | 0.8484 | 0.8483 | +| Species | 20 | 208 | 0.8209 | 0.8454 | 0.8455 | 0.8656 | 0.8656 | +| Genus | −1 | 691 / 713 / 710 / 674 / 673 | 0.3213 | 0.3230 | 0.3245 | 0.3601 | 0.3605 | +| Genus | 5 | 242 | 0.7942 | 0.8057 | 0.8055 | 0.8342 | 0.8340 | +| Genus | 10 | 218 | 0.8087 | 0.8223 | 0.8220 | 0.8520 | 0.8517 | +| Genus | 20 | 174 | 0.8425 | 0.8551 | 0.8549 | 0.8765 | 0.8764 | +| Family | −1 | 64 / 60 / 60 / 60 / 60 | 0.2697 | 0.2805 | 0.2809 | 0.2970 | 0.2971 | +| Family | 5 | 20 | 0.8238 | 0.7831 | 0.7843 | 0.8211 | 0.8212 | +| Family | 10 | 20 | 0.8238 | 0.7831 | 0.7843 | 0.8211 | 0.8212 | +| Family | 20 | 17 | 0.8635 | 0.8503 | 0.8505 | 0.8813 | 0.8814 | + +## Coverage, complete results and reproduction + +The [CSV](assets/mambo-tail-metrics.csv) retains macro accuracy/precision/recall/F1, +overall acceptance coverage, and truth-image/accepted-prediction counts within +retained classes. Those support counts are not acceptance coverage. Positive +cutoffs include common and per-model domains; these tables use common domains. +The baseline remains per-model. The [JSON](assets/mambo-tail-metrics.json) also +records every class ID; empty domains yield null metrics. + +```sh +/path/to/pinned-metrics-env/bin/python -m dev.releases.mambo_v3.tail_report \ + --study docs/assets/mambo-threshold-comparison.json \ + --output /tmp/mambo-tail-metrics +``` + +[The collector](../dev/releases/mambo_v3/tail_report.py) verifies source hashes and +reporting-partition identity, uses public per-class calls and the pinned package's +`_aggregate_groups` implementation, and retains the original thresholds. diff --git a/docs/mambo-tta.md b/docs/mambo-tta.md new file mode 100644 index 0000000..160e9eb --- /dev/null +++ b/docs/mambo-tta.md @@ -0,0 +1,74 @@ +# Optional outer test-time augmentation + +The completed [full composed-TTA comparison](mambo-composed-tta.md) evaluates the +three shortlisted recipes on both backends, with calibration and matched coverage. + +TTA is an opt-in deployment feature shared by PyTorch and ONNX. View generation +operates on decoded images **before** the ordinary, unchanged preprocessing recipe. +It does not depend on backbone internals, ONNX graph changes, an intermediate crop +size or the selected class list. + +| Profile | Views | Spatial policy | +|---|---:|---| +| `none` | 1 | Ordinary single-view path; default | +| `rotation30_pad25_3` | 3 | Original plus ±30° rotations, each with 25% edge padding; default when TTA is enabled | +| `wide_rotation_mixed_padding_5` | 5 | Original, ±10° with 15% padding, ±30° with 25% padding | +| `padded_scale` | 3 | Original plus 8% / 15% edge padding; previous default, available explicitly | +| `hflip` | 2 | Original and horizontal reflection | +| `five_crop` | 5 | Original and four corner crops, each 90% of original height/width | +| `ten_crop` | 10 | Five-crop views and their horizontal reflections | +| `d4` | 8 | Rotations of 0/90/180/270 degrees and their horizontal reflections | +| `light_noise` | 3 | Original plus two independently seeded 1% salt-and-pepper views | + +Enable the recommended recipe with `Predictor(..., tta=True)` or bare `--tta`. +Both resolve to `rotation30_pad25_3`, also available explicitly. Omitting TTA +keeps single-view inference; `tta=False` and `--tta none` explicitly disable it. +Expanded-canvas rotations preserve the source extent, fill corners with RGB +(124,116,104), then edge-pad each axis by 25% per side before ordinary preprocessing. +The full-data comparison supports this promotion on both backends. Explicit +`padded_scale` retains the former behavior. `RotatePad(degrees, padding)` and +`EdgePad(fraction)` expose these transforms for custom policies. + +`SaltAndPepper(proportion=0.01, seed=0)` is also available as a public transform. +It uses one RGB-shared black/white pixel mask and an image-keyed seed, so built-in +noise is reproducible across batch sizes and preparation worker counts. It operates +on the decoded source before normal preprocessing; this is not a claim of exact +training-pipeline RNG or noise-placement equivalence. + +These are convenience profiles, not restrictions on the interface. `TTA` accepts +an ordered finite sequence of arbitrary callables. `View` implements fractional +crops, quarter-turn rotations and reflection; arbitrary rotations, scales, color +transforms or other policies can be supplied by a caller. Each custom callable receives +its own uint8 RGB CHW copy of the decoded image. It can return a CHW array or PIL +image accepted by the existing preprocessing function. Random custom transforms +are the caller's responsibility; built-ins are deterministic. Give custom policies +a descriptive name for output provenance. + +Images are decoded once; each view uses ordinary inference with the configured +batch size. The request API prepares one view at a time; streaming buffers all +views of its prefetched batches. Memory therefore grows with source dimensions, +batch size and streaming prefetch; reduce those settings when needed. +Species logits are averaged in FP32, then the ordinary class mask, hierarchy and +confidence normalization are applied. This is **logit averaging**, not voting or +averaging already-normalized probabilities. Preset and custom-list semantics stay +aligned. Output metadata records the policy name and view count. + +When requested, each view uses the normal embedding path. Its embeddings are +averaged in FP32 and normalized to unit length; a nonfinite or near-zero mean +raises an error. Averaged embeddings have not been qualified for downstream +retrieval/clustering. The default single-view representation is unchanged. + +## Evidence and selection + +The [selection record](mambo-composed-tta.md) explains why the three-view +rotation-and-padding recipe replaced `padded_scale`. Current quality, coverage +and timings are in the [deployment comparison](../deployment/README.md#release-comparison). + +TTA was selected using Flemming, including part of its reporting partition. +Its benefit is domain-dependent; it is not a universal improvement or an +independently validated recipe choice. In the early 1,024-image northern-Europe +sweep, cropping and salt-and-pepper noise reduced macro accuracy; padding gave +the largest gain. Complete results remain in [historical study results](https://github.com/asgersvenning/mini_trainer/blob/852bf712e85b8d1a6b9c9c6d31b3b5d807904303/docs/mambo-tta.md). + +The early sweep code and assets are retired; replay that completed study from [its pinned source](https://github.com/asgersvenning/mini_trainer/tree/b631c52c74b5bae2bd1d3addc517af2095ef7f7b/dev/releases/mambo_v3). +The composed-study collectors and current release report generators remain maintained. diff --git a/docs/mambo-v3-evaluation.md b/docs/mambo-v3-evaluation.md new file mode 100644 index 0000000..36b885c --- /dev/null +++ b/docs/mambo-v3-evaluation.md @@ -0,0 +1,139 @@ +# MAMBO_v3 local evaluation — 23 September 2026 + +Historical **FP32, single-view** reference. Current adoption comparisons are in +[the deployment README](../deployment/README.md#release-comparison); these timings +precede AMP and pipeline improvements. + +The native PyTorch and standard ONNX candidates produced identical top-1 labels +on all **58,640 Flemming images**, for species, genus and family, with all five +lists below. This establishes same-model prediction agreement on this dataset; +it is not a claim of numerical identity or improvement over MAMBO_v2. + +## Quality and geographic filtering + +| Preset | Species micro accuracy, all | Species micro accuracy, known | Species macro-F1, all | Genus micro accuracy, all | Family micro accuracy, all | +|---|---:|---:|---:|---:|---:| +| Full | 58.43% | 67.72% | 0.0971 | 70.58% | 90.31% | +| Europe, legacy | 68.95% | 79.91% | 0.1993 | 77.94% | 92.86% | +| Northern Europe, legacy | 70.79% | 82.04% | 0.2545 | 79.37% | 92.98% | +| Europe, updated | 68.81% | 79.74% | 0.1975 | 77.79% | 92.55% | +| Northern Europe, updated | 70.32% | 81.50% | 0.2367 | 78.89% | 92.89% | + +Both backends have the same values. There are 522 truth species; 16 species, +covering 8,042 images, are absent from all five vocabularies. All-image accuracy +keeps those examples; known-truth accuracy uses the remaining 50,598 images +(86.29% coverage). Family truth is fully covered; genus truth is fully covered +except for one image under legacy northern Europe. Predictions use a fixed zero +threshold, without tuning or abstention. + +Updated Europe adds 72 candidate species and updated northern Europe adds 222, +with no removals. Those broader choices slightly reduce accuracy on Flemming; +choose a preset for its documented geographic scope, not its test-set score. +The [preset catalogue](model-presets.md) describes the occurrence filters and +documented minimum metadata-row counts. This European dataset does not qualify the usefulness +of every other geographic preset. + +Metrics use `mini_metrics` at the revision below. Macro-F1 includes predicted-only +classes. [Retained comparison data](assets/mambo-release-comparison.json) includes +macro and micro metrics at all ranks; the +[metric definitions](mambo-release-comparison.md#prediction-quality) explain their +denominators. These results have no support truncation or threshold optimization. + +A separate seeded **256-image / 112-species** qualification found identical +rank labels across PyTorch/ONNX × CPU/CUDA × predictions/embeddings, for all five +lists. Embeddings were finite, normalized 1280-dimensional vectors. Supplying +updated Europe as a custom class list preserved selection and order. This does +not establish downstream embedding quality or full-dataset CPU/embedding accuracy. + +## Measurement environment + +Hardware: Intel Core i7-12800H and RTX 3080 Ti Laptop GPU (16 GB), Linux/WSL2, +on AC power. Python 3.13.7, PyTorch 2.12.0+cu130, ONNX Runtime GPU 1.30.0, +NumPy 2.4.6, Pillow 12.2.0; FP32, TF32 disabled, no autocast. +Thirty-six fresh processes cover three trials of each runtime/device/output/thread +configuration; each reported cell pools 21 warmed observations. No evaluation or +test jobs overlapped timing. Power-policy fields were unavailable under WSL; +raw reports retain observed GPU temperatures, power and clocks. + +## End-to-end latency and throughput + +Updated Europe, four CPU threads. Batch latency includes decoding, preparation, +transfers, hierarchy reduction and optional embeddings. Selected median timings: + +| Backend | Device / batch | Predictions, ms | With embeddings, ms | +|---|---|---:|---:| +| ONNX | CPU / 8 | 829.4 | 812.2 | +| PyTorch | CPU / 8 | 1013.9 | 1035.1 | +| ONNX | CUDA / 32 | 774.5 | 775.9 | +| PyTorch | CUDA / 32 | 724.5 | 737.7 | + +Embeddings added little batched cost in this experiment; small differences were +within trial variation. The [original tables](https://github.com/asgersvenning/mini_trainer/blob/595582c212e7f248b400f7a782857bc5bdfe5111/docs/mambo-v3-evaluation.md#end-to-end-latency-and-throughput) +retain every batch size, p95 and trial range. The subsequent +[FP32 release comparison](mambo-release-comparison.md) provides V2/V3 charts. + +## Startup and process memory + +Cold first image includes lazy load and first execution. RSS is the process +high-water mark across the batch sweep; these selected rows exclude embeddings. + +| Backend | Device | Median cold first image, s | Peak host RSS range, MiB | +|---|---|---:|---:| +| ONNX | CPU | 0.37 | 573–591 | +| ONNX | CUDA | 1.64 | 1461–1477 | +| PyTorch | CPU | 40.46 | 1569–1636 | +| PyTorch | CUDA | 41.78 | 1896–1899 | + +Single-thread CPU batch-1 medians were 214 ms (ONNX) and 269 ms (PyTorch), +or 225/268 ms with embeddings. Four threads improve this workload; the bounded +batch sweep does not establish maximum CPU throughput. Full-vocabulary timings +and all raw observations are retained in the machine-readable evidence. + +At GPU batch 32 without embeddings, prepared-runtime median latency was about +180–182 ms, compared with 725–775 ms end-to-end. Image preparation is a substantial +cost. Prepared-runtime timing bypasses the public image path; the public API still +applies preprocessing to array inputs. + +First-call timings exclude runtime import/configuration (median approximately +0.86 s for PyTorch and 0.03 s for ONNX), lightweight predictor construction and +Python interpreter startup. They are not cold-boot measurements. Native loading +spent 36.9–39.4 s in spherical classifier initialization before restoring weights. + +Native CUDA allocator peaks were approximately 865 MiB allocated / 1,348 MiB +reserved across the batch sweep. ONNX has device-memory snapshots, not a matching +continuous per-process peak measurement; do not compare those quantities directly. +Both ONNX graphs placed all 170 convolution operations on CUDA; one `Acos` and +four `Concat` operations ran on CPU. Their separate profiler timings are excluded +from the benchmark. All ONNX benchmark processes ran without importing PyTorch. + +## Reproducibility and limits + +The [evaluation workflow](../dev/releases/mambo_v3/evaluation.md) provides the +commands, timing boundaries, pinned metric environment and UCloud handoff. +The original 632,913 in-domain test identities and taxonomy were checked locally; +image verification, inference and reporting subsequently completed on +[UCloud](mambo-indomain-evidence.md), preserving the original split. + +Local evidence is retained outside Git under `local-evidence/mambo-v3/`: +`quality-subset-256`, `quality-full`, `performance` and `combined-results`. +Reports preserve image identities/hashes, class-list hashes, artifact hashes, +runtime versions and completion status. Full-dataset collection used serial image +preparation for native and four ordered workers for ONNX; its elapsed time is not +a backend speed comparison. The dedicated benchmark uses matched boundaries. + +- Bundle manifest SHA-256: `c576f53f404575bb9301de16427dd4feee9b03e48292180e184e0385052ee49b` (artifact revision 2). +- Flemming manifest SHA-256: `04e56e9189933b6758b192f587e296e49012fd935baa00c04ca91e0a3ce3795f`. +- Metric revision: `70cc69adc05362863439277048e06386c1f885e1`. +- Runner implementation: `0de3e0d`, with startup instrumentation in `922a45f`. + +The rebuilt deployment wheel passed a fresh installed ONNX-only check with a +relocated read-only bundle, API/CLI execution and Python network calls blocked. +Installed CUDA prediction/embedding modes also passed independently of PyTorch; +the temporary CUDA environment reused existing NVIDIA libraries and is not a clean +dependency-installation qualification. Those JSON reports are retained as +`portable-install-final.json` and `installed-gpu-final.json`. + +For current provenance, notices and platform limits see +[final qualification](../dev/releases/mambo_v3/final-qualification.md). +These early checks are not final-wheel certification. The archived September +native predictions are historical context, not a MAMBO_v2 quality baseline. diff --git a/docs/model-presets.md b/docs/model-presets.md new file mode 100644 index 0000000..0868100 --- /dev/null +++ b/docs/model-presets.md @@ -0,0 +1,107 @@ +# Model preset scope + +Generated release catalogue: edit `dev/releases/mambo_v3/preset-definitions.toml`, then use the build command below. + +These overlapping deployment presets aim to avoid most geographically nonsensical predictions while allowing species that **can be found** in a region. They do not describe native or natural distributions, or where species should occur. Recorded introduced species, migrants and vagrants are eligible: no native-status or establishment filter is applied. Exclusion is not evidence that a species cannot occur there. Country codes are ISO alpha-2 metadata values. + +Each geographic preset applies the minimum row count shown below. Counts use all existing splits, including held-out rows, without further deduplication. Each row counts once even if it matches both a country and a continent predicate. Full uses all model species without a regional threshold. Lists retain the model's species order. + +**V3 qualification policy:** new presets require at least 3 regional rows and at least 25 global rows for a species. These inclusive thresholds reduce weak occurrence evidence but do not prove that records are independent or correctly geolocated: multiple images may belong to one observation. The global count measures available examples, not demonstrated model quality. Legacy presets retain their historical >25 regional-row rule with no new global gate. + +In this pinned snapshot every model species has at least 50 global rows; 0 model species fall below the global minimum of 25. V3 retains row counts to preserve the evaluated memberships. Counting distinct GBIF observations instead would require a future preset revision and assessment of rare-species coverage. The rule is reproducible, not a claim of ecological certainty. + +`europe` and `north_europe` preserve MAMBO_v2 membership while the V3 deployment default is global (`full`). Choose `europe_v3` or `north_europe_v3` for the new occurrence thresholds with the same explicit geographic filters. Parenthesized countries have ambiguous historical inclusion and leave the legacy list unchanged; that equivalence does not establish equivalence at the lower threshold, so they are not silently added. The deployment API discovers all lists from the bundle; Flemming evaluation favours legacy north_europe; updated membership remains an explicit broader option. + +## Presets + +| ID | Species | Minimum regional rows | Minimum global rows | Selected rows | Geographic scope | +| --- | ---: | ---: | ---: | ---: | --- | +| `full` | 12,632 | None | None | — | All species in the pinned model. | +| `europe` | 3,014 | 26 | None | 2,079,617 | Records assigned EUROPE by the metadata, including European-labelled portions of transcontinental countries. | +| `north_europe` | 1,977 | 26 | None | 768,497 | Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden (Ireland, Iceland, Åland, Faroe Islands, Guernsey, Isle of Man, Jersey, Svalbard/Jan Mayen: ambiguous historical inclusion; adding any or all leaves the species list unchanged). | +| `europe_v3` | 3,086 | 3 | 25 | 2,079,617 | Same EUROPE metadata filter as legacy europe, including European-labelled portions of transcontinental countries; updated occurrence thresholds only. | +| `north_europe_v3` | 2,199 | 3 | 25 | 768,497 | Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden. Same explicit country filter as reconstructed legacy north_europe; updated occurrence thresholds only. The UK and historically ambiguous additions are not included in this definition. | +| `australia` | 1,874 | 3 | 25 | 465,726 | All Australian records, including Tasmania and other territories recorded under AU; not all Oceania. | +| `tasmania` | 274 | 3 | 25 | 4,457 | Australian records explicitly assigned stateProvince Tasmania. Species recorded there, not only endemic species; blank/other state values are excluded. | +| `north_america` | 4,425 | 3 | 25 | 2,300,391 | Canada, United States, Mexico, Greenland, Bermuda, Saint Pierre and Miquelon. Whole countries, including US records outside the continental mainland. | +| `central_america` | 1,639 | 3 | 25 | 210,173 | Mexico, Belize, Guatemala, Honduras, El Salvador, Nicaragua, Costa Rica, Panama. Mexico deliberately overlaps North America. | +| `south_america` | 1,506 | 3 | 25 | 257,026 | All SOUTH_AMERICA records or records from Argentina, Bolivia, Brazil, Chile, Colombia, Ecuador, Falklands, French Guiana, Guyana, Paraguay, Peru, Suriname, Uruguay, Venezuela, Costa Rica or Panama. Costa Rica and Panama deliberately overlap Central America. | +| `caribbean` | 876 | 3 | 25 | 28,652 | Caribbean islands and territories, Bahamas, Bermuda, Belize and the Guianas (Guyana, Suriname, French Guiana). Does not include every mainland country with a Caribbean coast. | +| `south_asia` | 1,552 | 3 | 25 | 177,926 | Afghanistan, Bangladesh, Bhutan, India, Maldives, Nepal, Pakistan, Sri Lanka, Myanmar and Iran; deliberately broad western/eastern overlap. | +| `asia` | 4,443 | 3 | 25 | 920,962 | All ASIA records plus all records from the listed Asian countries and territories, including Turkey, Georgia, Armenia and Azerbaijan in full. Russian records require continent ASIA; European or unassigned Russian records are excluded. Cyprus is excluded even when its continent is ASIA. | +| `japan` | 697 | 3 | 25 | 30,076 | All records assigned countryCode JP, including islands. | +| `africa` | 924 | 3 | 25 | 149,267 | All AFRICA records plus the listed African countries and island territories. AFRICA-labelled records from transcontinental/overseas countries remain included. | +| `north_africa` | 236 | 3 | 25 | 4,393 | Algeria, Egypt, Libya, Morocco, Tunisia, Western Sahara, Sudan and Mauritania. Sudan and Mauritania deliberately overlap the broad sub-Saharan preset. | +| `subsaharan_africa` | 796 | 3 | 25 | 144,918 | Broad African selection excluding Algeria, Egypt, Libya, Morocco, Tunisia and Western Sahara. Includes Sudan, Mauritania, Mali, Niger, Chad, the Horn, Madagascar and island territories; this is not a Sahara boundary polygon. | +| `madagascar` | 107 | 3 | 25 | 2,584 | All records assigned countryCode MG. Species recorded in Madagascar, not only endemic species; neighbouring island countries/territories are excluded. | +| `mediterranean` | 2,680 | 3 | 25 | 660,065 | Whole Mediterranean coastal countries/territories plus Portugal, Andorra, San Marino, Vatican City, North Macedonia, Bulgaria, Serbia and Jordan. Includes inland and overseas records of selected countries, not only Mediterranean climate zones. | +| `arctic` | 1,548 | 3 | 25 | 115,881 | Records at latitude 60°N or farther north, across all countries, including exactly 60°. Missing, malformed and out-of-range latitudes are excluded. A broad northern/subarctic scope, not the Arctic Circle boundary; no country or state-name proxy is used. | +| `oceania` | 2,273 | 3 | 25 | 584,477 | All OCEANIA records plus Australia, New Zealand, Papua New Guinea and the listed Pacific countries/territories. Australia and Tasmania intentionally overlap. | +| `new_zealand` | 425 | 3 | 25 | 110,030 | All records assigned countryCode NZ, including islands recorded under NZ. Separately coded Cook Islands, Niue and Tokelau remain in the other-Oceania preset. | +| `oceania_excluding_australia_nz` | 352 | 3 | 25 | 8,721 | The Oceania metadata selection with all AU and NZ records excluded, even when continent is OCEANIA. Species shared with Australia or New Zealand remain eligible if they qualify from records elsewhere in Oceania; this is not subtraction of their species lists. | +| `southeast_asia` | 1,672 | 3 | 25 | 172,424 | Brunei, Cambodia, Indonesia, Laos, Malaysia, Myanmar, Philippines, Singapore, Thailand, Timor-Leste, Vietnam and Papua New Guinea; whole-island-region overlap with Oceania is intentional. | +| `east_asia` | 3,430 | 3 | 25 | 549,482 | China, Hong Kong, Macao, Taiwan, Japan, North Korea, South Korea, Mongolia and Russian records assigned continent ASIA. This includes all Asian Russia, not only the Russian Far East; European or unassigned Russian records are excluded. | +| `middle_east` | 846 | 3 | 25 | 24,805 | Turkey, Cyprus, Syria, Lebanon, Israel, Palestine, Jordan, Iraq, Iran, Kuwait, Saudi Arabia, Bahrain, Qatar, UAE, Oman, Yemen, Egypt, Armenia, Azerbaijan, Georgia, Afghanistan and Pakistan. Deliberate overlap with Mediterranean, Africa and South Asia. | + +## Updated European presets + +| Updated ID | Legacy ID | Added species | Removed species | +| --- | --- | ---: | ---: | +| `europe_v3` | `europe` | 72 | 0 | +| `north_europe_v3` | `north_europe` | 222 | 0 | + +The [exact added/removed species IDs](../dev/releases/mambo_v3/preset-updates.toml) retain model order. Geographic filters are unchanged; only qualification thresholds differ. + +## Species overlap + +![Pairwise species overlap and directional coverage](assets/preset-overlap.svg) + +Left: shared species divided by the union (Jaccard similarity). Right: the percentage of each row's species also present in each column. Coverage reveals containment that Jaccard can hide for small lists. These compare the qualified species lists, not geographic areas or prediction accuracy. Full is omitted because it contains every preset. Labels show list sizes; both panels use percentages. + +Rebuild the figure and exact shared-count/percentage table with `.venv/bin/python -m dev.releases.mambo_v3.plot_overlap`. The companion [pairwise table](assets/preset-overlap.tsv) includes exact counts. + +## Exact metadata filters + +- **europe** (Europe (legacy)): `continent` in `EUROPE`. +- **north_europe** (Northern Europe (legacy)): `countryCode` in `DE, DK, EE, FI, LT, LV, NL, NO, PL, SE`. +- **europe_v3** (Europe (updated)): `continent` in `EUROPE`. +- **north_europe_v3** (Northern Europe (updated)): `countryCode` in `DE, DK, EE, FI, LT, LV, NL, NO, PL, SE`. +- **australia** (Australia including Tasmania): `countryCode` in `AU`. +- **tasmania** (Tasmania only): (`countryCode` in `AU`) AND `stateProvince` in `Tasmania`. +- **north_america** (North America): `countryCode` in `CA, US, MX, GL, BM, PM`. +- **central_america** (Central America): `countryCode` in `MX, BZ, GT, HN, SV, NI, CR, PA`. +- **south_america** (South America): `continent` in `SOUTH_AMERICA` OR `countryCode` in `AR, BO, BR, CL, CO, EC, FK, GF, GY, PY, PE, SR, UY, VE, CR, PA`. +- **caribbean** (Caribbean): `countryCode` in `AG, AI, AW, BB, BL, BQ, BS, CU, CW, DM, DO, GD, GP, HT, JM, KN, KY, LC, MF, MQ, MS, PR, SX, TC, TT, VC, VG, VI, BM, BZ, GY, SR, GF`. +- **south_asia** (South Asia): `countryCode` in `AF, BD, BT, IN, MV, NP, PK, LK, MM, IR`. +- **asia** (Asia): (`continent` in `ASIA` OR `countryCode` in `AF, AM, AZ, BH, BD, BT, BN, KH, CN, GE, HK, IN, ID, IR, IQ, IL, JP, JO, KZ, KP, KR, KW, KG, LA, LB, MO, MY, MV, MN, MM, NP, OM, PK, PS, PH, QA, RU, SA, SG, LK, SY, TW, TJ, TH, TL, TR, TM, AE, UZ, VN, YE`) AND country NOT in `CY`; `RU` records additionally require `continent` in `ASIA`. +- **japan** (Japan): `countryCode` in `JP`. +- **africa** (Africa): `continent` in `AFRICA` OR `countryCode` in `DZ, AO, BJ, BW, BF, BI, CV, CM, CF, TD, KM, CG, CD, CI, DJ, EG, GQ, ER, SZ, ET, GA, GM, GH, GN, GW, KE, LS, LR, LY, MG, MW, ML, MR, MU, YT, MA, MZ, NA, NE, NG, RE, RW, SH, ST, SN, SC, SL, SO, ZA, SS, SD, TZ, TG, TN, UG, EH, ZM, ZW`. +- **north_africa** (Northern Africa (broad)): `countryCode` in `DZ, EG, LY, MA, TN, EH, SD, MR`. +- **subsaharan_africa** (Sub-Saharan Africa (broad)): (`continent` in `AFRICA` OR `countryCode` in `AO, BJ, BW, BF, BI, CV, CM, CF, TD, KM, CG, CD, CI, DJ, GQ, ER, SZ, ET, GA, GM, GH, GN, GW, KE, LS, LR, MG, MW, ML, MR, MU, YT, MZ, NA, NE, NG, RE, RW, SH, ST, SN, SC, SL, SO, ZA, SS, SD, TZ, TG, UG, ZM, ZW`) AND country NOT in `DZ, EG, LY, MA, TN, EH`. +- **madagascar** (Madagascar only): `countryCode` in `MG`. +- **mediterranean** (Mediterranean (broad)): `countryCode` in `AL, DZ, BA, HR, CY, EG, FR, GR, IL, IT, LB, LY, MT, MC, ME, MA, PS, SI, ES, SY, TN, TR, PT, GI, AD, SM, VA, MK, BG, RS, JO`. +- **arctic** (Arctic / north of 60°N): valid `decimalLatitude` between 60 and 90 degrees inclusive. +- **oceania** (Oceania): `continent` in `OCEANIA` OR `countryCode` in `AU, NZ, PG, FJ, SB, VU, NC, PF, WS, AS, TO, TV, KI, NR, FM, MH, PW, GU, MP, CK, NU, TK, WF, PN, NF`. +- **new_zealand** (New Zealand): `countryCode` in `NZ`. +- **oceania_excluding_australia_nz** (Oceania excluding Australia and New Zealand): (`continent` in `OCEANIA` OR `countryCode` in `AU, NZ, PG, FJ, SB, VU, NC, PF, WS, AS, TO, TV, KI, NR, FM, MH, PW, GU, MP, CK, NU, TK, WF, PN, NF`) AND country NOT in `AU, NZ`. +- **southeast_asia** (Southeast Asia): `countryCode` in `BN, KH, ID, LA, MY, MM, PH, SG, TH, TL, VN, PG`. +- **east_asia** (East Asia): `countryCode` in `CN, HK, MO, TW, JP, KP, KR, MN, RU`; `RU` records additionally require `continent` in `ASIA`. +- **middle_east** (Middle East): `countryCode` in `TR, CY, SY, LB, IL, PS, JO, IQ, IR, KW, SA, BH, QA, AE, OM, YE, EG, AM, AZ, GE, AF, PK`. + +## Interpretation and reproducibility + +Regional restrictions change score normalization; excluded truth labels must remain visible in evaluation. + +Blank geographic fields match no predicate unless another selected field matches. + +Run from the repository root with the existing PyArrow environment and the previously downloaded model manifest: + +```sh +.venv/bin/python -m dev.releases.mambo_v3.build_presets \ + examples/global_lepi/0032836-250426092105405_processing_metadata_postprocessed_quality_filtered.parquet \ + --evidence-root local-evidence/mambo-v3 +``` + +The default checks committed assets, hashes, counts and this catalogue against fresh reconstruction. Use `--write` after an intentional definition update to regenerate them. Legacy preset hashes must remain unchanged. Published preset membership changes require a new release/revision and an added/removed-ID report. + +[Machine-readable definitions](../dev/releases/mambo_v3/preset-definitions.toml), [generated hashes and counts](../dev/releases/mambo_v3/preset-manifest.toml), [source provenance](../dev/releases/mambo_v3/construction.toml), [legacy reconstruction details](../dev/releases/mambo_v3/README.md#regional-scope-and-construction). diff --git a/docs/onnx.md b/docs/onnx.md index 7e2034b..e78ea3e 100644 --- a/docs/onnx.md +++ b/docs/onnx.md @@ -1,5 +1,8 @@ # ONNX export +Export your own checkpoint with `mt_export` or the Python API below. For the +ready-made MAMBO model, use the [deployment package](../deployment/README.md). + Install the optional `export` extra alongside the backend needed to reconstruct your model. For example, a disposable CPU development environment can use: @@ -92,32 +95,17 @@ outputs = session.run( ) ``` -The test matrix covers small offline instances from torchvision (ResNet, -EfficientNet, ViT), timm, Hugging Face Transformers and the OpenCLIP encoder wrapper -used by BioCLIP, plus every classifier head family. This is representative backend -coverage, not certification of every model in the catalog. Arbitrary custom -operators and data-dependent Python control flow remain subject to the -[PyTorch ONNX exporter's support](https://docs.pytorch.org/docs/stable/onnx_export.html). -The actual EfficientNetV2-S backbone with symmetric normalized flat/hierarchical -heads is also covered by offline dynamic-batch export tests. Trained Blair -checkpoints passed ONNX Runtime CPU parity on real images; see the -[deployment experiment](https://github.com/asgersvenning/mini_trainer/blob/f5c69e7cab2bfde8a5467026b293858b93e628f9/docs/archive/benchmark-history.md#efficientnetv2-onnx-cpu-export-and-inference-quantization). -Local [CUDA placement checks](https://github.com/asgersvenning/mini_trainer/blob/f5c69e7cab2bfde8a5467026b293858b93e628f9/docs/archive/benchmark-history.md#onnx-cuda-provider-placement) expose -CPU fallback for native integer heads and floating execution for calibrated -convolutions. Target GPU hardware, ARM execution and arbitrary spatial dimensions -remain unvalidated. -An initial signed MinMax INT8 recipe lost substantial accuracy and retained -floating convolutions. A follow-up unsigned Percentile recipe executed all -convolutions as QLinearConv and roughly halved warm local CPU inference latency, -with remaining quality losses measured through `mini_metrics`; see the -[calibration and metric results](https://github.com/asgersvenning/mini_trainer/blob/f5c69e7cab2bfde8a5467026b293858b93e628f9/docs/archive/benchmark-history.md#onnx-activation-calibration-execution-coverage-and-macro-metrics). -It remains exploratory, with no agreed production quality gate or target-device -verification. Native CUDA QT checkpoint export is a separate path described below; -these floating-checkpoint PTQ experiments do not validate it. - -These local bundles are a foundation for Hugging Face hosting. Model cards, -evaluation attachments and Hub upload commands remain separate roadmap work. +## Choosing an export path + +| Checkpoint / purpose | Export path | Verification reference | +| --- | --- | --- | +| Floating checkpoint | Default export; calibration is a separate optional step | Model's floating evaluation forward | +| Native `cuda-int8-linear` checkpoint | `--reference-device cuda:0`; retains dynamic activation quantization | Native forward with autocast and TF32 disabled | +| Native checkpoint for static calibration | `--materialize-int8-training`; produces floating weights | Materialized floating forward, not the native quantized forward | +Integer weights or nodes do not establish integer execution on a chosen device. +Inspect the runtime profile and evaluate quality on that provider before selecting +a quantized recipe. Recorded results and their limits are linked below. ## Native INT8 training checkpoints @@ -131,46 +119,20 @@ CUDA_VISIBLE_DEVICES=0 .venv/bin/mt_export --weights native-int8-weights.pt \ --output native-int8-onnx --reference-device cuda:0 ``` -The Python API uses `export_onnx(model, float32_images, destination, -reference_device="cuda:0")`. Float32 inputs and a CUDA reference are required for -this backend. The CLI uses the scoped native-weight loader, retaining restricted -checkpoint loading. The export copy is frozen to let the exporter unpack integer -parameter storage; the caller's weights and gradient flags are preserved. - -The graph retains the training backend's dynamic symmetric row quantization, -including clipping, ties-to-even rounding and zero-row behavior. Its scaled INT8 -products lower to `MatMulInteger` with bounded INT32 partial accumulation and -floating row/column scales. Long contractions combine partial sums in INT64 -before converting and applying scales, preventing accumulator saturation. Activation codes are represented as unsigned codes with zero point 128; -this preserves the signed values exactly. Weights stay signed INT8. No calibration -set, floating-weight substitution or replacement classifier is used. Convolutions -remain floating, as they do in native QT training. This is distinct from the -static Percentile recipe that also quantizes convolutions. - -CUDA reference execution temporarily disables CUDA autocast and TF32 in cuDNN -and floating matrix products, restoring the caller settings afterward. Real trained images exposed a parity -failure with TF32 enabled; full-FP32 reference execution passed the original -rtol=1e-4/atol=1e-5 checks. The manifest records the reference device and TF32 choice. -This does not promise matching scores against AMP or TF32 evaluation of the same -checkpoint, whose rounding can change the subsequent integer activation codes. - -Tests cover normalized symmetric flat/hierarchical heads, EfficientNetV2-S, -active-class filtering, dynamic batches, checkpoint CLI loading and numerical -edge cases. Trained Blair checkpoints also passed checks on eight real validation -images at batches 1, 2, 4 and 8. An exported graph still needs runtime profiling -and quality evaluation on the intended provider. Local CUDA-provider execution -retains CPU MatMulInteger operations; it does not establish integer GPU execution. -Target GPU/ARM deployment, million-class export capacity and production performance -of this native path remain unverified. On the full Blair validation split, -top-1 predictions and the -requested macro metrics matched the full-FP32 CUDA reference, but some image -scores exceeded the strict export tolerance; see the -[full-validation results](https://github.com/asgersvenning/mini_trainer/blob/f5c69e7cab2bfde8a5467026b293858b93e628f9/docs/archive/benchmark-history.md#native-onnx-full-validation-quality-and-numerical-limits). -Supply representative `verification_inputs` and evaluate deployment thresholds -separately; passing the default sample checks does not establish universal score -parity or confidence-threshold equivalence. The generic exporter does not -impose a model allowlist; configurations outside this tested coverage must pass -the same export and parity checks before a bundle is published. +The Python API requires float32 inputs and `reference_device="cuda:0"`. +The CLI retains restricted checkpoint loading. Export freezes only its private +copy; the caller's weights, gradient flags and precision settings are preserved. + +The graph retains native dynamic row quantization and scaled integer Linear +products (`MatMulInteger`), including overflow-safe accumulation. Convolutions +remain floating. No calibration data or floating-weight substitution is involved. +The CUDA reference temporarily disables autocast and TF32; the manifest records +this choice. This reference need not match AMP/TF32 scores, since rounding can +change subsequent integer activation codes. + +Supply representative `verification_inputs` and evaluate confidence thresholds +separately: the recorded full-validation results below show why passing a small +export sample does not establish parity for every input. ## Explicit materialization for deployment calibration @@ -184,17 +146,10 @@ mt_export --weights native-int8-last.pt --output materialized-onnx \ --input-shape 3 128 128 --materialize-int8-training ``` -The conversion checks the recorded native recipes, copies the state, materializes -INT8 weight representations, and removes the recipe that would restore native -training tensor types. It preserves class metadata, active-class masks and other -buffers. Normalized directions use signed integer codes, with magnitudes set to -zero for zero-scale rows. This follows the native effective-weight formula -and handles zero scales without introducing an ordinary weight-normalization -divide-by-zero. Compatible parameter ties are retained by normal model loading; -incompatible tied roles/views fail instead of silently loading different values -into one shared parameter. Undefined zero-code directions and invalid/nonfinite states fail. -The source checkpoint is never rewritten, and neither optimizers nor training -state are carried into this deployment artifact. +Conversion validates the native recipe, materializes effective weights and retains +class metadata, masks and buffers. Invalid states and incompatible parameter ties +fail explicitly. The source checkpoint is unchanged; optimizer/training state is +excluded from the deployment artifact. **Dynamic activation quantization is removed.** ONNX verification compares against the materialized floating model, not against the native training forward. Its @@ -207,11 +162,41 @@ it is not a training-memory optimization. Use the maintained [input preparation](../dev/benchmarks/inference.md#maintained-image-input-preparation) and [calibration](../dev/benchmarks/inference.md#maintained-onnx-calibration-command) -commands on this artifact. For the tested TensorRT recipe, choose signed symmetric -activations, signed per-channel weights and floating biases, with training-only -calibration data. Build and inspect a new engine for its destination device. -Compare native predictions, materialized predictions and the calibrated deployment -candidate on the same held-out samples using all five requested mini_metrics -metrics. Use a practical FP16 baseline for efficiency comparisons; successful -materialization/export alone does not establish acceptable quality, integer GPU -execution or a worthwhile cost reduction. +commands. Calibrate on training data and compare native, materialized and calibrated +predictions on the same held-out samples with `mini_metrics` (macro F1, recall, +precision, coverage and Theil's U). For efficiency, include a practical FP16 +baseline. The calibration guide describes the tested TensorRT recipe; build and +inspect its engine on the destination device. + +## Qualification evidence and limits + +Export tests cover representative offline torchvision, timm, Transformers and +OpenCLIP backbones, all classifier head families, active masks and dynamic batches. +They include EfficientNetV2-S flat/hierarchical heads and native INT8 numerical edge +cases. This is not certification of every catalogue model: custom operators and +control flow remain subject to the +[PyTorch exporter](https://docs.pytorch.org/docs/stable/onnx_export.html). + +The linked Blair experiments concern specific checkpoints and local x86 CPU/laptop +CUDA environments; they do not establish ARM support, large-vocabulary capacity or +performance on other GPUs. MAMBO has separate qualification in its deployment README. + +- [Floating export](https://github.com/asgersvenning/mini_trainer/blob/f5c69e7cab2bfde8a5467026b293858b93e628f9/docs/archive/benchmark-history.md#efficientnetv2-onnx-cpu-export-and-inference-quantization): + trained checkpoints passed real-image CPU parity. Signed MinMax quantization + lost substantial quality and left many convolutions floating. +- [CPU calibration](https://github.com/asgersvenning/mini_trainer/blob/f5c69e7cab2bfde8a5467026b293858b93e628f9/docs/archive/benchmark-history.md#onnx-activation-calibration-execution-coverage-and-macro-metrics): + unsigned Percentile quantization executed all convolutions as `QLinearConv` and + roughly halved warm inference latency, with measured quality losses. This was + exploratory, without a production acceptance gate. +- [Native full-validation comparison](https://github.com/asgersvenning/mini_trainer/blob/f5c69e7cab2bfde8a5467026b293858b93e628f9/docs/archive/benchmark-history.md#native-onnx-full-validation-quality-and-numerical-limits): + top-1 predictions and the five reported metrics matched the full-FP32 CUDA + reference, but some scores exceeded export tolerance. Sample parity does not + establish confidence-threshold equivalence. +- [CUDA placement](https://github.com/asgersvenning/mini_trainer/blob/f5c69e7cab2bfde8a5467026b293858b93e628f9/docs/archive/benchmark-history.md#onnx-cuda-provider-placement): + native integer heads fell back to CPU; calibrated convolutions ran in floating + point. The calibrated recipe also changed scores and one top-1 prediction versus + its CPU execution. CPU quality/speed results therefore cannot qualify that CUDA + deployment. + +Model cards, evaluation attachments and Hub upload commands remain separate +[roadmap work](roadmap.md). diff --git a/docs/prototype-coordinate-study.md b/docs/prototype-coordinate-study.md new file mode 100644 index 0000000..c6b6b60 --- /dev/null +++ b/docs/prototype-coordinate-study.md @@ -0,0 +1,151 @@ +# Prototype coordinates for classical statistical tools + +Status: bounded empirical study completed, 2026-09-15. This is a research result, +not a change to inference, classifier weights, or the prototype viewer. + +## Decision + +**Keep original weights as the general-purpose representation.** PCA helps +Gaussian naive Bayes; full-rank whitening offers a modest neighbour-prediction +improvement. Stereographic coordinates are useful when an unrestricted chart +with an analytic inverse is required, but did not generally improve these tasks. + +Validation-selected PCA raised held-out family macro recall from 73.89% to +81.00%, selecting 256, 768 and 512 components across the three splits. This +supports task-specific preprocessing, not one globally optimal dimension. + +## Data and evaluation + +The actual production classifier supplies 12,632 species prototypes, each with +1,280 effective FP32 weights. The export was extracted with mini_trainer's +`load_prototypes`, preserving class order, GBIF IDs and model hierarchy. Analysis +normalizes the tiny FP32 norm deviations and uses float64; it does not overwrite +the original matrix. Input SHA256 and exact commands are in the +[reproduction guide](../publication/experiments/prototype_linearization/README.md). + +Supervised evaluation includes 12,473 species from 57 families with at least ten +species each; the remaining 159 species in 47 smaller families are excluded. +There are three fixed species splits, stratified by family: 8,731 fit, 1,871 +validation and 1,871 test rows. All anchors, projections, whitening, radial maps, +kernel landmarks and downstream estimators are fitted using training rows only. +Ridge regularization is selected on validation macro recall. Genus 5-NN metrics +condition on the true genus being represented among training species; coverage +is recorded separately in the baseline results. + +These are **held-out species-prototype tasks**, not held-out image classification. +The original model learned with hierarchical supervision; its taxonomy is not an +independent property of how these vectors were constructed. Gaussian naive Bayes +is a concrete classical Gaussian-model task; no claim is made about arbitrary +GMMs, calibrated density likelihoods, regression or Kalman tracking. The study is +exploratory: the follow-up methods were chosen after inspecting initial results, +so it is not a preregistered independent model-selection benchmark. + +All table entries are percentages, mean ± sample SD across three splits. SD is +not a confidence interval; the splits overlap. Family “macro” means macro recall +(balanced accuracy), not mean one-vs-rest binary accuracy. + +| Representation | Linear family macro recall | Linear family micro accuracy | Gaussian NB family macro recall | Genus 5-NN accuracy | +|---|---:|---:|---:|---:| +| ambient | 79.81 ± 2.61 | 95.40 ± 0.33 | 73.89 ± 2.42 | 78.88 ± 0.23 | +| log_mean | 79.85 ± 1.82 | 95.24 ± 0.23 | 73.71 ± 2.06 | 78.89 ± 0.56 | +| log_intrinsic | 79.26 ± 2.60 | 95.23 ± 0.25 | 73.67 ± 2.13 | 78.96 ± 0.51 | +| stereographic | 80.15 ± 1.52 | 95.24 ± 0.19 | 73.70 ± 2.03 | 78.60 ± 0.66 | +| equal_area | 79.75 ± 1.88 | 95.23 ± 0.25 | 73.66 ± 2.16 | 79.07 ± 0.46 | +| log_radial | 79.85 ± 1.82 | 95.24 ± 0.23 | 73.71 ± 2.06 | 78.84 ± 0.55 | +| pca128 | 39.17 ± 1.77 | 87.42 ± 0.64 | 77.69 ± 1.55 | 66.00 ± 1.77 | +| pca512 | 63.98 ± 1.87 | 93.37 ± 0.33 | 81.07 ± 1.94 | 76.80 ± 0.25 | +| pca1280_whiten | 79.56 ± 2.18 | 95.35 ± 0.23 | 69.81 ± 1.82 | 79.77 ± 0.41 | +| fast_pns32 | 21.98 ± 0.96 | 71.16 ± 2.62 | 66.55 ± 2.07 | 47.69 ± 0.28 | +| fast_pns128 | 35.64 ± 1.53 | 84.95 ± 0.57 | 76.41 ± 2.30 | 66.49 ± 2.07 | +| nystrom512_gamma0.01 | 44.28 ± 1.76 | 81.26 ± 0.65 | 67.07 ± 1.61 | 74.79 ± 0.69 | + +The table's `equal_area` key means the Lambert radial formula extended to this +sphere; it **does not preserve high-dimensional volume**. `log_intrinsic` uses +40 mean-update iterations, not a certified global Fréchet mean. `log_radial` is +the proposed radial-warp idea implemented as a deliberately simple control. + +## What the downstream evidence supports + +- **Linear family prediction:** stereographic macro recall exceeds the original + weights by 0.34 percentage points but loses micro accuracy. That small, + split-dependent trade-off does not establish superiority; aggressive dimension + reduction loses discriminative information. +- **Gaussian NB:** PCA helps; charts alone do not. Whitening does not materially + change Gaussian NB here because its learned coordinate variances absorb scaling. +- **Genus neighbours:** full-rank whitening modestly improves prediction by + changing the metric. Truncation and the tested kernel features generally lose. +- **Clustering:** 32-PC mini-batch k-means gives mean held-out family ARI 0.170 for + original weights, 0.178 for log coordinates and 0.183 for stereographic + coordinates. Cluster count is the number of eligible families, not selected + using test labels. This does not establish species-clustering performance. +- **Reconstruction and neighbourhoods:** PCA at 128 dimensions gives about 70° + mean angular reconstruction error in original space versus 78–81° for charts. + Original ten-neighbour overlap is about 84% for stereographic, 89% for log and + 92% for Lambert coordinates; none preserves the original geometry exactly. + +On the first training split, 2, 32, 128 and 512 PCs explain **0.39%, 5.20%, +17.76% and 54.42%** of variance. Information is spread across many dimensions: +a poor two-dimensional PCA view does not rule out useful high-dimensional +linear prediction. + +## Principles, simplicity, cost and insertion/inversion + +| Method | Principle and practical complexity | New point / inverse | Evidence-based position | +|---|---|---|---| +| Original unit weights | Extrinsic spherical analysis; no fitted transform. Classical tools already accept these vectors. Normalize an average if a unit-direction estimate is needed. | O(d); no information loss in original export. | Best default for linear prediction and fidelity. | +| Sphere log map | Riemannian normal coordinates preserve distances from the anchor. Small implementation with a Householder vector. Curvature remains in the metric. | O(d); analytic exp inverse on the valid chart. Unique log domain excludes the antipode; radii are < π. | Useful local chart, no material general benefit on this dispersed matrix. | +| Stereographic | Conformal chart; arbitrary finite Euclidean coordinates, except one excluded sphere point. Does not preserve global dot products/distances. | O(d); analytic inverse, with numerical conditioning near the excluded pole. | Best simple invertible unrestricted chart if that is explicitly required. | +| PCA | Orthogonal covariance directions; dimension reduction regularizes classical models. Very standard implementation. | O(dk); new points use saved mean/loadings. Exact only when retaining the full basis; truncated inverse is approximate. | Strongest demonstrated preprocessing benefit for Gaussian NB. | +| Full PCA whitening | Invertible covariance rescaling; Euclidean distance becomes a fitted Mahalanobis distance. | O(d²); save mean/loadings/scales. Invertible with positive retained eigenvalues. | Modest genus-neighbour improvement, not best for Gaussian NB. | +| Fast PNS | Successive least-squares small subspheres; more fitting and state than a single chart. Scores retain a circular coordinate and bounded residuals. | O(dp + p²) after reduction; deterministic insertion. Inverse to reduced sphere passes roundtrip, but discarded dimensions cannot be recovered. | Tested p=32 and p=128 versions do not improve overall on matched PCA. | +| Nyström RBF features | Approximate nonlinear kernel feature space for linear tools; 512 training landmarks. | O(md + m²) with dense normalization; approximate learned preimage, no guaranteed inverse. | Five tested kernel widths give no overall advantage here. | +| Radial quantile warp | Distribution-specific heuristic; radial normality does not imply multivariate Gaussianity. | O(d) plus quantile lookup; our clamped interpolation loses extreme held-out radii. | No demonstrated gain; do not promote this control into an export default. | + +CPU observations (Intel i7-12800H, four BLAS threads): mean-anchor charts fit +in about 0.02 s and insert/invert a vector in 11–23 μs. The 40-step intrinsic-mean +estimate takes about 5 s with residual mean-log norm 0.00034; this does not certify +a global mean. PCA fits take about 0.4 s for the full-covariance solver versus +2 s for randomized 512-component PCA, so these are not dimension-scaling timings. +PCA-512 insertion takes about 0.2 ms; PNS-128 takes 9.4 s to fit including reduction +and 1.8 ms per insertion. The narrow-kernel follow-up takes about 0.5 s including +preimage fitting and 1.1–1.2 ms per insertion. These are host-specific observations, +not isolated throughput benchmarks or deployment guarantees. + +Fast PNS uses Monem, Dryden & George (2025, §3.3), three initializations and a +bounded optimizer per subsphere. Selected stages reported convergence and +held-out reduced-sphere inversion passed; a known-small-circle check validates +the core fit. This does not certify global optima, agreement with the authors' R +package, or full 1,279-dimensional PNS, whose cost/state scales quadratically. + +Kernel widths 0.01, 0.1, 1, 5 and 20 were tested. Broad kernels transferred better; +narrow kernels largely failed beyond training landmarks. The table shows γ=0.01, +not globally optimized kernels. At 512 coordinates, PCA substantially outperformed +Nyström for linear family prediction; kernel preimages remain approximate. + +## Recommended next use + +- Fit PCA on analysis training data and choose dimension on validation data; + the observed 256–768 range is guidance, not a fixed default. +- Use whitening only when a changed neighbour metric is intended. A stereographic + companion should retain its anchor, row norms, conventions and numerical error. +- Reduced PNS results do not justify escalating to full PNS or custom flows and + autoencoders; the latter are untested, not empirically rejected. +- Image embeddings, domain shift, calibrated densities and time-series filtering + need their own data. These recommendations concern the available prototype tasks. + +## Evidence and references + +The [reproduction guide](../publication/experiments/prototype_linearization/README.md) +owns the protocol, source references and commands. The original local bundle +`/tmp/prototype-linearization-study-20260915` held per-split results, indices, +executed source, environment details, a figure and checksums. It was absent when +checked on 2026-09-23. **The numerical +results above are retained historical findings, not independently reverified +results.** Reproduction requires the checksum-matched input and four fresh stages; +the scripts do not archive the raw evidence. + +The original study recorded completion on the real matrix and three passing +numerical checks: chart inversion/insertion, a small-circle PNS fit with held-out +inversion, and radial endpoint failure. Documentation cleanup does not rerun or +extend that qualification. No model, dataset or large generated matrices are +tracked. diff --git a/docs/quantization-artifacts.md b/docs/quantization-artifacts.md index 5c145f9..6d8bdb7 100644 --- a/docs/quantization-artifacts.md +++ b/docs/quantization-artifacts.md @@ -5,10 +5,10 @@ that every temporary binary remains in the checkout. Cleanup consolidates local evidence under ignored `local-evidence/quantization-2026-09-09/`; no model, dataset or generated result is committed by this operation. -Historical cleanup counts, disk-space observations and the test snapshot are -preserved in the [dated agent handoff](../.agents/notes/2026-09-09-quantization-cleanup.md). -They do not establish current artifact availability or test status. This guide -covers the retained layout and restore procedure. +Historical cleanup counts and validation are recorded in +[the original report](https://github.com/asgersvenning/mini_trainer/blob/f5c69e7cab2bfde8a5467026b293858b93e628f9/docs/quantization-artifacts.md). +They do not establish current artifact availability or test status. Verify the +local inventory before reuse; this guide owns the restore procedure. ## Retained locally diff --git a/docs/quantization-roadmap.md b/docs/quantization-roadmap.md index fa854d9..2bdc086 100644 --- a/docs/quantization-roadmap.md +++ b/docs/quantization-roadmap.md @@ -1,128 +1,87 @@ -# Quantization feature-branch roadmap - -This is the current plan for `quant`. The local implementation and evidence are -substantial, but the goal remains incomplete until useful trade-offs are verified -on the intended hardware. After repository consolidation, pause further broad -laptop sweeps and reporting expansion. Resume with a specific bottleneck, -target run or integration requirement from the sequence below. - -## Scope and acceptance - -Use EfficientNetV2-S with symmetric hidden layers and normalized flat and -hierarchical classifiers. Evaluate full training and parameter-frozen fine-tuning -separately. Use reproducible synthetic/oracle checks, MNIST integration and reviewed -Blair splits; use 10k/100k-class synthetic heads for capacity. Larger class counts -belong on appropriately provisioned hardware. Synthetic capacity does not prove -large-vocabulary classification quality. - -| Target | Required execution | Evidence needed to finish | -| --- | --- | --- | -| HPC: A40/A100/B300-class systems with AMD EPYC | PyTorch training | Paired convergence/time to comparable quality, throughput, cold/setup costs, host and allocated/reserved device memory, actual loading/transfer costs, checkpoint/resume correctness. Record each tested GPU/runtime/allocation. | -| Local: NVIDIA Spark or intended RTX desktop/Ryzen system | PyTorch training/fine-tuning and ONNX GPU inference | Full/frozen training evidence plus target-built inference engines, actual integer placement, paired quality, realistic batches, end-to-end inference cost and memory. Verify exact installed device and architecture first. | -| Edge: Raspberry Pi or comparable ARM device | ONNX CPU inference | Installed runtime/operator compatibility, five-metric quality, batch-one latency, sustained throughput, process memory, preprocessing and deployment packaging under realistic thread/power/thermal conditions. | - -The quality contract is Macro-F1, Macro-Recall, Macro-Precision, Coverage and -Theil's U through `mini_metrics`, including parent levels. A few points of loss -can be acceptable with a substantial measured speed/cost or memory benefit. -Choose and record per-profile quality/resource gates before qualification; do not -hide a failed metric behind accuracy or engine size. Keep baselines practical: -BF16/FP16 training where supported, FP16 TensorRT, and floating ONNX CPU. - -## 1. Finish local preparation and handoff - -The implementation, current findings, command guides, grouped tests and retained -evidence should form a reviewable branch milestone. This stage does not require -new target hardware or another performance sweep. - -- Run static checks and the complete grouped suite; preserve test collection, - checkpoint fixture imports and spawn behavior. Keep optional/GPU skips explicit. -- Retain essential trained final models, deployable ONNX sources, predictions, - reports, input identities and scripts; remove disposable duplicate/intermediate - models and laptop-specific engines. See [artifact retention](quantization-artifacts.md). -- Use existing [training](../dev/benchmarks/training.md), - [inference](../dev/benchmarks/inference.md) and - [reporting](../dev/benchmarks/reporting.md) commands as the handoff. Avoid a - second implementation of model construction, evaluation or configuration. -- Keep the branch unmerged until reviewed. Repository settings and public - publication require a deliberate activation step after review. - -Exit: clean committed branch, unchanged collected test cases, passing checks, -concise documentation, and an inventory of retained/restorable evidence. - -## 2. Obtain target runs and establish practical baselines - -**Dependency:** access to the target machines, or an operator who can run the -commands and return the full artifacts. No local measurement can remove this -dependency. Record GPU/CPU identity, architecture, memory, OS, driver/runtime, -PyTorch/ONNX versions, thread/worker limits and allocation conditions. - -1. Prepare explicitly selected backend environments; do not synchronize away a - working CUDA environment. Verify TorchAO/kernel support on the actual GPU and - host architecture. Keep `mini_metrics` in an explicit compatible interpreter. -2. Stage the reviewed dataset/split/taxonomy and training-only calibration inputs. - Keep preprocessing and input/model hashes identical across each pair. -3. Run a bounded correctness pilot: model construction, a training step, checkpoint - reload, inference and operator placement. Reject unsupported execution before - launching a long benchmark. -4. Run `bash dev/check-benchmarks.sh qt-efficientnet FRESH_RESULTS` with the documented - data/interpreter variables. Its default covers both heads, full/frozen training, - BF16/INT8 and three seeds. Select longer budgets explicitly where needed; - five-epoch quality is not a settled convergence comparison. -5. Rebuild TensorRT engines on the target with - `bash dev/check-tensorrt-deployment.sh FRESH_RESULTS`. On ARM, use - `python -m dev.benchmarks.inference.cpu_deployment` with the reviewed baseline/candidate, - manifest and representative inputs. Begin with explicit conservative threads. -6. Collect fresh-process repeated runs without competing benchmark jobs. Include - cold startup, warm execution and end-to-end input handling as separate scopes. - Return raw reports and artifacts even when a stage fails. - -Exit: reproducible floating and quantized baseline evidence for the actual target; -an identified dominant cost or a demonstrated useful trade-off. Scope claims to -tested configurations rather than extrapolating across hardware families. - -## 3. Unlock measured performance bottlenecks - -The [findings](benchmarks.md) summarize the evidence behind these priorities. -Choose the next row using target profiles; do not implement all possible precision -formats or distributed backends merely because they are available. - -| Observed bottleneck | Action that can unlock it | Verification gate | -| --- | --- | --- | -| Full EfficientNet training gets only about 3.4% peak savings from head-only QT, with no reliable local speed gain | Profile the entire model, backward pass, optimizer, loading and transfers on the target. If convolution/activation traffic dominates, select and implement a supported deeper quantization path for that cost; if the head dominates, focus on its kernels/storage. | Report actual quantized/floating coverage and physical storage. Demonstrate end-to-end benefit at comparable quality; AMP or fake quantization alone does not complete this work. | -| Large normalized heads incur transient normalization/gradient storage and optimizer overhead | Preserve bounded preparation/backward fixes. Profile realistic head sizes, batching and fused update paths; consider optimizer-state reduction only if its footprint is limiting. | Fresh-process setup/steady-state measurements; allocated and reserved peaks; numerical, accumulation, optimizer-step and checkpoint regressions. Do not optimize only an isolated GEMM. | -| Compilation/CUDA graphs can improve steady state while increasing setup or reserved memory | Measure eager, compiled and graph modes separately. Qualify first-use tuning and cold setup on the target; reduce capture/tuning overhead only where it matters. | Include initialization and first step, replay correctness, total useful-work time and reserved memory. A warmed kernel speedup is insufficient. | -| Compiled floating-point DDP qualification emitted gradient/bucket stride mismatch, stochastic-depth recompilation-limit and hierarchical scalar-extraction graph-break warnings; throughput impact is unmeasured | Identify the affected parameter and layout before/after wrapping and backward; isolate compiler specialization and lazy hierarchy initialization with a small reproducer. Keep active qualification unchanged until measurements justify a fix. | Preserve gradient/update, stochastic-depth, checkpoint and DDP semantics; demonstrate reduced copies or graph fragmentation and repeatable warm end-to-end benefit. Warning disappearance alone is not acceptance. | -| Short hierarchical QT runs lose parent metrics; early BatchNorm sensitivity is substantial | Run longer paired budgets/seeds with working epoch statistics. Investigate precision/optimization sensitivity at fixed data and model state. Qualify any state-refresh or recipe change with its extra cost. | Time to comparable leaf/parent quality across seeds. Do not adopt automatic BatchNorm refresh from the mixed existing results. | -| Native dynamic INT8 ONNX uses MatMulInteger CPU fallback on CUDA; TensorRT rejects that representation | Qualify the explicit materialize-then-calibrate route first. If exact native quantizer semantics are required, implement a supported integer GPU lowering/kernel as a separate feature. | Actual provider/operator placement and end-to-end quality against the correct reference. Never silently label floating/fallback execution as integer GPU inference. | -| Large-head float export needs a profile-specific tolerance override | Continue numerical attribution with higher-precision references on the failing target/profile. Distinguish accumulated rounding from an export/operator defect. | Explicit score/parity and decision/metric evidence; retain the public default gate until a justified general change exists. | -| INT8 TensorRT engines are smaller but can be slower; local batch-64 results are near tied | Profile target batch sizes, transfers, tactics and head/backbone balance against FP16. Measure actual runtime memory and sustained throughput, not just serialized size. | Significant useful speed/cost or memory benefit with acceptable paired quality on the intended workload. | -| ARM kernels/runtime, thermal behavior and packaging are unverified | Prepare the actual ARM environment and inspect unsigned-activation CPU recipe placement; benchmark sustained batch-one inference including preprocessing. Adjust calibration/operator choices only from measured failures. | Repeated ARM measurements, all five metrics, memory within device limits, and an installed deployment example. x86 savings do not qualify ARM. | -| Shared storage/loading or CPU oversubscription may dominate training | Measure loader wait and host/device transfer on the real allocation. Tune explicit threads/workers, caching and prefetch/transfer options within resource limits. | Identical sample/order semantics, bounded host/shared memory, and improved end-to-end training rather than loader-only throughput. | - -If production size requires multiple GPUs, native QT DDP/FSDP is a separate -unsupported boundary to implement and qualify. Check parameter representation, -communication/reduction, sharding, optimizer state and distributed resume. Existing -floating DDP tests do not establish distributed QT support. - -## 4. Close development and integration bottlenecks - -| Dependency or gap | Required action | Done when | -| --- | --- | --- | -| Target-only optional runtimes and backend versions | Record supported combinations; preserve lazy imports and actionable errors; run installed-wheel validation after dependency/packaging changes. | Clean installation and intended kernels work on each claimed target without changing floating defaults. | -| Target inputs/models currently require explicit staging | Prepare a versioned deployment bundle with preprocessing, mappings, score semantics, calibration provenance, model hashes and a minimal inference example. Reuse current export manifests. | Another operator can reproduce the target run without private notebook state or this laptop's paths. | -| Continuous CPU/training handoff is incomplete | Connect the existing CPU command and representative training reports to configured runners and compact history. Add only the adapters needed for real collected evidence. | Failed and successful target runs retain attributable reports; history preserves CPU/GPU and training/inference measurement scopes. | -| Release storage/Pages has only local and simulated validation | After branch review/merge, configure Pages and target runner variables, then enable `ENABLE_BENCHMARK_HISTORY`. Run one live success, failure and publishing retry. | Stored asset readback, immutable run identity, correct public page and recoverable failure verified remotely. | -| Quality/resource acceptance is not automated | Define per-profile gates from practical paired evidence and the agreed few-points trade-off. Preserve all five metrics and uncertainty/repetition context. | A regression is visible and fails the appropriate check; unsupported/untested profiles cannot look production-qualified. | - -## 5. Completion and deferred work - -Finish with supported opt-in recipes for the three target regimes, reproducible -quality/efficiency evidence, functioning checkpoint/export/deployment contracts, -visible continuous results, and a final compatibility/packaging review. A negative -result should constrain the supported recipe or motivate a measured implementation -change; it must not be reported as a general speedup. - -EMA repair, unrelated optimizer/loss/augmentation comparisons, new dataset formats, -Birds/iNaturalist expansion and cosmetic dashboard work remain deferred. Broader -operator or distributed support becomes necessary when the target workload needs -it to achieve the stated goal, not as an unconditional expansion of this roadmap. +# Quantization roadmap + +The implementation is merged. **Useful target-machine trade-offs remain open.** +Do not repeat completed branch cleanup or broad laptop sweeps as a prerequisite. +[Measured findings](benchmarks.md), [commands](../dev/benchmarks/README.md) and +[artifact retention](quantization-artifacts.md) are the maintained evidence and +execution references; detailed historical experiments remain in +[the recorded snapshot](https://github.com/asgersvenning/mini_trainer/blob/f5c69e7cab2bfde8a5467026b293858b93e628f9/docs/archive/benchmark-history.md). + +## Supported scope and decision criteria + +Implemented: opt-in native CUDA INT8 Linear training with normalized symmetric +heads, checkpoint safeguards, floating materialization/calibration, generic ONNX +export and CPU/TensorRT placement, quality and resource reporting. Defaults remain +floating point. Native QT DDP/FSDP, integer convolution training, exact native +quantizer GPU ONNX execution and ARM production performance are not established. +EMA remains unsupported. + +Evaluate EfficientNetV2-S flat and hierarchical heads, full and frozen training, +with reviewed data/splits and paired seeds. Synthetic/oracle and 10k/100k-class +capacity checks establish correctness/capacity, not image-level quality. +Use practical floating baselines: supported AMP training, FP16 TensorRT and floating +ONNX CPU. Through `mini_metrics`, retain macro F1/recall/precision, coverage and +Theil's U at leaf and parent ranks. Set workload-specific quality/resource gates +before a run; a small quality loss may be useful only with a measured resource gain. + +| Target | Question and required evidence | +| --- | --- | +| HPC A40/A100/B300-class + EPYC | Does full/frozen training reach comparable quality sooner or with useful memory savings? Include startup, loading/transfers, allocated/reserved memory and resume correctness. | +| Intended RTX desktop or Spark | Same training question; qualify target-built ONNX/TensorRT inference with real operator placement, batches, end-to-end cost and memory. | +| Raspberry Pi/comparable ARM | Does installed ONNX CPU inference fit memory and sustain useful batch-one performance, including preprocessing, threads and thermal/power conditions? | + +Record the actual device/allocation, OS, driver/runtime and installed packages. +Available hardware determines the next bounded comparison; the table is not a +requirement to obtain every listed architecture before making progress. + +## Next target run + +1. Prepare an explicit backend environment and reviewed inputs. Preserve dataset, + split, taxonomy, preprocessing and model hashes; use training-only calibration. +2. Run a small construction/train-step/checkpoint/inference and placement pilot. + Reject unsupported execution before a large comparison. +3. Use `bash dev/check-benchmarks.sh qt-efficientnet FRESH_RESULTS` for the paired + training matrix, with [documented variables](../dev/benchmarks/training.md). + Its default three-seed, five-epoch comparison is not settled convergence evidence. +4. Use `bash dev/check-tensorrt-deployment.sh FRESH_RESULTS` for target-built engines, + or `python -m dev.benchmarks.inference.cpu_deployment` for CPU. Follow the + [inference guide](../dev/benchmarks/inference.md). +5. Retain success/failure reports, inputs and identities. Separate cold setup, + warm compute and end-to-end costs; use repeated uncontended runs where variation + affects the decision. Return evidence through the existing reporting format. + +## Choose changes from the limiting cost + +| Existing evidence or boundary | Next useful action | +| --- | --- | +| Head-only QT gave about 3.4% peak savings in full EfficientNet training, without reliable local speed gains. | Profile the full target workload. Expand integer coverage only if the unquantized cost dominates; report physical storage and end-to-end benefit. | +| Large normalized heads have transient normalization/gradient and optimizer costs. | Preserve bounded preparation/backward behavior; qualify realistic head sizes and optimizer memory instead of optimizing an isolated GEMM. | +| Compilation/graphs trade startup and reserved memory for steady-state speed. | Include setup, first step and total useful work. Recorded DDP stride, recompilation and hierarchy graph-break warnings are leads, not proven bottlenecks. | +| Short hierarchical QT runs lose parent metrics; BatchNorm changes had mixed results. | Compare longer paired budgets/seeds and time to quality. Do not adopt automatic BN refresh without evidence including its cost. | +| Native dynamic INT8 ONNX falls back to CPU for MatMulInteger; TensorRT rejects that representation. | Qualify materialize-then-calibrate first. Exact native integer GPU lowering is a separate feature, with actual provider placement as acceptance. | +| Smaller INT8 TensorRT engines were not reliably faster than FP16. | Measure target tactics, batches, transfers and runtime memory; serialized size is not a speed result. | +| ARM runtime and sustained behavior are unverified. | Test the real device and unsigned-activation CPU recipe before claiming edge support. | +| Shared-storage/CPU contention can dominate. | Tune bounded reads, workers and transfer overlap within the allocation; preserve order and measure whole training. | + +Retain export score/decision checks. A profile-specific large-head tolerance +exception does not justify weakening the generic exporter gate. Distributed native +QT needs separate parameter/communication/sharding/optimizer/resume qualification; +floating DDP tests do not establish it. + +## Integration and deferred work + +Reuse existing export manifests for portable bundles: preprocessing, mappings, +score semantics, calibration provenance, hashes and a minimal installed example. +Keep optional runtimes lazy and validate installed wheels when packaging changes. +MAMBO's floating bundle offers a packaging example, not quantized qualification. + +[Continuous reporting](../dev/benchmarks/reporting.md) has local/simulated evidence; +remote activation still needs configured runners/Pages, reviewed +`ENABLE_BENCHMARK_HISTORY`, stored-asset readback and live success/failure/retry +checks. Preserve training/inference and CPU/GPU scopes and visible missing results. +Define automated quality/resource regression gates from the paired target evidence. + +EMA repair, unrelated feature/dataset expansion and dashboard cosmetics are separate +work. New precision formats or distributed backends belong here only when required +by the target workload. Negative results should narrow supported claims, not trigger +another indiscriminate experiment matrix. diff --git a/docs/quantization-status.md b/docs/quantization-status.md deleted file mode 100644 index c88ce11..0000000 --- a/docs/quantization-status.md +++ /dev/null @@ -1,26 +0,0 @@ -# Quantization branch status - -The goal is **not complete**: target-machine benefits have not been verified. -The maintained sources of truth are now: - -- [Branch roadmap](quantization-roadmap.md): ordered work, bottlenecks, dependencies - and completion gates. -- [Current benchmark findings](benchmarks.md): measured benefits, regressions and - interpretation limits. -- [Command index](../dev/benchmarks/README.md): training, inference and reporting. -- [Historical evidence](https://github.com/asgersvenning/mini_trainer/blob/f5c69e7cab2bfde8a5467026b293858b93e628f9/docs/archive/benchmark-history.md): detailed experiments, - unsuccessful approaches and numerical results retained for traceability. -- [Artifact retention](quantization-artifacts.md): what survived temporary cleanup - and how to restore evidence. - -Implemented locally: native INT8 Linear training with normalized symmetric heads; -optimizer/checkpoint safeguards; shared loading improvements; generic ONNX export; -explicit native-checkpoint materialization and calibration; CPU/TensorRT quality, -placement and resource commands; compact CPU/GPU records; opt-in release/Pages -publishing. The reporting service has not been qualified remotely. - -Not established: worthwhile end-to-end training gains on HPC/desktop targets, -integer convolution training, distributed native QT, exact native-quantizer GPU -ONNX execution, or ARM production performance. EMA repair remains deferred. -Further notebook experiments, dashboard expansion, unrelated feature comparisons, -Birds/iNaturalist and dataset-format work are not prerequisites for this branch. diff --git a/docs/quantization.md b/docs/quantization.md index 67b744d..d8531d7 100644 --- a/docs/quantization.md +++ b/docs/quantization.md @@ -1,12 +1,12 @@ -# INT8 quantization: initial x86 backend +# x86 INT8 calibration and QAT -This is an opt-in Python API for **static INT8 weights and UINT8 activation storage**, -using TorchAO PT2E. Actual quantized training with reduced memory and training -time now has an initial [CUDA model integration](quantized-training.md); see the [QT/loader probes](../dev/benchmarks/training.md#capacity-and-bottleneck-probes). It supports post-training calibration (PTQ) and -quantization-aware training (QAT). QAT uses fake quantization with float32 master -parameters/gradients; it does not promise integer backward computation or reduced -training memory. Converted inference executes native oneDNN integer Conv/Linear -kernels. This is separate from float16/bfloat16 AMP. +The opt-in `mini_trainer.modeling.quantization` API uses TorchAO PT2E for +post-training calibration (PTQ) and quantization-aware training (QAT). +Converted inference executes oneDNN integer Conv/Linear kernels with static INT8 +weights and UINT8 activations. QAT uses fake quantization and float32 master +parameters/gradients; it does not promise reduced training memory or integer +backward computation. [Native CUDA INT8 training](quantized-training.md) has a +separate implementation and qualification scope. Install the optional dependency in an explicitly selected backend environment: @@ -15,9 +15,8 @@ uv sync --extra cpu --extra quantization # Existing CUDA environments: do not run a CPU sync; select their CUDA extra. ``` -The first verified backend is x86 CPU with PyTorch 2.12 and TorchAO 0.17. -TorchAO is imported lazily. Ordinary training, prediction, checkpoint formats and -ONNX export are unchanged. The new API is in `mini_trainer.modeling.quantization`. +The recorded x86 qualification uses PyTorch 2.12 and TorchAO 0.17. TorchAO is +loaded only when this API is used; ordinary training and prediction are unchanged. ## Calibration and inference @@ -107,7 +106,7 @@ and BatchNorm; arbitrary Python training branches are specialized by capture. Autoregressive teacher-forcing/sampling requires a separate training integration and is not currently a supported QAT claim. Capture failures propagate explicitly. -## Coverage and next increments +## Supported scope and validation Inputs currently have a fixed captured batch and image shape. All batches must match it; pad and slice final inference batches, or prepare a separate shape. @@ -115,16 +114,10 @@ The original model's parameters, modes and caches are preserved by preparation. Functional linears, weight parametrization, hierarchical aggregation and class masks are included in capture; this does not rely on a backbone allowlist. -Focused tests exercise flat, hierarchical, conditional and independent heads, -real gradients, exact controlled QAT/AdamW continuation, held-out-data isolation, -integer operator execution, checksums and artifact reload. A synthetic oracle -exercises QAT through the actual training loop and checks integer predictions. - -Still required: user-facing checkpoint/CLI integration, dynamic batch support, -MNIST/Blair reports, broader backbone/operator coverage, GPU quantization, -ONNX/runtime conversion, and lower-bit profiles. Model quality, artifact size, -memory and latency need measured comparisons; no speedup or quality benefit is -claimed by passing compatibility tests. EMA remains unsupported. +EMA remains unsupported. Model quality, memory and latency require measured +comparisons beyond compatibility checks. See the [quantization roadmap](quantization-roadmap.md) +for planned work and [benchmark findings](benchmarks.md) for retained measurements +and their separate backend/workload boundaries. Run focused checks without changing the installed environment: diff --git a/docs/quantized-training-validation.md b/docs/quantized-training-validation.md index fc83855..a95e82c 100644 --- a/docs/quantized-training-validation.md +++ b/docs/quantized-training-validation.md @@ -2,7 +2,7 @@ This document describes the checks that must remain valid while quantization is extended. Current results live in [benchmark findings](benchmarks.md); planned -work and target acceptance live in the [branch roadmap](quantization-roadmap.md). +work and target acceptance live in the [quantization roadmap](quantization-roadmap.md). Detailed historical runs are retained in the [experiment archive](https://github.com/asgersvenning/mini_trainer/blob/f5c69e7cab2bfde8a5467026b293858b93e628f9/docs/archive/benchmark-history.md). ## Model and dataset coverage @@ -52,7 +52,6 @@ A few points of degradation may be acceptable when justified by a material speed/cost or memory benefit. Record the per-profile acceptance limits before qualification; integer execution alone is not acceptance. -The intended execution targets remain HPC GPU training on A40/A100/B300-class -systems with EPYC hosts, local training/fine-tuning and ONNX GPU inference on Spark -or the intended RTX desktop, and ONNX CPU inference on Raspberry Pi/ARM. -Support claims require evidence from the corresponding hardware and workload. +Target hardware and workload acceptance are maintained in the +[quantization roadmap](quantization-roadmap.md#supported-scope-and-decision-criteria). +Support claims require evidence from the corresponding target. diff --git a/docs/quantized-training.md b/docs/quantized-training.md index 9dd7f51..700bacb 100644 --- a/docs/quantized-training.md +++ b/docs/quantized-training.md @@ -1,27 +1,26 @@ # CUDA INT8 training integration -The opt-in training path stores eligible Linear weights and saved linear inputs -in INT8 and uses integer matrix products for forward, input gradients and weight -gradients. It retains no floating-point master copy of those weights. Gradients, -optimizer state, biases, activation normalization, convolutions and auxiliary regularization -remain floating point. This is separate from fake-quantized QAT and x86 PTQ. - -Install the optional `quantization` extra while explicitly retaining the intended -PyTorch CUDA backend, as described in the README. The current implementation uses -TorchAO's experimental Triton kernels. It has been exercised on an RTX 3080 Ti; -CPU preparation and checkpoint inspection do not establish CPU execution support. -See the [validation audit](quantized-training-validation.md) for current tests, -measured training/loading benefits and the limits of those results. +This opt-in path stores eligible Linear weights and saved Linear inputs in INT8, +uses integer forward/backward matrix products and retains no floating master +weights. Gradients, optimizer state, biases, convolutions, activation normalization +and auxiliary regularization remain floating point. It is separate from +[x86 PTQ and fake-quantized QAT](quantization.md). + +Install the `quantization` extra with the intended PyTorch CUDA backend using the +[root installation guide](../README.md#installation). Execution uses TorchAO's +experimental Triton kernels; CPU preparation/inspection does not support CPU +inference. Local RTX 3080 Ti results are recorded in [benchmark findings](benchmarks.md). ```bash mt_train -i /path/to/data --device cuda --quantized-training --dtype float16 --cache cpu --cache-workers 0 ``` -`--quantized-training` prepares weights before building the optimizer and logs -coverage. `--cache-workers 0` makes cache construction synchronous; its selection -is separate from DataLoader workers. Ordinary training defaults are unchanged. +`--quantized-training` prepares weights before optimizer creation and logs coverage. +`--dtype float16` selects autocast; model parameters remain float32. The example +builds its CPU image cache synchronously; cache and DataLoader workers are separate +settings. Ordinary training defaults are unchanged. -The Python API also supports explicit module selection: +For explicit module selection: ```python import torch @@ -33,85 +32,35 @@ coverage = prepare_quantized_training(model) # in place, before optimizer creat optimizer = torch.optim.AdamW(model.parameters(), lr=1e-3) ``` -The returned recipe lists quantized modules, skipped operations, remaining -floating-point parameters and physical versus reference weight storage. Automatic -selection covers ordinary `nn.Linear` modules, including their functional use by -Classifier heads. It preserves shared weights when every owner is selected. -Initial conversion of large weights processes row chunks of at most 4,194,304 -elements (or one row when wider), limiting the quantizer's floating temporaries. -This preserves deterministic INT8 codes and row scales; it does not reduce the -storage needed for source weights, validation, gradients or optimizer states. -Row-wise PyTorch weight normalization (`dim=0`) quantizes the direction parameter -while retaining its scalar magnitude per output row in floating point. Effective -normalized weights reuse the integer codes with new row scales; normalization -backward applies its Jacobian to the approximate Linear gradient. No floating -weight matrix is retained for this operation. Other parametrizations, normalization -dimensions and weights shared with an unselected operation stay floating point -and are reported. Explicit unsupported -selections and models with no eligible weights fail before changing weights. -Quantizing the hidden linear layer of a convolutional classifier does not make -its convolutions integer operations. - -CUDA execution supports batched inputs, bias, masked classifier rows, -single-sample inference and float16/bfloat16 autocast with float32 parameters. -Float32 optimizer parameters avoid the FP16 AdamW epsilon underflow discussed in -the developer probe. Eager SGD, AdamW and the repository's MuonAuxAdamW update -paths are covered; fused optimizer variants are not established. Quantized -regularization uses a differentiable floating view of the represented weights. - -Eager CUDA SGD/AdamW-style `add_` and `addcdiv_` updates fuse dequantization, -the weight update and stochastic requantization over the underlying storage -tensors. This kernel compiles on first use even when the outer optimizer is -eager. It retains INT8 codes and row scales, advances tensor version counters, -and preserves explicit intermediate precision casts. Scalar tensor weight decay -rescales rows without another stochastic rounding pass. CPU inspection/update -tests use the ordinary floating calculation and copy path. The fused row kernel -covers matching FP32/FP16/BF16 update tensors and rows up to 16,384 elements; -broadcasting, mixed dtypes and wider rows retain the ordinary update path. -No floating master weight is retained by either path. The new kernel uses CUDA -RNG seeds with Triton stochastic rounding, so exact trajectories differ from the -earlier floating update even when starting from the same seed. - -Matrix products reuse TorchAO's INT8 kernel with a separate local tuner. CUDA -graph timing avoids the default tuner's 256 MiB cache-flushing allocation, and -selected configurations are cached on disk. TorchAO's global operators and tuner -are unchanged. The explicit update and matrix operators provide fake execution -implementations for model compilation. - -`--compile-optimizer` supports tensor-learning-rate FMA updates and functional -stochastic requantization. Floating-to-INT8 copies use a fused row kernel for -matching CUDA FP32/FP16/BF16 tensors with at most 16,384 columns, returning fresh -codes/scales before the final storage mutation. Eager and compiled rounding can -follow different random trajectories even with a matching seed. Transient floating -updates remain; compilation compatibility does not imply a speedup. - -`--compile-optimizer --optimizer-cudagraphs` opts into optimizer graph replay. -During AOT fake-tensor tracing, updates expose floating arithmetic followed by -functional requantization and storage copies. Eager native updates are retained. -Expected failed kernel-tuning candidates release their exception tracebacks -promptly so temporary tensors do not outlive graph pool tracking during first -use; unexpected kernel errors still propagate. -Learning rates stay on CUDA during replay; checkpoints retain numeric values and -explicit non-default rate precision. This leaves the AMP gate, scheduler and -MuonAuxAdamW outer counter in their existing roles. The training loop explicitly -marks each graph iteration before the model runs, keeping backward gradient -buffers alive until the optimizer consumes them. Custom training loops must call -[`torch.compiler.cudagraph_mark_step_begin()`](https://docs.pytorch.org/docs/2.12/generated/torch.compiler.cudagraph_mark_step_begin.html) -before each training iteration when -combining compiled models with optimizer graph replay. See the -[optimizer graph requirements](../dev/README.md#optimizer-cuda-graphs), including -native fused float32-rate restrictions. The native fused optimizer tests use -floating parameters; they do not establish native fused updates of INT8 weights. +The returned recipe reports selected/skipped modules, remaining floating parameters +and physical/reference weight storage. Automatic selection covers `nn.Linear`, +including functional use by classifier heads. Shared weights are converted only +when all owners are selected. Explicit unsupported selections and models with no +eligible weights fail before mutation. + +| Feature | Contract | +| --- | --- | +| Row-wise weight normalization (`dim=0`) | INT8 direction, floating magnitude per output row; no retained floating weight matrix. Other parametrizations/dimensions stay floating and are reported. Initial zero directions are rejected. | +| Inputs and inference | Batched inputs, bias, masked classifier rows and single-sample CUDA inference are supported. | +| Precision | Float16/bfloat16 autocast with float32 parameters; retain float32 optimizer parameters to avoid FP16 AdamW epsilon underflow. | +| Optimizers | Eager SGD, AdamW and MuonAuxAdamW update paths have coverage. Native fused optimizer support for INT8 weights is not established. | +| Capacity | Preparation uses bounded row chunks, but source weights, validation, gradients and optimizer state still contribute to peak memory. Quantizing Linear layers does not quantize convolutions. | +| Unsupported | Native QT DDP/FSDP, checkpoint averaging, integer convolution training and quantized activation normalization are not established. `mt_train` rejects distributed native QT and EMA. | + +Updates stochastically requantize represented weights. CUDA row kernels fuse +eligible updates; unsupported shapes and dtype combinations use the ordinary path. +Neither retains a floating master weight. First use includes kernel compilation/tuning, so measure startup separately from steady-state training. +Eager, fused and compiled execution can follow different rounding trajectories +with the same seed. ## Checkpoints and inference -Prepared models include their recipe in `state_dict`. Ordinary `mt_train` -checkpoints retain INT8 parameter storage, and `Classifier.build(weights=...)` -restores the parameter types before loading weights. Known tensor classes are -allowed only within a scoped `weights_only=True` load. To resume through -`mt_train`, enable `--quantized-training` again so optimizer construction sees -the correct parameters. Existing stochastic-resume limitations still apply: -the trainer does not generally persist sampler or RNG state. +Prepared `state_dict`s include the quantization recipe and INT8 parameter storage. +`Classifier.build(weights=...)` restores parameter types before loading weights; +`load_training_weights` uses a scoped known-class allowlist with `weights_only=True`. +For `mt_train` checkpoint resume, enable `--quantized-training` again so optimizer +construction sees the correct parameters. General RNG/sampler state is not fully +checkpointed, so arbitrary stochastic continuation is not guaranteed identical. For a custom architecture outside `Classifier.build`: @@ -123,60 +72,63 @@ restore_quantized_training(model, state) model.load_state_dict(state) ``` -Use the same architecture and intended dtype. This restores model state; create -and restore optimizer/scheduler/scaler state in their normal order separately. -The same model supports CUDA inference with `eval()` and `inference_mode()`. -An opt-in [ONNX export path](onnx.md#native-int8-training-checkpoints) captures -the integer forward using a full-FP32 CUDA reference and verifies ONNX Runtime CPU -parity. Target-provider performance remains unverified. Checkpoint averaging, -DDP/FSDP, quantized activation normalization and integer convolution training -are not established for this path. Distributed training and -EMA are rejected by the training entry point. +Use the same architecture and intended dtype. This example restores model weights; +create and restore optimizer/scheduler/scaler state separately in their normal order. +The restored model supports CUDA inference with `eval()` and `inference_mode()`. + +The [ONNX guide](onnx.md#native-int8-training-checkpoints) distinguishes native +integer-forward export from materialization to floating weights for static +calibration. These have different numerical contracts; export success alone does +not establish integer execution or useful performance on the destination provider. ## Model compilation modes -Model compilation accepts `--compile --compile-mode reduce-overhead` (or -`compile=True, compile_mode="reduce-overhead"` in Python). This is opt-in and -independent of optimizer compilation. The benchmark runner records the selected -mode. See [compilation guidance](../dev/README.md#model-compilation) for the other -modes and measurement requirements; selecting a mode does not establish a speedup. +Model and optimizer compilation are independent, opt-in controls: -Embedding publication preserves context side effects across compilation, with -normalized weights beside their Linear consumer. Context remains shared, not -thread/task-local. AMP fusion can change rounding and INT8 activation bins; -eager and compiled trajectories are not promised to be bitwise identical. -Compiler cache keys include backend source and tensor metadata so hidden backward -changes invalidate cached graphs. +| Setting | Role | +| --- | --- | +| `--compile --compile-mode reduce-overhead` | Compile the model; Python equivalent: `compile=True, compile_mode="reduce-overhead"`. Other modes are in the [compilation guide](../dev/README.md#model-compilation). | +| `--compile-optimizer` | Compile updates with tensor learning rates and functional stochastic requantization. Transient floating updates remain. | +| `--compile-optimizer --optimizer-cudagraphs` | Request optimizer graph replay. Scheduler updates, AMP skip decisions and Muon's outer counter remain outside capture. | -## Evidence and remaining work +For custom loops, compile the optimizer after scheduler construction and checkpoint +restoration. When combining a compiled model with optimizer graph replay, call +`torch.compiler.cudagraph_mark_step_begin()` before each training iteration so +backward gradient buffers survive until the optimizer consumes them. `mt_train` +already marks this boundary. See [optimizer graph requirements](../dev/README.md#optimizer-cuda-graphs) +for device, learning-rate precision and optimizer restrictions; floating-parameter +fused-optimizer tests do not qualify INT8 weights. -See [current findings](benchmarks.md), [validation contracts](quantized-training-validation.md) -and [the roadmap](quantization-roadmap.md). These own measured benefits, negative -results and remaining hardware/quality work. Use [the training guide](../dev/benchmarks/training.md) -for reproducible commands. Kernel speedups do not establish real-model convergence -or end-to-end efficiency. +Embedding publication preserves context side effects across compilation, but +context remains shared rather than thread/task-local. AMP fusion can change INT8 +activation bins; compiled/eager trajectories need not be bitwise identical. +Compilation compatibility does not itself establish a speedup: compare startup, +steady-state throughput, memory and held-out quality for the intended workload. + +## Evidence and remaining work -Row-wise normalization tests cover represented-value forward/backward, signed -scales, zero magnitudes, saved storage, masked inference and checkpoint restoration. -Initial zero direction rows are rejected before mutation. Whole-run memory includes -initialization, gradients and optimizer storage as well as compressed parameters. +[Benchmark findings](benchmarks.md) own measured benefits and negative results; +the [validation contract](quantized-training-validation.md) owns required invariants; +the [quantization roadmap](quantization-roadmap.md) owns remaining qualification. +Use the [training benchmark guide](../dev/benchmarks/training.md) for commands. +Local kernel or synthetic-capacity gains do not establish real-model convergence +or end-to-end efficiency on HPC, desktop/Spark or ARM hardware. ## Large-class accumulator bounds -Input-gradient products contract over the output class count. For contractions -above 131,071, the backend now combines bounded INT32 dot products in INT64 before -converting and scaling the result. This prevents finite but saturated gradients -for large vocabularies. Shorter contractions keep the existing tuned kernel. -ONNX export also bounds integer partial products and combines them in INT64. -See the [arithmetic regression and limits](https://github.com/asgersvenning/mini_trainer/blob/f5c69e7cab2bfde8a5467026b293858b93e628f9/docs/archive/benchmark-history.md#long-contraction-int8-accumulator-correctness). -A million-output Linear gradient test does not establish that a full million-class -EfficientNetV2 training configuration fits the available GPU; parameter, -initialization, gradient and optimizer storage still require separate measurement. +Contractions above 131,071 combine bounded INT32 dot products in INT64 before +scaling, preventing saturated input gradients at large output-class counts. ONNX +export also bounds integer partial products. See the +[arithmetic regression](https://github.com/asgersvenning/mini_trainer/blob/f5c69e7cab2bfde8a5467026b293858b93e628f9/docs/archive/benchmark-history.md#long-contraction-int8-accumulator-correctness). +A million-output Linear test does not establish that full million-class training +fits GPU memory; measure initialization, gradients and optimizer storage too. ## Implementation layout -Public APIs remain in `modeling.quantized_training` and `modeling.quantization` -(the separate PTQ/QAT backend). Private native INT8 code lives in -`modeling/_quantized_training/`: tensor dispatch in `__init__.py`, plus `matmul.py`, -`normalization.py`, `update.py` and ONNX translation in `onnx.py`. Keeping the backend -package at its original module path preserves serialized `TrainingWeight` identities. +Public integration is in [modeling/quantized_training.py](../mini_trainer/modeling/quantized_training.py); +`modeling.quantization` is the separate x86 PTQ/QAT backend. Private native code is +in [modeling/_quantized_training/](../mini_trainer/modeling/_quantized_training/): +tensor dispatch in `__init__.py`, with matrix, normalization, update and ONNX +operators in separate modules. Preserve this package path: checkpoints serialize +its `TrainingWeight` identity. Kernel eligibility, tuning and compiler-cache +invalidation details belong beside those implementations. diff --git a/docs/roadmap.md b/docs/roadmap.md index 6ca554b..88c1c16 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -1,266 +1,175 @@ -# Repository strengthening roadmap +# Repository roadmap -The active quantization feature branch has a separate -[execution roadmap](quantization-roadmap.md) covering measured bottlenecks, -target-machine dependencies, integration gates and deferred work. +Updated 26 September 2026. This is the cross-campaign priority map; specialist +pages own procedures and evidence. Delivered work is context, not a new checklist. -This is the implementation order. Each increment should leave the existing default -training and prediction interfaces working and include its own validation evidence. -Items below are planned unless explicitly marked delivered. +## Current state and next delivery -## 1. Agent guidance and development safeguards +| Area | Delivered | Remaining boundary | +| --- | --- | --- | +| MAMBO V3 | PyTorch/ONNX adapter, presets/custom lists, embeddings, TTA, Flemming/in-domain comparisons and laptop/B200 timings; installed release candidate qualified. | Renamed training distribution, independent publication Actions and a small Space demo are prepared; installed-candidate records gate publication. Account setup, publication and live endpoint checks remain owner tasks. See [final qualification](../dev/releases/mambo_v3/final-qualification.md) and [publication handoff](../dev/releases/mambo_v3/publication.md). Do not restart completed release experiments. | +| Training | Four-GPU UCloud production run completed; loader, optimizer-step and checkpoint safeguards implemented. | Before another production run, deliver the recovery/evaluation workflow below. | +| Quantization | Merged opt-in native CUDA INT8 Linear training, x86 PTQ/QAT, checkpoint/export tools. | Useful target-machine trade-offs remain unqualified; [specialist roadmap](quantization-roadmap.md). | +| Generic export | `mt_export`, manifests and CPU float32 ONNX qualification across representative heads/backbones. | Broader backend qualification and generic Hugging Face bundle integration; MAMBO packaging does not establish either for every model. | +| Portable viewer | Existing feature-branch implementation and published inspection candidate. | Reconcile review/integration state and complete physical-device acceptance; see below. | -Delivered in the initial increment: +For the **next training campaign**, prioritize durable stage state and recovery, +prepare evaluation/export before allocating GPUs, and qualify storage separately +from compute. The [training post-mortem](training-workflow-postmortem.md) explains +why. Use normal CLIs, preserve operator overrides, figures and W&B. These workflow +improvements remain planned; another broad optimization matrix is not a prerequisite. -- Root `AGENTS.md` with repository context, compatibility boundaries, environment - handling, and validation requirements. -- Shared `dev/check.sh` commands for local checks and CI, including import contracts. -- Explicit no-sync validation after CI selects and installs CPU dependencies. -- Contributor documentation explaining CPU, GPU, slow-backbone, and sandbox limits. +The following order governs general development. Finish bounded increments with +observable compatibility checks rather than starting every listed campaign. -Delivered in the validation increment: +## 1. Agent guidance and development safeguards -- Consolidated `.agents/rules/` references and a focused repository maintenance skill. -- Minimal installed-wheel checks covering imports, CLI help, packaged resources, and - image-folder training/reload/prediction outside the source tree. -- Tracked `uv.lock`, locked regular CI, and a separate scheduled/manual workflow for - latest-compatible dependency resolution. Both cover Python 3.12, 3.13, and 3.14. +Delivered: shared static/runtime checks, import contracts, installed-wheel smoke +checks, locked CI and a separate latest-compatible dependency matrix for Python +3.12–3.14. Commands and limitations belong in the [development guide](../dev/README.md); +agent rules belong in [AGENTS.md](../AGENTS.md). -Acceptance: a fresh checkout has one documented path to validation; architecture -checks do not initialize CUDA; local and CI commands match; missing optional -integrations do not prevent core imports or CLI help. +Remaining: verify required-check behavior on the first hosted agent-only PR under +actual branch protection. Preserve one validation entry point, static architecture +checks that do not initialize CUDA, and minimal installed-package coverage. ## 2. Behavior-preserving simplification -Preparation delivered: checkpoint contract tests for live/reloaded prediction equality, -state restoration, and deterministic CPU continuation with the original epoch budget, -fixed data order, and stochastic transforms disabled. EMA restoration is tested separately. -Active AMP, GPU execution, and arbitrary RNG/sampler continuation are not covered. - -Known failure discovered by this coverage: full EMA continuation fails after evaluation -populates `Classifier._linear_weight` and `_linear_bias` caches. These nonpersistent -buffers can have different shapes on the EMA and training models, breaking the next -averaging update. A strict expected-failure test records the problem. EMA is temporarily nonfunctional -and unsupported, with a runtime warning when enabled. Repair is explicitly deferred; -leave it disabled and exclude it from current feature comparisons. -The validation increment changed no training behavior. - -Loader increment delivered: shared resize validation and worker-selection helpers, -removal of an unreachable label-conversion branch and obsolete resampling comments, -and regression coverage for shapes, labels, sampling, subsampling, and worker settings. -Resize tuple ordering and existing error messages are preserved. - -The accompanying worker-selection fix uses process CPU availability and affinity -instead of the whole node's CPU count when available. Existing training/inference -caps and headroom are retained, as are explicit counts and the CUDA-cache override. -RAM-cache preloading uses the same CPU detection and now always selects at least one -thread, including on one-CPU systems. This does not account for every CPU quota or -competing job; shared unrestricted allocations still need explicit worker settings. - -Next, review the orchestration boundaries in `builders.py`, `train.py`, and `trainer.py` -only where an extraction has a concrete benefit. Review checkpoint and metadata -boundaries separately. - -Before each extraction, cover observable behavior: class order, labels, shapes, -dtypes, device placement, sampling, errors, return values, and public imports. -Use synthetic training/resume and CPU DDP integration tests for cross-cutting changes. -Do not combine cleanup with changed defaults, new dependencies, or numerical fixes. - -Acceptance: focused regression tests and existing integration tests pass; import -contracts remain intact; existing configurations and checkpoints remain usable. +Checkpoint tests cover live/reloaded predictions, state restoration and controlled +CPU continuation with fixed data order and the original epoch budget. They do not +establish arbitrary RNG/sampler or active AMP continuation. Loader coverage includes +sampling, class/label order, caching, worker budgets and transfer ownership. -## 3. ONNX export and Hugging Face integration +**EMA remains unsupported.** Evaluation populates classifier caches whose shapes +can differ between the training and EMA models, breaking averaging. Keep the strict +expected-failure regression and leave EMA disabled until a separate repair is +qualified; do not infer support from checkpoint restoration alone. -Delivered: a generic export API and `mt_export` CLI with optional dependencies. -The actual evaluation forward is exported without architecture/head allowlists, -including structured and hierarchical outputs, masks, priors and normalized heads. -Dynamic batch parity, caller-state preservation, artifact manifests and standalone -ONNX Runtime inference are checked. See [the export guide](onnx.md) for the input, -preprocessing and score contract, representative coverage and operator limitations. +Extract orchestration from builders/training only when it removes an identified +responsibility conflict or duplication. Preserve public imports, defaults, outputs, +checkpoint formats and errors; separate behavior changes from cleanup. Use existing +CPU training/DDP and checkpoint contracts for cross-cutting changes. -A separate eager-inference fix uses the backbone embedding width before an explicit -hidden layer; a core regression covers vector and singleton-spatial embeddings. +## 3. ONNX export and Hugging Face integration -Acceptance evidence covers CPU float32 on representative offline backbones and all -head families, not every catalog variant or GPU/quantized provider. Preprocessing -remains external and requires a caller-supplied deployment recipe. +The [export guide](onnx.md) owns preprocessing, score and operator contracts. +Current generic evidence covers CPU float32, dynamic batches, head families, +masks/priors and caller-state preservation on representative offline backbones. +GPU/quantized providers and the full architecture catalog need their own evidence. -Then add local Hugging Face bundle preparation: weights/export, manifest, model card, -evaluation summary, and an inference example. Treat Hub artifact hosting and a live -inference service as separate deliverables. Validate a local bundle before adding -explicit upload commands or a serving deployment. +Next: prepare a generic local bundle containing weights/export, preprocessing, +class mappings, immutable provenance, model card, evaluation and an inference +example. Reuse the existing manifest/export boundaries and lessons from MAMBO. +Validate the installed bundle before adding upload commands. Artifact hosting and +a live inference service are separate deliverables; publication is not automatic. ## 4. Training efficiency and augmentation -Delivered: opt-in native CUDA INT8 Linear training, x86 PTQ/QAT inference, -checkpoint/export integration, bounded preparation/normalization storage, and -allocation-aware loader hardening. Defaults remain floating point. EMA is deferred; -native QT DDP/FSDP is unsupported. +Follow the [quantization roadmap](quantization-roadmap.md) for targeted performance +work. Floating-point defaults remain; native QT DDP/FSDP and deeper integer +convolution training are unsupported. Local memory savings do not establish useful +HPC, desktop/Spark or ARM throughput or convergence. -The [quantization roadmap](quantization-roadmap.md) owns remaining performance, -quality and deployment work. [Measured findings](benchmarks.md) distinguish local -memory savings from mixed speed/convergence results; HPC, desktop/Spark and ARM -qualification remain open. AMP, fake quantization and CPU smoke tests do not -complete the deeper quantization objective. +For the next production run, implement the post-mortem's bounded workflow slice: +versioned stage inputs, durable completion/recovery, preflighted evaluation/export, +and distinct compute/storage qualification. Preserve supplied splits and taxonomy. +Demonstrate interruption/resumption without silently repeating completed work. -After quantization, evaluate a task-aware augmentation recipe against the legacy -pipeline. Preserve label semantics, input dtype, optimizer/accumulation/resume -behavior and existing builder extension points. Add loading controls only when -whole-training measurements demonstrate a benefit. - -Acceptance: opt-in supported recipes, reproducible paired quality/resource evidence, -and unchanged default behavior. Use [training feature validation](training-feature-validation.md) -for the deferred optimizer, loss and augmentation comparisons. +Then use the [training feature protocol](training-feature-validation.md) for paired +optimizer, loss and augmentation comparisons. Preserve accumulation, AMP skip, +scheduler and resume semantics. Add loading controls only for an identified +end-to-end bottleneck, not to expand the configuration surface. ### Optional dataset preparation for scalable loading -Target: remove repeated small-file access bottlenecks on shared storage through an -optional preprocessing command that prepares an indexed, sharded dataset for the -existing training and prediction loaders. This is an efficiency representation of -already-supported inputs, not a requirement to migrate source datasets or adopt a -new training API. Keep the public design independent of a particular provider. - -- Reuse the current source/metadata adapters. Cover every currently supported - input, flat and hierarchical labels, multilabel targets, supplied splits, - class ordering and sample identity. Retain lazy loading, inference and supported - single-process/DDP behavior. Define a compatibility matrix before implementation; - do not silently drop cases that are inconvenient for a shard backend. -- Preserve original encoded image bytes by default and apply the existing decoder, - resize, transforms and hooks at loading time. Do not bake stochastic augmentation - into prepared data. Any later materialized-preprocessing option must be explicit, - versioned and checked against the requested runtime preprocessing. -- Store a versioned manifest with source provenance, sample-to-shard index, labels, - splits, class mappings and integrity information. Support bounded, resumable - preparation with atomic publication of completed artifacts and explicit errors - for missing, changed or corrupt samples; never silently skip them. -- Evaluate indexed uncompressed TAR shards before inventing a container format. - Preserve current sampler order and epoch coverage in the first implementation. - Treat locality-aware or streaming shuffles as separate opt-in behavior changes, - with explicit DDP partitioning, equal-step and checkpoint/resume contracts. -- Allow direct reads of prepared shards and optional staging to verified node-local - storage. Share a byte-bounded cache across ranks/workers on each node, coordinate - downloads, protect in-use shards and publish verified cache entries atomically. - Measure cache churn under the actual sampler; packing files alone does not - guarantee efficient random access or eliminate cold-read latency. -- Keep implementation within the existing metadata/reader boundaries, using a - focused preparation/storage module where needed. Expose it through the normal - CLI and Python configuration paths, keep new dependencies optional, and preserve - the original uncached path and defaults. - -Deliver in bounded increments: compatibility fixtures and a preparation/loader -round trip; indexed shards; optional shared local staging/cache. A separate small -loader improvement may add bounded concurrent encoded-byte reads within each -batch, preserving sample order and hook execution without multiplying process-local -metadata. Benchmark that independently of changing storage representation. - -Acceptance: byte-identical decoded inputs for the default representation, identical -labels/splits/class ordering and sampler coverage, supported training/prediction and -DDP restoration checks, corruption/interrupted-preparation recovery, and bounded -memory/disk use. Compare first-pass and repeated-pass end-to-end throughput on a -representative working set, including conversion/staging time, validation and -figures. Report the number of epochs needed to amortize preparation; a warmed tiny -subset is insufficient evidence. Implementation and GPU qualification remain open. +Measure bounded concurrent reads/staging on a representative shared-storage working +set before building shards. Small warm subsets do not predict full-dataset IO. +If preparation is justified, use the existing metadata/reader boundaries and +start with indexed uncompressed TAR rather than a new container format. + +Required contract: preserve encoded bytes, sample identity, supplied splits, +class ordering, multilabel/hierarchical targets and current sampler/DDP coverage. +Apply stochastic transforms at runtime. Use versioned provenance and integrity, +bounded resumable preparation, atomic completion and explicit corruption errors. +Local staging/cache must coordinate ranks, bound disk/memory and protect active +reads. Locality-aware shuffle is a separate behavior change. + +Deliver compatibility fixtures and a round trip, then indexed shards, then optional +shared staging. Compare cold and warm end-to-end training including preparation, +validation and figures; report amortization in epochs. Keep original inputs and +public APIs usable. This remains planned, not an implemented storage backend. ## 5. mini_metrics and continuous model evaluation -Planned target: economical continuous benchmarks with a GitHub audit dashboard. -Connect hosted CPU checks and small, on-demand GPU runs to durable report history -through an independent publisher. Use fixed representative subsets of existing -datasets, preserve supplied splits, and compare baseline/candidate under matching -hardware and workload conditions. Large distributed qualification and production -training remain separately triggered activities, outside the continuous schedule. - -Keep allocation credentials in a trusted controller isolated from candidate code, -pull requests and report publishing. Restrict profiles, revisions, dataset access, -concurrency and allocation duration; enforce a persistent spending budget, reconcile -ambiguous submissions before retrying, and disable automatic time extension. -Provider/account configuration and infrastructure review details remain local. - -Acceptance: dry-run and mocked lifecycle tests cover interruption, duplicate -submission, budget exhaustion and credential isolation before a capped live trial. -Then demonstrate cancellation/cleanup and auditable success, failure and publishing -retry records before enabling a schedule. Missing runs must remain visible; partial -GPU allocations must not imply full-device or distributed performance qualification. -Build on the existing [reporting integration](../dev/benchmarks/reporting.md). - -Document measured effects of MuonAuxAdamW versus AdamW/SGD, `normalized`, -EMLACrossEntropy, class-weight distribution regularization, automatic label smoothing, -and hierarchical versus flat classifiers. Use the same datasets/splits and paired -seeds; retain negative and null results. See the [comparison protocol](training-feature-validation.md). -Optimizer step tracking for AdamW/SGD is now fixed, including native fused AMP skips. -CPU/CUDA regressions preserve scheduler/EMA gating and batch-based EMA indices; -checkpoint continuation is covered for MuonAuxAdamW, AdamW and SGD. Comparative -quality experiments remain planned; EMA itself remains unsupported. - - -Use `publication/experiments/statistics/boot_metrics.py` and prediction CSV output as -the current integration boundary. The adjacent `../mini_metrics` checkout currently -declares Python >=3.13 while mini_trainer supports >=3.12. Resolve this with a separate -evaluation environment or a verified compatible release before adding an extra; -never rely on a sibling checkout being present in installations. - -Define and test the prediction/evaluation contract: sample identity, ground truth, -class order, score meaning, confidence thresholds, missing classes, and hierarchical -labels. Verify installed mini_metrics APIs before writing an adapter. Keep evaluation -optional and preserve existing prediction formats and research scripts. - -Deferred: consolidate flat and hierarchical inference behind one public CLI. -`mt_hpredict` already shares the generic prediction CLI and has an explicit flat -head route; use that existing functionality while training qualification proceeds. -Before refactoring, assess whether stored head/taxonomy metadata can reliably -select the builder and result collector, or whether weights need additional -versioned configuration. Preserve explicit CLI overrides, legacy checkpoints, -existing entry points, class ordering and prediction/mini_metrics output contracts. -Acceptance: installed CLI tests cover flat and hierarchical weights, including -older artifacts with missing metadata and actionable handling of ambiguous cases. -This is not a prerequisite for DDP qualification or the production training run. - -Build the model zoo around versioned manifests linking immutable weights, configuration, -preprocessing, dataset/split identity, code/dependency versions, and evaluation results. -Use fixed held-out data and seeds; distinguish threshold selection from test evaluation. -Add tiny fixture-based contract checks to pull requests, then explicit or scheduled -evaluation of registered artifacts with retained reports and declared regression limits. - -Acceptance: a model artifact can be evaluated reproducibly in a clean environment, -results trace back to exact inputs, and metric changes cannot silently rewrite baselines. +MAMBO has retained quality/threshold/support evidence through `mini_metrics`; +[release evidence policy](../dev/releases/mambo_v3/evidence-policy.md) defines that +campaign's conventions. General training-feature comparisons and continuous GPU +allocation remain separate work. + +Build on [existing benchmark reporting](../dev/benchmarks/reporting.md): fixed +representative subsets, supplied splits, paired seeds and matching measurement +scopes. Keep all metrics and negative results. AdamW/SGD step tracking and AMP-skip +scheduler/EMA gating have regression coverage; comparative quality is still planned +and EMA itself is unsupported. + +Before scheduling on-demand GPUs, qualify an isolated trusted controller with +restricted revisions/profiles, credentials unavailable to candidate code, persistent +spending limits, bounded concurrency/duration and reconciliation before retries. +Mock interruption, duplicate submission and budget exhaustion, then run a capped +live success/failure/cancellation and publishing retry. Missing runs must stay +visible. No automatic allocation extension or full-device claims from MIG results. + +Keep evaluation optional. The recorded `mini_metrics` integration requires Python +3.13 while the trainer supports 3.12; select a compatible evaluation environment +rather than depending on the sibling checkout. Preserve prediction CSV/sample IDs, +truth, class ordering, score/threshold meaning and missing-ancestor semantics. +`publication/experiments/statistics/boot_metrics.py` remains a research integration +entry point. Model-zoo manifests should bind immutable weights, preprocessing, +data/split identity, dependencies and results so new protocols cannot silently +rewrite old baselines. + +Deferred CLI consolidation: `mt_hpredict` already shares the generic prediction +CLI and supports flat heads. Before replacing entry points, qualify metadata-based +builder selection, older weights with missing metadata, explicit overrides and +prediction/metric output compatibility. This is not a production-run prerequisite. ## 6. Additional dataset formats (low priority) -Future ingestion support must cover both training and inference through shared -source adapters. Keep discovery (sample identity, paths, supplied labels and -splits) separate from training partitioning and model-vocabulary indexing. Start -with a compatibility matrix of existing formats and flat/hierarchical/unlabelled -inputs; add formats incrementally without duplicating prediction-only readers. - -Follow-ups identified during the bounded `auto_find_images` review: - -- Clarify `create_taxonomy` / `select_levels`: an integer currently means an - inclusive deepest-rank index, whereas callers such as `create_metadata` pass - `len(cls2idx)` as a count. The inference caller now uses explicit rank indices. - Audit remaining callers before changing the shared signature; test actual rank - selection rather than mocking the whole taxonomy adapter. Separate API/cache - retrieval failures from local rank-selection and mapping errors in diagnostics. - -- Define an explicit input-layout/split policy for ambiguous folder layouts and - reconcile prediction's separate `data_index` and source-selection paths. -- Specify taxonomy provenance and missing-ancestor handling independently of - model vocabulary. Preserve valid species ground truth without treating unknown - ancestors as real unseen classes; cover the collector/mini_metrics contract - before changing the existing GBIF fallback. -- Audit image probing on read-only datasets: `is_image` currently opens files in - `r+b` mode and can silently exclude readable images without write permission. - -The focused discovery fix removes training metadata construction and vocabulary -filtering from folder enumeration; these broader policies remain deferred. - -Add formats through existing metadata and reader boundaries after the higher-priority -interfaces stabilize. Require format-independent class ordering, split handling, -multilabel behavior, lazy loading, and useful errors. Keep format dependencies optional. - -Acceptance: tiny fixtures exercise each new format through training and prediction -without changing existing format detection or defaults. - -Follow-up from candidate-filter inference validation: `classification_module` -caches an empty attribute name when passed a bare classifier head, causing a -subsequent lookup to fail. Normal built backbone models are unaffected. Cover -bare-head lookup separately rather than expanding the class-list CLI change. +Use shared train/inference source adapters and keep sample discovery independent +of model vocabulary and training partitioning. Require tiny round-trip fixtures +for flat/hierarchical/multilabel inputs, lazy loading and supplied splits before +adding a format. Keep format dependencies optional. + +Carry forward these concrete findings; verify their current callers before fixes: + +- `create_taxonomy` / `select_levels` use an inclusive deepest-rank index, while + some callers pass a level count. Audit remaining callers and test actual ranks. +- Ambiguous folder layouts need explicit source/split policy; reconcile prediction + `data_index` and source selection without restoring vocabulary-filtered discovery. +- Missing ancestors need explicit provenance/metric handling; retain valid species + truth without inventing unseen ancestor classes or masking retrieval failures. +- `is_image` opens in `r+b`, potentially excluding readable read-only datasets. +- Bare-head `classification_module` can cache an empty attribute name and fail on + subsequent lookup; ordinary built backbones are unaffected. + +These are recorded follow-ups, not fixes delivered by documentation cleanup. + +## Deferred portable prototype viewer completion + +Resume the existing `feature/prototype-browser-inference` implementation rather +than rebuilding it. The recorded candidate is `global-lepi-viewer-20260915-rc2`; +[plan at b174426](https://github.com/asgersvenning/mini_trainer/blob/b174426/docs/prototype-explorer-implementation.md) +and its branch's `dev/prototype_space/portable-qualification.md` retain acceptance +criteria. Reconcile current PR #3/branch state before resuming; historical publication +does not establish present integration status. + +Remaining acceptance: human desktop/mobile review and physical-phone pinch zoom, +camera capture, EXIF, large images and actionable format errors; resolve findings +and validate integration against current master. Preserve GBIF settings/names/photos +and attribution, Explore/Predict/Settings organization, class identity/order, saved +views and fixed-map t-SNE placement. Keep static hosting independent of a Python +service. Publish a new inspection candidate only if review requires changes. + +The [prototype-coordinate study](prototype-coordinate-study.md) is separate +research evidence; its conclusions do not authorize new geometry or changes to +training/prediction semantics during viewer completion. diff --git a/docs/training-feature-validation.md b/docs/training-feature-validation.md index 762fa2e..11e6179 100644 --- a/docs/training-feature-validation.md +++ b/docs/training-feature-validation.md @@ -1,45 +1,16 @@ -# Training features: implementation and comparison plan +# Training feature comparison plan -This is planned work. Existing CPU/GPU benchmark results establish a baseline; -they do not measure the benefit of the features below. EMA is temporarily -nonfunctional and excluded from these experiments; repair is deferred. +This page covers **unmeasured feature comparisons**, not implementation status. +The [repository roadmap](roadmap.md) sets priorities; the +[quantization roadmap](quantization-roadmap.md), [validation contract](quantized-training-validation.md) +and [measured findings](benchmarks.md) own native QT/PTQ/QAT work. Those paths are +implemented but have different numerical and resource contracts; do not repeat +their implementation plans here. EMA remains unsupported and excluded. -## Actual quantized training is the primary implementation target - -The priority is now QT that lowers training memory and increases speed, together -with faster data loading for floating-point and quantized workloads. PTQ/QAT do -not satisfy that objective. See the [QT and loader probes](../dev/benchmarks/training.md#capacity-and-bottleneck-probes); -an initial [model/trainer integration](quantized-training.md) is available, while -broader optimizer/resume coverage, convergence and end-to-end measurement remain -requirements, not optional follow-ups. - -The initial [INT8 PTQ/QAT Python backend](quantization.md) is implemented on the -`quant` branch. Its CPU tests establish a training-to-integer-inference path; -user-facing checkpoint integration, other backends and quality studies remain open. - -Deliver two distinct paths through the existing builders, checkpoint and export -interfaces, with optional dependencies: - -- Quantization-aware training: specify simulated weight/activation bit widths, - scales and observer behavior, then convert and evaluate the resulting inference - artifact. Fake quantization during training is not itself proof of faster or - smaller inference. -- Post-training quantization: compare calibrated integer/low-bit artifacts against - the same floating-point checkpoint. Calibration uses a recorded subset of - training data, never held-out test images. - -Start with an explicit, validated precision/backend combination before expanding -to lower bit widths. Record weight-only versus weight-and-activation quantization, -which operators remain floating point, model size, peak memory, latency/throughput, -and per-class/per-level quality. Validate normalized/parametrized heads, functional -linear operations, masks and hierarchical outputs instead of limiting export to -one backbone. Verify save/reload, optimizer/scheduler/AMP state during training, -and quantized artifact loading in the intended standalone runtime. - -Hardware-specific reduced-precision compute, including FP8 where supported, is a -separate profile. Existing float16/bfloat16 autocast tests do not establish deeper -quantization. Declare unsupported backends and models; prohibit silent fallback -that mislabels ordinary floating-point execution as quantized. +Select a bounded comparison only when it answers the next decision. Existing +CPU/GPU baselines do not establish benefits for the features below. New precision +formats or backends require their own operator-placement, checkpoint and +quality/resource evidence; AMP checks do not establish deeper quantization. ## Augmentation defaults @@ -89,6 +60,6 @@ optional integration. Publish individual runs and paired differences with uncert distinguish variation across training seeds from uncertainty due to finite test data. Use the existing versioned report/provenance artifacts and visible repository run -summaries. Retain failures and negative/null effects. Add durable historical hosting -before the current artifact retention expires. Do not combine different hardware, +summaries. Retain failures and negative/null effects. The [reporting guide](../dev/benchmarks/reporting.md) distinguishes existing +artifact retention from the optional publisher's still-unverified live activation. Do not combine different hardware, precision, dataset versions or tuning budgets into one apparent improvement trend. diff --git a/docs/training-workflow-postmortem.md b/docs/training-workflow-postmortem.md new file mode 100644 index 0000000..2bcb84f --- /dev/null +++ b/docs/training-workflow-postmortem.md @@ -0,0 +1,128 @@ +# Production training: evidence and next-run priorities + +Campaign: 10–11 September 2026. This is a historical assessment and proposed +workflow work, not implementation authorization. The quantization code is now +merged. Later MAMBO deployment qualification is recorded in the +[release handoff](../dev/releases/mambo_v3/final-qualification.md); its quality, +regional-list and threshold evidence supersedes the preliminary deployment +questions raised during training. + +## What completed + +| Evidence | Result and limit | +| --- | --- | +| Production recipe | EfficientNetV2-S, normalized hierarchical head, input 384; four full B200s, batch 256/rank, FP16 AMP, model compilation and 32 loader workers/rank. Optimizer compilation, explicit CUDA prefetch, INT8 training and EMA were off. | +| Training | 30 epochs in 17:34:23; training timer 16:27:22, evaluation timer 43:33; best epoch reported as 30. Timers omit some logging/teardown. | +| Quality | Validation species/genus/family micro accuracy 94.2353% / 97.6693% / 99.5047%, finite final losses. Preliminary test results agreed closely; expert data showed substantial domain/vocabulary shift. Use the [current deployment evidence](mambo-deployment-evidence.md) for comparisons. | +| Resume | Four ranks agreed on checkpoint hash, start epoch 3 and restoration of model/optimizer/scheduler/scaler. This is controlled restoration, not bit-exact arbitrary stochastic continuation. | +| Export | FP32 ONNX synthetic batches 1/2/4 passed at rtol/atol 1e-4, maximum absolute error 3.84e-5. ONNX PTQ used 128 training images and Percentile 99.9; graph/finite-output smoke passed, without establishing integer placement or quality. No quantized `.pt` was created. | +| Diagnostics/retention | Figures and W&B ran throughout production; 23.71 GiB before ZIP, reported ZIP integrity and archive checksum passed. | + +Source: operator-provided campaign logs, tables and command output, not an +independent archive replay. Do not infer exact training source or model identity +from branch/version names; the later model card records remaining provenance gaps. +Successful floating training did **not** establish the original fully quantized +training objective or a controlled regression comparison against master. + +The source splits contained 5,063,857 training, 633,224 validation and 632,913 test +images. Training count × 30 / training timer implies roughly 2,564 images/s +aggregate (641/rank), consistent with observed ~650/rank. Budget validation and +diagnostics separately rather than using the total source-row count as epoch size. + +## Lessons that change the next run + +**Prepare evaluation and recovery before allocation.** Training started about +97 minutes after allocation and finished at 12:35 the next day. Test inference, +metrics and archive verification finished at 16:11, 16:44 and 17:13 respectively, +against a 17:24 expiry. These timestamps show critical-path costs, not their causes. + +Wrong working directories, missing YAML, torchrun parsing and mixed checkout/ +package/PYTHONPATH identities caused interventions. Partial directories complicated +retries; one stage saved weights and finite metrics but timed out afterward. +A checkpoint therefore cannot stand in for completion of logging, export or teardown. + +**Hide storage latency with bounded concurrency.** Cold workers waited in `D` +state / `folio_wait_bit_common`; a 211-second window spent 146–150 seconds waiting +for input. Initial test inference reached only 69/2,473 batches after 43 minutes. +Repeated expert-subset reads fell from hundreds of seconds to below one second on +WEKA. A disjoint-sample sweep favored 512 readers (~117 images/s median confirmation); +a larger-file workload provisionally favored 64. These support aggressive latency +hiding, not universal defaults or a filesystem-internal diagnosis. + +Production stabilized near 650 training and 2,000–2,500 evaluation images/s/GPU +with 32 loader workers/rank. After staging, expert inference finished in 2:49 and +full test inference in 30:02. Allocate encoded-byte readers, decode processes and +CUDA transfer separately. Report errors, bytes/file sizes, sample coverage and +startup/drain costs. Disjoint paths do not guarantee cold shared-cache data; never +clear shared caches to manufacture a benchmark. + +**Start from the qualified floating baseline.** Four-GPU warmed qualification: + +| Batch/rank | Aggregate images/s | Peak allocated bytes (reported maximum) | +| --- | ---: | ---: | +| 32 | 1,059.648 | 8,332,350,464 | +| 64 | 1,741.601 | 15,640,267,776 | +| 128 | 2,272.305 | 30,251,580,416 | +| 256 | 2,517.928 | 59,508,456,960 | + +128 → 256 gained ~10.8% throughput for nearly twice the allocation. Larger batches +also change update/schedule behavior; spare memory alone is not a convergence case. +Earlier single-GPU model compilation reduced later-epoch time/allocation by roughly +a third. Optimizer compilation added startup without steady-state gain, explicit +prefetch had no convincing gain, and combined INT8 runs timed out. Revisit these +negative results only for a changed mechanism or target. FP16 was tested, not +established as superior to all BF16 recipes. + +**Include diagnostics and failure handling in qualification.** At 12,632 species, +confusion generation took ~8–13 s, warmed dendrogram rendering ~12–13 s, and first +label resolution roughly a minute in one run. Include full-head figures, W&B, +validation and save/reload in the topology smoke; storage calibration is separate. +Keep whole-matrix inspection and hierarchy-level selection. + +Early loss NaNs occurred in both controls and optional-feature trials; the final +production audit was finite. This weakens feature-specific attribution without +proving harmlessness. Capture the first occurrence's sample, phase, dtype and +feature/finiteness state for bounded replay. Compiler specialization, hierarchy +scalar extraction and DDP stride warnings justify changes when traces establish +repeated cost. EMA repair remains separate. + +## Next-run minimum (planned) + +Extend the existing `dev/ucloud` helpers and normal CLIs; use a small stage manifest, +not another workflow engine. This work is still planned: + +1. **Durable recovery:** record absolute commands, interpreter/package/harness + identities, input hashes, phase times/logs, exit cause and atomic completion + records. Keep plans/status inspectable and logs durable across terminal loss. + Reuse completed stages only when identities match. Preserve partial evidence, + explicit retry/resume, operator batch/worker overrides and checkpoint stop/ + continue controls. Do not promise arbitrary-batch exact resume without RNG and + sampler state. +2. **Preallocated preparation:** run a tiny installed train → predict → mini_metrics + → export → package fixture before renting GPUs. Keep authentication interactive. + Inference discovery must preserve all truth regardless of vocabulary or training + partition; distinguish taxonomy transport failures from mapping errors. Derive + configuration from weights with explicit legacy overrides. Separate deployment + assets, including ONNX external tensors, from evidence and optional resume history. +3. **Bounded qualification:** separate startup, warm training, first-pass IO, + validation/figures and teardown. Use one relevant topology smoke and storage + calibration; preserve the learning-rate schedule and distinguish allocation + deadline, stage limits and cleanup reserve. Overlap independent work within + resource budgets. + +Acceptance must exercise interruption after preparation, failed child exit, timeout +after saving, logger teardown failure and reuse of completed stages. Track operator +interventions, time to useful work, evaluation turnaround and repeated/failed work. +Use tiny fixtures for workflow contracts and target runs for hardware claims. + +Improve read/staging calibration before building the +[optional prepared dataset](roadmap.md#optional-dataset-preparation-for-scalable-loading). +Include preparation cost and expected reuse; preserve encoded bytes, labels, +splits/order and failures. PTQ/native integer and target-performance work belongs +in the [quantization roadmap](quantization-roadmap.md). + +The campaign-specific staging/evaluation launchers remain in +[Git at 852bf71](https://github.com/asgersvenning/mini_trainer/tree/852bf712e85b8d1a6b9c9c6d31b3b5d807904303/dev/ucloud). +They used a source overlay pinned to `0c572ca` and job-specific `/work` paths. +Use maintained CLIs for new work; retiring those launchers does not invalidate the +512-reader and RAM-staging evidence above. diff --git a/docs/ucloud-model-release-roadmap.md b/docs/ucloud-model-release-roadmap.md new file mode 100644 index 0000000..b7f5b1d --- /dev/null +++ b/docs/ucloud-model-release-roadmap.md @@ -0,0 +1,80 @@ +# MAMBO V3 release handoff + +Updated 25 September 2026. **Preparation is complete; publication is separate.** +This releases the model trained on UCloud on 10–11 September, without retraining +or quantization. The [freeze record](../dev/releases/mambo_v3/deployment-freeze.md) +owns the release contract and completion map; [final qualification](../dev/releases/mambo_v3/final-qualification.md) +owns candidate hashes, installed checks and remaining provenance limitations. + +## Status and authoritative documents + +| Concern | Maintained record | +| --- | --- | +| Installation, API/CLI, inputs/outputs, defaults and V2 migration | [Deployment README](../deployment/README.md) and [integration reference](mambo-integration.md) | +| Weight identity, original V2 contract and preset reconstruction | [Input audit](../dev/releases/mambo_v3/README.md), inventory and model provenance alongside it | +| Geographic scope and membership rules | [Preset catalogue](model-presets.md); 25 versioned lists, legacy and updated memberships preserved | +| Flemming and complementary in-domain quality | [Flemming evidence](mambo-deployment-evidence.md), [in-domain evidence](mambo-indomain-evidence.md) | +| Laptop and production-like speed | README figures and [HPC evidence](mambo-hpc-evidence.md), with historical/current measurement scopes separate | +| Runtime and artifact readiness | [Installed qualification](../dev/releases/mambo_v3/final-qualification.md) | +| Future model comparability | [Evidence policy](../dev/releases/mambo_v3/evidence-policy.md) | +| Human publication, integrity and rollback | [Publication handoff](../dev/releases/mambo_v3/publication.md) | + +Distribution is `mambo-v3` version `0.3.0`, import `mambo_deploy`. Maintenance +releases retain this model; a future generation uses a separate package. The +standalone API/CLI defaults to global scope and supports PyTorch/standard ONNX, +custom or regional lists, optional embeddings and optional default TTA. Weight +license is CC BY-NC-SA 4.0; adapter code is MIT. No package, successor model asset, +tag or public pointer was published by preparation. + +Remaining actions are the publisher's review and explicit publication steps, +including retrieval checks and rollback readiness. No additional full evaluation, +throughput campaign, quantized artifact or exhaustive hardware matrix is a freeze +prerequisite. Known untested platforms remain disclosed, not silently qualified. + +## Branch and integration policy + +`release/mambo-v3` was created after the minor version bump on master. Direct work +there is restricted to release adapters/assets, presets, packaging, documentation +and release-specific qualification. Shared-core fixes/refactors must originate on +master or a dedicated feature/fix branch, be reviewed/validated there, then merged +and checked for affected combined behavior. This includes existing browser/export +work. Classify by responsibility, not filename; release pressure does not relax +the boundary. Keep unrelated improvements on their own branches. + +## Located production artifacts and existing browser work + +The source production distribution was already published before this consumer +release: [global-lepi-production-release-20260911T150236Z](https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/index.html). +The [pinned inventory](../dev/releases/mambo_v3/inventory.toml) owns file sizes, +URLs and hashes, including PyTorch `best.pt`, standard prediction ONNX, external +tensors and the separate prediction-plus-embedding graph. Experimental PTQ stays +in the historical archive and is excluded from this release. + +The retrieved mappings agree across V2/V3: 12,632 species, 4,476 genera and 104 +families, with unchanged class order and parent maps. The selected checkpoint and +best epoch 30 are verified. Exact training Git revision and original initial-file +hash are unavailable; packaging checkout identity must not be substituted. +See [model provenance](../dev/releases/mambo_v3/MODEL_CARD.md). + +Existing browser work is recorded on `feature/prototype-browser-inference` at +`b174426a22e42618424fcb0345610ede4a415d01`: +[production integration](https://github.com/asgersvenning/mini_trainer/blob/b174426a22e42618424fcb0345610ede4a415d01/docs/production-release-integration.md) +and [qualification](https://github.com/asgersvenning/mini_trainer/blob/b174426a22e42618424fcb0345610ede4a415d01/dev/prototype_space/portable-qualification.md). +The [RC2 browser manifest](https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-viewer-20260915-rc2/browser-model/manifest.json) +identifies the same final checkpoint and embedding graph. Reuse its checked bundle, +external tensors, preprocessing, WASM worker and optional GBIF enrichment rather +than beginning a second browser exporter. + +Existing browser evidence is one real-image fixture, not broad browser/accuracy +qualification: identical-input maximum prediction/embedding errors were ~1.72e-5 / +1.80e-7; end-to-end errors were ~0.00552 / 0.000250 with matching top predictions. +The adapter's EXIF/white-alpha policy differs from the historical core reader, so +the recipe name alone is not a complete input contract. ERDA hosting previously +needed explicit runtime paths and unchanged `.mjs` content served as `.js` because +of MIME/CORS constraints; recheck hosting before new claims. Authoring checksums +do not imply browser validation of every asset fetch. + +The [repository roadmap](roadmap.md#deferred-portable-prototype-viewer-completion) +owns remaining viewer integration and human/physical-device acceptance. Static +browser inference is a useful deployment path, not a promise that every browser, +WebGPU provider or offline configuration is qualified by this release. diff --git a/examples/.gitignore b/examples/.gitignore index 80b7f80..7a25e35 100644 --- a/examples/.gitignore +++ b/examples/.gitignore @@ -17,8 +17,7 @@ !inat2021/construct.py !inat2021.ipynb -!run_notebook.py !resize_image_dir.py !create_combinations.py -!apply_quality_filter.py -!utils.py \ No newline at end of file +!utils.py +!README.md diff --git a/examples/README.md b/examples/README.md new file mode 100644 index 0000000..5b979a9 --- /dev/null +++ b/examples/README.md @@ -0,0 +1,31 @@ +# Examples + +Use the [root installation guide](../README.md) first. Run dataset constructors +from the repository root in the existing environment: + +```sh +.venv/bin/python -m examples.mnist.construct +.venv/bin/python -m examples.blair.construct +``` + +| Example | Purpose | +| --- | --- | +| [MNIST notebook](mnist.ipynb) | Flat classification, a constructed long tail and prediction plots; constructor keeps at most 500 images per digit in each original split. | +| [Blair notebook](blair.ipynb) | Hierarchical specimen classification and visualization; constructor preserves training/testing folders. | +| [Bird dataset constructor](birds/construct.py) | Downloads the published train/valid/test archives through Hugging Face. | +| [iNaturalist constructor](inat2021/construct.py) | Downloads mini/full training and validation data, resolves GBIF taxonomy and writes a data index. | + +Constructors accept `--output_dir` and use a `.complete` marker; without it they +remove partial split directories before rebuilding. Use a dedicated destination. +The iNaturalist destination additionally appends `mini` or `full`. + +Open notebooks with the existing environment's Python kernel, starting in the +repository root or `examples/`. The first cell constructs data from the root, then +sets `examples/` as the working directory. Choose either single-node or Spark +training; those cells retain their CUDA assumptions and are not a fresh training +qualification. Batched Python inference uses checkpoint mappings and actual image +paths, with CPU fallback. Saved plots are historical illustrations, not new results. + +For maintained training/evaluation benchmarks use the +[benchmark workflow](../dev/benchmarks/training.md); for MAMBO model integration, +use the [deployment guide](../deployment/README.md). diff --git a/examples/apply_quality_filter.py b/examples/apply_quality_filter.py deleted file mode 100644 index a24d2a7..0000000 --- a/examples/apply_quality_filter.py +++ /dev/null @@ -1,112 +0,0 @@ -"""Apply quality control model to gbifxdl parquet. -The model has been trained to infer if a given image contains -an image of an adult moth at a good resolution, -or one of a number of other "classes". - -Script included for reference on how quality filtering was done, -but is NOT intended to actually be run. -""" - -# # Create index of retained images from quality control -# Retains images that match the following heuristics: - -# 1) If the inferred quality class is "Valid" or "Dead" **and** the confidence is 50% or higher. -# 2) The actual class must have 50 or more images **after** applying the first heuristic. - -import csv -import os -from collections import Counter -from tempfile import tempdir - -import pyarrow -import pyarrow.compute as cp -import pyarrow.dataset as ds -from pyarrow.parquet import ParquetWriter -from pyremotedata.implicit_mount import IOHandler -from tqdm.auto import tqdm - -src = "quality/global_lepi.csv" -init_class_counts = Counter() -init_selected = [] -non_selected = [] - -with open(src) as f: - lines = f.readlines() - reader = csv.DictReader(lines) - for row in tqdm(reader, total=len(lines) - 1, desc="Selecting from predictions"): - path, pred, conf = row["path"], row["prediction"], row["confidence"] - if pred in ["Valid", "Dead"] and float(conf) >= 0.5: - init_selected.append(path) - init_class_counts.update([path.split("/")[0]]) - else: - non_selected.append(path) - -classes_with_enough_images = set([c for c, n in init_class_counts.items() if n >= 50]) -class_counts = Counter() -selected = [] -for proposed in init_selected: - if (cls := proposed.split("/")[0]) in classes_with_enough_images: - selected.append(proposed) - class_counts.update([cls]) - else: - non_selected.append(proposed) - -summary_str = "\n".join( - f"{lab:<20}: {{:>10}}" for lab in ["Total images", "Passed QC", "Enough per-class", "Removed", "Total classes", "Retained classes"] -).format(len(lines) - 1, len(init_selected), len(selected), len(non_selected), len(init_class_counts), len(class_counts)) -print(summary_str) - -with open("quality/selected_images.txt", "w") as f: - f.writelines(selected) - -with open("quality/non_selected_images.txt", "w") as f: - f.writelines(non_selected) - -# ## Apply selected index to parquet -# *Crucially this is done lazily on disk to avoid OOM on large parquet files!* - -# Original parquet is downloaded from ERDA and updated parquet is uploaded to ERDA if it doesn't exist. - -with IOHandler(user="On0rdRltgS", password="On0rdRltgS") as io: - io.cd("global_lepi") - src = io.pget("0032836-250426092105405_processing_metadata_postprocessed.parquet", tempdir) - if src is None: - raise RuntimeError("Remote parquet not downloaded?") - -dst = os.path.join(tempdir, "0032836-250426092105405_processing_metadata_postprocessed_quality_filtered.parquet") -if os.path.exists(dst): - os.remove(dst) -select_index = "quality/selected_images.txt" - -data = ds.dataset(src, format="parquet") -if not isinstance(data, ds.Dataset): - raise RuntimeError("...") - -with open(select_index) as f: - selected = [line.strip() for line in f.readlines()] - -selected_uuid = set([s.split("/")[1].split(".")[0] for s in selected]) - -scanner = ds.Scanner.from_dataset( - data, filter=cp.is_in(cp.list_element(cp.split_pattern(cp.field("filename"), ".", max_splits=1), 0), pyarrow.array(selected_uuid)) -) - -with ( - ParquetWriter(dst, scanner.dataset_schema, compression="ZSTD") as writer, - tqdm(total=scanner.count_rows(), desc="Writing parquet...") as pbar, -): - for batch in scanner.scan_batches(): - batch = batch.record_batch - writer.write_batch(batch) - pbar.update(batch.num_rows) - -with IOHandler(user="On0rdRltgS", password="On0rdRltgS") as io: - io.cd("global_lepi") - if os.path.basename(dst) not in io.ls(): - io.put(dst) - print("Updated parquet uploaded to ERDA!") - else: - print("Updated parquet already on ERDA!") - -os.remove(dst) -os.remove(src) diff --git a/examples/blair.ipynb b/examples/blair.ipynb index 9f2862e..bc2f165 100644 --- a/examples/blair.ipynb +++ b/examples/blair.ipynb @@ -6,6619 +6,30 @@ "metadata": {}, "source": [ "### Example from \"A gentle introduction to computer vision-based specimen classification in ecological datasets\" by Jarret Blair\n", - "Based on data from: https://github.com/Jarrett-Blair/Intro-to-CV-for-Ecologists/tree/main" + "Based on data from: https://github.com/Jarrett-Blair/Intro-to-CV-for-Ecologists/tree/main", + "\n", + "Saved plots illustrate the example output; they are not current performance benchmarks.\n" ] }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "id": "662b24f3", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "--2026-01-16 19:45:39-- https://github.com/Jarrett-Blair/Intro-to-CV-for-Ecologists/raw/refs/heads/main/Data/Images.zip\n", - "Resolving github.com (github.com)... 140.82.121.3\n", - "Connecting to github.com (github.com)|140.82.121.3|:443... connected.\n", - "HTTP request sent, awaiting response... 302 Found\n", - "Location: https://raw.githubusercontent.com/Jarrett-Blair/Intro-to-CV-for-Ecologists/refs/heads/main/Data/Images.zip [following]\n", - "--2026-01-16 19:45:39-- https://raw.githubusercontent.com/Jarrett-Blair/Intro-to-CV-for-Ecologists/refs/heads/main/Data/Images.zip\n", - "Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.108.133, 185.199.109.133, 185.199.110.133, ...\n", - "Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.108.133|:443... connected.\n", - "HTTP request sent, awaiting response... 200 OK\n", - "Length: 32191966 (31M) [application/zip]\n", - "Saving to: ‘Images.zip’\n", - "\n", - "Images.zip 100%[===================>] 30.70M 55.7MB/s in 0.6s \n", - "\n", - "2026-01-16 19:45:41 (55.7 MB/s) - ‘Images.zip’ saved [32191966/32191966]\n", - "\n", - "Archive: Images.zip\n", - " creating: Images/testing/\n", - " creating: Images/testing/Brachinus alternans/\n", - " inflating: Images/testing/Brachinus alternans/JPGImagesDELA_01_DORSAL.2.jpg \n", - " inflating: Images/testing/Brachinus alternans/JPGImagesDELA_01_VENTRAL.2.jpg \n", - " inflating: Images/testing/Brachinus alternans/JPGImagesDELA_04_DORSAL.3.jpg \n", - " inflating: Images/testing/Brachinus alternans/JPGImagesDELA_04_VENTRAL.3.jpg \n", - " inflating: Images/testing/Brachinus alternans/JPGImagesUKFS_01_DORSAL.8.jpg \n", - " inflating: Images/testing/Brachinus alternans/JPGImagesUKFS_01_VENTRAL.8.jpg \n", - " inflating: Images/testing/Brachinus alternans/JPGImagesUKFS_02_DORSAL.3.jpg \n", - " inflating: Images/testing/Brachinus alternans/JPGImagesUKFS_02_DORSAL.6.jpg \n", - " inflating: Images/testing/Brachinus alternans/JPGImagesUKFS_02_DORSAL.7.jpg \n", - " inflating: Images/testing/Brachinus alternans/JPGImagesUKFS_02_VENTRAL.3.jpg \n", - " inflating: Images/testing/Brachinus alternans/JPGImagesUKFS_02_VENTRAL.6.jpg \n", - " inflating: Images/testing/Brachinus alternans/JPGImagesUKFS_02_VENTRAL.7.jpg \n", - " inflating: Images/testing/Brachinus alternans/JPGImagesUKFS_03_DORSAL.7.jpg \n", - " inflating: Images/testing/Brachinus alternans/JPGImagesUKFS_03_VENTRAL.7.jpg \n", - " inflating: Images/testing/Brachinus alternans/JPGImagesUKFS_04_DORSAL.15.jpg \n", - " inflating: Images/testing/Brachinus alternans/JPGImagesUKFS_04_VENTRAL.15.jpg \n", - " inflating: Images/testing/Brachinus alternans/JPGImagesUKFS_05_DORSAL.4.jpg \n", - " inflating: Images/testing/Brachinus alternans/JPGImagesUKFS_05_VENTRAL.4.jpg \n", - " creating: Images/testing/Brachinus cyanochroaticus/\n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.16.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.18.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.24.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.33.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.43.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.16.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.18.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.24.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.33.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.43.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.19.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.3.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.34.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.6.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.9.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.19.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.3.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.34.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.6.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.9.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_03_DORSAL.10.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_03_DORSAL.2.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_03_DORSAL.3.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_03_DORSAL.4.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_03_VENTRAL.10.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_03_VENTRAL.2.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_03_VENTRAL.3.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_03_VENTRAL.4.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_06_DORSAL.27.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_06_VENTRAL.27.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_07_DORSAL.12.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_07_DORSAL.15.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_07_DORSAL.3.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_07_VENTRAL.12.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_07_VENTRAL.15.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_07_VENTRAL.3.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_09_DORSAL.9.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_09_VENTRAL.9.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_14_DORSAL.5.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_14_VENTRAL.5.jpg \n", - " creating: Images/testing/Calathus advena/\n", - " inflating: Images/testing/Calathus advena/JPGImagesNIWO_01_DORSAL.27.jpg \n", - " inflating: Images/testing/Calathus advena/JPGImagesNIWO_01_DORSAL.30.jpg \n", - " inflating: Images/testing/Calathus advena/JPGImagesNIWO_01_DORSAL.35.jpg \n", - " inflating: Images/testing/Calathus advena/JPGImagesNIWO_01_DORSAL.39.jpg \n", - " inflating: Images/testing/Calathus advena/JPGImagesNIWO_01_VENTRAL.27.jpg \n", - " inflating: Images/testing/Calathus advena/JPGImagesNIWO_01_VENTRAL.30.jpg \n", - " inflating: Images/testing/Calathus advena/JPGImagesNIWO_01_VENTRAL.35.jpg \n", - " inflating: Images/testing/Calathus advena/JPGImagesNIWO_01_VENTRAL.39.jpg \n", - " inflating: Images/testing/Calathus advena/JPGImagesNIWO_03_DORSAL.10.jpg \n", - " inflating: Images/testing/Calathus advena/JPGImagesNIWO_03_DORSAL.16.jpg \n", - " inflating: Images/testing/Calathus advena/JPGImagesNIWO_03_DORSAL.21.jpg \n", - " inflating: Images/testing/Calathus advena/JPGImagesNIWO_03_DORSAL.23.jpg \n", - " inflating: Images/testing/Calathus advena/JPGImagesNIWO_03_DORSAL.3.jpg \n", - " inflating: Images/testing/Calathus advena/JPGImagesNIWO_03_DORSAL.9.jpg \n", - " inflating: Images/testing/Calathus advena/JPGImagesNIWO_03_VENTRAL.10.jpg \n", - " inflating: Images/testing/Calathus advena/JPGImagesNIWO_03_VENTRAL.16.jpg \n", - " inflating: Images/testing/Calathus advena/JPGImagesNIWO_03_VENTRAL.21.jpg \n", - " inflating: Images/testing/Calathus advena/JPGImagesNIWO_03_VENTRAL.23.jpg \n", - " inflating: Images/testing/Calathus advena/JPGImagesNIWO_03_VENTRAL.3.jpg \n", - " inflating: Images/testing/Calathus advena/JPGImagesNIWO_03_VENTRAL.9.jpg \n", - " creating: Images/testing/Carabus maeander maeander/\n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_01_DORSAL.1.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_01_DORSAL.6.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_01_DORSAL.7.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_01_DORSAL.8.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_01_VENTRAL.1.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_01_VENTRAL.6.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_01_VENTRAL.7.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_01_VENTRAL.8.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_04_DORSAL.49.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_04_DORSAL.50.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_04_VENTRAL.49.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_04_VENTRAL.50.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_08_DORSAL.33.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_08_VENTRAL.33.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_10_DORSAL.1.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_10_DORSAL.30.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_10_DORSAL.33.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_10_DORSAL.35.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_10_DORSAL.40.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_10_VENTRAL.1.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_10_VENTRAL.30.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_10_VENTRAL.33.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_10_VENTRAL.35.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_10_VENTRAL.40.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_14_DORSAL.1.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_14_DORSAL.2.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_14_DORSAL.4.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_14_DORSAL.9.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_14_VENTRAL.1.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_14_VENTRAL.2.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_14_VENTRAL.4.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_14_VENTRAL.9.jpg \n", - " creating: Images/testing/Carabus nemoralis nemoralis/\n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_01_DORSAL.10.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_01_DORSAL.9.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_01_VENTRAL.10.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_01_VENTRAL.9.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_02_DORSAL.13.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_02_VENTRAL.13.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_03_DORSAL.14.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_03_DORSAL.3.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_03_DORSAL.5.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_03_DORSAL.6.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_03_VENTRAL.14.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_03_VENTRAL.3.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_03_VENTRAL.5.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_03_VENTRAL.6.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.12.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.13.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.23.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.27.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.3.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.30.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.31.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.32.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.33.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.9.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.12.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.13.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.23.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.27.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.3.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.30.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.31.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.32.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.33.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.9.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_05_DORSAL.14.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_05_DORSAL.15.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_05_VENTRAL.14.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_05_VENTRAL.15.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_03_DORSAL.14.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_03_VENTRAL.14.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_04_DORSAL.41.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_04_VENTRAL.41.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.10.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.22.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.28.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.29.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.10.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.22.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.28.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.29.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.21.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.3.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.30.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.33.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.34.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.42.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.43.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.48.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.5.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.50.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.55.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.56.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.21.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.3.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.30.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.33.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.34.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.42.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.43.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.48.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.5.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.50.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.55.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.56.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.11.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.17.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.19.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.22.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.23.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.28.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.3.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.30.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.31.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.37.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.40.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.45.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.8.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.11.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.17.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.19.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.22.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.23.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.28.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.3.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.30.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.31.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.37.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.40.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.45.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.8.jpg \n", - " creating: Images/testing/Chlaenius aestivus/\n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesBLAN_05_DORSAL.4.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesBLAN_05_DORSAL.5.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesBLAN_05_DORSAL.8.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesBLAN_05_DORSAL.9.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesBLAN_05_VENTRAL.4.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesBLAN_05_VENTRAL.5.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesBLAN_05_VENTRAL.8.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesBLAN_05_VENTRAL.9.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesBLAN_06_DORSAL.11.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesBLAN_06_DORSAL.13.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesBLAN_06_DORSAL.17.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesBLAN_06_DORSAL.31.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesBLAN_06_VENTRAL.11.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesBLAN_06_VENTRAL.13.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesBLAN_06_VENTRAL.17.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesBLAN_06_VENTRAL.31.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesDELA_02_DORSAL.2.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesDELA_02_DORSAL.4.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesDELA_02_VENTRAL.2.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesDELA_02_VENTRAL.4.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSCBI_01_DORSAL.12.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSCBI_01_DORSAL.14.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSCBI_01_DORSAL.6.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSCBI_01_VENTRAL.12.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSCBI_01_VENTRAL.14.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSCBI_01_VENTRAL.6.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSCBI_02_DORSAL.1.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSCBI_02_DORSAL.18.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSCBI_02_DORSAL.7.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSCBI_02_VENTRAL.1.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSCBI_02_VENTRAL.18.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSCBI_02_VENTRAL.7.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSERC_02_DORSAL.18.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSERC_02_DORSAL.24.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSERC_02_DORSAL.28.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSERC_02_VENTRAL.18.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSERC_02_VENTRAL.24.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSERC_02_VENTRAL.28.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSERC_03_DORSAL.3.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSERC_03_VENTRAL.3.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSERC_04_DORSAL.14.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSERC_04_DORSAL.17.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSERC_04_DORSAL.2.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSERC_04_DORSAL.4.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSERC_04_VENTRAL.14.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSERC_04_VENTRAL.17.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSERC_04_VENTRAL.2.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSERC_04_VENTRAL.4.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSERC_06_DORSAL.19.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSERC_06_DORSAL.2.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSERC_06_VENTRAL.19.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSERC_06_VENTRAL.2.jpg \n", - " creating: Images/testing/Cicindela punctulata/\n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.10.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.14.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.18.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.23.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.29.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.30.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.35.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.36.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.41.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.44.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.8.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.9.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.10.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.14.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.18.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.23.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.29.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.30.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.35.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.36.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.41.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.44.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.8.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.9.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.14.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.31.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.32.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.37.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.39.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.41.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.14.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.31.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.32.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.37.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.39.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.41.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.14.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.23.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.25.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.29.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.35.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.36.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.48.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.5.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.51.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.53.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.57.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.59.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.60.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.9.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.14.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.23.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.25.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.29.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.35.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.36.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.48.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.5.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.51.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.53.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.57.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.59.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.60.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.9.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.11.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.17.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.18.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.19.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.32.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.33.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.37.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.38.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.4.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.40.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.44.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.50.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.51.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.56.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.59.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.65.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.83.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.87.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.88.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.11.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.17.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.18.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.19.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.32.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.33.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.37.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.38.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.4.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.40.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.44.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.50.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.51.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.56.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.59.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.65.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.83.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.87.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.88.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_05_DORSAL.2.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_05_DORSAL.26.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_05_DORSAL.3.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_05_VENTRAL.2.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_05_VENTRAL.26.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_05_VENTRAL.3.jpg \n", - " creating: Images/testing/Cyclotrachelus furtivus/\n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.10.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.13.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.21.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.44.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.48.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.5.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.10.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.13.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.21.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.44.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.48.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.5.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_02_DORSAL.11.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_02_DORSAL.6.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_02_VENTRAL.11.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_02_VENTRAL.6.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.10.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.11.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.12.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.16.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.20.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.22.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.32.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.4.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.10.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.11.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.12.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.16.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.20.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.22.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.32.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.4.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_05_DORSAL.11.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_05_DORSAL.13.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_05_DORSAL.19.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_05_DORSAL.34.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_05_VENTRAL.11.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_05_VENTRAL.13.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_05_VENTRAL.19.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_05_VENTRAL.34.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_06_DORSAL.9.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_06_VENTRAL.9.jpg \n", - " creating: Images/testing/Cyclotrachelus torvus/\n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesKONZ_05_DORSAL.1.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesKONZ_05_VENTRAL.1.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_01_DORSAL.1.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_01_VENTRAL.1.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_02_DORSAL.6.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_02_VENTRAL.6.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_03_DORSAL.12.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_03_DORSAL.18.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_03_DORSAL.22.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_03_DORSAL.25.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_03_DORSAL.7.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_03_VENTRAL.12.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_03_VENTRAL.18.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_03_VENTRAL.22.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_03_VENTRAL.25.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_03_VENTRAL.7.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.13.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.19.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.27.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.29.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.3.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.30.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.33.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.39.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.40.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.13.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.19.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.27.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.29.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.3.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.30.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.33.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.39.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.40.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.10.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.12.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.22.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.28.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.7.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.10.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.12.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.22.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.28.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.7.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_06_DORSAL.12.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_06_DORSAL.17.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_06_DORSAL.7.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_06_VENTRAL.12.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_06_VENTRAL.17.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_06_VENTRAL.7.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_07_DORSAL.11.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_07_DORSAL.13.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_07_DORSAL.2.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_07_DORSAL.20.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_07_DORSAL.21.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_07_DORSAL.4.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_07_DORSAL.6.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_07_VENTRAL.11.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_07_VENTRAL.13.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_07_VENTRAL.2.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_07_VENTRAL.20.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_07_VENTRAL.21.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_07_VENTRAL.4.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_07_VENTRAL.6.jpg \n", - " creating: Images/testing/Discoderus parallelus/\n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_02_DORSAL.11.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_02_DORSAL.15.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_02_DORSAL.35.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.11.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.15.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.35.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.1.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.10.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.102.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.104.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.11.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.116.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.121.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.123.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.133.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.136.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.143.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.146.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.150.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.152.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.157.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.158.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.16.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.173.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.174.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.18.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.180.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.182.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.183.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.184.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.185.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.186.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.190.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.194.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.199.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.203.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.211.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.23.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.24.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.25.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.26.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.3.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.30.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.35.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.45.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.51.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.59.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.71.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.78.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.80.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.85.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.89.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.90.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.94.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.98.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.1.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.10.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.102.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.104.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.11.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.116.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.121.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.123.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.133.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.136.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.143.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.146.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.150.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.152.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.157.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.158.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.16.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.173.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.174.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.18.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.180.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.182.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.183.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.184.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.185.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.186.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.190.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.194.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.199.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.203.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.211.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.23.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.24.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.25.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.26.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.3.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.30.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.35.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.45.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.51.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.59.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.71.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.78.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.80.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.85.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.89.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.90.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.94.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.98.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_06_DORSAL.14.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_06_DORSAL.16.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_06_DORSAL.2.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_06_DORSAL.21.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_06_DORSAL.3.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_06_VENTRAL.14.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_06_VENTRAL.16.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_06_VENTRAL.2.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_06_VENTRAL.21.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_06_VENTRAL.3.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_07_DORSAL.23.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_07_DORSAL.25.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_07_DORSAL.29.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_07_DORSAL.30.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_07_VENTRAL.23.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_07_VENTRAL.25.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_07_VENTRAL.29.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_07_VENTRAL.30.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_08_DORSAL.14.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_08_VENTRAL.14.jpg \n", - " creating: Images/testing/Discoderus robustus/\n", - " inflating: Images/testing/Discoderus robustus/JPGImagesSRER_01_DORSAL.12.jpg \n", - " inflating: Images/testing/Discoderus robustus/JPGImagesSRER_01_DORSAL.19.jpg \n", - " inflating: Images/testing/Discoderus robustus/JPGImagesSRER_01_DORSAL.2.jpg \n", - " inflating: Images/testing/Discoderus robustus/JPGImagesSRER_01_DORSAL.22.jpg \n", - " inflating: Images/testing/Discoderus robustus/JPGImagesSRER_01_DORSAL.25.jpg \n", - " inflating: Images/testing/Discoderus robustus/JPGImagesSRER_01_DORSAL.6.jpg \n", - " inflating: Images/testing/Discoderus robustus/JPGImagesSRER_01_DORSAL.7.jpg \n", - " inflating: Images/testing/Discoderus robustus/JPGImagesSRER_01_DORSAL.8.jpg \n", - " inflating: Images/testing/Discoderus robustus/JPGImagesSRER_01_DORSAL.9.jpg \n", - " inflating: Images/testing/Discoderus robustus/JPGImagesSRER_01_VENTRAL.12.jpg \n", - " inflating: Images/testing/Discoderus robustus/JPGImagesSRER_01_VENTRAL.19.jpg \n", - " inflating: Images/testing/Discoderus robustus/JPGImagesSRER_01_VENTRAL.2.jpg \n", - " inflating: Images/testing/Discoderus robustus/JPGImagesSRER_01_VENTRAL.22.jpg \n", - " inflating: Images/testing/Discoderus robustus/JPGImagesSRER_01_VENTRAL.25.jpg \n", - " inflating: Images/testing/Discoderus robustus/JPGImagesSRER_01_VENTRAL.6.jpg \n", - " inflating: Images/testing/Discoderus robustus/JPGImagesSRER_01_VENTRAL.7.jpg \n", - " inflating: Images/testing/Discoderus robustus/JPGImagesSRER_01_VENTRAL.8.jpg \n", - " inflating: Images/testing/Discoderus robustus/JPGImagesSRER_01_VENTRAL.9.jpg \n", - " inflating: Images/testing/Discoderus robustus/JPGImagesSRER_02_DORSAL.14.jpg \n", - " inflating: Images/testing/Discoderus robustus/JPGImagesSRER_02_DORSAL.17.jpg \n", - " inflating: Images/testing/Discoderus robustus/JPGImagesSRER_02_DORSAL.3.jpg \n", - " inflating: Images/testing/Discoderus robustus/JPGImagesSRER_02_VENTRAL.14.jpg \n", - " inflating: Images/testing/Discoderus robustus/JPGImagesSRER_02_VENTRAL.17.jpg \n", - " inflating: Images/testing/Discoderus robustus/JPGImagesSRER_02_VENTRAL.3.jpg \n", - " creating: Images/testing/Euryderus grossus/\n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_DORSAL.19.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_DORSAL.20.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_DORSAL.21.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_DORSAL.24.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_DORSAL.27.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_DORSAL.30.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_DORSAL.34.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_DORSAL.35.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_DORSAL.37.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_DORSAL.39.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_DORSAL.53.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_DORSAL.58.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_DORSAL.60.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_DORSAL.67.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_DORSAL.68.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_DORSAL.70.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_VENTRAL.19.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_VENTRAL.20.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_VENTRAL.21.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_VENTRAL.24.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_VENTRAL.27.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_VENTRAL.30.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_VENTRAL.34.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_VENTRAL.35.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_VENTRAL.37.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_VENTRAL.39.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_VENTRAL.53.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_VENTRAL.58.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_VENTRAL.60.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_VENTRAL.67.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_VENTRAL.68.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_VENTRAL.70.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_07_DORSAL.19.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_07_VENTRAL.19.jpg \n", - " creating: Images/testing/Pasimachus californicus/\n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_01_DORSAL.1.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_01_DORSAL.10.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_01_DORSAL.13.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_01_VENTRAL.1.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_01_VENTRAL.10.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_01_VENTRAL.13.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_02_DORSAL.16.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_02_DORSAL.18.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_02_DORSAL.23.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_02_VENTRAL.16.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_02_VENTRAL.18.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_02_VENTRAL.23.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_03_DORSAL.23.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_03_DORSAL.3.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_03_VENTRAL.23.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_03_VENTRAL.3.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_04_DORSAL.10.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_04_DORSAL.12.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_04_VENTRAL.10.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_04_VENTRAL.12.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_07_DORSAL.8.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_07_VENTRAL.8.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_08_DORSAL.10.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_08_DORSAL.18.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_08_DORSAL.9.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_08_VENTRAL.10.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_08_VENTRAL.18.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_08_VENTRAL.9.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_09_DORSAL.11.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_09_VENTRAL.11.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesOAES_02_DORSAL.3.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesOAES_02_DORSAL.8.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesOAES_02_VENTRAL.3.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesOAES_02_VENTRAL.8.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesOAES_03_DORSAL.1.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesOAES_03_DORSAL.6.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesOAES_03_VENTRAL.1.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesOAES_03_VENTRAL.6.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesOAES_04_DORSAL.13.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesOAES_04_DORSAL.2.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesOAES_04_VENTRAL.13.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesOAES_04_VENTRAL.2.jpg \n", - " creating: Images/testing/Pasimachus elongatus/\n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_01_DORSAL.1.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_01_VENTRAL.1.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_02_DORSAL.46.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_02_DORSAL.47.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_02_VENTRAL.46.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_02_VENTRAL.47.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_04_DORSAL.10.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_04_DORSAL.11.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_04_DORSAL.14.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_04_DORSAL.15.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_04_DORSAL.18.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_04_DORSAL.4.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_04_DORSAL.6.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_04_DORSAL.9.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_04_VENTRAL.10.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_04_VENTRAL.11.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_04_VENTRAL.14.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_04_VENTRAL.15.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_04_VENTRAL.18.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_04_VENTRAL.4.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_04_VENTRAL.6.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_04_VENTRAL.9.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_06_DORSAL.29.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_06_DORSAL.31.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_06_VENTRAL.29.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_06_VENTRAL.31.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_07_DORSAL.1.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_07_DORSAL.10.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_07_DORSAL.13.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_07_DORSAL.2.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_07_DORSAL.3.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_07_DORSAL.6.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_07_DORSAL.7.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_07_VENTRAL.1.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_07_VENTRAL.10.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_07_VENTRAL.13.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_07_VENTRAL.2.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_07_VENTRAL.3.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_07_VENTRAL.6.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_07_VENTRAL.7.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_08_DORSAL.6.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_08_VENTRAL.6.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_09_DORSAL.9.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_09_VENTRAL.9.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesKONZ_02_DORSAL.11.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesKONZ_02_DORSAL.14.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesKONZ_02_DORSAL.5.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesKONZ_02_DORSAL.7.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesKONZ_02_VENTRAL.11.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesKONZ_02_VENTRAL.14.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesKONZ_02_VENTRAL.5.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesKONZ_02_VENTRAL.7.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesKONZ_06_DORSAL.6.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesKONZ_06_DORSAL.8.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesKONZ_06_VENTRAL.6.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesKONZ_06_VENTRAL.8.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesKONZ_07_DORSAL.2.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesKONZ_07_VENTRAL.2.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesKONZ_08_DORSAL.4.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesKONZ_08_DORSAL.6.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesKONZ_08_VENTRAL.4.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesKONZ_08_VENTRAL.6.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesNOGP_03_DORSAL.15.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesNOGP_03_VENTRAL.15.jpg \n", - " creating: Images/testing/Pasimachus strenuus/\n", - " inflating: Images/testing/Pasimachus strenuus/JPGImagesOSBS_01_DORSAL.10.jpg \n", - " inflating: Images/testing/Pasimachus strenuus/JPGImagesOSBS_01_DORSAL.6.jpg \n", - " inflating: Images/testing/Pasimachus strenuus/JPGImagesOSBS_01_VENTRAL.10.jpg \n", - " inflating: Images/testing/Pasimachus strenuus/JPGImagesOSBS_01_VENTRAL.6.jpg \n", - " inflating: Images/testing/Pasimachus strenuus/JPGImagesOSBS_02_DORSAL.2.jpg \n", - " inflating: Images/testing/Pasimachus strenuus/JPGImagesOSBS_02_VENTRAL.2.jpg \n", - " inflating: Images/testing/Pasimachus strenuus/JPGImagesOSBS_05_DORSAL.10.jpg \n", - " inflating: Images/testing/Pasimachus strenuus/JPGImagesOSBS_05_VENTRAL.10.jpg \n", - " inflating: Images/testing/Pasimachus strenuus/JPGImagesOSBS_06_DORSAL.3.jpg \n", - " inflating: Images/testing/Pasimachus strenuus/JPGImagesOSBS_06_DORSAL.7.jpg \n", - " inflating: Images/testing/Pasimachus strenuus/JPGImagesOSBS_06_DORSAL.8.jpg \n", - " inflating: Images/testing/Pasimachus strenuus/JPGImagesOSBS_06_VENTRAL.3.jpg \n", - " inflating: Images/testing/Pasimachus strenuus/JPGImagesOSBS_06_VENTRAL.7.jpg \n", - " inflating: Images/testing/Pasimachus strenuus/JPGImagesOSBS_06_VENTRAL.8.jpg \n", - " inflating: Images/testing/Pasimachus strenuus/JPGImagesOSBS_07_DORSAL.12.jpg \n", - " inflating: Images/testing/Pasimachus strenuus/JPGImagesOSBS_07_VENTRAL.12.jpg \n", - " creating: Images/testing/Pasimachus subsulcatus/\n", - " inflating: Images/testing/Pasimachus subsulcatus/JPGImagesOSBS_02_DORSAL.13.jpg \n", - " inflating: Images/testing/Pasimachus subsulcatus/JPGImagesOSBS_02_VENTRAL.13.jpg \n", - " inflating: Images/testing/Pasimachus subsulcatus/JPGImagesOSBS_03_DORSAL.15.jpg \n", - " inflating: Images/testing/Pasimachus subsulcatus/JPGImagesOSBS_03_VENTRAL.15.jpg \n", - " inflating: Images/testing/Pasimachus subsulcatus/JPGImagesOSBS_04_DORSAL.6.jpg \n", - " inflating: Images/testing/Pasimachus subsulcatus/JPGImagesOSBS_04_VENTRAL.6.jpg \n", - " inflating: Images/testing/Pasimachus subsulcatus/JPGImagesOSBS_05_DORSAL.1.jpg \n", - " inflating: Images/testing/Pasimachus subsulcatus/JPGImagesOSBS_05_VENTRAL.1.jpg \n", - " inflating: Images/testing/Pasimachus subsulcatus/JPGImagesOSBS_07_DORSAL.3.jpg \n", - " inflating: Images/testing/Pasimachus subsulcatus/JPGImagesOSBS_07_DORSAL.6.jpg \n", - " inflating: Images/testing/Pasimachus subsulcatus/JPGImagesOSBS_07_VENTRAL.3.jpg \n", - " inflating: Images/testing/Pasimachus subsulcatus/JPGImagesOSBS_07_VENTRAL.6.jpg \n", - " creating: Images/testing/Patrobus lecontei/\n", - " inflating: Images/testing/Patrobus lecontei/JPGImagesWOOD_05_DORSAL.29.jpg \n", - " inflating: Images/testing/Patrobus lecontei/JPGImagesWOOD_05_DORSAL.3.jpg \n", - " inflating: Images/testing/Patrobus lecontei/JPGImagesWOOD_05_DORSAL.35.jpg \n", - " inflating: Images/testing/Patrobus lecontei/JPGImagesWOOD_05_DORSAL.37.jpg \n", - " inflating: Images/testing/Patrobus lecontei/JPGImagesWOOD_05_VENTRAL.29.jpg \n", - " inflating: Images/testing/Patrobus lecontei/JPGImagesWOOD_05_VENTRAL.3.jpg \n", - " inflating: Images/testing/Patrobus lecontei/JPGImagesWOOD_05_VENTRAL.35.jpg \n", - " inflating: Images/testing/Patrobus lecontei/JPGImagesWOOD_05_VENTRAL.37.jpg \n", - " inflating: Images/testing/Patrobus lecontei/JPGImagesWOOD_06_DORSAL.20.jpg \n", - " inflating: Images/testing/Patrobus lecontei/JPGImagesWOOD_06_DORSAL.23.jpg \n", - " inflating: Images/testing/Patrobus lecontei/JPGImagesWOOD_06_VENTRAL.20.jpg \n", - " inflating: Images/testing/Patrobus lecontei/JPGImagesWOOD_06_VENTRAL.23.jpg \n", - " inflating: Images/testing/Patrobus lecontei/JPGImagesWOOD_07_DORSAL.21.jpg \n", - " inflating: Images/testing/Patrobus lecontei/JPGImagesWOOD_07_VENTRAL.21.jpg \n", - " creating: Images/testing/Poecilus lucublandus/\n", - " inflating: Images/testing/Poecilus lucublandus/JPGImagesSCBI_02_DORSAL.11.jpg \n", - " inflating: Images/testing/Poecilus lucublandus/JPGImagesSCBI_02_VENTRAL.11.jpg \n", - " inflating: Images/testing/Poecilus lucublandus/JPGImagesWOOD_10_DORSAL.20.jpg \n", - " inflating: Images/testing/Poecilus lucublandus/JPGImagesWOOD_10_DORSAL.25.jpg \n", - " inflating: Images/testing/Poecilus lucublandus/JPGImagesWOOD_10_VENTRAL.20.jpg \n", - " inflating: Images/testing/Poecilus lucublandus/JPGImagesWOOD_10_VENTRAL.25.jpg \n", - " inflating: Images/testing/Poecilus lucublandus/JPGImagesWOOD_11_DORSAL.1.jpg \n", - " inflating: Images/testing/Poecilus lucublandus/JPGImagesWOOD_11_VENTRAL.1.jpg \n", - " creating: Images/testing/Pterostichus corvinus/\n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.40.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.44.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.54.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.59.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.62.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.64.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.66.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.68.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.69.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.40.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.44.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.54.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.59.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.62.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.64.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.66.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.68.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.69.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.16.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.19.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.23.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.27.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.28.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.33.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.38.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.41.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.49.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.16.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.19.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.23.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.27.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.28.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.33.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.38.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.41.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.49.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.12.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.15.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.22.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.25.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.26.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.3.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.32.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.43.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.5.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.9.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.12.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.15.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.22.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.25.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.26.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.3.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.32.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.43.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.5.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.9.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_05_DORSAL.18.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_05_VENTRAL.18.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_06_DORSAL.2.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_06_VENTRAL.2.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_07_DORSAL.11.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_07_DORSAL.20.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_07_VENTRAL.11.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_07_VENTRAL.20.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_13_DORSAL.7.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_13_VENTRAL.7.jpg \n", - " creating: Images/testing/Pterostichus melanarius melanarius/\n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.16.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.17.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.18.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.23.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.25.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.36.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.39.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.4.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.42.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.45.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.48.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.5.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.52.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.7.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.16.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.17.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.18.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.23.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.25.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.36.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.39.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.4.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.42.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.45.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.48.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.5.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.52.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.7.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_03_DORSAL.33.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_03_DORSAL.42.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_03_DORSAL.47.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_03_DORSAL.49.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_03_VENTRAL.33.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_03_VENTRAL.42.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_03_VENTRAL.47.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_03_VENTRAL.49.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_04_DORSAL.7.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_04_VENTRAL.7.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesUNDE_01_DORSAL.45.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesUNDE_01_DORSAL.9.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesUNDE_01_VENTRAL.45.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesUNDE_01_VENTRAL.9.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesUNDE_02_DORSAL.23.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesUNDE_02_DORSAL.32.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesUNDE_02_DORSAL.34.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesUNDE_02_DORSAL.38.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesUNDE_02_VENTRAL.23.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesUNDE_02_VENTRAL.32.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesUNDE_02_VENTRAL.34.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesUNDE_02_VENTRAL.38.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesUNDE_03_DORSAL.12.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesUNDE_03_DORSAL.7.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesUNDE_03_VENTRAL.12.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesUNDE_03_VENTRAL.7.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesUNDE_05_DORSAL.1.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesUNDE_05_DORSAL.13.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesUNDE_05_DORSAL.14.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesUNDE_05_VENTRAL.1.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesUNDE_05_VENTRAL.13.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesUNDE_05_VENTRAL.14.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesUNDE_06_DORSAL.13.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesUNDE_06_VENTRAL.13.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_01_DORSAL.48.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_01_VENTRAL.48.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_04_DORSAL.55.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_04_DORSAL.57.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_04_DORSAL.58.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_04_VENTRAL.55.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_04_VENTRAL.57.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_04_VENTRAL.58.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_05_DORSAL.41.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_05_VENTRAL.41.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_08_DORSAL.10.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_08_DORSAL.13.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_08_DORSAL.3.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_08_VENTRAL.10.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_08_VENTRAL.13.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_08_VENTRAL.3.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.14.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.15.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.16.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.19.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.23.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.26.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.28.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.44.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.48.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.14.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.15.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.16.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.19.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.23.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.26.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.28.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.44.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.48.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_10_DORSAL.14.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_10_DORSAL.17.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_10_DORSAL.8.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_10_VENTRAL.14.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_10_VENTRAL.17.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_10_VENTRAL.8.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_11_DORSAL.16.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_11_DORSAL.3.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_11_DORSAL.8.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_11_VENTRAL.16.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_11_VENTRAL.3.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_11_VENTRAL.8.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_12_DORSAL.1.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_12_DORSAL.4.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_12_DORSAL.6.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_12_DORSAL.7.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_12_DORSAL.8.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_12_VENTRAL.1.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_12_VENTRAL.4.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_12_VENTRAL.6.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_12_VENTRAL.7.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_12_VENTRAL.8.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_14_DORSAL.29.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_14_VENTRAL.29.jpg \n", - " creating: Images/testing/Pterostichus novus/\n", - " inflating: Images/testing/Pterostichus novus/JPGImagesSTEI_01_VENTRAL.16.jpg \n", - " inflating: Images/testing/Pterostichus novus/JPGImagesSTEI_01_VENTRAL.2.jpg \n", - " inflating: Images/testing/Pterostichus novus/JPGImagesSTEI_01_VENTRAL.24.jpg \n", - " inflating: Images/testing/Pterostichus novus/JPGImagesSTEI_01_VENTRAL.25.jpg \n", - " inflating: Images/testing/Pterostichus novus/JPGImagesSTEI_01_VENTRAL.27.jpg \n", - " inflating: Images/testing/Pterostichus novus/JPGImagesSTEI_01_VENTRAL.31.jpg \n", - " inflating: Images/testing/Pterostichus novus/JPGImagesSTEI_01_VENTRAL.34.jpg \n", - " inflating: Images/testing/Pterostichus novus/JPGImagesSTEI_01_VENTRAL.37.jpg \n", - " inflating: Images/testing/Pterostichus novus/JPGImagesSTEI_03_DORSAL.13.jpg \n", - " inflating: Images/testing/Pterostichus novus/JPGImagesSTEI_03_DORSAL.19.jpg \n", - " inflating: Images/testing/Pterostichus novus/JPGImagesSTEI_03_DORSAL.5.jpg \n", - " inflating: Images/testing/Pterostichus novus/JPGImagesSTEI_03_DORSAL.9.jpg \n", - " inflating: Images/testing/Pterostichus novus/JPGImagesSTEI_03_VENTRAL.13.jpg \n", - " inflating: Images/testing/Pterostichus novus/JPGImagesSTEI_03_VENTRAL.19.jpg \n", - " inflating: Images/testing/Pterostichus novus/JPGImagesSTEI_03_VENTRAL.5.jpg \n", - " inflating: Images/testing/Pterostichus novus/JPGImagesSTEI_03_VENTRAL.9.jpg \n", - " inflating: Images/testing/Pterostichus novus/JPGImagesSTEI_04_DORSAL.1.jpg \n", - " inflating: Images/testing/Pterostichus novus/JPGImagesSTEI_04_DORSAL.35.jpg \n", - " inflating: Images/testing/Pterostichus novus/JPGImagesSTEI_04_DORSAL.8.jpg \n", - " inflating: Images/testing/Pterostichus novus/JPGImagesSTEI_04_VENTRAL.1.jpg \n", - " inflating: Images/testing/Pterostichus novus/JPGImagesSTEI_04_VENTRAL.35.jpg \n", - " inflating: Images/testing/Pterostichus novus/JPGImagesSTEI_04_VENTRAL.8.jpg \n", - " inflating: Images/testing/Pterostichus novus/JPGImagesSTEI_05_DORSAL.7.jpg \n", - " inflating: Images/testing/Pterostichus novus/JPGImagesSTEI_05_DORSAL.8.jpg \n", - " inflating: Images/testing/Pterostichus novus/JPGImagesSTEI_05_VENTRAL.7.jpg \n", - " inflating: Images/testing/Pterostichus novus/JPGImagesSTEI_05_VENTRAL.8.jpg \n", - " creating: Images/testing/Pterostichus stygicus/\n", - " inflating: Images/testing/Pterostichus stygicus/JPGImagesBLAN_02_DORSAL.28.jpg \n", - " inflating: Images/testing/Pterostichus stygicus/JPGImagesBLAN_02_VENTRAL.28.jpg \n", - " inflating: Images/testing/Pterostichus stygicus/JPGImagesBLAN_05_DORSAL.33.jpg \n", - " inflating: Images/testing/Pterostichus stygicus/JPGImagesBLAN_05_DORSAL.38.jpg \n", - " inflating: Images/testing/Pterostichus stygicus/JPGImagesBLAN_05_VENTRAL.33.jpg \n", - " inflating: Images/testing/Pterostichus stygicus/JPGImagesBLAN_05_VENTRAL.38.jpg \n", - " inflating: Images/testing/Pterostichus stygicus/JPGImagesSERC_02_DORSAL.10.jpg \n", - " inflating: Images/testing/Pterostichus stygicus/JPGImagesSERC_02_VENTRAL.10.jpg \n", - " inflating: Images/testing/Pterostichus stygicus/JPGImagesSERC_03_DORSAL.14.jpg \n", - " inflating: Images/testing/Pterostichus stygicus/JPGImagesSERC_03_DORSAL.18.jpg \n", - " inflating: Images/testing/Pterostichus stygicus/JPGImagesSERC_03_DORSAL.20.jpg \n", - " inflating: Images/testing/Pterostichus stygicus/JPGImagesSERC_03_VENTRAL.14.jpg \n", - " inflating: Images/testing/Pterostichus stygicus/JPGImagesSERC_03_VENTRAL.18.jpg \n", - " inflating: Images/testing/Pterostichus stygicus/JPGImagesSERC_03_VENTRAL.20.jpg \n", - " creating: Images/testing/Scarites subterraneus/\n", - " inflating: Images/testing/Scarites subterraneus/JPGImagesSERC_01_DORSAL.10.jpg \n", - " inflating: Images/testing/Scarites subterraneus/JPGImagesSERC_01_DORSAL.14.jpg \n", - " inflating: Images/testing/Scarites subterraneus/JPGImagesSERC_01_DORSAL.2.jpg \n", - " inflating: Images/testing/Scarites subterraneus/JPGImagesSERC_01_DORSAL.20.jpg \n", - " inflating: Images/testing/Scarites subterraneus/JPGImagesSERC_01_DORSAL.22.jpg \n", - " inflating: Images/testing/Scarites subterraneus/JPGImagesSERC_01_DORSAL.23.jpg \n", - " inflating: Images/testing/Scarites subterraneus/JPGImagesSERC_01_DORSAL.24.jpg \n", - " inflating: Images/testing/Scarites subterraneus/JPGImagesSERC_01_DORSAL.25.jpg \n", - " inflating: Images/testing/Scarites subterraneus/JPGImagesSERC_01_DORSAL.3.jpg \n", - " inflating: Images/testing/Scarites subterraneus/JPGImagesSERC_01_DORSAL.4.jpg \n", - " inflating: Images/testing/Scarites subterraneus/JPGImagesSERC_01_DORSAL.7.jpg \n", - " inflating: Images/testing/Scarites subterraneus/JPGImagesSERC_01_DORSAL.8.jpg \n", - " inflating: Images/testing/Scarites subterraneus/JPGImagesSERC_01_DORSAL.9.jpg \n", - " inflating: Images/testing/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.10.jpg \n", - " inflating: Images/testing/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.14.jpg \n", - " inflating: Images/testing/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.2.jpg \n", - " inflating: Images/testing/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.20.jpg \n", - " inflating: Images/testing/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.22.jpg \n", - " inflating: Images/testing/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.23.jpg \n", - " inflating: Images/testing/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.24.jpg \n", - " inflating: Images/testing/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.25.jpg \n", - " inflating: Images/testing/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.3.jpg \n", - " inflating: Images/testing/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.4.jpg \n", - " inflating: Images/testing/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.7.jpg \n", - " inflating: Images/testing/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.8.jpg \n", - " inflating: Images/testing/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.9.jpg \n", - " inflating: Images/testing/Scarites subterraneus/JPGImagesSERC_05_DORSAL.14.jpg \n", - " inflating: Images/testing/Scarites subterraneus/JPGImagesSERC_05_VENTRAL.14.jpg \n", - " creating: Images/testing/Selenophorus planipennis/\n", - " inflating: Images/testing/Selenophorus planipennis/JPGImagesCPER_11_DORSAL.10.jpg \n", - " inflating: Images/testing/Selenophorus planipennis/JPGImagesCPER_11_DORSAL.23.jpg \n", - " inflating: Images/testing/Selenophorus planipennis/JPGImagesCPER_11_DORSAL.24.jpg \n", - " inflating: Images/testing/Selenophorus planipennis/JPGImagesCPER_11_DORSAL.26.jpg \n", - " inflating: Images/testing/Selenophorus planipennis/JPGImagesCPER_11_DORSAL.27.jpg \n", - " inflating: Images/testing/Selenophorus planipennis/JPGImagesCPER_11_DORSAL.3.jpg \n", - " inflating: Images/testing/Selenophorus planipennis/JPGImagesCPER_11_DORSAL.6.jpg \n", - " inflating: Images/testing/Selenophorus planipennis/JPGImagesCPER_11_DORSAL.9.jpg \n", - " inflating: Images/testing/Selenophorus planipennis/JPGImagesCPER_11_VENTRAL.10.jpg \n", - " inflating: Images/testing/Selenophorus planipennis/JPGImagesCPER_11_VENTRAL.23.jpg \n", - " inflating: Images/testing/Selenophorus planipennis/JPGImagesCPER_11_VENTRAL.24.jpg \n", - " inflating: Images/testing/Selenophorus planipennis/JPGImagesCPER_11_VENTRAL.26.jpg \n", - " inflating: Images/testing/Selenophorus planipennis/JPGImagesCPER_11_VENTRAL.27.jpg \n", - " inflating: Images/testing/Selenophorus planipennis/JPGImagesCPER_11_VENTRAL.3.jpg \n", - " inflating: Images/testing/Selenophorus planipennis/JPGImagesCPER_11_VENTRAL.6.jpg \n", - " inflating: Images/testing/Selenophorus planipennis/JPGImagesCPER_11_VENTRAL.9.jpg \n", - " inflating: Images/testing/Selenophorus planipennis/JPGImagesMOAB_03_DORSAL.66.jpg \n", - " inflating: Images/testing/Selenophorus planipennis/JPGImagesMOAB_03_VENTRAL.66.jpg \n", - " inflating: Images/testing/Selenophorus planipennis/JPGImagesMOAB_06_DORSAL.14.jpg \n", - " inflating: Images/testing/Selenophorus planipennis/JPGImagesMOAB_06_VENTRAL.14.jpg \n", - " creating: Images/testing/Synuchus impunctatus/\n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesSTEI_01_VENTRAL.13.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesSTEI_01_VENTRAL.19.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesSTEI_01_VENTRAL.21.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesSTEI_01_VENTRAL.22.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesSTEI_01_VENTRAL.42.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesSTEI_03_DORSAL.27.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesSTEI_03_DORSAL.29.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesSTEI_03_DORSAL.31.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesSTEI_03_DORSAL.54.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesSTEI_03_DORSAL.55.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesSTEI_03_DORSAL.56.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesSTEI_03_DORSAL.64.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesSTEI_03_VENTRAL.27.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesSTEI_03_VENTRAL.29.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesSTEI_03_VENTRAL.31.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesSTEI_03_VENTRAL.54.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesSTEI_03_VENTRAL.55.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesSTEI_03_VENTRAL.56.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesSTEI_03_VENTRAL.64.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesSTEI_04_DORSAL.29.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesSTEI_04_VENTRAL.29.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesSTEI_05_DORSAL.2.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesSTEI_05_DORSAL.5.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesSTEI_05_VENTRAL.2.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesSTEI_05_VENTRAL.5.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesTREE_02_DORSAL.10.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesTREE_02_DORSAL.11.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesTREE_02_DORSAL.6.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesTREE_02_VENTRAL.10.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesTREE_02_VENTRAL.11.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesTREE_02_VENTRAL.6.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesTREE_03_DORSAL.17.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesTREE_03_DORSAL.8.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesTREE_03_VENTRAL.17.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesTREE_03_VENTRAL.8.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.11.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.12.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.24.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.32.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.37.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.38.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.11.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.12.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.24.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.32.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.37.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.38.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_02_DORSAL.11.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_02_DORSAL.14.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_02_DORSAL.39.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_02_DORSAL.40.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_02_DORSAL.5.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_02_DORSAL.6.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_02_DORSAL.7.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_02_DORSAL.9.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_02_VENTRAL.11.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_02_VENTRAL.14.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_02_VENTRAL.39.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_02_VENTRAL.40.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_02_VENTRAL.5.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_02_VENTRAL.6.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_02_VENTRAL.7.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_02_VENTRAL.9.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_03_DORSAL.17.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_03_VENTRAL.17.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_04_DORSAL.16.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_04_DORSAL.2.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_04_DORSAL.24.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_04_VENTRAL.16.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_04_VENTRAL.2.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_04_VENTRAL.24.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_05_DORSAL.2.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_05_VENTRAL.2.jpg \n", - " creating: Images/training/\n", - " creating: Images/training/Brachinus alternans/\n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_01_DORSAL.1.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_01_DORSAL.3.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_01_DORSAL.4.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_01_DORSAL.5.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_01_DORSAL.7.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_01_DORSAL.8.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_01_DORSAL.9.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_01_VENTRAL.1.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_01_VENTRAL.3.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_01_VENTRAL.4.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_01_VENTRAL.5.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_01_VENTRAL.7.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_01_VENTRAL.8.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_01_VENTRAL.9.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_02_DORSAL.6.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_02_DORSAL.7.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_02_DORSAL.8.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_02_VENTRAL.6.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_02_VENTRAL.7.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_02_VENTRAL.8.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_03_DORSAL.3.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_03_DORSAL.4.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_03_VENTRAL.3.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_03_VENTRAL.4.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_04_DORSAL.1.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_04_DORSAL.10.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_04_DORSAL.11.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_04_DORSAL.12.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_04_DORSAL.4.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_04_DORSAL.5.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_04_DORSAL.6.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_04_DORSAL.7.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_04_DORSAL.8.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_04_DORSAL.9.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_04_VENTRAL.1.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_04_VENTRAL.10.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_04_VENTRAL.11.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_04_VENTRAL.12.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_04_VENTRAL.4.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_04_VENTRAL.5.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_04_VENTRAL.6.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_04_VENTRAL.7.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_04_VENTRAL.8.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_04_VENTRAL.9.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_01_DORSAL.2.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_01_DORSAL.9.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_01_VENTRAL.2.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_01_VENTRAL.9.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_02_DORSAL.1.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_02_DORSAL.2.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_02_DORSAL.4.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_02_DORSAL.5.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_02_VENTRAL.1.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_02_VENTRAL.2.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_02_VENTRAL.4.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_02_VENTRAL.5.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_04_DORSAL.1.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_04_DORSAL.14.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_04_DORSAL.16.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_04_DORSAL.17.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_04_DORSAL.2.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_04_VENTRAL.1.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_04_VENTRAL.14.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_04_VENTRAL.16.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_04_VENTRAL.17.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_04_VENTRAL.2.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_05_DORSAL.1.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_05_DORSAL.2.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_05_DORSAL.3.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_05_DORSAL.5.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_05_DORSAL.6.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_05_DORSAL.7.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_05_DORSAL.9.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_05_VENTRAL.1.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_05_VENTRAL.2.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_05_VENTRAL.3.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_05_VENTRAL.5.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_05_VENTRAL.6.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_05_VENTRAL.7.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_05_VENTRAL.9.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_06_DORSAL.10.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_06_DORSAL.11.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_06_DORSAL.9.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_06_VENTRAL.10.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_06_VENTRAL.11.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_06_VENTRAL.9.jpg \n", - " creating: Images/training/Brachinus cyanochroaticus/\n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.10.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.11.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.12.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.13.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.14.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.15.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.17.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.19.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.20.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.21.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.22.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.23.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.25.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.26.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.27.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.28.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.29.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.30.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.31.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.32.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.34.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.35.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.36.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.37.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.38.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.39.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.40.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.41.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.42.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.44.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.45.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.10.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.11.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.12.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.13.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.14.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.15.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.17.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.19.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.20.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.21.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.22.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.23.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.25.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.26.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.27.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.28.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.29.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.30.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.31.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.32.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.34.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.35.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.36.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.37.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.38.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.39.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.40.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.41.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.42.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.44.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.45.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.10.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.11.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.12.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.13.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.14.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.15.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.16.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.17.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.18.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.2.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.20.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.21.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.22.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.23.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.24.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.25.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.26.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.27.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.28.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.29.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.30.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.31.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.32.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.33.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.35.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.36.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.37.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.4.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.5.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.7.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.8.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.10.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.11.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.12.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.13.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.14.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.15.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.16.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.17.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.18.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.2.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.20.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.21.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.22.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.23.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.24.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.25.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.26.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.27.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.28.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.29.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.30.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.31.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.32.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.33.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.35.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.36.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.37.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.4.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.5.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.7.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.8.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_03_DORSAL.1.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_03_DORSAL.5.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_03_DORSAL.6.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_03_DORSAL.7.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_03_DORSAL.8.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_03_DORSAL.9.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_03_VENTRAL.1.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_03_VENTRAL.5.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_03_VENTRAL.6.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_03_VENTRAL.7.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_03_VENTRAL.8.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_03_VENTRAL.9.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_06_DORSAL.24.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_06_DORSAL.25.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_06_DORSAL.26.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_06_DORSAL.30.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_06_DORSAL.32.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_06_DORSAL.33.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_06_DORSAL.35.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_06_DORSAL.36.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_06_VENTRAL.24.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_06_VENTRAL.25.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_06_VENTRAL.26.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_06_VENTRAL.30.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_06_VENTRAL.32.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_06_VENTRAL.33.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_06_VENTRAL.35.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_06_VENTRAL.36.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_07_DORSAL.1.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_07_DORSAL.13.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_07_DORSAL.14.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_07_DORSAL.16.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_07_DORSAL.17.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_07_DORSAL.18.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_07_DORSAL.2.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_07_DORSAL.4.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_07_DORSAL.5.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_07_DORSAL.6.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_07_DORSAL.7.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_07_DORSAL.8.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_07_DORSAL.9.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_07_VENTRAL.1.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_07_VENTRAL.13.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_07_VENTRAL.14.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_07_VENTRAL.16.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_07_VENTRAL.17.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_07_VENTRAL.18.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_07_VENTRAL.2.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_07_VENTRAL.4.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_07_VENTRAL.5.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_07_VENTRAL.6.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_07_VENTRAL.7.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_07_VENTRAL.8.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_07_VENTRAL.9.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_09_DORSAL.10.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_09_VENTRAL.10.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_13_DORSAL.10.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_13_DORSAL.11.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_13_DORSAL.6.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_13_VENTRAL.10.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_13_VENTRAL.11.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_13_VENTRAL.6.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_14_DORSAL.3.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_14_VENTRAL.3.jpg \n", - " creating: Images/training/Calathus advena/\n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_DORSAL.21.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_DORSAL.22.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_DORSAL.23.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_DORSAL.24.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_DORSAL.25.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_DORSAL.26.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_DORSAL.28.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_DORSAL.29.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_DORSAL.31.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_DORSAL.32.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_DORSAL.33.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_DORSAL.34.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_DORSAL.36.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_DORSAL.37.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_DORSAL.38.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_DORSAL.40.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_VENTRAL.21.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_VENTRAL.22.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_VENTRAL.23.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_VENTRAL.24.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_VENTRAL.25.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_VENTRAL.26.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_VENTRAL.28.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_VENTRAL.29.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_VENTRAL.31.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_VENTRAL.32.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_VENTRAL.33.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_VENTRAL.34.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_VENTRAL.36.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_VENTRAL.37.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_VENTRAL.38.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_VENTRAL.40.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_02_DORSAL.16.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_02_DORSAL.17.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_02_DORSAL.18.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_02_DORSAL.19.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_02_DORSAL.20.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_02_DORSAL.21.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_02_DORSAL.22.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_02_DORSAL.23.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_02_DORSAL.24.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_02_VENTRAL.16.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_02_VENTRAL.17.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_02_VENTRAL.18.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_02_VENTRAL.19.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_02_VENTRAL.20.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_02_VENTRAL.21.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_02_VENTRAL.22.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_02_VENTRAL.23.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_02_VENTRAL.24.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_03_DORSAL.1.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_03_DORSAL.17.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_03_DORSAL.18.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_03_DORSAL.19.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_03_DORSAL.2.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_03_DORSAL.20.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_03_DORSAL.22.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_03_DORSAL.24.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_03_DORSAL.25.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_03_DORSAL.4.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_03_DORSAL.5.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_03_DORSAL.6.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_03_DORSAL.7.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_03_DORSAL.8.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_03_VENTRAL.1.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_03_VENTRAL.17.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_03_VENTRAL.18.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_03_VENTRAL.19.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_03_VENTRAL.2.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_03_VENTRAL.20.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_03_VENTRAL.22.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_03_VENTRAL.24.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_03_VENTRAL.25.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_03_VENTRAL.4.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_03_VENTRAL.5.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_03_VENTRAL.6.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_03_VENTRAL.7.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_03_VENTRAL.8.jpg \n", - " creating: Images/training/Carabus maeander maeander/\n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_01_DORSAL.2.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_01_DORSAL.5.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_01_DORSAL.9.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_01_VENTRAL.2.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_01_VENTRAL.5.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_01_VENTRAL.9.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_02_DORSAL.1.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_02_VENTRAL.1.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_03_DORSAL.56.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_03_DORSAL.57.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_03_DORSAL.58.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_03_DORSAL.59.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_03_VENTRAL.56.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_03_VENTRAL.57.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_03_VENTRAL.58.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_03_VENTRAL.59.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_04_DORSAL.46.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_04_DORSAL.47.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_04_DORSAL.48.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_04_VENTRAL.46.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_04_VENTRAL.47.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_04_VENTRAL.48.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_05_DORSAL.22.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_05_VENTRAL.22.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_08_DORSAL.31.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_08_DORSAL.32.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_08_VENTRAL.31.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_08_VENTRAL.32.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_DORSAL.2.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_DORSAL.28.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_DORSAL.29.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_DORSAL.3.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_DORSAL.31.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_DORSAL.32.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_DORSAL.34.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_DORSAL.36.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_DORSAL.37.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_DORSAL.38.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_DORSAL.39.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_DORSAL.4.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_DORSAL.41.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_DORSAL.42.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_DORSAL.43.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_DORSAL.44.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_DORSAL.45.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_DORSAL.46.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_DORSAL.47.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_DORSAL.48.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_DORSAL.49.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_DORSAL.50.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_VENTRAL.2.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_VENTRAL.28.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_VENTRAL.29.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_VENTRAL.3.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_VENTRAL.31.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_VENTRAL.32.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_VENTRAL.34.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_VENTRAL.36.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_VENTRAL.37.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_VENTRAL.38.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_VENTRAL.39.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_VENTRAL.4.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_VENTRAL.41.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_VENTRAL.42.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_VENTRAL.43.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_VENTRAL.44.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_VENTRAL.45.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_VENTRAL.46.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_VENTRAL.47.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_VENTRAL.48.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_VENTRAL.49.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_VENTRAL.50.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_14_DORSAL.10.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_14_DORSAL.14.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_14_DORSAL.15.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_14_DORSAL.16.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_14_DORSAL.6.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_14_DORSAL.7.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_14_DORSAL.8.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_14_VENTRAL.10.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_14_VENTRAL.14.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_14_VENTRAL.15.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_14_VENTRAL.16.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_14_VENTRAL.6.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_14_VENTRAL.7.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_14_VENTRAL.8.jpg \n", - " creating: Images/training/Carabus nemoralis nemoralis/\n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_01_DORSAL.11.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_01_DORSAL.12.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_01_DORSAL.13.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_01_DORSAL.14.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_01_DORSAL.15.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_01_DORSAL.16.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_01_DORSAL.17.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_01_DORSAL.18.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_01_DORSAL.19.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_01_DORSAL.20.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_01_DORSAL.21.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_01_DORSAL.5.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_01_DORSAL.7.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_01_DORSAL.8.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_01_VENTRAL.11.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_01_VENTRAL.12.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_01_VENTRAL.13.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_01_VENTRAL.14.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_01_VENTRAL.15.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_01_VENTRAL.16.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_01_VENTRAL.17.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_01_VENTRAL.18.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_01_VENTRAL.19.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_01_VENTRAL.20.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_01_VENTRAL.21.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_01_VENTRAL.5.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_01_VENTRAL.7.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_01_VENTRAL.8.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_02_DORSAL.12.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_02_DORSAL.14.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_02_DORSAL.15.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_02_DORSAL.16.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_02_DORSAL.17.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_02_DORSAL.18.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_02_DORSAL.19.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_02_DORSAL.20.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_02_DORSAL.4.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_02_VENTRAL.12.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_02_VENTRAL.14.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_02_VENTRAL.15.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_02_VENTRAL.16.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_02_VENTRAL.17.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_02_VENTRAL.18.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_02_VENTRAL.19.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_02_VENTRAL.20.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_02_VENTRAL.4.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_03_DORSAL.10.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_03_DORSAL.11.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_03_DORSAL.12.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_03_DORSAL.13.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_03_DORSAL.15.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_03_DORSAL.4.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_03_VENTRAL.10.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_03_VENTRAL.11.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_03_VENTRAL.12.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_03_VENTRAL.13.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_03_VENTRAL.15.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_03_VENTRAL.4.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.1.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.14.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.15.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.16.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.17.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.18.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.19.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.2.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.20.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.21.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.22.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.24.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.25.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.26.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.28.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.29.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.34.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.4.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.6.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.7.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.8.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.1.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.14.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.15.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.16.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.17.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.18.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.19.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.2.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.20.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.21.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.22.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.24.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.25.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.26.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.28.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.29.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.34.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.4.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.6.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.7.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.8.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_DORSAL.1.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_DORSAL.10.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_DORSAL.11.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_DORSAL.12.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_DORSAL.13.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_DORSAL.16.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_DORSAL.17.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_DORSAL.18.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_DORSAL.19.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_DORSAL.2.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_DORSAL.20.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_DORSAL.3.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_DORSAL.4.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_DORSAL.5.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_DORSAL.6.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_DORSAL.7.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_DORSAL.8.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_DORSAL.9.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_VENTRAL.1.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_VENTRAL.10.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_VENTRAL.11.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_VENTRAL.12.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_VENTRAL.13.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_VENTRAL.16.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_VENTRAL.17.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_VENTRAL.18.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_VENTRAL.19.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_VENTRAL.2.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_VENTRAL.20.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_VENTRAL.3.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_VENTRAL.4.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_VENTRAL.5.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_VENTRAL.6.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_VENTRAL.7.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_VENTRAL.8.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_VENTRAL.9.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_02_DORSAL.12.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_02_VENTRAL.12.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_03_DORSAL.15.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_03_VENTRAL.15.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_04_DORSAL.26.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_04_DORSAL.27.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_04_DORSAL.39.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_04_DORSAL.40.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_04_DORSAL.42.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_04_VENTRAL.26.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_04_VENTRAL.27.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_04_VENTRAL.39.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_04_VENTRAL.40.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_04_VENTRAL.42.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_05_DORSAL.6.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_05_VENTRAL.6.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.1.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.11.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.12.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.14.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.15.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.16.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.17.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.18.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.19.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.2.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.20.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.21.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.23.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.24.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.25.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.26.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.27.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.3.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.30.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.31.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.32.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.33.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.4.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.5.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.6.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.7.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.8.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.9.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.1.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.11.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.12.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.14.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.15.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.16.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.17.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.18.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.19.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.2.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.20.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.21.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.23.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.24.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.25.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.26.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.27.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.3.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.30.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.31.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.32.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.33.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.4.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.5.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.6.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.7.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.8.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.9.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.1.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.10.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.11.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.12.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.13.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.14.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.15.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.16.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.17.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.18.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.19.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.2.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.20.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.22.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.23.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.24.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.25.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.26.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.27.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.28.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.29.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.31.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.32.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.35.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.36.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.37.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.38.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.39.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.4.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.40.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.41.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.44.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.45.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.46.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.47.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.49.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.51.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.52.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.53.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.54.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.57.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.58.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.59.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.6.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.60.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.61.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.62.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.7.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.8.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.9.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.1.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.10.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.11.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.12.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.13.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.14.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.15.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.16.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.17.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.18.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.19.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.2.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.20.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.22.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.23.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.24.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.25.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.26.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.27.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.28.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.29.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.31.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.32.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.35.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.36.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.37.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.38.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.39.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.4.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.40.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.41.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.44.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.45.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.46.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.47.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.49.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.51.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.52.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.53.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.54.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.57.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.58.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.59.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.6.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.60.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.61.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.62.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.7.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.8.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.9.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.1.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.10.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.12.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.13.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.14.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.15.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.16.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.18.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.2.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.20.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.21.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.24.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.25.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.26.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.27.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.29.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.32.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.33.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.34.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.35.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.36.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.38.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.39.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.4.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.41.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.42.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.43.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.44.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.46.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.5.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.6.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.7.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.9.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.1.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.10.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.12.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.13.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.14.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.15.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.16.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.18.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.2.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.20.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.21.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.24.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.25.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.26.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.27.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.29.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.32.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.33.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.34.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.35.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.36.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.38.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.39.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.4.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.41.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.42.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.43.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.44.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.46.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.5.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.6.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.7.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.9.jpg \n", - " creating: Images/training/Chlaenius aestivus/\n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_02_DORSAL.3.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_02_DORSAL.4.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_02_VENTRAL.3.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_02_VENTRAL.4.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_03_DORSAL.19.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_03_DORSAL.2.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_03_DORSAL.24.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_03_DORSAL.25.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_03_DORSAL.26.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_03_DORSAL.3.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_03_DORSAL.38.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_03_DORSAL.39.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_03_VENTRAL.19.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_03_VENTRAL.2.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_03_VENTRAL.24.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_03_VENTRAL.25.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_03_VENTRAL.26.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_03_VENTRAL.3.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_03_VENTRAL.38.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_03_VENTRAL.39.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_05_DORSAL.1.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_05_DORSAL.2.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_05_DORSAL.3.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_05_DORSAL.41.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_05_DORSAL.6.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_05_DORSAL.7.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_05_VENTRAL.1.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_05_VENTRAL.2.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_05_VENTRAL.3.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_05_VENTRAL.41.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_05_VENTRAL.6.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_05_VENTRAL.7.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_06_DORSAL.1.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_06_DORSAL.14.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_06_DORSAL.15.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_06_DORSAL.16.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_06_DORSAL.2.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_06_DORSAL.24.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_06_DORSAL.25.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_06_DORSAL.26.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_06_DORSAL.27.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_06_DORSAL.28.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_06_DORSAL.29.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_06_DORSAL.30.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_06_VENTRAL.1.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_06_VENTRAL.14.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_06_VENTRAL.15.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_06_VENTRAL.16.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_06_VENTRAL.2.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_06_VENTRAL.24.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_06_VENTRAL.25.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_06_VENTRAL.26.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_06_VENTRAL.27.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_06_VENTRAL.28.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_06_VENTRAL.29.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_06_VENTRAL.30.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesDELA_02_DORSAL.1.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesDELA_02_DORSAL.10.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesDELA_02_DORSAL.11.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesDELA_02_DORSAL.12.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesDELA_02_DORSAL.3.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesDELA_02_DORSAL.5.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesDELA_02_DORSAL.9.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesDELA_02_VENTRAL.1.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesDELA_02_VENTRAL.10.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesDELA_02_VENTRAL.11.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesDELA_02_VENTRAL.12.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesDELA_02_VENTRAL.3.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesDELA_02_VENTRAL.5.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesDELA_02_VENTRAL.9.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesDELA_03_DORSAL.1.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesDELA_03_DORSAL.2.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesDELA_03_VENTRAL.1.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesDELA_03_VENTRAL.2.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_01_DORSAL.1.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_01_DORSAL.13.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_01_DORSAL.15.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_01_DORSAL.16.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_01_DORSAL.17.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_01_DORSAL.2.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_01_DORSAL.3.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_01_DORSAL.4.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_01_DORSAL.5.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_01_DORSAL.7.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_01_VENTRAL.1.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_01_VENTRAL.13.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_01_VENTRAL.15.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_01_VENTRAL.16.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_01_VENTRAL.17.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_01_VENTRAL.2.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_01_VENTRAL.3.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_01_VENTRAL.4.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_01_VENTRAL.5.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_01_VENTRAL.7.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_02_DORSAL.12.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_02_DORSAL.2.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_02_DORSAL.3.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_02_DORSAL.4.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_02_DORSAL.5.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_02_DORSAL.8.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_02_DORSAL.9.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_02_VENTRAL.12.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_02_VENTRAL.2.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_02_VENTRAL.3.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_02_VENTRAL.4.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_02_VENTRAL.5.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_02_VENTRAL.8.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_02_VENTRAL.9.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_DORSAL.11.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_DORSAL.12.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_DORSAL.13.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_DORSAL.14.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_DORSAL.15.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_DORSAL.16.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_DORSAL.17.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_DORSAL.19.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_DORSAL.20.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_DORSAL.21.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_DORSAL.22.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_DORSAL.23.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_DORSAL.25.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_DORSAL.26.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_DORSAL.27.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_DORSAL.29.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_DORSAL.30.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_VENTRAL.11.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_VENTRAL.12.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_VENTRAL.13.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_VENTRAL.14.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_VENTRAL.15.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_VENTRAL.16.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_VENTRAL.17.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_VENTRAL.19.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_VENTRAL.20.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_VENTRAL.21.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_VENTRAL.22.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_VENTRAL.23.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_VENTRAL.25.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_VENTRAL.26.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_VENTRAL.27.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_VENTRAL.29.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_VENTRAL.30.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_DORSAL.1.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_DORSAL.10.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_DORSAL.2.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_DORSAL.21.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_DORSAL.22.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_DORSAL.23.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_DORSAL.24.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_DORSAL.25.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_DORSAL.26.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_DORSAL.27.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_DORSAL.28.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_DORSAL.29.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_DORSAL.30.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_DORSAL.4.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_DORSAL.5.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_DORSAL.6.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_DORSAL.7.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_DORSAL.8.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_DORSAL.9.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_VENTRAL.1.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_VENTRAL.10.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_VENTRAL.2.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_VENTRAL.21.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_VENTRAL.22.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_VENTRAL.23.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_VENTRAL.24.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_VENTRAL.25.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_VENTRAL.26.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_VENTRAL.27.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_VENTRAL.28.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_VENTRAL.29.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_VENTRAL.30.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_VENTRAL.4.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_VENTRAL.5.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_VENTRAL.6.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_VENTRAL.7.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_VENTRAL.8.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_VENTRAL.9.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_04_DORSAL.1.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_04_DORSAL.10.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_04_DORSAL.11.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_04_DORSAL.12.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_04_DORSAL.13.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_04_DORSAL.15.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_04_DORSAL.16.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_04_DORSAL.3.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_04_DORSAL.5.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_04_DORSAL.6.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_04_DORSAL.7.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_04_DORSAL.8.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_04_DORSAL.9.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_04_VENTRAL.1.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_04_VENTRAL.10.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_04_VENTRAL.11.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_04_VENTRAL.12.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_04_VENTRAL.13.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_04_VENTRAL.15.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_04_VENTRAL.16.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_04_VENTRAL.3.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_04_VENTRAL.5.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_04_VENTRAL.6.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_04_VENTRAL.7.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_04_VENTRAL.8.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_04_VENTRAL.9.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_DORSAL.1.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_DORSAL.11.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_DORSAL.13.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_DORSAL.14.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_DORSAL.15.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_DORSAL.16.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_DORSAL.17.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_DORSAL.18.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_DORSAL.20.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_DORSAL.21.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_DORSAL.22.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_DORSAL.23.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_DORSAL.24.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_DORSAL.3.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_DORSAL.4.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_DORSAL.5.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_DORSAL.6.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_DORSAL.7.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_DORSAL.8.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_VENTRAL.1.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_VENTRAL.11.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_VENTRAL.13.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_VENTRAL.14.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_VENTRAL.15.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_VENTRAL.16.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_VENTRAL.17.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_VENTRAL.18.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_VENTRAL.20.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_VENTRAL.21.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_VENTRAL.22.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_VENTRAL.23.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_VENTRAL.24.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_VENTRAL.3.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_VENTRAL.4.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_VENTRAL.5.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_VENTRAL.6.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_VENTRAL.7.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_VENTRAL.8.jpg \n", - " creating: Images/training/Cicindela punctulata/\n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.1.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.11.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.12.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.13.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.15.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.16.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.17.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.19.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.2.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.20.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.21.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.22.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.24.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.25.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.26.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.27.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.28.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.3.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.31.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.32.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.33.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.34.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.37.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.38.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.39.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.4.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.40.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.42.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.43.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.45.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.46.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.47.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.48.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.49.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.5.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.50.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.51.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.52.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.53.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.6.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.7.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.1.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.11.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.12.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.13.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.15.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.16.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.17.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.19.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.2.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.20.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.21.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.22.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.24.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.25.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.26.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.27.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.28.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.3.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.31.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.32.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.33.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.34.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.37.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.38.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.39.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.4.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.40.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.42.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.43.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.45.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.46.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.47.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.48.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.49.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.5.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.50.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.51.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.52.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.53.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.6.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.7.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.1.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.10.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.11.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.12.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.13.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.15.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.16.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.17.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.18.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.19.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.2.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.20.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.21.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.22.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.23.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.24.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.25.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.26.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.27.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.28.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.29.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.3.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.30.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.33.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.34.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.35.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.36.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.38.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.4.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.40.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.42.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.5.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.6.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.7.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.8.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.9.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.1.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.10.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.11.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.12.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.13.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.15.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.16.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.17.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.18.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.19.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.2.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.20.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.21.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.22.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.23.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.24.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.25.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.26.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.27.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.28.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.29.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.3.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.30.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.33.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.34.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.35.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.36.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.38.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.4.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.40.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.42.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.5.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.6.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.7.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.8.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.9.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.1.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.10.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.11.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.12.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.13.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.15.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.16.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.17.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.18.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.19.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.2.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.20.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.21.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.22.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.24.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.26.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.27.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.28.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.3.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.30.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.31.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.32.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.33.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.34.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.37.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.38.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.39.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.4.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.40.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.41.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.42.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.43.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.44.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.45.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.46.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.47.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.49.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.50.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.52.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.54.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.55.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.56.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.58.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.6.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.61.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.62.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.63.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.64.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.7.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.8.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.1.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.10.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.11.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.12.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.13.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.15.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.16.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.17.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.18.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.19.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.2.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.20.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.21.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.22.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.24.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.26.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.27.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.28.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.3.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.30.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.31.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.32.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.33.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.34.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.37.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.38.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.39.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.4.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.40.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.41.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.42.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.43.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.44.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.45.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.46.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.47.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.49.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.50.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.52.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.54.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.55.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.56.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.58.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.6.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.61.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.62.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.63.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.64.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.7.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.8.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.1.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.10.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.12.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.13.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.14.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.15.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.16.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.2.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.20.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.21.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.22.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.23.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.24.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.25.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.26.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.27.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.28.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.29.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.3.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.30.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.31.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.34.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.35.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.36.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.39.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.41.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.42.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.43.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.45.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.46.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.47.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.48.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.49.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.5.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.52.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.53.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.54.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.55.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.57.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.58.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.6.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.60.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.61.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.62.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.63.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.64.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.66.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.67.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.68.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.69.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.7.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.70.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.71.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.72.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.73.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.74.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.75.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.76.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.77.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.78.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.79.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.8.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.80.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.81.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.82.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.84.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.85.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.86.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.89.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.9.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.90.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.91.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.92.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.93.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.94.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.95.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.96.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.97.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.98.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.1.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.10.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.12.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.13.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.14.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.15.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.16.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.2.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.20.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.21.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.22.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.23.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.24.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.25.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.26.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.27.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.28.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.29.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.3.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.30.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.31.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.34.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.35.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.36.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.39.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.41.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.42.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.43.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.45.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.46.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.47.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.48.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.49.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.5.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.52.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.53.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.54.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.55.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.57.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.58.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.6.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.60.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.61.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.62.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.63.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.64.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.66.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.67.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.68.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.69.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.7.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.70.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.71.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.72.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.73.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.74.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.75.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.76.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.77.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.78.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.79.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.8.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.80.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.81.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.82.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.84.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.85.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.86.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.89.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.9.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.90.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.91.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.92.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.93.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.94.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.95.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.96.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.97.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.98.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_DORSAL.1.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_DORSAL.10.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_DORSAL.11.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_DORSAL.12.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_DORSAL.13.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_DORSAL.14.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_DORSAL.15.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_DORSAL.16.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_DORSAL.17.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_DORSAL.18.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_DORSAL.19.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_DORSAL.20.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_DORSAL.21.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_DORSAL.22.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_DORSAL.23.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_DORSAL.24.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_DORSAL.25.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_DORSAL.27.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_DORSAL.28.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_DORSAL.4.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_DORSAL.5.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_DORSAL.6.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_DORSAL.7.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_DORSAL.8.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_DORSAL.9.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_VENTRAL.1.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_VENTRAL.10.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_VENTRAL.11.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_VENTRAL.12.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_VENTRAL.13.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_VENTRAL.14.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_VENTRAL.15.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_VENTRAL.16.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_VENTRAL.17.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_VENTRAL.18.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_VENTRAL.19.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_VENTRAL.20.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_VENTRAL.21.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_VENTRAL.22.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_VENTRAL.23.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_VENTRAL.24.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_VENTRAL.25.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_VENTRAL.27.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_VENTRAL.28.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_VENTRAL.4.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_VENTRAL.5.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_VENTRAL.6.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_VENTRAL.7.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_VENTRAL.8.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_VENTRAL.9.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_06_DORSAL.1.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_06_DORSAL.10.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_06_DORSAL.11.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_06_DORSAL.12.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_06_DORSAL.2.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_06_DORSAL.3.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_06_DORSAL.4.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_06_DORSAL.5.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_06_DORSAL.6.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_06_DORSAL.7.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_06_DORSAL.8.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_06_DORSAL.9.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_06_VENTRAL.1.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_06_VENTRAL.10.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_06_VENTRAL.11.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_06_VENTRAL.12.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_06_VENTRAL.2.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_06_VENTRAL.3.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_06_VENTRAL.4.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_06_VENTRAL.5.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_06_VENTRAL.6.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_06_VENTRAL.7.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_06_VENTRAL.8.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_06_VENTRAL.9.jpg \n", - " creating: Images/training/Cyclotrachelus furtivus/\n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.1.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.11.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.12.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.14.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.15.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.16.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.17.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.18.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.19.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.2.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.20.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.22.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.23.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.24.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.25.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.26.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.27.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.28.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.29.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.3.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.30.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.31.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.32.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.33.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.34.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.35.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.36.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.37.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.38.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.39.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.4.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.40.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.41.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.42.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.43.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.45.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.46.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.47.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.49.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.50.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.51.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.6.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.7.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.8.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.9.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.1.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.11.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.12.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.14.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.15.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.16.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.17.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.18.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.19.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.2.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.20.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.22.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.23.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.24.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.25.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.26.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.27.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.28.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.29.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.3.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.30.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.31.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.32.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.33.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.34.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.35.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.36.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.37.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.38.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.39.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.4.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.40.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.41.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.42.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.43.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.45.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.46.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.47.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.49.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.50.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.51.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.6.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.7.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.8.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.9.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_02_DORSAL.1.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_02_DORSAL.10.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_02_DORSAL.12.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_02_DORSAL.19.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_02_DORSAL.2.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_02_DORSAL.5.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_02_DORSAL.7.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_02_DORSAL.9.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_02_VENTRAL.1.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_02_VENTRAL.10.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_02_VENTRAL.12.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_02_VENTRAL.19.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_02_VENTRAL.2.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_02_VENTRAL.5.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_02_VENTRAL.7.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_02_VENTRAL.9.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.1.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.13.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.14.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.15.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.17.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.18.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.21.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.23.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.27.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.28.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.29.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.30.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.31.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.33.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.34.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.35.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.36.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.37.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.5.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.6.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.7.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.8.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.9.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.1.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.13.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.14.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.15.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.17.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.18.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.21.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.23.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.27.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.28.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.29.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.30.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.31.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.33.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.34.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.35.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.36.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.37.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.5.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.6.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.7.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.8.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.9.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_05_DORSAL.10.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_05_DORSAL.12.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_05_DORSAL.14.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_05_DORSAL.15.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_05_DORSAL.16.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_05_DORSAL.17.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_05_DORSAL.18.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_05_DORSAL.20.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_05_DORSAL.35.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_05_VENTRAL.10.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_05_VENTRAL.12.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_05_VENTRAL.14.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_05_VENTRAL.15.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_05_VENTRAL.16.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_05_VENTRAL.17.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_05_VENTRAL.18.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_05_VENTRAL.20.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_05_VENTRAL.35.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_06_DORSAL.10.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_06_DORSAL.12.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_06_DORSAL.32.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_06_DORSAL.33.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_06_DORSAL.34.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_06_DORSAL.35.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_06_DORSAL.36.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_06_DORSAL.5.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_06_VENTRAL.10.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_06_VENTRAL.12.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_06_VENTRAL.32.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_06_VENTRAL.33.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_06_VENTRAL.34.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_06_VENTRAL.35.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_06_VENTRAL.36.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_06_VENTRAL.5.jpg \n", - " creating: Images/training/Cyclotrachelus torvus/\n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesKONZ_05_DORSAL.10.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesKONZ_05_DORSAL.11.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesKONZ_05_DORSAL.12.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesKONZ_05_DORSAL.13.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesKONZ_05_DORSAL.14.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesKONZ_05_DORSAL.2.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesKONZ_05_DORSAL.3.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesKONZ_05_DORSAL.4.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesKONZ_05_DORSAL.5.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesKONZ_05_DORSAL.6.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesKONZ_05_DORSAL.7.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesKONZ_05_DORSAL.8.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesKONZ_05_DORSAL.9.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesKONZ_05_VENTRAL.10.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesKONZ_05_VENTRAL.11.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesKONZ_05_VENTRAL.12.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesKONZ_05_VENTRAL.13.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesKONZ_05_VENTRAL.14.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesKONZ_05_VENTRAL.2.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesKONZ_05_VENTRAL.3.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesKONZ_05_VENTRAL.4.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesKONZ_05_VENTRAL.5.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesKONZ_05_VENTRAL.6.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesKONZ_05_VENTRAL.7.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesKONZ_05_VENTRAL.8.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesKONZ_05_VENTRAL.9.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_01_DORSAL.11.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_01_DORSAL.3.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_01_DORSAL.4.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_01_DORSAL.5.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_01_DORSAL.6.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_01_VENTRAL.11.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_01_VENTRAL.3.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_01_VENTRAL.4.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_01_VENTRAL.5.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_01_VENTRAL.6.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_DORSAL.10.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_DORSAL.11.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_DORSAL.12.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_DORSAL.13.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_DORSAL.14.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_DORSAL.15.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_DORSAL.16.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_DORSAL.17.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_DORSAL.18.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_DORSAL.19.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_DORSAL.20.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_DORSAL.21.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_DORSAL.22.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_DORSAL.23.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_DORSAL.25.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_DORSAL.26.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_DORSAL.5.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_DORSAL.7.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_DORSAL.8.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_DORSAL.9.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_VENTRAL.10.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_VENTRAL.11.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_VENTRAL.12.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_VENTRAL.13.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_VENTRAL.14.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_VENTRAL.15.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_VENTRAL.16.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_VENTRAL.17.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_VENTRAL.18.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_VENTRAL.19.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_VENTRAL.20.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_VENTRAL.21.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_VENTRAL.22.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_VENTRAL.23.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_VENTRAL.25.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_VENTRAL.26.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_VENTRAL.5.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_VENTRAL.7.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_VENTRAL.8.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_VENTRAL.9.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_03_DORSAL.10.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_03_DORSAL.11.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_03_DORSAL.13.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_03_DORSAL.14.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_03_DORSAL.16.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_03_DORSAL.17.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_03_DORSAL.19.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_03_DORSAL.20.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_03_DORSAL.21.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_03_DORSAL.23.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_03_DORSAL.24.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_03_DORSAL.8.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_03_DORSAL.9.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_03_VENTRAL.10.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_03_VENTRAL.11.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_03_VENTRAL.13.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_03_VENTRAL.14.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_03_VENTRAL.16.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_03_VENTRAL.17.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_03_VENTRAL.19.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_03_VENTRAL.20.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_03_VENTRAL.21.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_03_VENTRAL.23.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_03_VENTRAL.24.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_03_VENTRAL.8.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_03_VENTRAL.9.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.1.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.10.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.11.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.12.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.14.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.15.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.16.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.17.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.18.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.2.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.20.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.21.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.22.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.23.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.24.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.25.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.26.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.28.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.31.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.32.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.34.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.35.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.36.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.37.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.38.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.4.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.41.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.42.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.43.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.44.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.45.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.46.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.47.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.48.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.49.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.5.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.50.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.51.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.52.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.53.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.54.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.55.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.56.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.57.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.58.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.59.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.6.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.7.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.8.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.9.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.1.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.10.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.11.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.12.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.14.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.15.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.16.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.17.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.18.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.2.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.20.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.21.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.22.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.23.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.24.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.25.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.26.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.28.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.31.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.32.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.34.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.35.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.36.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.37.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.38.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.4.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.41.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.42.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.43.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.44.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.45.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.46.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.47.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.48.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.49.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.5.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.50.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.51.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.52.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.53.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.54.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.55.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.56.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.57.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.58.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.59.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.6.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.7.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.8.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.9.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.1.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.11.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.13.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.14.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.15.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.16.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.17.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.18.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.19.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.2.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.20.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.21.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.23.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.24.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.25.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.26.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.27.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.29.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.3.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.30.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.4.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.5.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.6.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.8.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.9.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.1.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.11.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.13.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.14.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.15.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.16.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.17.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.18.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.19.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.2.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.20.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.21.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.23.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.24.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.25.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.26.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.27.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.29.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.3.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.30.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.4.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.5.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.6.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.8.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.9.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_DORSAL.1.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_DORSAL.10.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_DORSAL.11.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_DORSAL.13.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_DORSAL.14.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_DORSAL.15.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_DORSAL.16.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_DORSAL.18.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_DORSAL.19.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_DORSAL.2.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_DORSAL.20.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_DORSAL.21.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_DORSAL.3.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_DORSAL.4.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_DORSAL.5.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_DORSAL.6.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_DORSAL.8.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_DORSAL.9.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_VENTRAL.1.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_VENTRAL.10.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_VENTRAL.11.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_VENTRAL.13.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_VENTRAL.14.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_VENTRAL.15.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_VENTRAL.16.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_VENTRAL.18.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_VENTRAL.19.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_VENTRAL.2.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_VENTRAL.20.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_VENTRAL.21.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_VENTRAL.3.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_VENTRAL.4.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_VENTRAL.5.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_VENTRAL.6.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_VENTRAL.8.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_VENTRAL.9.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_DORSAL.1.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_DORSAL.10.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_DORSAL.12.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_DORSAL.14.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_DORSAL.15.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_DORSAL.16.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_DORSAL.17.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_DORSAL.18.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_DORSAL.19.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_DORSAL.22.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_DORSAL.23.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_DORSAL.24.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_DORSAL.25.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_DORSAL.3.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_DORSAL.5.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_DORSAL.7.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_DORSAL.8.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_DORSAL.9.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_VENTRAL.1.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_VENTRAL.10.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_VENTRAL.12.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_VENTRAL.14.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_VENTRAL.15.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_VENTRAL.16.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_VENTRAL.17.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_VENTRAL.18.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_VENTRAL.19.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_VENTRAL.22.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_VENTRAL.23.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_VENTRAL.24.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_VENTRAL.25.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_VENTRAL.3.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_VENTRAL.5.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_VENTRAL.7.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_VENTRAL.8.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_VENTRAL.9.jpg \n", - " creating: Images/training/Discoderus parallelus/\n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.10.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.12.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.13.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.14.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.16.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.17.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.18.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.19.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.2.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.20.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.21.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.22.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.23.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.24.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.25.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.26.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.27.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.28.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.29.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.3.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.30.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.31.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.32.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.33.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.34.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.4.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.5.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.6.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.7.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.8.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.10.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.12.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.13.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.14.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.16.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.17.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.18.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.19.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.2.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.20.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.21.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.22.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.23.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.24.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.25.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.26.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.27.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.28.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.29.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.3.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.30.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.31.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.32.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.33.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.34.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.4.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.5.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.6.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.7.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.8.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.100.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.101.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.103.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.105.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.106.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.107.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.108.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.109.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.110.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.111.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.112.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.113.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.114.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.115.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.117.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.118.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.119.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.12.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.120.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.122.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.124.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.125.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.126.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.127.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.128.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.129.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.13.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.130.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.131.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.132.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.134.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.135.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.137.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.138.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.139.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.14.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.140.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.141.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.142.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.144.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.145.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.147.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.148.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.149.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.15.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.151.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.153.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.154.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.155.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.156.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.159.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.160.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.161.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.162.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.163.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.164.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.165.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.166.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.167.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.168.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.169.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.17.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.170.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.171.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.172.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.175.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.176.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.177.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.178.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.179.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.181.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.187.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.188.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.189.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.19.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.191.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.192.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.193.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.195.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.196.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.197.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.198.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.2.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.20.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.200.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.201.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.202.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.204.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.205.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.206.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.207.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.208.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.209.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.21.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.210.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.212.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.213.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.214.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.215.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.216.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.217.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.218.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.219.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.22.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.220.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.27.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.28.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.29.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.31.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.32.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.33.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.34.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.36.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.37.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.38.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.39.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.4.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.40.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.41.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.42.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.43.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.44.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.46.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.47.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.48.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.49.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.5.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.50.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.52.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.53.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.54.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.55.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.56.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.57.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.58.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.6.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.60.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.61.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.62.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.63.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.64.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.65.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.66.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.67.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.68.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.69.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.7.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.70.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.72.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.73.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.74.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.75.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.76.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.77.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.79.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.8.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.81.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.82.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.83.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.84.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.86.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.87.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.88.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.9.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.91.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.92.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.93.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.95.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.96.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.97.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.99.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.100.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.101.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.103.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.105.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.106.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.107.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.108.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.109.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.110.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.111.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.112.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.113.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.114.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.115.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.117.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.118.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.119.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.12.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.120.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.122.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.124.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.125.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.126.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.127.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.128.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.129.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.13.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.130.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.131.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.132.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.134.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.135.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.137.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.138.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.139.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.14.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.140.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.141.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.142.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.144.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.145.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.147.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.148.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.149.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.15.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.151.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.153.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.154.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.155.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.156.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.159.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.160.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.161.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.162.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.163.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.164.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.165.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.166.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.167.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.168.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.169.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.17.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.170.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.171.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.172.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.175.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.176.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.177.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.178.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.179.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.181.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.187.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.188.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.189.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.19.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.191.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.192.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.193.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.195.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.196.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.197.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.198.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.2.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.20.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.200.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.201.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.202.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.204.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.205.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.206.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.207.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.208.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.209.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.21.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.210.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.212.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.213.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.214.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.215.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.216.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.217.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.218.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.219.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.22.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.220.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.27.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.28.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.29.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.31.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.32.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.33.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.34.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.36.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.37.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.38.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.39.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.4.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.40.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.41.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.42.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.43.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.44.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.46.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.47.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.48.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.49.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.5.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.50.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.52.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.53.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.54.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.55.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.56.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.57.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.58.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.6.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.60.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.61.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.62.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.63.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.64.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.65.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.66.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.67.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.68.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.69.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.7.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.70.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.72.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.73.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.74.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.75.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.76.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.77.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.79.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.8.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.81.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.82.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.83.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.84.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.86.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.87.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.88.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.9.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.91.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.92.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.93.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.95.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.96.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.97.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.99.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_DORSAL.1.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_DORSAL.10.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_DORSAL.11.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_DORSAL.12.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_DORSAL.13.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_DORSAL.15.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_DORSAL.17.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_DORSAL.18.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_DORSAL.19.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_DORSAL.20.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_DORSAL.4.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_DORSAL.5.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_DORSAL.6.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_DORSAL.7.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_DORSAL.8.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_DORSAL.9.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_VENTRAL.1.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_VENTRAL.10.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_VENTRAL.11.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_VENTRAL.12.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_VENTRAL.13.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_VENTRAL.15.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_VENTRAL.17.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_VENTRAL.18.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_VENTRAL.19.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_VENTRAL.20.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_VENTRAL.4.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_VENTRAL.5.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_VENTRAL.6.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_VENTRAL.7.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_VENTRAL.8.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_VENTRAL.9.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_07_DORSAL.24.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_07_DORSAL.26.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_07_DORSAL.27.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_07_DORSAL.28.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_07_VENTRAL.24.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_07_VENTRAL.26.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_07_VENTRAL.27.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_07_VENTRAL.28.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_08_DORSAL.13.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_08_VENTRAL.13.jpg \n", - " creating: Images/training/Discoderus robustus/\n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_DORSAL.1.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_DORSAL.10.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_DORSAL.11.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_DORSAL.13.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_DORSAL.14.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_DORSAL.15.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_DORSAL.16.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_DORSAL.17.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_DORSAL.18.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_DORSAL.20.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_DORSAL.21.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_DORSAL.23.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_DORSAL.24.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_DORSAL.26.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_DORSAL.27.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_DORSAL.28.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_DORSAL.29.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_DORSAL.3.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_DORSAL.4.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_DORSAL.5.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_VENTRAL.1.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_VENTRAL.10.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_VENTRAL.11.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_VENTRAL.13.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_VENTRAL.14.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_VENTRAL.15.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_VENTRAL.16.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_VENTRAL.17.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_VENTRAL.18.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_VENTRAL.20.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_VENTRAL.21.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_VENTRAL.23.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_VENTRAL.24.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_VENTRAL.26.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_VENTRAL.27.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_VENTRAL.28.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_VENTRAL.29.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_VENTRAL.3.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_VENTRAL.4.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_VENTRAL.5.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_02_DORSAL.1.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_02_DORSAL.10.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_02_DORSAL.11.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_02_DORSAL.12.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_02_DORSAL.13.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_02_DORSAL.15.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_02_DORSAL.16.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_02_DORSAL.2.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_02_DORSAL.4.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_02_DORSAL.5.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_02_DORSAL.6.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_02_DORSAL.7.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_02_DORSAL.8.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_02_DORSAL.9.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_02_VENTRAL.1.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_02_VENTRAL.10.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_02_VENTRAL.11.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_02_VENTRAL.12.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_02_VENTRAL.13.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_02_VENTRAL.15.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_02_VENTRAL.16.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_02_VENTRAL.2.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_02_VENTRAL.4.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_02_VENTRAL.5.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_02_VENTRAL.6.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_02_VENTRAL.7.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_02_VENTRAL.8.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_02_VENTRAL.9.jpg \n", - " creating: Images/training/Euryderus grossus/\n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.16.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.17.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.18.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.22.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.23.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.25.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.26.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.28.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.29.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.31.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.32.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.33.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.36.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.38.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.40.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.41.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.42.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.43.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.44.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.45.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.46.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.47.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.48.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.49.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.50.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.51.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.52.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.54.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.55.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.56.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.57.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.59.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.61.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.62.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.63.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.64.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.65.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.66.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.69.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.16.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.17.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.18.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.22.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.23.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.25.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.26.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.28.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.29.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.31.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.32.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.33.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.36.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.38.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.40.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.41.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.42.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.43.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.44.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.45.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.46.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.47.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.48.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.49.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.50.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.51.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.52.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.54.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.55.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.56.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.57.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.59.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.61.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.62.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.63.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.64.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.65.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.66.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.69.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_07_DORSAL.16.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_07_DORSAL.17.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_07_DORSAL.18.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_07_DORSAL.20.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_07_DORSAL.21.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_07_VENTRAL.16.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_07_VENTRAL.17.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_07_VENTRAL.18.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_07_VENTRAL.20.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_07_VENTRAL.21.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_10_DORSAL.4.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_10_DORSAL.6.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_10_VENTRAL.4.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_10_VENTRAL.6.jpg \n", - " creating: Images/training/Pasimachus californicus/\n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_01_DORSAL.11.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_01_DORSAL.12.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_01_DORSAL.14.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_01_DORSAL.15.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_01_DORSAL.2.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_01_DORSAL.3.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_01_DORSAL.4.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_01_DORSAL.5.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_01_DORSAL.6.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_01_DORSAL.7.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_01_DORSAL.8.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_01_DORSAL.9.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_01_VENTRAL.11.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_01_VENTRAL.12.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_01_VENTRAL.14.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_01_VENTRAL.15.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_01_VENTRAL.2.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_01_VENTRAL.3.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_01_VENTRAL.4.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_01_VENTRAL.5.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_01_VENTRAL.6.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_01_VENTRAL.7.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_01_VENTRAL.8.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_01_VENTRAL.9.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_02_DORSAL.17.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_02_DORSAL.19.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_02_DORSAL.20.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_02_DORSAL.21.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_02_DORSAL.22.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_02_DORSAL.24.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_02_VENTRAL.17.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_02_VENTRAL.19.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_02_VENTRAL.20.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_02_VENTRAL.21.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_02_VENTRAL.22.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_02_VENTRAL.24.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_DORSAL.1.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_DORSAL.10.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_DORSAL.11.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_DORSAL.12.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_DORSAL.13.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_DORSAL.14.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_DORSAL.15.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_DORSAL.16.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_DORSAL.17.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_DORSAL.18.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_DORSAL.19.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_DORSAL.2.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_DORSAL.20.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_DORSAL.21.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_DORSAL.22.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_DORSAL.4.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_DORSAL.5.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_DORSAL.6.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_DORSAL.7.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_DORSAL.8.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_DORSAL.9.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_VENTRAL.1.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_VENTRAL.10.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_VENTRAL.11.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_VENTRAL.12.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_VENTRAL.13.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_VENTRAL.14.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_VENTRAL.15.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_VENTRAL.16.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_VENTRAL.17.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_VENTRAL.18.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_VENTRAL.19.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_VENTRAL.2.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_VENTRAL.20.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_VENTRAL.21.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_VENTRAL.22.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_VENTRAL.4.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_VENTRAL.5.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_VENTRAL.6.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_VENTRAL.7.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_VENTRAL.8.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_VENTRAL.9.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_04_DORSAL.1.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_04_DORSAL.11.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_04_DORSAL.13.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_04_DORSAL.2.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_04_DORSAL.3.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_04_DORSAL.4.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_04_DORSAL.5.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_04_DORSAL.6.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_04_DORSAL.7.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_04_DORSAL.8.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_04_DORSAL.9.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_04_VENTRAL.1.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_04_VENTRAL.11.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_04_VENTRAL.13.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_04_VENTRAL.2.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_04_VENTRAL.3.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_04_VENTRAL.4.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_04_VENTRAL.5.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_04_VENTRAL.6.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_04_VENTRAL.7.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_04_VENTRAL.8.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_04_VENTRAL.9.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_05_DORSAL.19.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_05_DORSAL.20.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_05_VENTRAL.19.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_05_VENTRAL.20.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_06_DORSAL.3.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_06_DORSAL.4.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_06_DORSAL.5.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_06_VENTRAL.3.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_06_VENTRAL.4.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_06_VENTRAL.5.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_07_DORSAL.10.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_07_DORSAL.7.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_07_DORSAL.9.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_07_VENTRAL.10.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_07_VENTRAL.7.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_07_VENTRAL.9.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_08_DORSAL.11.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_08_DORSAL.12.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_08_DORSAL.13.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_08_DORSAL.14.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_08_DORSAL.15.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_08_DORSAL.16.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_08_DORSAL.17.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_08_DORSAL.19.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_08_DORSAL.5.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_08_DORSAL.7.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_08_DORSAL.8.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_08_VENTRAL.11.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_08_VENTRAL.12.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_08_VENTRAL.13.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_08_VENTRAL.14.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_08_VENTRAL.15.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_08_VENTRAL.16.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_08_VENTRAL.17.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_08_VENTRAL.19.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_08_VENTRAL.5.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_08_VENTRAL.7.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_08_VENTRAL.8.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_09_DORSAL.10.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_09_DORSAL.12.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_09_DORSAL.4.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_09_DORSAL.5.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_09_DORSAL.6.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_09_DORSAL.7.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_09_DORSAL.8.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_09_DORSAL.9.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_09_VENTRAL.10.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_09_VENTRAL.12.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_09_VENTRAL.4.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_09_VENTRAL.5.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_09_VENTRAL.6.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_09_VENTRAL.7.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_09_VENTRAL.8.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_09_VENTRAL.9.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_01_DORSAL.1.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_01_DORSAL.2.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_01_DORSAL.3.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_01_DORSAL.4.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_01_DORSAL.5.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_01_DORSAL.6.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_01_DORSAL.7.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_01_VENTRAL.1.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_01_VENTRAL.2.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_01_VENTRAL.3.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_01_VENTRAL.4.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_01_VENTRAL.5.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_01_VENTRAL.6.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_01_VENTRAL.7.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_02_DORSAL.1.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_02_DORSAL.10.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_02_DORSAL.2.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_02_DORSAL.4.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_02_DORSAL.5.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_02_DORSAL.6.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_02_DORSAL.7.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_02_DORSAL.9.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_02_VENTRAL.1.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_02_VENTRAL.10.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_02_VENTRAL.2.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_02_VENTRAL.4.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_02_VENTRAL.5.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_02_VENTRAL.6.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_02_VENTRAL.7.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_02_VENTRAL.9.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_03_DORSAL.2.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_03_DORSAL.3.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_03_DORSAL.4.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_03_DORSAL.5.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_03_DORSAL.7.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_03_DORSAL.8.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_03_DORSAL.9.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_03_VENTRAL.2.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_03_VENTRAL.3.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_03_VENTRAL.4.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_03_VENTRAL.5.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_03_VENTRAL.7.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_03_VENTRAL.8.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_03_VENTRAL.9.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_DORSAL.1.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_DORSAL.10.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_DORSAL.11.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_DORSAL.12.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_DORSAL.14.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_DORSAL.15.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_DORSAL.16.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_DORSAL.17.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_DORSAL.18.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_DORSAL.3.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_DORSAL.4.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_DORSAL.5.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_DORSAL.6.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_DORSAL.7.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_DORSAL.8.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_DORSAL.9.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_VENTRAL.1.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_VENTRAL.10.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_VENTRAL.11.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_VENTRAL.12.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_VENTRAL.14.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_VENTRAL.15.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_VENTRAL.16.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_VENTRAL.17.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_VENTRAL.18.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_VENTRAL.3.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_VENTRAL.4.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_VENTRAL.5.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_VENTRAL.6.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_VENTRAL.7.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_VENTRAL.8.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_VENTRAL.9.jpg \n", - " creating: Images/training/Pasimachus elongatus/\n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_01_DORSAL.2.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_01_DORSAL.3.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_01_DORSAL.4.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_01_VENTRAL.2.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_01_VENTRAL.3.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_01_VENTRAL.4.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_02_DORSAL.36.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_02_DORSAL.37.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_02_DORSAL.38.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_02_DORSAL.39.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_02_DORSAL.40.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_02_DORSAL.41.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_02_DORSAL.42.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_02_DORSAL.43.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_02_DORSAL.44.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_02_DORSAL.45.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_02_VENTRAL.36.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_02_VENTRAL.37.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_02_VENTRAL.38.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_02_VENTRAL.39.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_02_VENTRAL.40.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_02_VENTRAL.41.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_02_VENTRAL.42.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_02_VENTRAL.43.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_02_VENTRAL.44.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_02_VENTRAL.45.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_04_DORSAL.12.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_04_DORSAL.13.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_04_DORSAL.16.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_04_DORSAL.17.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_04_DORSAL.19.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_04_DORSAL.20.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_04_DORSAL.21.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_04_DORSAL.22.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_04_DORSAL.5.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_04_DORSAL.7.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_04_DORSAL.8.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_04_VENTRAL.12.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_04_VENTRAL.13.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_04_VENTRAL.16.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_04_VENTRAL.17.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_04_VENTRAL.19.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_04_VENTRAL.20.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_04_VENTRAL.21.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_04_VENTRAL.22.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_04_VENTRAL.5.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_04_VENTRAL.7.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_04_VENTRAL.8.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_06_DORSAL.27.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_06_DORSAL.28.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_06_DORSAL.30.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_06_DORSAL.32.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_06_DORSAL.33.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_06_DORSAL.34.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_06_DORSAL.35.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_06_VENTRAL.27.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_06_VENTRAL.28.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_06_VENTRAL.30.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_06_VENTRAL.32.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_06_VENTRAL.33.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_06_VENTRAL.34.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_06_VENTRAL.35.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_07_DORSAL.11.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_07_DORSAL.12.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_07_DORSAL.14.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_07_DORSAL.15.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_07_DORSAL.4.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_07_DORSAL.5.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_07_DORSAL.8.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_07_DORSAL.9.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_07_VENTRAL.11.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_07_VENTRAL.12.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_07_VENTRAL.14.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_07_VENTRAL.15.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_07_VENTRAL.4.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_07_VENTRAL.5.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_07_VENTRAL.8.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_07_VENTRAL.9.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_08_DORSAL.1.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_08_DORSAL.2.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_08_DORSAL.3.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_08_DORSAL.4.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_08_DORSAL.5.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_08_VENTRAL.1.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_08_VENTRAL.2.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_08_VENTRAL.3.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_08_VENTRAL.4.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_08_VENTRAL.5.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_09_DORSAL.1.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_09_DORSAL.10.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_09_DORSAL.11.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_09_DORSAL.2.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_09_DORSAL.3.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_09_DORSAL.4.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_09_DORSAL.5.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_09_DORSAL.6.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_09_DORSAL.7.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_09_DORSAL.8.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_09_VENTRAL.1.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_09_VENTRAL.10.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_09_VENTRAL.11.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_09_VENTRAL.2.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_09_VENTRAL.3.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_09_VENTRAL.4.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_09_VENTRAL.5.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_09_VENTRAL.6.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_09_VENTRAL.7.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_09_VENTRAL.8.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_10_DORSAL.1.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_10_DORSAL.12.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_10_DORSAL.2.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_10_DORSAL.5.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_10_DORSAL.7.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_10_VENTRAL.1.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_10_VENTRAL.12.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_10_VENTRAL.2.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_10_VENTRAL.5.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_10_VENTRAL.7.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_11_DORSAL.1.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_11_DORSAL.2.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_11_VENTRAL.1.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_11_VENTRAL.2.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_02_DORSAL.1.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_02_DORSAL.10.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_02_DORSAL.12.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_02_DORSAL.2.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_02_DORSAL.3.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_02_DORSAL.4.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_02_DORSAL.6.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_02_DORSAL.8.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_02_DORSAL.9.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_02_VENTRAL.1.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_02_VENTRAL.10.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_02_VENTRAL.12.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_02_VENTRAL.2.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_02_VENTRAL.3.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_02_VENTRAL.4.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_02_VENTRAL.6.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_02_VENTRAL.8.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_02_VENTRAL.9.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_03_DORSAL.24.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_03_VENTRAL.24.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_05_DORSAL.16.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_05_VENTRAL.16.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_06_DORSAL.10.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_06_DORSAL.7.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_06_DORSAL.9.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_06_VENTRAL.10.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_06_VENTRAL.7.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_06_VENTRAL.9.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_07_DORSAL.1.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_07_DORSAL.3.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_07_DORSAL.4.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_07_DORSAL.5.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_07_DORSAL.6.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_07_VENTRAL.1.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_07_VENTRAL.3.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_07_VENTRAL.4.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_07_VENTRAL.5.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_07_VENTRAL.6.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_08_DORSAL.1.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_08_DORSAL.2.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_08_DORSAL.3.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_08_VENTRAL.1.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_08_VENTRAL.2.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_08_VENTRAL.3.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_09_DORSAL.1.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_09_DORSAL.2.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_09_DORSAL.3.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_09_VENTRAL.1.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_09_VENTRAL.2.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_09_VENTRAL.3.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesNOGP_01_DORSAL.2.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesNOGP_01_VENTRAL.2.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesNOGP_07_DORSAL.26.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesNOGP_07_VENTRAL.26.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesUKFS_03_DORSAL.8.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesUKFS_03_VENTRAL.8.jpg \n", - " creating: Images/training/Pasimachus strenuus/\n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_01_DORSAL.11.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_01_DORSAL.12.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_01_DORSAL.13.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_01_DORSAL.14.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_01_DORSAL.15.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_01_VENTRAL.11.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_01_VENTRAL.12.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_01_VENTRAL.13.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_01_VENTRAL.14.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_01_VENTRAL.15.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_02_DORSAL.1.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_02_DORSAL.3.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_02_DORSAL.6.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_02_DORSAL.7.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_02_DORSAL.8.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_02_VENTRAL.1.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_02_VENTRAL.3.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_02_VENTRAL.6.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_02_VENTRAL.7.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_02_VENTRAL.8.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_03_DORSAL.16.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_03_DORSAL.17.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_03_DORSAL.19.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_03_VENTRAL.16.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_03_VENTRAL.17.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_03_VENTRAL.19.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_04_DORSAL.5.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_04_DORSAL.7.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_04_DORSAL.8.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_04_VENTRAL.5.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_04_VENTRAL.7.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_04_VENTRAL.8.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_05_DORSAL.11.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_05_DORSAL.12.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_05_DORSAL.13.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_05_DORSAL.14.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_05_DORSAL.15.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_05_VENTRAL.11.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_05_VENTRAL.12.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_05_VENTRAL.13.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_05_VENTRAL.14.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_05_VENTRAL.15.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_06_DORSAL.1.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_06_DORSAL.10.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_06_DORSAL.2.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_06_DORSAL.9.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_06_VENTRAL.1.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_06_VENTRAL.10.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_06_VENTRAL.2.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_06_VENTRAL.9.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_07_DORSAL.13.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_07_VENTRAL.13.jpg \n", - " creating: Images/training/Pasimachus subsulcatus/\n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_01_DORSAL.1.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_01_DORSAL.16.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_01_DORSAL.2.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_01_DORSAL.3.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_01_DORSAL.7.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_01_DORSAL.8.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_01_VENTRAL.1.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_01_VENTRAL.16.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_01_VENTRAL.2.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_01_VENTRAL.3.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_01_VENTRAL.7.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_01_VENTRAL.8.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_02_DORSAL.10.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_02_DORSAL.11.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_02_DORSAL.12.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_02_DORSAL.14.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_02_DORSAL.4.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_02_DORSAL.5.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_02_DORSAL.9.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_02_VENTRAL.10.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_02_VENTRAL.11.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_02_VENTRAL.12.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_02_VENTRAL.14.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_02_VENTRAL.4.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_02_VENTRAL.5.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_02_VENTRAL.9.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_03_DORSAL.12.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_03_DORSAL.13.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_03_DORSAL.14.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_03_DORSAL.4.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_03_DORSAL.5.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_03_VENTRAL.12.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_03_VENTRAL.13.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_03_VENTRAL.14.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_03_VENTRAL.4.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_03_VENTRAL.5.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_04_DORSAL.4.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_04_DORSAL.9.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_04_VENTRAL.4.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_04_VENTRAL.9.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_05_DORSAL.7.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_05_DORSAL.8.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_05_VENTRAL.7.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_05_VENTRAL.8.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_06_DORSAL.11.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_06_DORSAL.6.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_06_VENTRAL.11.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_06_VENTRAL.6.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_07_DORSAL.1.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_07_DORSAL.2.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_07_DORSAL.4.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_07_DORSAL.5.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_07_VENTRAL.1.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_07_VENTRAL.2.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_07_VENTRAL.4.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_07_VENTRAL.5.jpg \n", - " creating: Images/training/Patrobus lecontei/\n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_DORSAL.1.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_DORSAL.2.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_DORSAL.23.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_DORSAL.24.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_DORSAL.25.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_DORSAL.26.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_DORSAL.27.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_DORSAL.28.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_DORSAL.30.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_DORSAL.31.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_DORSAL.32.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_DORSAL.33.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_DORSAL.34.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_DORSAL.36.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_DORSAL.38.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_DORSAL.39.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_DORSAL.40.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_VENTRAL.1.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_VENTRAL.2.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_VENTRAL.23.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_VENTRAL.24.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_VENTRAL.25.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_VENTRAL.26.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_VENTRAL.27.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_VENTRAL.28.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_VENTRAL.30.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_VENTRAL.31.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_VENTRAL.32.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_VENTRAL.33.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_VENTRAL.34.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_VENTRAL.36.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_VENTRAL.38.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_VENTRAL.39.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_VENTRAL.40.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_06_DORSAL.16.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_06_DORSAL.19.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_06_DORSAL.21.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_06_VENTRAL.16.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_06_VENTRAL.19.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_06_VENTRAL.21.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_07_DORSAL.22.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_07_DORSAL.23.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_07_DORSAL.29.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_07_VENTRAL.22.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_07_VENTRAL.23.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_07_VENTRAL.29.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_14_DORSAL.12.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_14_DORSAL.13.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_14_VENTRAL.12.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_14_VENTRAL.13.jpg \n", - " creating: Images/training/Poecilus lucublandus/\n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesNOGP_01_DORSAL.10.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesNOGP_01_DORSAL.7.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesNOGP_01_VENTRAL.10.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesNOGP_01_VENTRAL.7.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesNOGP_03_DORSAL.2.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesNOGP_03_DORSAL.3.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesNOGP_03_VENTRAL.2.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesNOGP_03_VENTRAL.3.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesSCBI_01_DORSAL.10.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesSCBI_01_DORSAL.11.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesSCBI_01_DORSAL.8.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesSCBI_01_DORSAL.9.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesSCBI_01_VENTRAL.10.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesSCBI_01_VENTRAL.11.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesSCBI_01_VENTRAL.8.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesSCBI_01_VENTRAL.9.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesSCBI_02_DORSAL.10.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesSCBI_02_DORSAL.13.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesSCBI_02_DORSAL.14.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesSCBI_02_DORSAL.15.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesSCBI_02_DORSAL.16.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesSCBI_02_DORSAL.17.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesSCBI_02_DORSAL.6.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesSCBI_02_VENTRAL.10.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesSCBI_02_VENTRAL.13.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesSCBI_02_VENTRAL.14.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesSCBI_02_VENTRAL.15.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesSCBI_02_VENTRAL.16.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesSCBI_02_VENTRAL.17.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesSCBI_02_VENTRAL.6.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_07_DORSAL.24.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_07_DORSAL.25.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_07_VENTRAL.24.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_07_VENTRAL.25.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_08_DORSAL.14.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_08_DORSAL.15.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_08_DORSAL.16.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_08_DORSAL.17.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_08_DORSAL.18.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_08_DORSAL.19.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_08_VENTRAL.14.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_08_VENTRAL.15.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_08_VENTRAL.16.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_08_VENTRAL.17.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_08_VENTRAL.18.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_08_VENTRAL.19.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_10_DORSAL.21.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_10_DORSAL.22.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_10_DORSAL.23.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_10_DORSAL.24.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_10_DORSAL.26.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_10_DORSAL.27.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_10_VENTRAL.21.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_10_VENTRAL.22.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_10_VENTRAL.23.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_10_VENTRAL.24.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_10_VENTRAL.26.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_10_VENTRAL.27.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_12_DORSAL.11.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_12_DORSAL.13.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_12_DORSAL.17.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_12_VENTRAL.11.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_12_VENTRAL.13.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_12_VENTRAL.17.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_14_DORSAL.11.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_14_VENTRAL.11.jpg \n", - " creating: Images/training/Pterostichus corvinus/\n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.38.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.39.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.41.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.42.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.43.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.45.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.46.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.47.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.48.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.49.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.50.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.51.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.52.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.53.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.55.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.56.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.57.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.58.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.60.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.61.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.63.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.65.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.67.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.70.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.71.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.72.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.73.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.38.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.39.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.41.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.42.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.43.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.45.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.46.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.47.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.48.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.49.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.50.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.51.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.52.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.53.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.55.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.56.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.57.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.58.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.60.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.61.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.63.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.65.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.67.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.70.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.71.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.72.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.73.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.11.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.12.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.13.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.14.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.15.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.17.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.18.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.20.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.24.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.25.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.26.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.29.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.30.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.31.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.32.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.34.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.35.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.36.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.37.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.39.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.40.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.42.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.43.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.44.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.45.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.46.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.47.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.48.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.50.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.51.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.52.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.53.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.54.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.55.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.11.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.12.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.13.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.14.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.15.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.17.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.18.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.20.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.24.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.25.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.26.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.29.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.30.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.31.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.32.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.34.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.35.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.36.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.37.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.39.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.40.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.42.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.43.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.44.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.45.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.46.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.47.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.48.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.50.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.51.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.52.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.53.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.54.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.55.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.1.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.10.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.11.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.13.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.14.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.16.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.17.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.18.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.19.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.2.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.20.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.21.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.23.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.24.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.27.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.28.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.29.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.30.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.31.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.33.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.34.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.35.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.36.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.37.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.38.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.39.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.4.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.40.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.41.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.42.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.44.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.45.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.6.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.7.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.8.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.1.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.10.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.11.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.13.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.14.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.16.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.17.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.18.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.19.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.2.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.20.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.21.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.23.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.24.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.27.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.28.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.29.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.30.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.31.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.33.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.34.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.35.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.36.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.37.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.38.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.39.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.4.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.40.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.41.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.42.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.44.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.45.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.6.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.7.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.8.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_DORSAL.10.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_DORSAL.11.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_DORSAL.12.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_DORSAL.13.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_DORSAL.14.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_DORSAL.15.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_DORSAL.16.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_DORSAL.17.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_DORSAL.19.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_DORSAL.20.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_DORSAL.5.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_DORSAL.6.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_DORSAL.7.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_DORSAL.8.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_DORSAL.9.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_VENTRAL.10.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_VENTRAL.11.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_VENTRAL.12.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_VENTRAL.13.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_VENTRAL.14.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_VENTRAL.15.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_VENTRAL.16.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_VENTRAL.17.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_VENTRAL.19.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_VENTRAL.20.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_VENTRAL.5.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_VENTRAL.6.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_VENTRAL.7.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_VENTRAL.8.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_VENTRAL.9.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_06_DORSAL.1.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_06_DORSAL.10.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_06_DORSAL.15.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_06_DORSAL.17.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_06_DORSAL.18.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_06_DORSAL.22.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_06_DORSAL.3.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_06_DORSAL.4.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_06_DORSAL.5.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_06_DORSAL.6.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_06_DORSAL.7.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_06_DORSAL.8.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_06_DORSAL.9.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_06_VENTRAL.1.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_06_VENTRAL.10.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_06_VENTRAL.15.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_06_VENTRAL.17.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_06_VENTRAL.18.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_06_VENTRAL.22.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_06_VENTRAL.3.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_06_VENTRAL.4.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_06_VENTRAL.5.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_06_VENTRAL.6.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_06_VENTRAL.7.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_06_VENTRAL.8.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_06_VENTRAL.9.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_07_DORSAL.10.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_07_DORSAL.19.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_07_VENTRAL.10.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_07_VENTRAL.19.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_10_DORSAL.5.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_10_DORSAL.6.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_10_VENTRAL.5.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_10_VENTRAL.6.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_13_DORSAL.2.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_13_VENTRAL.2.jpg \n", - " creating: Images/training/Pterostichus melanarius melanarius/\n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_01_VENTRAL.10.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_01_VENTRAL.9.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.1.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.10.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.11.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.12.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.13.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.14.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.15.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.19.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.2.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.20.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.21.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.22.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.24.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.26.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.27.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.28.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.29.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.3.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.30.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.31.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.32.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.33.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.34.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.35.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.37.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.38.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.40.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.41.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.43.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.44.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.46.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.47.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.49.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.50.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.51.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.53.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.54.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.55.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.56.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.57.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.6.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.60.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.61.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.62.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.8.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.9.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.1.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.10.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.11.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.12.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.13.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.14.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.15.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.19.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.2.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.20.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.21.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.22.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.24.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.26.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.27.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.28.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.29.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.3.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.30.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.31.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.32.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.33.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.34.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.35.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.37.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.38.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.40.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.41.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.43.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.44.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.46.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.47.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.49.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.50.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.51.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.53.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.54.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.55.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.56.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.57.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.6.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.60.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.61.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.62.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.8.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.9.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_03_DORSAL.34.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_03_DORSAL.35.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_03_DORSAL.36.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_03_DORSAL.37.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_03_DORSAL.38.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_03_DORSAL.39.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_03_DORSAL.40.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_03_DORSAL.41.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_03_DORSAL.43.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_03_DORSAL.44.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_03_DORSAL.45.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_03_DORSAL.46.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_03_DORSAL.48.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_03_VENTRAL.34.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_03_VENTRAL.35.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_03_VENTRAL.36.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_03_VENTRAL.37.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_03_VENTRAL.38.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_03_VENTRAL.39.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_03_VENTRAL.40.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_03_VENTRAL.41.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_03_VENTRAL.43.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_03_VENTRAL.44.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_03_VENTRAL.45.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_03_VENTRAL.46.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_03_VENTRAL.48.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_04_DORSAL.40.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_04_DORSAL.42.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_04_VENTRAL.40.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_04_VENTRAL.42.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_01_DORSAL.1.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_01_DORSAL.10.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_01_DORSAL.2.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_01_DORSAL.3.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_01_DORSAL.4.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_01_DORSAL.46.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_01_DORSAL.5.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_01_DORSAL.6.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_01_DORSAL.7.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_01_DORSAL.8.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_01_VENTRAL.1.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_01_VENTRAL.10.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_01_VENTRAL.2.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_01_VENTRAL.3.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_01_VENTRAL.4.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_01_VENTRAL.46.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_01_VENTRAL.5.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_01_VENTRAL.6.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_01_VENTRAL.7.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_01_VENTRAL.8.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_02_DORSAL.17.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_02_DORSAL.18.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_02_DORSAL.24.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_02_DORSAL.25.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_02_DORSAL.26.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_02_DORSAL.27.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_02_DORSAL.28.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_02_DORSAL.29.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_02_DORSAL.30.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_02_DORSAL.31.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_02_DORSAL.33.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_02_DORSAL.35.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_02_DORSAL.36.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_02_DORSAL.37.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_02_VENTRAL.17.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_02_VENTRAL.18.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_02_VENTRAL.24.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_02_VENTRAL.25.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_02_VENTRAL.26.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_02_VENTRAL.27.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_02_VENTRAL.28.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_02_VENTRAL.29.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_02_VENTRAL.30.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_02_VENTRAL.31.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_02_VENTRAL.33.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_02_VENTRAL.35.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_02_VENTRAL.36.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_02_VENTRAL.37.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_03_DORSAL.10.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_03_DORSAL.11.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_03_DORSAL.13.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_03_DORSAL.16.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_03_DORSAL.8.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_03_DORSAL.9.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_03_VENTRAL.10.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_03_VENTRAL.11.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_03_VENTRAL.13.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_03_VENTRAL.16.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_03_VENTRAL.8.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_03_VENTRAL.9.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_DORSAL.28.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_DORSAL.29.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_DORSAL.3.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_DORSAL.30.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_DORSAL.31.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_DORSAL.32.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_DORSAL.33.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_DORSAL.34.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_DORSAL.35.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_DORSAL.36.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_DORSAL.37.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_DORSAL.38.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_DORSAL.4.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_DORSAL.5.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_DORSAL.6.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_DORSAL.7.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_DORSAL.8.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_VENTRAL.28.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_VENTRAL.29.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_VENTRAL.3.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_VENTRAL.30.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_VENTRAL.31.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_VENTRAL.32.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_VENTRAL.33.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_VENTRAL.34.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_VENTRAL.35.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_VENTRAL.36.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_VENTRAL.37.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_VENTRAL.38.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_VENTRAL.4.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_VENTRAL.5.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_VENTRAL.6.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_VENTRAL.7.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_VENTRAL.8.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_05_DORSAL.10.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_05_DORSAL.11.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_05_DORSAL.12.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_05_DORSAL.15.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_05_DORSAL.20.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_05_DORSAL.21.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_05_DORSAL.22.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_05_DORSAL.23.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_05_DORSAL.24.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_05_DORSAL.4.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_05_DORSAL.8.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_05_DORSAL.9.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_05_VENTRAL.10.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_05_VENTRAL.11.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_05_VENTRAL.12.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_05_VENTRAL.15.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_05_VENTRAL.20.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_05_VENTRAL.21.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_05_VENTRAL.22.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_05_VENTRAL.23.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_05_VENTRAL.24.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_05_VENTRAL.4.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_05_VENTRAL.8.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_05_VENTRAL.9.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_01_DORSAL.46.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_01_DORSAL.47.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_01_VENTRAL.46.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_01_VENTRAL.47.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_04_DORSAL.51.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_04_DORSAL.52.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_04_DORSAL.53.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_04_DORSAL.54.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_04_DORSAL.56.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_04_DORSAL.59.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_04_VENTRAL.51.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_04_VENTRAL.52.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_04_VENTRAL.53.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_04_VENTRAL.54.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_04_VENTRAL.56.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_04_VENTRAL.59.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_05_DORSAL.42.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_05_VENTRAL.42.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_DORSAL.1.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_DORSAL.11.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_DORSAL.12.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_DORSAL.2.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_DORSAL.20.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_DORSAL.21.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_DORSAL.22.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_DORSAL.23.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_DORSAL.24.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_DORSAL.25.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_DORSAL.26.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_DORSAL.27.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_DORSAL.28.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_DORSAL.29.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_DORSAL.30.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_DORSAL.4.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_DORSAL.5.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_DORSAL.6.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_DORSAL.7.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_DORSAL.8.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_DORSAL.9.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_VENTRAL.1.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_VENTRAL.11.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_VENTRAL.12.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_VENTRAL.2.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_VENTRAL.20.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_VENTRAL.21.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_VENTRAL.22.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_VENTRAL.23.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_VENTRAL.24.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_VENTRAL.25.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_VENTRAL.26.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_VENTRAL.27.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_VENTRAL.28.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_VENTRAL.29.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_VENTRAL.30.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_VENTRAL.4.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_VENTRAL.5.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_VENTRAL.6.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_VENTRAL.7.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_VENTRAL.8.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_VENTRAL.9.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.11.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.12.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.13.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.17.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.18.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.20.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.21.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.22.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.24.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.25.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.27.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.29.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.30.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.31.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.32.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.33.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.34.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.35.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.36.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.37.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.38.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.39.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.40.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.41.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.42.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.43.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.45.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.46.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.47.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.49.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.50.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.51.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.52.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.53.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.54.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.11.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.12.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.13.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.17.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.18.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.20.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.21.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.22.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.24.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.25.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.27.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.29.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.30.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.31.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.32.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.33.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.34.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.35.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.36.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.37.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.38.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.39.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.40.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.41.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.42.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.43.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.45.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.46.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.47.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.49.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.50.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.51.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.52.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.53.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.54.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_10_DORSAL.10.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_10_DORSAL.11.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_10_DORSAL.12.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_10_DORSAL.13.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_10_DORSAL.15.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_10_DORSAL.16.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_10_DORSAL.18.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_10_DORSAL.19.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_10_DORSAL.7.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_10_DORSAL.9.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_10_VENTRAL.10.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_10_VENTRAL.11.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_10_VENTRAL.12.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_10_VENTRAL.13.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_10_VENTRAL.15.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_10_VENTRAL.16.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_10_VENTRAL.18.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_10_VENTRAL.19.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_10_VENTRAL.7.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_10_VENTRAL.9.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_11_DORSAL.10.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_11_DORSAL.11.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_11_DORSAL.12.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_11_DORSAL.13.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_11_DORSAL.14.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_11_DORSAL.15.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_11_DORSAL.17.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_11_DORSAL.4.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_11_DORSAL.7.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_11_DORSAL.9.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_11_VENTRAL.10.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_11_VENTRAL.11.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_11_VENTRAL.12.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_11_VENTRAL.13.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_11_VENTRAL.14.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_11_VENTRAL.15.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_11_VENTRAL.17.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_11_VENTRAL.4.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_11_VENTRAL.7.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_11_VENTRAL.9.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_12_DORSAL.2.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_12_DORSAL.3.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_12_DORSAL.5.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_12_DORSAL.9.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_12_VENTRAL.2.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_12_VENTRAL.3.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_12_VENTRAL.5.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_12_VENTRAL.9.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_14_DORSAL.26.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_14_VENTRAL.26.jpg \n", - " creating: Images/training/Pterostichus novus/\n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_01_VENTRAL.1.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_01_VENTRAL.15.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_01_VENTRAL.17.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_01_VENTRAL.26.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_01_VENTRAL.29.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_01_VENTRAL.3.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_01_VENTRAL.30.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_01_VENTRAL.32.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_01_VENTRAL.33.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_01_VENTRAL.35.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_01_VENTRAL.36.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_01_VENTRAL.38.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_01_VENTRAL.39.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_01_VENTRAL.4.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_01_VENTRAL.40.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_01_VENTRAL.5.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_01_VENTRAL.6.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_01_VENTRAL.7.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_02_DORSAL.59.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_02_DORSAL.63.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_02_DORSAL.64.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_02_DORSAL.65.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_02_VENTRAL.59.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_02_VENTRAL.63.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_02_VENTRAL.64.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_02_VENTRAL.65.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_DORSAL.1.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_DORSAL.10.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_DORSAL.11.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_DORSAL.12.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_DORSAL.14.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_DORSAL.15.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_DORSAL.16.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_DORSAL.17.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_DORSAL.18.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_DORSAL.2.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_DORSAL.20.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_DORSAL.21.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_DORSAL.22.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_DORSAL.23.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_DORSAL.3.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_DORSAL.32.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_DORSAL.4.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_DORSAL.6.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_DORSAL.66.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_DORSAL.67.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_DORSAL.7.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_DORSAL.8.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_VENTRAL.1.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_VENTRAL.10.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_VENTRAL.11.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_VENTRAL.12.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_VENTRAL.14.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_VENTRAL.15.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_VENTRAL.16.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_VENTRAL.17.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_VENTRAL.18.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_VENTRAL.2.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_VENTRAL.20.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_VENTRAL.21.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_VENTRAL.22.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_VENTRAL.23.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_VENTRAL.3.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_VENTRAL.32.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_VENTRAL.4.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_VENTRAL.6.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_VENTRAL.66.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_VENTRAL.67.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_VENTRAL.7.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_VENTRAL.8.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_DORSAL.10.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_DORSAL.11.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_DORSAL.12.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_DORSAL.13.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_DORSAL.15.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_DORSAL.16.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_DORSAL.17.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_DORSAL.18.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_DORSAL.19.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_DORSAL.20.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_DORSAL.21.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_DORSAL.36.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_DORSAL.37.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_DORSAL.38.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_DORSAL.39.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_DORSAL.41.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_DORSAL.9.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_VENTRAL.10.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_VENTRAL.11.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_VENTRAL.12.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_VENTRAL.13.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_VENTRAL.15.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_VENTRAL.16.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_VENTRAL.17.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_VENTRAL.18.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_VENTRAL.19.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_VENTRAL.20.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_VENTRAL.21.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_VENTRAL.36.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_VENTRAL.37.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_VENTRAL.38.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_VENTRAL.39.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_VENTRAL.41.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_VENTRAL.9.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_05_DORSAL.10.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_05_DORSAL.9.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_05_VENTRAL.10.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_05_VENTRAL.9.jpg \n", - " creating: Images/training/Pterostichus stygicus/\n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_DORSAL.13.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_DORSAL.14.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_DORSAL.15.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_DORSAL.16.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_DORSAL.17.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_DORSAL.18.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_DORSAL.20.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_DORSAL.21.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_DORSAL.22.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_DORSAL.23.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_DORSAL.24.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_DORSAL.25.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_DORSAL.26.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_DORSAL.27.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_DORSAL.8.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_VENTRAL.13.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_VENTRAL.14.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_VENTRAL.15.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_VENTRAL.16.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_VENTRAL.17.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_VENTRAL.18.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_VENTRAL.20.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_VENTRAL.21.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_VENTRAL.22.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_VENTRAL.23.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_VENTRAL.24.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_VENTRAL.25.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_VENTRAL.26.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_VENTRAL.27.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_VENTRAL.8.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_05_DORSAL.28.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_05_DORSAL.29.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_05_DORSAL.30.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_05_DORSAL.31.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_05_DORSAL.32.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_05_DORSAL.36.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_05_DORSAL.37.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_05_DORSAL.39.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_05_DORSAL.40.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_05_VENTRAL.28.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_05_VENTRAL.29.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_05_VENTRAL.30.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_05_VENTRAL.31.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_05_VENTRAL.32.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_05_VENTRAL.36.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_05_VENTRAL.37.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_05_VENTRAL.39.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_05_VENTRAL.40.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_02_DORSAL.1.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_02_DORSAL.2.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_02_DORSAL.3.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_02_DORSAL.4.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_02_DORSAL.5.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_02_DORSAL.6.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_02_DORSAL.7.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_02_DORSAL.8.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_02_DORSAL.9.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_02_VENTRAL.1.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_02_VENTRAL.2.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_02_VENTRAL.3.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_02_VENTRAL.4.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_02_VENTRAL.5.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_02_VENTRAL.6.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_02_VENTRAL.7.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_02_VENTRAL.8.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_02_VENTRAL.9.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_03_DORSAL.11.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_03_DORSAL.12.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_03_DORSAL.13.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_03_DORSAL.15.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_03_DORSAL.16.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_03_DORSAL.17.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_03_DORSAL.19.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_03_VENTRAL.11.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_03_VENTRAL.12.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_03_VENTRAL.13.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_03_VENTRAL.15.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_03_VENTRAL.16.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_03_VENTRAL.17.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_03_VENTRAL.19.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_06_DORSAL.10.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_06_DORSAL.12.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_06_DORSAL.9.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_06_VENTRAL.10.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_06_VENTRAL.12.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_06_VENTRAL.9.jpg \n", - " creating: Images/training/Scarites subterraneus/\n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_DORSAL.1.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_DORSAL.11.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_DORSAL.12.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_DORSAL.13.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_DORSAL.15.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_DORSAL.16.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_DORSAL.17.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_DORSAL.18.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_DORSAL.19.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_DORSAL.21.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_DORSAL.26.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_DORSAL.27.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_DORSAL.28.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_DORSAL.29.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_DORSAL.30.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_DORSAL.5.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_DORSAL.6.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.1.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.11.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.12.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.13.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.15.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.16.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.17.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.18.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.19.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.21.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.26.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.27.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.28.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.29.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.30.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.5.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.6.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_05_DORSAL.10.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_05_DORSAL.11.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_05_DORSAL.12.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_05_DORSAL.13.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_05_DORSAL.15.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_05_DORSAL.16.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_05_DORSAL.17.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_05_DORSAL.7.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_05_DORSAL.8.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_05_DORSAL.9.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_05_VENTRAL.10.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_05_VENTRAL.11.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_05_VENTRAL.12.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_05_VENTRAL.13.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_05_VENTRAL.15.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_05_VENTRAL.16.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_05_VENTRAL.17.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_05_VENTRAL.7.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_05_VENTRAL.8.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_05_VENTRAL.9.jpg \n", - " creating: Images/training/Selenophorus planipennis/\n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_01_DORSAL.10.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_01_DORSAL.11.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_01_DORSAL.12.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_01_DORSAL.13.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_01_VENTRAL.10.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_01_VENTRAL.11.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_01_VENTRAL.12.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_01_VENTRAL.13.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_05_DORSAL.1.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_05_DORSAL.10.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_05_DORSAL.11.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_05_DORSAL.2.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_05_DORSAL.3.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_05_DORSAL.4.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_05_DORSAL.5.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_05_DORSAL.6.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_05_DORSAL.7.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_05_DORSAL.8.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_05_DORSAL.9.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_05_VENTRAL.1.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_05_VENTRAL.10.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_05_VENTRAL.11.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_05_VENTRAL.2.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_05_VENTRAL.3.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_05_VENTRAL.4.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_05_VENTRAL.5.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_05_VENTRAL.6.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_05_VENTRAL.7.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_05_VENTRAL.8.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_05_VENTRAL.9.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_06_DORSAL.25.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_06_DORSAL.26.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_06_VENTRAL.25.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_06_VENTRAL.26.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_08_DORSAL.10.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_08_DORSAL.11.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_08_DORSAL.15.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_08_DORSAL.16.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_08_DORSAL.17.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_08_VENTRAL.10.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_08_VENTRAL.11.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_08_VENTRAL.15.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_08_VENTRAL.16.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_08_VENTRAL.17.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_10_DORSAL.9.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_10_VENTRAL.9.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_DORSAL.11.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_DORSAL.12.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_DORSAL.13.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_DORSAL.14.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_DORSAL.15.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_DORSAL.16.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_DORSAL.17.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_DORSAL.18.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_DORSAL.19.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_DORSAL.20.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_DORSAL.21.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_DORSAL.22.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_DORSAL.25.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_DORSAL.28.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_DORSAL.5.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_DORSAL.7.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_DORSAL.8.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_VENTRAL.11.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_VENTRAL.12.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_VENTRAL.13.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_VENTRAL.14.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_VENTRAL.15.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_VENTRAL.16.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_VENTRAL.17.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_VENTRAL.18.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_VENTRAL.19.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_VENTRAL.20.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_VENTRAL.21.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_VENTRAL.22.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_VENTRAL.25.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_VENTRAL.28.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_VENTRAL.5.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_VENTRAL.7.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_VENTRAL.8.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_02_DORSAL.43.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_02_DORSAL.44.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_02_DORSAL.45.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_02_DORSAL.46.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_02_DORSAL.47.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_02_DORSAL.48.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_02_DORSAL.49.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_02_DORSAL.50.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_02_DORSAL.51.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_02_DORSAL.52.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_02_DORSAL.53.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_02_VENTRAL.43.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_02_VENTRAL.44.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_02_VENTRAL.45.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_02_VENTRAL.46.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_02_VENTRAL.47.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_02_VENTRAL.48.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_02_VENTRAL.49.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_02_VENTRAL.50.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_02_VENTRAL.51.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_02_VENTRAL.52.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_02_VENTRAL.53.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_03_DORSAL.65.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_03_DORSAL.67.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_03_VENTRAL.65.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_03_VENTRAL.67.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_06_DORSAL.13.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_06_DORSAL.15.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_06_DORSAL.16.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_06_DORSAL.17.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_06_DORSAL.18.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_06_DORSAL.19.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_06_DORSAL.20.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_06_DORSAL.24.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_06_VENTRAL.13.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_06_VENTRAL.15.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_06_VENTRAL.16.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_06_VENTRAL.17.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_06_VENTRAL.18.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_06_VENTRAL.19.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_06_VENTRAL.20.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_06_VENTRAL.24.jpg \n", - " creating: Images/training/Synuchus impunctatus/\n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_01_VENTRAL.11.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_01_VENTRAL.12.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_01_VENTRAL.14.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_01_VENTRAL.18.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_01_VENTRAL.20.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_01_VENTRAL.23.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_01_VENTRAL.41.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_01_VENTRAL.43.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_02_DORSAL.58.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_02_VENTRAL.58.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_DORSAL.24.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_DORSAL.25.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_DORSAL.26.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_DORSAL.28.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_DORSAL.30.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_DORSAL.51.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_DORSAL.53.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_DORSAL.57.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_DORSAL.58.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_DORSAL.59.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_DORSAL.60.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_DORSAL.61.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_DORSAL.62.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_DORSAL.63.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_DORSAL.65.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_VENTRAL.24.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_VENTRAL.25.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_VENTRAL.26.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_VENTRAL.28.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_VENTRAL.30.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_VENTRAL.51.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_VENTRAL.53.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_VENTRAL.57.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_VENTRAL.58.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_VENTRAL.59.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_VENTRAL.60.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_VENTRAL.61.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_VENTRAL.62.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_VENTRAL.63.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_VENTRAL.65.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_DORSAL.14.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_DORSAL.2.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_DORSAL.23.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_DORSAL.24.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_DORSAL.25.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_DORSAL.26.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_DORSAL.27.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_DORSAL.28.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_DORSAL.3.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_DORSAL.30.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_DORSAL.31.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_DORSAL.32.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_DORSAL.33.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_DORSAL.34.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_DORSAL.4.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_DORSAL.5.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_DORSAL.6.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_VENTRAL.14.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_VENTRAL.2.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_VENTRAL.23.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_VENTRAL.24.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_VENTRAL.25.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_VENTRAL.26.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_VENTRAL.27.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_VENTRAL.28.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_VENTRAL.3.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_VENTRAL.30.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_VENTRAL.31.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_VENTRAL.32.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_VENTRAL.33.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_VENTRAL.34.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_VENTRAL.4.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_VENTRAL.5.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_VENTRAL.6.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_05_DORSAL.1.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_05_DORSAL.3.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_05_DORSAL.4.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_05_DORSAL.6.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_05_VENTRAL.1.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_05_VENTRAL.3.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_05_VENTRAL.4.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_05_VENTRAL.6.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_01_DORSAL.1.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_01_DORSAL.2.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_01_DORSAL.3.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_01_DORSAL.4.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_01_DORSAL.6.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_01_VENTRAL.1.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_01_VENTRAL.2.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_01_VENTRAL.3.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_01_VENTRAL.4.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_01_VENTRAL.6.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_02_DORSAL.1.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_02_DORSAL.2.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_02_DORSAL.3.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_02_DORSAL.5.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_02_DORSAL.7.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_02_DORSAL.8.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_02_DORSAL.9.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_02_VENTRAL.1.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_02_VENTRAL.2.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_02_VENTRAL.3.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_02_VENTRAL.5.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_02_VENTRAL.7.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_02_VENTRAL.8.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_02_VENTRAL.9.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_03_DORSAL.1.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_03_DORSAL.16.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_03_DORSAL.18.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_03_DORSAL.7.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_03_DORSAL.9.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_03_VENTRAL.1.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_03_VENTRAL.16.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_03_VENTRAL.18.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_03_VENTRAL.7.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_03_VENTRAL.9.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_04_DORSAL.10.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_04_DORSAL.11.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_04_DORSAL.5.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_04_VENTRAL.10.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_04_VENTRAL.11.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_04_VENTRAL.5.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.13.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.14.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.15.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.16.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.17.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.18.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.19.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.20.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.21.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.22.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.23.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.25.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.26.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.27.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.28.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.29.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.30.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.31.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.33.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.34.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.35.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.36.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.39.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.42.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.43.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.44.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.13.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.14.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.15.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.16.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.17.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.18.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.19.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.20.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.21.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.22.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.23.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.25.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.26.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.27.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.28.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.29.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.30.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.31.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.33.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.34.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.35.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.36.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.39.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.42.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.43.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.44.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_02_DORSAL.1.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_02_DORSAL.10.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_02_DORSAL.13.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_02_DORSAL.15.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_02_DORSAL.16.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_02_DORSAL.19.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_02_DORSAL.2.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_02_DORSAL.20.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_02_DORSAL.21.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_02_DORSAL.22.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_02_DORSAL.3.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_02_DORSAL.4.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_02_DORSAL.8.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_02_VENTRAL.1.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_02_VENTRAL.10.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_02_VENTRAL.13.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_02_VENTRAL.15.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_02_VENTRAL.16.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_02_VENTRAL.19.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_02_VENTRAL.2.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_02_VENTRAL.20.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_02_VENTRAL.21.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_02_VENTRAL.22.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_02_VENTRAL.3.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_02_VENTRAL.4.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_02_VENTRAL.8.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_03_DORSAL.1.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_03_DORSAL.18.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_03_DORSAL.19.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_03_DORSAL.2.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_03_DORSAL.20.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_03_DORSAL.21.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_03_DORSAL.22.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_03_DORSAL.23.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_03_DORSAL.24.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_03_DORSAL.25.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_03_DORSAL.3.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_03_DORSAL.4.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_03_DORSAL.5.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_03_DORSAL.6.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_03_VENTRAL.1.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_03_VENTRAL.18.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_03_VENTRAL.19.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_03_VENTRAL.2.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_03_VENTRAL.20.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_03_VENTRAL.21.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_03_VENTRAL.22.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_03_VENTRAL.23.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_03_VENTRAL.24.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_03_VENTRAL.25.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_03_VENTRAL.3.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_03_VENTRAL.4.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_03_VENTRAL.5.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_03_VENTRAL.6.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_DORSAL.10.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_DORSAL.11.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_DORSAL.12.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_DORSAL.13.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_DORSAL.14.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_DORSAL.15.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_DORSAL.17.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_DORSAL.18.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_DORSAL.19.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_DORSAL.20.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_DORSAL.21.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_DORSAL.22.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_DORSAL.23.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_DORSAL.25.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_DORSAL.9.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_VENTRAL.10.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_VENTRAL.11.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_VENTRAL.12.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_VENTRAL.13.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_VENTRAL.14.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_VENTRAL.15.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_VENTRAL.17.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_VENTRAL.18.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_VENTRAL.19.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_VENTRAL.20.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_VENTRAL.21.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_VENTRAL.22.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_VENTRAL.23.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_VENTRAL.25.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_VENTRAL.9.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_05_DORSAL.16.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_05_DORSAL.17.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_05_DORSAL.18.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_05_DORSAL.19.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_05_DORSAL.3.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_05_DORSAL.5.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_05_VENTRAL.16.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_05_VENTRAL.17.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_05_VENTRAL.18.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_05_VENTRAL.19.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_05_VENTRAL.3.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_05_VENTRAL.5.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesWOOD_06_DORSAL.28.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesWOOD_06_DORSAL.29.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesWOOD_06_DORSAL.31.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesWOOD_06_DORSAL.34.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesWOOD_06_VENTRAL.28.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesWOOD_06_VENTRAL.29.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesWOOD_06_VENTRAL.31.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesWOOD_06_VENTRAL.34.jpg \n", - " creating: Images/zero/\n", - " creating: Images/zero/Agonoleptus conjunctus/\n", - " inflating: Images/zero/Agonoleptus conjunctus/JPGImagesWOOD_12_DORSAL.16.jpg \n", - " inflating: Images/zero/Agonoleptus conjunctus/JPGImagesWOOD_12_VENTRAL.16.jpg \n", - " creating: Images/zero/Agonum gratiosum/\n", - " inflating: Images/zero/Agonum gratiosum/JPGImagesWOOD_05_DORSAL.21.jpg \n", - " inflating: Images/zero/Agonum gratiosum/JPGImagesWOOD_05_VENTRAL.21.jpg \n", - " inflating: Images/zero/Agonum gratiosum/JPGImagesWOOD_06_DORSAL.11.jpg \n", - " inflating: Images/zero/Agonum gratiosum/JPGImagesWOOD_06_DORSAL.12.jpg \n", - " inflating: Images/zero/Agonum gratiosum/JPGImagesWOOD_06_DORSAL.13.jpg \n", - " inflating: Images/zero/Agonum gratiosum/JPGImagesWOOD_06_DORSAL.14.jpg \n", - " inflating: Images/zero/Agonum gratiosum/JPGImagesWOOD_06_DORSAL.37.jpg \n", - " inflating: Images/zero/Agonum gratiosum/JPGImagesWOOD_06_VENTRAL.11.jpg \n", - " inflating: Images/zero/Agonum gratiosum/JPGImagesWOOD_06_VENTRAL.12.jpg \n", - " inflating: Images/zero/Agonum gratiosum/JPGImagesWOOD_06_VENTRAL.13.jpg \n", - " inflating: Images/zero/Agonum gratiosum/JPGImagesWOOD_06_VENTRAL.14.jpg \n", - " inflating: Images/zero/Agonum gratiosum/JPGImagesWOOD_06_VENTRAL.37.jpg \n", - " creating: Images/zero/Anisodactylus harrisii/\n", - " inflating: Images/zero/Anisodactylus harrisii/JPGImagesWOOD_13_DORSAL.1.jpg \n", - " inflating: Images/zero/Anisodactylus harrisii/JPGImagesWOOD_13_DORSAL.3.jpg \n", - " inflating: Images/zero/Anisodactylus harrisii/JPGImagesWOOD_13_DORSAL.4.jpg \n", - " inflating: Images/zero/Anisodactylus harrisii/JPGImagesWOOD_13_DORSAL.9.jpg \n", - " inflating: Images/zero/Anisodactylus harrisii/JPGImagesWOOD_13_VENTRAL.1.jpg \n", - " inflating: Images/zero/Anisodactylus harrisii/JPGImagesWOOD_13_VENTRAL.3.jpg \n", - " inflating: Images/zero/Anisodactylus harrisii/JPGImagesWOOD_13_VENTRAL.4.jpg \n", - " inflating: Images/zero/Anisodactylus harrisii/JPGImagesWOOD_13_VENTRAL.9.jpg \n", - " inflating: Images/zero/Anisodactylus harrisii/JPGImagesWOOD_14_DORSAL.27.jpg \n", - " inflating: Images/zero/Anisodactylus harrisii/JPGImagesWOOD_14_DORSAL.28.jpg \n", - " inflating: Images/zero/Anisodactylus harrisii/JPGImagesWOOD_14_VENTRAL.27.jpg \n", - " inflating: Images/zero/Anisodactylus harrisii/JPGImagesWOOD_14_VENTRAL.28.jpg \n", - " creating: Images/zero/Anisodactylus nigrita/\n", - " inflating: Images/zero/Anisodactylus nigrita/JPGImagesWOOD_03_DORSAL.21.jpg \n", - " inflating: Images/zero/Anisodactylus nigrita/JPGImagesWOOD_03_DORSAL.22.jpg \n", - " inflating: Images/zero/Anisodactylus nigrita/JPGImagesWOOD_03_VENTRAL.21.jpg \n", - " inflating: Images/zero/Anisodactylus nigrita/JPGImagesWOOD_03_VENTRAL.22.jpg \n", - " inflating: Images/zero/Anisodactylus nigrita/JPGImagesWOOD_13_DORSAL.12.jpg \n", - " inflating: Images/zero/Anisodactylus nigrita/JPGImagesWOOD_13_DORSAL.13.jpg \n", - " inflating: Images/zero/Anisodactylus nigrita/JPGImagesWOOD_13_VENTRAL.12.jpg \n", - " inflating: Images/zero/Anisodactylus nigrita/JPGImagesWOOD_13_VENTRAL.13.jpg \n", - " inflating: Images/zero/Anisodactylus nigrita/JPGImagesWOOD_14_DORSAL.17.jpg \n", - " inflating: Images/zero/Anisodactylus nigrita/JPGImagesWOOD_14_DORSAL.18.jpg \n", - " inflating: Images/zero/Anisodactylus nigrita/JPGImagesWOOD_14_DORSAL.19.jpg \n", - " inflating: Images/zero/Anisodactylus nigrita/JPGImagesWOOD_14_VENTRAL.17.jpg \n", - " inflating: Images/zero/Anisodactylus nigrita/JPGImagesWOOD_14_VENTRAL.18.jpg \n", - " inflating: Images/zero/Anisodactylus nigrita/JPGImagesWOOD_14_VENTRAL.19.jpg \n", - " creating: Images/zero/Bembidion quadrimaculatum oppositum/\n", - " inflating: Images/zero/Bembidion quadrimaculatum oppositum/JPGImagesWOOD_13_DORSAL.8.jpg \n", - " inflating: Images/zero/Bembidion quadrimaculatum oppositum/JPGImagesWOOD_13_VENTRAL.8.jpg \n", - " creating: Images/zero/Bembidion Semicampa indet/\n", - " inflating: Images/zero/Bembidion Semicampa indet/JPGImagesTREE_03_DORSAL.2.jpg \n", - " inflating: Images/zero/Bembidion Semicampa indet/JPGImagesTREE_03_VENTRAL.2.jpg \n", - " creating: Images/zero/Carabidae sp/\n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_DORSAL.1.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_DORSAL.10.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_DORSAL.11.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_DORSAL.12.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_DORSAL.13.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_DORSAL.14.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_DORSAL.15.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_DORSAL.2.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_DORSAL.25.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_DORSAL.26.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_DORSAL.27.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_DORSAL.28.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_DORSAL.29.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_DORSAL.3.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_DORSAL.30.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_DORSAL.31.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_DORSAL.32.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_DORSAL.33.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_DORSAL.34.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_DORSAL.4.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_DORSAL.5.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_DORSAL.6.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_DORSAL.7.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_DORSAL.8.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_DORSAL.9.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_VENTRAL.1.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_VENTRAL.10.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_VENTRAL.11.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_VENTRAL.12.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_VENTRAL.13.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_VENTRAL.14.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_VENTRAL.15.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_VENTRAL.2.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_VENTRAL.25.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_VENTRAL.26.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_VENTRAL.27.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_VENTRAL.28.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_VENTRAL.29.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_VENTRAL.3.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_VENTRAL.30.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_VENTRAL.31.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_VENTRAL.32.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_VENTRAL.33.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_VENTRAL.34.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_VENTRAL.4.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_VENTRAL.5.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_VENTRAL.6.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_VENTRAL.7.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_VENTRAL.8.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_VENTRAL.9.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_DORSAL.11.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_DORSAL.12.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_DORSAL.13.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_DORSAL.14.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_DORSAL.15.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_DORSAL.26.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_DORSAL.27.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_DORSAL.28.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_DORSAL.29.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_DORSAL.30.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_DORSAL.31.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_DORSAL.32.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_DORSAL.33.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_DORSAL.34.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_DORSAL.35.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_DORSAL.36.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_DORSAL.37.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_DORSAL.38.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_DORSAL.39.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_VENTRAL.11.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_VENTRAL.12.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_VENTRAL.13.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_VENTRAL.14.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_VENTRAL.15.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_VENTRAL.26.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_VENTRAL.27.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_VENTRAL.28.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_VENTRAL.29.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_VENTRAL.30.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_VENTRAL.31.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_VENTRAL.32.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_VENTRAL.33.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_VENTRAL.34.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_VENTRAL.35.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_VENTRAL.36.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_VENTRAL.37.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_VENTRAL.38.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_VENTRAL.39.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_DORSAL.1.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_DORSAL.10.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_DORSAL.11.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_DORSAL.12.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_DORSAL.13.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_DORSAL.14.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_DORSAL.15.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_DORSAL.16.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_DORSAL.17.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_DORSAL.18.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_DORSAL.19.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_DORSAL.2.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_DORSAL.20.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_DORSAL.3.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_DORSAL.4.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_DORSAL.5.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_DORSAL.6.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_DORSAL.7.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_DORSAL.8.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_DORSAL.9.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_VENTRAL.1.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_VENTRAL.10.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_VENTRAL.11.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_VENTRAL.12.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_VENTRAL.13.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_VENTRAL.14.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_VENTRAL.15.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_VENTRAL.16.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_VENTRAL.17.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_VENTRAL.18.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_VENTRAL.19.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_VENTRAL.2.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_VENTRAL.20.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_VENTRAL.3.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_VENTRAL.4.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_VENTRAL.5.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_VENTRAL.6.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_VENTRAL.7.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_VENTRAL.8.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_VENTRAL.9.jpg \n", - " creating: Images/zero/Carabus taedatus/\n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_DORSAL.1.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_DORSAL.10.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_DORSAL.11.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_DORSAL.12.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_DORSAL.13.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_DORSAL.14.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_DORSAL.15.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_DORSAL.16.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_DORSAL.17.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_DORSAL.18.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_DORSAL.19.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_DORSAL.2.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_DORSAL.20.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_DORSAL.3.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_DORSAL.4.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_DORSAL.5.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_DORSAL.6.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_DORSAL.7.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_DORSAL.8.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_DORSAL.9.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_VENTRAL.1.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_VENTRAL.10.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_VENTRAL.11.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_VENTRAL.12.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_VENTRAL.13.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_VENTRAL.14.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_VENTRAL.15.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_VENTRAL.16.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_VENTRAL.17.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_VENTRAL.18.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_VENTRAL.19.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_VENTRAL.2.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_VENTRAL.20.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_VENTRAL.3.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_VENTRAL.4.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_VENTRAL.5.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_VENTRAL.6.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_VENTRAL.7.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_VENTRAL.8.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_VENTRAL.9.jpg \n", - " creating: Images/zero/Chlaenius alternatus/\n", - " inflating: Images/zero/Chlaenius alternatus/JPGImagesWOOD_13_DORSAL.5.jpg \n", - " inflating: Images/zero/Chlaenius alternatus/JPGImagesWOOD_13_VENTRAL.5.jpg \n", - " inflating: Images/zero/Chlaenius alternatus/JPGImagesWOOD_14_DORSAL.20.jpg \n", - " inflating: Images/zero/Chlaenius alternatus/JPGImagesWOOD_14_DORSAL.21.jpg \n", - " inflating: Images/zero/Chlaenius alternatus/JPGImagesWOOD_14_DORSAL.22.jpg \n", - " inflating: Images/zero/Chlaenius alternatus/JPGImagesWOOD_14_VENTRAL.20.jpg \n", - " inflating: Images/zero/Chlaenius alternatus/JPGImagesWOOD_14_VENTRAL.21.jpg \n", - " inflating: Images/zero/Chlaenius alternatus/JPGImagesWOOD_14_VENTRAL.22.jpg \n", - " creating: Images/zero/Chlaenius erythropus/\n", - " inflating: Images/zero/Chlaenius erythropus/JPGImagesDELA_01_DORSAL.6.jpg \n", - " inflating: Images/zero/Chlaenius erythropus/JPGImagesDELA_01_VENTRAL.6.jpg \n", - " inflating: Images/zero/Chlaenius erythropus/JPGImagesDELA_03_DORSAL.5.jpg \n", - " inflating: Images/zero/Chlaenius erythropus/JPGImagesDELA_03_VENTRAL.5.jpg \n", - " creating: Images/zero/Chlaenius platyderus/\n", - " inflating: Images/zero/Chlaenius platyderus/JPGImagesNOGP_06_DORSAL.22.jpg \n", - " inflating: Images/zero/Chlaenius platyderus/JPGImagesNOGP_06_DORSAL.23.jpg \n", - " inflating: Images/zero/Chlaenius platyderus/JPGImagesNOGP_06_VENTRAL.22.jpg \n", - " inflating: Images/zero/Chlaenius platyderus/JPGImagesNOGP_06_VENTRAL.23.jpg \n", - " creating: Images/zero/Chlaenius tomentosus/\n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_01_DORSAL.14.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_01_DORSAL.15.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_01_VENTRAL.14.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_01_VENTRAL.15.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_02_DORSAL.1.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_02_DORSAL.9.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_02_VENTRAL.1.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_02_VENTRAL.9.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_04_DORSAL.1.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_04_DORSAL.2.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_04_DORSAL.23.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_04_DORSAL.24.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_04_DORSAL.25.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_04_DORSAL.26.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_04_VENTRAL.1.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_04_VENTRAL.2.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_04_VENTRAL.23.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_04_VENTRAL.24.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_04_VENTRAL.25.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_04_VENTRAL.26.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_06_DORSAL.22.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_06_DORSAL.23.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_06_DORSAL.24.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_06_VENTRAL.22.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_06_VENTRAL.23.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_06_VENTRAL.24.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_08_DORSAL.7.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_08_DORSAL.8.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_08_DORSAL.9.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_08_VENTRAL.7.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_08_VENTRAL.8.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_08_VENTRAL.9.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_10_DORSAL.13.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_10_DORSAL.14.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_10_DORSAL.3.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_10_VENTRAL.13.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_10_VENTRAL.14.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_10_VENTRAL.3.jpg \n", - " creating: Images/zero/Cratacanthus dubius/\n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_01_DORSAL.5.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_01_DORSAL.6.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_01_DORSAL.7.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_01_DORSAL.8.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_01_DORSAL.9.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_01_VENTRAL.5.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_01_VENTRAL.6.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_01_VENTRAL.7.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_01_VENTRAL.8.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_01_VENTRAL.9.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_02_DORSAL.48.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_02_DORSAL.49.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_02_DORSAL.50.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_02_VENTRAL.48.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_02_VENTRAL.49.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_02_VENTRAL.50.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_04_DORSAL.3.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_04_VENTRAL.3.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_07_DORSAL.22.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_07_VENTRAL.22.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_08_DORSAL.12.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_08_VENTRAL.12.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_09_DORSAL.12.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_09_DORSAL.13.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_09_DORSAL.14.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_09_DORSAL.15.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_09_DORSAL.16.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_09_DORSAL.17.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_09_DORSAL.18.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_09_DORSAL.19.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_09_VENTRAL.12.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_09_VENTRAL.13.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_09_VENTRAL.14.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_09_VENTRAL.15.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_09_VENTRAL.16.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_09_VENTRAL.17.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_09_VENTRAL.18.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_09_VENTRAL.19.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_10_DORSAL.10.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_10_DORSAL.11.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_10_DORSAL.8.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_10_VENTRAL.10.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_10_VENTRAL.11.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_10_VENTRAL.8.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_11_DORSAL.4.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_11_VENTRAL.4.jpg \n", - " creating: Images/zero/Cyclotrachelus faber/\n", - " inflating: Images/zero/Cyclotrachelus faber/JPGImagesOSBS_01_DORSAL.4.jpg \n", - " inflating: Images/zero/Cyclotrachelus faber/JPGImagesOSBS_01_DORSAL.5.jpg \n", - " inflating: Images/zero/Cyclotrachelus faber/JPGImagesOSBS_01_DORSAL.9.jpg \n", - " inflating: Images/zero/Cyclotrachelus faber/JPGImagesOSBS_01_VENTRAL.4.jpg \n", - " inflating: Images/zero/Cyclotrachelus faber/JPGImagesOSBS_01_VENTRAL.5.jpg \n", - " inflating: Images/zero/Cyclotrachelus faber/JPGImagesOSBS_01_VENTRAL.9.jpg \n", - " inflating: Images/zero/Cyclotrachelus faber/JPGImagesOSBS_05_DORSAL.2.jpg \n", - " inflating: Images/zero/Cyclotrachelus faber/JPGImagesOSBS_05_DORSAL.9.jpg \n", - " inflating: Images/zero/Cyclotrachelus faber/JPGImagesOSBS_05_VENTRAL.2.jpg \n", - " inflating: Images/zero/Cyclotrachelus faber/JPGImagesOSBS_05_VENTRAL.9.jpg \n", - " creating: Images/zero/Cyclotrachelus fucatus/\n", - " inflating: Images/zero/Cyclotrachelus fucatus/JPGImagesORNL_01_DORSAL.1.jpg \n", - " inflating: Images/zero/Cyclotrachelus fucatus/JPGImagesORNL_01_DORSAL.10.jpg \n", - " inflating: Images/zero/Cyclotrachelus fucatus/JPGImagesORNL_01_DORSAL.2.jpg \n", - " inflating: Images/zero/Cyclotrachelus fucatus/JPGImagesORNL_01_DORSAL.3.jpg \n", - " inflating: Images/zero/Cyclotrachelus fucatus/JPGImagesORNL_01_DORSAL.4.jpg \n", - " inflating: Images/zero/Cyclotrachelus fucatus/JPGImagesORNL_01_DORSAL.5.jpg \n", - " inflating: Images/zero/Cyclotrachelus fucatus/JPGImagesORNL_01_DORSAL.6.jpg \n", - " inflating: Images/zero/Cyclotrachelus fucatus/JPGImagesORNL_01_DORSAL.7.jpg \n", - " inflating: Images/zero/Cyclotrachelus fucatus/JPGImagesORNL_01_DORSAL.8.jpg \n", - " inflating: Images/zero/Cyclotrachelus fucatus/JPGImagesORNL_01_DORSAL.9.jpg \n", - " inflating: Images/zero/Cyclotrachelus fucatus/JPGImagesORNL_01_VENTRAL.1.jpg \n", - " inflating: Images/zero/Cyclotrachelus fucatus/JPGImagesORNL_01_VENTRAL.10.jpg \n", - " inflating: Images/zero/Cyclotrachelus fucatus/JPGImagesORNL_01_VENTRAL.2.jpg \n", - " inflating: Images/zero/Cyclotrachelus fucatus/JPGImagesORNL_01_VENTRAL.3.jpg \n", - " inflating: Images/zero/Cyclotrachelus fucatus/JPGImagesORNL_01_VENTRAL.4.jpg \n", - " inflating: Images/zero/Cyclotrachelus fucatus/JPGImagesORNL_01_VENTRAL.5.jpg \n", - " inflating: Images/zero/Cyclotrachelus fucatus/JPGImagesORNL_01_VENTRAL.6.jpg \n", - " inflating: Images/zero/Cyclotrachelus fucatus/JPGImagesORNL_01_VENTRAL.7.jpg \n", - " inflating: Images/zero/Cyclotrachelus fucatus/JPGImagesORNL_01_VENTRAL.8.jpg \n", - " inflating: Images/zero/Cyclotrachelus fucatus/JPGImagesORNL_01_VENTRAL.9.jpg \n", - " creating: Images/zero/Cyclotrachelus sodalis/\n", - " inflating: Images/zero/Cyclotrachelus sodalis/JPGImagesKONZ_04_DORSAL.14.jpg \n", - " inflating: Images/zero/Cyclotrachelus sodalis/JPGImagesKONZ_04_DORSAL.15.jpg \n", - " inflating: Images/zero/Cyclotrachelus sodalis/JPGImagesKONZ_04_DORSAL.16.jpg \n", - " inflating: Images/zero/Cyclotrachelus sodalis/JPGImagesKONZ_04_VENTRAL.14.jpg \n", - " inflating: Images/zero/Cyclotrachelus sodalis/JPGImagesKONZ_04_VENTRAL.15.jpg \n", - " inflating: Images/zero/Cyclotrachelus sodalis/JPGImagesKONZ_04_VENTRAL.16.jpg \n", - " inflating: Images/zero/Cyclotrachelus sodalis/JPGImagesKONZ_06_DORSAL.2.jpg \n", - " inflating: Images/zero/Cyclotrachelus sodalis/JPGImagesKONZ_06_VENTRAL.2.jpg \n", - " creating: Images/zero/Cymindis neglecta/\n", - " inflating: Images/zero/Cymindis neglecta/JPGImagesNOGP_02_DORSAL.24.jpg \n", - " inflating: Images/zero/Cymindis neglecta/JPGImagesNOGP_02_VENTRAL.24.jpg \n", - " inflating: Images/zero/Cymindis neglecta/JPGImagesWOOD_11_DORSAL.5.jpg \n", - " inflating: Images/zero/Cymindis neglecta/JPGImagesWOOD_11_DORSAL.6.jpg \n", - " inflating: Images/zero/Cymindis neglecta/JPGImagesWOOD_11_VENTRAL.5.jpg \n", - " inflating: Images/zero/Cymindis neglecta/JPGImagesWOOD_11_VENTRAL.6.jpg \n", - " inflating: Images/zero/Cymindis neglecta/JPGImagesWOOD_13_DORSAL.14.jpg \n", - " inflating: Images/zero/Cymindis neglecta/JPGImagesWOOD_13_DORSAL.15.jpg \n", - " inflating: Images/zero/Cymindis neglecta/JPGImagesWOOD_13_VENTRAL.14.jpg \n", - " inflating: Images/zero/Cymindis neglecta/JPGImagesWOOD_13_VENTRAL.15.jpg \n", - " inflating: Images/zero/Cymindis neglecta/JPGImagesWOOD_14_DORSAL.23.jpg \n", - " inflating: Images/zero/Cymindis neglecta/JPGImagesWOOD_14_DORSAL.24.jpg \n", - " inflating: Images/zero/Cymindis neglecta/JPGImagesWOOD_14_DORSAL.25.jpg \n", - " inflating: Images/zero/Cymindis neglecta/JPGImagesWOOD_14_VENTRAL.23.jpg \n", - " inflating: Images/zero/Cymindis neglecta/JPGImagesWOOD_14_VENTRAL.24.jpg \n", - " inflating: Images/zero/Cymindis neglecta/JPGImagesWOOD_14_VENTRAL.25.jpg \n", - " creating: Images/zero/Dicaelus furvus carinatus/\n", - " inflating: Images/zero/Dicaelus furvus carinatus/JPGImagesDELA_04_DORSAL.2.jpg \n", - " inflating: Images/zero/Dicaelus furvus carinatus/JPGImagesDELA_04_VENTRAL.2.jpg \n", - " creating: Images/zero/Dicaelus purpuratus/\n", - " inflating: Images/zero/Dicaelus purpuratus/JPGImagesUKFS_01_DORSAL.4.jpg \n", - " inflating: Images/zero/Dicaelus purpuratus/JPGImagesUKFS_01_DORSAL.5.jpg \n", - " inflating: Images/zero/Dicaelus purpuratus/JPGImagesUKFS_01_VENTRAL.4.jpg \n", - " inflating: Images/zero/Dicaelus purpuratus/JPGImagesUKFS_01_VENTRAL.5.jpg \n", - " inflating: Images/zero/Dicaelus purpuratus/JPGImagesUKFS_02_DORSAL.8.jpg \n", - " inflating: Images/zero/Dicaelus purpuratus/JPGImagesUKFS_02_VENTRAL.8.jpg \n", - " inflating: Images/zero/Dicaelus purpuratus/JPGImagesUKFS_03_DORSAL.6.jpg \n", - " inflating: Images/zero/Dicaelus purpuratus/JPGImagesUKFS_03_VENTRAL.6.jpg \n", - " inflating: Images/zero/Dicaelus purpuratus/JPGImagesUKFS_07_DORSAL.1.jpg \n", - " inflating: Images/zero/Dicaelus purpuratus/JPGImagesUKFS_07_VENTRAL.1.jpg \n", - " creating: Images/zero/Dicaelus sculptilis/\n", - " inflating: Images/zero/Dicaelus sculptilis/JPGImagesUKFS_01_DORSAL.1.jpg \n", - " inflating: Images/zero/Dicaelus sculptilis/JPGImagesUKFS_01_VENTRAL.1.jpg \n", - " inflating: Images/zero/Dicaelus sculptilis/JPGImagesUKFS_04_DORSAL.13.jpg \n", - " inflating: Images/zero/Dicaelus sculptilis/JPGImagesUKFS_04_VENTRAL.13.jpg \n", - " inflating: Images/zero/Dicaelus sculptilis/JPGImagesUKFS_05_DORSAL.8.jpg \n", - " inflating: Images/zero/Dicaelus sculptilis/JPGImagesUKFS_05_VENTRAL.8.jpg \n", - " creating: Images/zero/Galerita bicolor/\n", - " inflating: Images/zero/Galerita bicolor/JPGImagesSCBI_02_DORSAL.19.jpg \n", - " inflating: Images/zero/Galerita bicolor/JPGImagesSCBI_02_DORSAL.20.jpg \n", - " inflating: Images/zero/Galerita bicolor/JPGImagesSCBI_02_DORSAL.21.jpg \n", - " inflating: Images/zero/Galerita bicolor/JPGImagesSCBI_02_VENTRAL.19.jpg \n", - " inflating: Images/zero/Galerita bicolor/JPGImagesSCBI_02_VENTRAL.20.jpg \n", - " inflating: Images/zero/Galerita bicolor/JPGImagesSCBI_02_VENTRAL.21.jpg \n", - " creating: Images/zero/Harpalus pensylvanicus/\n", - " inflating: Images/zero/Harpalus pensylvanicus/JPGImagesKONZ_05_DORSAL.15.jpg \n", - " inflating: Images/zero/Harpalus pensylvanicus/JPGImagesKONZ_05_DORSAL.17.jpg \n", - " inflating: Images/zero/Harpalus pensylvanicus/JPGImagesKONZ_05_DORSAL.18.jpg \n", - " inflating: Images/zero/Harpalus pensylvanicus/JPGImagesKONZ_05_VENTRAL.15.jpg \n", - " inflating: Images/zero/Harpalus pensylvanicus/JPGImagesKONZ_05_VENTRAL.17.jpg \n", - " inflating: Images/zero/Harpalus pensylvanicus/JPGImagesKONZ_05_VENTRAL.18.jpg \n", - " inflating: Images/zero/Harpalus pensylvanicus/JPGImagesKONZ_07_DORSAL.13.jpg \n", - " inflating: Images/zero/Harpalus pensylvanicus/JPGImagesKONZ_07_VENTRAL.13.jpg \n", - " creating: Images/zero/Loricera pilicornis pilicornis/\n", - " inflating: Images/zero/Loricera pilicornis pilicornis/JPGImagesUNDE_01_DORSAL.40.jpg \n", - " inflating: Images/zero/Loricera pilicornis pilicornis/JPGImagesUNDE_01_DORSAL.41.jpg \n", - " inflating: Images/zero/Loricera pilicornis pilicornis/JPGImagesUNDE_01_VENTRAL.40.jpg \n", - " inflating: Images/zero/Loricera pilicornis pilicornis/JPGImagesUNDE_01_VENTRAL.41.jpg \n", - " creating: Images/zero/Loxandrus sculptilis/\n", - " inflating: Images/zero/Loxandrus sculptilis/JPGImagesUKFS_01_DORSAL.3.jpg \n", - " inflating: Images/zero/Loxandrus sculptilis/JPGImagesUKFS_01_DORSAL.6.jpg \n", - " inflating: Images/zero/Loxandrus sculptilis/JPGImagesUKFS_01_VENTRAL.3.jpg \n", - " inflating: Images/zero/Loxandrus sculptilis/JPGImagesUKFS_01_VENTRAL.6.jpg \n", - " inflating: Images/zero/Loxandrus sculptilis/JPGImagesUKFS_06_DORSAL.6.jpg \n", - " inflating: Images/zero/Loxandrus sculptilis/JPGImagesUKFS_06_DORSAL.7.jpg \n", - " inflating: Images/zero/Loxandrus sculptilis/JPGImagesUKFS_06_DORSAL.8.jpg \n", - " inflating: Images/zero/Loxandrus sculptilis/JPGImagesUKFS_06_VENTRAL.6.jpg \n", - " inflating: Images/zero/Loxandrus sculptilis/JPGImagesUKFS_06_VENTRAL.7.jpg \n", - " inflating: Images/zero/Loxandrus sculptilis/JPGImagesUKFS_06_VENTRAL.8.jpg \n", - " creating: Images/zero/Oxypselaphus pusillus/\n", - " inflating: Images/zero/Oxypselaphus pusillus/JPGImagesWOOD_09_DORSAL.5.jpg \n", - " inflating: Images/zero/Oxypselaphus pusillus/JPGImagesWOOD_09_DORSAL.6.jpg \n", - " inflating: Images/zero/Oxypselaphus pusillus/JPGImagesWOOD_09_DORSAL.7.jpg \n", - " inflating: Images/zero/Oxypselaphus pusillus/JPGImagesWOOD_09_DORSAL.8.jpg \n", - " inflating: Images/zero/Oxypselaphus pusillus/JPGImagesWOOD_09_VENTRAL.5.jpg \n", - " inflating: Images/zero/Oxypselaphus pusillus/JPGImagesWOOD_09_VENTRAL.6.jpg \n", - " inflating: Images/zero/Oxypselaphus pusillus/JPGImagesWOOD_09_VENTRAL.7.jpg \n", - " inflating: Images/zero/Oxypselaphus pusillus/JPGImagesWOOD_09_VENTRAL.8.jpg \n", - " creating: Images/zero/Pasimachus marginatus/\n", - " inflating: Images/zero/Pasimachus marginatus/JPGImagesOSBS_03_DORSAL.1.jpg \n", - " inflating: Images/zero/Pasimachus marginatus/JPGImagesOSBS_03_DORSAL.18.jpg \n", - " inflating: Images/zero/Pasimachus marginatus/JPGImagesOSBS_03_DORSAL.2.jpg \n", - " inflating: Images/zero/Pasimachus marginatus/JPGImagesOSBS_03_DORSAL.3.jpg \n", - " inflating: Images/zero/Pasimachus marginatus/JPGImagesOSBS_03_VENTRAL.1.jpg \n", - " inflating: Images/zero/Pasimachus marginatus/JPGImagesOSBS_03_VENTRAL.18.jpg \n", - " inflating: Images/zero/Pasimachus marginatus/JPGImagesOSBS_03_VENTRAL.2.jpg \n", - " inflating: Images/zero/Pasimachus marginatus/JPGImagesOSBS_03_VENTRAL.3.jpg \n", - " inflating: Images/zero/Pasimachus marginatus/JPGImagesOSBS_06_DORSAL.4.jpg \n", - " inflating: Images/zero/Pasimachus marginatus/JPGImagesOSBS_06_DORSAL.5.jpg \n", - " inflating: Images/zero/Pasimachus marginatus/JPGImagesOSBS_06_VENTRAL.4.jpg \n", - " inflating: Images/zero/Pasimachus marginatus/JPGImagesOSBS_06_VENTRAL.5.jpg \n", - " inflating: Images/zero/Pasimachus marginatus/JPGImagesOSBS_07_DORSAL.10.jpg \n", - " inflating: Images/zero/Pasimachus marginatus/JPGImagesOSBS_07_DORSAL.11.jpg \n", - " inflating: Images/zero/Pasimachus marginatus/JPGImagesOSBS_07_DORSAL.7.jpg \n", - " inflating: Images/zero/Pasimachus marginatus/JPGImagesOSBS_07_DORSAL.8.jpg \n", - " inflating: Images/zero/Pasimachus marginatus/JPGImagesOSBS_07_DORSAL.9.jpg \n", - " inflating: Images/zero/Pasimachus marginatus/JPGImagesOSBS_07_VENTRAL.10.jpg \n", - " inflating: Images/zero/Pasimachus marginatus/JPGImagesOSBS_07_VENTRAL.11.jpg \n", - " inflating: Images/zero/Pasimachus marginatus/JPGImagesOSBS_07_VENTRAL.7.jpg \n", - " inflating: Images/zero/Pasimachus marginatus/JPGImagesOSBS_07_VENTRAL.8.jpg \n", - " inflating: Images/zero/Pasimachus marginatus/JPGImagesOSBS_07_VENTRAL.9.jpg \n", - " creating: Images/zero/Pasimachus sublaevis/\n", - " inflating: Images/zero/Pasimachus sublaevis/JPGImagesOSBS_03_DORSAL.10.jpg \n", - " inflating: Images/zero/Pasimachus sublaevis/JPGImagesOSBS_03_DORSAL.11.jpg \n", - " inflating: Images/zero/Pasimachus sublaevis/JPGImagesOSBS_03_DORSAL.6.jpg \n", - " inflating: Images/zero/Pasimachus sublaevis/JPGImagesOSBS_03_DORSAL.7.jpg \n", - " inflating: Images/zero/Pasimachus sublaevis/JPGImagesOSBS_03_DORSAL.8.jpg \n", - " inflating: Images/zero/Pasimachus sublaevis/JPGImagesOSBS_03_DORSAL.9.jpg \n", - " inflating: Images/zero/Pasimachus sublaevis/JPGImagesOSBS_03_VENTRAL.10.jpg \n", - " inflating: Images/zero/Pasimachus sublaevis/JPGImagesOSBS_03_VENTRAL.11.jpg \n", - " inflating: Images/zero/Pasimachus sublaevis/JPGImagesOSBS_03_VENTRAL.6.jpg \n", - " inflating: Images/zero/Pasimachus sublaevis/JPGImagesOSBS_03_VENTRAL.7.jpg \n", - " inflating: Images/zero/Pasimachus sublaevis/JPGImagesOSBS_03_VENTRAL.8.jpg \n", - " inflating: Images/zero/Pasimachus sublaevis/JPGImagesOSBS_03_VENTRAL.9.jpg \n", - " inflating: Images/zero/Pasimachus sublaevis/JPGImagesOSBS_04_DORSAL.1.jpg \n", - " inflating: Images/zero/Pasimachus sublaevis/JPGImagesOSBS_04_DORSAL.2.jpg \n", - " inflating: Images/zero/Pasimachus sublaevis/JPGImagesOSBS_04_DORSAL.3.jpg \n", - " inflating: Images/zero/Pasimachus sublaevis/JPGImagesOSBS_04_VENTRAL.1.jpg \n", - " inflating: Images/zero/Pasimachus sublaevis/JPGImagesOSBS_04_VENTRAL.2.jpg \n", - " inflating: Images/zero/Pasimachus sublaevis/JPGImagesOSBS_04_VENTRAL.3.jpg \n", - " inflating: Images/zero/Pasimachus sublaevis/JPGImagesOSBS_05_DORSAL.3.jpg \n", - " inflating: Images/zero/Pasimachus sublaevis/JPGImagesOSBS_05_DORSAL.4.jpg \n", - " inflating: Images/zero/Pasimachus sublaevis/JPGImagesOSBS_05_DORSAL.5.jpg \n", - " inflating: Images/zero/Pasimachus sublaevis/JPGImagesOSBS_05_DORSAL.6.jpg \n", - " inflating: Images/zero/Pasimachus sublaevis/JPGImagesOSBS_05_VENTRAL.3.jpg \n", - " inflating: Images/zero/Pasimachus sublaevis/JPGImagesOSBS_05_VENTRAL.4.jpg \n", - " inflating: Images/zero/Pasimachus sublaevis/JPGImagesOSBS_05_VENTRAL.5.jpg \n", - " inflating: Images/zero/Pasimachus sublaevis/JPGImagesOSBS_05_VENTRAL.6.jpg \n", - " creating: Images/zero/Piosoma setosum/\n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_01_DORSAL.54.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_01_DORSAL.55.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_01_DORSAL.56.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_01_DORSAL.57.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_01_DORSAL.58.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_01_DORSAL.59.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_01_DORSAL.60.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_01_DORSAL.61.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_01_DORSAL.62.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_01_DORSAL.63.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_01_DORSAL.64.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_01_DORSAL.65.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_01_DORSAL.66.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_01_DORSAL.67.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_01_VENTRAL.54.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_01_VENTRAL.55.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_01_VENTRAL.56.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_01_VENTRAL.57.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_01_VENTRAL.58.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_01_VENTRAL.59.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_01_VENTRAL.60.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_01_VENTRAL.61.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_01_VENTRAL.62.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_01_VENTRAL.63.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_01_VENTRAL.64.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_01_VENTRAL.65.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_01_VENTRAL.66.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_01_VENTRAL.67.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_06_DORSAL.21.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_06_DORSAL.22.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_06_DORSAL.23.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_06_VENTRAL.21.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_06_VENTRAL.22.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_06_VENTRAL.23.jpg \n", - " creating: Images/zero/Platynus decentis/\n", - " inflating: Images/zero/Platynus decentis/JPGImagesSTEI_01_VENTRAL.8.jpg \n", - " inflating: Images/zero/Platynus decentis/JPGImagesSTEI_04_DORSAL.22.jpg \n", - " inflating: Images/zero/Platynus decentis/JPGImagesSTEI_04_VENTRAL.22.jpg \n", - " creating: Images/zero/Poecilus chalcites/\n", - " inflating: Images/zero/Poecilus chalcites/JPGImagesSERC_05_DORSAL.1.jpg \n", - " inflating: Images/zero/Poecilus chalcites/JPGImagesSERC_05_DORSAL.18.jpg \n", - " inflating: Images/zero/Poecilus chalcites/JPGImagesSERC_05_DORSAL.19.jpg \n", - " inflating: Images/zero/Poecilus chalcites/JPGImagesSERC_05_DORSAL.2.jpg \n", - " inflating: Images/zero/Poecilus chalcites/JPGImagesSERC_05_DORSAL.20.jpg \n", - " inflating: Images/zero/Poecilus chalcites/JPGImagesSERC_05_DORSAL.21.jpg \n", - " inflating: Images/zero/Poecilus chalcites/JPGImagesSERC_05_DORSAL.22.jpg \n", - " inflating: Images/zero/Poecilus chalcites/JPGImagesSERC_05_DORSAL.3.jpg \n", - " inflating: Images/zero/Poecilus chalcites/JPGImagesSERC_05_DORSAL.4.jpg \n", - " inflating: Images/zero/Poecilus chalcites/JPGImagesSERC_05_DORSAL.5.jpg \n", - " inflating: Images/zero/Poecilus chalcites/JPGImagesSERC_05_DORSAL.6.jpg \n", - " inflating: Images/zero/Poecilus chalcites/JPGImagesSERC_05_VENTRAL.1.jpg \n", - " inflating: Images/zero/Poecilus chalcites/JPGImagesSERC_05_VENTRAL.18.jpg \n", - " inflating: Images/zero/Poecilus chalcites/JPGImagesSERC_05_VENTRAL.19.jpg \n", - " inflating: Images/zero/Poecilus chalcites/JPGImagesSERC_05_VENTRAL.2.jpg \n", - " inflating: Images/zero/Poecilus chalcites/JPGImagesSERC_05_VENTRAL.20.jpg \n", - " inflating: Images/zero/Poecilus chalcites/JPGImagesSERC_05_VENTRAL.21.jpg \n", - " inflating: Images/zero/Poecilus chalcites/JPGImagesSERC_05_VENTRAL.22.jpg \n", - " inflating: Images/zero/Poecilus chalcites/JPGImagesSERC_05_VENTRAL.3.jpg \n", - " inflating: Images/zero/Poecilus chalcites/JPGImagesSERC_05_VENTRAL.4.jpg \n", - " inflating: Images/zero/Poecilus chalcites/JPGImagesSERC_05_VENTRAL.5.jpg \n", - " inflating: Images/zero/Poecilus chalcites/JPGImagesSERC_05_VENTRAL.6.jpg \n", - " creating: Images/zero/Pterostichus coracinus/\n", - " inflating: Images/zero/Pterostichus coracinus/JPGImagesSCBI_02_DORSAL.22.jpg \n", - " inflating: Images/zero/Pterostichus coracinus/JPGImagesSCBI_02_DORSAL.23.jpg \n", - " inflating: Images/zero/Pterostichus coracinus/JPGImagesSCBI_02_VENTRAL.22.jpg \n", - " inflating: Images/zero/Pterostichus coracinus/JPGImagesSCBI_02_VENTRAL.23.jpg \n", - " inflating: Images/zero/Pterostichus coracinus/JPGImagesUNDE_05_DORSAL.7.jpg \n", - " inflating: Images/zero/Pterostichus coracinus/JPGImagesUNDE_05_VENTRAL.7.jpg \n", - " creating: Images/zero/Pterostichus femoralis/\n", - " inflating: Images/zero/Pterostichus femoralis/JPGImagesWOOD_09_DORSAL.1.jpg \n", - " inflating: Images/zero/Pterostichus femoralis/JPGImagesWOOD_09_DORSAL.2.jpg \n", - " inflating: Images/zero/Pterostichus femoralis/JPGImagesWOOD_09_DORSAL.3.jpg \n", - " inflating: Images/zero/Pterostichus femoralis/JPGImagesWOOD_09_DORSAL.4.jpg \n", - " inflating: Images/zero/Pterostichus femoralis/JPGImagesWOOD_09_VENTRAL.1.jpg \n", - " inflating: Images/zero/Pterostichus femoralis/JPGImagesWOOD_09_VENTRAL.2.jpg \n", - " inflating: Images/zero/Pterostichus femoralis/JPGImagesWOOD_09_VENTRAL.3.jpg \n", - " inflating: Images/zero/Pterostichus femoralis/JPGImagesWOOD_09_VENTRAL.4.jpg \n", - " inflating: Images/zero/Pterostichus femoralis/JPGImagesWOOD_11_DORSAL.2.jpg \n", - " inflating: Images/zero/Pterostichus femoralis/JPGImagesWOOD_11_VENTRAL.2.jpg \n", - " inflating: Images/zero/Pterostichus femoralis/JPGImagesWOOD_12_DORSAL.19.jpg \n", - " inflating: Images/zero/Pterostichus femoralis/JPGImagesWOOD_12_VENTRAL.19.jpg \n", - " inflating: Images/zero/Pterostichus femoralis/JPGImagesWOOD_13_DORSAL.17.jpg \n", - " inflating: Images/zero/Pterostichus femoralis/JPGImagesWOOD_13_DORSAL.18.jpg \n", - " inflating: Images/zero/Pterostichus femoralis/JPGImagesWOOD_13_VENTRAL.17.jpg \n", - " inflating: Images/zero/Pterostichus femoralis/JPGImagesWOOD_13_VENTRAL.18.jpg \n", - " creating: Images/zero/Pterostichus luctuosus/\n", - " inflating: Images/zero/Pterostichus luctuosus/JPGImagesWOOD_05_DORSAL.4.jpg \n", - " inflating: Images/zero/Pterostichus luctuosus/JPGImagesWOOD_05_VENTRAL.4.jpg \n", - " inflating: Images/zero/Pterostichus luctuosus/JPGImagesWOOD_07_DORSAL.26.jpg \n", - " inflating: Images/zero/Pterostichus luctuosus/JPGImagesWOOD_07_DORSAL.27.jpg \n", - " inflating: Images/zero/Pterostichus luctuosus/JPGImagesWOOD_07_DORSAL.28.jpg \n", - " inflating: Images/zero/Pterostichus luctuosus/JPGImagesWOOD_07_VENTRAL.26.jpg \n", - " inflating: Images/zero/Pterostichus luctuosus/JPGImagesWOOD_07_VENTRAL.27.jpg \n", - " inflating: Images/zero/Pterostichus luctuosus/JPGImagesWOOD_07_VENTRAL.28.jpg \n", - " creating: Images/zero/Pterostichus pensylvanicus/\n", - " inflating: Images/zero/Pterostichus pensylvanicus/JPGImagesUNDE_04_DORSAL.1.jpg \n", - " inflating: Images/zero/Pterostichus pensylvanicus/JPGImagesUNDE_04_VENTRAL.1.jpg \n", - " creating: Images/zero/Pterostichus permundus/\n", - " inflating: Images/zero/Pterostichus permundus/JPGImagesBLAN_05_DORSAL.21.jpg \n", - " inflating: Images/zero/Pterostichus permundus/JPGImagesBLAN_05_DORSAL.22.jpg \n", - " inflating: Images/zero/Pterostichus permundus/JPGImagesBLAN_05_DORSAL.23.jpg \n", - " inflating: Images/zero/Pterostichus permundus/JPGImagesBLAN_05_DORSAL.24.jpg \n", - " inflating: Images/zero/Pterostichus permundus/JPGImagesBLAN_05_DORSAL.25.jpg \n", - " inflating: Images/zero/Pterostichus permundus/JPGImagesBLAN_05_DORSAL.26.jpg \n", - " inflating: Images/zero/Pterostichus permundus/JPGImagesBLAN_05_DORSAL.27.jpg \n", - " inflating: Images/zero/Pterostichus permundus/JPGImagesBLAN_05_VENTRAL.21.jpg \n", - " inflating: Images/zero/Pterostichus permundus/JPGImagesBLAN_05_VENTRAL.22.jpg \n", - " inflating: Images/zero/Pterostichus permundus/JPGImagesBLAN_05_VENTRAL.23.jpg \n", - " inflating: Images/zero/Pterostichus permundus/JPGImagesBLAN_05_VENTRAL.24.jpg \n", - " inflating: Images/zero/Pterostichus permundus/JPGImagesBLAN_05_VENTRAL.25.jpg \n", - " inflating: Images/zero/Pterostichus permundus/JPGImagesBLAN_05_VENTRAL.26.jpg \n", - " inflating: Images/zero/Pterostichus permundus/JPGImagesBLAN_05_VENTRAL.27.jpg \n", - " creating: Images/zero/Pterostichus sculptus/\n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesKONZ_06_DORSAL.1.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesKONZ_06_VENTRAL.1.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesKONZ_07_DORSAL.11.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesKONZ_07_DORSAL.12.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesKONZ_07_VENTRAL.11.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesKONZ_07_VENTRAL.12.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_01_DORSAL.7.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_01_VENTRAL.7.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_03_DORSAL.1.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_03_DORSAL.2.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_03_DORSAL.3.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_03_DORSAL.4.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_03_DORSAL.5.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_03_VENTRAL.1.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_03_VENTRAL.2.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_03_VENTRAL.3.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_03_VENTRAL.4.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_03_VENTRAL.5.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_04_DORSAL.10.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_04_DORSAL.3.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_04_DORSAL.4.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_04_DORSAL.5.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_04_DORSAL.6.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_04_DORSAL.7.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_04_DORSAL.8.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_04_DORSAL.9.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_04_VENTRAL.10.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_04_VENTRAL.3.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_04_VENTRAL.4.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_04_VENTRAL.5.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_04_VENTRAL.6.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_04_VENTRAL.7.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_04_VENTRAL.8.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_04_VENTRAL.9.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_06_DORSAL.1.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_06_DORSAL.2.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_06_DORSAL.3.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_06_VENTRAL.1.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_06_VENTRAL.2.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_06_VENTRAL.3.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_07_DORSAL.6.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_07_VENTRAL.6.jpg \n", - " creating: Images/zero/Pterostichus trinarius/\n", - " inflating: Images/zero/Pterostichus trinarius/JPGImagesBLAN_06_DORSAL.18.jpg \n", - " inflating: Images/zero/Pterostichus trinarius/JPGImagesBLAN_06_DORSAL.19.jpg \n", - " inflating: Images/zero/Pterostichus trinarius/JPGImagesBLAN_06_DORSAL.20.jpg \n", - " inflating: Images/zero/Pterostichus trinarius/JPGImagesBLAN_06_DORSAL.21.jpg \n", - " inflating: Images/zero/Pterostichus trinarius/JPGImagesBLAN_06_DORSAL.22.jpg \n", - " inflating: Images/zero/Pterostichus trinarius/JPGImagesBLAN_06_DORSAL.23.jpg \n", - " inflating: Images/zero/Pterostichus trinarius/JPGImagesBLAN_06_DORSAL.3.jpg \n", - " inflating: Images/zero/Pterostichus trinarius/JPGImagesBLAN_06_DORSAL.4.jpg \n", - " inflating: Images/zero/Pterostichus trinarius/JPGImagesBLAN_06_DORSAL.6.jpg \n", - " inflating: Images/zero/Pterostichus trinarius/JPGImagesBLAN_06_DORSAL.7.jpg \n", - " inflating: Images/zero/Pterostichus trinarius/JPGImagesBLAN_06_DORSAL.8.jpg \n", - " inflating: Images/zero/Pterostichus trinarius/JPGImagesBLAN_06_VENTRAL.18.jpg \n", - " inflating: Images/zero/Pterostichus trinarius/JPGImagesBLAN_06_VENTRAL.19.jpg \n", - " inflating: Images/zero/Pterostichus trinarius/JPGImagesBLAN_06_VENTRAL.20.jpg \n", - " inflating: Images/zero/Pterostichus trinarius/JPGImagesBLAN_06_VENTRAL.21.jpg \n", - " inflating: Images/zero/Pterostichus trinarius/JPGImagesBLAN_06_VENTRAL.22.jpg \n", - " inflating: Images/zero/Pterostichus trinarius/JPGImagesBLAN_06_VENTRAL.23.jpg \n", - " inflating: Images/zero/Pterostichus trinarius/JPGImagesBLAN_06_VENTRAL.3.jpg \n", - " inflating: Images/zero/Pterostichus trinarius/JPGImagesBLAN_06_VENTRAL.4.jpg \n", - " inflating: Images/zero/Pterostichus trinarius/JPGImagesBLAN_06_VENTRAL.6.jpg \n", - " inflating: Images/zero/Pterostichus trinarius/JPGImagesBLAN_06_VENTRAL.7.jpg \n", - " inflating: Images/zero/Pterostichus trinarius/JPGImagesBLAN_06_VENTRAL.8.jpg \n", - " creating: Images/zero/Sphaeroderus stenostomus lecontei/\n", - " inflating: Images/zero/Sphaeroderus stenostomus lecontei/JPGImagesSTEI_01_VENTRAL.28.jpg \n", - " inflating: Images/zero/Sphaeroderus stenostomus lecontei/JPGImagesSTEI_03_DORSAL.50.jpg \n", - " inflating: Images/zero/Sphaeroderus stenostomus lecontei/JPGImagesSTEI_03_DORSAL.52.jpg \n", - " inflating: Images/zero/Sphaeroderus stenostomus lecontei/JPGImagesSTEI_03_VENTRAL.50.jpg \n", - " inflating: Images/zero/Sphaeroderus stenostomus lecontei/JPGImagesSTEI_03_VENTRAL.52.jpg \n", - " creating: Images/zero/Syntomus americanus/\n", - " inflating: Images/zero/Syntomus americanus/JPGImagesNOGP_01_DORSAL.8.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesNOGP_01_DORSAL.9.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesNOGP_01_VENTRAL.8.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesNOGP_01_VENTRAL.9.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesNOGP_02_DORSAL.1.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesNOGP_02_DORSAL.2.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesNOGP_02_DORSAL.27.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesNOGP_02_DORSAL.28.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesNOGP_02_DORSAL.29.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesNOGP_02_DORSAL.3.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesNOGP_02_DORSAL.4.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesNOGP_02_VENTRAL.1.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesNOGP_02_VENTRAL.2.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesNOGP_02_VENTRAL.27.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesNOGP_02_VENTRAL.28.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesNOGP_02_VENTRAL.29.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesNOGP_02_VENTRAL.3.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesNOGP_02_VENTRAL.4.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesNOGP_03_DORSAL.4.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesNOGP_03_DORSAL.5.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesNOGP_03_DORSAL.6.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesNOGP_03_VENTRAL.4.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesNOGP_03_VENTRAL.5.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesNOGP_03_VENTRAL.6.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesNOGP_06_DORSAL.24.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesNOGP_06_VENTRAL.24.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesWOOD_01_DORSAL.3.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesWOOD_01_DORSAL.4.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesWOOD_01_VENTRAL.3.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesWOOD_01_VENTRAL.4.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesWOOD_12_DORSAL.10.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesWOOD_12_DORSAL.12.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesWOOD_12_DORSAL.14.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesWOOD_12_DORSAL.15.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesWOOD_12_DORSAL.18.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesWOOD_12_VENTRAL.10.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesWOOD_12_VENTRAL.12.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesWOOD_12_VENTRAL.14.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesWOOD_12_VENTRAL.15.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesWOOD_12_VENTRAL.18.jpg \n", - " creating: Images/zero/Tetracha virginica/\n", - " inflating: Images/zero/Tetracha virginica/JPGImagesKONZ_05_DORSAL.21.jpg \n", - " inflating: Images/zero/Tetracha virginica/JPGImagesKONZ_05_VENTRAL.21.jpg \n", - " inflating: Images/zero/Tetracha virginica/JPGImagesUKFS_03_DORSAL.10.jpg \n", - " inflating: Images/zero/Tetracha virginica/JPGImagesUKFS_03_DORSAL.11.jpg \n", - " inflating: Images/zero/Tetracha virginica/JPGImagesUKFS_03_DORSAL.12.jpg \n", - " inflating: Images/zero/Tetracha virginica/JPGImagesUKFS_03_DORSAL.9.jpg \n", - " inflating: Images/zero/Tetracha virginica/JPGImagesUKFS_03_VENTRAL.10.jpg \n", - " inflating: Images/zero/Tetracha virginica/JPGImagesUKFS_03_VENTRAL.11.jpg \n", - " inflating: Images/zero/Tetracha virginica/JPGImagesUKFS_03_VENTRAL.12.jpg \n", - " inflating: Images/zero/Tetracha virginica/JPGImagesUKFS_03_VENTRAL.9.jpg \n", - " inflating: Images/zero/Tetracha virginica/JPGImagesUKFS_04_DORSAL.11.jpg \n", - " inflating: Images/zero/Tetracha virginica/JPGImagesUKFS_04_DORSAL.12.jpg \n", - " inflating: Images/zero/Tetracha virginica/JPGImagesUKFS_04_VENTRAL.11.jpg \n", - " inflating: Images/zero/Tetracha virginica/JPGImagesUKFS_04_VENTRAL.12.jpg \n", - " inflating: Images/zero/Tetracha virginica/JPGImagesUKFS_06_DORSAL.4.jpg \n", - " inflating: Images/zero/Tetracha virginica/JPGImagesUKFS_06_DORSAL.5.jpg \n", - " inflating: Images/zero/Tetracha virginica/JPGImagesUKFS_06_VENTRAL.4.jpg \n", - " inflating: Images/zero/Tetracha virginica/JPGImagesUKFS_06_VENTRAL.5.jpg \n", - " inflating: Images/zero/Tetracha virginica/JPGImagesUKFS_07_DORSAL.2.jpg \n", - " inflating: Images/zero/Tetracha virginica/JPGImagesUKFS_07_DORSAL.3.jpg \n", - " inflating: Images/zero/Tetracha virginica/JPGImagesUKFS_07_DORSAL.4.jpg \n", - " inflating: Images/zero/Tetracha virginica/JPGImagesUKFS_07_DORSAL.5.jpg \n", - " inflating: Images/zero/Tetracha virginica/JPGImagesUKFS_07_VENTRAL.2.jpg \n", - " inflating: Images/zero/Tetracha virginica/JPGImagesUKFS_07_VENTRAL.3.jpg \n", - " inflating: Images/zero/Tetracha virginica/JPGImagesUKFS_07_VENTRAL.4.jpg \n", - " inflating: Images/zero/Tetracha virginica/JPGImagesUKFS_07_VENTRAL.5.jpg \n" - ] - } - ], + "outputs": [], "source": [ - "!python -m examples.blair.construct" + "import os\n", + "from pathlib import Path\n", + "import subprocess\n", + "import sys\n", + "\n", + "ROOT = Path.cwd()\n", + "if ROOT.name == \"examples\":\n", + " ROOT = ROOT.parent\n", + "if not (ROOT / \"pyproject.toml\").is_file():\n", + " raise RuntimeError(\"Start this notebook in the repository root or examples directory.\")\n", + "subprocess.run([sys.executable, \"-m\", \"examples.blair.construct\"], cwd=ROOT, check=True)\n", + "os.chdir(ROOT / \"examples\")\n" ] }, { @@ -6631,57 +42,10 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "id": "319d4037", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'input': '/home/asger/Repositories/mini_trainer/examples/blair/train', 'output': '/home/asger/Repositories/mini_trainer/examples/blair', 'epochs': 5, 'size': 128, 'name': 'blair_model', 'device': 'cuda:0', 'dtype': 'float16', 'ema': False, 'builder': 'mini_trainer.hierarchical.integration.HierarchicalBuilder', 'spec_model_dataloader_kwargs': {'species': True, 'levels': 2}, 'model_builder_kwargs': {'model_type': 'efficientnet_v2_s', 'fine_tune': False, 'hidden': True, 'droprate': 0.1, 'normalized': True, 'cls': 'mini_trainer.hierarchical.model.HierarchicalClassifier'}, 'dataloader_builder_kwargs': {'batch_size': 32, 'train_proportion': 0.9, 'resample': False, 'cache': 'CUDA'}, 'optimizer_builder_kwargs': {'optimizer_cls': 'mini_trainer.training.muon.MuonAuxAdamW', 'lr': 0.01, 'weight_decay': 0.01}, 'ema_builder_kwargs': {'epoch_halflife': 1.5, 'update_rate': 4, 'temperature': 1.0, 'distill_start': 2.0}, 'criterion_builder_kwargs': {'weighted': True, 'label_smoothing': 0.1, 'weights': [1.0, 1.0]}, 'regularizer_builder_kwargs': {'strength': 0.1}, 'lr_schedule_builder_kwargs': {'warmup_epochs': 1.0}, 'logger_builder_kwargs': {'verbose': True, 'logger_cls': ['mini_trainer.logging.core.MetricLogger']}}\n", - "Building class spec...\n", - "Building dataloaders... \n", - "Building datasets with image size (128, 128)\n", - "/home/asger/Repositories/mini_trainer/mini_trainer/data/io.py:370: UserWarning: CUDA caching is currently in development and may not work properly. Using device: `cuda:0` for cache.\n", - " warnings.warn(\n", - "Dataloaders built successfully. Train batches: 130, Val batches: 8 \n", - "Building model...\n", - "Calling train() function...\n", - "Start training\n", - "train_one_epoch starting for epoch 0.\n", - "acc1= 30.4 | acc5= 64.0 | loss= 4.8 | item/s=315.7 | mem=969.7 | acc1/lvl1= 37.3 | acc5/lvl1= 79.2 | loss/lvl0= 2.82 | loss/lvl1= 1.98\n", - "train_one_epoch starting for epoch 1. \n", - "acc1= 32.8 | acc5= 76.5 | loss= 4.3 | item/s=351.0 | mem=969.0 | acc1/lvl1= 51.2 | acc5/lvl1= 90.6 | loss/lvl0= 2.54 | loss/lvl1= 1.79\n", - "train_one_epoch starting for epoch 2. \n", - "acc1= 51.1 | acc5= 86.7 | loss= 3.2 | item/s=355.0 | mem=969.7 | acc1/lvl1= 69.0 | acc5/lvl1= 99.2 | loss/lvl0= 2.04 | loss/lvl1= 1.21\n", - "train_one_epoch starting for epoch 3. \n", - "acc1= 63.9 | acc5= 97.3 | loss= 2.23 | item/s=361.9 | mem=970.9 | acc1/lvl1= 76.4 | acc5/lvl1= 99.2 | loss/lvl0= 1.40 | loss/lvl1=0.832\n", - "train_one_epoch starting for epoch 4. \n", - "acc1= 74.4 | acc5= 98.4 | loss= 1.89 | item/s=359.4 | mem=969.7 | acc1/lvl1= 86.5 | acc5/lvl1= 99.2 | loss/lvl0= 1.22 | loss/lvl1=0.677\n", - "Total time 0:03:42 | Best model found at epoch 5 \n", - "\n", - "\ttrain : 03m34s\n", - "\teval : 04s\n", - "Final weights saved at: /home/asger/Repositories/mini_trainer/examples/blair/blair_model/weights/last.pt\n", - "{'input': '/home/asger/Repositories/mini_trainer/examples/blair/test', 'weights': 'blair_model/weights/last.pt', 'output': '/home/asger/Repositories/mini_trainer/examples/blair/blair_model/predict', 'name': 'predict', 'threshold': 0, 'device': 'cuda:0', 'dtype': 'float16', 'builder': 'mini_trainer.hierarchical.integration.HierarchicalBuilder', 'collector_cls': 'mini_trainer.hierarchical.integration.HierarchicalResultCollector', 'dataloader_builder_kwargs': {'batch_size': 16}, 'collector_cls_kwargs': {'scientific_names': False, 'verbose': True}}\n", - "/home/asger/Repositories/mini_trainer/mini_trainer/modeling/classifier.py:445: UserWarning: Model configuration option hidden overriden by value stored in config: 1280 ==> True\n", - " warnings.warn(f\"Model configuration option {k} overriden by value stored in config: {kwargs[k]} ==> {v}\", UserWarning)\n", - "Running inference: 100%|█████████████████████| 73/73 [00:05<00:00, 12.97batch/s]\n", - "METRIC TABLE \n", - " | accuracy | precision | recall | f1 | micro_accuracy | micro_precision | micro_recall | micro_f1 | theilU\n", - "--------|----------|-----------|--------|--------|----------------|-----------------|--------------|----------|-------\n", - "level 0 | 69.67% | 67.88% | 69.67% | 65.66% | 72.52% | 79.18% | 72.52% | 73.93% | 77.46%\n", - "level 1 | 80.41% | 77.31% | 80.41% | 75.55% | 83.38% | 86.99% | 83.38% | 83.93% | 80.90%\n", - " \n", - " | coverage | vocabulary_coverage | optimal_confidence_threshold | macro_optimal_confidence_threshold\n", - "--------|----------|---------------------|------------------------------|-----------------------------------\n", - "level 0 | 100.00% | 100.00% | 57.66% | 57.67% \n", - "level 1 | 100.00% | 100.00% | 68.30% | 67.68% \n", - " \n" - ] - } - ], + "outputs": [], "source": [ "# Remove `--cache CUDA` and/or lower batch_size if you have limited VRAM\n", "!rm -rf blair/blair_model\n", @@ -6720,297 +84,10 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "id": "5f073fa5", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[Launcher] Resolving network topology...\n", - "[Launcher] Establishing ephemeral NFS mount over QSFP...\n", - "[Launcher] -> Mounted Project: 192.168.100.10:/home/asger/Repositories/mini_trainer ==> spkc:/home/asger/Repositories/mini_trainer\n", - "[Launcher] -> Mounted Cache: 192.168.100.10:/home/asger/.cache ==> spkc:/home/asger/.cache\n", - "[Launcher] Verifying environment synchronization...\n", - "[Launcher] Testing PyTorch import on worker node...\n", - " PyTorch 2.12.0+cu130 loaded on worker.\n", - "[Launcher] Spawning worker on spkc (192.168.100.11)...\n", - "[Launcher] Spawning master locally (192.168.100.10)...\n", - "[W728 11:41:03.060308144 socket.cpp:207] [c10d] The hostname of the client socket cannot be retrieved. err=-3\n", - "spark-967b:638840:638840 [0] NCCL INFO ENV/Plugin: Could not find: libnccl-env.so\n", - "spark-967b:638840:638840 [0] NCCL INFO NCCL_SOCKET_IFNAME set by environment to enp1s0f1np1\n", - "spark-967b:638840:638840 [0] NCCL INFO Bootstrap: Using enp1s0f1np1:192.168.100.10<0>\n", - "spark-967b:638840:638840 [0] NCCL INFO cudaDriverVersion 13000\n", - "spark-967b:638840:638840 [0] NCCL INFO NCCL version 2.29.7+cuda13.2\n", - "spark-967b:638840:638840 [0] NCCL INFO NCCL git version stable b81d6a5a3\n", - "spark-967b:638840:638840 [0] NCCL INFO Comm config Blocking set to 1\n", - "spark-967b:638840:638840 [0] NCCL INFO NET/Plugin: Could not find: libnccl-net.so\n", - "spark-967b:638840:638840 [0] NCCL INFO NCCL_SOCKET_IFNAME set by environment to enp1s0f1np1\n", - "spark-967b:638840:638840 [0] NCCL INFO NET/IB : Using [0]rocep1s0f1:1/RoCE [1]roceP2p1s0f1:1/RoCE [RO]; OOB enp1s0f1np1:192.168.100.10<0>\n", - "spark-967b:638840:638840 [0] NCCL INFO Initialized NET plugin IB\n", - "spark-967b:638840:638840 [0] NCCL INFO Assigned NET plugin IB to comm\n", - "spark-967b:638840:638840 [0] NCCL INFO GIN/Plugin: Could not find: libnccl-gin.so\n", - "spark-967b:638840:638840 [0] NCCL INFO Assigned GIN plugin GIN_IB_GDAKI to comm\n", - "spark-967b:638840:638840 [0] NCCL INFO Assigned RMA plugin GIN_IB_PROXY to comm\n", - "spark-967b:638840:638840 [0] NCCL INFO Using network IB\n", - "spark-967b:638840:638840 [0] NCCL INFO [Rank 0] ncclCommInitRankConfig comm 0xbb6caf51b590 rank 0 nranks 2 cudaDev 0 nvmlDev 0 busId f01000 commId 0xb89a3006053bfbac - Init START\n", - "[W728 11:41:10.067046288 socket.cpp:207] [c10d] The hostname of the client socket cannot be retrieved. err=-3\n", - "spark-c948:95665:95665 [0] NCCL INFO ENV/Plugin: Could not find: libnccl-env.so\n", - "spark-c948:95665:95665 [0] NCCL INFO cudaDriverVersion 13000\n", - "spark-c948:95665:95665 [0] NCCL INFO NCCL_SOCKET_IFNAME set by environment to enp1s0f1np1\n", - "spark-c948:95665:95665 [0] NCCL INFO Bootstrap: Using enp1s0f1np1:192.168.100.11<0>\n", - "spark-c948:95665:95665 [0] NCCL INFO NCCL version 2.29.7+cuda13.2\n", - "spark-c948:95665:95665 [0] NCCL INFO NCCL git version stable b81d6a5a3\n", - "spark-c948:95665:95665 [0] NCCL INFO Comm config Blocking set to 1\n", - "spark-c948:95665:95665 [0] NCCL INFO NET/Plugin: Could not find: libnccl-net.so\n", - "spark-c948:95665:95665 [0] NCCL INFO NCCL_SOCKET_IFNAME set by environment to enp1s0f1np1\n", - "spark-c948:95665:95665 [0] NCCL INFO NET/IB : Using [0]rocep1s0f1:1/RoCE [1]roceP2p1s0f1:1/RoCE [RO]; OOB enp1s0f1np1:192.168.100.11<0>\n", - "spark-c948:95665:95665 [0] NCCL INFO Initialized NET plugin IB\n", - "spark-c948:95665:95665 [0] NCCL INFO Assigned NET plugin IB to comm\n", - "spark-c948:95665:95665 [0] NCCL INFO GIN/Plugin: Could not find: libnccl-gin.so\n", - "spark-c948:95665:95665 [0] NCCL INFO Assigned GIN plugin GIN_IB_GDAKI to comm\n", - "spark-c948:95665:95665 [0] NCCL INFO Assigned RMA plugin GIN_IB_PROXY to comm\n", - "spark-c948:95665:95665 [0] NCCL INFO Using network IB\n", - "spark-c948:95665:95665 [0] NCCL INFO [Rank 1] ncclCommInitRankConfig comm 0xb76967df0e40 rank 1 nranks 2 cudaDev 0 nvmlDev 0 busId f01000 commId 0xb89a3006053bfbac - Init START\n", - "spark-967b:638840:638840 [0] NCCL INFO RAS client listening socket at 127.0.0.1<28028>\n", - "spark-c948:95665:95665 [0] NCCL INFO RAS client listening socket at 127.0.0.1<28028>\n", - "spark-967b:638840:638840 [0] NCCL INFO Bootstrap timings total 3.697224 (create 0.000025, send 0.000082, recv 3.696093, ring 0.000244, delay 0.000000)\n", - "spark-c948:95665:95665 [0] NCCL INFO Bootstrap timings total 0.001462 (create 0.000024, send 0.000157, recv 0.000536, ring 0.000323, delay 0.000000)\n", - "spark-c948:95665:95665 [0] NCCL INFO ncclTopoGetCpuAffinity: Affinity for GPU 0 is empty, ignoring. (GPU affinity = ; CPU affinity = 0-19).\n", - "spark-967b:638840:638840 [0] NCCL INFO ncclTopoGetCpuAffinity: Affinity for GPU 0 is empty, ignoring. (GPU affinity = ; CPU affinity = 0-19).\n", - "spark-967b:638840:638840 [0] NCCL INFO comm 0xbb6caf51b590 rank 0 nRanks 2 nNodes 2 localRanks 1 localRank 0 MNNVL 0\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 00/16 : 0 1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 01/16 : 0 1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 02/16 : 0 1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 03/16 : 0 1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 04/16 : 0 1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 05/16 : 0 1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 06/16 : 0 1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 07/16 : 0 1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 08/16 : 0 1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 09/16 : 0 1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 10/16 : 0 1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 11/16 : 0 1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 12/16 : 0 1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 13/16 : 0 1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 14/16 : 0 1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 15/16 : 0 1\n", - "spark-967b:638840:638840 [0] NCCL INFO Trees [0] 1/-1/-1->0->-1 [1] 1/-1/-1->0->-1 [2] 1/-1/-1->0->-1 [3] 1/-1/-1->0->-1 [4] 1/-1/-1->0->-1 [5] 1/-1/-1->0->-1 [6] 1/-1/-1->0->-1 [7] 1/-1/-1->0->-1 [8] -1/-1/-1->0->1 [9] -1/-1/-1->0->1 [10] -1/-1/-1->0->1 [11] -1/-1/-1->0->1 [12] -1/-1/-1->0->1 [13] -1/-1/-1->0->1 [14] -1/-1/-1->0->1 [15] -1/-1/-1->0->1\n", - "spark-967b:638840:638840 [0] NCCL INFO P2P Chunksize set to 262144\n", - "spark-967b:638840:638840 [0] NCCL INFO PROFILER/Plugin: Could not find: libnccl-profiler.so\n", - "spark-967b:638840:638840 [0] NCCL INFO Check P2P Type isAllDirectP2p 1 directMode 0 isAllCudaP2p 1\n", - "spark-967b:638840:638957 [0] NCCL INFO [Proxy Service] Device 0 CPU core 1\n", - "spark-c948:95665:95665 [0] NCCL INFO comm 0xb76967df0e40 rank 1 nRanks 2 nNodes 2 localRanks 1 localRank 0 MNNVL 0\n", - "spark-c948:95665:95665 [0] NCCL INFO Trees [0] -1/-1/-1->1->0 [1] -1/-1/-1->1->0 [2] -1/-1/-1->1->0 [3] -1/-1/-1->1->0 [4] -1/-1/-1->1->0 [5] -1/-1/-1->1->0 [6] -1/-1/-1->1->0 [7] -1/-1/-1->1->0 [8] 0/-1/-1->1->-1 [9] 0/-1/-1->1->-1 [10] 0/-1/-1->1->-1 [11] 0/-1/-1->1->-1 [12] 0/-1/-1->1->-1 [13] 0/-1/-1->1->-1 [14] 0/-1/-1->1->-1 [15] 0/-1/-1->1->-1\n", - "spark-c948:95665:95665 [0] NCCL INFO P2P Chunksize set to 262144\n", - "spark-c948:95665:95665 [0] NCCL INFO PROFILER/Plugin: Could not find: libnccl-profiler.so\n", - "spark-c948:95665:95665 [0] NCCL INFO Check P2P Type isAllDirectP2p 1 directMode 0 isAllCudaP2p 1\n", - "spark-967b:638840:638958 [0] NCCL INFO [Proxy Service UDS] Device 0 CPU core 16\n", - "spark-c948:95665:95713 [0] NCCL INFO [Proxy Service] Device 0 CPU core 2\n", - "spark-c948:95665:95714 [0] NCCL INFO [Proxy Service UDS] Device 0 CPU core 6\n", - "spark-967b:638840:638840 [0] NCCL INFO TUNER/Plugin: Could not find: libnccl-tuner.so\n", - "spark-967b:638840:638840 [0] NCCL INFO threadThresholds 8/8/64 | 16/8/64 | 512 | 512\n", - "spark-967b:638840:638840 [0] NCCL INFO 16 coll channels, 16 collnet channels, 0 nvls channels, 16 p2p channels, 2 p2p channels per peer\n", - "spark-967b:638840:638840 [0] NCCL INFO Symmetric VA size=120GB\n", - "spark-967b:638840:638840 [0] NCCL INFO Symmetric memory is not supported. cuMemEnable 1, globalGinSupport 0, globalNicFused 0 cuMemGdrSupport 0\n", - "spark-967b:638840:638840 [0] NCCL INFO CC Off, workFifoBytes 1048576\n", - "spark-967b:638840:638840 [0] NCCL INFO ncclCommInitRankConfig comm 0xbb6caf51b590 rank 0 nranks 2 cudaDev 0 nvmlDev 0 busId f01000 commId 0xb89a3006053bfbac - Init COMPLETE\n", - "spark-967b:638840:638840 [0] NCCL INFO Init timings - ncclCommInitRankConfig: rank 0 nranks 2 total 3.87 (kernels 0.15, alloc 0.01, bootstrap 3.70, allgathers 0.00, topo 0.01, graphs 0.00, connections 0.01, rest 0.00)\n", - "spark-c948:95665:95665 [0] NCCL INFO TUNER/Plugin: Could not find: libnccl-tuner.so\n", - "spark-c948:95665:95665 [0] NCCL INFO threadThresholds 8/8/64 | 16/8/64 | 512 | 512\n", - "spark-c948:95665:95665 [0] NCCL INFO 16 coll channels, 16 collnet channels, 0 nvls channels, 16 p2p channels, 2 p2p channels per peer\n", - "spark-c948:95665:95665 [0] NCCL INFO Symmetric VA size=120GB\n", - "spark-c948:95665:95665 [0] NCCL INFO Symmetric memory is not supported. cuMemEnable 1, globalGinSupport 0, globalNicFused 0 cuMemGdrSupport 0\n", - "spark-c948:95665:95665 [0] NCCL INFO ncclCommInitRankConfig comm 0xb76967df0e40 rank 1 nranks 2 cudaDev 0 nvmlDev 0 busId f01000 commId 0xb89a3006053bfbac - Init COMPLETE\n", - "spark-c948:95665:95665 [0] NCCL INFO Init timings - ncclCommInitRankConfig: rank 1 nranks 2 total 0.20 (kernels 0.16, alloc 0.02, bootstrap 0.00, allgathers 0.00, topo 0.00, graphs 0.00, connections 0.01, rest 0.00)\n", - "spark-967b:638840:638959 [0] NCCL INFO [Proxy Progress] Device 0 CPU core 5\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 00/0 : 1[0] -> 0[0] [receive] via NET/IB/0\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 01/0 : 1[0] -> 0[0] [receive] via NET/IB/1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 02/0 : 1[0] -> 0[0] [receive] via NET/IB/0\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 03/0 : 1[0] -> 0[0] [receive] via NET/IB/1\n", - "spark-c948:95665:95715 [0] NCCL INFO [Proxy Progress] Device 0 CPU core 1\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 00/0 : 0[0] -> 1[0] [receive] via NET/IB/0\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 01/0 : 0[0] -> 1[0] [receive] via NET/IB/1\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 02/0 : 0[0] -> 1[0] [receive] via NET/IB/0\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 03/0 : 0[0] -> 1[0] [receive] via NET/IB/1\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 04/0 : 0[0] -> 1[0] [receive] via NET/IB/0\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 05/0 : 0[0] -> 1[0] [receive] via NET/IB/1\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 06/0 : 0[0] -> 1[0] [receive] via NET/IB/0\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 07/0 : 0[0] -> 1[0] [receive] via NET/IB/1\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 08/0 : 0[0] -> 1[0] [receive] via NET/IB/0\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 09/0 : 0[0] -> 1[0] [receive] via NET/IB/1\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 10/0 : 0[0] -> 1[0] [receive] via NET/IB/0\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 11/0 : 0[0] -> 1[0] [receive] via NET/IB/1\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 12/0 : 0[0] -> 1[0] [receive] via NET/IB/0\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 13/0 : 0[0] -> 1[0] [receive] via NET/IB/1\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 14/0 : 0[0] -> 1[0] [receive] via NET/IB/0\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 15/0 : 0[0] -> 1[0] [receive] via NET/IB/1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 04/0 : 1[0] -> 0[0] [receive] via NET/IB/0\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 00/0 : 1[0] -> 0[0] [send] via NET/IB/0\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 01/0 : 1[0] -> 0[0] [send] via NET/IB/1\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 02/0 : 1[0] -> 0[0] [send] via NET/IB/0\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 03/0 : 1[0] -> 0[0] [send] via NET/IB/1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 05/0 : 1[0] -> 0[0] [receive] via NET/IB/1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 06/0 : 1[0] -> 0[0] [receive] via NET/IB/0\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 07/0 : 1[0] -> 0[0] [receive] via NET/IB/1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 08/0 : 1[0] -> 0[0] [receive] via NET/IB/0\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 09/0 : 1[0] -> 0[0] [receive] via NET/IB/1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 10/0 : 1[0] -> 0[0] [receive] via NET/IB/0\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 11/0 : 1[0] -> 0[0] [receive] via NET/IB/1\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 04/0 : 1[0] -> 0[0] [send] via NET/IB/0\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 05/0 : 1[0] -> 0[0] [send] via NET/IB/1\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 06/0 : 1[0] -> 0[0] [send] via NET/IB/0\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 07/0 : 1[0] -> 0[0] [send] via NET/IB/1\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 08/0 : 1[0] -> 0[0] [send] via NET/IB/0\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 12/0 : 1[0] -> 0[0] [receive] via NET/IB/0\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 09/0 : 1[0] -> 0[0] [send] via NET/IB/1\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 10/0 : 1[0] -> 0[0] [send] via NET/IB/0\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 11/0 : 1[0] -> 0[0] [send] via NET/IB/1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 13/0 : 1[0] -> 0[0] [receive] via NET/IB/1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 14/0 : 1[0] -> 0[0] [receive] via NET/IB/0\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 15/0 : 1[0] -> 0[0] [receive] via NET/IB/1\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 12/0 : 1[0] -> 0[0] [send] via NET/IB/0\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 13/0 : 1[0] -> 0[0] [send] via NET/IB/1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 00/0 : 0[0] -> 1[0] [send] via NET/IB/0\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 01/0 : 0[0] -> 1[0] [send] via NET/IB/1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 02/0 : 0[0] -> 1[0] [send] via NET/IB/0\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 03/0 : 0[0] -> 1[0] [send] via NET/IB/1\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 14/0 : 1[0] -> 0[0] [send] via NET/IB/0\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 15/0 : 1[0] -> 0[0] [send] via NET/IB/1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 04/0 : 0[0] -> 1[0] [send] via NET/IB/0\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 05/0 : 0[0] -> 1[0] [send] via NET/IB/1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 06/0 : 0[0] -> 1[0] [send] via NET/IB/0\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 07/0 : 0[0] -> 1[0] [send] via NET/IB/1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 08/0 : 0[0] -> 1[0] [send] via NET/IB/0\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 09/0 : 0[0] -> 1[0] [send] via NET/IB/1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 10/0 : 0[0] -> 1[0] [send] via NET/IB/0\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 11/0 : 0[0] -> 1[0] [send] via NET/IB/1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 12/0 : 0[0] -> 1[0] [send] via NET/IB/0\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 13/0 : 0[0] -> 1[0] [send] via NET/IB/1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 14/0 : 0[0] -> 1[0] [send] via NET/IB/0\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 15/0 : 0[0] -> 1[0] [send] via NET/IB/1\n", - "spark-967b:638840:638840 [0] NCCL INFO Connected all rings, use ring PXN 0 GDR 0\n", - "spark-c948:95665:95665 [0] NCCL INFO Connected all rings, use ring PXN 0 GDR 0\n", - "[Rank 0] 2026-07-28 11:41:01,673 [INFO] mini_trainer.config: {'input': '/home/asger/Repositories/mini_trainer/examples/blair/train', 'output': '/home/asger/Repositories/mini_trainer/examples/blair', 'epochs': 5, 'size': 128, 'name': 'blair_model', 'device': 'cuda:0', 'dtype': 'float16', 'ema': False, 'compile': False, 'builder': 'mini_trainer.hierarchical.integration.HierarchicalBuilder', 'spec_model_dataloader_kwargs': {'species': True}, 'model_builder_kwargs': {'model_type': 'efficientnet_v2_s', 'fine_tune': False, 'hidden': True, 'droprate': 0.1, 'normalized': True, 'cls': 'mini_trainer.hierarchical.model.HierarchicalClassifier'}, 'dataloader_builder_kwargs': {'batch_size': 32, 'train_proportion': 0.9, 'resample': False, 'cache': 'CUDA'}, 'optimizer_builder_kwargs': {'optimizer_cls': 'mini_trainer.training.muon.MuonAuxAdamW', 'lr': 0.01, 'weight_decay': 0.01}, 'ema_builder_kwargs': {'epoch_halflife': 1.5, 'update_rate': 4, 'temperature': 1.0, 'distill_start': 2.0}, 'criterion_builder_kwargs': {'weighted': True, 'weights': [1.0, 1.0]}, 'regularizer_builder_kwargs': {'strength': 0.1}, 'lr_schedule_builder_kwargs': {'warmup_epochs': 1.0}, 'logger_builder_kwargs': {'verbose': True, 'logger_cls': ['mini_trainer.logging.core.MetricLogger']}, 'ddp_info': {'rank': 0, 'world_size': 2, 'local_rank': 0}}\n", - "[Rank 0] 2026-07-28 11:41:01,674 [DEBUG] mini_trainer.train: Building class spec...\n", - "[Rank 1] 2026-07-28 11:41:10,761 [DEBUG] mini_trainer.train: Building class spec...\n", - "[Rank 0] 2026-07-28 11:41:01,965 [DEBUG] mini_trainer.utils._concurrent.distributed: Entered main_process_first (master). Executing block...\n", - "[Rank 0] 2026-07-28 11:41:01,965 [DEBUG] mini_trainer.train: Building model...\n", - "[Rank 1] 2026-07-28 11:41:11,025 [DEBUG] mini_trainer.utils._concurrent.distributed: Worker waiting at barrier...\n", - "[Rank 0] 2026-07-28 11:41:02,408 [INFO] mini_trainer.train: Using model `EfficientNet` with head `HierarchicalClassifier`\n", - "[Rank 0] 2026-07-28 11:41:02,408 [DEBUG] mini_trainer.utils._concurrent.distributed: Master block completed. Reaching barrier...\n", - "[Rank 0] 2026-07-28 11:41:02,408 [DEBUG] mini_trainer.utils._concurrent.distributed: Barrier released on master.\n", - "[Rank 0] 2026-07-28 11:41:02,408 [DEBUG] mini_trainer.train: Building dataloaders...\n", - "[Rank 1] 2026-07-28 11:41:11,467 [DEBUG] mini_trainer.utils._concurrent.distributed: Worker barrier released. Executing block...\n", - "[Rank 1] 2026-07-28 11:41:11,467 [DEBUG] mini_trainer.train: Building model...\n", - "[Rank 0] 2026-07-28 11:41:02,824 [INFO] mini_trainer.data.loader: Building datasets with image size (128, 128)\n", - "Writing to CUDA RAM cache...: 0%| | 1/4164 [00:00<07:15, 9.57it/s][Rank 1] 2026-07-28 11:41:12,056 [DEBUG] mini_trainer.utils._concurrent.distributed: Worker block completed.\n", - "[Rank 1] 2026-07-28 11:41:12,057 [DEBUG] mini_trainer.train: Building dataloaders...\n", - "/home/asger/Repositories/mini_trainer/mini_trainer/data/io.py:388: UserWarning: CUDA caching is currently in development and may not work properly. Using device: `cuda:0` for cache.\n", - " warnings.warn(\n", - "/home/asger/Repositories/mini_trainer/mini_trainer/data/io.py:388: UserWarning: CUDA caching is currently in development and may not work properly. Using device: `cuda:0` for cache.\n", - " warnings.warn(\n", - "[Rank 0] 2026-07-28 11:41:04,532 [DEBUG] mini_trainer.train: Dataloaders built successfully. Train batches: 65, Val batches: 4\n", - "[Rank 1] 2026-07-28 11:41:13,678 [DEBUG] mini_trainer.train: Dataloaders built successfully. Train batches: 65, Val batches: 4\n", - "[Rank 1] 2026-07-28 11:41:13,690 [DEBUG] mini_trainer.trainer: Model DDP wrap starting...\n", - "[Rank 0] 2026-07-28 11:41:05,565 [INFO] mini_trainer.train: Using training criterion: `MultiLevelWeightedCrossEntropyLoss(EMLACrossEntropy)[1.0 x 1.0]`\n", - "[Rank 0] 2026-07-28 11:41:05,565 [INFO] mini_trainer.train: AMP Gradient Scaler enabled.\n", - "[Rank 0] 2026-07-28 11:41:05,565 [INFO] mini_trainer.trainer: Start training\n", - "[Rank 0] 2026-07-28 11:41:05,565 [DEBUG] mini_trainer.trainer: Model DDP wrap starting...\n", - "[Rank 0] 2026-07-28 11:41:05,588 [DEBUG] mini_trainer.trainer: DDP wrap completed.\n", - "[Rank 0] 2026-07-28 11:41:05,588 [DEBUG] mini_trainer.trainer: train_one_epoch starting for epoch 0.\n", - " 0%| | 0/65 [00:00 True\n", - " warnings.warn(f\"Model configuration option {k} overriden by value stored in config: {kwargs[k]} ==> {v}\", UserWarning)\n", - "Running inference: 100%|█████████████████████| 19/19 [00:02<00:00, 9.33batch/s]\n", - "Computing optimal threshold on 228 samples, keeping 2094 for metrics.\n", - "Optimizing threshold: 100%|██████████████████| 18/18 [00:00<00:00, 1227.90it/s]\n", - "Found 9 optimal thresholds at: [0.000, 0.064, 0.080, 0.128, 0.160, 0.192, 0.200, 0.240, 0.256]\n", - "Optimizing threshold: 100%|██████████████████| 18/18 [00:00<00:00, 1515.86it/s]\n", - "Found 3 optimal thresholds at: [0.424, 0.440, 0.456]\n", - "Computing rank_error: 100%|███████████████| 15/15 [00:00<00:00, 397.13metric/s]\n", - "\n", - "METRIC TABLE[blair/blair_model/predict/mini_metric.csv]\n", - " | accuracy | precision | recall | f1 | micro_accuracy | micro_precision | micro_recall | micro_f1 | theilU\n", - "--------|----------|-----------|--------|--------|----------------|-----------------|--------------|----------|-------\n", - "level 0 | 69.50% | 73.10% | 69.50% | 69.24% | 77.65% | 77.65% | 77.65% | 77.65% | 77.26%\n", - "level 1 | 86.62% | 88.52% | 83.74% | 85.62% | 91.21% | 91.21% | 89.21% | 90.20% | 85.08%\n", - " \n", - " | coverage | vocabulary_coverage | optimal_confidence_threshold\n", - "--------|----------|---------------------|-----------------------------\n", - "level 0 | 100.00% | 100.00% | 12.80% \n", - "level 1 | 97.80% | 100.00% | 44.00% \n", - " \n" - ] - } - ], + "outputs": [], "source": [ "# OBS: Replace `-w spkc` with the SSH host alias used for MPI/NCCL with the second DGX Spark/Node\n", "!rm -rf blair/blair_model\n", @@ -7035,113 +112,54 @@ " --file blair/blair_model/predict/mini_metric.csv --optimal" ] }, - { - "cell_type": "markdown", - "id": "f958f767", - "metadata": {}, - "source": [ - "# Inference" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "768dfb57", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Number of classes at rank:\n", - "species = 25\n", - "genus = 15\n", - "family = 1\n", - "order = 1\n", - "class = 1\n", - "phylum = 1\n", - "kingdom = 1\n", - "\n", - "Included ranks:\n", - "species, genus\n" - ] - } - ], - "source": [ - "# Test that all species can be resolved properly (they can)\n", - "import os\n", - "\n", - "from mini_trainer.integrations import name_to_id, resolve_id\n", - "\n", - "sp2cls = {}\n", - "\n", - "for species in os.listdir(\"blair/train\"):\n", - " id, rank, confidence = name_to_id(species)\n", - " result = resolve_id(id)\n", - " sp2cls[species] = result\n", - "\n", - "classes = {}\n", - "for cls in sp2cls.values():\n", - " for rank, (id, name) in cls.items():\n", - " if rank not in classes:\n", - " classes[rank] = []\n", - " classes[rank].append(name)\n", - "classes = {r: sorted(set(cs)) for r, cs in classes.items()}\n", - "print(\"Number of classes at rank:\")\n", - "for rank, cs in classes.items():\n", - " print(f\"{rank:<10}={len(cs):>4}\")\n", - "classes = {r: cs for r, cs in classes.items() if len(cs) > 1}\n", - "print(\"\\nIncluded ranks:\")\n", - "print(\", \".join(classes))" - ] - }, { "cell_type": "markdown", "id": "db880328", "metadata": {}, "source": [ - "# Manual model load" + "# Batched Python inference\n", + "\n", + "The checkpoint restores its hierarchy and label mappings; no fresh GBIF lookup is\n", + "needed. Labels are checkpoint keys, ordered from the leaf rank to its parents.\n", + "Saved figures are historical illustrations; rerun the display for current predictions.\n" ] }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "id": "2b1a259f", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/asger/micromamba/envs/mini_trainer/lib/python3.12/site-packages/torch/cuda/__init__.py:283: UserWarning: \n", - " Found GPU0 NVIDIA GB10 which is of cuda capability 12.1.\n", - " Minimum and Maximum cuda capability supported by this version of PyTorch is\n", - " (8.0) - (12.0)\n", - " \n", - " warnings.warn(\n", - "/home/asger/Repositories/mini_trainer/mini_trainer/modeling/classifier.py:449: UserWarning: Model configuration option hidden overriden by value stored in config: 1280 ==> True\n", - " warnings.warn(f\"Model configuration option {k} overriden by value stored in config: {kwargs[k]} ==> {v}\", UserWarning)\n" - ] - } - ], + "outputs": [], "source": [ - "import json\n", - "\n", "import torch\n", "\n", "from mini_trainer.builders import BaseBuilder\n", + "from mini_trainer.modeling import classification_module, predict\n", "\n", - "with open(\"blair/blair_model/class_spec.json\") as f:\n", - " class_spec = json.load(f)\n", - "\n", - "cls2idx = class_spec[\"cls2idx\"]\n", - "idx2cls = {lvl: {v: k for k, v in data.items()} for lvl, data in cls2idx.items()}\n", - "\n", - "device, dtype = torch.device(\"cuda:0\"), torch.float32\n", - "\n", - "model, mproc = BaseBuilder.build_model(weights=\"blair/blair_model/weights/last.pt\", hidden=512, device=device, dtype=dtype)\n", + "device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")\n", + "model, preprocess = BaseBuilder.build_model(\n", + " weights=\"blair/blair_model/weights/last.pt\", device=device, dtype=torch.float32\n", + ")\n", "model.eval()\n", - "pass" + "\n", + "# Use actual files; filenames need not encode their class or be consecutive.\n", + "images = [\n", + " str(path)\n", + " for folder in sorted(Path(\"blair/test\").iterdir()) if folder.is_dir()\n", + " for path in [p for p in sorted(folder.iterdir())\n", + " if p.suffix.lower() in {\".png\", \".jpg\", \".jpeg\"}][:5]\n", + "]\n", + "images = images[:50]\n", + "if not images:\n", + " raise RuntimeError(\"Construct the test dataset before running inference.\")\n", + "loader = BaseBuilder.build_inference_dataloader(\n", + " images=images, batch_size=16, num_workers=0, device=device, dtype=torch.float32,\n", + " resize_size=classification_module(model).metadata[\"resize_size\"],\n", + ")\n", + "predictions = []\n", + "with torch.inference_mode():\n", + " for batch in loader:\n", + " predictions.extend(predict(model, preprocess(batch).to(device)))\n" ] }, { @@ -7150,13 +168,6 @@ "id": "ab394a49", "metadata": {}, "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "On-the-fly data loading enabled (no cache).\n" - ] - }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0oAAAJYCAYAAABcsxbJAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjksIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvJkbTWQAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs/XeYZNdd4I1/zrn3VuzqHKYn55EmSKMcLNuSwRhYk17Mj8WsvX4W/KyXJax3jXkx8SF7WRuTHsA8sAKWh/CyJIOTjGUlK400OfTEntQ5Vle8955zfn+ce6ura7qlkSXNjKT7eZ6Z7q6qrr731Anf/BXGGENCQkJCQkJCQkJCQkJCA3m9LyAhISEhISEhISEhIeFGI1GUEhISEhISEhISEhISWkgUpYSEhISEhISEhISEhBYSRSkhISEhISEhISEhIaGFRFFKSEhISEhISEhISEhoIVGUEhISEhISEhISEhISWkgUpYSEhISEhISEhISEhBYSRSkhISEhISEhISEhIaGFRFFKSEhISEhISEhISEhoIVGUEhISEhISEhISEhISWkgUpYSEhISEhISEhISEhBYSRSkhISEhISEhISEhIaGFRFFKSEhISEhISEhISEhoIVGUEhISEhISEhISEhISWkgUpYSEhISEhISEhISEhBYSRSkhISEhISEhISEhIaGFRFFKSEhISEhISEhISEhoIVGUEhISEhISEhISEhISWkgUpYSEhISEhISEhISEhBYSRSkhISEhISEhISEhIaGFRFFKSEhISEhISEhISEhoIVGUEhISEhISEhISEhISWkgUpYSEhISEhISEhISEhBYSRSkhISEhISEhISEhIaGFRFFKSEhISEhISEhISEhoIVGUEhISEhISEhISEhISWkgUpYSEhISEhISEhISEhBYSRSkhISEhISEhISEhIaGFRFFKSEhISEhISEhISEhoIVGUEhISEhISEhISEhISWkgUpYSEhISEhISEhISEhBYSRSkhISEhISEhISEhIaGFRFFKSEhISEhISEhISEhoIVGUEhISEhISEhISEhISWkgUpYSEhISEhISEhISEhBYSRSkhISEhISEhISEhIaGFRFFKSEhISEhISEhISEhoIVGUEhISEhISEhISEhISWkgUpYSEhISEhISEhISEhBYSRSkhISEhISEhISEhIaGFRFFK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Bz/4AXv27DnrbX8qsj7/Tl/W++qpyS233MKXvvQl3vrWt/KLv/iLjI2Nrfq9ffv28eUvf5kPfehDRFFEqVTiqquu4m1vextvfetb04jSajI4OMjCwgIf/vCH0zn6G7/xG3z5y19egdA4n2V9XJ3fIszpJk2sy7qsy2nJHXfckULptNa85S1v4bd+67d4+OGH2bVrF29+85v50pe+xMUXX8z+/ft54okneNOb3sRXvvIVCoUCBw8eZMuWLfzar/0aW7Zs4cd+7McwxqTvZbNZfu3Xfo3x8XGuvvpqXvnKV/Ka17yGl7/85VxyySXcfffdfPzjH2dmZoaPfOQj1Ot1fuEXfoEPfvCDz3bXrMu6rMu6rMu6rMu6/NDIuqG0LuuyLuuyLuuyLuuyLuuyLuvSJj/y0LunKocOHUIIwSOPPLLq56drd7Yf57WvfS2/+7u/e8au83yQ9b5al7Mh6+NqXc6U3HHHHXz5y19+RsfQWvMnf/InPPHEE2foqs5vWZ9/py/rffX05M477+SP//iPAX6k5tbpyvq4OrfynDGUHnroIS6//HIGBwe57bbbeN3rXgfA7t27+dznPncS0xhYppWXvOQl9Pb28v73v58oirjpppsYGhpi586d3HXXXYyNjXH99dczODjI61//+vR8t912G11dXXz6059OB1vCavb5z3+eLVu2MDw8zO233w7AK1/5SkZHR9m1axff/e53ede73gXA9ddfz2c/+1mmpqZYWFg46Xx33nknQggajQY33ngjN998M4899hhbt25leHiYl7zkJet9dRb76lzJc2HhWx9X63K+yB133MEb3/hGbr31Vt73vvfxnve8h9e85jX80z/9E29/+9v5hV/4hRX0xA8++CC//uu/zpve9Ca+9a1vcejQIa677jr+8A//kJ/7uZ/DGMP/+3//j3e9613cfPPNzM7Ocscdd/CGN7yBj33sY4yPjz/rtODr82+9r87ntap1jn3961/n9ttv5+1vfztve9vbaDabvO51r+Od73wnX/ziF/nGN76RUvsnc+t1r3sdURQxPz/Pf/2v/3WFk+PGG2/E9/0Vx3g2ZH1cPTflOWMovf/972fTpk2Mj4/z9re/nS996Uv8/d//PdPT07z2ta89iWkskZ/8yZ/k3e9+N5/73Of453/+Zz7/+c/z6KOP8trXvpbbb7+dj370o1Sr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", @@ -7170,157 +181,18 @@ ], "source": [ "from matplotlib import pyplot as plt\n", - "from matplotlib.axes import Axes\n", "from PIL import Image\n", "\n", - "from mini_trainer.data.io import LazyDataset\n", - "from mini_trainer.logging import BaseResultCollector\n", - "\n", - "genera = classes[\"genus\"][:5]\n", - "species = []\n", - "for k, v in sp2cls.items():\n", - " g = v[\"genus\"][1]\n", - " if g not in genera:\n", - " continue\n", - " genera.remove(g)\n", - " species.append(k)\n", - "\n", - "images = []\n", - "labels = []\n", - "for sp in species:\n", - " spcls = sp2cls[sp]\n", - " s, g = sp, spcls[\"genus\"][1]\n", - " dir = os.path.join(\"blair\", \"test\", sp)\n", - " ims = [os.path.join(dir, f) for f in os.listdir(dir)][:10]\n", - " images.extend(ims)\n", - " labels.extend([(s, g)] * len(ims))\n", - "\n", - "ds = LazyDataset(mproc, images)\n", - "\n", - "fig, axs = plt.subplots(5, 10, figsize=(7.5, 5))\n", - "\n", - "for i, ax in enumerate(axs.flatten()):\n", - " tim = ds[i]\n", - " with torch.inference_mode():\n", - " prediction = model(tim.unsqueeze(0).to(device))[0]\n", - " pred_cls = idx2cls[prediction.argmax().item()]\n", - " label_cls = labels[i][0]\n", - " correct = pred_cls == label_cls\n", - " if not isinstance(ax, Axes):\n", - " raise TypeError()\n", - " ax.imshow(Image.open(images[i]))\n", - " ax.set_title(\n", - " \"\\n\".join(pred_cls.split(\" \")[:2]),\n", - " pad=0,\n", - " y=1.025,\n", - " fontdict={\"fontsize\": 5, \"fontweight\": \"bold\" if correct else \"normal\", \"color\": \"green\" if correct else \"red\"},\n", - " )\n", + "fig, axes = plt.subplots(5, 10, figsize=(10, 5))\n", + "for ax in axes.flat:\n", " ax.axis(\"off\")\n", - "\n", - "plt.tight_layout(pad=0)\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "id": "b5cae832", - "metadata": {}, - "source": [ - "*The manual inference for this demo is not implemented in the most optimal way for sake of simplicity*" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "fc19266e", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "On-the-fly data loading enabled (no cache).\n", - "6|1| | | | | | | | | | | | | | | | | | | | | | | \n", - " |8| | | |1| | | | | | | | | | | | | |1| | | | | \n", - " | |5| | | | | | | |2| | | | | | | | | | | | | |3\n", - " | | |4| | | | | | | | | | | | | | |2|4| | | | | \n", - " | | |1|5| | |2| | | | | |1| | | | | |1| | | | | \n", - "1| | | | |9| | | | | | | | | | | | | | | | | | | \n", - " | | | | | |9| | | | | | | |1| | | | | | | | | | \n", - " | | | | | | |6| | | | | | | | | | | | |2| |2| | \n", - " | | | | | | | | | | | | | | | | | |2|1|1|4|2| | \n", - " | | | | | | | | |2|1| | | |6| | | | | | | | | |1\n", - " | | | | | | | | |1|5|1| | |2| | | | | | | | | |1\n", - " | | | | | | | | | | |8| | | | | | | | | | |1| |1\n", - " | | | |1| | |2|1| | | | |2|1|2| | | | | | |1| | \n", - " | | | | | | | |1| | | | |3| |5| | | | | | |1| | \n", - " | | | | | | | |1| | | | |1|2|4| | | | | | |2| | \n", - " | | | | | | | |2| | | | | | |5| | | | |1| |2| | \n", - " |1| | | | | | | | |1| | | | | |1| | | | | | | |7\n", - " | | | | | | | | | | | | | | | | |5| | | | | | |3\n", - " | | | | | | | | | | | | | | | | |1|4|5| | | | | \n", - " | | | | | | | | | | | | | | | | | |2|3|3|1| | |1\n", - " | | | | | | | | | | | | | | | | | | |1|5|4| | | \n", - " | | | | | | | | | | |1| | | | | | | | |4|5| | | \n", - " | | | | | | |2| | |1|1| | | | | | | | |1|2|3| | \n", - " | | | | | | | | |5| | | | | | | |2| | | | | |3| \n", - " |1| | | | | | | | |1| | | | | | | | | | | | | |8\n", - "\n", - "Per-class Accuracies:\n", - "Brachinus alternans___________________85.7% (6/7)\n", - "Brachinus cyanochroaticus_____________80.0% (8/10)\n", - "Calathus advena_______________________50.0% (5/10)\n", - "Carabus maeander maeander_____________40.0% (4/10)\n", - "Carabus nemoralis nemoralis___________50.0% (5/10)\n", - "Chlaenius aestivus____________________90.0% (9/10)\n", - "Cicindela punctulata__________________90.0% (9/10)\n", - "Cyclotrachelus furtivus_______________60.0% (6/10)\n", - "Cyclotrachelus torvus__________________0.0% (0/10)\n", - "Discoderus parallelus_________________20.0% (2/10)\n", - "Discoderus robustus___________________50.0% (5/10)\n", - "Euryderus grossus_____________________80.0% (8/10)\n", - "Pasimachus californicus________________0.0% (0/10)\n", - "Pasimachus elongatus__________________30.0% (3/10)\n", - "Pasimachus strenuus___________________20.0% (2/10)\n", - "Pasimachus subsulcatus________________50.0% (5/10)\n", - "Patrobus lecontei_____________________10.0% (1/10)\n", - "Poecilus lucublandus__________________62.5% (5/8)\n", - "Pterostichus corvinus_________________40.0% (4/10)\n", - "Pterostichus melanarius melanarius____30.0% (3/10)\n", - "Pterostichus novus____________________50.0% (5/10)\n", - "Pterostichus stygicus_________________50.0% (5/10)\n", - "Scarites subterraneus_________________30.0% (3/10)\n", - "Selenophorus planipennis______________30.0% (3/10)\n", - "Synuchus impunctatus__________________80.0% (8/10)\n", - "\n", - "Micro Accuracy: 46.53% (114/245)\n", - "Macro Accuracy: 47.13%\n" - ] - } - ], - "source": [ - "results = BaseResultCollector(model, idx2cls, cls2idx, True)\n", - "\n", - "species = list(sp2cls.keys())\n", - "images = []\n", - "labels = []\n", - "for sp in species:\n", - " spcls = sp2cls[sp]\n", - " s, g = sp, spcls[\"genus\"][1]\n", - " dir = os.path.join(\"blair\", \"test\", sp)\n", - " ims = [os.path.join(dir, f) for f in os.listdir(dir)][:10]\n", - " images.extend(ims)\n", - " labels.extend([(s, g)] * len(ims))\n", - "\n", - "ds = LazyDataset(mproc, images)\n", - "for b in range(len(ds) // 5):\n", - " bis = list(range(b * 5, b * 5 + 5))\n", - " with torch.inference_mode():\n", - " predictions = model(torch.stack([ds[i] for i in bis]).to(device))[0]\n", - " bims = [images[i] for i in bis]\n", - " results.collect(bims, predictions, labels=[labels[i][0] for i in bis])\n", - "results.evaluate()\n", - "pass" + "for ax, path, prediction in zip(axes.flat, images, predictions, strict=False):\n", + " label, confidence = prediction.label[0], prediction.confidence[0]\n", + " with Image.open(path) as image:\n", + " ax.imshow(image.convert(\"RGB\"))\n", + " ax.set_title(f\"{label} ({confidence:.1%})\", fontsize=6)\n", + "plt.tight_layout()\n", + "plt.show()\n" ] } ], diff --git a/examples/inat2021/construct.py b/examples/inat2021/construct.py index 49ac220..e316aea 100644 --- a/examples/inat2021/construct.py +++ b/examples/inat2021/construct.py @@ -16,12 +16,10 @@ def build_data_index(base_dir, train_dir_name, val_dir_name): train_dir = os.path.join(base_dir, train_dir_name) val_dir = os.path.join(base_dir, val_dir_name) - # Check if directories exist if not os.path.exists(train_dir) and not os.path.exists(val_dir): print("Error: train or val directory does not exist.") return - # Load existing taxonomy map if it exists taxonomy_map = {} taxonomy_map_path = os.path.join(base_dir, "taxonomy_map.json") if os.path.exists(taxonomy_map_path): @@ -31,7 +29,6 @@ def build_data_index(base_dir, train_dir_name, val_dir_name): except Exception: pass - # Step 5/8: Scanning and mapping category directories print("\n[Step 5/8] Scanning and mapping category directories...") dir_to_species = {} scientific_names = set() @@ -57,7 +54,6 @@ def build_data_index(base_dir, train_dir_name, val_dir_name): if name not in taxonomy_map: scientific_names.add(name) - # Step 6/8: Resolving taxonomy via GBIF API print("\n[Step 6/8] Resolving taxonomy via GBIF API...") if scientific_names: print(f"Resolving taxonomy for {len(scientific_names)} species...") @@ -68,7 +64,6 @@ def build_data_index(base_dir, train_dir_name, val_dir_name): labels = labels_from_taxonomy(tax) for species_name, tax_tuple in labels.items(): taxonomy_map[species_name] = list(tax_tuple) - # Save updated taxonomy map with open(taxonomy_map_path, "w") as f: json.dump(taxonomy_map, f, indent=2) except Exception as e: @@ -85,21 +80,24 @@ def build_data_index(base_dir, train_dir_name, val_dir_name): gbif_id = taxonomy_map[species][0] dir_to_gbif_id[name] = gbif_id - # Step 7/8: Renaming directories on disk print("\n[Step 7/8] Renaming directories on disk to GBIF IDs...") + renames = {} for dir_path in dirs_to_scan: subdirs = sorted(os.listdir(dir_path)) - for name in tqdm(subdirs, desc=f"Renaming {os.path.basename(dir_path)}"): + for name in tqdm(subdirs, desc=f"Checking {os.path.basename(dir_path)}"): full_path = os.path.join(dir_path, name) if not os.path.isdir(full_path): continue if name in dir_to_gbif_id: gbif_id = dir_to_gbif_id[name] new_path = os.path.join(dir_path, gbif_id) - if not os.path.exists(new_path): - os.rename(full_path, new_path) - elif full_path != new_path: - shutil.rmtree(full_path) + if full_path == new_path: + continue + if os.path.lexists(new_path) or new_path in renames: + raise FileExistsError(f"GBIF category destination conflicts: {new_path}; no directories renamed") + renames[new_path] = full_path + for new_path, full_path in tqdm(renames.items(), desc="Renaming categories"): + os.rename(full_path, new_path) # Build a lookup from category (GBIF key) to taxonomy list category_to_tax = {} @@ -107,7 +105,6 @@ def build_data_index(base_dir, train_dir_name, val_dir_name): if tax_list: category_to_tax[tax_list[0]] = tax_list - # Step 8/8: Generating data_index.json print("\n[Step 8/8] Generating data_index.json...") paths = [] splits = [] @@ -115,35 +112,21 @@ def build_data_index(base_dir, train_dir_name, val_dir_name): img_exts = {".jpg", ".jpeg", ".png"} - # Process train - if os.path.exists(train_dir): - categories = sorted(os.listdir(train_dir)) - for category in tqdm(categories, desc="Indexing train"): - cat_dir = os.path.join(train_dir, category) - if os.path.isdir(cat_dir): - tax_list = category_to_tax.get(category) - if tax_list is None: - tax_list = [category, category, "Unknown", "Unknown", "Unknown", "Unknown", "Unknown"] - for f in sorted(os.listdir(cat_dir)): - if os.path.splitext(f)[1].lower() in img_exts: - paths.append(os.path.relpath(os.path.join(cat_dir, f), base_dir)) - splits.append("train") - labels.append(tax_list) - - # Process val - if os.path.exists(val_dir): - categories = sorted(os.listdir(val_dir)) - for category in tqdm(categories, desc="Indexing val"): - cat_dir = os.path.join(val_dir, category) - if os.path.isdir(cat_dir): - tax_list = category_to_tax.get(category) - if tax_list is None: - tax_list = [category, category, "Unknown", "Unknown", "Unknown", "Unknown", "Unknown"] - for f in sorted(os.listdir(cat_dir)): - if os.path.splitext(f)[1].lower() in img_exts: - paths.append(os.path.relpath(os.path.join(cat_dir, f), base_dir)) - splits.append("validation") - labels.append(tax_list) + for dir_path, split in ((train_dir, "train"), (val_dir, "validation")): + if not os.path.exists(dir_path): + continue + for category in tqdm(sorted(os.listdir(dir_path)), desc=f"Indexing {split}"): + cat_dir = os.path.join(dir_path, category) + if not os.path.isdir(cat_dir): + continue + tax_list = category_to_tax.get(category) + if tax_list is None: + tax_list = [category, category, "Unknown", "Unknown", "Unknown", "Unknown", "Unknown"] + for f in sorted(os.listdir(cat_dir)): + if os.path.splitext(f)[1].lower() in img_exts: + paths.append(os.path.relpath(os.path.join(cat_dir, f), base_dir)) + splits.append(split) + labels.append(tax_list) index_data = {"path": paths, "split": splits, "label": labels} @@ -180,7 +163,6 @@ def main(): os.makedirs(base_dir, exist_ok=True) - # URLs urls = { "mini": "https://ml-inat-competition-datasets.s3.amazonaws.com/2021/train_mini.tar.gz", "full": "https://ml-inat-competition-datasets.s3.amazonaws.com/2021/train.tar.gz", @@ -240,7 +222,6 @@ def main(): except OSError: pass - # Write sentinel with open(sentinel_path, "w") as f: f.write("complete") diff --git a/examples/mnist.ipynb b/examples/mnist.ipynb index 8bfb119..968357a 100644 --- a/examples/mnist.ipynb +++ b/examples/mnist.ipynb @@ -7,7 +7,9 @@ "source": [ "### MNIST Dataset Construction\n", "\n", - "We download the MNIST dataset, parse the IDX format, and extract up to 500 PNG images per digit for the training and testing subsets using the standalone `construct.py` script." + "We download the MNIST dataset, parse the IDX format, and extract up to 500 PNG images per digit for the training and testing subsets using the standalone `construct.py` script.", + "\n", + "Saved plots illustrate the example output; they are not current performance benchmarks.\n" ] }, { @@ -17,7 +19,18 @@ "metadata": {}, "outputs": [], "source": [ - "!python -m examples.mnist.construct" + "import os\n", + "from pathlib import Path\n", + "import subprocess\n", + "import sys\n", + "\n", + "ROOT = Path.cwd()\n", + "if ROOT.name == \"examples\":\n", + " ROOT = ROOT.parent\n", + "if not (ROOT / \"pyproject.toml\").is_file():\n", + " raise RuntimeError(\"Start this notebook in the repository root or examples directory.\")\n", + "subprocess.run([sys.executable, \"-m\", \"examples.mnist.construct\"], cwd=ROOT, check=True)\n", + "os.chdir(ROOT / \"examples\")\n" ] }, { @@ -25,22 +38,18 @@ "id": "3f10b434", "metadata": {}, "source": [ - "# Create long-tail dataset" + "# Optional long-tail preparation\n", + "\n", + "This constructs a separate training directory and illustrates its distribution.\n", + "The training commands below use the original balanced `mnist/train` directory.\n" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "id": "e085a736", "metadata": {}, "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[11, 43, 98, 176, 281, 417, 588, 807, 1093, 1500]\n" - ] - }, { "data": { "image/png": "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4uPjMTQ0xMPDg8ePHwN5+btu3Lihtg0bNozatWvTvHnzsro08ZrReGr+GzduqH3evn07n376KR9++CEAoaGhJCQkcOjQIbZv307//v25efMmWlpapKSksGzZMo4cOfKSlyOEEOJVOnjwID169FC9GVqrVi3+7//+T5XdXFEUFixYwOTJk+nRowcAP/74I1WqVGHTpk307duXihUrYmNjoxozOzubzZs3M3r06AJ358XbS+Op+W1sbNS2zZs3895772Fvbw/kpebv3r07Tk5O+Pn58ddff3H79m0AfH19mT179nPLSwshhHh9tG3blj179nDu3DkAjh8/TmxsLF27dgXyXsxITU1VS2thampKq1atOHToUKFjbtmyhTt37jB06NDSvwDxxtB44rhn3bx5k19++UVt8ayLiwurV6/m0aNHREdHU7VqVSwtLYmIiEBfX7/IidDfZWVlkZWVpfostYSEEOLVmzRpEunp6dSvXx9tbW1ycnIIDg5mwIABAKSmpgJ56xafVaVKFdW+v1uxYgUeHh5Ur169dIMXb5RSnbCEh4djbGys9ujIx8eHEydO0LBhQywtLVm/fj337t1j6tSpxMTEMHnyZNauXUudOnVYuXIl1apVK3TsWbNmMX369NIMXwghxAusX7+eiIgIIiMjcXJyIjExkYCAAGxtbRk8eHCJx7t27RrR0dGsX7++FKIVbzKN1xJ61sqVKxkwYAD6+vqqNl1dXRYvXkxKSgqHDx+mffv2jB8/njFjxnDs2DE2bdrE8ePHad269XMLIUotISGEKHsTJkxg0qRJ9O3bl8aNGzNw4EDGjh3LrFmzAFRrU27evKl23M2bN9XWreQLCwvDwsKC7t27l37w4o1SahOW3377jbNnzzJs2LDn9tu3bx+nTp3C39+fmJgYPD09MTQ0xNvbm5iYmCKP09PTw8TERG0TQgjxaj18+PC52c1r166NjY0Ne/bsUe1PT08nPj6eNm3aqB2nKAphYWEMGjQIXV3d0g9evFFK7ZHQihUraNasGS4uLkX2efz4MX5+fkRERKiefea/u5+dnS1p+YUQ4jXn5eVFcHAwdnZ2ODk5cezYMebPn4+Pjw+Ql+oiICCAmTNnUrduXWrXrs2UKVOwtbWlZ8+eamPt3buXlJSUF/6gK95OGk/ND3mz5w0bNjBv3rznjjVjxgw8PT1p0qQJkJeaf8KECQwdOpRFixbRrl27koYnhBDiFVq4cCFTpkzhs88+49atW9ja2jJy5EimTp2q6jNx4kQyMzMZMWIE9+/fp3379uzYsUNtuQDk/aDbtm1b6tev/6ovQ7wBtJRn0xEWQ0xMjFpq/nz5qfkhL9dKQEAAN27cwNTUtNBxTp48Sa9evUhMTMTQ0BCA3Nxc/P39iYiIwNHRkcjISBwcHIoVV3p6OqampqSlpcnjISGEEAAsmPz6vRodMDPshX3e1LhfRnG/f5d4wvK6kgmLEEKIv3tTv/G/qXG/jOJ+/y7Vt4SEEEIIITRB47WE4H/ZbE1NTTE0NKRFixZcuXJFtX/cuHGYm5tTo0YNIiIi1I7dsGEDXl5eJb8SIYQQQpRbJZ6w5NcSWrx4caH7L1y4QPv27alfvz4xMTGcOHGCKVOmqBZXbd26lcjISHbu3MmcOXMYNmyYKjV/WloaX331VZFjCyGEEOLtVOK3hLp27aqqEVGYr776Ck9PT+bMmaNqq1Onjur3p0+fxtXVlebNm9O8eXMCAgJISUnB0tKSiRMn4uvrq3rb6HkkNb8QQrw6b9OaCvF60ugaltzcXH755Rfq1auHh4cH1tbWtGrVSu2xkYuLC0eOHOHevXskJCTw6NEjHBwciI2N5ejRo8/NbvusWbNmYWpqqtpq1KihyUsRQgghxGtEoxOWW7du8eDBA7799lu6dOnCzp076dWrF71792b//v0AeHh48Mknn9CiRQuGDBlCeHg4hoaG+Pr6smTJEkJCQnB0dKRdu3acOnWqyHNJan4hhBDi7aHRTLf5qZh79OjB2LFjAXjnnXc4ePAgS5Ys4d133wUgKCiIoKAg1XHTp0/Hzc0NXV1dZs6cSVJSEtu2bWPQoEEkJCQUei49PT309PQ0Gb4QQgghXlMavcNiaWmJjo4ODRs2VGtv0KCB2ltCzzpz5gxr1qxhxowZxMTE0LFjR6ysrPD29ubo0aNkZGRoMkQhhBBCvIE0OmGpWLEiLVq04OzZs2rt586do2bNmgX6K4rCyJEjmT9/PkZGRuTk5JCdnQ2g+lXqCQkhhBBC47WEJkyYwMcff0zHjh1577332LFjB1u3bi208vLy5cuxsrJS5V1p164dQUFBxMXFsX37dho2bIiZmdlLX5wQQgghyocST1iOHDmiVkto3LhxwP9qCfXq1YslS5Ywa9YsxowZg6OjIz///DPt27dXG+fmzZsEBwdz8OBBVVvLli0ZP3483bp1w9ramvDw8Je9LiGEEEKUIyWesLi6uvKi8kM+Pj6q0uJFqVKlCpcuXSrQPnXqVLUqn0IIIYQQGk/NP2TIELS0tNS2Ll26qPZnZWUxcOBATExMqFevHrt371Y7fu7cuYwePfrlrkYIIYQQ5VKJ77Dkp+b38fGhd+/ehfbp0qULYWH/y0D47OvHoaGhJCQkcOjQIbZv307//v25efMmWlpapKSksGzZMo4cOfISlyKEEEKI8krjqfkhb4JiY2NT6L78wohOTk7Y29szYcIEbt++jZWVFb6+vsyePfu55aWFEEII8fbR6GvN+WJiYrC2tsbR0RFfX1/u3Lmj2ufi4kJsbCyPHj0iOjqaqlWrYmlpSUREBPr6+vTq1atY58jKyiI9PV1tE0IIIUT5pPEJS5cuXfjxxx/Zs2cPs2fPZv/+/XTt2lWVT8XHxwcXFxcaNmxIcHAw69ev5969e0ydOpWFCxcyefJkHBwc8PDw4Pr160WeR2oJCSGEEG8PjabmB+jbt6/q940bN8bZ2Zk6deoQExND586d0dXVZfHixWrHDB06lDFjxnDs2DE2bdrE8ePHmTNnDmPGjOHnn38u9DyBgYGqV6ohr1qzTFqEEEKI8qlUHgk9y97eHktLS7Vkc8/at28fp06dwt/fn5iYGDw9PTE0NMTb27vQZHP59PT0MDExUduEEEIIUT5p/A7L3127do07d+5QtWrVAvseP36Mn58fERERaGtrk5OTo8rxkp2dLWn5hRBCCAG8xB2WBw8ekJiYSGJiIvC/1PxXrlzhwYMHTJgwgbi4OC5dusSePXvo0aOHak3K382YMQNPT0+aNGkC5KXm37hxIydOnGDRokW0a9fun12dEEIIIcoFjabmDwkJ4cSJE4SHh3P//n1sbW1xd3dnxowZarlYAE6ePMn69etVEx+Ajz76iJiYGDp06ICjoyORkZEveVlCCCGEKE80npo/Ojq6WOM0atSI8+fPq7VVqFCBH374gR9++KGkYQkhhBCiHCv1RbdCCCGEEP+UxmsJPWvUqFFoaWmxYMECVZvUEhJCCCFESZVKLSGAqKgo4uLisLW1VWuXWkJCCCGEKKlSqSV0/fp1Ro8eTXR0NN26dVPbJ7WEhBBCCFFSGs/Dkpuby8CBA5kwYQJOTk4F9ru4uLB69WqN1BLKyspSfZZaQkIIIUT5pfFFt7Nnz0ZHR4cxY8YUul9qCQkhhBCipDQ6YUlISODf//43q1atQktLq9A++bWEUlJSOHz4MO3bt2f8+PEFagm1bt26yEkP5NUSSktLU21Xr17V5KUIIYQQ4jWi0QnLb7/9xq1bt7Czs0NHRwcdHR0uX77M+PHjqVWrVqHHSC0hIYQQQryIRtewDBw4EDc3N7U2Dw8PBg4cyNChQwv0l1pCQgghhCiOEk9YHjx4oFZ5Ob+WkLm5OXZ2dlhYWKj119XVxcbGBkdHxwJjFVZLaMKECQwdOlRqCQkhhBBCRaO1hFatWlXscaSWkBBCCCGKS+O1hP7u0qVLhbZLLSEhhBBCFJfGU/MHBQVRv359DA0NqVy5Mm5ubsTHx6v2S2p+IYQQQpRUiScs+an5Fy9eXOj+evXqsWjRIpKSkoiNjaVWrVq4u7vz119/Aeqp+UeMGEH//v1Vd2zyU/MHBwf/g0sSQgghRHmj8dT8/fv3V/s8f/58VqxYwYkTJ+jcubOk5hdCCCFEiWk8Nf+znjx5QmhoKKampri4uACSml8IIYQQJafx1PwA27Ztw8jICH19fb7//nt27dqFpaUlIKn5hRCiMEFBQWhpaalt9evXV+1PTU1l4MCB2NjYYGhoSNOmTfn555/Vxjh37hw9evTA0tISExMT2rdvz759+171pQhRKkplwvLee++RmJjIwYMH6dKlC97e3ty6dQuQ1PxCCFEUJycnbty4odpiY2NV+wYNGsTZs2fZsmULSUlJ9O7dG29vb44dO6bq88EHH/D06VP27t1LQkICLi4ufPDBB6SmppbF5QihUaUyYTE0NMTBwYHWrVuzYsUKdHR0WLFiRaF9JTW/EELk0dHRwcbGRrXl35kGOHjwIKNHj6Zly5bY29szefJkzMzMSEhIAOD27ducP3+eSZMm4ezsTN26dfn22295+PAhJ0+eLKtLEkJjSmXC8ne5ublq603y5afmX7p0qSo1f3Z2NiCp+YUQb5/z589ja2uLvb09AwYM4MqVK6p9bdu2Zd26ddy9e5fc3FzWrl3L48ePcXV1BcDCwgJHR0d+/PFHMjMzefr0KUuXLsXa2ppmzZqV0RUJoTkaTc1vYWFBcHAw3bt3p2rVqty+fZvFixdz/fp1+vTpU2AsSc0vhBB5WrVqxapVq3B0dOTGjRtMnz6dDh06cPLkSYyNjVm/fj0ff/wxFhYW6OjoUKlSJaKionBwcABAS0uL3bt307NnT4yNjalQoQLW1tbs2LGDypUrl/HVCfHPaTQ1/5IlSzhz5gzh4eHcvn0bCwsLWrRowW+//YaTk5PaOJKaXwgh/ufZdBHOzs60atWKmjVrsn79ej799FOmTJnC/fv32b17N5aWlmzatAlvb29+++03GjdujKIo+Pn5YW1tzW+//YaBgQHLly/Hy8uLw4cPU7Vq1TK8OiH+OY2n5t+4cWOxxpHU/EIIUTQzMzPq1atHcnIyFy5cYNGiRZw8eVL1w5+Liwu//fYbixcvZsmSJezdu5dt27Zx79491Zq+H374gV27dhEeHs6kSZPK8nKE+MdeyRoWIYQQJfPgwQMuXLhA1apVefjwIZD3Q92ztLW1yc3NBSiyT4UKFVR9hHiTabSWUHZ2Nl988QWNGzfG0NAQW1tbBg0axJ9//qnqI7WEhBCioH/961/s37+fS5cucfDgQXr16oW2tjb9+vWjfv36ODg4MHLkSP744w8uXLjAvHnz2LVrFz179gSgTZs2VK5cmcGDB3P8+HHOnTvHhAkTSElJoVu3bmV7cUJogEZrCT18+JCjR48yZcoUjh49ysaNGzl79izdu3dX9ZFaQkIIUdC1a9fo168fjo6OeHt7Y2FhQVxcHFZWVujq6vLrr79iZWWFl5cXzs7O/Pjjj4SHh+Pp6QmApaUlO3bs4MGDB3Tq1InmzZsTGxvL5s2bVZnGhXiTabSWkKmpKbt27VJrW7RoES1btuTKlSvY2dlJLSEhhCjE2rVrn7u/bt26BTLb/l3z5s2Jjo7WZFhCvDZKtZYQQFpaGlpaWpiZmQFSS0gIIYQQJVeqi24fP37MF198Qb9+/VR3TaSWkBBCCCFKqtQmLNnZ2Xh7e6MoCiEhIap2qSUkhBBCiJIqlQlL/mTl8uXL7Nq167lrUqSWkBBCCCFeRONrWPInK+fPn2ffvn1YWFgU2Te/llBERISqllD+G0NSS0gIUR4tmDy0rEMoIGBmWFmHIMQLlfgOy4MHD0hMTFSl1M+vJXTlyhWys7P56KOPOHLkCBEREeTk5JCamkpqaipPnjwpMFZhtYQ2btzIiRMnpJaQEEIIIVQ0WksoKCiILVu2APDOO++oHbdv3z5VVVGQWkJCCCGEKD6N1xJ63r5nSS0hIYQQQhSXRlPzQ17xQ3d3dywsLNDS0lK7g5Jv3LhxmJubU6NGDSIiItT2bdiwAS8vr5KGJYQQQohyTKOp+fP3t2/fntmzZxe6f+vWrURGRrJz507mzJnDsGHDuH37NpCXZO6rr74qcmwhhBBCvJ00mpofYODAgQBcunSp0P2nT5/G1dWV5s2b07x5cwICAkhJScHS0pKJEyfi6+uLnZ1dScMSQgghRDlW6qn5/87FxYXQ0FDu3bvHxYsXefToEQ4ODsTGxnL06NFir1+R1PxCCCHE26NUU/MXxsPDg08++YQWLVowZMgQwsPDMTQ0xNfXlyVLlhASEoKjoyPt2rXj1KlTRY4jqfmFEEKIt8crn7AABAUFkZycTFJSEr169WLWrFm4ubmhq6vLzJkziY2NZdiwYQwaNKjIMSQ1vxBCCPH2eOWPhP7uzJkzrFmzhmPHjrFy5Uo6duyIlZUV3t7e+Pj4kJGRgbGxcYHj9PT00NPTK4OIhRBCCPGqlckdlnyKojBy5Ejmz5+PkZEROTk5ZGdnA6h+lfT8QgghhCjxHZYHDx6QnJys+pyfmt/c3Bw7Ozvu3r3LlStX+PPPPwE4e/YsADY2NtjY2KiNtXz5cqysrFR5V9q1a0dQUBBxcXFs376dhg0bYmZm9rLXJoQQQohyQqOp+VetWsWWLVsYOvR/xb369u0LwLRp0wgKClK137x5k+DgYA4ePKhqa9myJePHj6dbt25YW1sTHh5e4gsSQgghRPmj8dT8Q4YMYciQIS8cp0qVKoXmapk6dSpTp04taVhCCCGEKMfKdA2LEEIIIURxaLyWkKIoTJ06lapVq2JgYICbm5takcOsrCwGDhyIiYkJ9erVY/fu3WrHz507l9GjR7/c1QghhBCiXNJ4LaE5c+bwn//8hyVLlhAfH4+hoSEeHh48fvwYgNDQUBISEjh06BAjRoygf//+qkdMKSkpLFu2jODg4H9wSUIIIYQobzRaS0hRFBYsWMDkyZPp0aMHAD/++CNVqlRh06ZN9O3bl9OnT9O9e3ecnJywt7dnwoQJ3L59GysrK3x9fZk9ezYmJib/7KqEEEIIUa5odA1LSkoKqampuLm5qdpMTU1p1aoVhw4dAvJqCcXGxvLo0SOio6OpWrUqlpaWREREoK+vT69evYp1rqysLNLT09U2IYQQQpRPGp2wpKamAnlvAD2rSpUqqn0+Pj64uLjQsGFDgoODWb9+Pffu3WPq1KksXLiQyZMn4+DggIeHB9evXy/yXFJLSAghhHh7vPK3hHR1dVm8eDEpKSkcPnyY9u3bM378eMaMGcOxY8fYtGkTx48fp3Xr1owZM6bIcaSWkBBCCPH20OiEJT+T7c2bN9Xab968WSDLbb59+/Zx6tQp/P39iYmJwdPTE0NDQ7y9vYmJiSnyXHp6epiYmKhtQgghhCifNDphqV27NjY2NuzZs0fVlp6eTnx8PG3atCnQ//Hjx/j5+bF06VK0tbUL1BKSOkJCCCGEgJeYsDx48IDExEQSExOB/9USunLlClpaWgQEBDBz5ky2bNlCUlISgwYNwtbWlp49exYYa8aMGXh6etKkSRMgr5bQxo0bOXHiBIsWLaJdu3b/6OKEEOLbb79V/d+ULzQ0FFdXV0xMTNDS0uL+/ftqx8TExKClpVXodvjw4Vd7AUIIoBRqCU2cOJHMzExGjBjB/fv3ad++PTt27EBfX19tnJMnT7J+/XrVxAfgo48+IiYmhg4dOuDo6EhkZORLXpYQQsDhw4dZunQpzs7Oau0PHz6kS5cudOnShcDAwALHtW3blhs3bqi1TZkyhT179tC8efNSjVkIUTiN1xLS0tLi66+/5uuvv37uOI0aNVLLgAtQoUIFfvjhB3744YeShiWEEGoePHjAgAEDWLZsGTNnzlTbl3+3pah1chUrVlRbd5ednc3mzZsZPXo0WlpapRWyEOI5SuUtoYyMDAICAqhZsyYGBga0bdtW7Tbqd999h7W1NdbW1sybN0/t2Pj4eJo1a8bTp09LIzQhxFvCz8+Pbt26qeWFellbtmzhzp07apXohRCvVonvsBTHsGHDOHnyJKtXr8bW1pY1a9bg5ubGf//7X+7cucPUqVPZtm0biqLwwQcf4O7uTuPGjXn69CmjRo0iNDQUHZ1SCU0I8RZYu3YtR48e1dh6kxUrVuDh4UH16tU1Mp4QouQ0Pit49OgRP//8M5s3b6Zjx44ABAUFsXXrVkJCQnB2dsbZ2ZlOnToB4OzszJkzZ2jcuDFz586lY8eOtGjRQtNhCSHeElevXuXzzz9n165dBdbOvYxr164RHR3N+vXrNRCdEOJlaXzC8vTpU3Jycgr8R2FgYEBsbCwDBgzg3LlzXLlyBUVROHfuHI0aNeLChQuEhYWRkJBQrPNkZWWRlZWl+iyp+YUQAAkJCdy6dYumTZuq2nJycjhw4ACLFi0iKysLbW3tYo8XFhaGhYUF3bt3L41whRDFpPE1LMbGxrRp04YZM2bw559/kpOTw5o1azh06BA3btygQYMGfPPNN7z//vu4u7sza9YsGjRowMiRI5kzZw7R0dE0atSIJk2acODAgSLPI6n5hRCF6dy5M0lJSar0C4mJiTRv3pwBAwaQmJhYosmKoiiEhYUxaNAgdHV1SzFqIcSLlMpCkdWrV+Pj40O1atXQ1tamadOm9OvXT3X3ZNSoUYwaNUrVPzw8XDXRcXR05PDhw1y7do2+ffuSkpKCnp5egXMEBgaqXqmGvDssMmkRQhgbG9OoUSO1NkNDQywsLFTtqamppKamkpycDEBSUhLGxsbY2dlhbm6uOm7v3r2kpKQwbNiwV3cBQohClcpbQnXq1GH//v08ePCAq1ev8scff5CdnY29vX2Bvrdv32b69OksXLiQ+Ph46tWrR926dXnvvffIzs7m3LlzhZ5DUvMLIV7WkiVLaNKkCcOHDwegY8eONGnShC1btqj1W7FiBW3btqV+/fplEaYQ4hml+iqOoaEhhoaG3Lt3j+joaObMmVOgz9ixYxk7dizVq1fn8OHDqtT88L/1MEII8U/8Pd9KUFAQQUFBLzxOklcK8foolQlLdHQ0iqLg6OhIcnIyEyZMoH79+gVyGOzatYtz584RHh4OQIsWLThz5gzbt2/n6tWraGtr4+joWBohCiGEEOINUioTlrS0NAIDA7l27Rrm5uZ8+OGHBAcHqy1ae/ToEf7+/qxbt44KFfKeTFWvXp2FCxcydOhQ9PT0CA8Px8DAoDRCFEIIIcQbpFQmLN7e3nh7ez+3j4GBAWfPni3QPmzYMFngJoQQQgg1pbLoVgghhBBCkzR+hyUnJ4egoCDWrFlDamoqtra2DBkyhMmTJ6uKhn333XeqBbhffPEF48ePVx0fHx/PZ599Rnx8vKTnF0IUacHk16+uT8DMsLIOQYhyS+MzgtmzZxMSEkJ4eDhOTk4cOXKEoUOHYmpqypgxYzhx4oTUEhJCCCFEiWh8VnDw4EF69OhBt27dAKhVqxb/93//xx9//AHAmTNnpJaQEEIIIUpE4xOWtm3bEhoayrlz56hXrx7Hjx8nNjaW+fPnA9C4cWOpJSSEEEKIEtH4hGXSpEmkp6dTv359tLW1ycnJITg4mAEDBgCo1RICVLWE3NzcVLWEgoKC0NXV5d///req4vPfzZo1i+nTp2s6fCGEEEK8hjQ+YVm/fj0RERFERkbi5OREYmIiAQEB2NraMnjwYEBqCQkhhBCiZDQ+YZkwYQKTJk2ib9++QN4joMuXLzNr1izVhOVZ+bWEDhw4oFZLqG7duqpaQo0bNy5wnJ6eXqETGSGEEEKUPxrPw/Lw4UNV5tp82tra5ObmFtr/2VpCOTk5UktICCGEEAVo/A6Ll5cXwcHB2NnZ4eTkxLFjx5g/fz4+Pj4F+kotISGEEEIUh8YnLAsXLmTKlCl89tln3Lp1C1tbW0aOHMnUqVPV+kktISGEEEIUl8YnLMbGxixYsIAFCxY8t5/UEhJCCCFEcUktISGEEEK89jQ+YalVqxZaWloFNj8/PwDGjRuHubk5NWrUICIiQu3YDRs24OXlpemQhBBCCPGG0/gjocOHD6u92XPy5Enef/99+vTpw9atW4mMjGTnzp2cP38eHx8fPDw8sLS0JC0tja+++ordu3drOiQhhBBCvOE0fofFysoKGxsb1bZt2zbq1KnDu+++y+nTp3F1daV58+b069cPExMTUlJSAJg4cSK+vr7Y2dkV6zxZWVmkp6erbUIIIYQon0p1DcuTJ09Ys2YNPj4+aGlp4eLiwpEjR7h37x4JCQk8evQIBwcHYmNjOXr0KGPGjCn22LNmzcLU1FS1SZZbIYQQovwq1QnLpk2buH//PkOGDAHAw8ODTz75hBYtWjBkyBDCw8MxNDTE19eXJUuWEBISgqOjI+3atePUqVPPHTswMJC0tDTVdvXq1dK8FCHeOrNmzaJFixYYGxtjbW1Nz549C7zZl5qaysCBA7GxscHQ0JCmTZvy888/q/UJDg6mbdu2VKpUCTMzs1d4BUKI8qRUJywrVqyga9eu2NraqtqCgoJITk4mKSmJXr16MWvWLNzc3NDV1WXmzJnExsYybNgwBg0a9Nyx9fT0MDExUduEEJqzf/9+/Pz8iIuLY9euXWRnZ+Pu7k5mZqaqz6BBgzh79ixbtmwhKSmJ3r174+3tzbFjx1R9njx5Qp8+ffD19S2LyxBClBMaX3Sb7/Lly+zevZuNGzcW2efMmTOsWbOGY8eOsXLlSjp27IiVlRXe3t74+PiQkZGBsbFxaYUohHiOHTt2qH1etWoV1tbWJCQkqKqoHzx4kJCQEFq2bAnA5MmT+f7770lISKBJkyYAqqrqq1atenXBCyHKnVK7wxIWFoa1tTXdunUrdL+iKIwcOZL58+djZGSkVkco/1epIyTE6yMtLQ0Ac3NzVVvbtm1Zt24dd+/eJTc3l7Vr1/L48WNcXV3LKEohRHlVKhOW3NxcwsLCGDx4MDo6hd/EWb58OVZWVqq8K+3atWPv3r3ExcXx/fff07BhQ3neLcRrIjc3l4CAANq1a0ejRo1U7evXryc7OxsLCwv09PQYOXIkUVFRODg4lGG0QojyqFQeCe3evZsrV64UWvAQ4ObNmwQHB3Pw4EFVW8uWLRk/fjzdunXD2tpaVRBRCFH2/Pz8OHnyJLGxsWrtU6ZM4f79++zevRtLS0s2bdqEt7c3v/32G40bNy6jaIUQ5VGpTFjc3d1RFKXI/VWqVOHSpUsF2qdOnVqgSKIQomz5+/uzbds2Dhw4QPXq1VXtFy5cYNGiRZw8eRInJycAXFxc+O2331i8eDFLliwpq5CFEOVQqTwSun79Op988gkWFhYYGBjQuHFjjhw5otr/3XffYW1tjbW1NfPmzVM7Nj4+nmbNmvH06dPSCE0IUUyKouDv709UVBR79+6ldu3aavsfPnwIoKq2nk9bW5vc3NxXFqcQ4u2g8Tss9+7do127drz33nts374dKysrzp8/T+XKlQE4ceIEU6dOZdu2bSiKwgcffIC7uzuNGzfm6dOnjBo1itDQ0CLXvgghXg0/Pz8iIyPZvHkzxsbGpKamAmBqaoqBgQH169fHwcGBkSNH8t1332FhYcGmTZvYtWsX27ZtU41z5coV7t69y5UrV8jJySExMREABwcHjIyMyuLShBBvII3PCmbPnk2NGjUICwtTtT37k9mZM2dwdnamU6dOADg7O3PmzBkaN27M3Llz6dixIy1atNB0WEKIEgoJCQEo8MZPWFgYQ4YMQVdXl19//ZVJkybh5eXFgwcPcHBwIDw8HE9PT1X/qVOnqq1Jy3/ded++ffI2kRCi2DQ+YdmyZQseHh706dOH/fv3U61aNT777DOGDx8OQOPGjTl37hxXrlxBURTOnTtHo0aNuHDhAmFhYSQkJBTrPFlZWWRlZak+Sy0hITTreevQ8tWtW7dAZtu/W7VqleRgEUL8Yxpfw3Lx4kVCQkKoW7cu0dHR+Pr6MmbMGNVPWA0aNOCbb77h/fffx93dnVmzZtGgQQNGjhzJnDlziI6OplGjRjRp0oQDBw4UeR6pJSSEEEK8PTR+hyU3N5fmzZvzzTffAHm3f0+ePMmSJUsYPHgwAKNGjWLUqFGqY8LDwzE2NqZNmzY4Ojpy+PBhrl27Rt++fUlJSUFPT6/AeQIDAxk3bpzqc3p6ukxahBBCiHJK4xOWqlWr0rBhQ7W2Bg0aFHnb+Pbt20yfPp0DBw4QHx9PvXr1qFu3LnXr1iU7O5tz584Vms9BT0+v0ImMEEIIIcofjT8SateuXYGKrufOnaNmzZqF9h87dixjx46levXqaun5AZ4+fSrp+YUQQgih+TssY8eOpW3btnzzzTd4e3vzxx9/EBoaSmhoaIG+u3bt4ty5c6r1LS1atODMmTNs376dq1evoq2tjaOjo6ZDFEIIIcQbRuMTlhYtWhAVFUVgYCBff/01tWvXZsGCBQwYMECt36NHj/D392fdunWqxFPVq1dn4cKFDB06FD09PcLDwzEwMNB0iEKIZyyYPLSsQyggYGbYizsJId4qpZKd7YMPPuCDDz54bh8DA4MCj44Ahg0bxrBhw0ojLCGEEEK8oUolNb8QQgghhCZpfMISFBSElpaW2la/fn3V/nHjxmFubk6NGjWIiIhQO3bDhg14eXlpOiQhhBBCvOFK5ZGQk5MTu3fv/t9J/n9doK1btxIZGcnOnTs5f/48Pj4+eHh4YGlpSVpaGl999ZXacUIIIYQQUEqPhHR0dLCxsVFtlpaWAJw+fRpXV1eaN29Ov379MDExISUlBYCJEyfi6+uLnZ1daYQkhBBCiDdYqUxYzp8/j62tLfb29gwYMIArV64A4OLiwpEjR7h37x4JCQk8evQIBwcHYmNjOXr0KGPGjCn2ObKyskhPT1fbhBBCCFE+aXzC0qpVK1atWsWOHTsICQkhJSWFDh06kJGRgYeHB5988gktWrRgyJAhhIeHY2hoiK+vL0uWLCEkJARHR0fatWvHqVOnnnseqSUkhBBCvD00PmHp2rUrffr0wdnZGQ8PD3799Vfu37/P+vXrgbxFucnJySQlJdGrVy9mzZqFm5sburq6zJw5k9jYWIYNG8agQYOee57AwEDS0tJU29WrVzV9KUIIIYR4TZT6a81mZmbUq1eP5OTkAvvOnDnDmjVrmDFjBjExMXTs2BErKyu8vb05evQoGRkZRY6rp6eHiYmJ2ibE6+rAgQN4eXlha2uLlpYWmzZtUtv/9zfr8re5c+eq9fvll19o1aoVBgYGVK5cmZ49e766ixBCiDJU6hOWBw8ecOHCBapWrarWrigKI0eOZP78+RgZGanVEcr/VeoIifIiMzMTFxcXFi9eXOj+GzduqG0rV65ES0uLDz/8UNXn559/ZuDAgQwdOpTjx4/z+++/079//1d1CUIIUaY0/lrzv/71L7y8vKhZsyZ//vkn06ZNQ1tbm379+qn1W758OVZWVqq8K+3atSMoKIi4uDi2b99Ow4YNMTMz03R4QpSJrl270rVr1yL329jYqH3evHkz7733Hvb29kBeIdDPP/+cuXPn8umnn6r6/b0yuhBClFcan7Bcu3aNfv36cefOHaysrGjfvj1xcXFYWVmp+ty8eZPg4GAOHjyoamvZsiXjx4+nW7duWFtbqwoiCvG2uXnzJr/88ovav4GjR49y/fp1KlSoQJMmTUhNTeWdd95h7ty5NGrUqAyjFUKIV0PjE5a1a9e+sE+VKlW4dOlSgfapU6cydepUTYckxBslPDwcY2NjevfurWq7ePEikLdoff78+dSqVYt58+bh6urKuXPnMDc3L6twhRDilSj1NSzffvstWlpaBAQEqNokPb8QRVu5ciUDBgxAX19f1ZabmwvAV199xYcffkizZs0ICwtDS0uLDRs2lFWoQgjxypRKav58hw8fZunSpTg7O6vaJD2/EEX77bffOHv2LOvWrVNrz1+0/uyaFT09Pezt7VWJGYUQojwrtTssDx48YMCAASxbtozKlSur2iU9vxBFW7FiBc2aNcPFxUWtvVmzZujp6XH27FlVW3Z2NpcuXaJmzZqvOkwhhHjlSm3C4ufnR7du3XBzc1Nr11R6fknNL94kDx48IDExkcTERABSUlJITExUuzuSnp7Ohg0bGDZsWIHjTUxMGDVqFNOmTWPnzp2cPXsWX19fAPr06fNKrkEIIcpSqTwSWrt2LUePHuXw4cMF9j2bnt/AwEAtPf+qVasICQlh4cKFWFpaEhoaipOTU6HnmDVrFtOnTy+N8IXQuCNHjvDee++pPo8bNw6AwYMHs2rVKiDv342iKAVSAOSbO3cuOjo6DBw4kEePHtGqVSv27t2rdgdTCCHKK41PWK5evcrnn3/Orl271BYNPisoKIigoCDV5+nTp6ul509KSmLbtm0MGjSIhISEQscIDAxU/acPeT+dSj0h8bpydXVFUZTn9hkxYgQjRowocr+uri7fffcd3333nabDE0KI157GJywJCQncunWLpk2bqtpycnI4cOAAixYtIisrC21tbdW+/PT8x44dY+XKlWrp+X18fMjIyMDY2LjAefT09NDT09N0+EIIIYR4DWl8wtK5c2eSkpLU2oYOHUr9+vX54osv1CYrkp5fCCGEEMWh8QmLsbFxgcybhoaGWFhYFGiX9PxCCCGEKI5SzcPyPJKeXwghhBDF9UomLDExMQXaJD2/KG8WTB5a1iEUEDAzrKxDEEIIjSj11PxCCCGEEP+UxicsISEhODs7Y2JigomJCW3atGH79u2q/VJHSAghhBAlpfEJS/Xq1fn2229JSEjgyJEjdOrUiR49enDq1Cm1OkJz5sxh2LBh3L59G0BVR2jx4sWaDkmUcxkZGQQEBFCzZk0MDAxo27atWtLCBw8e4O/vT/Xq1TEwMKBhw4YsWbKkDCMWQghRUhpfw/L3OyTBwcGEhIQQFxfHnTt3VHWEmjdvTkBAACkpKVhaWkodIfHShg0bxsmTJ1m9ejW2trasWbMGNzc3/vvf/1KtWjXGjRvH3r17WbNmDbVq1WLnzp189tln2Nra0r1797IOXwghRDGU6hqWnJwc1q5dS2ZmJm3atNFYHSGQWkIiz6NHj/j555+ZM2cOHTt2xMHBgaCgIBwcHAgJCQHg4MGDDB48GFdXV2rVqsWIESNwcXHhjz/+KOPohRBCFFepTFiSkpIwMjJCT0+PUaNGERUVRcOGDdXqCA0ZMkStjtCSJUsICQnB0dGRdu3acerUqeeeY9asWZiamqo2Scv/dnr69Ck5OTkFykAYGBgQGxsLQNu2bdmyZQvXr19HURT27dvHuXPncHd3L4uQhRBCvIRSmbA4OjqSmJhIfHw8vr6+DB48mP/+979AXh2h5ORkkpKS6NWrF7NmzVKrIxQbG8uwYcMYNGjQc88RGBhIWlqaart69WppXIp4zRkbG9OmTRtmzJjBn3/+SU5ODmvWrOHQoUPcuHEDgIULF9KwYUOqV69OxYoV6dKlC4sXL6Zjx45lHL0QQojiKpU8LBUrVsTBwQGAZs2acfjwYf7973+zdOlStX4vW0cIpJaQ+J/Vq1fj4+NDtWrV0NbWpmnTpvTr109VOHPhwoXExcWxZcsWatasyYEDB/Dz88PW1hY3N7cyjl4IIURxvJLEcbm5uWRlZam1SR0hoSl16tRh//79ZGZmkp6eTtWqVfn444+xt7fn0aNHfPnll0RFRdGtWzcAnJ2dSUxM5LvvvpMJixBCvCE0PmEJDAyka9eu2NnZkZGRQWRkJDExMURHR6v1kzpCQtMMDQ0xNDTk3r17REdHM2fOHLKzs8nOzqZCBfWnn9ra2uTm5pZRpEIIIUpK4xOWW7duMWjQIG7cuIGpqSnOzs5ER0fz/vvvq/pIHSGhSdHR0SiKgqOjI8nJyUyYMIH69eszdOhQdHV1effdd5kwYQIGBgbUrFmT/fv38+OPPzJ//vyyDl0IIUQxaXzCsmLFihf2kTpCQpPS0tIIDAzk2rVrmJub8+GHHxIcHIyuri4Aa9euJTAwkAEDBnD37l1q1qxJcHAwo0aNKuPIhRBCFJfG3xKaNWsWLVq0wNjYGGtra3r27MnZs2fV+kh6fqFJ3t7eXLhwgaysLG7cuMGiRYswNTVV7bexsSEsLIzr16/z6NEjzpw5w7hx49DS0irDqIUQQpSExics+/fvx8/Pj7i4OHbt2kV2djbu7u5kZmYCSHp+IYQQQpSYxicsO3bsYMiQITg5OeHi4sKqVau4cuWK6hXT06dPq9Lz9+vXDxMTE1JSUgAkPf9r4ttvv0VLS4uAgABV28iRI6lTpw4GBgZYWVnRo0cPzpw5U3ZBCiGEeKuUamp+yLtrAmBubg6gsfT8kpq/dBw+fJilS5fi7Oys1t6sWTPCwsI4ffq0apGru7u7vHouhBDilSjVCUtubi4BAQG0a9eORo0aAWgsPb+k5te8Bw8eMGDAAJYtW0blypXV9o0YMYKOHTtSq1YtmjZtysyZM7l69Wqhi6eFEEIITSvVxHF+fn6cPHlSVdMlX1BQEEFBQarP06dPV0vPn5SUxLZt2xg0aJDqUdLfBQYGMm7cONXn9PR0mbT8Q35+fnTr1g03NzdmzpxZZL/MzEzCwsKoXbt2qXzNF0weqvEx/6mAmWFlHYIQQrzVSm3C4u/vz7Zt2zhw4ADVq1cvst/LpueX1PyatXbtWo4ePcrhw4eL7PPDDz8wceJEMjMzcXR0ZNeuXVSsWPEVRimEEOJtpfFHQoqi4O/vT1RUFHv37qV27drP7Svp+cve1atX+fzzz4mIiChQ9fhZAwYM4NixY+zfv5969erh7e3N48ePX2GkQggh3lYav8Pi5+dHZGQkmzdvxtjYmNTUVABMTU0xMDBQ6yvp+V8PCQkJ3Lp1i6ZNm6racnJyOHDgAIsWLSIrKwttbW3VeqG6devSunVrKleuTFRUFP369SvD6IUQQrwNND5hCQkJAcDV1VWtPSwsjCFDhqg+S3r+10fnzp1JSkpSaxs6dCj169fniy++QFtbu8AxiqKgKEqBopZCCCFEaSiVR0KFbc9OVuB/6fltbW3V2qdOncqdO3c4ffo0LVu21HR4pe7AgQN4eXlha2uLlpYWmzZtUtu/ceNG3N3dsbCwQEtLi8TExDKJ81nGxsY0atRIbTM0NMTCwoJGjRpx8eJFZs2aRUJCAleuXOHgwYP06dMHAwMDPD09yzp8IYQQb4FSz8PytsnMzMTFxaXIbL2ZmZm0b9+e2bNnv+LIXp6+vj6//fYbnp6eODg48PHHH2NsbMzBgwextrYu6/CEEEK8BTT+SOjAgQPMnTuXhIQEbty4QVRUFD179lTt/+6775gzZw4AX3zxBePHj1fti4+P57PPPiM+Ph4dnVJ947rUdO3ala5duxa5f+DAgQCvff6SmJgY1e9tbW359ddfyy4YIYQQbz2Nzwry7zD4+PjQu3dvtX0nTpxg6tSpbNu2DUVR+OCDD3B3d6dx48Y8ffqUUaNGERoa+sZOVoQQQghROjQ+M3jeHYYzZ87g7OxMp06dAHB2dubMmTM0btyYuXPn0rFjR1q0aKHpkIQQQgjxhnultzIaN27MuXPnuHLlCoqicO7cORo1asSFCxcICwsrMqttYbKystTeUJFaQkIIIUT59UoX3TZo0IBvvvmG999/H3d3d2bNmkWDBg0YOXIkc+bMITo6mkaNGtGkSRMOHDjw3LGklpAQQgjx9njli0VGjRrFqFGjVJ/Dw8MxNjamTZs2ODo6cvjwYa5du0bfvn1JSUkpMv2+1BJ6ManJI4QQorwo09Wtt2/fZvr06Rw4cID4+Hjq1atH3bp1qVu3LtnZ2Zw7d47GjRsXeuzrWkvowYMHJCcnqz6npKSQmJiIubk5dnZ23L17lytXrvDnn38CcPbsWQBsbGywsbEpk5iFEEKI112Z5mEZO3YsY8eOpXr16mp1hACePn36RtYROnLkCE2aNKFJkyYAjBs3jiZNmjB16lQAtmzZQpMmTejWrRsAffv2pUmTJixZsqTMYhZCCCFedxq/w/KiOwz5du3axblz51Tp91u0aMGZM2fYvn07V69eRVtbG0dHR02HV+pcXV1RFKXI/UOGDCmQ9VcIIYQQz6fxCcuRI0d47733VJ/z15kMHjyYVatWAfDo0SP8/f1Zt24dFSrk3eSpXr06CxcuZOjQoejp6REeHl6gWKIQQggh3k4an7C86A4DgIGBgWrtxrOGDRvGsGHDNB2SEEIIId5wpbaGZfHixdSqVQt9fX1atWrFH3/8odo3btw4zM3NqVGjBhEREWrHbdiwAS8vr9IKSwghhBBvoFJ5S2jdunWMGzeOJUuW0KpVKxYsWICHhwdnz54lPj6eyMhIdu7cyfnz5/Hx8cHDwwNLS0vS0tL46quv2L17d2mEJYQQQog3VKlMWObPn8/w4cMZOjQvD8iSJUv45ZdfWLlyJRUqVMDV1ZXmzZvTvHlzAgICSElJwdLSkokTJ+Lr66u2OPd1IPlMhBBCiLKl8QnLkydPSEhIIDAwUNVWoUIF3NzcOHToEJ999hmhoaHcu3ePixcv8ujRIxwcHIiNjeXo0aP88MMPxTrP31Pzp6WlAaWTov9x1hONj/lPFec6JW7NkbhfLYn71ZK4X63yHPc/GfdF619RNOz69esKoBw8eFCtfcKECUrLli0VRVGUadOmKXXq1FEaNWqkbNy4UcnKylIaNWqkHDlyRFm4cKFSr149pW3btsrJkyeLPM+0adMUQDbZZJNNNtlkKwfb1atXnzu/0FKUF01pSubPP/+kWrVqHDx4kDZt2qjaJ06cyP79+4mPjy9wzPTp07l//z5Dhw7F3d2dpKQktm3bxqJFi4osiPj3Oyy5ubncvXsXCwsLtLS0NHlJGpNfPuDq1auYmJiUdTjFJnG/WhL3qyVxv1oS96v1JsStKAoZGRnY2tqqUp0URuOPhCwtLdHW1ubmzZtq7Tdv3iw09fyZM2dYs2YNx44dY+XKlXTs2BErKyu8vb3x8fEhIyMDY2PjAscVlprfzMxMo9dSWkxMTF7bvzjPI3G/WhL3qyVxv1oS96v1usdtamr6wj4af625YsWKNGvWjD179qjacnNz2bNnj9odF8ibVY0cOZL58+djZGSklp4//9c3MT2/EEIIITSrVN4SGjduHIMHD6Z58+a0bNmSBQsWkJmZqXprKN/y5cuxsrJS5V1p164dQUFBxMXFsX37dho2bPjG3DURQgghROkplQnLxx9/zF9//cXUqVNJTU3lnXfeYceOHVSpUkXV5+bNmwQHB3Pw4EFVW8uWLRk/fjzdunXD2tpaVWeovNDT02PatGmvZZXp55G4Xy2J+9WSuF8tifvVelPjLozGF90KIYQQQmhaqaXmF0IIIYTQFJmwCCGEEOK1JxMWIYQQQrz2ZMIihBBCiNeeTFiEEEII8dqTCcsrsnjxYmrVqoW+vj6tWrXijz/+KOuQXujAgQN4eXlha2uLlpYWmzZtKuuQXmjWrFm0aNECY2NjrK2t6dmzJ2fPni3rsF4oJCQEZ2dnVTbKNm3asH379rIOq8S+/fZbtLS0CAgIKOtQnisoKAgtLS21rX79+mUdVrFcv36dTz75BAsLCwwMDGjcuDFHjhwp67Ceq1atWgW+3lpaWvj5+ZV1aM+Vk5PDlClTqF27NgYGBtSpU4cZM2a8uEjfayAjI4OAgABq1qyJgYEBbdu25fDhw2Ud1j8iE5ZXYN26dYwbN45p06Zx9OhRXFxc8PDw4NatW2Ud2nNlZmbi4uLC4sWLyzqUYtu/fz9+fn7ExcWxa9cusrOzcXd3JzMzs6xDe67q1avz7bffkpCQwJEjR+jUqRM9evTg1KlTZR1asR0+fJilS5fi7Oxc1qEUi5OTEzdu3FBtsbGxZR3SC927d4927dqhq6vL9u3b+e9//8u8efOoXLlyWYf2XIcPH1b7Wu/atQuAPn36lHFkzzd79mxCQkJYtGgRp0+fZvbs2cyZM4eFCxeWdWgvNGzYMHbt2sXq1atJSkrC3d0dNzc3rl+/Xtahvbx/UJhZFFPLli0VPz8/1eecnBzF1tZWmTVrVhlGVTKAEhUVVdZhlNitW7cUQNm/f39Zh1JilStXVpYvX17WYRRLRkaGUrduXWXXrl3Ku+++q3z++edlHdJzTZs2TXFxcSnrMErsiy++UNq3b1/WYfxjn3/+uVKnTh0lNze3rEN5rm7duik+Pj5qbb1791YGDBhQRhEVz8OHDxVtbW1l27Ztau1NmzZVvvrqqzKK6p+TOyyl7MmTJyQkJODm5qZqq1ChAm5ubhw6dKgMI3s7pKWlAWBubl7GkRRfTk4Oa9euJTMzs0D9rdeVn58f3bp1U/t7/ro7f/48tra22NvbM2DAAK5cuVLWIb3Qli1baN68OX369MHa2pomTZqwbNmysg6rRJ48ecKaNWvw8fFBS0urrMN5rrZt27Jnzx7OnTsHwPHjx4mNjaVr165lHNnzPX36lJycHPT19dXaDQwM3og7iUUpldT84n9u375NTk6OWlkCgCpVqnDmzJkyiurtkJubS0BAAO3ataNRo0ZlHc4LJSUl0aZNGx4/foyRkRFRUVE0bNiwrMN6obVr13L06NE36vl4q1atWLVqFY6Ojty4cYPp06fToUMHTp48WWh1+NfFxYsXCQkJYdy4cXz55ZccPnyYMWPGULFiRQYPHlzW4RXLpk2buH//PkOGDCnrUF5o0qRJpKenU79+fbS1tcnJySE4OJgBAwaUdWjPZWxsTJs2bZgxYwYNGjSgSpUq/N///R+HDh3CwcGhrMN7aTJhEeWWn58fJ0+efGN+onB0dCQxMZG0tDR++uknBg8ezP79+1/rScvVq1f5/PPP2bVrV4Gf5l5nz/6E7OzsTKtWrahZsybr16/n008/LcPIni83N5fmzZvzzTffANCkSRNOnjzJkiVL3pgJy4oVK+jatSu2trZlHcoLrV+/noiICCIjI3FyciIxMZGAgABsbW1f+6/36tWr8fHxoVq1amhra9O0aVP69etHQkJCWYf20mTCUsosLS3R1tbm5s2bau03b97ExsamjKIq//z9/dm2bRsHDhygevXqZR1OsVSsWFH100+zZs04fPgw//73v1m6dGkZR1a0hIQEbt26RdOmTVVtOTk5HDhwgEWLFpGVlYW2tnYZRlg8ZmZm1KtXj+Tk5LIO5bmqVq1aYALboEEDfv755zKKqGQuX77M7t272bhxY1mHUiwTJkxg0qRJ9O3bF4DGjRtz+fJlZs2a9dpPWOrUqcP+/fvJzMwkPT2dqlWr8vHHH2Nvb1/Wob00WcNSyipWrEizZs3Ys2ePqi03N5c9e/a8MesT3iSKouDv709UVBR79+6ldu3aZR3SS8vNzSUrK6usw3iuzp07k5SURGJiompr3rw5AwYMIDEx8Y2YrAA8ePCACxcuULVq1bIO5bnatWtX4DX9c+fOUbNmzTKKqGTCwsKwtramW7duZR1KsTx8+JAKFdS/TWpra5Obm1tGEZWcoaEhVatW5d69e0RHR9OjR4+yDumlyR2WV2DcuHEMHjyY5s2b07JlSxYsWEBmZiZDhw4t69Ce68GDB2o/caakpJCYmIi5uTl2dnZlGFnR/Pz8iIyMZPPmzRgbG5OamgqAqakpBgYGZRxd0QIDA+natSt2dnZkZGQQGRlJTEwM0dHRZR3acxkbGxdYH2RoaIiFhcVrvW7oX//6F15eXtSsWZM///yTadOmoa2tTb9+/co6tOcaO3Ysbdu25ZtvvsHb25s//viD0NBQQkNDyzq0F8rNzSUsLIzBgwejo/NmfOvx8vIiODgYOzs7nJycOHbsGPPnz8fHx6esQ3uh6OhoFEXB0dGR5ORkJkyYQP369V/77zvPVdavKb0tFi5cqNjZ2SkVK1ZUWrZsqcTFxZV1SC+0b98+BSiwDR48uKxDK1Jh8QJKWFhYWYf2XD4+PkrNmjWVihUrKlZWVkrnzp2VnTt3lnVYL+VNeK35448/VqpWrapUrFhRqVatmvLxxx8rycnJZR1WsWzdulVp1KiRoqenp9SvX18JDQ0t65CKJTo6WgGUs2fPlnUoxZaenq58/vnnip2dnaKvr6/Y29srX331lZKVlVXWob3QunXrFHt7e6VixYqKjY2N4ufnp9y/f7+sw/pHtBTlDUjZJ4QQQoi3mqxhEUIIIcRrTyYsQgghhHjtyYRFCCGEEK89mbAIIYQQ4rUnExYhhBBCvPZkwiKEEEKI155MWIQQQgjx2pMJixBCCCFeezJhEUIIIcRrTyYsQgghhHjtyYRFCCGEEK+9/wdm6i/DJQLj4gAAAABJRU5ErkJggg==", @@ -106,51 +115,7 @@ "execution_count": null, "id": "91800bda", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'input': '/home/asger/Repositories/mini_trainer/examples/mnist/train', 'output': '/home/asger/Repositories/mini_trainer/examples/mnist', 'epochs': 5, 'size': 27, 'name': 'mnist_model', 'device': 'cuda:0', 'dtype': 'float16', 'ema': False, 'builder': 'mini_trainer.builders.BaseBuilder', 'model_builder_kwargs': {'model_type': 'efficientnet_b0', 'fine_tune': False, 'hidden': True, 'droprate': 0.1, 'normalized': True}, 'dataloader_builder_kwargs': {'batch_size': 256, 'train_proportion': 0.9, 'resample': False, 'cache': 'CUDA'}, 'optimizer_builder_kwargs': {'optimizer_cls': 'mini_trainer.training.muon.MuonAuxAdamW', 'lr': 0.01, 'weight_decay': 0.01}, 'ema_builder_kwargs': {'epoch_halflife': 1.5, 'update_rate': 4, 'temperature': 1.0, 'distill_start': 2.0}, 'criterion_builder_kwargs': {'weighted': True, 'label_smoothing': 0.1}, 'regularizer_builder_kwargs': {'strength': 0.1}, 'lr_schedule_builder_kwargs': {'warmup_epochs': 1.0}, 'logger_builder_kwargs': {'verbose': True, 'logger_cls': ['mini_trainer.logging.core.MetricLogger']}}\n", - "Building class spec...\n", - "Building dataloaders...\n", - "Building datasets with image size (27, 27)\n", - "/home/asger/Repositories/mini_trainer/mini_trainer/data/io.py:370: UserWarning: CUDA caching is currently in development and may not work properly. Using device: `cuda:0` for cache.\n", - " warnings.warn(\n", - "Dataloaders built successfully. Train batches: 17, Val batches: 2 \n", - "Building model...\n", - "Calling train() function...\n", - "Start training\n", - "train_one_epoch starting for epoch 0.\n", - "acc1= 30.9 | acc5= 92.8 | loss= 1.78 | item/s=927.9 | mem=908.1 \n", - "train_one_epoch starting for epoch 1. \n", - "acc1= 87.5 | acc5= 98.4 | loss= 0.94 | item/s=1899.7 | mem=908.1 \n", - "train_one_epoch starting for epoch 2. \n", - "acc1= 79.0 | acc5=100.0 | loss= 0.90 | item/s=1260.7 | mem=908.1 \n", - "train_one_epoch starting for epoch 3. \n", - "acc1= 94.9 | acc5= 99.8 | loss=0.652 | item/s=1293.6 | mem=908.1 \n", - "train_one_epoch starting for epoch 4. \n", - "acc1= 98.2 | acc5=100.0 | loss=0.599 | item/s=1933.3 | mem=908.1 \n", - "Total time 0:00:50 | Best model found at epoch 5 \n", - "\n", - "\ttrain : 48s\n", - "\teval : 01s\n", - "Final weights saved at: /home/asger/Repositories/mini_trainer/examples/mnist/mnist_model/weights/last.pt\n", - "/home/asger/Repositories/mini_trainer/mini_trainer/modeling/classifier.py:445: UserWarning: Model configuration option hidden overriden by value stored in config: 1280 ==> True\n", - " warnings.warn(f\"Model configuration option {k} overriden by value stored in config: {kwargs[k]} ==> {v}\", UserWarning)\n", - "Running inference: 100%|███████████████████| 314/314 [00:07<00:00, 44.49batch/s]\n", - "METRIC TABLE \n", - " accuracy | precision | recall | f1 | micro_accuracy | micro_precision | micro_recall | micro_f1 | theilU\n", - "----------|-----------|--------|--------|----------------|-----------------|--------------|----------|-------\n", - " 96.19% | 96.24% | 96.19% | 96.19% | 96.19% | 96.24% | 96.19% | 96.19% | 91.32%\n", - " \n", - " coverage | vocabulary_coverage | optimal_confidence_threshold | macro_optimal_confidence_threshold\n", - "----------|---------------------|------------------------------|-----------------------------------\n", - " 100.00% | 100.00% | 77.67% | 77.67% \n", - " \n" - ] - } - ], + "outputs": [], "source": [ "# Takes around 45-60seconds on 2026 NVIDIA DGX Spark\n", "!rm -rf mnist/mnist_model\n", @@ -190,222 +155,7 @@ "execution_count": null, "id": "7e1d8596", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[Launcher] Resolving network topology...\n", - "[Launcher] Establishing ephemeral NFS mount over QSFP...\n", - "[Launcher] Verifying environment synchronization...\n", - "[Launcher] Testing PyTorch import on worker node...\n", - " PyTorch 2.12.0+cu130 loaded on worker.\n", - "[Launcher] Spawning worker on spkc (192.168.100.11)...\n", - "[Launcher] Spawning master locally (192.168.100.10)...\n", - "spark-967b:350437:350437 [0] NCCL INFO ENV/Plugin: Could not find: libnccl-env.so\n", - "spark-967b:350437:350437 [0] NCCL INFO NCCL_SOCKET_IFNAME set by environment to enp1s0f1np1\n", - "spark-967b:350437:350437 [0] NCCL INFO Bootstrap: Using enp1s0f1np1:192.168.100.10<0>\n", - "spark-967b:350437:350437 [0] NCCL INFO cudaDriverVersion 13000\n", - "spark-967b:350437:350437 [0] NCCL INFO NCCL version 2.29.7+cuda13.2\n", - "spark-967b:350437:350437 [0] NCCL INFO NCCL git version stable b81d6a5a3\n", - "spark-967b:350437:350437 [0] NCCL INFO Comm config Blocking set to 1\n", - "spark-967b:350437:350437 [0] NCCL INFO NET/Plugin: Could not find: libnccl-net.so\n", - "spark-967b:350437:350437 [0] NCCL INFO NCCL_SOCKET_IFNAME set by environment to enp1s0f1np1\n", - "spark-967b:350437:350437 [0] NCCL INFO NET/IB : Using [0]rocep1s0f1:1/RoCE [1]roceP2p1s0f1:1/RoCE [RO]; OOB enp1s0f1np1:192.168.100.10<0>\n", - "spark-967b:350437:350437 [0] NCCL INFO Initialized NET plugin IB\n", - "spark-967b:350437:350437 [0] NCCL INFO Assigned NET plugin IB to comm\n", - "spark-967b:350437:350437 [0] NCCL INFO GIN/Plugin: Could not find: libnccl-gin.so\n", - "spark-967b:350437:350437 [0] NCCL INFO Assigned GIN plugin GIN_IB_GDAKI to comm\n", - "spark-967b:350437:350437 [0] NCCL INFO Assigned RMA plugin GIN_IB_PROXY to comm\n", - "spark-967b:350437:350437 [0] NCCL INFO Using network IB\n", - "spark-967b:350437:350437 [0] NCCL INFO [Rank 0] ncclCommInitRankConfig comm 0xc8580412b520 rank 0 nranks 2 cudaDev 0 nvmlDev 0 busId f01000 commId 0x68b73df3f5b019a7 - Init START\n", - "spark-c948:500437:500437 [0] NCCL INFO ENV/Plugin: Could not find: libnccl-env.so\n", - "spark-c948:500437:500437 [0] NCCL INFO cudaDriverVersion 13000\n", - "spark-c948:500437:500437 [0] NCCL INFO NCCL_SOCKET_IFNAME set by environment to enp1s0f1np1\n", - "spark-c948:500437:500437 [0] NCCL INFO Bootstrap: Using enp1s0f1np1:192.168.100.11<0>\n", - "spark-c948:500437:500437 [0] NCCL INFO NCCL version 2.29.7+cuda13.2\n", - "spark-c948:500437:500437 [0] NCCL INFO NCCL git version stable b81d6a5a3\n", - "spark-c948:500437:500437 [0] NCCL INFO Comm config Blocking set to 1\n", - "spark-c948:500437:500437 [0] NCCL INFO NET/Plugin: Could not find: libnccl-net.so\n", - "spark-c948:500437:500437 [0] NCCL INFO NCCL_SOCKET_IFNAME set by environment to enp1s0f1np1\n", - "spark-c948:500437:500437 [0] NCCL INFO NET/IB : Using [0]rocep1s0f1:1/RoCE [1]roceP2p1s0f1:1/RoCE [RO]; OOB enp1s0f1np1:192.168.100.11<0>\n", - "spark-c948:500437:500437 [0] NCCL INFO Initialized NET plugin IB\n", - "spark-c948:500437:500437 [0] NCCL INFO Assigned NET plugin IB to comm\n", - "spark-c948:500437:500437 [0] NCCL INFO GIN/Plugin: Could not find: libnccl-gin.so\n", - "spark-c948:500437:500437 [0] NCCL INFO Assigned GIN plugin GIN_IB_GDAKI to comm\n", - "spark-c948:500437:500437 [0] NCCL INFO Assigned RMA plugin GIN_IB_PROXY to comm\n", - "spark-c948:500437:500437 [0] NCCL INFO Using network IB\n", - "spark-c948:500437:500437 [0] NCCL INFO [Rank 1] ncclCommInitRankConfig comm 0xbdf6d0892bd0 rank 1 nranks 2 cudaDev 0 nvmlDev 0 busId f01000 commId 0x68b73df3f5b019a7 - Init START\n", - "spark-c948:500437:500437 [0] NCCL INFO RAS client listening socket at 127.0.0.1<28028>\n", - "spark-967b:350437:350437 [0] NCCL INFO RAS client listening socket at 127.0.0.1<28028>\n", - "spark-967b:350437:350437 [0] NCCL INFO Bootstrap timings total 3.164832 (create 0.000031, send 0.000088, recv 3.163856, ring 0.000139, delay 0.000000)\n", - "spark-c948:500437:500437 [0] NCCL INFO Bootstrap timings total 0.001581 (create 0.000026, send 0.000306, recv 0.000602, ring 0.000281, delay 0.000000)\n", - "spark-967b:350437:350437 [0] NCCL INFO ncclTopoGetCpuAffinity: Affinity for GPU 0 is empty, ignoring. (GPU affinity = ; CPU affinity = 0-19).\n", - "spark-c948:500437:500437 [0] NCCL INFO ncclTopoGetCpuAffinity: Affinity for GPU 0 is empty, ignoring. (GPU affinity = ; CPU affinity = 0-19).\n", - "spark-967b:350437:350437 [0] NCCL INFO comm 0xc8580412b520 rank 0 nRanks 2 nNodes 2 localRanks 1 localRank 0 MNNVL 0\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 00/16 : 0 1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 01/16 : 0 1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 02/16 : 0 1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 03/16 : 0 1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 04/16 : 0 1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 05/16 : 0 1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 06/16 : 0 1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 07/16 : 0 1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 08/16 : 0 1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 09/16 : 0 1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 10/16 : 0 1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 11/16 : 0 1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 12/16 : 0 1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 13/16 : 0 1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 14/16 : 0 1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 15/16 : 0 1\n", - "spark-967b:350437:350437 [0] NCCL INFO Trees [0] 1/-1/-1->0->-1 [1] 1/-1/-1->0->-1 [2] 1/-1/-1->0->-1 [3] 1/-1/-1->0->-1 [4] 1/-1/-1->0->-1 [5] 1/-1/-1->0->-1 [6] 1/-1/-1->0->-1 [7] 1/-1/-1->0->-1 [8] -1/-1/-1->0->1 [9] -1/-1/-1->0->1 [10] -1/-1/-1->0->1 [11] -1/-1/-1->0->1 [12] -1/-1/-1->0->1 [13] -1/-1/-1->0->1 [14] -1/-1/-1->0->1 [15] -1/-1/-1->0->1\n", - "spark-967b:350437:350437 [0] NCCL INFO P2P Chunksize set to 262144\n", - "spark-c948:500437:500437 [0] NCCL INFO comm 0xbdf6d0892bd0 rank 1 nRanks 2 nNodes 2 localRanks 1 localRank 0 MNNVL 0\n", - "spark-967b:350437:350437 [0] NCCL INFO PROFILER/Plugin: Could not find: libnccl-profiler.so\n", - "spark-967b:350437:350437 [0] NCCL INFO Check P2P Type isAllDirectP2p 1 directMode 0 isAllCudaP2p 1\n", - "spark-c948:500437:500437 [0] NCCL INFO Trees [0] -1/-1/-1->1->0 [1] -1/-1/-1->1->0 [2] -1/-1/-1->1->0 [3] -1/-1/-1->1->0 [4] -1/-1/-1->1->0 [5] -1/-1/-1->1->0 [6] -1/-1/-1->1->0 [7] -1/-1/-1->1->0 [8] 0/-1/-1->1->-1 [9] 0/-1/-1->1->-1 [10] 0/-1/-1->1->-1 [11] 0/-1/-1->1->-1 [12] 0/-1/-1->1->-1 [13] 0/-1/-1->1->-1 [14] 0/-1/-1->1->-1 [15] 0/-1/-1->1->-1\n", - "spark-c948:500437:500437 [0] NCCL INFO P2P Chunksize set to 262144\n", - "spark-c948:500437:500437 [0] NCCL INFO PROFILER/Plugin: Could not find: libnccl-profiler.so\n", - "spark-c948:500437:500437 [0] NCCL INFO Check P2P Type isAllDirectP2p 1 directMode 0 isAllCudaP2p 1\n", - "spark-c948:500437:500484 [0] NCCL INFO [Proxy Service] Device 0 CPU core 9\n", - "spark-967b:350437:350535 [0] NCCL INFO [Proxy Service UDS] Device 0 CPU core 9\n", - "spark-967b:350437:350534 [0] NCCL INFO [Proxy Service] Device 0 CPU core 0\n", - "spark-c948:500437:500485 [0] NCCL INFO [Proxy Service UDS] Device 0 CPU core 10\n", - "spark-967b:350437:350437 [0] NCCL INFO TUNER/Plugin: Could not find: libnccl-tuner.so\n", - "spark-967b:350437:350437 [0] NCCL INFO threadThresholds 8/8/64 | 16/8/64 | 512 | 512\n", - "spark-967b:350437:350437 [0] NCCL INFO 16 coll channels, 16 collnet channels, 0 nvls channels, 16 p2p channels, 2 p2p channels per peer\n", - "spark-967b:350437:350437 [0] NCCL INFO Symmetric VA size=120GB\n", - "spark-967b:350437:350437 [0] NCCL INFO Symmetric memory is not supported. cuMemEnable 1, globalGinSupport 0, globalNicFused 0 cuMemGdrSupport 0\n", - "spark-967b:350437:350437 [0] NCCL INFO CC Off, workFifoBytes 1048576\n", - "spark-967b:350437:350437 [0] NCCL INFO ncclCommInitRankConfig comm 0xc8580412b520 rank 0 nranks 2 cudaDev 0 nvmlDev 0 busId f01000 commId 0x68b73df3f5b019a7 - Init COMPLETE\n", - "spark-967b:350437:350437 [0] NCCL INFO Init timings - ncclCommInitRankConfig: rank 0 nranks 2 total 3.33 (kernels 0.14, alloc 0.01, bootstrap 3.16, allgathers 0.00, topo 0.00, graphs 0.00, connections 0.01, rest 0.00)\n", - "spark-c948:500437:500437 [0] NCCL INFO TUNER/Plugin: Could not find: libnccl-tuner.so\n", - "spark-c948:500437:500437 [0] NCCL INFO threadThresholds 8/8/64 | 16/8/64 | 512 | 512\n", - "spark-c948:500437:500437 [0] NCCL INFO 16 coll channels, 16 collnet channels, 0 nvls channels, 16 p2p channels, 2 p2p channels per peer\n", - "spark-c948:500437:500437 [0] NCCL INFO Symmetric VA size=120GB\n", - "spark-c948:500437:500437 [0] NCCL INFO Symmetric memory is not supported. cuMemEnable 1, globalGinSupport 0, globalNicFused 0 cuMemGdrSupport 0\n", - "spark-c948:500437:500437 [0] NCCL INFO ncclCommInitRankConfig comm 0xbdf6d0892bd0 rank 1 nranks 2 cudaDev 0 nvmlDev 0 busId f01000 commId 0x68b73df3f5b019a7 - Init COMPLETE\n", - "spark-c948:500437:500437 [0] NCCL INFO Init timings - ncclCommInitRankConfig: rank 1 nranks 2 total 0.20 (kernels 0.17, alloc 0.02, bootstrap 0.00, allgathers 0.00, topo 0.00, graphs 0.00, connections 0.01, rest 0.00)\n", - "spark-967b:350437:350536 [0] NCCL INFO [Proxy Progress] Device 0 CPU core 4\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 00/0 : 1[0] -> 0[0] [receive] via NET/IB/0\n", - "spark-c948:500437:500486 [0] NCCL INFO [Proxy Progress] Device 0 CPU core 2\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 00/0 : 0[0] -> 1[0] [receive] via NET/IB/0\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 01/0 : 1[0] -> 0[0] [receive] via NET/IB/1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 02/0 : 1[0] -> 0[0] [receive] via NET/IB/0\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 03/0 : 1[0] -> 0[0] [receive] via NET/IB/1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 04/0 : 1[0] -> 0[0] [receive] via NET/IB/0\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 05/0 : 1[0] -> 0[0] [receive] via NET/IB/1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 06/0 : 1[0] -> 0[0] [receive] via NET/IB/0\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 07/0 : 1[0] -> 0[0] [receive] via NET/IB/1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 08/0 : 1[0] -> 0[0] [receive] via NET/IB/0\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 09/0 : 1[0] -> 0[0] [receive] via NET/IB/1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 10/0 : 1[0] -> 0[0] [receive] via NET/IB/0\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 11/0 : 1[0] -> 0[0] [receive] via NET/IB/1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 12/0 : 1[0] -> 0[0] [receive] via NET/IB/0\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 13/0 : 1[0] -> 0[0] [receive] via NET/IB/1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 14/0 : 1[0] -> 0[0] [receive] via NET/IB/0\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 15/0 : 1[0] -> 0[0] [receive] via NET/IB/1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 00/0 : 0[0] -> 1[0] [send] via NET/IB/0\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 01/0 : 0[0] -> 1[0] [send] via NET/IB/1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 02/0 : 0[0] -> 1[0] [send] via NET/IB/0\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 03/0 : 0[0] -> 1[0] [send] via NET/IB/1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 04/0 : 0[0] -> 1[0] [send] via NET/IB/0\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 05/0 : 0[0] -> 1[0] [send] via NET/IB/1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 06/0 : 0[0] -> 1[0] [send] via NET/IB/0\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 07/0 : 0[0] -> 1[0] [send] via NET/IB/1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 08/0 : 0[0] -> 1[0] [send] via NET/IB/0\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 09/0 : 0[0] -> 1[0] [send] via NET/IB/1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 10/0 : 0[0] -> 1[0] [send] via NET/IB/0\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 11/0 : 0[0] -> 1[0] [send] via NET/IB/1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 12/0 : 0[0] -> 1[0] [send] via NET/IB/0\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 13/0 : 0[0] -> 1[0] [send] via NET/IB/1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 14/0 : 0[0] -> 1[0] [send] via NET/IB/0\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 15/0 : 0[0] -> 1[0] [send] via NET/IB/1\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 01/0 : 0[0] -> 1[0] [receive] via NET/IB/1\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 02/0 : 0[0] -> 1[0] [receive] via NET/IB/0\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 03/0 : 0[0] -> 1[0] [receive] via NET/IB/1\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 04/0 : 0[0] -> 1[0] [receive] via NET/IB/0\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 05/0 : 0[0] -> 1[0] [receive] via NET/IB/1\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 06/0 : 0[0] -> 1[0] [receive] via NET/IB/0\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 07/0 : 0[0] -> 1[0] [receive] via NET/IB/1\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 08/0 : 0[0] -> 1[0] [receive] via NET/IB/0\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 09/0 : 0[0] -> 1[0] [receive] via NET/IB/1\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 10/0 : 0[0] -> 1[0] [receive] via NET/IB/0\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 11/0 : 0[0] -> 1[0] [receive] via NET/IB/1\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 12/0 : 0[0] -> 1[0] [receive] via NET/IB/0\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 13/0 : 0[0] -> 1[0] [receive] via NET/IB/1\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 14/0 : 0[0] -> 1[0] [receive] via NET/IB/0\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 15/0 : 0[0] -> 1[0] [receive] via NET/IB/1\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 00/0 : 1[0] -> 0[0] [send] via NET/IB/0\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 01/0 : 1[0] -> 0[0] [send] via NET/IB/1\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 02/0 : 1[0] -> 0[0] [send] via NET/IB/0\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 03/0 : 1[0] -> 0[0] [send] via NET/IB/1\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 04/0 : 1[0] -> 0[0] [send] via NET/IB/0\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 05/0 : 1[0] -> 0[0] [send] via NET/IB/1\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 06/0 : 1[0] -> 0[0] [send] via NET/IB/0\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 07/0 : 1[0] -> 0[0] [send] via NET/IB/1\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 08/0 : 1[0] -> 0[0] [send] via NET/IB/0\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 09/0 : 1[0] -> 0[0] [send] via NET/IB/1\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 10/0 : 1[0] -> 0[0] [send] via NET/IB/0\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 11/0 : 1[0] -> 0[0] [send] via NET/IB/1\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 12/0 : 1[0] -> 0[0] [send] via NET/IB/0\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 13/0 : 1[0] -> 0[0] [send] via NET/IB/1\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 14/0 : 1[0] -> 0[0] [send] via NET/IB/0\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 15/0 : 1[0] -> 0[0] [send] via NET/IB/1\n", - "spark-967b:350437:350437 [0] NCCL INFO Connected all rings, use ring PXN 0 GDR 0\n", - "spark-c948:500437:500437 [0] NCCL INFO Connected all rings, use ring PXN 0 GDR 0\n", - "{'input': '/home/asger/Repositories/mini_trainer/examples/mnist/train', 'output': '/home/asger/Repositories/mini_trainer/examples/mnist', 'epochs': 5, 'size': 27, 'name': 'mnist_model', 'device': 'cuda:0', 'dtype': 'float16', 'ema': False, 'builder': 'mini_trainer.builders.BaseBuilder', 'model_builder_kwargs': {'model_type': 'efficientnet_b0', 'fine_tune': False, 'hidden': True, 'droprate': 0.1, 'normalized': True}, 'dataloader_builder_kwargs': {'batch_size': 256, 'train_proportion': 0.9, 'resample': False, 'cache': 'CUDA'}, 'optimizer_builder_kwargs': {'optimizer_cls': 'mini_trainer.training.muon.MuonAuxAdamW', 'lr': 0.01, 'weight_decay': 0.01}, 'ema_builder_kwargs': {'epoch_halflife': 1.5, 'update_rate': 4, 'temperature': 1.0, 'distill_start': 2.0}, 'criterion_builder_kwargs': {'weighted': True, 'label_smoothing': 0.1}, 'regularizer_builder_kwargs': {'strength': 0.1}, 'lr_schedule_builder_kwargs': {'warmup_epochs': 1.0}, 'logger_builder_kwargs': {'verbose': True, 'logger_cls': ['mini_trainer.logging.core.MetricLogger']}, 'ddp_info': {'rank': 0, 'world_size': 2, 'local_rank': 0}}\n", - "[Rank 0] Building class spec...\n", - "[Rank 0] Building dataloaders...\n", - "[Rank 0] Building datasets with image size (27, 27)\n", - "/home/asger/Repositories/mini_trainer/mini_trainer/data/io.py:370: UserWarning: CUDA caching is currently in development and may not work properly. Using device: `cuda:0` for cache.\n", - " warnings.warn(\n", - "/home/asger/Repositories/mini_trainer/mini_trainer/data/io.py:370: UserWarning: CUDA caching is currently in development and may not work properly. Using device: `cuda:0` for cache.\n", - " warnings.warn(\n", - "[Rank 0] Dataloaders built successfully. Train batches: 8, Val batches: 1 \n", - "[Rank 0] Building model...\n", - "[Rank 0] Calling train() function... \n", - "[Rank 0] Start training\n", - "[Rank 0] Model DDP wrap starting...\n", - "[Rank 0] DDP wrap completed.\n", - "[Rank 0] train_one_epoch starting for epoch 0.\n", - "[Rank 0] acc1= 24.0 | acc5= 74.0 | loss= 2.31 | item/s=184.0 | mem=849.0 \n", - " 0%| | 0/8 [00:00 True\n", - " warnings.warn(f\"Model configuration option {k} overriden by value stored in config: {kwargs[k]} ==> {v}\", UserWarning)\n", - "Running inference: 100%|███████████████████| 314/314 [00:06<00:00, 50.43batch/s]\n", - "METRIC TABLE \n", - " accuracy | precision | recall | f1 | micro_accuracy | micro_precision | micro_recall | micro_f1 | theilU\n", - "----------|-----------|--------|--------|----------------|-----------------|--------------|----------|-------\n", - " 90.32% | 90.53% | 90.32% | 90.37% | 90.32% | 90.53% | 90.32% | 90.37% | 83.55%\n", - " \n", - " coverage | vocabulary_coverage | optimal_confidence_threshold | macro_optimal_confidence_threshold\n", - "----------|---------------------|------------------------------|-----------------------------------\n", - " 100.00% | 100.00% | 71.87% | 71.87% \n", - " \n" - ] - } - ], + "outputs": [], "source": [ "# Takes around 20-30seconds on 2026 NVIDIA DGX Spark\n", "# OBS: Replace `-w spkc` with the SSH host alias used for MPI/NCCL with the second DGX Spark/Node\n", @@ -434,35 +184,48 @@ "id": "669af305", "metadata": {}, "source": [ - "# Manual model loading" + "# Batched Python inference\n", + "\n", + "After training, restore the checkpoint and use the same loader/preprocessing path\n", + "as the CLI. This small demonstration uses CPU when CUDA is unavailable.\n" ] }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "id": "3b995e04", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/asger/Repositories/mini_trainer/mini_trainer/classifier.py:486: UserWarning: Model configuration option hidden overriden by value stored in config: 1280 ==> True\n", - " warnings.warn(f\"Model configuration option {k} overriden by value stored in config: {kwargs[k]} ==> {v}\", UserWarning)\n" - ] - } - ], + "outputs": [], "source": [ "import torch\n", "\n", "from mini_trainer.builders import BaseBuilder\n", + "from mini_trainer.modeling import classification_module, predict\n", "\n", - "device, dtype = torch.device(\"cuda:0\"), torch.float32\n", - "\n", - "# mini_trainer.classifier.Classifier.build can equally be used\n", - "model, mproc = BaseBuilder.build_model(weights=\"mnist/mnist_model/weights/last.pt\", device=device, dtype=dtype)\n", + "device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")\n", + "model, preprocess = BaseBuilder.build_model(\n", + " weights=\"mnist/mnist_model/weights/last.pt\", device=device, dtype=torch.float32\n", + ")\n", "model.eval()\n", - "pass" + "\n", + "# Use actual files; filenames need not encode their class or be consecutive.\n", + "images = [\n", + " str(path)\n", + " for folder in sorted(Path(\"mnist/test\").iterdir()) if folder.is_dir()\n", + " for path in [p for p in sorted(folder.iterdir())\n", + " if p.suffix.lower() in {\".png\", \".jpg\", \".jpeg\"}][:5]\n", + "]\n", + "images = images[:50]\n", + "if not images:\n", + " raise RuntimeError(\"Construct the test dataset before running inference.\")\n", + "loader = BaseBuilder.build_inference_dataloader(\n", + " images=images, batch_size=16, num_workers=0, device=device, dtype=torch.float32,\n", + " resize_size=classification_module(model).metadata[\"resize_size\"],\n", + ")\n", + "predictions = []\n", + "with torch.inference_mode():\n", + " for batch in loader:\n", + " predictions.extend(predict(model, preprocess(batch).to(device)))\n" ] }, { @@ -470,8 +233,10 @@ "id": "cf590475", "metadata": {}, "source": [ - "## Manual inference with `mini_trainer` in Python\n", - "*The manual inference for this demo is not implemented in the most optimal way for sake of simplicity*" + "## Display predictions\n", + "\n", + "Ground-truth digit labels come from the test folders. Saved figures are historical\n", + "illustrations; rerun this cell for the predictions of your loaded checkpoint.\n" ] }, { @@ -480,21 +245,6 @@ "id": "709f81d7", "metadata": {}, "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "On-the-fly data loading enabled (no cache).\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/asger/Repositories/mini_trainer/mini_trainer/classifier.py:545: UserWarning: topk=3, all values except topk=1 are experimental and will result in unexpected behaviour.\n", - " warnings.warn(f\"{topk=}, all values except topk=1 are experimental and will result in unexpected behaviour.\", UserWarning)\n" - ] - }, { "data": { "image/png": "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99572T6HhoZUMpm87Ge//Mu/rD72sY8pz/PUli1bVLFYVEEQqPvvv1+dPXt2RdtGo6E2bNig8vn8tZ76qnnwwQfV6OioGhwcVE888cRV216rrJRa3TVQSqn/+T//p3rPe96zQm5rSVaruf5KKfUzP/Mz6q//+q+XXv/iL/6iev/737/0/cnJyaXPrvUafPOb31R79+697Gdvfetb1YMPPqjK5bJav369UkqparWq7rnnHpXL5Va0nZ6eVps3b1ae513ljH84lv/m5z73ObVnz54rtl0+rubn51U8Hl+Sz3e+8x3V3t7+rPpdzs6dO9Xf//3fK6XW1rg6z9DQkHrRi16k7rrrLvX5z3/+iu2Wj6uFhQWVyWTU008/rZRS6tvf/rbauXPnUtt77733qn2dp1QqqY6ODnXs2DGllFLve9/71K/8yq8opdaerK5lnjrPauara+3385//vLrjjjtUs9lUSin1oQ99SL397W9XSq09WV1tzrmY1cjqWvu9kear5XzkIx9RP/qjP3rFz1dzD/7hH/6hevOb36wajYZS6sqyOnnypDp06JBSSinP89Q73vEO9Vu/9VtKqdaz5oMf/KBSqvVcPXz4sFJKqXe+853q4YcfvqSv/fv3q5MnT67mlK+ZIAhUOp1eOtahoSHlOI4qFouXbb8aWf3ET/zE0jl///vfV729vUv32XK+9rWvqe3bty/95oc+9CH1sz/7s0qptSWrZzrfi1mNrP7hH/5Bua6rlFLqi1/8ohocHLxsn1NTU+o73/nO0utf+ZVfUf/xP/7Hpe/9xE/8hFKqJfsvfvGLSiml/st/+S/qU5/61CV9vfGNb1T/8i//ci2nftNxy1mkZmZmePTRR5d2yd761rcyOjp6WevByMgIR44c4Z577gHg6aefZs+ePXR3dwPw2te+lq985SvMz88TCoV47WtfixACgLvuuovh4eFVH59lWVSrVVzXJQgCpJT82Z/9Gffffz/r169f0da2be6///7ndTfuJS95CX19fc/YbjWyWs01ADhy5Ahf+MIX+M//+T+veH8tyWo1179er/OpT32Kt771rQBUKhX+8i//kg9/+MNL3+/q6lpqf63X4Gqcl1W9XscwDAB++7d/m1/4hV9YYeUD6OjoYOPGjXzta1/7oX7zaiz/zUKhsHTeF3PxuAqCAKUUpVIJgHw+v0I219rvch555BFmZmaWrAJraVxB65zf85738NGPfhTHca7Y7uJxdebMGbLZLDt37gTgnnvuYWRkhMcff3xVv/+Vr3yF2267jW3btgHwsz/7s/zt3/4tsPZkda2sZr5aDUIIGo0G9XodpRTFYnFpfK4lWT3TnLOc1chqNf1ejbU2Xy3nL//yL/nJn/zJy3622nvwIx/5CP/9v/93bNsGriyrzZs3s2fPHgAMw+DgwYNLz5fzsgqCgEajgW3b/PM//zPpdJq77rrrkr7e8Y538H/+z/959gJ4BoQQSxagYrFINpu97Ly1Wll9+tOf5qd/+qcBOHjwID09PTz44IOX9Hvo0CHuvvtu4vE40BqfH//4x4G1JavVzM+rldUb3vAGTNMEWmuR8fHxJYvScjo7O7n77ruXXt95552XjCuAarWKbds89dRTHD9+nHe84x2X9PXjP/7j/Pmf//mzFceNzfXW5F5oHn30UbVly5YV7x08ePCymvRf//Vfq7e+9a1Lr0+ePKmy2aw6ceKEUkqpP/qjP1KAeuyxxy757jvf+U718z//85c9hqGhIWWaprr99tvVbbfdpj74wQ8u7aZNTEyo+++/X+3bt0/92Z/9mRofH1f33XffFXfbPvaxj604xueLZ9qRXY2sVnMNms2metGLXqSOHj16iSVvrcpKqatf/29/+9vqwIEDS68PHTqkBgcH1Qc+8AF14MABdffdd6tvfOMbl3zvWixSsVhM3Xbbber2229Xf/zHf7z02dGjR9U999yj9u/frz7/+c+rJ554Qr3tbW+7Yl8f/OAH1S//8i9fw5k+e/79v//3qq+vT/X19amnnnrqsm0uHldKKfWJT3xCxWIxNTAwoNrb25d2P1fT73L+03/6T+qXfumXll6vtXH1kY98RP3mb/6mUurqVqSLx1U+n1eZTEZ997vfVUq1dikB9dnPfnapr61bt6pdu3apd7zjHerMmTOX7ff3fu/31Hvf+96l15VKRUkpleu6a05Wg4ODavfu3WrXrl3q3e9+t5qZmblsu9XO7dfar+/76hd+4RdUJBJRnZ2dav/+/apUKiml1ta4utY5R6nVyWo1/d5o85VSSn33u99VnZ2dS7v9F7Oae7BQKCjTNNXv/u7vqjvuuEPdcccd6u/+7u+e8RjK5bLaunWr+tznPrf0+q1vfavas2eP+s3f/E1VLpfV3Xff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zc2xb9++hX9btmxB13XS6fSKxy+X1f33378gjzvuuINnn3124djVjO2PfexjDAwMsGnTJn75l395QQZPPfUU+/btY8eOHUvuw8MPP8x73vOeJef4nd/5HT75yU++ZFmshn/8x39ECMHnP//5ix6zmn715JNP8prXvIa9e/eyb98+Hn744RXPWSqVuOWWW9i7dy979+7lda97HcPDw8Da6lcAfX19bN26daFvffrTn77osauZr+a53D0YGhriwIEDC/J+y1veQiaTWfhsrcxXALVajV/7tV9jYGCA3bt38wu/8AsXPfZqyArg3LlzvOENb2Dr1q3s2LGDj370o8DaktWPOl99/etf58Ybb2TPnj0cPHiQQ4cOLRx79913s3HjxoVz/8//+T8v2o4Pf/jD7Nq1ix07dvAzP/MzZLNZYO2NwUvNOctZjaw++MEPsnXrVqSUl+xT3/jGN5bcr87OTvbv3w+sPVld6nqXs1hWl+uTSin+4A/+gC1btrB7927uueeeFc+5nuarNY16FXLPPfeof/zHf1RKKfWZz3xG3XjjjRc99vWvf7363ve+p5RS6tixY6qtrU2Nj48rpZT6xCc+oR544IGFYx955BE1MjKient71bPPPnvRc/7d3/2duueee1StVlOe56l3vetd6kMf+pBSSqnf/u3fVh//+MeV4zhqy5YtKp/PK8/z1P3336/OnDmz5Dy1Wk319/erbDb7UsRwRVzpNSm1Olld6T34t3/7N3XzzTerer2ulFLqj/7oj9Rb3vIWpdTaklWlUlFf+cpXlOd5SimlPvrRj6q77rrrose/973vVf/0T/+klFLK8zwVj8fVoUOHlFJKDQ0NKcuyVD6fV0oplclkFr73zDPPqHg8rlzXveCczz77rOrp6VGFQkEp1ZD5TTfdtNCeP/zDP1RKNWR/+PBhpZRSv/ALv6Aee+yxC861f/9+dfLkydWI4CXz4Q9/WP3kT/7kRT9fLCullsrjX//1X9WePXsWXl9pvzpz5ozq6OhQExMTyvM89YY3vEH95V/+pVJKqQcffFA98sgjqlgsqo0bNyqllCqXy+qOO+5Y8ttKKTU1NaUGBgaU4zirueRVMzQ0pG699VZ18OBB9W//9m8XPe5K+5Xneaqrq0s99NBDSimlTpw4oTZs2KDK5fIF53Rdd6EvKqXUn//5n6s3vvGNSqm116+uZJ6aZzXzlVJXdg+q1eoSGf76r/+6+vVf/3Wl1Nqar5RS6jd/8zfVr/3ary3MWRMTExc99mrIyvM8tX//fvUv//IvC+9NTk4qpdaerBazmvkqnU6rRCKhXnjhBaWUUt/73vfUzp07F4696667Ljme5/nmN7+ptm/fvjAO/+iP/kj9yq/8ilJqbY3Byz3LlrMaWT3++OPq9OnTVyyzeX7iJ35C/emf/qlSam3J6nLXu5zlz8HFLO+Tf/EXf6F+5md+RtVqNaXUxcf2epqv1jKvOovU9PQ0Tz311MLu24MPPsjIyMiK1oNz585x5MgR7rjjDgBeeOEF9uzZQ0dHBwAPPPAAX/va15ibmwPgzjvvpLu7+7JtOHToED/2Yz+GaZoIIXj961/PJz7xCQAMw6BcLmPbNp7nIaXkb//2b7n//vvZuHHjkvOYpsn9999/VXfEr/SaViOr1dwDIQS1Wo1qtYpSinw+v9CetSQrn8/HAw88gBACgIMHDy7s2i+nWq3y6U9/mgcffHDJdc7vMObzeZLJJJZlARCLxRaOy+VyF22DEALbtimVSgBks9kLZOV5HrVaDdM0+frXv048HufgwYMXnOutb30r//t//+8rvv4fhY997GO8853vXPGzlWS1XB7zMl9Nv/rsZz/LG9/4Rtrb2xFC8J/+03/iU5/6FPCirKrVKpqmAfAHf/AH/MZv/MaS3wZobW1l06ZNfPOb33zJ1385PM/jXe96Fx/96EcX+sRKrKZfzc3NMTMzw4/92I8BsGXLFmKxGF/72tcuOK+UknA4DLAwBudlvpb71aVY7dx+pffAsiz8fj8ArutSKpUukNVamK9KpRIf+9jH+MAHPrDQvvb29hWPvVqy+va3v41lWbzlLW9ZeK+trQ1YW7Jazmrmq9OnT5NMJtm5cycAd9xxB+fOneOZZ55Z1W8eOnSI22+/fWEcPvDAAxesGdbKGLzUs2wxq5XVzTffTH9//6raMj4+zre//W1+8Rd/EVhbslpN31hpbl/M8j754Q9/mD/+4z/GNE3g4mN7vcxXa55rrcm90jz11FNqy5YtS9676aab1Le//e0Ljv2nf/on9eCDDy68PnnypEomk+rEiRNKKaU+8pGPKEA9/fTTS753uV3Rf/iHf1C33HKLyuVyql6vq5/92Z9V4XBYKaXU+Pi4uv/++9W+ffvU3/7t36qxsTF17733XnTH++Mf//iSNl4tLndNq5HVau6B67rqN37jN1QgEFBtbW1q//79CxaXtSorpRo7XPM7O8v53ve+pw4cOLDkvYceekglk0nV09OjwuHwgqVgnve9732qv79fxeNx9fDDD1/0dz/0oQ8pv9+vurq6VH9/vxodHVVKKVUsFtWDDz6o9uzZo97//verYrGobr/99ovuFD7yyCMXtPFq8Oijj6q2tjZl2/aKn68kK6WU+sVf/EXV3d2turu71fPPP6+UWt3Y/rVf+zX1wQ9+cOH1kSNH1IYNG5RSSh09elTdcccdav/+/erf/u3f1LPPPqve/OY3X/Qa/vAP/1D99m//9uUv9iXy4Q9/WL3//e9XSl16B3u1/aq3t1d9+tOfVkop9cQTTyjTNNWf/dmfXbQd9913n2ptbVU7d+5cs/2qt7dX7d69W+3atUu94x3vUNPT0yset9q5/UrvgVKN3dm9e/eqWCym7rzzzoVd2rU0Xx06dEj19vaq973vferAgQPq9ttvV9/61rdWPPZqyeojH/mIeuMb36h+9md/Vu3bt0/99E//tDp9+rRSam3JajGrna+y2axKJBLq0UcfVUop9YUvfEEB6nOf+5xSqiGfrVu3ql27dqm3vvWtC9e/nIcfflht3LhxwYL+W7/1WwpQc3Nza24MXu5ZNs9qZTXPaixSH/jAB9Sb3vSmhddrSVZXer1KXfw5qNSFfTKXyyld19WHPvQhdfPNN6ubb75Z/fM///NF27Ee5qu1TlORUhdfbH3wgx9cMJ/P85nPfEbdcsst6sCBA+r973+/isViC2bseS6ndHiep37/939f7du3T916663q937v91Q8Hl/x2De/+c3q2WefVQ899JB605vepN72trep4eHhhc+/8Y1vqFtuueVyl/0jc7lrWo2sVnMPHn/8cXXfffepTCajXNdVv/u7v6t+/ud/fsU2rBVZfeADH1AHDx5UpVJpxc8/+clPLnGFsW1b3XXXXeqRRx5RSjUWte3t7WpmZuaC7z700EPqxhtvXDDZL+bMmTPq4MGDamxsTCnVcGN4zWtes2IbfvM3f1N96UtfUs8884x685vfrN785jer5557buHzEydOqLa2tiu/6JfIO97xDvW7v/u7F/18uayW83/+z/9Rr3/965VSL58itRjHcdS9996rxsbG1Cc/+Un1pje9Sb397W9X6XR64Zj/9b/+l/rZn/3Zi1/kj8Dhw4fVwYMHF1xbL7WIWG2/eu6559SP//iPq3379qmf//mfV/fee6/6yEc+csn2uK6r/vt//+/qve9974qfX+t+dfbsWaWUUvV6Xf2X//JfFvrGclYzX63mHiymVqupd7/73epP/uRPVvz8Ws5XTz/9tALUxz/+caVUw2U4mUwuuNYt5mrJ6s/+7M9UKBRacG36m7/5m4suFtfK3P5S5quHH35Y3XnnnWr//v3qV3/1V9WOHTvUF77wBaWUUufOnVNKNdYEH/3oR9X27dsveu6/+qu/UgcOHFA333yz+h//438oQOVyuQuOu5ZjcDXPstXKap4rHX+e56lNmzapr3zlKxc95lrPV1dyvUpd+jm4vE/Ozc0pYMGFcWhoSHV0dCy5rpVYy/PVWudVp0hNTU2pcDi8oL17nqfa2trUqVOnLjj2L/7iL9Q73vGOi55rYmJCWZZ1wYJ5NX76Sin1qU99St1+++0XvP/Zz35Wve9971NKKbVt2zaVz+fVww8/rH7pl35p4ZgvfOEL6u67777i33qpXO6aViOr1dyDX/3VX1Uf+MAHFl6/8MILqrOz84Lj1oqsPvzhD6sDBw5cEEuzmM9//vPq3nvvXXj95JNPqoGBgSXH3Hjjjeqb3/zmit/funWreuqpp1b87V/+5V9eeF0sFhVwgdL1+OOPq5/7uZ9TSil1++23q6GhIXXmzBl15513Lhxz6NAh1dfXd/ELfRkoFAoqFAqpY8eOXfSY5bJaCZ/Pp2ZnZ1fVrz70oQ+p97znPQuvv/KVr6yodP7pn/6p+pu/+RtVKpXU9u3blW3b6h/+4R8WdtyVauysv/3tb7/s9b4U/vqv/1q1t7er3t5e1dvbqyzLUi0tLeqv//qvLzj2R+1X27Ztu6hVYjETExMqFApd8P5a6VfzjI+Pr9hOpVY3X63mHiznscceU7t27brg/Ws9X83MzCgp5ZLd5RtvvHFF68HVktVnPvMZdccddyy8LhaLSgixoITNc61lNc/LMV9Vq1UVi8VWnJOUUsqyLDU7O3vZtjz22GOqu7v7gvev9RhczZzzUmV1pYrUd77zHdXV1XVRC8q1ltVyLtU3Liari/XJUCi0xLr55je/Wf393//9ZduwVuertc6rLkaqtbWV/fv383//7/8F4HOf+xzd3d1s3rz5gmP37NnDiRMnlrw3MTEBNPxJ3/e+9/Grv/qrBAKBVbWhWq0uZEaZnZ3lj//4j/kv/+W/LDkmm83ykY98hN///d8HoFwuI6VESkmxWFw47tixY+zdu3dVv381WI2sVnMP+vv7efjhhxeyGn75y19m165dS45ZK7L68z//cz71qU/x0EMPXRBLs5jlstqwYQMTExMcO3YMgMHBQU6fPs3WrVuxbXtJjM8TTzzB9PT0ir7i/f39PProowvX/OUvf5ktW7Ys+EkD2LbN+973Pv78z/8cYMEn+lr0q09/+tPs3buXbdu2XfSY5bLKZrOMj48vvP785z9PMpkkkUisql89+OCDfPGLX2RychKlFH/7t3/Lf/gP/2HJMUNDQzz00EO85z3vwbZtHMd5xWX13ve+l4mJCYaHhxkeHubgwYP83d/9He9973svOHY1/QpeHJ8Af//3f08wGOTee++94LyTk5ML8xU07tuePXuWHLMW+lWpVFqIzQD41Kc+xQ033LDisauZr1ZzD86ePUu5XAYasUKf+cxnLpDVWpivUqkU9913H9/4xjeARl8fGhpi+/btFxx7tWT1+te/ntHRUcbGxoBGtrft27djGMbCMWtBVvO8lPkKlo6zP/qjP+Lee+9l8+bNOI7D1NTUwmef+9znaGtrI5lMrnju+fOUy2Xe//73X7BmWAtj8HJzzmJWI6uXwsc+9jHe/va3L8S5LmYtyAqu/HpXkhVcvE++7W1v4+tf/zoA6XSaJ5544oJ5CNbPfLXmudaa3LXg+PHj6uDBg2pgYEAdOHBgIcZiOfV6XfX29qq5ubmF9173utep7du3q/7+fvWf//N/VtVqdeGzd7/73aqrq0tpmqZaW1vVpk2bFj575zvfuWCynZycVNu2bVM7duxQ27ZtU3/zN39zwW+/+93vXuKS9Hd/93dq27Ztas+ePerJJ59ceP/uu+9W3//+91+6MC7Dpa5pMauV1aXuwWJZVatV9a53vUtt27ZN7d69W732ta+9wI98LchqZGREAaq/v1/t3btX7d27V918880XPX7//v0LLi1KNUz3u3btUnv27FG7du1S/+///T+llFKlUknddtttaufOnWrv3r3qtttuW3Ktv/d7v7fQfzzPU//1v/5XtXXrVrVnzx516623XmC5+sAHPqD+4R/+YeH1l770JbVjxw61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aNHisrQMqRYtWrRo0aJFixYtWrRYJS1DqkWLFi1atGjRokWLFi1WScuQatGiRYsWLVq0aNGiRYtV0jKkWrRo0aJFixYtWrRo0WKVtAypFi1atGjRokWLFi1atFglLUOqRYsWLVq0aNGiRYsWLVZJy5Bq0aJFixYtWrRo0aJFi1XSMqRatGjRokWLFi1atGjRYpW0DKkWLVq0aNGiRYsWLVq0WCUtQ6pFixYtWrRo0aJFixYtVknLkGrRokWLFi1atGjRokWLVdIypFq0aNGiRYsWLVq0aNFilVyXhtSpU6e466672L59O7feeitHjhy5ZNuDBw/y1re+denvz3zmMxw4cIC9e/fy2te+lpGREQBqtRo/+7M/y/bt2zlw4ACvf/3rOX369EXP+Z3vfIcbbrhh6V9XVxc33XQTANlslvvuu499+/bxG7/xG0vfmZ2d5d5778VxnKVj3/jGN/i1X/u1lySLK/E7v/M7DAwMIITg+eefv2zbq5UVXP0zkFLywQ9+kL1797Jz507e//7302g0ADh79iy33347e/bs4SMf+cjSd44dO8Y73vGOFef5X//rf61o83KzmucPMDk5yR133IGUEoBvfetb3HTTTdxwww3s3buXT3/600ttf+VXfoX9+/dzww03cOutt/L973//kuf92Mc+xt69e9m9ezfvfOc7yeVywNrTqze84Q1L93TPPffw3HPPXbLtavRqNfoKoJTi/vvvJxaLLR1bS3q1nL//+79HCMEDDzxwyTbn69WDDz7ILbfcwv79+7njjjs4ePDgUtuPfOQj7NixA03TLntOgJGREd7+9rezY8cOdu/ezV/91V8Ba09WAwMD7NixY2ls/fznP3/JtlerV3NzcyvG6+3bt2MYBvPz8xc973rpg/V6nd/6rd9i27Zt7Nu3j/e85z2XbLuaPrjI1ejrN77xDXbu3Mm2bdt417veRaFQANaWXq32+a+mDyql+C//5b+wfft29u3bx3333XfJ61gvffBy77LzWY2sZmZmeNOb3sS2bdvYu3cvDz/88CXPux70Ci5/v+ezGlnde++9bNq0aUln/8f/+B9XvJb3ve99CCHW7Hi1plHXIffdd5/6+7//e6WUUv/8z/+sbrnllku2ffOb36wefvhhpZRSx44dU+3t7WpiYkIppdRnPvMZ9Za3vEUppVS1WlXf/OY3lZRSKaXUX/3VX6nXvOY1V3U9b33rW9V//+//fel7f/zHf7x0nYcOHVJKKfWe97xHPfbYYxd896abblInT568qt95MfzoRz9So6Ojqr+/Xz333HOXbXu1slLq6p/BJz/5SXXfffeper2upJTqAx/4gPrTP/1TpZRS//E//kf16U9/Wrmuq7Zv364KhYKSUqo3vOENanBwcMV56vW62rx5s8rlci9GDFdktc//13/919U//MM/KKWUklKqeDyuDh48qJRS6uzZs8q2bVUoFJRSSmWz2aXvPfvssyoejyvP8y4450MPPaR27dq19L0/+ZM/Ub/xG7+xdD1rSa+W39OXv/xltX///ku2XY1erUZflVLqz/7sz9QHPvABFY1Gl46tJb1a5OzZs+rOO+9Ud9xxh/rKV75yyXbL9Wp+fl4lEgl1+PBhpZRSDz/8sNqzZ89S2yeeeEKdOXNGveY1r7nsOaWU6qabblJf+MIXlo5NTU0ppdaerK72uSu1Or1azsc+9jH1tre97aKfrac++Lu/+7vqt37rt5bGrMnJyUu2Xa2srkZfi8WiamtrU8eOHVNKKfWbv/mb6oMf/KBSau3p1XIu9/yVWl0f/Iu/+Av1zne+U9XrdaXUpZ/BeumDV3qXnc9qZPUrv/Ir6o/+6I+UUko9+eSTqru7WzUajQvOuV706kr3ez6rkdWVxvTz+dKXvqQ+8IEPKGDp3bzWxqu1zHW3IzUzM8PTTz+9tPr2cz/3c4yOjl5092BkZIQjR45wzz33AHD48GH2799PZ2cnAG95y1v49re/zdzcHD6fj7e85S0IIQC44447GBoauuL1TExM8P3vf59/82/+DQCmaVKpVJBSUq/XsSyLBx98kHg8zh133HHB93/hF36Bv/3bv31RsrgaXv3qV9PT03PFdquR1WqewcGDB3nd616HZVkIIXjzm9/MZz7zGeCcrBzHQUqJpml84hOf4A1veAObNm1acR7LsnjDG97AP/3TP70keVyK1Tz/Wq3G5z//eX7u535u6djylaBCoUAymcS2bYAVuyX5fP6S13Dw4EHuvvtuwuEw0JT5+bJaK3p1/j0tyu18VqNXcPX6CnDkyBEeeOABfv/3f3/F8bWkV9Dclf3ABz7AX/3VXy3pxMU4X6/OnDlDMplkz549ANxzzz2MjIzw7LPPAnDbbbexefPmK/7+97//fWzb5t3vfvfSsfb2dmDtyepqWa1eLedTn/oU73//+y963vXSB8vlMp/61Kf48Ic/vNT3Ojo6Ltp2tbK6Wn399re/zY033sjOnTsB+I3f+A0+97nPAWtbry73/FfbBz/2sY/x0Y9+FMuygEs/g/XUBy/3LlvOamX1hS98gX//7/89ALfeeitdXV386Ec/uuC860WvrnS/y1mtrFbD9PQ0H/nIR/jzP//zFcfX0ni11rnuDKnR0VE6OzsxDANodvq+vr6Luib86Ec/4tZbb136+8CBAzz77LOcPHkSgH/8x39EKcXw8PAF3/3Lv/xLfuZnfuaK1/N//+//5S1veQttbW0AvOc97+H06dPceOONvO51r6O7u5sPf/jDfPjDH77o9++8887Lunq9UqxGVqt5BjfffDNf+9rXKBQKOI7DF77whSUD5Xd+53f4yle+wp133skHP/hB8vk8X/ziF/nd3/3di17jKymryz3/p556ik2bNhEIBIDm/X/+85/nXe96F/39/dx99918+tOfXnq5Avz+7/8+W7Zs4V3vehdf+tKX0LQLu+7NN9/M9773PaamplBK8dnPfpZiscj8/Pya1Kv3vve99Pb28od/+IdLk83zeSl98HI4jsOv/uqv8r//9/9G1/UVn601vfrzP/9zXvWqV3HzzTdftt35erVt2zbm5uZ49NFHAfja175GsVi8qgWe5Rw9epR0Os0v/dIvceONN/LOd76TwcFBYO3JCpp6tW/fPt7//vczOzt70TYvVq8effRRstksb3vb2y563vXSB8+cOUMikeAjH/kIt9xyC/fcc88lf2u1srpafR0ZGaG/v3/p74GBASYnJ3Fdd03qFVz5+a+mDxYKBaanp/nqV7/K7bffzu23335JV9T10gev5l22yGpkNTc3h+M4KwzNgYGBi84Z1oterWZ8fjFj++///u+zb98+fvEXf3FJVy7Gr/7qr/Knf/qnS4s/i6yl8WqtY1zrC1jLjI2NLa36QFN5P/GJT/De974X13V561vfSiwWWzIIFvnIRz7C6dOnr6hUSin+7u/+jv/5P//n0rFgMMgXv/jFpb//w3/4D3zoQx/i9OnTS/66f/AHf8CBAweA5grW2NjYS77Xl8pqZLXct/ZKvO9972N4eJjXvOY1+P1+Xve61/HQQw8B0NnZyXe+852ltu9+97v5sz/7M374wx/yN3/zN9i2zX/7b/9taVB9pWR1ped/vqxc1+W//tf/ype//GVe/epX89RTT/GOd7yDQ4cOkUqlAPjoRz/KRz/6Ub73ve/xe7/3e/zkJz+54OV033338cEPfpC3ve1t6LrOO9/5TgAMw1iTevUP//APAHz605/mQx/6EN/61rcuaPNi++CV+OM//mPe9a53sWvXrgteXGtJrw4fPsyXvvSly8YDLHK+rKLRKF/84hf5T//pP1EqlbjzzjvZvXv3qmXlui4/+MEPePzxx9mzZw+f+MQn+IVf+AWefvrpNSUrgIcffpi+vj4cx+EP/uAP+Lf/9t++rHr1qU99ive+972XlOF66YOu6zI8PMzu3bv56Ec/ynPPPcfrX/96jhw5skIusDpZrUZfL8da06tFrvT8V9MHXdfFdV2q1SpPPPEEQ0ND3HXXXezcuXNJBxZZL33wat5lL0ZWLxdrSVarud/Vyuozn/kMvb29KKX467/+a972trdx9OjRC877t3/7t/T19XH//fdf8NlaGq/WPNfMqfAaMT09rcLhsHIcRynV9Oltb29Xp06duqDtX/zFX6h/9+/+3SXPNTk5qWzbVuVyeenYxz72MXXzzTeviAG5FD/84Q9Vd3e3cl33op8/8cQT6pd/+ZeVUkrdfffd6uzZs2pwcFC9+tWvXmpz8OBBNTAwcMXfeqlcKfZgNbJazTM4n8997nPq7rvvvuD4F7/4RfWhD31IKaXUzp07VaFQUD/4wQ/Ue9/73qU2X/3qV9W99957xd94KVzN83/ggQfU/fffv/T3U089pbZt27aizS233KIeeuihi35/x44d6umnn77itTz22GOqp6fnguNrSa8W8fl8KpPJXHD8xfRBpa6sr3fffbfq6+tT/f39qru7WwkhVH9/v5qZmVnR7lrr1cc//nHV0dGh+vv7VX9/v7JtW6XTafXxj3/8grbn69X51Go1FYvFLuhnV/Kn/+d//md1zz33LP1dKpWUEOKC+IRrLavzmZiYUKFQ6KKfvRi9KhaLKhQKLcVeXA1rtQ/Ozs4qTdNWvHtuueUW9d3vfveCtquR1Wr09Qtf+IJ64xvfuPT3kSNHVHd39wXt1opeXc3zX20fDIVC6syZM0uf//zP/7z6P//n/1zwvfXSB1fzLlutrAKBwIoYsltvvfWi+rre9GqRS43PSr34sX0R27Yv+n795V/+ZdXT07PUXwHV29urnn322RXtrvV4tda57lz72trauOmmm/jHf/xHAL70pS/R09PD1q1bL2i7f/9+Tpw4seLY5OQkAJ7n8aEPfYjf/M3fXNpu/fM//3M+97nP8d3vfndFDMil+NSnPsX73ve+C1yLoOl69KEPfWjJb7VcLiOEQNM0SqXSUrtjx45dsHp1LViNrFbzDGq1GtlsFoBMJsNHP/pRfu/3fm9Fm1wux1/+5V/yR3/0RwBUKhU0TXvFZXW1z/98WfX29jI5OcmxY8cAOH36NGfOnGHHjh04jrMiduzJJ59kZmbmkrEtizKvVCr85//8ny+Q1VrQq1wux8TExNLfDzzwAMlkkkQicUHb1fbBq+WRRx5heHiYoaEhfvzjHxOJRBgaGiKdTq+4zmutV7/+67/O5OQkQ0NDDA0Ncccdd/DJT36SX//1X7+g7eVkBfAnf/In3H///RftZ5fjzW9+M2NjY4yPjwPNrFy7du3CNM2lNmtBVuVyeSk2A+Bzn/scN95440Xbvhi9+vznP8+BAweWYi8uxXrog6lUite+9rVLq/Nnz57l7Nmz7Nq164K2q5HVavT1TW96E88++yzHjx8H4OMf/zi/9Eu/tKLNWtCrRa7m+a+2D/6rf/WvePDBBwGYn5/nySefZP/+/Recd730wcu9y85ntbJ697vfzSc+8Qmg6eo2Pj7Oa17zmgvOu5706mrH59XIynVdpqenlz770pe+RHt7O8lk8oLzfvazn2V0dHSpvwK88MILK8bNtTBerXmutSV3LTh+/Li644471LZt29TNN9+sXnjhhYu2azQaqr+/X83NzS0de9Ob3qR27dqlNm/erH77t39b1Wo1pZRSo6OjClCbN29WBw4cUAcOHFC33Xbb0vf+8A//UP3N3/zN0t+5XE4FAoEVq1HL+fCHP6z+7u/+bunvr3/962r37t1q9+7d6pvf/ObS8fe9733qM5/5zIsTxFXwa7/2a6q7u1vpuq7a2trUli1bLtpuNbJS6vLP4P3vf7/66le/qpRqZibauXOn2r17t9q5c+cKGS6/xu9///tLf3/yk59UO3fuVPv371dPPfXU0vF7771XPfLIIy9eGJfhSs//fG666aaljDtKKfVP//RPau/evWr//v1q79696rOf/axSSqlyuazuuusutWfPHnXgwAF11113rbjX8/Vq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3/jGN9i/fz+7d+/mwIEDHDp0aMVzfvOb32Tv3r1Lfx0dHezbtw+ATCbDj/zIj3DDDTfwC7/wC0ufmZub46677sK27aX3vvrVr/Le9773RcthNfzDP/wDQgi+9KUvXbDNuf3qcuTxwAMPoKoqf/Znf3bB8wohlmS+d+9efvCDHwBrT1Z9fX1s3bp16To/85nPXLDt1ehXZ/Oud70LIQTZbBZYe7Kq1Wr84i/+IoODg9xwww28853vvGDb1ej2yx0zHn744aXfaefOnfz8z/88tVoNWFvj4MLCwjJdsWXLFjRNI51Or9j+7GfwUp99xStesXRs165dCCF45plnVjzvhfqnbdu85S1vYc+ePdx33304jgM0xqQ777yTTCazdI5nnnmG173udVdSPOdxsbHsXFajrz784Q+zdetWFEW5qA6ExvOzbds2BgcHue+++8jn88DaGwdXo1dWM2e466676O/vX+pbH/vYxy543v/zf/4PO3bsYO/evRw4cIDHHnsMWHv6ak0jr0N+5Ed+RP7DP/yDlFLKz33uc3L//v0XbPu6171Ofv/735dSSnnkyBGZSqXk5OSklFLKf/qnf5Kvf/3rV33ehYUF+YMf/EB+9atflXv27Fl27K1vfav83ve+J4vFouzv75dSSlkul+Udd9whM5nMsrYzMzNycHBQOo5zube+ar73ve/JsbEx2dvbK5966qmLtr0asjp48KA8efKklFLKSqUiX/nKVy597td//dflJz/5Sek4jtyyZYvM5/PS8zz52te+Vg4NDS07T61WkwMDAzKbza5WBJdFpVKRX/va16TneVJKKT/+8Y/LV73qVRds/773vU/+4z/+o5RSSs/zZCwWk4cOHZJSSjk8PCxN05T5fF5KKZf97gcPHpSxWEy6rnveOT3Pk/v27ZOf/exnl96bnp6WUq4tWUm5/J7+7d/+Te7evfuCbc/uVwsLCzIUCsmpqSkppZQ/+MEPZEtLi5RSynQ6LePxuHz22WellFJ+//vflzt37rys63nDG94g//iP/1hK2fjt/uAP/kBK2einhw8fllJK+c53vlM+/PDD531237598tixY5f1PS+W4eFheeutt8oDBw7IL37xixdsd3a/uhx5ZLNZefPNN8s3vvGN8mMf+9gFzwucp3+kXHuyuhw9dZqr2a++8IUvyPe85z3L5LbWZPWrv/qr8hd/8ReXdNbpe1+J1ej2yx0zSqWSrNfrUkopXdeVb3nLW+Sf/umfSinX3jh4Nh/96EflG9/4xgseP/sZXM1nP/e5z8ldu3ateOxi/fMrX/mK/Nmf/VkppZQ/+7M/K7/yla9IKaX87d/+bfmZz3zmvHO9+c1vlt/5zncueP0vhUuNZeeyGn316KOPypMnT8pXvepVF9WBhUJBtra2yiNHjkgppXz/+98vf+M3fkNKubbGwdXqldXMGS4lo9M89dRTsqenRxYKBSll41m++eabpZRrT1+tZa67HanZ2VmeeOKJpdW3t771rYyNja24e3Dq1Cmee+457rjjDgCeffZZdu/eTXt7OwCvf/3r+frXv87CwsKqzhuPx7n99tsJBALnHdN1nXK5TLVaRVVVAH7/93+fX/mVXyEajS5r29rayqZNm/jWt7714gVyCe688066urou2e5qyerGG29kYGAAAMuy2Lt3LyMjI8AZWdm2jed5KIrCX/7lX/La176W/v7+ZecxDIPXvva1V23l0rIsXv/61yOEAODAgQNL13ku1WqVz3zmM7z1rW9deu/slet8Pk8ikcA0TYBlv3sul7vgNXznO9/BNE1+/Md/fOm9VCoFrC1Zwfn3dFpu53Juv/I8DyklhUIBgGw2u9Q/T548SSKRYOfOnQDccccdnDp1ioMHD170WiYnJ/nOd77Dz/zMzwBnZOV5HrVaDcMw+MY3vkEsFuPAgQPnff7tb387f/u3f7s6AawCz/N4z3vew8c//vGlPrES5/ary5HHL/7iL/I7v/M7JBKJF3Vta01Wl8vV7FczMzN8+MMf5k//9E+Xvb+WZFUqlfi7v/s7PvShDy09e21tbSu2XY1uh8sfM/x+P7quA1Cv16lUKkvXstbGwbP5u7/7O37u535uxWMr6fbL/ezFjl2sf56WFUC5XMYwDJ555hleeOEF3v72t593rne84x381V/91cVv8iVwsbHsbFarr2655ZalucDF+PrXv86NN97Itm3bAPiFX/gFPv3pTwNraxxcjV5Z7ZzhchFCYNs2pVIJWLlfrQV9tea5xobcy84TTzwht2zZsuy9m2++ecUVmn/8x3+Ub33rW5deHzt2TCYSCXn06FEppZR//ud/LgH55JNPruq8p/nud7973o7U888/L++44w65b98++cUvflE+9dRT8m1ve9sFz/EHf/AH8td//dcvePxKcanVxastKykbK6apVEo+/vjjUkopJycn5Wtf+1q5d+9e+Zd/+ZdyYmJC3n333RdcmfzkJz+57BqvJu985zvlL//yL6947Pvf/7686aablr13//33y0QiIXt6emQoFJL333//suMf+MAH5MDAgIzFYvKBBx5Y8bx//ud/Ln/sx35M/sRP/ITcu3evfMtb3rK0m7cWZfUzP/MzsqurS3Z1dclnnnlmxTbn9isppfznf/5nGQwGZU9Pj2xpaVlalctmszIej8sHH3xQSinll7/8ZQnIL3zhCxe9jg996EPyvvvuW3pdLBblW9/6Vrl79275wQ9+UBaLRXn77bdfcFX1e9/73nm/55Xkox/9qPzgBz8opbz4SuO5/epS8vjc5z4n/+t//a9SSin/23/7b5fckdq3b5/cvXu3/LVf+zVZLBallGtPVr29vfKGG26Qu3btku9+97vl7Ozsiu2uZr9605vetKTLOGtHai3J6tChQ7K3t1d+4AMfkDfddJO8/fbb5be//e0V265Gt5/N5ewODg8Py927d8tAICDf/va3y1qtJqVcu+Pggw8+KFOplLRte8XjK+n2y/nsqVOnpM/nk3Nzcxf87gv1T9d15Xve8x65e/du+d73vlfati3vueceOTY2tuJ5RkdHZSKRuNStvmguNZadZrX66jSX2m354z/+Y/ne97536XWpVJKKokjbttfUOLgavbLaOcOrXvUquXXrVrlr1y759re/fWkesBIf+chHpM/nk52dnXJgYECOj49LKdeWvlrrNA0peeFJ/Ic//GH5C7/wC8ve+9znPidf8YpXyJtuukl+8IMflNFoVB46dOiKGVJn4ziOvPvuu+XExIT81Kc+Je+77z75rne9S6bT6aU2f/VXfyV/4id+4mK3fEW41KB4tWWVy+Xk/v375Z/8yZ9csM3b3vY2+dRTT8n7779f3nffffId73iHHBkZWTr+zW9+U77iFa+4xJ2+dD70oQ/JAwcOyFKptOLxT33qU8tcYWzblq961avk9773PSmllI899phsa2tbcVC9//775f79+5cmHGfzJ3/yJzIYDC65CnziE5+4oGJbK7KSUsr/9//+n3zd61634rFz+9VpV7Tnn39eSinlv//7v8uBgYEleTzwwAPyzjvvlPv27ZPvf//75Y4dO+SXv/zlC36353ly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hKqBXVBYZQ/1KjituxqEilRISEhIyMVRClmuoJ8WJGsJnHyc+gkbL+qAgq6mwqpIIlNNtKk8fmjRDAkBQM0XtUZBvubyvZkt/EBs4thcDu9Agr4XFInjFbSRyfAkCl5UaZTNJsL3Ec0WolrDzFuYtoUdsXHHI/hRE2lqCF9iNAL0ShNtpviqSh+/gKpUsI5Pkmtksapx5vwM3y1EmVsbxel/mDdGAlzNpObbWHM6sXEPY7oMjVefrF4JhFKvJpNHSEhISEhISEhISEjIy+cmS7MUEhISEhISEhISEhJy9QkVqZCQkJCQkJCQkJCQkGUSKlIhISEhISEhISEhISHLJFSkQkJCQkJCQkJCQkJClkmoSIWEhISEhISEhISEhCyTUJEKCQkJCQkJCQkJCQlZJqEiFRISEhISEhISEhISskxCRSokJCQkJCQkJCQkJGSZhIpUSEhISEhISEhISEjIMgkVqZCQkJCQkJCQkJCQkGUSKlIhISEhISEhISEhISHLJFSkQkJCQkJCQkJCQkJClkmoSIWEhISEhISEhISEhCyTV6UidfToUe666y42btzIbbfdxv79+y/Zdt++fbz97W9ffC2EYMeOHezevZvdu3fzyCOPLH5WKBT45V/+ZTZu3Mi2bdv4vd/7vYte85Of/OTi93fv3k0ikeC3f/u3AXjyySfZvXs3W7du5bOf/ezidx566CF+7dd+bcl1fud3focvfOELL0kGV8rHP/5xVq9ejRCCZ5999rJtz5fV5z73OXbt2sX27dt54xvfyOjo6OJnV/objIyM8PrXv55kMsnu3buXfLaSZNVsNnn3u9/Nxo0b2bVrF29+85s5duzYJdtPTExwxx13IKUE4J//+Z/Zu3cvO3fu5I477mDfvn2Lbf/Nv/k37Ny5k927d3Pbbbfx/e9//5LX/frXv87mzZvZsGED73nPeyiXywCcPHmS17zmNWzbto1PfepTi+0PHjzIz/7szy65xn//7/99SZurwf3337/4TPfccw/PPPPMJdue368++9nPLo7BW265hW9+85uLn11OjuczOjrKO9/5TjZt2sTWrVv59Kc/Daw8WS3wmc98BiEEDz744CXbLKdffepTn2LTpk1omnbZa57LBz/4QYQQFItFoDPnveENb2DHjh38+q//+mK7mZkZXv/61+N53uJ7X//61/nIRz5y5Q/8Eli9ejWbNm1anFu/+MUvXrLtlc5XyxnbJ0+eZM+ePezevZvt27fz8z//8xQKhcXPVlK/arVa/MZv/AYbNmxgx44dfOADH7hk2ysdg8udB2+EMTg3N7dkvd64cSOGYZDP5y/a/mqMweeff57Xve51bN68me3bt/OhD32IRqMBrLwx+M1vfpNbb711cQycuzafz3Jk9frXv541a9Ys/g7/7b/9t4te89vf/vaS36u/v59bb70VWHmyWs56db6sFrjYunCl/epGktWKRr0KecMb3qA+85nPKKWU+vKXv6z27t17ybZvfetb1Y9+9KPF14AqFAoXbfvud79b/dEf/dHi64mJiRe9l2azqTKZjHryySeVUkq9973vVT/84Q9VtVpVa9asUUopVa/X1T333HPB352amlIbNmxQvu+/6N95qfzwhz9UY2Njanh4WD3zzDOXbXuurA4ePKh6enrU+Pi4Ukqpz33uc+ptb3vbYtsr/Q3m5ubUI488or7+9a+rXbt2LflsJcmq0Wiob3zjG0pKqZRS6tOf/rS69957L9n+ox/9qPrf//t/K6WUyufzKpPJqBdeeEEppdSPfvQjtW3btsW25z7L008/rdLptAqC4IJrVioV1d3drQ4ePKiUUupjH/uY+p3f+R2llFL//t//e/XZz35W+b6vNm7cqMrlspJSqvvvv1+dOHFiyXVarZZau3atKhaLyxfEFXLuM/3DP/yD2rlz5yXbntuv5ubmVDweXxxbjzzyiOrq6lJKvbgcz0VKqW699Vb1pS99afG9yclJpdTKk5VSSp08eVLdeeed6o477lD/+I//eMl2y+lXP/3pT9Xx48fVvffee9lrLvDAAw+oD3/4w0vmwE9/+tPqP/2n/6SU6ozp559/Ximl1Ac+8AH12GOPXXCNW2+9VR05cuRKHvklcSXz1AJXOl8tZ2w3m01Vr9cXX3/84x9XH//4x5VSK69f/dZv/Zb6jd/4jcXnutx6daVjcDmyutHG4AJ/9Ed/pN7xjndc8vOrMQaPHDmi9u3bp5RSyvd99Qu/8AvqE5/4hFJqZY1BKaVKp9OL93ry5Ell27Yql8sXbb8cWV3pPHU+b3/729Uf//EfK6VWlqyWs14ptVRWC1xqXVju3L7ASpXVSudVdyI1PT3Nk08+uWh9e+9738vY2NhFrWajo6Ps37+fe+6550Wve+zYMZ588snFkyWA3t7eF/3egw8+yNDQEHv27AHANE3q9TrNZhNd1wH4v//v/5t/9+/+HalUasl3u7u7WbduHd/5znde9O+8VF73utcxODj4ou3Ol9ULL7zAzp076evrA+Btb3sb3/rWt5ibm1vWb5DJZLj77ruJRqMXfLaSZOU4Dm9729sQQgBwxx13MDIyctG2zWaTL37xi7z3ve8F4Pjx42SzWbZt2wbAPffcw+joKE8//TTAkmcplUqXvIdvfetb3HLLLWzevBmAX//1X+fv//7vgbOy8jwPKSWapvE//sf/4P7772fNmjVLrmNZFvfff/9VPcE7/5kW5HY+5/crKSVKKSqVCgDFYnGxf76YHM/l+9//PrZt8/M///OL7/X09AArT1ZSSj784Q/z6U9/Gtu2L9luuf3q9ttvZ+3atVd0D1NTU3zqU5/iT/7kT5a8vyArKSWtVgvLsvjnf/5n0uk0d9xxxwXX+YVf+AX+6q/+6or+5tVkOfPVcsa2bdtEIhEAgiCgVqstfm8l9atarcZf//Vf88lPfnLx/i61Xi1nDC5HVjfSGDyXv/7rv+ZXf/VXL/rZ1RqDGzZsYOfOnQDous5tt922KNeVNgbPPbEul8tks9mLzlvLldVLYXx8nO9///v863/9r4GVJavlPO/5soLLrwvLmdsXWMmyWum86hSpsbEx+vr6MAwD6Az6VatWLXE7W+CHP/wht9122wXvv/GNb2TXrl389m//NrVaDYADBw4wODjIRz/6Ufbs2cP9999/WXelBc6flP/gD/6AT33qU9x///380R/9Ec8++ywnTpxYMoDO5c4777ysq9e14nxZ7dq1i6effpojR44A8PnPfx6lFKdOnVrWb3A5VrKs/uzP/ox3vetdF/3siSeeYM2aNbiuC3QWybm5OR599FEAvva1r1GpVJZsQH7v936PdevW8Z73vIcHHngATbtw6I6OjjI8PLz4evXq1UxMTOD7Ph//+Mf5x3/8R+68805+53d+h1KpxFe+8hV+67d+66L3eC1k9Su/8isMDQ3x+7//+3zuc5+7aJvz+1Uul+N//I//wa233srw8DAf+tCH+Nu//VvgyuS4wIEDB+jq6uL9738/t9xyCz/3cz/HiRMnAFacrP7kT/6E1772tYvGlkvxUvrVlfJv/+2/5Q//8A+Jx+NL3v/ABz7AsWPHuOWWW3jTm97EwMAAn/zkJ/nkJz950etcq361Y8cOfvVXf5WZmZmLtlnOfHU+lxvbAO12m927d5PL5Th69Cj/6T/9J2Bl9avjx4+TyWT41Kc+xd69e7nnnnsu+beWMwbP53KyupHG4AKPPvoohUKBd7zjHRf9/GqOwQVqtRp/9Vd/tSjXlTQGhRB88Ytf5D3veQ/Dw8PcfffdfPazn8WyrAvavtR1cMeOHfziL/7iYl+5HH/7t3/L2972Nrq7u4GVJavl9I3zZQVXvi5cKStZViue63sgdu158skn1caNG5e8d9ttt6nvf//7F7T91Kc+pX791399yXunTp1SSilVrVbVBz7wAfXRj35UKdVxe9E0TT300ENKKaW++c1vqv7+ftVuty95LyMjIyoSiai5ubmLfu77vrrvvvvUmTNn1Be+8AX1nve8R33wgx9U+Xx+sc3//J//U/3iL/7iFTz5y+PFXGYuJqsvf/nL6jWveY3as2eP+oM/+AOVSqXUvn37lvUbLPDwww9f4Np3LitJVp/85CfVHXfcoWq12kU//8IXvrDEzVEppR566CH1ute9Tt16663qYx/7mNq6dav66le/esF3v/vd76q9e/eqVqt1wWd//Md/rD7ykY8svq7VakrTNOV53gVt3/e+96lnnnlGffe731Xvec971L/6V/9KjYyMLH7+7W9/W73mNa+54md+Ofzt3/6teutb33rRz87vV8ViUd12223qwIEDSimlvva1r6m1a9cuyuNK5fhf/+t/VbFYbNGt4i/+4i/Unj17LnoP11NWzz//vLrjjjsW55HLuWq81H71Yu4f/+t//S/1sY99bPE1l3Fv/q3f+i31T//0T+rpp59W73vf+9T73vc+9eyzzy5+fvjwYdXT03OZJ355LMzP7XZb/cf/+B+vuF8pden56lxebGyfS6vVUh/5yEfUf/kv/+Win1/PfvXUU08pQH32s59VSnVchrPZ7KJr3bksdwwu8GKyulHG4Ll86EMfUv/hP/yHS35+tcbgAq1WS7397W9Xv/mbv3nJNtdzDHqep+699171wx/+UCml1OOPP656e3vVzMzMBW2XK6vR0VGlVMd98NOf/rTasmXLZe9FSqnWrVunvvGNb1yyzfWer650vTpfVle6Llxpv7oRZLWSedUpUlNTUyoejy9uLqWUqqenRx09evSCtn/6p3+qPvShD13yWo8++qjavn27UkqpJ554Qg0NDS35PJfLXfS6C3ziE59Q73//+y/5+R//8R+rv/iLv1C1Wk1t2bJFeZ6n/uZv/kb9wR/8wWKbP/uzP1Mf/OAHL3mNV4oXU6ReTFYTExPKtm1Vq9WW9Rss8GKK1EqR1R/90R+pPXv2XHKjqZRSDz74oLrvvvsu+Xmz2VSpVOqS8ti0adNiTN25fOlLX1I/8zM/s/h6//79amBg4IJ2X/nKV9Tv/u7vKqWU2rx5syqXy+qhhx5Sv/Irv7LY5qtf/ap6/etff8l7fKVxHEfNzs5e8P75/erLX/6yevOb37ykTS6Xu6hv9uXk+OUvf1ndc889i6+r1aoSQlxg+LjesvrzP/9z1dvbq4aHh9Xw8LCybVt1dXWpP//zP7+g7UvtVy+22P7SL/2SGhwcXLwHQA0NDamnn356Sbuf/vSn6pd+6ZeUUkrdfffd6uTJk+rEiRPqda973WKbffv2qdWrV1/Jo79sxsfHVSwWu+hny5mvFriSsX0+jz322OIacS7Xu1/NzMwoTdOWxIzu3btXffe7372g7UsZg1ciqxtlDC5QqVRULBZbjEG9GFdrDCrVMQ68+93vVh/+8IcXY9DO53qPwSeeeEJt2LBhyXt79+5V3/nOdy5o+3LXQdu2L7pmLPDwww+rgYGBS8ZFX29Znc/lnvd8WV3punClitSNJquVxqvOta+7u5tbb72Vz3/+8wA88MADDA4Osn79+gva7ty5k8OHDy++LhQK1Ot1oOOf+sUvfpFbbrkFgD179pBIJHjuuecAePzxx1FKMTQ0dNH7kFLymc985pK+1idPnuS73/0uv/Zrv4bnefi+jxACTdOoVquL7Q4ePMiuXbtegiReWc6XFXSyzEAnVuB3f/d3+djHPobrusv6Da6ElSKrP/mTP+Hv//7v+e53v3tBjNa5XE5WAP/5P/9n7rvvPtavX4/neUtixx5//HGmp6cv6v/8lre8haeffppDhw4B8Od//ue8//3vX9KmWCzyZ3/2Z3ziE58AoF6vo2naNZVVsVhkfHx88fWDDz5INpslk8lc0PZ8Wa1du5Znn32WyclJAB577DF8318cZ5eS4/m89a1v5fTp05w5cwboZJrasmULpmkuuc/rLauPfvSjTExMMDIywsjICHfccQd/+Zd/yUc/+tEL2i6nXy2Hv/u7v2NsbGzxHgCee+65xbkPwPM8fvd3f3cxhmohNuhayqpWqy3GZgD8/d///ZJ7PJflzFdw5WP71KlTS9aIL3/5y4uxLQushH6Vy+V44xvfyLe//W2gM4eePHmSLVu2XNB2uWPwSmV1o4zBBb74xS+ya9euxRjUi3G1xqDv+7z//e8nk8nwl3/5lxeNKV0JY3BoaIiJiQkOHjwIdGLHjx8/zqZNmy5ouxxZ+b7P1NTU4mcPPPAAPT09ZLPZS97LX//1X/PBD35wMX76XFaCrODK+8b5slrOunAl3AiyWtFcb03uenDo0CF1xx13qA0bNqg9e/ao55577qLt2u22Gh4eXnS9e/TRR9WOHTvUzp071datW9UHPvCBJW55Tz75pLr99tvVjh071N69e9UPfvCDxc/e+ta3qieeeGLx9be//W21evXqS1qW3vnOdy6xfH3iE59QW7ZsUbfddtti1iIppdqwYcMSF4dXmo985CNqYGBA6bquuru71bp16y7a7nxZKaXUW97yFrVlyxa1du1a9Zu/+Zuq2Wwufna53+BXf/VXF4+3a7WaGhgYULlcTpmmqQYGBtTv/d7vLfnbK0FWY2NjClBr165Vu3btUrt27VK33377Jdvfeuutiy4tSin14Q9/WG3atEmtW7dOfeADH1i05NZqNXXXXXepbdu2qV27dqm77rpriQvk7//+76u/+Iu/WHz91a9+dfE673rXuy7IZPWRj3xkyff/8i//Um3evFnt3LlzSf98/etfrx555JGXLI/LMTIyom677Ta1fft2tXPnTvXGN77xkqedF+tXf/qnf6q2bNmidu7cqW699dYl1s5LyVGpC2X17W9/W+3atUvt3LlT3XPPPRfMAytBVufzYhbGK+1XSin1n//zf1YDAwPKsiyVzWbVwMCAmp6eVkpdKKtz4SKufZ/85CfV3/zN3yy+/qd/+ie1detWtXXr1iXuIh/84AfV5z73uWU88ZVz/PhxtXv3brVjxw61fft29bM/+7Pq5MmTF227nPnqxcb2ubL62te+pnbs2KF27Nihtm3bpv71v/7XF1jNV0q/On78uHr961+/OA6/8pWvXLTdcsbgcmSl1I01Bu+8884lffxSXI0x+PnPf14BaufOnYtyPd81dSWMQaU6bmgLfWr79u3q7/7u7y7Z9kplVa1W1Z49exave9999y1xKzu/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", @@ -508,143 +258,19 @@ ], "source": [ "from matplotlib import pyplot as plt\n", - "from matplotlib.axes import Axes\n", - "\n", - "from mini_trainer.data.io import LazyDataset\n", - "from mini_trainer.modeling import predict\n", + "from PIL import Image\n", "\n", - "images = [f\"mnist/test/{i % 10}/{i}.png\" for i in range(50)]\n", - "ds = LazyDataset(mproc, images)\n", - "\n", - "fig, axs = plt.subplots(5, 10, figsize=(7.5, 5))\n", - "for i, ax in enumerate(axs.flatten()):\n", - " tim = ds[i]\n", - " with torch.inference_mode():\n", - " x = tim.unsqueeze(0).to(device)\n", - " prediction = predict(model, x, 3)[0]\n", - " if not isinstance(ax, Axes):\n", - " raise TypeError()\n", - " correct = prediction[0].label == str(i % 10)\n", - " ax.matshow(x[0, 0, ...].cpu())\n", - " ax.set_title(\n", - " f\"{prediction[0].label} ({prediction[0].confidence:.1%})\",\n", - " pad=0,\n", - " y=1.025,\n", - " fontdict={\"fontsize\": 8, \"color\": \"green\" if correct else \"red\"},\n", - " )\n", + "fig, axes = plt.subplots(5, 10, figsize=(10, 5))\n", + "for ax in axes.flat:\n", " ax.axis(\"off\")\n", - "\n", - "plt.tight_layout(pad=0)\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "id": "7ab0f44e", - "metadata": {}, - "source": [ - "*The manual inference for this demo is not implemented in the most optimal way for sake of simplicity*" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "9a4a2e1c", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "On-the-fly data loading enabled (no cache).\n", - "49| | | | | | 1| | | \n", - " |49| | | | | | 1| | \n", - " | |43| | | 5| 2| | | \n", - " | | |46| | 4| | | | \n", - " | | | |47| | 1| | | 2\n", - " 1| | 1| 1| |45| | 2| | \n", - " | | 1| | | |47| | | 2\n", - " | | 2| 1| | | |47| | \n", - " | | 1| | | | | |49| \n", - " | | | | | 1| 2| 1| |46\n", - "\n", - "Per-class Accuracies:\n", - "0____98.0% (49/50)\n", - "1____98.0% (49/50)\n", - "2____86.0% (43/50)\n", - "3____92.0% (46/50)\n", - "4____94.0% (47/50)\n", - "5____90.0% (45/50)\n", - "6____94.0% (47/50)\n", - "7____94.0% (47/50)\n", - "8____98.0% (49/50)\n", - "9____92.0% (46/50)\n", - "\n", - "Micro Accuracy: 93.60% (468/500)\n", - "Macro Accuracy: 93.60%\n" - ] - } - ], - "source": [ - "import torch\n", - "\n", - "from mini_trainer.data.io import LazyDataset\n", - "from mini_trainer.logging import BaseResultCollector\n", - "from mini_trainer.modeling import predict\n", - "\n", - "results = BaseResultCollector(model=model, verbose=True)\n", - "images = [f\"mnist/test/{(i + 1) % 10}/{i}.png\" for i in range(500)]\n", - "ds = LazyDataset(mproc, images)\n", - "for b in range(len(ds) // 5):\n", - " bis = list(range(b * 5, b * 5 + 5))\n", - " with torch.no_grad():\n", - " predictions = predict(model, torch.stack([ds[i] for i in bis]).to(device), 1)\n", - " bims = [images[i] for i in bis]\n", - " results.collect(bims, predictions, labels=[im.split(\"/\")[-2] for im in bims])\n", - "results.evaluate()\n", - "pass" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "ddb5af3d", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAApgAAAIXCAYAAAA41y7EAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjksIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvJkbTWQAAAAlwSFlzAAAPYQAAD2EBqD+naQAAjHZJREFUeJzs3Xtcj/f/P/DHu3OkonOERCwmTSQ5hBayyPHjMMfNsRBmm21ybA0fh2GLsPhQc9iwzUZUYn1VVJLMKXLalGMHh969vXv9/nBz/fZeZehdb9497rfbdZvr9Xpd1/V8vff2vp6u63q9LpkQQoCIiIiISE10NB0AEREREWkXJphEREREpFZMMImIiIhIrZhgEhEREZFaMcEkIiIiIrVigklEREREasUEk4iIiIjUigkmEREREakVE0wiIiIiUismmERERESkVkwwiYiIiEitmGASERERkVoxwSQiIiIitWKCSURERERqxQSTiIiIiNSKCSYRERERqRUTTCIiIiJSKyaYRERERKRWTDCJiIiISK2YYBIRERGRWjHBJCIiIiK1YoJJRERERGrFBJOIiIiI1IoJJhERERGpFRNMIiIiIlIrJphEREREpFZMMImIiIhIrZhgEhEREZFaMcEkIiIiIrVigklEREREasUEk4iIiIjUigkmEREREakVE0wiIiIiUismmERERESkVkwwiYiIiEitmGASERERkVoxwSQiIiIitWKCSURERERqxQSTiIiIiNSKCSYRERERqRUTTCIiIiJSKyaYRERERKRWTDCJiIiISK2YYBIRERGRWjHBJCIiIiK1YoJJRERERGrFBJOIiIiI1IoJJhERERGpFRNMIiIiIlIrJphEpNXGjBmDxo0bazqMKrd582bIZDJcuXJFKvP29oa3t7dajyOTyTB//ny17pOItA8TTKIa6llCIpPJkJiYWKZeCAEHBwfIZDK89957KnXPtlu+fHmF+01NTZXK5s+fD5lMhjt37qi0/eWXX9C1a1dYW1ujVq1aaNKkCYYMGYIDBw4AeJogPTvW85Y3PeF59OgR5s+fj4SEBE2HQkSkFnqaDoCINMvIyAjR0dHo1KmTSvmRI0dw48YNGBoaVrjtsmXLMHnyZNSqVeulj/vf//4Xs2fPRteuXTFnzhzUqlUL2dnZiI2Nxfbt29GrVy98/vnn+PDDD6VtTpw4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d98pISHBsXESExPV39+vzs5O3X777cP2iY2N1b59+2zLvvrqK1t70qRJOnDggG1ZS0uLFRbPvqkoNTX1guuNi4tTfX39iNdUenl5qbCwUJWVlfL29tbChQtHDaUAxh8BE8BVLzo6Wu+9956ys7PlcrlUWlo6ptPSTluxYoXKysoUFRWl6dOna8uWLTpx4oTtCOTFiomJUX5+vgoKClRRUaHExEQdP35c9fX1iouL0z333KOVK1fq1ltvVXl5uXJycrR79+4hp8fnzJmjjRs3avv27UpOTtYbb7yhAwcOWKe/AwMDVVxcrNWrV2tgYEC33XabTp48qcbGRgUFBamwsHBM9T799NNKT0/XtGnTtHDhQvX19emjjz5SSUmJ1eehhx5SbGyspDNfFgBc/riLHMBVb9OmTQoNDVVKSoqys7OVkZGhm2666ZLXUVJSory8PBUUFCg5OVkBAQHKyMiQr6+vo+NUVlaqoKBAjz32mK6//nrNnTtXTU1NioiIkCTdcsst2rp1q1588UXFx8drz549Qx7cnpGRodLSUj3++ONKSkrSX3/9pYKCAluf9evXq7S0VGVlZYqNjVVmZqZqa2sVGRk55lrT0tL0zjvvqKamRgkJCZozZ46+/vprW5/o6GilpKRo+vTpmj179gXuFQCXkss4dYEQAOC8DAwMKDY2VgsWLND69evHtZaqqiqtWrXqsvzTl8YYRUdHa9myZXr00UfHuxwAY8ApcgC4RI4dO6Y9e/YoNTVVvb29eumll3T06FHdf//9413aZev48ePasWOHfvnlF559CVxBCJgAcIl4eHioqqpKxcXFMsZoxowZqqurs64vxFBhYWGaOHGiXn31VevRTAAuf5wiBwAAgKO4yQcAAACOImACAADAUQRMAAAAOIqACQAAAEcRMAEAAOAoAiYAAAAcRcAEAACAowiYAAAAcBQBEwAAAI4iYAIAAMBRBEwAAAA4ioAJAAAARxEwAQAA4CgCJgAAABxFwAQAAICjCJgAAABwFAETAAAAjiJgAgAAwFEETAAAADiKgAkAAABHETABAADgKAImAAAAHEXABAAAgKMImAAAAHAUARMAAACOImACAADAUQRMAAAAOIqACQAAAEcRMAEAAOAoAiYAAAAcRcAEAACAowiYAAAAcBQBEwAAAI4iYAIAAMBRBEwAAAA4ioAJAAAARxEwAQAA4CgCJgAAABxFwAQAAICjCJgAAABwFAETAAAAjiJgAgAAwFEETAAAADiKgAkAAABHETABAADgKAImAAAAHEXABAAAgKMImAAAAHAUARMAAACO+j8KDsoVjFxTbQAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "r = {str(i): [] for i in range(10)}\n", - "for pred, lab in zip(results.preds, results.labels):\n", - " r[lab].append(pred == lab)\n", - "\n", - "pc_acc = {int(k): sum(v) / len(v) for k, v in r.items()}\n", - "\n", - "cls, acc = zip(*sorted(pc_acc.items()))\n", - "plt.scatter(REAL_FREQ, acc)\n", - "for f, a, c in zip(REAL_FREQ, acc, cls):\n", - " plt.text(f, a - 0.05, str(c))\n", - "\n", - "breaks = [(i * 4) / 100 for i in range(25)]\n", - "breaks = [br for br in breaks if br <= max(REAL_FREQ)]\n", - "plt.xticks(breaks, [f\"{br:.0%}\" for br in breaks])\n", - "plt.xlabel(\"Training Frequency\")\n", - "\n", - "breaks = [(i * 5) / 100 for i in range(21)]\n", - "plt.yticks(breaks, [f\"{br:.0%}\" for br in breaks])\n", - "plt.ylabel(\"Class accuracy\")\n", - "\n", - "plt.title(\"MNIST long-tailed accuracy\")\n", - "plt.show()" + "for ax, path, prediction in zip(axes.flat, images, predictions, strict=False):\n", + " label, confidence = prediction.label, prediction.confidence\n", + " correct = label == Path(path).parent.name\n", + " with Image.open(path) as image:\n", + " ax.imshow(image.convert(\"RGB\"))\n", + " ax.set_title(f\"{label} ({confidence:.1%})\", fontsize=8, color=\"green\" if correct else \"red\")\n", + "plt.tight_layout()\n", + "plt.show()\n" ] } ], @@ -669,4 +295,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} \ No newline at end of file +} diff --git a/examples/run_notebook.py b/examples/run_notebook.py deleted file mode 100644 index f1ef1ba..0000000 --- a/examples/run_notebook.py +++ /dev/null @@ -1,28 +0,0 @@ -import json -import sys - - -def run_notebook(notebook_path): - with open(notebook_path, encoding="utf-8") as nb_file: - notebook = json.load(nb_file) - - # Collect all code cell sources into a single string. - full_code = "" - for cell in notebook.get("cells", []): - if cell.get("cell_type") == "code": - # Each cell's source is a list of strings. We join them. - cell_code = "".join([line.replace("tqdm.notebook", "tqdm") for line in cell.get("source", [])]) - # Optionally, add a separator (e.g., a comment) between cells. - full_code += f"\n# Begin cell\n{cell_code}\n# End cell\n" - return full_code - - -if __name__ == "__main__": - if len(sys.argv) != 2: - print(f"Usage: {sys.argv[0]} ") - sys.exit(1) - - notebook_file = sys.argv[1] - code_to_run = run_notebook(notebook_file) - # Execute the combined notebook code under __main__ context. - exec(code_to_run, {"__name__": "__main__"}) diff --git a/examples/utils.py b/examples/utils.py index 41aa9a1..ba90d95 100644 --- a/examples/utils.py +++ b/examples/utils.py @@ -6,6 +6,7 @@ import shutil import subprocess import tarfile +import tempfile import time import urllib.request import zipfile @@ -31,52 +32,35 @@ def __enter__(self): return self def __exit__(self, exc_type, exc_val, exc_tb): - if exc_type is not None and self.paths_to_clean: - print("\nCleaning up partial/corrupted files due to interruption or failure...") - - # Use a running count since we don't know exactly how many files made it to disk - with tqdm(desc="Cleaning up", unit="item") as pbar: - for path in self.paths_to_clean: - if not os.path.exists(path): - continue - - if os.path.isdir(path): - # Walk the directory bottom-up so empty subdirectories can be removed - for root, dirs, files in os.walk(path, topdown=False): - # 1. Delete all files in the current folder - for name in files: - try: - os.remove(os.path.join(root, name)) - pbar.update(1) - except OSError as e: - print(f"\nError deleting file {name}: {e}") - - # 2. Delete all now-empty subdirectories in the current folder - for name in dirs: - try: - os.rmdir(os.path.join(root, name)) - pbar.update(1) - except OSError as e: - print(f"\nError deleting directory {name}: {e}") - - # 3. Finally, remove the top-level directory itself - try: - os.rmdir(path) - pbar.update(1) - except OSError as e: - print(f"\nError deleting root directory {path}: {e}") - else: - # Standard single-file deletion - try: - os.remove(path) - pbar.update(1) - except OSError as e: - print(f"\nError deleting file {path}: {e}") + if exc_type is None or not self.paths_to_clean: + return + print("\nCleaning up partial/corrupted files due to interruption or failure...") + + def report_error(function, path, error): + print(f"\nError deleting {path}: {error}") + + for path in tqdm(self.paths_to_clean, desc="Cleaning up", unit="path"): + try: + if os.path.isdir(path) and not os.path.islink(path): + shutil.rmtree(path, onexc=report_error) + elif os.path.lexists(path): + os.remove(path) + except OSError as error: + report_error(None, path, error) def download_with_progress(url, dst, max_workers=8): + """Publish a downloaded archive only after its transfer succeeds.""" print(f"Downloading {url} to {dst}...") + destination = os.path.abspath(dst) + with tempfile.TemporaryDirectory(dir=os.path.dirname(destination), prefix=".download-") as staging: + partial = os.path.join(staging, os.path.basename(destination)) + _download_to_file(url, partial, max_workers) + os.replace(partial, destination) + print("Download complete.") + +def _download_to_file(url, dst, max_workers): # 1. HEAD request to check size and range support req = urllib.request.Request(url, method="HEAD", headers={"User-Agent": "Mozilla/5.0"}) try: @@ -155,92 +139,47 @@ def download_chunk(start_pos, end_pos): f.write(buffer) pbar.update(len(buffer)) - print("Download complete.") + +def _extract_native(command, success_codes=(0,)): + """Run an available extractor; let the caller use Python on failure.""" + if not shutil.which(command[0]): + return False + print(f"Using system native '{command[0]}' with real-time progress...") + try: + process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True, bufsize=1) + with tqdm(desc="Extracting (Native)", unit="file") as pbar: + for line in process.stdout: + if line.strip() and not line.startswith("Archive:"): + pbar.update(1) + process.wait() + if process.returncode not in success_codes: + raise subprocess.SubprocessError(f"{command[0]} failed with exit code {process.returncode}") + except Exception as error: + print(f"Native '{command[0]}' failed: {error}. Falling back to Python...") + return False + return True def extract_tar(tar_path, extract_path): - """Extracts a tar archive using native tools if available, with a Python fallback.""" + """Extract TAR using native tools when available, otherwise Python's data filter.""" print(f"Extracting {tar_path} to {extract_path}...") os.makedirs(extract_path, exist_ok=True) - - # 1. Try using system native 'tar' command with real-time polling - if shutil.which("tar"): - print("Using system native 'tar' with real-time progress...") - try: - # -v forces verbose output (one line per file extracted) - process = subprocess.Popen( - ["tar", "-xvf", tar_path, "-C", extract_path], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True, bufsize=1 - ) - - # Track progress using a running count (tar doesn't know total files upfront) - with tqdm(desc="Extracting (Native)", unit="file") as pbar: - for line in process.stdout: - pbar.update(1) - - process.wait() - if process.returncode != 0: - raise subprocess.SubprocessError(f"Tar failed with exit code {process.returncode}") - - print("Extraction complete.") - return - - except Exception as e: - print(f"Native 'tar' failed: {e}. Falling back to Python tarfile...") - - # 2. Fallback to pure Python with iterative progress - print("Using pure Python tarfile fallback...") - # Opening with "r" allows Python to transparently auto-detect gz, bz2, or xz compression - with tarfile.open(tar_path, "r") as tar: - with tqdm(desc="Extracting (Python)", unit="file") as pbar: - for member in tar: - # filter="data" prevents directory traversal attacks (Requires Python 3.12+) - # Note: If you are using Python 3.11 or older, remove the filter="data" argument + if not _extract_native(["tar", "-xvf", tar_path, "-C", extract_path]): + print("Using pure Python tarfile fallback...") + with tarfile.open(tar_path, "r") as tar: + for member in tqdm(tar, desc="Extracting (Python)", unit="file"): tar.extract(member, path=extract_path, filter="data") - pbar.update(1) - print("Extraction complete.") def extract_zip(zip_path, extract_path): - """Extracts a zip archive using native tools if available, with a Python fallback.""" + """Extract ZIP using native tools when available, with a Python fallback.""" print(f"Extracting {zip_path} to {extract_path}...") os.makedirs(extract_path, exist_ok=True) - - # 1. Try using system native 'unzip' command with real-time polling - if shutil.which("unzip"): - print("Using system native 'unzip' with real-time progress...") - try: - # -o : overwrite existing files without prompting (prevents hanging) - # -d : specify destination directory - process = subprocess.Popen( - ["unzip", "-o", zip_path, "-d", extract_path], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True, bufsize=1 - ) - - with tqdm(desc="Extracting (Native)", unit="file") as pbar: - for line in process.stdout: - # Filter out empty lines or the initial "Archive:" header - if line.strip() and not line.startswith("Archive:"): - pbar.update(1) - - process.wait() - # unzip returns 0 for success, 1 for non-fatal warnings (like an empty zip) - if process.returncode not in (0, 1): - raise subprocess.SubprocessError(f"Unzip failed with exit code {process.returncode}") - - print("Extraction complete.") - return - - except Exception as e: - print(f"Native 'unzip' failed: {e}. Falling back to Python zipfile...") - - # 2. Fallback to pure Python with total % progress - print("Using pure Python zipfile fallback...") - with zipfile.ZipFile(zip_path, "r") as zip_ref: - members = zip_ref.infolist() - # Because zips have a central directory, we can provide a 'total' for a 0-100% bar - with tqdm(total=len(members), desc="Extracting (Python)", unit="file") as pbar: - for member in members: - zip_ref.extract(member, path=extract_path) - pbar.update(1) - + # unzip's status 1 is a warning; -o permits overwriting without a prompt. + if not _extract_native(["unzip", "-o", zip_path, "-d", extract_path], success_codes=(0, 1)): + print("Using pure Python zipfile fallback...") + with zipfile.ZipFile(zip_path, "r") as archive: + for member in tqdm(archive.infolist(), desc="Extracting (Python)", unit="file"): + archive.extract(member, path=extract_path) print("Extraction complete.") diff --git a/mini_trainer/builders.py b/mini_trainer/builders.py index a21c9f4..b9180bb 100644 --- a/mini_trainer/builders.py +++ b/mini_trainer/builders.py @@ -31,19 +31,10 @@ class BaseBuilder: - """The base builder used in the `mini_trainer` training pipeline. - - Subclass this builder and override the relevant functions to alter the `mini_trainer` training pipeline. - - Methods: - **`spec_model_dataloader`** : Parses or builds the model specification from the class index or input directory. - **`build_model`**: Builds the model. - **`build_dataloader`**: Builds the training and validation dataloaders. - **`build_augmentation`**: Builds the augmentation method(s). - **`build_optimizer`**: Builds the model optimizer method (e.g. SGD/ADAM). - **`build_criterion`**: Builds the optimization criterion (i.e. loss function). - **`build_lr_scheduler`**: Builds the learning rate scheduler (shape only, magnitude defined by optimizer). - **`build_logger`**: Builds the training diagnostics logger(s). + """Construction hooks for training and inference. + + Subclass and override individual methods to customize components while keeping + the entry point's construction, checkpoint and training lifecycle. """ def __init__(self): # noqa: D107 @@ -51,11 +42,10 @@ def __init__(self): # noqa: D107 @staticmethod def build_class_spec(path: str | None = None, dir: str | None = None, species: bool = False, *args, **kwargs): - """TODO. + """Load a class-specification dictionary or derive one from ``dir``. - Returns: - (extra_model_kwargs, extra_dataloader_kwargs): - Extra keyword arguments for the model and dataloader building functions. + ``dir`` accepts class directories or supported metadata Parquet files. + When ``path`` is supplied, write the resulting specification there. """ if args or kwargs: raise ValueError( @@ -69,15 +59,11 @@ def build_class_spec(path: str | None = None, dir: str | None = None, species: b def build_model( fine_tune: bool = False, cls: type[Classifier] = Classifier, fine_tune_dtype: torch.dtype = torch.bfloat16, **kwargs: Any ) -> tuple[nn.Module, Callable[[torch.Tensor], torch.Tensor]]: - """TODO. + """Build ``cls`` and return its model and preprocessing callable. - The mandatory keyword arguments depend on the class of `cls`, - but are likely to be ["model_type", "weights", "device", "dtype" and "num_classes"] - or a superset containing these. - - Returns: - (model, model_preprocess) (`tuple[torch.nn.Module, Callable[[torch.Tensor], torch.Tensor]]`): - The loaded model and an appropriate preprocessing function (e.g. RGB[0,1] normalizer). + Remaining keywords are forwarded to ``cls.build``. Fine-tuning freezes the + backbone parameters and converts it and preprocessing to ``fine_tune_dtype``; + it does not independently freeze running-statistic buffers. """ if fine_tune: kwargs["preprocess_dtype"] = fine_tune_dtype @@ -87,7 +73,6 @@ def build_model( _backbone.requires_grad_(False) _backbone.to(dtype=fine_tune_dtype) for param in _backbone.parameters(): - # param.to(dtype=fine_tune_dtype) param.requires_grad_(False) return model, model_preprocess @@ -112,10 +97,11 @@ def build_dataloader( hook: Callable[[torch.Tensor], torch.Tensor] | None = None, **kwargs, ): - """TODO. + """Return training labels followed by one loader per requested split. - Returns: - (train_label_cls, train_loader, validation_loader): The training and validation dataloaders. + Load ``data_index`` or derive metadata from ``input_dir`` on the primary + rank, then broadcast it. Split names select matching prefixes in metadata. + Remaining keywords pass to ``get_dataset_dataloader``. """ def _resolve_metadata(): @@ -199,16 +185,11 @@ def build_augmentation(dtype: torch.dtype): """ return tt.Compose( [ - # tt.AugMix(severity=3), SaltAndPepper(proportion=(0.001, 0.05), probability=0.75), tt.RandomHorizontalFlip(), tt.RandomVerticalFlip(), tt.RandomRotation(15), tt.RandomAffine(degrees=0, translate=(0.1, 0.1), scale=(0.9, 1.1)), - # # tt.RandomResizedCrop(size=(224, 224), scale=(0.9, 1.0)), - # tt.ColorJitter(brightness=0.2, contrast=0.2, saturation=0.2, hue=0.1), - # # Convert back to tensor (in case some augmentations convert to PIL Image) - # tt.ToTensor() ] ) @@ -220,11 +201,12 @@ def parameter_groups( head_weight_decay: float, backbone_weight_decay: float, ) -> list[dict[str, Any]]: - """Groups all model parameters into 'head' and 'backbone'. + """Group trainable parameters by head/backbone, decay and Muon eligibility. - The 'head' is identified by the attribute name stored in `model._backbone_output_name`. - All other parameters are considered 'backbone'. - This method does not filter by requires_grad; it groups all parameters. + ``model._backbone_output_name`` identifies the head. Head parameter names + containing ``linear`` or ``layer`` select the no-Muon group; normalization + parameters, weight parametrizations and biases receive no weight decay. + Frozen parameters are excluded. """ if not hasattr(model, "_backbone_output_name"): raise AttributeError("Model does not have `_backbone_output_name` attribute to identify the head.") @@ -257,13 +239,11 @@ def parameter_groups( } n_params = 0 - for name, p in model.named_parameters(): # Iterate through all parameters the model exposes + for name, p in model.named_parameters(): if not p.requires_grad: continue grp_name = "head" if id(p) in head_module_param_ids else "backbone" - # Heuristic to detect last-layer-weights: - # Parameters in classification module with "linear" or "layer" in name - # If using the Muon optimizer it is important not to use it on the final layer(s)! + # Keep final classifier layers on the auxiliary optimizer, not Muon. if grp_name == "head" and ("linear" in name or "layer" in name): new_grp_name = f"{grp_name}_nomuon" if new_grp_name not in param_groups: @@ -298,10 +278,10 @@ def build_optimizer( backbone_weight_decay: float | None = None, **optimizer_kwargs, # Other optimizer_cls arguments (e.g., betas, eps for AdamW) ) -> torch.optim.Optimizer: - """Builds an optimizer with separate parameter groups for head and backbone. + """Construct the optimizer from named head/backbone parameter groups. - All parameters of the model are assigned to groups. - Requires `model` to have `_backbone_output_name` attribute. + Only trainable parameters participate; ``model._backbone_output_name`` + identifies the head. Forward remaining keywords to ``optimizer_cls``. """ head_lr = lr backbone_lr = backbone_lr or head_lr / 3 @@ -325,7 +305,7 @@ def build_optimizer( # Default LR for the optimizer itself (used if a group has no LR or if not using groups) if "lr" not in optimizer_kwargs: - optimizer_kwargs["lr"] = head_lr # A sensible default + optimizer_kwargs["lr"] = head_lr return optimizer_cls(params=final_params_for_optimizer, **optimizer_kwargs) @@ -411,10 +391,10 @@ def build_criterion( dtype: torch.dtype | None = None, **kwargs, ): - """TODO. + """Build smoothed cross entropy, or EMLA when weighted labels are supplied. - Returns: - The loss function for optimization (e.g. `torch.nn.CrossEntropyLoss` for classification). + Label smoothing defaults to ``1 / num_classes``. The EMLA branch counts + labels in class-index order, including zero-count classes. """ if label_smoothing is None: label_smoothing = 1 / num_classes @@ -450,11 +430,12 @@ def build_lr_scheduler( start_factor: float = 1e-4, pretrained_backbone: bool = True, ) -> torch.optim.lr_scheduler.LRScheduler: - """Only the *shape* of the LR curve is defined here; the *magnitude* should be set in the optimizer. - I suggest using `torch.optim.lr_scheduler.LambdaLR`. + """Build per-step cosine schedules with warmup for named parameter groups. - Returns: - The learning rate scheduler (shape only). + Head groups warm up from ``start_factor``. A pretrained backbone stays at + zero learning rate during head warmup, then starts its own cosine decay. + The optimizer supplies the base learning rates; both schedules end at + ``min_factor`` times those rates. """ warmup_steps = round(warmup_epochs * steps_per_epoch) head_schedule = cosine_schedule_with_warmup(epochs * steps_per_epoch, warmup_steps, start_factor, min_factor) @@ -477,7 +458,7 @@ def backbone_schedule(step: int): else: backbone_schedule = head_schedule - lr_lambdas = [] # [head_schedule for _ in optimizer.param_groups] + lr_lambdas = [] for grp in optimizer.param_groups: lr_lambdas.append(head_schedule if "head" in grp.get("name", "head") else backbone_schedule) diff --git a/mini_trainer/config.py b/mini_trainer/config.py index f40fc0d..994d4cd 100644 --- a/mini_trainer/config.py +++ b/mini_trainer/config.py @@ -14,19 +14,6 @@ from mini_trainer import get_logger -def _nullify(d: dict[str, Any]): - """Recursively replaces all values in a dictionary with None. - - Recurses on nested dictionaries. - """ - for k, v in list(d.items()): - if isinstance(v, dict): - _nullify(v) - else: - d[k] = None - return d - - def _drop_none(d: dict[str, Any]) -> dict[str, Any]: """Recursively drop keys with value ``None`` and empty dicts.""" out: dict[str, Any] = {} diff --git a/mini_trainer/data/augmentation.py b/mini_trainer/data/augmentation.py index 3d7ed6b..4babe17 100644 --- a/mini_trainer/data/augmentation.py +++ b/mini_trainer/data/augmentation.py @@ -19,9 +19,11 @@ def debug_augmentation( if output_dir is None or int(os.environ.get("RANK", 0)) > 0: return convert2fp32 = make_convert_dtype(torch.float32) + fig = None try: n = min(3, len(dataset)) - fig, axs = plt.subplots(3, n, figsize=(10, 5)) + fig = plt.figure(figsize=(10, 5)) + axs = fig.subplots(n, 3, squeeze=False) def prep_for_imshow(img_tensor): img_tensor = convert2fp32(img_tensor.permute(1, 2, 0)) @@ -40,9 +42,8 @@ def prep_for_imshow(img_tensor): for ax in axs[j, :]: ax.axis("off") - plt.tight_layout() - plt.savefig(os.path.join(output_dir, "example_augmentation.png")) - plt.close() + fig.tight_layout() + fig.savefig(os.path.join(output_dir, "example_augmentation.png")) except Exception as e: e_msg = ( "Error while attempting to create debug augmentation image." @@ -54,7 +55,8 @@ def prep_for_imshow(img_tensor): warnings.warn(e_msg, UserWarning) return False finally: - plt.close() + if fig is not None: + plt.close(fig) return True diff --git a/mini_trainer/data/io.py b/mini_trainer/data/io.py index d4cad28..11e611f 100644 --- a/mini_trainer/data/io.py +++ b/mini_trainer/data/io.py @@ -1,4 +1,3 @@ -import hashlib import math import operator import os @@ -26,7 +25,6 @@ from ._workers import _default_worker_count T = TypeVar("T") -V = TypeVar("V") class CACHE_MODE(int, Enum): # noqa: D101 @@ -188,10 +186,6 @@ def make_read_and_resize_fn( return ReadAndResize(size, device, dtype, interpolation, **kwargs) -def _normalize_to_tuple(data): - return data if isinstance(data, (tuple, list)) else (data,) - - # From `flatbug`: https://github.com/darsa-group/flat-bug/blob/9093de0f89756b7f59e63f3bd7161f5574eb90ac/src/flat_bug/datasets.py#L42 def reweight(weights: list[float], target_sum: float | int): """Reweights the provided list of weights so that their sum equals the target sum. @@ -448,21 +442,6 @@ def __init__( # noqa: D107 raise ValueError("Dataset input sequences must have equal lengths.") self._init_cache(CACHE_MODE(cache)) - @staticmethod - def _hash_item(item): - if isinstance(item, str): - return item.encode("utf-8") - if isinstance(item, (list, tuple)): - str_item = next((e for e in item if isinstance(e, str)), str(item)) - return str_item.encode("utf-8") - return str(item).encode("utf-8") - - def _get_cache_hash(self) -> str: - s256 = hashlib.sha256(b"mini_trainer", usedforsecurity=False) - for item_hash in sorted(map(self._hash_item, zip(*self.items))): - s256.update(item_hash) - return s256.hexdigest() - def _init_cache(self, mode: CACHE_MODE): match mode: case CACHE_MODE.NONE: diff --git a/mini_trainer/data/metadata.py b/mini_trainer/data/metadata.py index 12d2c01..01b821b 100644 --- a/mini_trainer/data/metadata.py +++ b/mini_trainer/data/metadata.py @@ -344,9 +344,6 @@ def label_to_class_idx( return cls2idx_flat.get(str(label), None) if str(label) in cls2idx_flat else cls2idx_flat.get(label, None) -# TODO: Unfortunately, this function has some functionality for the hierarchical submodule -# even though the core mini_trainer module and the hierarchical submodule are -# supposed to be entirely compartmentalized. Difficulty to fix: very high. def create_metadata( directory: str | Path | dict | list[str | Path | dict], cls2idx: dict[str, int] | dict[str, dict[str, int]] | None = None, @@ -360,7 +357,13 @@ def create_metadata( seed: int | None = None, **kwargs, ) -> dict[str, list]: - """Create or generate dataset metadata / data index.""" + """Build path/class/split/label columns, optionally writing a JSON index. + + Lists and OrderedDict labels select and order class folders; ordinary dicts + remap labels on collected samples. Supplied splits are retained (validation + becomes test when explicitly requesting two splits); otherwise partition each + class using the requested proportions, minimum frequencies and seed. + """ if isinstance(directory, (str, Path)) and str(directory).endswith(".parquet"): return get_metadata_from_parquet(str(directory), cls2idx=cls2idx or {}) @@ -378,14 +381,8 @@ def create_metadata( labels = labels_from_taxonomy(tax) if isinstance(labels, list): - dir_str = str(directory) if isinstance(directory, (str, Path)) else "." - labels_map = OrderedDict([(lab[0] if isinstance(lab, (list, tuple)) else lab, lab) for lab in labels]) - samples = [ - (img, tuple(cls) if isinstance(cls, list) else cls, None) - for d, cls in labels_map.items() - for img in find_images(os.path.join(dir_str, str(d))) - ] - elif isinstance(labels, OrderedDict): + labels = OrderedDict((lab[0] if isinstance(lab, (list, tuple)) else lab, lab) for lab in labels) + if isinstance(labels, OrderedDict): dir_str = str(directory) if isinstance(directory, (str, Path)) else "." samples = [ (img, tuple(cls) if isinstance(cls, list) else cls, None) @@ -528,13 +525,8 @@ def parse_class_spec(path: str | None = None, dir: str | None = None, species: b else: raise TypeError(f'If `path` is not the path to a valid file, `dir` must be a valid directory, not "{dir}".') else: - cls2idx = { - cls: i - for i, cls in enumerate( - sorted(filter(lambda f: os.path.isdir(os.path.join(dir, f)), map(os.path.basename, os.listdir(dir)))) - ) - } - data = {"cls2idx": cls2idx, "num_classes": len(cls2idx)} + classes = sorted(name for name in os.listdir(dir) if os.path.isdir(os.path.join(dir, name))) + data = {"cls2idx": {cls: i for i, cls in enumerate(classes)}, "num_classes": len(classes)} if species: cls2idx = data["cls2idx"] assert isinstance(cls2idx, dict) diff --git a/mini_trainer/deploy.py b/mini_trainer/deploy.py new file mode 100644 index 0000000..963bded --- /dev/null +++ b/mini_trainer/deploy.py @@ -0,0 +1,86 @@ +"""MAMBO deployment compatibility entry point; shared core code remains unchanged.""" + + +def _runtime(): + try: + from mambo_deploy import Predictor + except ImportError as error: + raise ImportError("Install mambo-v3 with its torch extra (or the matching release wheels)") from error + return Predictor + + +class Predictor: + """Legacy native/CUDA defaults with additive bundle and backend selection.""" + + def __init__(self, device="cuda", model=None, weights=None, class_mask=None, **kwargs): + import torch + + if model is not None and weights is not None: + raise ValueError("model and weights are mutually exclusive") + if isinstance(model, str) and model.endswith((".pt", ".pth")): + weights, model = model, None + self.device = torch.device(device) + self._predictor = _runtime()( + device=str(self.device), model=model, weights=weights, class_mask=class_mask, backend=kwargs.pop("backend", "torch"), **kwargs + ) + + def _convert(self, result): + if self._predictor.backend != "torch": + return result + import torch + + from mini_trainer.hierarchical.model import HierarchicalPrediction + + class DeploymentPrediction(HierarchicalPrediction): + def _process(self, raw_prediction): + return ( + torch.as_tensor(result.logits, device=self_device), + torch.as_tensor(result.indices, device=self_device), + ) + + def _extract_confidence(self, raw_prediction): + return torch.as_tensor(result.confidence, device=self_device) + + # Preserve the native container while using the shared score and tie policy. + self_device = self.device + prediction = DeploymentPrediction( + [torch.as_tensor(rank, device=self.device) for rank in result.raw_logits], + topk=result.topk, + cls2idx=result.cls2idx, + **result.metadata, + ) + prediction.global_indices = torch.as_tensor(result.global_indices, device=self.device) + return prediction + + def predict(self, x, **kwargs): + return self._convert(self._predictor.predict(x, **kwargs)) + + def __call__(self, x, **kwargs): + return self.predict(x, **kwargs) + + def predict_with_embeddings(self, x, **kwargs): + result, embeddings = self._predictor.predict_with_embeddings(x, **kwargs) + if self._predictor.backend == "torch": + import torch + + embeddings = torch.as_tensor(embeddings, device=self.device) + return self._convert(result), embeddings + + def _apply_class_mask(self, mask): + self._predictor._apply_class_mask(mask) + + def available_presets(self): + return self._predictor.available_presets() + + +def run(): + try: + from mambo_deploy.cli import run as deploy_run + except ImportError: + from argparse import ArgumentParser + + parser = ArgumentParser(description="MAMBO local prediction. Install mambo-v3 for inference.") + parser.parse_args() + parser.error("Install mambo-v3; model files download automatically") + + deploy_run(default_backend="torch", default_device="cuda") diff --git a/mini_trainer/hierarchical/integration.py b/mini_trainer/hierarchical/integration.py index eb89bf4..77d1fe5 100644 --- a/mini_trainer/hierarchical/integration.py +++ b/mini_trainer/hierarchical/integration.py @@ -20,8 +20,7 @@ parquet_to_class_spec_hierarchical, ) from mini_trainer.logging import BaseResultCollector -from mini_trainer.training import EMLACrossEntropy, named_confusion_matrix -from mini_trainer.visualization import plot_heatmap +from mini_trainer.training import EMLACrossEntropy from .loss import MultiLevelWeightedCrossEntropyLoss from .model import HierarchicalClassifier, HierarchicalPrediction @@ -64,47 +63,17 @@ def parse_class_spec( label_fn: Callable[Concatenate[str, ...], OrderedDict[str, tuple[str, ...]]] = default_labels_from_directory_structure, **kwargs, ) -> dict[str, dict[str, dict[str, int]] | OrderedDict[str, tuple[str, ...]] | list[int]]: - """Construct class specification: - * class index (label string to index mapping) - * hierarchical labels (tuple of label strings leaf->root) - * number of (leaf) classes - from a precalculated class specification or a directory structure. - - If constructed from a directory structure, the hierarchy is constructed based on the names - and structure of the directories containing the training images. - - By default it assumed that labels can be parsed from the image path like: - ``` - image_path = <"[dir]/[root_label]>/[...]/[leaf_label]/[image_filename]"> - label = [<"leaf_label">, ..., <"root_label">] - labels = {<"[root_label]>/[...]/[leaf_label]"> : [<"leaf_label">, ..., <"root_label">] for image in images} - ``` - However, this behaviour can be modified by passing a function to `label_fn` that takes the root - directory containing all training images (and no other images), and computes an ordered dictionary - of all labels for all valid images in the directory, where the key should be the parent directory of images - with a given label. - The labels should be sorted first by the root label and last by the leaf label. - - Args: - path: Path to a precomputed class specification if it exists, otherwise one will be computed. - If path is not None, but doesn't exist yet, the computed class specification - will be stored in path for later use. - levels: If an integer, the hierarchy is truncated to the number of levels specified. - Otherwise all levels computed from ``label_fn`` are used. - dir: Root directory containing all training images (and no other images). - label_fn: A function which computes an ordered dictionary of labels for all images in ``dir``, - where the key should be the name of the directory containing all images which match a label. - **kwargs: Additional arguments passed to ``label_fn``. - - Returns: - (class specification): A dictionary containing information - used for constructing models and dataloaders. Structure: - * "cls2idx": [dict[str, dict[str, int]]] - * [str] <"hierarchy level">: - * [str] <"leaf label">: [int] <"leaf class index"> - * "labels": [OrderedDict[str, tuple[str, ...]]] - * [str] (<"label 1 image directory">) : [tuple[str, ...]] (<"leaf 1 label">, ..., <"root 1 label">) - * "num_classes": [int] + """Load a JSON class specification or build one from directories/Parquet. + + Returns a dictionary with ``cls2idx`` (per-rank label/index maps), ``labels`` (source keys + mapped to leaf-to-root sequences), and ``num_classes`` (per-rank counts). + An existing ``path`` is loaded; a missing one receives the generated JSON. + Loaded labels follow leaf-index order. + + For directories, ``label_fn(dir, levels=levels, **kwargs)`` supplies ordered + labels. Explicit ``levels`` truncates their sequences; Parquet defaults to + three ranks. When loading JSON, truncation restricts labels/index maps but + retains the stored ``num_classes`` list. """ if isinstance(levels, int): assert levels > 0 @@ -113,9 +82,6 @@ def parse_class_spec( if path is None or not os.path.exists(path): if dir is None or not os.path.isdir(dir): if isinstance(dir, str) and dir.endswith(".parquet"): - # TODO: For now we will just assume that there are three levels - # if not specified with parquet, but this should be determined - # automatically as it is in the other code branch! if levels is None: levels = 3 retval = parquet_to_class_spec_hierarchical(dir, levels=levels) @@ -157,28 +123,14 @@ def parse_class_spec( def sparse_masks_from_labels(labels: OrderedDict[str, tuple[str, ...]], cls2idx: dict[int | str, dict[str, int]]): - """Compute 'sparse masks' from labels (e.g. [species, genus, family]) and class indices. - - A sparse mask is an integer vector (1D tensor) with length equal to the number of classes - at some level (e.g. number of species) that maps each class to it's parent class - (e.g. a species to a genus), encoded such that the value in the mask at the index of a class - is the index of it's parent: - ``` - mask[child_idx] = parent_idx - ``` - - Args: - labels: Ordered dictionary of hierarchical labels (tuple of label strings leaf->root). - cls2idx: Dictionary of dictionaries, keys to the outer dictionary are hierarchy levels (integer), - while the nested dictionaries are class label to index mappings for each level in the hierarchy. - - Returns: - List of sparse masks for levels `{0, ..., N-2}` where `N` is the - number of layers in the hierarchy (e.g. 3 if [species, genus, family]). + """Return child-to-parent index tensors for adjacent hierarchy ranks. + + Each ``torch.long`` vector satisfies ``mask[child_idx] = parent_idx``. + Labels run leaf-to-root; ``cls2idx`` maps rank numbers to label/index maps. + Reject conflicting parents, unmapped children and unused top-rank classes. """ cls2idx = {str(k): v for k, v in cls2idx.items()} nlvl = len(cls2idx) - # Initialize masks with "empty" values (-1) masks = [[-1 for _ in range(len(cls2idx[str(lvl)]))] for lvl in range(nlvl - 1)] for lab in labels.values(): idx = [cls2idx[str(lvl)][cls] for lvl, cls in enumerate(lab)] @@ -209,18 +161,18 @@ def sparse_masks_from_labels(labels: OrderedDict[str, tuple[str, ...]], cls2idx: err_msg = f"Found {len(missing)} unused classes in top level: [{', '.join(map(str, missing))}]" raise ValueError(err_msg) - # Return masks converted to long tensors return [torch.tensor(mask, dtype=torch.long) for mask in masks] -class HierarchicalBuilder(BaseBuilder): # noqa: D101 +class HierarchicalBuilder(BaseBuilder): + """Adapt class metadata, parent mappings and losses for hierarchical training.""" + @staticmethod def build_class_spec(*args, path: str | None = None, dir: str | None = None, levels: int | None = None, species: bool = True, **kwargs): - """TODO. + """Return a hierarchical class specification for model and loader setup. - Returns: - (extra_model_kwargs, extra_dataloader_kwargs): - Extra keyword arguments for the model and dataloader building functions. + With ``species=True``, resolve directory labels through GBIF and reject + a custom ``label_fn``. Otherwise use the supplied/default directory parser. """ if species: if "label_fn" in kwargs: @@ -298,7 +250,6 @@ def __init__( super().__init__(model=model, idx2cls=idx2cls, cls2idx=cls2idx, scientific_names=scientific_names, *args, **kwargs) self._levels = None - # --- Overridden Hooks for Hierarchical Operations --- def _cls2idx_to_scientific(self, cls2idx: dict) -> dict: return cls2idx_to_names(cls2idx) @@ -316,7 +267,6 @@ def _get_evaluation_rows(self): for level in range(self._levels): yield i, path, level, labs[level], preds[level], confs[level] - # --- Overridden Base Attribute Extraction --- def _collect_base_attributes( self, paths: list[str], predictions: list[torch.Tensor] | HierarchicalPrediction, labels: list[tuple[str, ...]] | None = None ): @@ -348,23 +298,8 @@ def eval_label_fn(self, data: dict, outdir: str | None, save: bool, prefix: str results = {} for level in range(self._levels): - lvl_results = named_confusion_matrix( - results={k: v[level] if k in ["preds", "confs", "labels"] else v for k, v in data.items()}, - cls2idx=self.cls2idx[str(level)], - verbose=self.verbose, - ) - results[level] = lvl_results - - if plot_conf_mat and save: - assert outdir is not None - dst = os.path.join(outdir, f"{prefix}confusion_matrix_level{level}.png") - classes = [k for k, v in sorted(self.cls2idx[str(level)].items(), key=lambda x: x[1])] - conf_mat = lvl_results["conf_mat"] - - conf_mat_arr = np.array([[conf_mat[g][p] for p in classes] for g in classes]).astype(np.float64) - arr = plot_heatmap(conf_mat_arr, "magma", percent=False) - from PIL.Image import fromarray - - fromarray(arr).save(dst) + rank_data = {k: [row[level] for row in v] if k in ("preds", "confs", "labels") else v for k, v in data.items()} + dst = os.path.join(outdir, f"{prefix}confusion_matrix_level{level}.png") if plot_conf_mat and save else None + results[level] = self._evaluate_labels(rank_data, self.cls2idx[str(level)], dst) return results diff --git a/mini_trainer/hierarchical/loss.py b/mini_trainer/hierarchical/loss.py index 4213dce..cc68ee2 100644 --- a/mini_trainer/hierarchical/loss.py +++ b/mini_trainer/hierarchical/loss.py @@ -22,15 +22,8 @@ def __init__( # noqa: D107 weights = [1] * self.n_levels self.weights = torch.tensor(weights).to(device=self.device, dtype=self.dtype) - # The adjustment: - # ls(L)=1-(1-ls(0))^(1/(L+1)), ls(0)=k - # is to avoid a situation where the model gives the target probability for the correct leaf class, - # e.g. if ls=0.1, the model predicts P(Correct_0 | Model, Data) = 1 - ls = 0.9, and distributes the remaining - # probability mass to the correct class siblings (i.e. other species in the correct genus), then the model must - # give a higher confidence for the correct parent (child): - # P(Correct_1 | Model, Data) > P(Correct_0 | Model, Data) - # (if it gives any confidence to the sibling classes), meaning that the model is encouraged NOT to give any - # confidence to the sibling classes, which is counter to the point of hierarchical learning + # Smoothing decreases toward the root: ls(i) = 1 - (1 - ls(0))**(1/(i+1)). + # Correct parents receive probability mass from multiple sibling classes. self.label_smoothing = [1 - (1 - label_smoothing) ** (1 / (i + 1)) for i in range(self.n_levels)] kwargs["label_smoothing"] = self.label_smoothing diff --git a/mini_trainer/hierarchical/metric.py b/mini_trainer/hierarchical/metric.py index 5aa72b0..e1bf3ae 100644 --- a/mini_trainer/hierarchical/metric.py +++ b/mini_trainer/hierarchical/metric.py @@ -5,7 +5,7 @@ def rank_error(predictions: list[str | int] | list[tuple[str | int, ...]], labels: list[int | str], progress: bool = False): - """Computes the rank error (LCA distance) between predictions and labels.""" + """Legacy mean rank-match index from GBIF-resolved labels.""" ranks = [] elements = zip(predictions, labels) if progress: @@ -18,7 +18,6 @@ def rank_error(predictions: list[str | int] | list[tuple[str | int, ...]], label if prediction == label: break ranks.append(level) - # return Counter(ranks) return sum(ranks) / len(ranks) @@ -28,8 +27,7 @@ def confusion_matrices( levels: int, progress: bool = False, ): - """TODO.""" - # cf_mats = [] + """Return sorted unique prediction/label hierarchy tuples (legacy name).""" pred_long, lab_long = [[[] for _ in range(levels)] for _ in range(2)] elements = zip(predictions, labels) if progress: diff --git a/mini_trainer/hierarchical/model.py b/mini_trainer/hierarchical/model.py index 0a63b88..02183b8 100644 --- a/mini_trainer/hierarchical/model.py +++ b/mini_trainer/hierarchical/model.py @@ -19,12 +19,12 @@ class HierarchicalClassifier(Classifier): # noqa: D101 TODO def __init__( # noqa: D417 self, sparse_masks: list[torch.Tensor] | None = None, prior: list[torch.Tensor | list[float]] | None = None, **kwargs ): - """TODO. + """Aggregate leaf logits through child-to-parent maps. Args: - sparse_masks: Long-Tensors with parent indices for each element in layers n-1. - masks: DEPRECATED! Dense child-parent "log-adjacency" matrices. - kwargs: passed to `mini_trainer.classifier.Classifier`. + sparse_masks: Parent indices for each child, ordered from leaves upward. + prior: Per-rank biases, ordered from leaves upward. + kwargs: Passed to `mini_trainer.modeling.Classifier`. """ super().__init__(**kwargs) if not self.normalized: @@ -88,9 +88,7 @@ def num_masks(self): @property def masks(self): if self._dirty_cache["_masks"]: - masks = [] filter = self.active_indices - filters = [filter] self._dim_sizes = [] for i in range(self.num_masks): mask = getattr(self, f"mask_{i}") @@ -99,8 +97,6 @@ def masks(self): mask = mask[filter] filter, mask = mask.unique(sorted=False, return_inverse=True) setattr(self, f"_mask_{i}", mask.view_as(mask)) - masks.append(mask) - filters.append(filter) self._dim_sizes.append(int(mask.max().item() + 1)) setattr(self, f"_filter_{self.num_masks}", None if filter is None else filter.view_as(filter)) self._dirty_cache["_masks"] = False diff --git a/mini_trainer/hierarchical/transformer.py b/mini_trainer/hierarchical/transformer.py index 769ab2a..42a39d8 100644 --- a/mini_trainer/hierarchical/transformer.py +++ b/mini_trainer/hierarchical/transformer.py @@ -1,26 +1,15 @@ -""" -Autoregressive Transformer Decoders for Hierarchical Classification. - -This module implements modern transformer decoder architectures designed to ingest -visual backbone embeddings and autoregressively predict hierarchical class tokens. - -Architectural References: - - Transformer/Cross-Attention: "Attention Is All You Need" (Vaswani et al., 2017) - https://arxiv.org/abs/1706.03762 - - RMSNorm: "Root Mean Square Layer Normalization" (Zhang & Sennrich, 2019) - https://arxiv.org/abs/1910.07467 - - SwiGLU FeedForward: "GLU Variants Improve Transformer" (Shazeer, 2020) - https://arxiv.org/abs/2002.05202 - - FlashAttention (via PyTorch SDPA): "Fast and Memory-Efficient Exact Attention - with IO-Awareness" (Dao et al., 2022) - https://arxiv.org/abs/2205.14135 - -The primary implementation (`XADecoder`) utilizes a LLaMA/Mistral-style backbone -(RMSNorm + SwiGLU) extended with Cross-Attention to process external memory contexts. - -See reference implementation(s): - - https://github.com/meta-pytorch/torchtune/blob/bd2a0fc7c31430972728494fa01aaeeb0ebf1ba1/torchtune/modules/transformer.py - - https://github.com/huggingface/transformers/blob/f0e41a3ef4daf287c694a4731d50eefe9d57d48c/src/transformers/models/mistral/modular_mistral.py#L44 +"""Sequence-first decoders for autoregressive hierarchical classification. + +XADecoder combines cross-attention, RMSNorm and SwiGLU using PyTorch SDPA. +References: https://arxiv.org/abs/1706.03762 (attention), +https://arxiv.org/abs/1910.07467 (RMSNorm), +https://arxiv.org/abs/2002.05202 (SwiGLU), +https://arxiv.org/abs/2205.14135 (FlashAttention). +SDPA selects its backend; fused attention is not guaranteed. + +Implementation references: +- https://github.com/meta-pytorch/torchtune/blob/bd2a0fc7c31430972728494fa01aaeeb0ebf1ba1/torchtune/modules/transformer.py +- https://github.com/huggingface/transformers/blob/f0e41a3ef4daf287c694a4731d50eefe9d57d48c/src/transformers/models/mistral/modular_mistral.py#L44 """ from abc import ABC, abstractmethod @@ -43,16 +32,9 @@ def d_model(self) -> int: def forward( self, tgt: torch.Tensor, memory: torch.Tensor, tgt_mask: torch.Tensor | None = None, tgt_is_causal: bool = True ) -> torch.Tensor: - """ - Standard forward pass for training or stateless generation. - Expected shapes (assuming batch_first=False for compatibility): - tgt: (Seq, Batch, Dim) - memory: (Mem_Seq, Batch, Dim) - """ + """Decode tgt (sequence, batch, width) using memory (context, batch, width).""" pass - # Note: A .step() method here for KV-caching could be added in the future. - class RMSNorm(nn.Module): def __init__(self, dim: int, eps: float = 1e-6): @@ -69,10 +51,7 @@ def forward(self, x: torch.Tensor) -> torch.Tensor: class XADecoderLayer(nn.Module): - """ - A modern decoder layer utilizing RMSNorm, SwiGLU (Gated MLP), - and native Scaled Dot Product Attention. - """ + """Self- and cross-attention with RMSNorm and a SwiGLU feed-forward block.""" def __init__(self, d_model: int, nhead: int, dropout: float = 0.1): super().__init__() @@ -90,7 +69,6 @@ def __init__(self, d_model: int, nhead: int, dropout: float = 0.1): self.cross_attn_kv = nn.Linear(d_model, 2 * d_model, bias=False) self.cross_attn_out = nn.Linear(d_model, d_model, bias=False) - # SwiGLU FeedForward hidden_dim = int(8 * d_model / 3) self.ff_w1 = nn.Linear(d_model, hidden_dim, bias=False) self.ff_w2 = nn.Linear(d_model, hidden_dim, bias=False) @@ -130,9 +108,7 @@ def forward(self, tgt: torch.Tensor, memory: torch.Tensor, tgt_is_causal: bool = class XADecoder(BaseDecoder): - """ - Standard sequence-to-sequence decoder stack utilizing gated MLPs and Cross-Attention. - """ + """Cross-attention decoder stack; tgt_mask is accepted but not applied.""" def __init__(self, d_model: int, num_layers: int = 4, nhead: int = 1, dropout: float = 0.1): super().__init__() @@ -152,7 +128,7 @@ def forward(self, tgt: torch.Tensor, memory: torch.Tensor, tgt_mask: torch.Tenso class DecoderLayer(nn.Module): - """A standard LLM-style self-attention layer (No Cross-Attention).""" + """Self-attention and SwiGLU with an explicit attention mask.""" def __init__(self, d_model: int, nhead: int, dropout: float = 0.1): super().__init__() @@ -180,7 +156,6 @@ def forward(self, x: torch.Tensor, attn_mask: torch.Tensor): qkv = self.attn_qkv(normed).chunk(3, dim=-1) q, k, v = [t.contiguous().transpose(0, 1).view(bsz, seq_len, self.nhead, -1).transpose(1, 2) for t in qkv] - # Note: We pass our custom boolean mask, so we set is_causal=False attn_out = F.scaled_dot_product_attention( q, k, v, attn_mask=attn_mask, is_causal=False, dropout_p=self.dropout.p if self.training else 0.0 ) @@ -196,11 +171,11 @@ def forward(self, x: torch.Tensor, attn_mask: torch.Tensor): return x -# Note: This doesn't work well at all, but I'll leave it here for reference class PrefixDecoder(BaseDecoder): - """ - Decoder-Only architecture. Prepends 'memory' to 'tgt', processes them - together, and slices the memory off before returning. + """Prepend memory to targets, then return only target outputs. + + Legacy limitation: the target mask permits future tokens, not past tokens. + Both tgt_mask and tgt_is_causal are ignored; this is not a causal decoder. """ def __init__(self, d_model: int, num_layers: int = 2, nhead: int = 8, dropout: float = 0.1): @@ -214,50 +189,31 @@ def d_model(self): return self._d_model def _generate_prefix_mask(self, mem_len: int, tgt_len: int, device: torch.device): - """ - Creates a mask where: - - Memory can see all Memory (bi-directional) - - Target can see all Memory - - Target can see past Target (causal) - - Target CANNOT see future Target - - Memory CANNOT see Target - """ + """Allow memory-to-memory, target-to-memory and strictly future target attention.""" tot_len = mem_len + tgt_len - # False means "do not attend" (mask out) in SDPA when using a boolean mask mask = torch.zeros(tot_len, tot_len, dtype=torch.bool, device=device) - # 1. Memory attends to memory mask[:mem_len, :mem_len] = True - # 2. Tgt attends to memory mask[mem_len:, :mem_len] = True - # 3. Tgt attends to tgt (causal - upper triangular) tgt_causal = torch.triu(torch.ones(tgt_len, tgt_len, dtype=torch.bool, device=device), diagonal=1) mask[mem_len:, mem_len:] = tgt_causal - # PyTorch SDPA expects the mask shape to broadcast with (bsz, nhead, seq, seq) - # So we reshape to (1, 1, seq, seq) return mask.view(1, 1, tot_len, tot_len) def forward(self, tgt: torch.Tensor, memory: torch.Tensor, tgt_mask: torch.Tensor | None = None, tgt_is_causal: bool = True): mem_len = memory.size(0) tgt_len = tgt.size(0) - # 1. Concat memory and target sequence - # Shape: (mem_len + tgt_len, batch_size, d_model) full_seq = torch.cat([memory, tgt], dim=0) - # 2. Create the specialized prefix mask attn_mask = self._generate_prefix_mask(mem_len, tgt_len, device=tgt.device) - # 3. Pass through self-attention layers for layer in self.layers: full_seq = layer(full_seq, attn_mask=attn_mask) full_seq = self.final_norm(full_seq) - # 4. Slice off the memory to satisfy the API contract - # The head only wants the sequence corresponding to the hierarchical token decisions return full_seq[mem_len:] diff --git a/mini_trainer/hierarchical/utils.py b/mini_trainer/hierarchical/utils.py index b72ec22..6cafdb1 100644 --- a/mini_trainer/hierarchical/utils.py +++ b/mini_trainer/hierarchical/utils.py @@ -7,7 +7,7 @@ def leaf_to_parents(h): - """Construct the path from leaf-to-root for a specific leaf.""" + """Return a leaf-to-ancestor index mapping for each parent rank.""" l2p = [] p2c = None for lvl in h: @@ -24,57 +24,36 @@ def leaf_to_parents(h): def create_hierarchy(combinations: Iterable[list[str]], class_to_idx: list[dict[str, int]]) -> list[list[list[int]]]: - """Creates a hierarchy from the paths and class handles. + """Build parent-to-child index lists, ordered from the first parent rank upward. - The hierarchy is constructed based on the nodes found in the dataset. - TODO: The hierarchy should be constructed once and saved in a structured file. - - Arguments: - combinations: List of all leaf-to-root labels. - class_to_idx: A mapping from classes to indexes. - - Returns: - A list for each level of the hierarchy. - Each list contains a list for each node containing the indices of the children of that node. - Level 0 is the leaf level, and is not included. + Paths and class mappings are leaf-first. Only the first path for each leaf + contributes; repeated leaves are ignored. """ n_classes = [len(class_to_idx[level]) for level in range(len(class_to_idx))] - hierarchy = [[set() for _ in range(n)] for n in n_classes[1:]] # Create empty lists for each level - processed_leaves = [0] * n_classes[0] # Keep track of which leaves have been processed + hierarchy = [[set() for _ in range(n)] for n in n_classes[1:]] + processed_leaves = [0] * n_classes[0] - # Iterate over the combinations for components in combinations: - # Convert the class strings to indices indices = [class_to_idx[ctype][class_str] for ctype, class_str in enumerate(components)] - # Skip processed leaves (species in this case) - if processed_leaves[indices[0]] == 0: # If the leaf has not been processed yet + if processed_leaves[indices[0]] == 0: processed_leaves[indices[0]] = 1 else: - continue # Skip this leaf + continue - # Iterate over the indices and add them to the hierarchy for i in range(len(indices) - 1): - # Get the parent and child indices child = indices[i] parent = indices[i + 1] - hierarchy[i][parent].add(child) # Append the child to the parent's list + hierarchy[i][parent].add(child) return [[list(parent) for parent in level] for level in hierarchy] def create_mask_col(indices, height, zero=-100, **kwargs): - """Create an approximate logarithmic binary mask with the given indices. - - Arguments: - indices (list): list of indices to include in the mask. - height (int): Height of the mask (i.e. number of rows, also the 1+max(indices)). - zero (int): "Approximate zero" value. This is used to avoid numerical issues with log(0). - This should be a large negative number. Default: -100. - **kwargs: Keyword arguments to pass to torch.zeros(). Notably 'device' and 'dtype'. + """Return a (height, 1) additive mask: 0 at indices, ``zero`` elsewhere. - Returns: - An approximate logarithmic binary mask for the given indices. + ``zero`` defaults to -100 as a finite approximation to log(0). Keyword arguments + such as device and dtype are forwarded to torch.zeros. """ col = torch.zeros((height, 1), **kwargs, requires_grad=False) col += zero @@ -83,7 +62,7 @@ def create_mask_col(indices, height, zero=-100, **kwargs): def mask_islogarithmic(masks): - """Check if a mask is contains "logarithmic" zeros and ones.""" + """Detect values outside {0, 1}; reject lists mixing binary and additive masks.""" if isinstance(masks, list): response = [mask_islogarithmic(mask) for mask in masks] all_true = all(response) @@ -96,20 +75,11 @@ def mask_islogarithmic(masks): def mask_hierarchy(hierarchy, zero=-100, **kwargs): - """Create approximate logarithmic binary masks for the given hierarchy. - - Arguments: - hierarchy (list): list of lists of lists of indices. - The first level of the list corresponds to the levels of the hierarchy, - and each level contains a list of lists of indices for each node. - zero (int): "Approximate zero" value. This is used to avoid numerical issues with log(0). - **kwargs: Keyword arguments to pass to torch.zeros(). Notably 'device' and 'dtype'. + """Return one additive (children, parents) mask per hierarchy rank. - Returns: - list of masks for each level of the hierarchy. - Each mask has shape (n_nodes, n_child_nodes) and can be used to calculate the logits - for the nodes based on the child logits: - TODO: Add equation here (logarithmic matrix multiplication) + Entries are 0 for child-parent membership and ``zero`` otherwise (default -100). + Children must have contiguous indices and belong to exactly one parent. + Device and dtype keyword arguments are forwarded to torch.zeros. """ masks = [] for level in hierarchy: @@ -146,7 +116,6 @@ def batched_scatter_logsumexp(input: torch.Tensor, index: torch.Tensor, dim: int """ if dim_size is None: dim_size = int(index.max().item() + 1) - # Scaffold tensor - same size as output z = torch.zeros(shape_resize(input.shape, dim=dim, value=dim_size), dtype=input.dtype, device=input.device) index = index.expand_as(input) c = z.scatter_reduce(dim=dim, index=index, src=input, reduce="amax", include_self=False) diff --git a/mini_trainer/integrations/gbif.py b/mini_trainer/integrations/gbif.py index 5864d85..ca5eb76 100644 --- a/mini_trainer/integrations/gbif.py +++ b/mini_trainer/integrations/gbif.py @@ -346,13 +346,11 @@ def cls2idx_from_labels(labels: OrderedDict[str, tuple[str, ...]]): # noqa: D10 raise RuntimeError("Varying hierarchy levels found in image directory structure:", list(sorted(nlvl))) nlvl = list(nlvl)[0] cls2idx: dict[str, dict[str, int]] = {str(lvl): dict() for lvl in range(nlvl)} - classes = {str(lvl): set() for lvl in range(nlvl)} for lab in labels.values(): for lvl, cls in enumerate(lab): - if cls in classes[str(lvl)]: - continue - classes[str(lvl)].add(cls) - cls2idx[str(lvl)][cls] = len(classes[str(lvl)]) - 1 + mapping = cls2idx[str(lvl)] + if cls not in mapping: + mapping[cls] = len(mapping) return cls2idx diff --git a/mini_trainer/integrations/parquet.py b/mini_trainer/integrations/parquet.py index cde255e..8aee718 100644 --- a/mini_trainer/integrations/parquet.py +++ b/mini_trainer/integrations/parquet.py @@ -16,7 +16,7 @@ def _check_pyarrow(): if not _HAS_PYARROW: raise ImportError( - "Parquet integration requires the optional dependency: pyarrow. Install with `pip install mini_trainer[recommended]`." + "Parquet integration requires the optional dependency: pyarrow. Install with `pip install mt-trainer[recommended]`." ) @@ -215,14 +215,11 @@ def parquet_to_class_spec_hierarchical( ) cls2idx: dict[str, dict[str, int]] = dict() for level in range(levels): - clss = set() this_cls2idx: dict[str, int] = dict() for _, comb in combs.items(): cls = comb[level] - if cls in clss: - continue - this_cls2idx[cls] = len(clss) - clss.add(cls) + if cls not in this_cls2idx: + this_cls2idx[cls] = len(this_cls2idx) cls2idx[str(level)] = this_cls2idx num_classes = [len(cls2idx[str(i)]) for i in range(len(cls2idx))] return {"cls2idx": cls2idx, "labels": combs, "num_classes": num_classes} diff --git a/mini_trainer/logging/collector.py b/mini_trainer/logging/collector.py index 176ff23..28ee051 100644 --- a/mini_trainer/logging/collector.py +++ b/mini_trainer/logging/collector.py @@ -237,21 +237,19 @@ def eval_label_fn(self, data: dict, outdir: str | None, save: bool, prefix: str ) if save and not isinstance(outdir, str): raise RuntimeError("Attempted to save evaluated results against labels without specifying an output directory.") - results = named_confusion_matrix( - results=data, - cls2idx=self.cls2idx, - verbose=self.verbose, - ) - if plot_conf_mat and save: - assert isinstance(outdir, str) - dst = os.path.join(outdir, f"{prefix}confusion_matrix.png") - classes = [k for k, v in sorted(self.cls2idx.items(), key=lambda x: x[1])] - conf_mat = results["conf_mat"] - conf_mat_arr = np.array([[conf_mat[g][p] for p in classes] for g in classes]).astype(np.float64) - arr = plot_heatmap(conf_mat_arr, "magma", percent=False) + dst = os.path.join(outdir, f"{prefix}confusion_matrix.png") if plot_conf_mat and save else None + return self._evaluate_labels(data, self.cls2idx, dst) + + def _evaluate_labels(self, data: dict, cls2idx: dict, dst: str | None): + """Evaluate one vocabulary and optionally save its count matrix.""" + results = named_confusion_matrix(data, cls2idx, verbose=self.verbose) + if dst is not None: from PIL.Image import fromarray - fromarray(arr).save(dst) + classes = sorted(cls2idx, key=cls2idx.get) + conf_mat = results["conf_mat"] + counts = np.array([[conf_mat[label][pred] for pred in classes] for label in classes], dtype=np.float64) + fromarray(plot_heatmap(counts, "magma", percent=False)).save(dst) return results def evaluate(self, outdir: str | None = None, prefix: str = "", **kwargs): diff --git a/mini_trainer/logging/core.py b/mini_trainer/logging/core.py index 50d55ae..97529d8 100644 --- a/mini_trainer/logging/core.py +++ b/mini_trainer/logging/core.py @@ -7,6 +7,7 @@ from abc import ABC, abstractmethod from collections import defaultdict, deque from collections.abc import Callable, Iterator, Sequence +from contextlib import ExitStack from itertools import chain, repeat from pathlib import Path from tempfile import NamedTemporaryFile @@ -187,10 +188,6 @@ def __bool__(self): @abstractmethod def __str__(self) -> str: ... - # @property - # @abstractmethod - # def data(self) -> list[float]: ... - @abstractmethod def update(self, value, *args, **kwargs): ... @@ -236,9 +233,9 @@ def update(self, name, values: float | int | list[float | int] | torch.Tensor | self.get(name).update(values) @abstractmethod - def add_figure(self, name: str, figure: plt.Figure | np.ndarray | torch.Tensor | str, **kwargs) -> None: ... - - """This function should close any new matplotlib.pyplot.Figures it creates!""" + def add_figure(self, name: str, figure: plt.Figure | np.ndarray | torch.Tensor | str, **kwargs) -> None: + """Record a figure; close any additional Matplotlib figures the backend creates.""" + ... def step(self): """This function may not be necessary for your logger.""" @@ -537,37 +534,19 @@ def compute_aligned_steps(target_length: int, origin_length: int, total_epochs: class MultiLogger: - """Multi-backend training/evaluation logger. - - Orchestrates one or more concrete loggers (e.g., terminal metrics, TensorBoard) - and provides a single interface for recording statistics, figures and - heterogeneous artifacts per step and per epoch. - - Args: - train_loader: Training dataloader; used to build aligned global steps. - val_loader: Validation dataloader; used to build aligned global steps. - epochs: Total number of epochs used to pre-compute global steps. - output: Directory to store serialized logs (JSON). - name: Base filename for the serialized log (auto-incremented). - statistics: Names of statistics to track and expose to backends. - private_statistics: Internal statistics not forwarded to backends. - logger_cls: Concrete logger classes to instantiate. - logger_cls_extra_kwargs: Per-logger extra keyword arguments. - logger_cls_stat_factory: Factories for statistic containers per logger. - canonical_statistic: Name of the main metric (used for returns and summaries). - clear_store_on_update: If True, clears transient storage at epoch/phase switch. - verbose: If True, prints summaries and progress information. + """Coordinate per-phase backends, summary CSVs and diagnostic figures. + + Loader lengths align training and validation steps across epochs. The first + public statistic is canonical; private statistics are not sent to backends. + Backend classes, kwargs and statistic factories are matched in order. + + Summaries and figures are saved under output/name/logs. Per-step history + accumulation is disabled to bound memory; save() remains a compatibility no-op. """ @staticmethod def _reset_cuda_memory_stats(): - """Reset CUDA peak memory stats on the current device. - - Notes: - This intentionally avoids synchronization to reduce performance - impact. As a result, memory statistics can be slightly biased - towards lower values, but remain consistent across steps. - """ + """Best-effort peak reset on the current CUDA device, without synchronization.""" if torch.cuda.is_available(): try: torch.cuda.reset_peak_memory_stats() @@ -686,25 +665,39 @@ def update(self, epoch: int, type: str): self._start_time = time.time() self.eta = ETA(self.total_steps, 0.999) else: - self.save() - self._store_summary() + try: + self.save() + self._store_summary() + finally: + self._close_loggers() if self.clear_store_on_update: self.statistics_storage = defaultdict(list) self.heterogeneous_storage = defaultdict(list) self._epoch = epoch self._type = type self._reset_cuda_memory_stats() - self._current_loggers = [] self._soft_confusion_matrix = dict() - for cls, kwargs, stat_factory in zip( - self.logger_cls, - chain(self.logger_cls_extra_kwargs, repeat(dict())), - chain(self.logger_cls_stat_factory, repeat(BaseStatistic)), - ): - this_logger = cls(steps=self.steps, tag=type, name=self.name, output=self.output, **kwargs) - for stat in self.statistics: - this_logger.add_stat(stat, stat_factory()) - self._current_loggers.append(this_logger) + try: + for cls, kwargs, stat_factory in zip( + self.logger_cls, + chain(self.logger_cls_extra_kwargs, repeat(dict())), + chain(self.logger_cls_stat_factory, repeat(BaseStatistic)), + ): + this_logger = cls(steps=self.steps, tag=type, name=self.name, output=self.output, **kwargs) + self._current_loggers.append(this_logger) + for stat in self.statistics: + this_logger.add_stat(stat, stat_factory()) + except BaseException: + self._close_loggers() + raise + + def _close_loggers(self): + loggers, self._current_loggers = self._current_loggers, [] + with ExitStack() as stack: + for logger in loggers: + close = getattr(logger, "close", None) + if close is not None: + stack.callback(close) def step(self): """Advance one logging step. @@ -760,19 +753,12 @@ def log_statistic(self, **kwargs): logger.add_stat(stat, stat_factory()) for logger in self.loggers: logger.update(stat, value) - # Disable for now to avoid OOM - # if isinstance(value, (torch.Tensor, np.ndarray)): - # value = value.tolist() - # if isinstance(value, (tuple, list)): - # self.statistics_storage[stat].extend(value) - # else: - # self.statistics_storage[stat].append(value) @property def data(self): return { "statistics": dict(self.statistics_storage), - "extra": dict(), # dict(self.heterogeneous_storage) + "extra": dict(), } def _store_summary(self): @@ -784,57 +770,15 @@ def _store_summary(self): return def save(self, fp: str | TextIO | None = None, encoding: str = "utf-8", **kwargs): - pass # Disable saving for now to avoid OOM - # ext = ".json" - # if self._start_time is None: - # warnings.warn("Attempting to save logs before starting the loggers is a no-op!") - # return - # if self._epoch is None: - # raise NotImplementedError( - # f'Saving logs while {self._epoch=} is not supported and probably not meaningful. - # 'If this happens you are probably doing something wrong!' - # ) - # if self._type is None: - # raise NotImplementedError( - # f'Saving logs while {self._type=} is not supported and probably not meaningful. ' - # 'If this happens you are probably doing something wrong!' - # ) - # if fp is None: - # if self.output_dir is None: - # return - # output_dir, name = self.output_dir, f'log_{self._type}_epoch{self._epoch}' - # elif isinstance(fp, TextIO): - # json.dump(self.data, fp, **kwargs) - # return - # elif isinstance(fp, str): - # output_dir, name = os.path.split(os.path.abspath(fp)) - # _, ext = os.path.splitext(name) - # - # if os.path.exists(os.path.join(output_dir, name)): - # name = increment_name_dir(name, output_dir) - # fp = os.path.join(output_dir, name + ext) - # - # temp_file_name = None - # try: - # with NamedTemporaryFile("w", encoding=encoding, suffix=".json", delete=False) as tmpfile: - # json.dump(self.data, tmpfile, **kwargs) - # tmpfile.flush() - # os.fsync(tmpfile.fileno()) - # temp_file_name = tmpfile.name - # - # shutil.move(temp_file_name, fp) - # self._last_save = time.time() # Assuming self._last_save is defined - # except Exception as e: - # if temp_file_name and os.path.exists(temp_file_name): - # try: - # os.remove(temp_file_name) - # except OSError: - # pass # Suppress error during cleanup - # raise + """Compatibility no-op; summaries and diagnostic figures are saved separately.""" + pass def finish(self): - self._store_summary() - self.save() + try: + self._store_summary() + self.save() + finally: + self._close_loggers() self._start_time = None self.eta = None self.statistics_storage = defaultdict(list) @@ -842,7 +786,6 @@ def finish(self): self._epoch = None self._type = None self._reset_cuda_memory_stats() - self._current_loggers: list[_Logger] = [] self._soft_confusion_matrix = dict() self._finished = True @@ -918,15 +861,10 @@ def log_speed(self, start_time: float): self.log_statistic(**{"item/s": self._batch_size / (time.time() - start_time)}) def log_memory_use(self): - """Log per-batch peak CUDA memory usage (no sync). - - Notes: - Uses ``torch.cuda.max_memory_allocated()`` which reports the peak - allocation since the last reset. The logger resets the peak at the - end of each step and at phase boundaries, so this value reflects a - best-effort per-batch peak. No device synchronization is performed - to avoid performance impact, so values may be slightly under the - true peak but are consistent across steps. + """Record CUDA peak allocation since the last reset, or current CPU RSS, in MiB. + + CUDA peaks reset at step and phase boundaries without synchronization. + CPU memory is reported as zero when optional psutil is unavailable. """ MB = 1024.0**2 if torch.cuda.is_available(): diff --git a/mini_trainer/logging/tensorboard.py b/mini_trainer/logging/tensorboard.py index 0c878f7..f65d0e8 100644 --- a/mini_trainer/logging/tensorboard.py +++ b/mini_trainer/logging/tensorboard.py @@ -74,6 +74,13 @@ def flush(self): self.writer.add_scalar(tag, value, self.global_steps[int(step)]) self.clear_buffer() + def close(self): + """Write remaining scalars and close the owned event writer.""" + try: + self.flush() + finally: + self.writer.close() + def update(self, name: str, values): """Add values to tensorboard.""" if isinstance(values, torch.Tensor): diff --git a/mini_trainer/logging/wandb.py b/mini_trainer/logging/wandb.py index 5f83363..5b71c2b 100644 --- a/mini_trainer/logging/wandb.py +++ b/mini_trainer/logging/wandb.py @@ -20,6 +20,14 @@ wandb = None +def _require_wandb(): + if wandb is None: + raise ImportError( + "wandb is not installed. Please install it using `uv pip install mt-trainer[recommended]`, " + "`uv sync --extra recommended`, or `uv add wandb`." + ) + + class WandbLogger(_Logger): """Weights & Biases logger.""" @@ -34,7 +42,6 @@ def __init__( run_id: str | None = None, ): """Wandb logger.""" - global wandb if steps is None: raise TypeError(f"Initializing {WandbLogger} with `steps=None` is invalid.") @@ -66,11 +73,7 @@ def __init__( if config and "input" in config: dataset = os.path.basename(config["input"]) - if wandb is None: - raise ImportError( - "wandb is not installed. Please install it using `uv pip install mini_trainer[recommended]`, " - "`uv sync --extra recommended`, or `uv add wandb`." - ) + _require_wandb() if wandb.run is None: tags = [] if machine: @@ -88,33 +91,25 @@ def __init__( tags = [t for t in tags if t] - display_name = run_name or name + options = {} if is_dist_avail_and_initialized(): run_id = run_id or "".join(c if c.isalnum() or c in "-_" else "_" for c in name)[:64] - settings = wandb.Settings( + options["settings"] = wandb.Settings( mode="shared", x_primary=(get_rank() == 0), x_update_finish_state=(get_rank() == 0), x_label=f"rank_{get_rank()}", ) - wandb.init( - project=project, - name=display_name, - id=run_id, - dir=output, - config=config, - tags=tags if tags else None, - settings=settings, - ) - else: - wandb.init( - project=project, - name=display_name, - **({"id": run_id} if run_id is not None else {}), - dir=output, - config=config, - tags=tags if tags else None, - ) + if run_id is not None: + options["id"] = run_id + wandb.init( + project=project, + name=run_name or name, + dir=output, + config=config, + tags=tags if tags else None, + **options, + ) self._internal_step = 0 self._statistics: dict[str, _Statistic] = dict() @@ -169,12 +164,8 @@ def update(self, name: str, values): super().update(name, values) def add_figure(self, name: str, figure: plt.Figure | np.ndarray | torch.Tensor | str, epoch: int = 0, **kwargs): - """Add figure to wandb, queued to commit atomically with step().""" - if wandb is None: - raise ImportError( - "wandb is not installed. Please install it using `uv pip install mini_trainer[recommended]`, " - "`uv sync --extra recommended`, or `uv add wandb`." - ) + """Log a rank-zero figure immediately with its epoch.""" + _require_wandb() if get_rank() > 0 or wandb.run is None: return @@ -213,11 +204,7 @@ def add_figure(self, name: str, figure: plt.Figure | np.ndarray | torch.Tensor | def step(self): """Step wandb logger.""" - if wandb is None: - raise ImportError( - "wandb is not installed. Please install it using `uv pip install mini_trainer[recommended]`, " - "`uv sync --extra recommended`, or `uv add wandb`." - ) + _require_wandb() if wandb.run is not None and self._current_step_logs: if get_rank() == 0: if self._internal_step < len(self.global_steps): diff --git a/mini_trainer/modeling/architectures/bioclip.py b/mini_trainer/modeling/architectures/bioclip.py index 27cada4..b79bd7c 100644 --- a/mini_trainer/modeling/architectures/bioclip.py +++ b/mini_trainer/modeling/architectures/bioclip.py @@ -12,8 +12,7 @@ def get_bioclip_encoder(version: str = "bioclip-2", pretrained: bool = True): import open_clip except ImportError as e: e.add_note( - "The `open_clip` module was not found in the current Python environment. " - "Please install with `pip install mini-trainer[bioclip]`." + "The `open_clip` module was not found in the current Python environment. Please install with `pip install mt-trainer[bioclip]`." ) raise @@ -50,7 +49,7 @@ def get_bioclip_model( def get_bioclip_models() -> list[str]: - """Dynamically fetches the list of BioCLIP model versions from Hugging Face.""" + """Discover BioCLIP versions on Hugging Face, falling back to known identifiers.""" fallback = ["bioclip", "bioclip-2", "bioclip-2.5-vith14", "bioclip-vit-b-16-inat-only"] try: from huggingface_hub import HfApi diff --git a/mini_trainer/modeling/architectures/core.py b/mini_trainer/modeling/architectures/core.py index 5b87240..a35215f 100644 --- a/mini_trainer/modeling/architectures/core.py +++ b/mini_trainer/modeling/architectures/core.py @@ -10,6 +10,7 @@ def _read_blacklist(): + """Use empty backend lists when the local blacklist is absent or unreadable.""" json_path = os.path.join(os.path.dirname(__file__), "blacklist.json") if os.path.exists(json_path): try: @@ -26,10 +27,7 @@ def _read_blacklist(): def resolve_embedding_dim( model: nn.Module, head_name: str, preprocess: Callable[[torch.Tensor], torch.Tensor], device: torch.device | None = None ) -> int: - """ - Attempts to resolve the embedding dimension using fast structural checks. - Falls back to a dummy forward pass only if all structural checks fail. - """ + """Infer feature width from model/head structure, falling back to a dummy pass.""" # timm standard if hasattr(model, "num_features") and isinstance(model.num_features, int): @@ -57,7 +55,7 @@ def resolve_embedding_dim( def _infer_via_dummy_pass(model: nn.Module, preprocess: Callable[[torch.Tensor], torch.Tensor], device: torch.device | None) -> int: - """The robust dummy pass fallback.""" + """Infer feature width from a preprocessed 224-pixel dummy image.""" if device is None: try: device = next(model.parameters()).device @@ -90,7 +88,7 @@ def _infer_via_dummy_pass(model: nn.Module, preprocess: Callable[[torch.Tensor], class Preprocess: def __init__(self, transform=None, func=None): - """Hook torchvision preprocessing function with load image from file to tensor.""" + """Decode image paths and apply the optional transform and postprocessor.""" self.transform = transform self.func = func @@ -117,7 +115,7 @@ def __repr__(self): def module_output_dim(module: nn.Module): - """Finds the output dimension by looking for the last parameter and returning the right-most size.""" + """Infer output width from the first dimension of the last non-scalar parameter.""" for param in reversed(list(module.parameters())): if param.ndim > 0: return param.shape[0] @@ -126,7 +124,7 @@ def module_output_dim(module: nn.Module): class WrappedEncoder(nn.Module): - """Barebones encoder wrapper.""" + """Wrap an encoder method, caching trainability for inference-mode selection.""" def __init__(self, encoder: nn.Module, encoder_method: str | None = None): # noqa: D107 super().__init__() @@ -142,11 +140,11 @@ def requires_grad_(self, requires_grad: bool = True): return self def get_extra_state(self): - """Standard PyTorch hook to save non-tensor state.""" + """Retain the selected encoder method in checkpoints.""" return {"encoder_method": self.encoder_method} def set_extra_state(self, state): - """Standard PyTorch hook to load non-tensor state.""" + """Restore the encoder method, defaulting older checkpoints to forward.""" if "encoder_method" in state: encoder_method = state["encoder_method"] else: @@ -167,7 +165,7 @@ def _inner(): class BackboneModel(nn.Module): - """A barebones wrapper for arbitrary encoder-only modules.""" + """Wrap an encoder with a replaceable linear classification head.""" def __init__(self, encoder: nn.Module, encoder_method: str | None = None): # noqa: D107 super().__init__() @@ -186,6 +184,7 @@ def forward(self, x): def infer_size_from_transform(transform: Any, fallback: int = 256, warn_on_fallback: bool = True) -> int: + """Infer preferred size from wrapper/crop/resize metadata, or return fallback.""" if transform is not None: # Unwrap common wrapper attributes if present for attr in ("transform", "processor"): diff --git a/mini_trainer/modeling/architectures/load.py b/mini_trainer/modeling/architectures/load.py index b78e1f9..b942ff5 100644 --- a/mini_trainer/modeling/architectures/load.py +++ b/mini_trainer/modeling/architectures/load.py @@ -16,11 +16,7 @@ class BackboneInfo(NamedTuple): - """Data container for a supported backbone model. - - Provides statically typed, attribute-based access (e.g. info.model) - and guaranteed ordering as a named tuple. - """ + """Backbone identifier, backend, dependency availability and blacklist status.""" model: str backend: str @@ -90,7 +86,11 @@ def get_model( transform: Any = None, device: torch.device | None = None, ): - """Get torchvision, timm, transformers, or bioclip model and preprocessing function by name.""" + """Return (model, head path, preprocess, embedding width, preferred image size). + + Resolve backend-prefixed names through adapters, or inspect a supplied module. + Preprocessing combines the supplied/discovered transform with dtype conversion. + """ default_transform = transform preferred_size = None if isinstance(backbone_model, str): @@ -115,7 +115,6 @@ def get_model( if not isinstance(backbone_model, nn.Module): raise ValueError("backbone_model must be a string or a torch.nn.Module") - # Resolve Transform if default_transform is None: for attr in ("transforms", "default_transform", "preprocess_transform", "transform"): if hasattr(backbone_model, attr): @@ -129,20 +128,17 @@ def get_model( default_transform = val break - # Build the exact preprocess pipeline preprocess_pipeline = Preprocess( transform=default_transform, func=preprocess_dtype if preprocess_dtype is None else make_convert_dtype(preprocess_dtype), ) - # Resolve exact classifier name (using named_modules for exact paths like "head.fc") backbone_classifier_name = None - # 1. Try timm's native method first + # Prefer timm's exact classifier module before matching names. if hasattr(backbone_model, "get_classifier") and callable(backbone_model.get_classifier): try: timm_classifier = backbone_model.get_classifier() - # Search all modules to find the exact match for name, module in backbone_model.named_modules(): if module is timm_classifier: backbone_classifier_name = name @@ -150,7 +146,6 @@ def get_model( except Exception: pass - # 2. Fallback to name matching if backbone_classifier_name is None: if isinstance(classifier_name, str): classifier_name = [classifier_name] @@ -161,7 +156,6 @@ def get_model( backbone_classifier_name = name break - # If not found at top level, search deeply if backbone_classifier_name is None: for name, module in backbone_model.named_modules(): # We split by '.' so we match the local name (e.g., 'fc' in 'head.fc') @@ -172,7 +166,6 @@ def get_model( if backbone_classifier_name is None: raise AttributeError(f"No classifier found matching names {classifier_name}") - # Calculate embedding dimension using our robust resolver embedding_dim = resolve_embedding_dim( model=backbone_model, head_name=backbone_classifier_name, preprocess=preprocess_pipeline, device=device ) @@ -184,86 +177,43 @@ def get_model( def list_supported_backbones() -> list[BackboneInfo]: - """Generates a list of supported models, showing backend and availability status.""" + """List backend models, retaining unavailable examples and blacklist flags.""" + import torchvision + rows = [] blacklist = load_blacklist() - # 1. Torchvision - import torchvision + def append(backend, names, available, prefix=""): + rows.extend(BackboneInfo(prefix + name, backend, available, name in blacklist.get(backend, [])) for name in names) - tv_models = [] - if hasattr(torchvision.models, "list_models"): - tv_models = torchvision.models.list_models() - for m in tv_models: - rows.append( - BackboneInfo( - model=m, - backend="torchvision", - availability=True, - blacklisted=m in blacklist.get("torchvision", []), - ) - ) + tv_models = torchvision.models.list_models() if hasattr(torchvision.models, "list_models") else [] + append("torchvision", tv_models, True) - # 2. BioCLIP - has_open_clip = False try: import open_clip # noqa: F401 - - has_open_clip = True except ImportError: - pass - bioclip_versions = get_bioclip_models() - for version in bioclip_versions: - rows.append( - BackboneInfo( - model=f"bioclip:{version}", - backend="bioclip", - availability=has_open_clip, - blacklisted=version in blacklist.get("bioclip", []), - ) - ) + has_open_clip = False + else: + has_open_clip = True + append("bioclip", get_bioclip_models(), has_open_clip, "bioclip:") - # 3. Timm - has_timm = False try: import timm - - has_timm = True except ImportError: - pass - - if has_timm: - timm_models = timm.list_models() - for m in timm_models: - rows.append( - BackboneInfo( - model=f"timm:{m}", - backend="timm", - availability=True, - blacklisted=m in blacklist.get("timm", []), - ) - ) + timm_models = ["vit_tiny_patch16_224", "resnet10t", "efficientnet_b0", "convnext_tiny"] + has_timm = False else: - popular_timm = ["vit_tiny_patch16_224", "resnet10t", "efficientnet_b0", "convnext_tiny"] - for m in popular_timm: - rows.append( - BackboneInfo( - model=f"timm:{m}", - backend="timm", - availability=False, - blacklisted=m in blacklist.get("timm", []), - ) - ) - - # 4. Transformers - has_transformers = False + timm_models = timm.list_models() + has_timm = True + append("timm", timm_models, has_timm, "timm:") + try: from transformers.models.auto.configuration_auto import CONFIG_MAPPING from transformers.models.auto.modeling_auto import MODEL_FOR_IMAGE_CLASSIFICATION_MAPPING - - has_transformers = True except ImportError: - pass + has_transformers = False + else: + has_transformers = True popular_transformers = { "vit": "google/vit-base-patch16-224", @@ -273,31 +223,12 @@ def list_supported_backbones() -> list[BackboneInfo]: "deit": "facebook/deit-tiny-patch16-224", "dinov2": "facebook/dinov2-base", } - if has_transformers: - supported_types = [] - for model_type, config_cls in CONFIG_MAPPING.items(): - if config_cls in MODEL_FOR_IMAGE_CLASSIFICATION_MAPPING: - supported_types.append(model_type) - for m in sorted(supported_types): - repo = popular_transformers.get(m, f"google/{m}-base-patch16-224") - rows.append( - BackboneInfo( - model=f"hf-hub:{repo}", - backend="transformers", - availability=True, - blacklisted=repo in blacklist.get("transformers", []), - ) - ) + supported_types = sorted( + model_type for model_type, config_cls in CONFIG_MAPPING.items() if config_cls in MODEL_FOR_IMAGE_CLASSIFICATION_MAPPING + ) + transformer_models = [popular_transformers.get(m, f"google/{m}-base-patch16-224") for m in supported_types] else: - for m, repo in sorted(popular_transformers.items()): - rows.append( - BackboneInfo( - model=f"hf-hub:{repo}", - backend="transformers", - availability=False, - blacklisted=repo in blacklist.get("transformers", []), - ) - ) - + transformer_models = [repo for _, repo in sorted(popular_transformers.items())] + append("transformers", transformer_models, has_transformers, "hf-hub:") return rows diff --git a/mini_trainer/modeling/architectures/timm.py b/mini_trainer/modeling/architectures/timm.py index 1a5c6fe..98d1f23 100644 --- a/mini_trainer/modeling/architectures/timm.py +++ b/mini_trainer/modeling/architectures/timm.py @@ -23,14 +23,12 @@ def get_timm_model( resize_size: int | None = None, **kwargs: Any, ) -> tuple[Any, Any, int]: - """Load timm model and resolve its default transform.""" + """Return (backbone, transform, preferred size) using timm's model configuration.""" try: import timm from timm.data import create_transform, resolve_model_data_config except ImportError as e: - e.add_note( - "The `timm` module was not found in the current Python environment. Please install with `pip install mini-trainer[timm]`." - ) + e.add_note("The `timm` module was not found in the current Python environment. Please install with `pip install mt-trainer[timm]`.") raise backbone_model = timm.create_model(model, pretrained=pretrained, **kwargs) diff --git a/mini_trainer/modeling/architectures/torchvision.py b/mini_trainer/modeling/architectures/torchvision.py index 34f3393..7d19e73 100644 --- a/mini_trainer/modeling/architectures/torchvision.py +++ b/mini_trainer/modeling/architectures/torchvision.py @@ -23,7 +23,7 @@ def get_torchvision_model( **kwargs: Additional arguments to pass to the model constructor. Returns: - The loaded model. + (Backbone, transform, None); the common loader infers size from the transform. """ weight_enum = torchvision.models.get_model_weights(model) diff --git a/mini_trainer/modeling/architectures/transformers.py b/mini_trainer/modeling/architectures/transformers.py index 6afb89b..4e2d33c 100644 --- a/mini_trainer/modeling/architectures/transformers.py +++ b/mini_trainer/modeling/architectures/transformers.py @@ -11,7 +11,7 @@ def __init__(self, preprocessor): except ImportError as e: e.add_note( "The `transformers` module was not found in the current Python environment. " - "Please install with `pip install mini-trainer[transformers]`." + "Please install with `pip install mt-trainer[transformers]`." ) raise assert isinstance(preprocessor, TorchvisionBackend) @@ -51,17 +51,16 @@ def get_transformers_model( resize_size: int | None = None, **kwargs: Any, ) -> tuple[Any, Any, int | None]: - """Load Hugging Face transformers classification model and resolve its default transform.""" + """Return (wrapped backbone, image processor, preferred size) for a Hugging Face model.""" try: from transformers import AutoConfig, AutoImageProcessor, AutoModelForImageClassification except ImportError as e: e.add_note( "The `transformers` module was not found in the current Python environment. " - "Please install with `pip install mini-trainer[transformers]`." + "Please install with `pip install mt-trainer[transformers]`." ) raise - # 1. DRY Fallback with strict exception handling and state immutability def _load_with_fallback(hf_class: Any, **load_kwargs: Any) -> Any: try: return hf_class.from_pretrained(model, **load_kwargs) @@ -81,23 +80,20 @@ def _load_with_fallback(hf_class: Any, **load_kwargs: Any) -> Any: hub_keys = {"local_files_only", "revision", "cache_dir", "force_download", "proxies", "token"} hub_kwargs = {k: v for k, v in kwargs.items() if k in hub_keys} - # --- 1. Model / Config Loading --- if pretrained: hf_model = _load_with_fallback(AutoModelForImageClassification, **kwargs) else: config = _load_with_fallback(AutoConfig, **hub_kwargs) hf_model = AutoModelForImageClassification.from_config(config) - # --- 2. Classification Head Resolution --- classifier_name = None - # Semantic Search: Use tuples instead of lists for faster instantiation for name in ("classifier", "logits", "head"): if hasattr(hf_model, name): classifier_name = name break - # Structural Search: Reverse iterate to guarantee we grab the final layer, not an intermediate one + # Fall back to the last top-level Linear layer. if classifier_name is None: for name, child in reversed(list(hf_model.named_children())): if isinstance(child, torch.nn.Linear): @@ -107,24 +103,19 @@ def _load_with_fallback(hf_class: Any, **load_kwargs: Any) -> Any: if classifier_name is None: raise AttributeError(f"Could not structurally determine the classification head for {model}.") - # Assuming TransformersBackboneWrapper is defined elsewhere backbone_model = TransformersBackboneWrapper(hf_model, classifier_name) - # --- 3. Processor Loading --- if default_transform is None: default_transform = _load_with_fallback(AutoImageProcessor, backend="torchvision", **hub_kwargs) - # Safe structural type checking if resize_size is not None and getattr(default_transform, "size", None): if isinstance(default_transform.size, dict): for key in ("height", "width", "shortest_edge"): if key in default_transform.size: default_transform.size[key] = resize_size - # Assuming TransformersPreprocessor is defined elsewhere default_transform = TransformersPreprocessor(default_transform) - # --- 4. Preferred Size Resolution --- cfg = getattr(hf_model, "config", None) preferred_size = getattr(cfg, "image_size", None) if cfg is not None else None diff --git a/mini_trainer/modeling/checkpoint.py b/mini_trainer/modeling/checkpoint.py index f05766a..18ee78b 100644 --- a/mini_trainer/modeling/checkpoint.py +++ b/mini_trainer/modeling/checkpoint.py @@ -8,20 +8,16 @@ def average_checkpoints(inputs, map_location=None, weights_only=True): - """Loads checkpoints from inputs and returns a model with averaged weights. + """Average tensor entries under each checkpoint's ``model`` key. - Original implementation taken from: - https://github.com/pytorch/fairseq/blob/a48f235636557b8d3bc4922a6fa90f3a0fa57955/scripts/average_checkpoints.py#L16 - - Args: - inputs: An iterable of string paths of checkpoints to load from. - map_location: If not specified attempts a sensible default, otherwise passed directly to ``torch.load``. - weights_only: Passed to ``torch.load``. + Inputs must be a nonempty path sequence with identical ordered model keys. + Floating entries use arithmetic means; integer entries use floor division. + Other checkpoint fields, including optimizer state, come from the first input. + Non-tensor model metadata is not supported. Loading defaults to CPU; + map_location and weights_only are forwarded to torch.load. - Returns: - A dict of string keys mapping to various values. The 'model' key - from the returned dict should correspond to an OrderedDict mapping - string parameter names to torch Tensors. + Based on: + https://github.com/pytorch/fairseq/blob/a48f235636557b8d3bc4922a6fa90f3a0fa57955/scripts/average_checkpoints.py#L16 """ params_dict = OrderedDict() params_keys = None @@ -62,54 +58,22 @@ def average_checkpoints(inputs, map_location=None, weights_only=True): def store_model_weights(model, checkpoint_path, checkpoint_key="model", strict=True): - """This method can be used to prepare weights files for new models. It receives as - input a model architecture and a checkpoint from the training script and produces - a file with the weights ready for release. - - Examples: - from torchvision import models as M - - # Classification - model = M.mobilenet_v3_large(weights=None) - print(store_model_weights(model, './class.pth')) - - # Quantized Classification - model = M.quantization.mobilenet_v3_large(weights=None, quantize=False) - model.fuse_model(is_qat=True) - model.qconfig = torch.ao.quantization.get_default_qat_qconfig('qnnpack') - _ = torch.ao.quantization.prepare_qat(model, inplace=True) - print(store_model_weights(model, './qat.pth')) - - # Object Detection - model = M.detection.fasterrcnn_mobilenet_v3_large_fpn(weights=None, weights_backbone=None) - print(store_model_weights(model, './obj.pth')) - - # Segmentation - model = M.segmentation.deeplabv3_mobilenet_v3_large(weights=None, weights_backbone=None, aux_loss=True) - print(store_model_weights(model, './segm.pth', strict=False)) - - Args: - model: The model on which the weights will be loaded for validation purposes. - checkpoint_path: The path of the checkpoint we will load. - checkpoint_key: The key of the checkpoint where the model weights are stored. - Default: "model". - strict: whether to strictly enforce that the keys - in :attr:`state_dict` match the keys returned by this module's - :meth:`~torch.nn.Module.state_dict` function. Default: ``True`` - - Returns: - The location where the weights are saved. + """Validate checkpoint weights against a copy of model and save its state dict. + + Load checkpoint_path on CPU with weights_only=True, selecting checkpoint_key + (default ``model``) and forwarding strict to load_state_dict. For ``model_ema``, + remove the averaging counter and ``module.`` prefix before loading. + + Return the absolute path to ``weights-.pth`` beside the checkpoint. + The caller's model is unchanged. With strict=False, missing parameters retain + the supplied model's values. """ - # Store the new model next to the checkpoint_path checkpoint_path = os.path.abspath(checkpoint_path) output_dir = os.path.dirname(checkpoint_path) - # Deep copy to avoid side effects on the model object. model = copy.deepcopy(model) checkpoint = torch.load(checkpoint_path, map_location="cpu", weights_only=True) - # Load the weights to the model to validate that everything works - # and remove unnecessary weights (such as auxiliaries, etc.) if checkpoint_key == "model_ema": del checkpoint[checkpoint_key]["n_averaged"] torch.nn.modules.utils.consume_prefix_in_state_dict_if_present(checkpoint[checkpoint_key], "module.") @@ -120,7 +84,6 @@ def store_model_weights(model, checkpoint_path, checkpoint_key="model", strict=T sha256_hash = hashlib.sha256() with open(tmp_path, "rb") as f: - # Read and update hash string value in blocks of 4K for byte_block in iter(lambda: f.read(4096), b""): sha256_hash.update(byte_block) hh = sha256_hash.hexdigest() @@ -138,7 +101,12 @@ def set_weight_decay( norm_classes: list[type] | None = None, custom_keys_weight_decay: list[tuple[str, float]] | None = None, ): - """Set weight decay on parameter groups.""" + """Return trainable parameter groups with per-group weight decay. + + Custom keys take precedence over normalization-module and default decay. + A key containing a dot matches a full parameter path; other keys match local + parameter names. The first matching custom key wins. + """ if not norm_classes: norm_classes = [ torch.nn.modules.batchnorm._BatchNorm, diff --git a/mini_trainer/modeling/classifier.py b/mini_trainer/modeling/classifier.py index 2e78fb7..bd9a884 100644 --- a/mini_trainer/modeling/classifier.py +++ b/mini_trainer/modeling/classifier.py @@ -3,32 +3,27 @@ from collections import OrderedDict, defaultdict from contextlib import contextmanager from dataclasses import dataclass -from typing import Any, TypeVar +from functools import lru_cache +from typing import Any import numpy as np import torch import torch.nn as nn import torch.nn.functional as F from torch._prims_common import DeviceLikeType +from torch.nn.utils.parametrizations import weight_norm from mini_trainer import get_logger from mini_trainer.utils import class_path, cosine_to_zscore, dtype_to_string, import_class, string_to_dtype from .architectures import get_model -from .prior import prior_from_labels +from .context import EmbeddingContext from .quantized_training import load_training_weights, restore_quantized_training -try: - from torch.nn.utils.parametrizations import weight_norm -except Exception: # fallback for older installs - from torch.nn.utils import weight_norm - -from functools import lru_cache - -from .context import EmbeddingContext +class Classifier(nn.Module): + """Classification head with optional hidden layer, normalization and class masking.""" -class Classifier(nn.Module): # noqa: D101 TODO _version = 1 @classmethod @@ -69,9 +64,7 @@ def _normalize_layer(cls, layer: nn.Linear, orthogonal_init: bool = False): @staticmethod def extract_metadata(state: dict[str, Any]) -> dict[str, Any]: - """Scans the state dictionary for Classifier metadata. - Returns the config dict if found, otherwise None. - """ + """Return a copy of stored classifier metadata, or an empty dictionary.""" for key, value in state.items(): if key.endswith("._extra_state") and isinstance(value, dict): if "mini_trainer_version" in value: @@ -94,7 +87,6 @@ def __init__( # noqa: D107 **metadata, ): super().__init__() - # Input sanitization and checking if not isinstance(in_features, int) or not isinstance(out_features, int): raise TypeError( f"Supplied classification head input and output dimensions {in_features}x{out_features} " @@ -116,7 +108,6 @@ def __init__( # noqa: D107 if not isinstance(normalized, bool): raise TypeError(f"Normalized should be a `bool`, not `{normalized}` ({type(normalized)}).") - # Store metadata metadata.update( { "mini_trainer_version": self._version, @@ -131,16 +122,12 @@ def __init__( # noqa: D107 ) self._metadata = metadata - # Create one hidden layer self.hidden = hidden and nn.Linear(in_features, self.preclassification_size) - # Create a dropout layer (if hidden) self.dropout = hidden and nn.Dropout(p=droprate) - # Create a BatchNormalization layer self.batch_norm = nn.BatchNorm1d(self.preclassification_size) - # Create linear classification layer layer = nn.Linear(self.preclassification_size, out_features, bias=True) self.normalized = normalized self.linear = self._normalize_layer(layer, True) if self.normalized else layer @@ -149,7 +136,6 @@ def __init__( # noqa: D107 data=self._metadata["prior"], device=self.linear.weight.device, dtype=self.linear.weight.dtype ) - # Prepare class masking buffer if active_indices is not None: self.register_buffer("active_indices", active_indices, persistent=True) else: @@ -231,10 +217,8 @@ def preclassification(self, x: torch.Tensor) -> torch.Tensor: x = self.hidden(x) # type: ignore x = F.leaky_relu(x) if self.normalized: - # Output is unit vectors return F.normalize(x, 2, -1) else: - # Output is MVN return self.batch_norm(x) def forward(self, x: torch.Tensor) -> torch.Tensor: @@ -263,8 +247,6 @@ def set_extra_state(self, state: Any): UserWarning, ) - # Implement migration logic here if it becomes relevant - self._metadata.update(state) def _preprocess_metadata(self, cls2idx=None, **kwargs): @@ -319,7 +301,6 @@ def load( raise NotImplementedError( "DEPRECATED: This method of logit adjustment is currently defunct. Please use EMLACrossEntropy instead." ) - kwargs["prior"] = prior_from_labels(train_labels, cls2idx=cls2idx) with device: architecture.add_module(architecture_output_name, cls(**kwargs)) for k, v in cfg.items(): @@ -471,7 +452,6 @@ def build( if v != kwargs[k]: get_logger().debug(f"Model configuration option '{k}' overridden by value stored in config: {kwargs[k]} ==> {v}") kwargs[k] = v - # Rebuild (and load) integrated backbone and classifier model_type_str = model_type if isinstance(model_type, str) else class_path(model_type) model = cls.load(model_type_str, head_name, architecture, state, device, dtype, **kwargs) return model, model_preprocess @@ -479,16 +459,13 @@ def build( @dataclass class PredictionItem: - """Simple data container. - Auto-converts inputs to native Python types on initialization. - """ + """Prediction record with native Python label, confidence and index values.""" label: str confidence: float index: int def __post_init__(self): - # Factory coercion: ensures native types immediately self.label = str(self.label) self.confidence = float(self.confidence) self.index = int(self.index) @@ -501,14 +478,8 @@ def to_dict(self): return {"label": self.label, "confidence": self.confidence, "index": self.index} -T = TypeVar("T", bound=PredictionItem) -I = TypeVar("I") # noqa: E741 - - class BasePrediction[T: PredictionItem, I]: - """Standard PyTorch Prediction class. - Assumes inputs are Tensors. Subclass to handle other types. - """ + """Prediction container; subclasses define score processing and label mapping.""" ITEM_CLASS: type[T] = PredictionItem # type: ignore items: list[T] @@ -535,7 +506,6 @@ def __init__( # noqa: D107 for lab, conf, idx in zip(self.labels, self.confidence, self.indices) ] - # --- Standard Implementations (override) --- @property def idx2cls(self): raise NotImplementedError() @@ -549,7 +519,6 @@ def _translate(self): def _extract_confidence(self, raw_prediction: I): raise NotImplementedError() - # --- Convenience & Serialization (do not override) --- def __len__(self): return len(self.items) @@ -591,22 +560,11 @@ def _process(self, raw_prediction): return torch.topk(raw_prediction, k) def _translate(self): - if self.idx2cls: - _idx2cls = self.idx2cls.copy() - - def fmt_idx(i: int | torch.Tensor): - if isinstance(i, torch.Tensor): - i = int(i.item()) - return _idx2cls[i] - - else: - - def fmt_idx(i: int | torch.Tensor): - if isinstance(i, torch.Tensor): - i = int(i.item()) - return str(i) - - return [[fmt_idx(i) for i in idxs] for idxs in self.indices] + indices = self.indices.tolist() + mapping = self.idx2cls + if mapping: + return [[mapping[i] for i in row] for row in indices] + return [[str(i) for i in row] for row in indices] def _extract_confidence(self, raw_prediction): if not ( @@ -624,13 +582,7 @@ def _extract_confidence(self, raw_prediction): @contextmanager def bypass_submodule(model: nn.Module, submodule_path: str): - """Temporarily replaces a submodule with nn.Identity() for a forward pass. - - Args: - model: The parent PyTorch module. - submodule_path: The dotted path to the submodule (e.g., 'backbone.layer3.conv1'). - """ - # 1. Traverse the dotted path to find the direct parent of the target + """Replace a dotted-path submodule with Identity, restoring it on context exit.""" parts = submodule_path.split(".") parent = model for part in parts[:-1]: @@ -638,16 +590,13 @@ def bypass_submodule(model: nn.Module, submodule_path: str): target_name = parts[-1] - # 2. Keep a reference to the original submodule original_module = getattr(parent, target_name) try: - # 3. Swap in the no-op module setattr(parent, target_name, nn.Identity()) yield finally: - # 4. Guarantee restoration, even if an error is thrown during the yield setattr(parent, target_name, original_module) @@ -684,8 +633,7 @@ def backbone(model: nn.Module): def classification_module(model: nn.Module): - """Retrieve the classification module of a model created with `mini_trainer.classifier.Classifier.build()`.""" - # Unwrap torch.compile (OptimizedModule) and DDP wrappers + """Find the classification head, unwrapping torch.compile and DDP wrappers.""" if hasattr(model, "_orig_mod"): _orig = model._orig_mod assert isinstance(_orig, nn.Module) diff --git a/mini_trainer/modeling/context.py b/mini_trainer/modeling/context.py index 77f6c0d..ec0a090 100644 --- a/mini_trainer/modeling/context.py +++ b/mini_trainer/modeling/context.py @@ -2,7 +2,7 @@ class SupervisionContext: - """Used for passing a target to the classification module.""" + """Process-global target passed to classifier heads; cleared on context exit.""" _target: torch.Tensor | None = None @@ -29,7 +29,7 @@ def __exit__(self, exc_type, exc_val, exc_tb): class EmbeddingContext: - """Used for passing embeddings from the classification module to the criterion (or elsewhere).""" + """Process-global embedding handoff preserving gradients; nested contexts are rejected.""" # Dynamo can carry dictionary mutations out of a compiled graph. Assigning # a Tensor to a class attribute instead forces a graph break at publication. diff --git a/mini_trainer/modeling/contrastive.py b/mini_trainer/modeling/contrastive.py deleted file mode 100644 index 1a78137..0000000 --- a/mini_trainer/modeling/contrastive.py +++ /dev/null @@ -1,96 +0,0 @@ -"""Author: Yonglong Tian (yonglong@mit.edu) -Date: May 07, 2020 -From: https://github.com/HobbitLong/SupContrast/blob/master/losses.py -""" - -import torch -import torch.nn as nn - -from .classifier import EmbeddingContext, SupervisionContext - - -class SupConLoss(nn.modules.loss._Loss): - """Supervised Contrastive Learning: https://arxiv.org/pdf/2004.11362.pdf. - It also supports the unsupervised contrastive loss in SimCLR. - """ - - def __init__( # noqa: D107 - self, temperature: float = 0.07, base_temperature: float = 0.07 - ): - super().__init__() - self.temperature = temperature - self.base_temperature = base_temperature - - def forward(self): - """Compute contrastive loss for model. - If both `labels` and `mask` are None, it degenerates to SimCLR unsupervised loss: - https://arxiv.org/pdf/2002.05709.pdf - - Args: - features: hidden vector of shape [bsz, n_views, ...]. - labels: ground truth of shape [bsz]. - mask: contrastive mask of shape [bsz, bsz], mask_{i,j}=1 if sample j - has the same class as sample i. Can be asymmetric. - - Returns: - A loss scalar. - """ - if not EmbeddingContext.active(): - raise RuntimeError("Contrastive loss cannot be computed when `EmbeddingContext` is not active.") - features = EmbeddingContext.get() - if features.ndim == 2: - features = features.unsqueeze(1) - assert features is not None - labels = SupervisionContext.get() - device = torch.device("cuda") if features.is_cuda else torch.device("cpu") - - if len(features.shape) < 3: - raise ValueError("`features` needs to be [bsz, n_views, ...],at least 3 dimensions are required") - if len(features.shape) > 3: - features = features.view(features.shape[0], features.shape[1], -1) - - batch_size = features.shape[0] - if labels is None: - mask = torch.eye(batch_size, dtype=torch.float32).to(device) - else: - labels = labels.contiguous().view(-1, 1) - if labels.shape[0] != batch_size: - raise ValueError("Num of labels does not match num of features") - mask = torch.eq(labels, labels.T).float().to(device) - - contrast_count = features.shape[1] - contrast_feature = torch.cat(torch.unbind(features, dim=1), dim=0) - - # compute logits - anchor_dot_contrast = torch.div(contrast_feature @ contrast_feature.T, self.temperature) - # for numerical stability - logits_max, _ = torch.max(anchor_dot_contrast, dim=1, keepdim=True) - logits = anchor_dot_contrast - logits_max.detach() - - # tile mask - mask = mask.repeat(contrast_count, contrast_count) - # mask-out self-contrast cases - logits_mask = torch.scatter(torch.ones_like(mask), 1, torch.arange(batch_size * contrast_count).view(-1, 1).to(device), 0) - mask = mask * logits_mask - - # # compute log_prob - # exp_logits = torch.exp(logits) * logits_mask - # log_prob = logits - torch.log(exp_logits.sum(1, keepdim=True)) - log_prob = logits - torch.logsumexp(logits + 1e-9 * (1 - mask), dim=1, keepdim=True) - - # compute mean of log-likelihood over positive - # modified to handle edge cases when there is no positive pair - # for an anchor point. - # Edge case e.g.:- - # features of shape: [4,1,...] - # labels: [0,1,1,2] - # loss before mean: [nan, ..., ..., nan] - mask_pos_pairs = mask.sum(1) - mask_pos_pairs = torch.where(mask_pos_pairs < 1e-6, 1, mask_pos_pairs) - mean_log_prob_pos = (mask * log_prob).sum(1) / mask_pos_pairs - - # loss - loss = -(self.temperature / self.base_temperature) * mean_log_prob_pos - loss = loss.view(contrast_count, batch_size).mean() - - return loss diff --git a/mini_trainer/modeling/ema.py b/mini_trainer/modeling/ema.py index 772a9d5..8f89e45 100644 --- a/mini_trainer/modeling/ema.py +++ b/mini_trainer/modeling/ema.py @@ -50,11 +50,10 @@ def distill_rate(self, step: int) -> float: return float(min(1.0, max(0.0, (step - self.distill_start) / max(1.0, self.total_steps - self.distill_start)))) def teach(self, step: int, input: torch.Tensor, student: torch.Tensor | list[torch.Tensor]): - """TODO. + """Return ramped KL distillation loss, or a zero tensor when disabled. - Returns: - KL-divergence between the model EMA and the ``student`` logits. - If the ``enabled=False``, ``0.0``. + The zero uses the student's dtype and device. See the class warning before + enabling this unsupported teacher. """ dr = self.distill_rate(step) if isinstance(student, (list, tuple)): diff --git a/mini_trainer/modeling/mask.py b/mini_trainer/modeling/mask.py index d17bc7f..8cb2f11 100644 --- a/mini_trainer/modeling/mask.py +++ b/mini_trainer/modeling/mask.py @@ -36,22 +36,18 @@ def restrict_class_labels(model: nn.Module, labels: list[str]) -> dict: def set_classification_mask(model: nn.Module, indices: list[int] | torch.Tensor | np.ndarray | None = None): - """Mask a selection of output features (classes). + """Retain selected output indices of a Classifier-built model. - Args: - model: A model created with `mini_trainer.classifier.Classifier.build()`. - indices: Indices to (reversibly) mask in forward pass. If None the mask is disabled. + Pass None to restore all classes. Indices refer to original weight rows. """ classification_module(model).set_active_features(indices) @contextmanager def mask_classifier(model: nn.Module, indices: list[int] | torch.Tensor | np.ndarray | None = None): - """Mask a selection of output features (classes). + """Temporarily select output indices, restoring the previous mask on exit. - Args: - model: A model created with `mini_trainer.classifier.Classifier.build()`. - indices: Indices to (reversibly) mask in forward pass. If None the mask is disabled. + Indices refer to original weight rows; None temporarily enables all classes. """ classifier = classification_module(model) orig_indices = classifier.active_indices diff --git a/mini_trainer/modeling/onnx.py b/mini_trainer/modeling/onnx.py index 29e947c..530e6b6 100644 --- a/mini_trainer/modeling/onnx.py +++ b/mini_trainer/modeling/onnx.py @@ -75,7 +75,7 @@ def _dependencies(): import onnxruntime import onnxscript # noqa: F401 except ImportError as error: - raise ImportError("ONNX export requires optional dependencies. Install mini_trainer[export].") from error + raise ImportError("ONNX export requires optional dependencies. Install mt-trainer[export].") from error return onnx, onnxruntime @@ -267,7 +267,10 @@ def export_onnx( "classifiers": classifiers, "preprocessing": {"in_graph": False, "recipe": preprocessing, "requires_configuration": preprocessing is None}, "opset": opset_version, - "versions": {name: version(name) for name in ("mini_trainer", "torch", "torchvision", "onnx", "onnxscript", "onnxruntime")}, + "versions": { + name: version("mt-trainer" if name == "mini_trainer" else name) + for name in ("mini_trainer", "torch", "torchvision", "onnx", "onnxscript", "onnxruntime") + }, "verification": { "provider": "CPUExecutionProvider", "reference_device": str(reference_device), diff --git a/mini_trainer/modeling/prior.py b/mini_trainer/modeling/prior.py index d2a2553..eecc118 100644 --- a/mini_trainer/modeling/prior.py +++ b/mini_trainer/modeling/prior.py @@ -5,18 +5,16 @@ def prior_logit_adjustment(counts: list[int], C: float = 1.0, eps: float = 1e-7) -> list[float]: - """Computes dimension-independent biases based on Bayesian Logit Adjustment. - Formula: b_i = -C * log(K * p_i) + """Return mean-centered biases from b_i = -C * log(K * p_i). - Ref: https://arxiv.org/abs/2007.07314 + Frequencies are clamped below by eps before taking logs. + Reference: https://arxiv.org/abs/2007.07314 """ total_samples = sum(counts) ncls = len(counts) biases = [-C * math.log(ncls * max(c / total_samples, eps)) for c in counts] - # Optional but recommended: Center the biases so their mean is 0. - # This keeps the initial Softmax logits numerically stable. mean_bias = sum(biases) / ncls centered_biases = [b - mean_bias for b in biases] @@ -24,15 +22,14 @@ def prior_logit_adjustment(counts: list[int], C: float = 1.0, eps: float = 1e-7) def prior_ldam_shift(counts: list[int], C: float = 1.0, eps: float = 1e-7) -> list[float]: - """Computes dimension-independent biases using LDAM generalization bounds. - Formula: b_i = C * (N_i^{-1/4} - N_max^{-1/4}) + """Return mean-centered biases from C * (N_i**(-1/4) - N_max**(-1/4)). - Ref: https://arxiv.org/abs/1906.07413 + Counts are clamped below by eps in the first term. + Reference: https://arxiv.org/abs/1906.07413 """ n_max = max(counts) biases = [C * ((max(c, eps) ** -0.25) - (n_max**-0.25)) for c in counts] - # Again, centering helps network initialization stability mean_bias = sum(biases) / len(biases) centered_biases = [b - mean_bias for b in biases] @@ -40,13 +37,10 @@ def prior_ldam_shift(counts: list[int], C: float = 1.0, eps: float = 1e-7) -> li def prior_scratch(counts: list[int], **kwargs): - """Computes dimension-independent biases using Z-scored negative log-frequencies. - Formula: b_i = -(log(N_i) - mu) / sigma + """Return negative standardized log-counts (sample standard deviation). - Note: This is an experimental ad-hoc method. It standardizes the log-counts - to have a mean of 0 and a variance of 1. While it correctly penalizes majority - classes, it can become numerically unstable if the dataset is perfectly balanced - (sigma approaches 0) and maps zero-counts to the same value as singletons (since log(1) == 0). + Experimental: zero counts map to log(1), and equal log-counts or a single + class cause division by zero. """ prior = [math.log(c) if c > 0 else 0 for c in counts] pmu = sum(prior) / len(prior) diff --git a/mini_trainer/modeling/quantization.py b/mini_trainer/modeling/quantization.py index 7fec446..887c391 100644 --- a/mini_trainer/modeling/quantization.py +++ b/mini_trainer/modeling/quantization.py @@ -19,7 +19,7 @@ from .classifier import Classifier from .context import EmbeddingContext, SupervisionContext -from .onnx import _flatten, _json_value, _structure +from .onnx import _copy_for_export, _flatten, _json_value, _structure def _backend(): @@ -31,7 +31,7 @@ def _backend(): get_default_x86_inductor_quantization_config, ) except ImportError as error: - raise ImportError("INT8 quantization requires mini_trainer[quantization].") from error + raise ImportError("INT8 quantization requires mt-trainer[quantization].") from error return quantize_pt2e, export_utils, X86InductorQuantizer, get_default_x86_inductor_quantization_config, lower_pt2e_quantized_to_x86 @@ -155,13 +155,8 @@ def prepare_int8(model: nn.Module, example_input: torch.Tensor, *, qat=False, re if EmbeddingContext.active() or SupervisionContext.get() is not None: raise RuntimeError("Prepare outside embedding/supervision contexts.") backend, _, quantizer_cls, config_factory, _ = _backend() - while isinstance(model, (nn.DataParallel, nn.parallel.DistributedDataParallel)) or hasattr(model, "_orig_mod"): - model = model._orig_mod if hasattr(model, "_orig_mod") else model.module with torch.random.fork_rng(devices=[]): - model = copy.deepcopy(model).cpu().float().eval() - for module in model.modules(): - if isinstance(module, Classifier): - module._dirty_cache.clear() + model = _copy_for_export(model, torch.float32) # Populate masks and immutable evaluation caches outside strict capture. with torch.no_grad(): outputs = model(example_input) diff --git a/mini_trainer/modeling/quantized_training.py b/mini_trainer/modeling/quantized_training.py index 93475e9..da75db0 100644 --- a/mini_trainer/modeling/quantized_training.py +++ b/mini_trainer/modeling/quantized_training.py @@ -12,7 +12,7 @@ def _backend(): try: from . import _quantized_training except ImportError as error: - raise ImportError("CUDA INT8 training requires mini_trainer[quantization] and a compatible CUDA/Triton installation.") from error + raise ImportError("CUDA INT8 training requires mt-trainer[quantization] and a compatible CUDA/Triton installation.") from error return _quantized_training diff --git a/mini_trainer/predict.py b/mini_trainer/predict.py index 564c760..612391b 100644 --- a/mini_trainer/predict.py +++ b/mini_trainer/predict.py @@ -44,36 +44,35 @@ def main( # noqa: D417 collector_cls_kwargs: dict[str, Any] = {}, class_list: str | None = None, ): - """Predict with a classifier. + """Run inference and save collector output under ``output/name``. + + The default collector writes ``mini_metric.csv``; ``RawResultCollector`` + writes logits, labels and paths to ``predictions.pt``. Configuration is saved + alongside results. Only model, dataloader and collector keyword groups are + consumed; the other builder keyword groups remain for API compatibility. Args: - input: Path to a directory containing a subdirectory for each class, where - each subdirectory's name corresponds to the class name. - It is also possible to pass the path to a parquet as generated by `gbifxdl` instead of a directory. - weights: Path to model weight file. - output: Root directory for all created files and directories. - Default is current working directory ``'.'``. - name: Name of the output model. If not provided, a descriptive name - will be inferred from other arguments. Default is ``None``. - threshold: Confidence threshold. - class_list: UTF-8 file with one candidate class label per line (leaf labels - for hierarchical models). Restricts predictions, not input images or - ground truth. Blank lines and duplicate labels are ignored. - data_index: File containing metadata describing test set from training run to run inference on. - subsample: Subsampling multiplier (2 = 50%, 3 = 33.3%, etc.). - device: Device used for training (e.g., ``'cuda'``, ``'cpu'``). Default is ``'cuda'``. - dtype: PyTorch data type for images during training and validation (e.g., ``'bfloat16'``). - The model parameters are always stored in float32 with training AMP. - Default is ``'float16'``. - builder: An object inheriting from ``mini_trainer.builders.BaseBuilder``. - This object is responsible for instantiating the model, dataloader, augmentation, - optimizer, scaler, EMA, criterion (loss function) and learning rate scheduler. - **kwargs: - Additional arguments are passed to the various builder methods. - See ``mini_trainer.builders.BaseBuilder`` for details. + input: Image, image directory or gbifxdl Parquet. Labelled directories and + Parquet retain supplied test splits; mixed/root-level images are unlabelled. + weights: Trained model weights. + output: Parent directory for results. + name: Subdirectory name, sanitized and incremented to avoid collisions. + ``None`` uses the legacy API name ``train``; the CLI defaults to ``predict``. + threshold: Acceptance threshold recorded by the default CSV collector. + data_index: Metadata with path, label and split arrays. When supplied, + its test rows replace discovery from ``input``. + class_spec: Existing JSON file or dictionary of model-construction metadata. + subsample: Keep every Nth selected observation (2 keeps half). + device: Inference device. + dtype: CUDA autocast dtype and raw-logit output dtype. The default builder + loads float32 model parameters; the default loader supplies uint8 images. + builder: Supplies model/preprocessing and inference-loader hooks. + collector_cls: Collects batches and saves predictions. + class_list: UTF-8 file with one candidate label per line (leaf labels for + hierarchical models). Blank/duplicate lines are ignored; input images + and ground truth are retained independently of candidate filtering. """ orig_args = locals() - # Prepare state if name is None: name = "train" name = increment_name_dir(name, output) @@ -91,7 +90,6 @@ def main( # noqa: D417 dtype = getattr(torch, dtype.removeprefix("torch.").strip().lower()) assert isinstance(dtype, torch.dtype) - # Dump resolved configuration using locals and normalized values dump_resolved_config( output_dir=output_dir, fn=main, @@ -106,7 +104,6 @@ def main( # noqa: D417 verbose=collector_cls_kwargs.get("verbose", False), ) - # Prepare model if class_spec is None: class_spec = {} if isinstance(class_spec, str): @@ -134,7 +131,6 @@ def main( # noqa: D417 ) # Keep original metadata for resolving ground truth, including excluded labels. - # Prepare dataloader labels: list[int] | list[list[int]] | None = None if data_index is not None: _data_metadata = get_metadata(data_index, **metadata) @@ -151,15 +147,6 @@ def main( # noqa: D417 f"Expected `dataloader_builder` to return an objectsinheriting from `torch.utils.data.DataLoader`, but got `{type(loader)}." ) - # (could be used for test-time-augmentation at a later stage) - # Prepare augmentation - # augmentation = builder.build_augmentation(dtype=dtype, **augmentation_builder_kwargs) - # if not isinstance(augmentation, torchvision.transforms.Compose): - # raise TypeError( - # 'Expected `augmentation_builder` to return an objects' - # f'inheriting from `torchvision.transforms.Compose`, but got `{type(augmentation)}.' - # ) - collector = collector_cls(model=nn_model, **collector_cls_kwargs) idx = 0 @@ -189,13 +176,11 @@ def main( # noqa: D417 del loader, nn_model collector.save(os.path.join(output, name), threshold=threshold) - # collector.evaluate(os.path.join(output, name)) def cli(description="Classify images with a trained model", **extra_kwargs): # noqa: D103 parser = ArgumentParser(prog="predict", description=description, formatter_class=Formatter) - # Optional YAML config support cfg_args = parser.add_argument_group("Config [optional]") cfg_args.add_argument( "--config", @@ -224,8 +209,7 @@ def cli(description="Classify images with a trained model", **extra_kwargs): # type=str, default=None, required=False, - help="Path to a directory containing a subdirectory for each class,\n" - "where the name of each subdirectory should correspond to the name of the class.", + help="Image file, image directory or gbifxdl Parquet; supplied test splits are retained.", ) mod_args = parser.add_argument_group("Model [optional]") mod_args.add_argument( @@ -243,7 +227,7 @@ def cli(description="Classify images with a trained model", **extra_kwargs): # dest="weights", default=None, required=False, - help="Model weights used to initialize model before training.", + help="Trained model weights.", ) out_args = parser.add_argument_group("Output [optional]") out_args.add_argument( @@ -252,7 +236,7 @@ def cli(description="Classify images with a trained model", **extra_kwargs): # type=str, default=".", required=False, - help='Root directory for all created files and directories.\nDefault is current working directory (".").', + help='Parent directory for prediction results (default=".").', ) out_args.add_argument( "-n", "--name", type=str, default="predict", required=False, help='Name of the output predictions.\nDefault is "predict".' @@ -264,7 +248,7 @@ def cli(description="Classify images with a trained model", **extra_kwargs): # type=float, default=None, required=False, - help="Confidence threshold for predictions.\nUsed for mini_metrics csv.\nDefault is 0 (always predict).", + help="Acceptance threshold for mini_metrics CSV output (default=0, always predict).", ) inf_args.add_argument( "-r", @@ -272,7 +256,7 @@ def cli(description="Classify images with a trained model", **extra_kwargs): # action="store_true", default=False, required=False, - help="If True the raw unnormalized logits will be stored alongside the labels without any further processing. Default=False.", + help="Save raw logits, labels and paths to predictions.pt instead of prediction CSV.", ) inf_args.add_argument( "-D", @@ -280,10 +264,7 @@ def cli(description="Classify images with a trained model", **extra_kwargs): # type=str, default=None, required=False, - help='JSON file containing three arrays with keys "path", "split" and "class".\n' - 'The arrays should all have equal lengths and can be considered "columns" in a table.\n' - 'The "split" column should contain values "train", "validation" or other,\n' - 'and the "class" column should contain the the class *names* (not indices) for each file/path.', + help='Metadata with "path", "label" and "split" arrays; only test rows are used. Overrides input discovery.', ) mod_args.add_argument( "-C", @@ -291,9 +272,7 @@ def cli(description="Classify images with a trained model", **extra_kwargs): # type=str, default=None, required=False, - help="Path to a JSON file containing the class name to index mapping and other\n" - "important information for constructing models and dataloaders.\n" - "If it doesn't exist, one will be created based on the directories found under `output` if it is set.", + help="Existing JSON file with class mappings and other model-construction metadata.", ) inf_args.add_argument( "--batch_size", @@ -301,7 +280,7 @@ def cli(description="Classify images with a trained model", **extra_kwargs): # dest="dataloader_builder_kwargs.batch_size", default=None, required=False, - help="Number of images used in each mini-batch for training/validation (default=64).", + help="Images per inference batch (default=64).", ) cfg_args = parser.add_argument_group("Runtime [optional]") cfg_args.add_argument( @@ -315,16 +294,15 @@ def cli(description="Classify images with a trained model", **extra_kwargs): # type=int, default=None, required=False, - help="Subsample the data for training and eval (useful for testing). Default is None (no subsampling).", + help="Keep every Nth selected image (default: all images).", ) - cfg_args.add_argument("--device", type=str, default=None, required=False, help='Device used for training (default="cuda").') + cfg_args.add_argument("--device", type=str, default=None, required=False, help='Inference device (default="cuda").') cfg_args.add_argument( "--dtype", type=str, default=None, required=False, - help="PyTorch data type used for storing images for training/validation (default=float16).\n" - "The model is always stored in float32, and training is done with autocasting.", + help="CUDA autocast and raw-logit output dtype (default=float16); default model parameters remain float32.", ) cfg_args.add_argument( "--num_workers", @@ -339,8 +317,7 @@ def cli(description="Classify images with a trained model", **extra_kwargs): # type=int, default=None, required=False, - help="Set the initial seed for the RNG in the core Python library `random`.\n" - "This is particularly important for reproducible train/validation splits.", + help="Unsupported: the prediction API does not accept a seed.", ) cfg_args.add_argument( "-v", @@ -349,23 +326,19 @@ def cli(description="Classify images with a trained model", **extra_kwargs): # dest="collector_cls_kwargs.verbose", default=None, required=False, - help="Print training statistics in the terminal.", + help="Print the resolved configuration.", ) cli_args = vars(parser.parse_args()) if cli_args.pop("raw", False): cli_args["collector_cls"] = RawResultCollector - # Build the three layers - defaults_full = defaults_from_function(main) # Defaults defined in the function signature - config_full = { - k: v for k, v in load_yaml_config(cli_args.pop("config")).items() if k in defaults_full - } # Arguments passed from config (empty if no config) - cli_full = restructure_cli_args(cli_args) # Manual CLI arguments + defaults_full = defaults_from_function(main) + config_full = {k: v for k, v in load_yaml_config(cli_args.pop("config")).items() if k in defaults_full} + cli_full = restructure_cli_args(cli_args) args = merge_dicts(defaults_full, config_full, cli_full) - # Validate required arguments if args.get("input") is None: raise SystemExit("error: the following arguments are required: --input (via CLI or config)") diff --git a/mini_trainer/train.py b/mini_trainer/train.py index c787232..56fb089 100644 --- a/mini_trainer/train.py +++ b/mini_trainer/train.py @@ -67,7 +67,7 @@ def main( # noqa: D417 dataloader_builder_kwargs: dict[str, Any] = {"batch_size": 16, "train_proportion": 0.9, "resample": False}, augmentation_builder_kwargs: dict[str, Any] = {}, optimizer_builder_kwargs: dict[str, Any] = { - "optimizer_cls": MuonAuxAdamW, # torch.optim.AdamW + "optimizer_cls": MuonAuxAdamW, "lr": 0.001, "weight_decay": 0.01, }, @@ -82,43 +82,31 @@ def main( # noqa: D417 compile_mode: str | None = None, optimizer_cudagraphs: bool = False, ): - """Train a classifier. - - Args: - input: Path to a directory containing a subdirectory for each class, where - each subdirectory's name corresponds to the class name. - It is also possible to pass the path to a parquet as generated by `gbifxdl` instead of a directory. - output: Root directory for all created files and directories. - Default is current working directory ``'.'``. - checkpoint: Path to one or more checkpoint files for restarting training. - If multiple files are supplied, training is restarted from an 'average' - of checkpoint states. Default is ``None``. - class_spec: Path to a JSON file containing the mapping from class names to indices - and other important information necessary to construct compatible models and dataloaders. - If the file does not exist, it will be created based on subdirectories - found under `output` if it is set. Default is 'class_spec.json'. - epochs: Number of training epochs. Default is 15. - size: Size of the input image (width/height). Default is 256. - name: Name of the output model. If not provided, a descriptive name - will be inferred from other arguments. Default is ``None``. - device: Device used for training (e.g., ``'cuda'``, ``'cpu'``). Default is ``'cuda'``. - dtype: PyTorch data type for images during training and validation (e.g., ``'float16'``). - The model parameters are always stored in float32 with training AMP. - Default is ``'float16'``. - ema: Temporarily nonfunctional/unsupported EMA feature. Leave disabled (default=False). - seed: Initial seed for Python's random number generator to ensure reproducibility, - especially for train/validation splits. Default is ``None``. - builder: An object inheriting from ``mini_trainer.builders.BaseBuilder``. - This object is responsible for instantiating the model, dataloader, augmentation, - optimizer, scaler, EMA, criterion (loss function) and learning rate scheduler. - **kwargs: - Additional arguments are passed to the various builder methods. - See ``mini_trainer.builders.BaseBuilder`` for details. + """Build training components, restore optional state, and run the epoch loop. + + ``input`` is a class-directory dataset or a supported metadata Parquet. + ``class_spec`` loads an existing mapping or derives it from that input; when + omitted with ``output`` set, it is written under ``output/name``. Checkpoints + and final weights go in that run's ``weights`` directory. Without ``output``, + checkpoint, final-weight and resolved-config saving are disabled. + + ``size=None`` uses the model's resize metadata, falling back to 224. + ``dtype`` controls training autocast; the model is built in float32. + ``seed`` initializes Python, NumPy and PyTorch RNGs, but resume does not restore + general sampler/RNG state. EMA remains unsupported and should stay disabled. + + Supply a ``BaseBuilder`` subclass and the corresponding ``*_builder_kwargs`` + dictionaries to customize components. ``spec_model_dataloader_kwargs`` goes to + ``build_class_spec``. Quantized weights are prepared before optimizer creation; + checkpoint state is restored before optional optimizer compilation. Model + compilation is delegated to the training loop. + + Resume requires ``name`` and trusted checkpoint files. A list is averaged + before restoration; ``epochs`` is the total budget, not additional epochs. """ orig_args = locals() model_compile_options(compile, compile_mode) validate_optimizer_compilation(compile_optimizer, optimizer_cudagraphs, device) - # Prepare state if seed is not None: random.seed(seed) np.random.seed(seed) @@ -155,7 +143,6 @@ def main( # noqa: D417 setup_logging(verbose=verbose) log = get_logger() - # Dump resolved configuration using locals and normalized values dump_resolved_config( output_dir=output_dir, fn=main, @@ -172,8 +159,6 @@ def main( # noqa: D417 start_epoch: int = 0 - # Load additional information for model and dataloader instantiation - # e.g. number of classes, class-to-index dictionary if class_spec is None: if output_dir is None: class_spec = None @@ -187,20 +172,12 @@ def main( # noqa: D417 class_spec_data["resize_size"] = size with main_process_first(verbose=verbose): - # Prepare model - # Loading the model with a lower precision leads to instable training, instead we use `torch.autocast` to - # facilitate mixed precision training - # RE: Trying to disable again - perhaps this is why fastai is faster? - # RE RE: Using weights in fp32 seems to be the "correct" way, though it might be possible to squeeze some - # performance by following the pattern given in: - # https://github.com/fastai/fastai/blob/645e6b2c323dc4bf4d07a014881f46dcfecd2a57/nbs/18_callback.fp16.ipynb#L244, - # but it seems very cumbersome to implement the flexibility needed for this convoluted pattern. + # Keep parameters in float32; the training loop applies autocast. log.debug("Building model...") model_dtype = torch.float32 nn_model, model_preprocess = builder.build_model( device=device, dtype=model_dtype, - # train_labels=train_labels, # Disable prior on model - moved to loss function **{**class_spec_data, **model_builder_kwargs}, ) validate_type(nn_model, torch.nn.Module) @@ -233,7 +210,6 @@ def main( # noqa: D417 validate_type(train_loader, torch.utils.data.DataLoader) validate_type(val_loader, torch.utils.data.DataLoader) - # Prepare augmentation augmentation = builder.build_augmentation(dtype=dtype, **augmentation_builder_kwargs) validate_type(augmentation, (torchvision.transforms.Compose, torchvision.transforms.v2.Compose)) debug_augmentation(augmentation=augmentation, dataset=train_loader.dataset, output_dir=output_dir, strict=True) @@ -300,13 +276,11 @@ def main( # noqa: D417 prepare_compiled_optimizer(optimizer, cudagraphs=optimizer_cudagraphs) log.info("Optimizer updates compiled; scheduler and AMP step gating remain active.") - # Instantiate logger logger_output = None if get_rank() > 0 else output logger = builder.build_logger( train_loader=train_loader, val_loader=val_loader, epochs=epochs, output=logger_output, name=name, **logger_builder_kwargs ) - # Run training train( model=nn_model, model_ema=nn_model_ema, @@ -333,7 +307,6 @@ def main( # noqa: D417 del train_loader del val_loader - # Save result model nn_model.eval() if weight_output_dir is not None: last_weight_dst = os.path.abspath(os.path.join(weight_output_dir, "last.pt")) @@ -349,7 +322,6 @@ def main( # noqa: D417 def cli(description="Train a classifier", **extra_kwargs): # noqa: D103 parser = ArgumentParser(prog="train", description=description, formatter_class=Formatter) - # Optional YAML config support cfg_args = parser.add_argument_group("Config [optional]") cfg_args.add_argument( "--config", @@ -396,7 +368,7 @@ def cli(description="Train a classifier", **extra_kwargs): # noqa: D103 type=str, default=None, required=False, - help='Root directory for all created files and directories.\nDefault is current working directory (".").', + help="Run directory root; checkpoints and resolved config are not saved when omitted.", ) out_args.add_argument( "-n", @@ -447,7 +419,7 @@ def cli(description="Train a classifier", **extra_kwargs): # noqa: D103 required=False, help="Path to a JSON file containing the class name to index mapping and other\n" "important information for constructing models and dataloaders.\n" - "If it doesn't exist, one will be created based on the directories found under `output` if it is set.", + "If absent, derive the mapping from the input dataset and save it at this path.", ) train_args = parser.add_argument_group("Training [optional]") @@ -489,7 +461,9 @@ def cli(description="Train a classifier", **extra_kwargs): # noqa: D103 required=False, help="Number of warmup epochs (default=2.0).", ) - train_args.add_argument("--size", type=int, default=None, required=False, help="Size of the input images; width, height (default=256).") + train_args.add_argument( + "--size", type=int, default=None, required=False, help="Input image size; defaults to model resize metadata, falling back to 224." + ) train_args.add_argument( "--label_smoothing", type=float, @@ -530,7 +504,7 @@ def cli(description="Train a classifier", **extra_kwargs): # noqa: D103 dest="dataloader_builder_kwargs.resample", default=None, required=False, - help=("Enable class-weighted oversampling at a rate slightly more uniform than the inverse log-frequency of the classes."), + help=("Request oversampling; currently unsupported by the default data loader."), ) train_args.add_argument( "--fine_tune", @@ -574,7 +548,7 @@ def cli(description="Train a classifier", **extra_kwargs): # noqa: D103 default=None, required=False, help="Cache/Preload datasets for faster dataloading. " - 'Valid options are `None`, "disk", "cpu", "cuda" or "guess" (CUDA not supported yet).\n' + 'Valid options are `None`, "disk", "cpu", "cuda" or "guess".\n' "Mainly relevant for inefficiently stored training data or slow filesystems.", ) cfg_args.add_argument( @@ -624,8 +598,7 @@ def cli(description="Train a classifier", **extra_kwargs): # noqa: D103 type=int, default=None, required=False, - help="Set the initial seed for the RNG in the core Python library `random`.\n" - "This is particularly important for reproducible train/validation splits.", + help="Initialize Python, NumPy and PyTorch RNGs.\nThis is particularly important for reproducible train/validation splits.", ) cfg_args.add_argument( "-v", @@ -648,14 +621,13 @@ def cli(description="Train a classifier", **extra_kwargs): # noqa: D103 name_val = cli_args.get("name") output_dir_val = os.path.abspath(os.path.join(output_val, name_val)) if (output_val and name_val) else None - # Build the three layers - defaults_full = defaults_from_function(main) # Defaults defined in the function signature - config_full = load_yaml_config(config_path, resume=resume, output_dir=output_dir_val) # Load arguments from config file - cli_full = restructure_cli_args(cli_args) # Manual CLI arguments + # Merge function defaults, YAML, then parsed CLI values. + defaults_full = defaults_from_function(main) + config_full = load_yaml_config(config_path, resume=resume, output_dir=output_dir_val) + cli_full = restructure_cli_args(cli_args) args = merge_dicts(defaults_full, config_full, cli_full) - # Validate required arguments if args.get("input") is None: raise SystemExit("error: the following arguments are required: --input (via CLI or config)") diff --git a/mini_trainer/trainer.py b/mini_trainer/trainer.py index 9777581..24b4a1e 100644 --- a/mini_trainer/trainer.py +++ b/mini_trainer/trainer.py @@ -28,10 +28,6 @@ save_on_master, ) -# from mini_trainer.contrastive import SupConLoss - -# contrastive_criterion = SupConLoss(temperature=25, base_temperature=25) - def _optimizer_step(optimizer: Optimizer, scaler: GradScaler) -> bool: """Step and update the scaler; report a completed, non-overflow optimizer step. @@ -84,27 +80,16 @@ def train_one_epoch( device: torch.device = torch.device("cpu"), dtype: torch.dtype = torch.float32, ): - """Run one training epoch. - - Args: - model: Model under training. - model_ema: Exponential Moving Average model (``mini_trainer.builders.EMATeacher``) linked to ``model``. - criterion: Loss function; may return a scalar tensor or a list of tensors. - optimizer: Optimizer used for parameter updates. - scaler: AMP gradient scaler. - lr_scheduler: Learning rate scheduler stepped per batch. - data_loader: Dataloader yielding mini-batches of ``(inputs, targets)``. - epoch: Zero-based epoch index. - logger: Multi-backend logger used to record metrics and figures. - preprocess: Function applied to tensors before passing to the model. - augmentation: Training-time augmentation applied before preprocess. - regularizer: Callable that returns an extra scalar loss term from the model. - clip_grad_norm: Max gradient norm; disabled if ``None``. - device: Target device for training (e.g., ``cuda:0``). - dtype: AMP/autocast data type for forward pass. - - Raises: - RuntimeError: If non-finite loss persists across several steps or input shape is invalid. + """Run an epoch over ``(NCHW inputs, targets)`` batches and finish in eval mode. + + Apply augmentation before preprocessing. The criterion returns a scalar or + per-level losses; regularization and optional teacher distillation are added + before backward. Pass a disabled ``EMATeacher`` when EMA is unused. + + Scheduler and EMA updates follow successful optimizer steps only, including + AMP overflow gating. Non-finite criterion/distillation losses skip the batch; + five consecutive failures raise ``RuntimeError``. ``clip_grad_norm=None`` + disables clipping; ``dtype=float32`` disables autocast. """ log = get_logger() @@ -134,9 +119,6 @@ def train_one_epoch( with autocast(device_type=device.type, dtype=dtype, enabled=dtype != torch.float32), SupervisionContext(target), EmbeddingContext(): logits = model(preprocess(augmentation(batch))) loss: list[torch.Tensor] | torch.Tensor = criterion(logits, target) - # TODO: Add optional contrastive path - # ctr_loss = contrastive_criterion() - # If EMA is disabled ``distill_loss`` is ``0.0`` distill_loss = model_ema.teach(step=step, input=preprocess(batch), student=logits) if model_ema else 0.0 reg = regularizer(model) @@ -179,11 +161,6 @@ def train_one_epoch( logger.stop_timing() logger.synchronize_between_processes() - # TODO: I don't think this is appropriate when use_buffers=True and using EMA (not SWA) - # if model_ema: - # with torch.no_grad(): - # copy_bn_buffers(model, model_ema.module) - model.eval() @@ -197,20 +174,11 @@ def evaluate( device: torch.device = torch.device("cpu"), dtype: torch.dtype = torch.float32, ): - """Evaluate the model for one validation epoch. - - Args: - model: Model in evaluation mode. - criterion: Loss function compatible with the model outputs/targets. - data_loader: Validation dataloader yielding mini-batches. - epoch: Zero-based epoch index. - logger: Logger used to record metrics and figures. - preprocess: Preprocess function applied to tensors before inference. - device: Target device for evaluation. - dtype: AMP/autocast data type for inference. - - Returns: - The most recent value of the canonical statistic recorded by the logger. + """Evaluate batches and return the logger's canonical scalar, or NaN if absent. + + Preprocess under inference mode and optional autocast, synchronize metrics, + and emit figures. Restore the incoming model training mode on normal return. + Warn if the distributed sample count differs from the dataset length. """ log = get_logger() @@ -236,7 +204,6 @@ def evaluate( logger.stop_timing() logger.synchronize_between_processes() - # gather the stats from all processes num_processed_samples = reduce_across_processes(num_processed_samples) if ( hasattr(data_loader.dataset, "__len__") @@ -286,30 +253,17 @@ def train( compile_mode: str | None = None, **kwargs, ): - """Full training loop across epochs with periodic evaluation and checkpointing. - - Args: - model: Model to train. - model_ema: Exponential Moving Average model (``AveragedModel``) linked to ``model``. - train_loader: Training dataloader. - val_loader: Validation dataloader. - criterion: Loss function. - optimizer: Optimizer instance. - scaler: Gradient scaler. - lr_scheduler: LR scheduler stepped every training batch. - logger: Logger used for metrics, summaries and figures. - epochs: Total number of epochs to run. - start_epoch: Initial epoch index when resuming from a checkpoint. - preprocess: Preprocess function applied prior to the model. - augmentation: Augmentation function used during training only. - regularizer: Callable returning an extra scalar loss term from the model. - device: Target device. - dtype: AMP/autocast data type for forward/eval passes. - output_dir: If provided, checkpoints are written here. - weight_store_rate: Store a snapshot every ``weight_store_rate`` epochs if set. - compile: Compile the model with PyTorch. - compile_mode: Optional PyTorch model compilation mode; requires compile=True. - **kwargs: Forwarded to lower-level helpers. + """Train from ``start_epoch`` up to the total ``epochs`` budget. + + Evaluate the teacher when enabled, otherwise the model, after each epoch. + ``compile_mode`` requires ``compile=True``; DDP wrapping precedes compilation. + Extra keyword arguments go to ``train_one_epoch`` (for example, clipping). + + When ``output_dir`` is set, save model/optimizer/scheduler/scaler and optional + EMA state in ``checkpoint_last.pth``. ``weight_store_rate`` adds snapshots at + zero-based epoch multiples. ``best.pt`` contains evaluation-model weights; + the canonical metric is maximized, with ties replacing the previous best. + Best-metric tracking restarts on each call. Close the logger on completion. """ log = get_logger() diff --git a/mini_trainer/training/loss.py b/mini_trainer/training/loss.py index c655ca9..10f75e4 100644 --- a/mini_trainer/training/loss.py +++ b/mini_trainer/training/loss.py @@ -8,10 +8,7 @@ class EvenCrossEntropyLoss(CrossEntropyLoss): - """A minimal wrapper around ``torch.nn.modules.loss.CrossEntropyLoss`` - that ensures that the size of the loss is more or less independent - from the number of classes. - """ + """Cross entropy divided by the log of the number of classes.""" def forward(self, input: torch.Tensor, target: torch.Tensor): max_CE = input.new_full((1,), input.size(1), requires_grad=False).log() @@ -19,34 +16,16 @@ def forward(self, input: torch.Tensor, target: torch.Tensor): class EMLACrossEntropy(torch.nn.CrossEntropyLoss): - """Entropy-Modulated Logit Adjusted (EMLA) Cross Entropy for Long-Tail Learning. - - This loss function dynamically applies the Logit Adjustment penalty proposed by - Menon et al. (2021) based on the model's instance-level confidence (Shannon Entropy). - - Standard Logit Adjustment applies a static penalty to rare classes to ensure - Fisher consistency for the balanced error. It enforces a large relative margin - between the logits of rare and dominant labels. However, applying this penalty - uniformly can disrupt early-stage feature learning or over-penalize genuinely ambiguous samples. - - This method introduces an instance-aware curriculum-learning gate: - 1. Calculates the exact Shannon Entropy of the raw logits using purely numerically - stable log-space arithmetic via the identity: log(softmax(z)) = z - LSE(z). - 2. Normalizes the entropy to a [0, 1] scale (where 0 is fully certain, 1 is uniform). - 3. Computes a 'confidence' score (1 - normalized_entropy) which is detached from the gradient. - 4. Scales the class prior penalty (tau * log(pi_y)) by this confidence score. - 5. Applies the modulated penalty to the raw logits before native Cross-Entropy normalization. - - Mechanics: - Unconfident predictions (e.g., early training or noisy samples) yield high entropy, - suppressing the penalty and allowing standard Empirical Risk Minimization (ERM). - Conversely, when the model becomes overconfident on a rare-attribute sample, - the low entropy triggers the full negative logit penalty, driving the softmax - probability to zero and generating a maximum-strength gradient to correct the boundary. - - References: - - Menon, A. K., Jain, H., Rawat, A. S., Veit, A., & Kumar, S. (2021). - Long-tail learning via logit adjustment. arXiv preprint arXiv:2007.07314. + """Cross entropy with a detached, entropy-gated class-frequency adjustment. + + Add ``(1 - H(softmax(input)) / log(C)) * adjustments`` to each sample's + logits, where ``C`` is its class count and ``adjustments`` contains centered + log class counts. Uncertain predictions receive less adjustment; uniform + counts produce no adjustment. The gate does not contribute gradients. + + Adapts logit adjustment from Menon et al. (2021), arXiv:2007.07314, with + this implementation's entropy gate. Quality trade-offs require evaluation + on the intended dataset; see docs/training-feature-validation.md. """ def __init__( @@ -54,30 +33,23 @@ def __init__( class_frequencies: list[int] | list[float] | np.ndarray | torch.Tensor, flatten: float = 0.0, weight: torch.Tensor | None = None, - ignore_index: int = -100, # Apparently `-100` is used instead of `None` in nn.CrossEntropy + ignore_index: int = -100, reduction: str = "mean", label_smoothing: float = 0.0, device: torch.types.Device = None, ) -> None: - """. - - Args: - class_frequencies: The raw frequency or count of each class in the training dataset. - flatten: Adjusts the weights (i.e. the inverse class frequencies, normalized) - such that they are a mixture of the uniform and the raw distribution with weight `flatten`. - weight: A manual rescaling weight given to each class. - ignore_index: Specifies a target value that is ignored and does not contribute to the input gradient. - reduction: Specifies the reduction to apply to the output: 'none' | 'mean' | 'sum'. - label_smoothing: A float in [0.0, 1.0]. Specifies the amount of smoothing when computing the loss. - device: Device expected during training can optionally be passed, otherwise it will be inferred dynamically. + """Initialize adjustments from rounded class counts, clamped to at least one. + + ``flatten`` replaces counts ``c`` with ``flatten * sum(c) + + (1 - flatten) * c``; zero preserves counts and one makes them uniform. + ``device`` optionally fixes the adjustment device; otherwise forward + uses the input device. Other arguments pass through to CrossEntropyLoss. """ - # Initialize the parent nn.CrossEntropyLoss with all standard arguments super().__init__(weight=weight, ignore_index=ignore_index, reduction=reduction, label_smoothing=label_smoothing) self._device = device if isinstance(self._device, (int, str)): self._device = torch.device(self._device) - # Safely convert to a float tensor whether the input is a list or already a tensor if isinstance(class_frequencies, np.ndarray): class_frequencies = torch.from_numpy(class_frequencies) if isinstance(class_frequencies, (list, tuple)): @@ -94,19 +66,10 @@ def __init__( if self._device is not None: log_priors = log_priors.to(device=self._device) - # Register the base adjustments as a buffer so they move to the correct device self.register_buffer("adjustments", log_priors) def forward(self, input: torch.Tensor, target: torch.Tensor) -> torch.Tensor: - """. - - Args: - logits: Raw, unnormalized outputs of shape (Batch, Classes). - targets: Ground truth class indices of shape (Batch,). - - Returns: - The computed loss. - """ + """Apply the detached adjustment before cross entropy.""" # Uncertainty gate: 1.0 when confident, 0.0 when uncertain with torch.no_grad(): log_probs = input.log_softmax(dim=-1) @@ -129,8 +92,7 @@ def class_weight_distribution_regularization(W: torch.Tensor, sparse: bool = Tru W: Tensor of shape [num_classes, num_embeddings], typically the weights of the final linear layer. sparse: Use a sparse set of classes to compute the regularization over. - The size of the set will be equal to the square root of the number of classes. - Will use a random subset of classes each time. + Samples a bounded random subset on each call. Returns: A scalar tensor representing the regularization loss. diff --git a/mini_trainer/training/muon.py b/mini_trainer/training/muon.py index a170ab4..e1014a1 100644 --- a/mini_trainer/training/muon.py +++ b/mini_trainer/training/muon.py @@ -1,6 +1,7 @@ -# Forward-compatibility with Muon optimizer (will be in PyTorch later) -# From: https://github.com/pytorch/pytorch/blob/main/torch/optim/_muon.py -"""Implementation of the Muon optimizer.""" +"""Muon and a composite Muon/AdamW optimizer. + +Adapted from https://github.com/pytorch/pytorch/blob/main/torch/optim/_muon.py. +""" import math from collections.abc import Callable, MutableMapping, Sequence @@ -10,22 +11,11 @@ import torch from torch import Tensor from torch.optim import AdamW -from torch.optim.optimizer import Optimizer, ParamsT, _disable_dynamo_if_unsupported, _params_doc +from torch.optim.optimizer import Optimizer, ParamsT, _disable_dynamo_if_unsupported def _to_scalar(x: float | torch.Tensor): - r"""This function converts a hyperparameter to a 0-dimension (scalar) tensor - if it is a nonzero-dimensions 1-element tensor. If it is not a tensor, it is - kept as is. - - Args: - x (float or Tensor): A hyperparameter of the optimizer. - If it is Tensor, it is needed to be 1-element. - - Returns: - float or Tensor: - a scalar tensor if x is Tensor otherwise Python scalar (float) value. - """ + """Squeeze tensor hyperparameters; leave non-tensors unchanged.""" if isinstance(x, torch.Tensor) and x.dim() != 0: return x.squeeze() else: @@ -44,16 +34,11 @@ def _to_scalar(x: float | torch.Tensor): def _zeropower_via_newtonschulz(grad: Tensor, ns_coefficients: tuple[float, float, float], ns_steps: int, eps: float) -> Tensor: - """Newton-Schulz iteration to compute the zeroth power / orthogonalization of G. We opt to use a - quintic iteration whose coefficients are selected to maximize the slope at zero. For the purpose - of minimizing steps, it turns out to be empirically effective to keep increasing the slope at - zero even beyond the point where the iteration no longer converges all the way to one everywhere - on the interval. This iteration therefore does not produce UV^T but rather something like US'V^T - where S' is diagonal with S_{ii}' ~ Uniform(0.5, 1.5), which turns out not to hurt model - performance at all relative to UV^T, where USV^T = G is the SVD. - - Implementation reference: https://github.com/KellerJordan/Muon/blob/master/muon.py - with suggestions by @jxbz, @leloykun, and @YouJiacheng. + """Approximate the matrix polar factor with a BF16 quintic iteration. + + The default finite iteration does not force every singular value to one. + Reference: https://github.com/KellerJordan/Muon/blob/master/muon.py, + with suggestions by @jxbz, @leloykun and @YouJiacheng. """ if ns_steps >= 100: raise ValueError("Number of steps must be less than 100 for computational efficiency") @@ -91,7 +76,26 @@ def _adjust_lr(lr: float, adjust_lr_fn: str | None, param_shape: torch.Size) -> return lr * adjusted_ratio -class Muon(Optimizer): # noqa: D101 +class Muon(Optimizer): + """Optimize dense real 2D parameters with momentum and Newton-Schulz updates. + + The momentum buffer interpolates toward the gradient with weight + ``1 - momentum``. Nesterov mode blends the current gradient with that buffer + before orthogonalization. Decoupled weight decay uses the base learning rate; + the orthogonalized update uses the shape-adjusted rate. + + ``adjust_lr_fn=None`` or ``"original"`` scales the update rate by + ``sqrt(max(1, rows / columns))``; ``"match_rms_adamw"`` uses + ``0.2 * sqrt(max(rows, columns))``. ``ns_coefficients`` and ``ns_steps`` control + the quintic iteration, and ``eps`` floors its normalization denominator. + Defaults are in the constructor signature. Use a separate optimizer for + non-matrix parameters, or ``MuonAuxAdamW`` for automatic routing. + + References: + https://kellerjordan.github.io/posts/muon/ + https://arxiv.org/pdf/2502.16982 + """ + def __init__( # noqa: D107 self, params: ParamsT, @@ -203,86 +207,6 @@ def step(self, closure=None): return loss -Muon.__doc__ = ( - r"""Implements Muon algorithm. - - .. math:: - \begin{aligned} - &\rule{110mm}{0.4pt} \\ - &\textbf{input} : \gamma \text{ (lr)},\ \lambda \text{ (weight decay)},\ - \mu \text{ (momentum)},\ \textit{nesterov}\in\{True,False\},\\ - &\hspace{13mm}(a,b,c)\ \text{ (NS coefficients)},\ - \varepsilon \text{ (epsilon)},\ k \text{ (NS steps)},\ - \theta_0 \text{ (params)},\ f(\theta) \text{ (objective)} \\ - &\textbf{initialize} : B_0 \leftarrow 0 \text{ (momentum buffer)} \\[-1.ex] - &\rule{110mm}{0.4pt} \\ - &\textbf{for}\ t=1\ \textbf{to}\ \ldots\ \textbf{do} \\[0.25ex] - &\hspace{5mm} g_t \leftarrow \nabla_{\theta} f_t(\theta_{t-1}) \\[0.25ex] - &\hspace{5mm} B_t \leftarrow \mu B_{t-1} + g_t \\[0.25ex] - &\hspace{5mm} \widetilde{B}_t \leftarrow - \begin{cases} - g_t + \mu B_t, & \text{if nesterov}=True \\ - B_t, & \text{if nesterov}=False - \end{cases} \\[1.0ex] - &\hspace{5mm} O_t \leftarrow \mathrm{NS}^{(a,b,c)}_{k}\!\big(\widetilde{B}_t;\ \varepsilon\big) \\[0.5ex] - &\hspace{5mm} \theta_t \leftarrow \theta_{t-1} - \gamma\,\lambda\,\theta_{t-1} - \quad\text{(decoupled weight decay)} \\[0.25ex] - - &\hspace{5mm} \gamma \leftarrow \mathrm{AdjustLR}\!\big(\gamma;\ \mathrm{shape}\!\big(\theta_t \big) \big) \\[0.25ex] - &\hspace{5mm} \theta_t \leftarrow \theta_t - \gamma\, O_t \\ - &\rule{110mm}{0.4pt} \\[-1.ex] - &\mathbf{return}\ \theta_t \\[-1.ex] - &\rule{110mm}{0.4pt}s - \end{aligned} - - Here, :math:`\mathrm{NS}^{(a,b,c)}_{k}(\cdot;\varepsilon)` denotes :math:`k` iterations of the - Newton–Schulz orthogonalization operator parameterized by coefficients :math:`(a,b,c)` - with numerical stabilization :math:`\varepsilon`. - - The purpose for :math:`\mathrm{AdjustLR}\!\big(\gamma;\ \mathrm{shape}\!\big(\theta_t \big) \big)` - is to make the orthogonalized update have a consistent :math:`RMS` across rectangular matrices. - - Keller's original implementation scales the update by :math:`\sqrt{\max\!\left(1, \frac{A}{B}\right)}`, - where :math:`A` and :math:`B` are dimension of the matrix being optimized. - - Moonshot's implementation also focuses on matching :math:`RMS` of AdamW. The adjustment is computed as: - :math:`\gamma \leftarrow {0.2}\gamma\,\sqrt{\max\!\left({A}, {B}\right)}` - The method is adopted from `Muon is Scalable for LLM Training`_. Research - results show that with this adjustment Muon can directly reuse the learning rate - and weight decay tuned for AdamW. - - We provide two options for the learning rate adjustment: "original", which follows Keller's - implementation, and "match_rms_adamw", which refers to Moonshot's implementation. This gives users the - flexibility to choose between the two. If `adjust_lr_fn` is not specified, the default is "original". - - For further details regarding the algorithm we refer to `Muon: An optimizer for hidden layers in neural networks`_ - and `Muon is Scalable for LLM Training`_. - """ # noqa: E501 - + rf""" - Args: - {_params_doc}. Note that Muon is an optimizer for 2D parameters of neural network hidden layers. Other - parameters, such as bias, and embedding, should be optimized by a standard method such as AdamW. - lr (float, Tensor, optional): learning rate (default: 1e-3). - weight_decay (float, optional): weight decay (L2 penalty). (default: 0.1) - momentum (float, optional): momentum factor (default: 0.95) - nesterov (bool, optional): enables Nesterov momentum. Only applicable - when momentum is non-zero - ns_coefficients (tuple of three floats, optional): coefficients \(a,b,c\) for the - Newton–Schulz orthogonalization polynomial (default: ({DEFAULT_A}, {DEFAULT_B}, {DEFAULT_C})) - eps (float, optional): term added to the denominator for numerical stability. (default: {EPS}) - ns_steps (int, optional): number of Newton–Schulz iteration steps. (default: {DEFAULT_NS_STEPS}) - adjust_lr_fn (str, optional): function to adjust learning rate. One of "original" and "match_rms_adamw". - If not specified, we will default to use "original". (default: None) - - .. _Muon\: An optimizer for hidden layers in neural networks: - https://kellerjordan.github.io/posts/muon/ - .. _Muon is Scalable for LLM Training: - https://arxiv.org/pdf/2502.16982 - - """ -) - - def _single_tensor_muon( params: list[Tensor], grads: list[Tensor], @@ -336,16 +260,11 @@ def muon( adjust_lr_fn: str | None, has_complex: bool, ): - r"""Functional API that performs Muon algorithm computation. - - See :class:`~torch.optim.Muon` for details. - """ + """Apply this module's Muon update; foreach execution is unsupported.""" if foreach is not None and foreach: raise RuntimeError("Foreach is not supported for Muon yet") - func = _single_tensor_muon - - func( + _single_tensor_muon( params, grads, muon_momentum_bufs, @@ -361,11 +280,16 @@ def muon( ) -# Mixed Muon-AdamW optimizer: -# - 2D parameters (i.e. matrices, such as dense layers) -> Muon -# - ND parameters (e.g. 1D parameters, such as biases) -> AdamW -# (Force AdamW by using "nomuon" in parameter group name) class MuonAuxAdamW(Optimizer): + """Route named groups to Muon for matrices and AdamW for other parameters. + + A group name containing ``nomuon`` forces all its parameters onto AdamW. + Exposed parameter groups reference the child groups, allowing schedulers to + update both optimizers. Checkpoints contain child states keyed by optimizer + name; the outer step counter tracks successful composite calls, not resume + history. Default Muon rate adjustment is ``match_rms_adamw``. + """ + def __init__(self, params: ParamsT, **kwargs): self._init = True self.opt_args = {"muon": {"adjust_lr_fn": "match_rms_adamw", "momentum": 0.95}, "adamw": {"betas": (0.9, 0.999)}} @@ -425,16 +349,10 @@ def add_param_group(self, param_group: dict[str, Any]) -> None: raise ValueError("param_group['params'] must be a non-empty sequence") base = {k: v for k, v in param_group.items() if k != "params"} - def _opt_check(opt): - match opt: - case "muon": - return lambda x: x.ndim == 2 - case "adamw": - return lambda x: x.ndim != 2 - case _: - raise NotImplementedError("Only Muon and AdamW are accepted optimizers for `MuonAuxAdamW`") - - grps = {opt: {"params": list(filter(_opt_check(opt), params)), **base} for opt in ["muon", "adamw"]} + grps = { + "muon": {"params": [p for p in params if p.ndim == 2], **base}, + "adamw": {"params": [p for p in params if p.ndim != 2], **base}, + } for name, grp in grps.items(): if len(grp["params"]) == 0: continue diff --git a/mini_trainer/utils/_concurrent/threading.py b/mini_trainer/utils/_concurrent/threading.py index 91af8b7..310bdb8 100644 --- a/mini_trainer/utils/_concurrent/threading.py +++ b/mini_trainer/utils/_concurrent/threading.py @@ -2,15 +2,13 @@ import types from collections.abc import Callable, Iterable from functools import wraps -from typing import Annotated, Any, Concatenate, ParamSpec, TypeVar, cast, get_args, get_origin, get_type_hints, overload +from typing import Annotated, Any, Concatenate, ParamSpec, Union, cast, get_args, get_origin, get_type_hints, overload from tqdm.auto import tqdm from tqdm.contrib.concurrent import thread_map as _thread_map from mini_trainer import get_logger -X = TypeVar("X") # input value -R = TypeVar("R") # return value P = ParamSpec("P") @@ -27,22 +25,10 @@ def strip_annotated(t): t = get_args(t)[0] return t - def base(t): - t = strip_annotated(t) - o = get_origin(t) - return o or t - - def flatten_union(t): - t = strip_annotated(t) - o = get_origin(t) - if o in (types.UnionType, getattr(types, "NoneType", type(None)), None): - pass - if o is types.UnionType or o is getattr(__import__("typing"), "Union"): - return [base(x) for x in get_args(t)] - return [base(t)] - - out = flatten_union(ann) - return list(dict.fromkeys(out)) + ann = strip_annotated(ann) + members = get_args(ann) if get_origin(ann) in (types.UnionType, Union) else (ann,) + bases = (get_origin(t) or t for t in map(strip_annotated, members)) + return list(dict.fromkeys(bases)) def thread_map[X, R](func: Callable[[X], R], it: Iterable[X], **kwargs: Any) -> list[R]: diff --git a/mini_trainer/utils/_core/__init__.py b/mini_trainer/utils/_core/__init__.py index 174fec7..14e50ac 100644 --- a/mini_trainer/utils/_core/__init__.py +++ b/mini_trainer/utils/_core/__init__.py @@ -27,7 +27,6 @@ "string_to_device", "string_to_dtype", "make_empty_ndarray", - "get_logger", "setup_logging", "TQDM", "validate_type", diff --git a/mini_trainer/utils/_core/misc.py b/mini_trainer/utils/_core/misc.py index 681137f..353bd5f 100644 --- a/mini_trainer/utils/_core/misc.py +++ b/mini_trainer/utils/_core/misc.py @@ -1,7 +1,7 @@ import shutil from collections import OrderedDict from collections.abc import Callable, Iterable -from typing import Any, TypeVar, TypeVarTuple +from typing import Any import numpy as np import torch @@ -12,10 +12,6 @@ TERMINAL_WIDTH, _ = shutil.get_terminal_size() -X = TypeVar("X") -R = TypeVar("R") -Ks = TypeVarTuple("Ks") - def make_empty_ndarray(s: int) -> np.typing.NDArray[np.float64]: """Create a 1-dimensional array filled with ``np.nan``.""" diff --git a/mini_trainer/visualization/dendrogram.py b/mini_trainer/visualization/dendrogram.py index 3d396ce..8d5d3f3 100644 --- a/mini_trainer/visualization/dendrogram.py +++ b/mini_trainer/visualization/dendrogram.py @@ -44,7 +44,7 @@ def _check_deps(): if not _HAS_DENDROGRAM_DEPS: raise ImportError( "Dendrogram visualization requires optional dependencies: biopython and scipy. " - "Install them with: `uv pip install mini_trainer[recommended]` or `uv sync --extra recommended`." + "Install them with: `uv pip install mt-trainer[recommended]` or `uv sync --extra recommended`." ) diff --git a/mini_trainer/visualization/plot.py b/mini_trainer/visualization/plot.py index 12f0f9f..1c16a2c 100644 --- a/mini_trainer/visualization/plot.py +++ b/mini_trainer/visualization/plot.py @@ -11,14 +11,12 @@ from mini_trainer.modeling import class_similarity -# --- Constants --- MIN_DISPLAY_DIM_HEATMAP = 500 MAX_DISPLAY_DIM_HEATMAP = 5000 COLORBAR_RENDER_DPI = 150 COLORBAR_TARGET_WIDTH_PIXELS = 200 # Approximate width for the colorbar image -# --- Helper: Matrix Aggregation --- def _aggregate_matrix_max(matrix: np.ndarray, block_shape: tuple[int, int]) -> np.ndarray: """Aggregates matrix by taking the maximum in blocks. @@ -37,11 +35,9 @@ def _aggregate_matrix_max(matrix: np.ndarray, block_shape: tuple[int, int]) -> n new_rows, new_cols = padded_matrix.shape target_rows, target_cols = new_rows // block_rows, new_cols // block_cols - # Efficient reshape and sum for block aggregation return padded_matrix.reshape(target_rows, block_rows, target_cols, block_cols).max(axis=3).max(axis=1) -# --- Helper: Matrix Scaling --- def _get_scaled_matrix_for_display(mat: np.ndarray) -> np.ndarray: """Resizes matrix: downscales then upscales to fit display dimension constraints.""" processed_mat = mat @@ -73,7 +69,6 @@ def _get_scaled_matrix_for_display(mat: np.ndarray) -> np.ndarray: return processed_mat.copy() if processed_mat is mat else processed_mat -# --- Helper: Heatmap Array Generation --- def _generate_heatmap_rgb_array(display_mat: np.ndarray, min_val_display: float | None, cmap_name: str, percent: bool): """Generates the RGB heatmap image array using Matplotlib colormaps, and returns norm info.""" @@ -108,18 +103,17 @@ def chunks(): return rgb, norm, norm_vmin, norm_vmax -# --- Helper: Colorbar Ticks --- def _get_colorbar_ticks_and_labels(norm_vmin: float, norm_vmax: float, max_ticks: int, percent: bool) -> tuple[list[float], list[str]]: """Generates tick values and labels for the colorbar.""" if not (norm_vmin > 0 and norm_vmax > 0 and norm_vmin < norm_vmax): return [], [] - num_decades = math.log10(norm_vmax / norm_vmin) if norm_vmin > 0 and norm_vmax > 0 else 1 + num_decades = math.log10(norm_vmax / norm_vmin) multipliers = [1, 2, 5] if num_decades < 2 else [1, 1.5, 2, 3, 5, 7] # Fewer for small ranges tick_cands = {norm_vmin, norm_vmax} - start_exp = math.floor(math.log10(norm_vmin)) if norm_vmin > 0 else 0 - end_exp = math.ceil(math.log10(norm_vmax)) if norm_vmax > 0 else 0 + start_exp = math.floor(math.log10(norm_vmin)) + end_exp = math.ceil(math.log10(norm_vmax)) for exp_val in range(start_exp, end_exp + 1): for m in multipliers: @@ -127,32 +121,17 @@ def _get_colorbar_ticks_and_labels(norm_vmin: float, norm_vmax: float, max_ticks if norm_vmin <= tick <= norm_vmax: # Ensure ticks are within actual data range tick_cands.add(tick) - # Filter again to be absolutely sure, then sort - sorted_ticks = sorted(list(t for t in tick_cands if norm_vmin <= t <= norm_vmax)) - - if len(sorted_ticks) > max_ticks: # Subsample if too many - indices = np.round(np.linspace(0, len(sorted_ticks) - 1, max_ticks)).astype(int) - final_ticks = [sorted_ticks[i] for i in sorted(list(set(indices)))] - # Ensure original vmin and vmax are considered if space allows - if max_ticks >= 1 and not np.isclose(final_ticks[0], norm_vmin): - final_ticks.insert(0, norm_vmin) - if max_ticks >= 2 and not np.isclose(final_ticks[-1], norm_vmax): - final_ticks.append(norm_vmax) - final_ticks = sorted(list(set(t for t in final_ticks if norm_vmin <= t <= norm_vmax)))[:max_ticks] - else: - final_ticks = sorted_ticks - - # Ensure at least two ticks (min/max) if possible, if list became empty by max_ticks=0 or 1 - if not final_ticks and len(sorted_ticks) >= 1: - final_ticks = [sorted_ticks[0]] - if len(sorted_ticks) > 1: - final_ticks.append(sorted_ticks[-1]) - final_ticks = sorted(list(set(final_ticks))) + final_ticks = sorted(tick_cands) + if max_ticks == 0: + # Preserve the legacy zero-limit fallback to both bounds. + final_ticks = [norm_vmin, norm_vmax] + elif len(final_ticks) > max_ticks: + indices = np.round(np.linspace(0, len(final_ticks) - 1, max_ticks)).astype(int) + final_ticks = [final_ticks[i] for i in indices] labels = [] for v_tick in final_ticks: val_fmt = v_tick * 100 if percent else v_tick - lab_str = "" if percent: if abs(val_fmt) < 0.01 and val_fmt != 0: lab_str = f"{val_fmt:.1e}%" @@ -170,7 +149,6 @@ def _get_colorbar_ticks_and_labels(norm_vmin: float, norm_vmax: float, max_ticks return final_ticks, labels -# --- Helper: Colorbar Array Generation --- def _generate_colorbar_rgb_array( norm_obj: mpl.colors.LogNorm, cmap_name_str: str, @@ -216,7 +194,6 @@ def _generate_colorbar_rgb_array( return img_rgb -# --- Main Plotting Function --- def plot_heatmap( mat: np.ndarray | torch.Tensor, cmap_name: str = "magma", @@ -228,7 +205,7 @@ def plot_heatmap( ): """Plots a high-resolution confusion matrix using NumPy and Matplotlib. - Returns a combined RGB NumPy array (heatmap + colorbar), or None for empty input. + Return an RGB uint8 array with an optional colorbar; empty input gives a gray image. """ if isinstance(mat, torch.Tensor): mat = mat.cpu().detach().float().numpy() @@ -237,10 +214,8 @@ def plot_heatmap( img = np.full((MIN_DISPLAY_DIM_HEATMAP, MIN_DISPLAY_DIM_HEATMAP + COLORBAR_TARGET_WIDTH_PIXELS, 3), (200, 200, 200), dtype=np.uint8) return img - # 1. Scale matrix for display display_mat = _get_scaled_matrix_for_display(mat) - # 2. Generate heatmap RGB array heatmap_rgb_array, norm_obj, vmin, vmax = _generate_heatmap_rgb_array(display_mat, min_val_display, cmap_name, percent) if not colorbar: @@ -252,18 +227,13 @@ def plot_heatmap( ) # Slightly different gray return np.hstack((heatmap_rgb_array, empty_cbar_space)) - # 3. Get colorbar ticks and labels tick_values, tick_labels = _get_colorbar_ticks_and_labels(vmin, vmax, max_colorbar_ticks, percent) - # 4. Generate colorbar RGB array colorbar_rgb_array = _generate_colorbar_rgb_array( norm_obj, cmap_name, tick_values, tick_labels, target_height_pixels=heatmap_rgb_array.shape[0], font_size_pt=font_size ) - # 5. Combine heatmap and colorbar - final_rgb_image = np.hstack((heatmap_rgb_array, colorbar_rgb_array)) - - return final_rgb_image + return np.hstack((heatmap_rgb_array, colorbar_rgb_array)) def plot_class_distance_matrix(model: nn.Module, **kwargs): diff --git a/publication/experiments/README.md b/publication/experiments/README.md index 8651c37..451d179 100644 --- a/publication/experiments/README.md +++ b/publication/experiments/README.md @@ -1,77 +1,45 @@ -# Experiments +# Research experiments -## Configuration +## Generate a SLURM matrix -To configure and orchestrate an experiment with SLURM use the following recipe: +From the repository root, use the [installed environment](../../README.md#local-installation) +and copy [config.template.yaml](config.template.yaml) to a campaign configuration. -1) Create a configuration YAML file (**``**) following the template [config.template.yaml](./config.template.yaml). - - `name`: Set the experiment name (**``**), also used for the SLURM job name. - - `slurm`: Configure SBATCH arguments. - - `experiment`: Configure experiment matrix parameters for `mini_trainer`. - - `eval`: Configure evaluation datasets for specific experiment parameters. - - `args`: Configure fixed (shared) `mini_trainer` parameters used for all experiment matrix parameter combinations. -2) Create the SLURM array script for running the experiment matrix: `uv run orchestrate.py `. - *(Validate the correct construction of the experiment matrix in the file `slurm_jobs//tasks.txt`).* -3) Run the SLURM array script `sbatch slurm_jobs//array.sh`. - -## Notes - -Loose notes for the experiment configuration and matrix. - -## Template train command +| Configuration | Role | +| --- | --- | +| `name`, `output_dir` | Campaign name and shared output base; defaults to `slurm_jobs/`. | +| `stubs`, `slurm` | Installed training/prediction/metric commands and SBATCH settings. | +| `datasets`, `eval` | Dataset paths/indexes and training-to-evaluation dataset mappings. | +| `experiment` | Cartesian product of model, head, dataset and other axes. | +| `args` | `shared`, `train`, `eval` and `metrics` options; dictionaries select values by matrix axis. | ```sh -mt_htrain -i \ - -o \ - --model \ - --head \ - --dtype float16 \ - --batch_size 256 \ - --epochs \ - --warmup_epochs 0.1 \ - --class_weighted \ - --loss_weights [...] \ - --wandb +.venv/bin/python -m publication.experiments.orchestrate campaign.yaml ``` -## Experiment matrix - -- Datasets (2) - - global_lepi - - plantnet300k - -- Models (6) - - efficientnet_v2_[s/m/l] - - ViT_L_16 - - ViT_H_14 - - BioClip2 (finetune only and/or zero-shot) - -- Heads (6) - - Flat - - Bottom-up - - Top-down - - Independent - - Autoregressive (independent) - - Autoregressive (geometrically nested) - -### Table templates - -#### Global Lepidoptera - -| Model | Head | -|-------|------| -| ... | ... | +Inspect `train_tasks.txt`, `eval_tasks.txt`, `metric_tasks.txt` and `array.sh` in +`//` before submitting `sbatch //array.sh`. +Each array task runs training, prediction from `weights/last.pt`, then metrics; +a failed command stops that task. Results go under the campaign's `results/`. +Generation can resolve taxonomy while constructing evaluation combinations. -#### Flemming eval +The generated script assumes commands and dataset/output paths are available on +the compute node; it does not install or activate an environment. Use explicit +indexes for external evaluation datasets. Without one, evaluation only supports +the training dataset and reuses its generated `data_index.json`. -OOD test using model trained on Global Lepidoptera +## Research scope -| Model | Head | -|-------|------| -| ... | ... | +Proposed matrix: Global Lepidoptera and Pl@ntNet300K; EfficientNetV2 S/M/L, +ViT-L/16, ViT-H/14 and BioCLIP2 (fine-tuned or zero-shot); flat, bottom-up, +top-down, independent and autoregressive heads (independent or geometrically +nested). Flemming supplies out-of-domain evaluation for Global Lepidoptera. +These are planned comparisons, not recorded results. -#### Pl@ntNet300K +The separate [prototype-coordinate study](prototype_linearization/README.md) +contains its own reproduction workflow and evidence. -| Model | Head | -|-------|------| -| ... | ... | +[boot_metrics.py](statistics/boot_metrics.py) repeats seeded `mini_metrics` +threshold calibration/evaluation and writes metrics by seed and rank. Its legacy +name does not imply bootstrap resampling: sampling is delegated to the installed +`mini_metrics`. Record that dependency revision when retaining results. diff --git a/publication/experiments/config.template.yaml b/publication/experiments/config.template.yaml index 5d38500..092cb11 100644 --- a/publication/experiments/config.template.yaml +++ b/publication/experiments/config.template.yaml @@ -2,7 +2,7 @@ name: # Optional custom base output directory (e.g., on Gefion persistent shared storage /dcai/projects/...) # Environment variables like $PROJECT, $USER, or $HOME are automatically expanded. -# Defaults to "slurm_jobs" if omitted (/results is appended automatically). +# Defaults to "slurm_jobs"; scripts go in / and results in /results/. # output_dir: /dcai/projects/$PROJECT/mini_trainer/experiments stubs: diff --git a/publication/experiments/prototype_linearization/README.md b/publication/experiments/prototype_linearization/README.md new file mode 100644 index 0000000..0c13d4d --- /dev/null +++ b/publication/experiments/prototype_linearization/README.md @@ -0,0 +1,95 @@ +# Classical-tool representations of production classifier prototypes + +Research scope: choose useful coordinates for existing classical statistical tools, +not storage compression or a replacement classifier. The immutable input is the +12,632 x 1,280 effective weight CSV exported through mini_trainer's prototype +loader, including original GBIF taxonomy. Input CSV SHA256: +`94b39070d891e87f129ae152a5754d8c4e5009cc843dffb0e0882911857eeb2f`. + +## Protocol + +- Three fixed 70/15/15 train/validation/test species splits (42, 43, 44), stratified + by model family. Families with fewer than ten species are excluded from this + supervised comparison; 12,473 rows remain. Original row indices are retained. +- Fit anchors, charts, PCA, radial warping, kernels and all predictors on training + rows only. Choose ridge regularization by validation macro recall over + `[0.01, 0.1, 1, 10, 100]`; report held-out micro accuracy and macro recall. +- Downstream tasks: family prediction with a classical ridge linear classifier + and Gaussian naive Bayes; genus prediction with weighted Euclidean 5-NN on + test genera represented in training; family clustering using mini-batch k-means + on 32 PCs; and PCA reconstruction at 2, 32 and 128 dimensions. +- Retrieval: ten-neighbour overlap against original-space Euclidean neighbours + (equivalent ordering to cosine/angular neighbours for unit vectors). +- One scalar RMS-radius normalization for ridge comparisons, not coordinate-wise + standardization that would erase geometric differences. Gaussian NB is + coordinate-dependent; PCA rotation itself can change its independence fit. +- Float64 analysis, four BLAS threads, CPU. Timing includes actual fit and batch + transform but not CSV parsing unless explicitly stated. Each method runs once + per split; timings are practical observations, not a performance guarantee. +- These are species-prototype tests, not image-level generalization, calibration, + tracking/Kalman filtering or density-likelihood validation. The model was trained + with taxonomy-aware objectives: taxonomy is useful external interpretation of + these rows, but it is not independent of how the prototypes were learned. + +## Methods and references + +- Original ambient unit weights are the required baseline: classical tools can + already operate on them; mean renormalization is an available extrinsic estimate. +- Sphere log map at normalized arithmetic mean, and at a 40-step local intrinsic + mean estimate. This is tangent-space preprocessing, not an exact global PGA + optimizer. See [Fletcher et al. 2004, DOI](https://doi.org/10.1109/TMI.2004.831793). +- Stereographic chart, with inverse and one excluded antipode. Conformal does not + mean dot-product preserving. [Reference implementation and mathematics](https://people.math.sc.edu/burkardt/f_src/sphere_stereograph/sphere_stereograph.html). +- `equal_area` in initial result files is the **Lambert radial formula extended to + high dimension**. It is area preserving on S², not volume preserving on S¹²⁷⁹; + do not interpret the historical method key as a high-dimensional Jacobian claim. + [USGS map projection reference](https://pubs.usgs.gov/pp/1395/report.pdf). +- `log_radial` is an explicitly experimental control inspired by the proposed + radial CDF transform: piecewise-linear empirical quantiles to the large-dimension + Gaussian-radius approximation. Endpoint clamping makes unseen extreme radii + noninvertible. It is not a normalizing flow or a published sphere-unrolling method. +- PCA and PCA whitening use the training covariance. Truncated PCA is lossy; + full-rank whitening is invertible with saved mean/loadings/scales. Whitening + changes distances and regularization, not just coordinates. +- [Jung, Dryden & Marron 2012, Principal Nested Spheres](https://www.statistics.pitt.edu/sungkyu/papers/Biometrika-2012-Jung-551-68.pdf). + The score space retains a circular coordinate and bounded residual intervals. + Our small-sphere least-squares solver is a bounded reference implementation, + with three initializations per stage, not the authors' R implementation. +- [Monem, Dryden & George 2025, fast PNS preprint](https://arxiv.org/html/2511.08398v1), + section 3.3: fit PCA to orthogonal tangent coordinates, project log coordinates, + exponentiate into a lower sphere, then fit PNS. Reducing to 32 dimensions is a + computationally useful but lossy approximation; full PNS at 1,279 dimensions + is not benchmarked. Check optimizer diagnostics and reduced-sphere roundtrip. +- [Williams & Seeger 2000, Nyström kernel approximation](https://proceedings.neurips.cc/paper/2000/file/19de10adbaa1b2ee13f77f679fa1483a-Paper.pdf). + RBF kernel features are a scalable nonlinear input to linear tools. An explicit + out-of-sample transform exists; the inverse is only an approximate ridge preimage. + [Mika et al. 1998 explain the preimage problem](https://proceedings.neurips.cc/paper/1998/hash/226d1f15ecd35f784d2a20c3ecf56d7f-Abstract.html). + +## Run + +Use the existing environment without synchronizing it. This research uses installed +NumPy, SciPy, scikit-learn and threadpoolctl; the summary plot also uses Matplotlib. +It adds no mini_trainer dependency. + +```bash +OPENBLAS_NUM_THREADS=4 .venv/bin/python publication/experiments/prototype_linearization/benchmark.py \ + --input /path/to/classifier_weights.csv.gz --output /tmp/prototype-linearization-baseline +OPENBLAS_NUM_THREADS=4 .venv/bin/python publication/experiments/prototype_linearization/advanced.py \ + --input /path/to/classifier_weights.csv.gz --baseline /tmp/prototype-linearization-baseline \ + --output /tmp/prototype-linearization-advanced +``` + +Output paths must be fresh. Each method saves results as it finishes. Split manifests +are local binary artifacts; the input, model and generated matrices are not committed. + +The follow-up extends PCA to 512 coordinates, RBF widths to 0.01 and 0.1, and +fast PNS to 128 coordinates. `selection.py` selects Gaussian-NB PCA dimension +on validation macro recall from 32, 128, 256, 512, 768, 1024, 1280 and measures +single-point chart insertion/inversion. Both accept the same `--input`, +`--baseline` and fresh `--output` arguments as advanced.py. + +Collect the four output directories as `baseline`, `advanced`, `followup` and +`selection` beneath a study directory, then run `summarize.py --study /path/to/study` +to generate the table, figure, summary and checksums. See +[the findings](../../../docs/prototype-coordinate-study.md) for conclusions, +limitations and recommendations. diff --git a/publication/experiments/prototype_linearization/advanced.py b/publication/experiments/prototype_linearization/advanced.py new file mode 100644 index 0000000..dbfbba0 --- /dev/null +++ b/publication/experiments/prototype_linearization/advanced.py @@ -0,0 +1,232 @@ +"""PCA/whitening, Nyström kernels and fast principal nested spheres follow-up. + +PNS uses Monem, Dryden & George (2025), section 3.3, for the initial +32-dimensional sphere. Least-squares subspheres use three starts with L-BFGS. +This is a bounded reference implementation, not the authors' R package. +""" + +import argparse +import json +import time +from pathlib import Path + +import numpy as np +from benchmark import Coordinates, load, scores, unit +from scipy.optimize import minimize, minimize_scalar +from sklearn.decomposition import PCA +from sklearn.kernel_approximation import Nystroem +from sklearn.linear_model import Ridge, RidgeClassifier +from sklearn.metrics import balanced_accuracy_score +from sklearn.naive_bayes import GaussianNB +from sklearn.neighbors import KNeighborsClassifier +from threadpoolctl import threadpool_limits + + +def wrap(a): + return (a + np.pi) % (2 * np.pi) - np.pi + + +class PNS: + def fit(self, x): + self.stages = [] + self.optimization = [] + scale = 1.0 + while x.shape[1] > 2: + _, eig = np.linalg.eigh(np.cov(x, rowvar=False)) + starts = [unit(x.mean(0)), eig[:, 0], eig[:, 1]] + + def objective(v): + nv = np.linalg.norm(v) + u = v / nv + c = np.clip(x @ u, -1 + 1e-12, 1 - 1e-12) + angles = np.arccos(c) + residual = angles - angles.mean() + grad = x.T @ (-2 * residual / np.sqrt(1 - c * c)) / len(x) + grad = (grad - u * np.dot(grad, u)) / nv + return np.mean(residual**2), grad + + fits = [ + minimize(objective, v, method="L-BFGS-B", jac=True, options={"maxiter": 100, "ftol": 1e-11, "gtol": 1e-7}) for v in starts + ] + best = min(fits, key=lambda f: f.fun) + axis = unit(best.x) + radius = np.arccos(np.clip(x @ axis, -1, 1)).mean() + if radius > np.pi / 2: + axis = -axis + radius = np.pi - radius + w = axis.copy() + w[0] -= 1 + w = unit(w) if np.linalg.norm(w) > 1e-12 else np.zeros_like(w) + self.stages.append((w, radius, scale)) + self.optimization.append( + {"dimension": x.shape[1] - 1, "success": bool(best.success), "iterations": int(best.nit), "objective": float(best.fun)} + ) + rotated = x - 2 * (x @ w)[:, None] * w + x = unit(rotated[:, 1:]) + scale *= np.sin(radius) + angles = np.arctan2(x[:, 1], x[:, 0]) + # Bounded scalar minimization in several intervals to address the seam. + candidates = [ + minimize_scalar(lambda m: np.mean(wrap(angles - m) ** 2), bounds=(left, left + np.pi / 2), method="bounded") + for left in np.linspace(-np.pi, np.pi, 4, endpoint=False) + ] + self.circle_mean = min(candidates, key=lambda f: f.fun).x + self.circle_scale = scale + return self + + def transform(self, x): + parts = [] + for w, radius, scale in self.stages: + y = x - 2 * (x @ w)[:, None] * w + parts.append((np.arctan2(np.linalg.norm(y[:, 1:], axis=1), y[:, 0]) - radius) * scale) + x = unit(y[:, 1:]) + parts.append(wrap(np.arctan2(x[:, 1], x[:, 0]) - self.circle_mean) * self.circle_scale) + return np.column_stack(parts[::-1]) + + def inverse(self, z): + angle = z[:, 0] / self.circle_scale + self.circle_mean + x = np.column_stack((np.cos(angle), np.sin(angle))) + for i, (w, radius, scale) in enumerate(self.stages[::-1], 1): + angle = z[:, i] / scale + radius + x = np.column_stack((np.cos(angle), np.sin(angle)[:, None] * x)) + x -= 2 * (x @ w)[:, None] * w + return x + + +def evaluate(features, family, genus, split): + tr, va, te = split + ztr, zva, zte = features + scale = np.sqrt(np.mean(np.sum((ztr - ztr.mean(0)) ** 2, axis=1))) + ztr, zva, zte = [z / scale for z in features] + best = None + for alpha in [0.01, 0.1, 1, 10, 100]: + clf = RidgeClassifier(alpha=alpha).fit(ztr, family[tr]) + v = balanced_accuracy_score(family[va], clf.predict(zva)) + if best is None or v > best[0]: + best = (v, alpha, clf) + row = {"ridge_family": scores(family[te], best[2].predict(zte)) | {"alpha": best[1], "validation_balanced_accuracy": float(best[0])}} + g = GaussianNB().fit(ztr, family[tr]) + row["gaussian_nb_family"] = scores(family[te], g.predict(zte)) + covered = np.isin(genus[te], genus[tr]) + knn = KNeighborsClassifier(n_neighbors=5, weights="distance").fit(ztr, genus[tr]) + row["knn_genus"] = scores(genus[te][covered], knn.predict(zte)[covered]) + return row + + +def main(): + p = argparse.ArgumentParser(description=__doc__) + p.add_argument("--input", type=Path, required=True) + p.add_argument("--baseline", type=Path, required=True) + p.add_argument("--output", type=Path, required=True) + p.add_argument("--seeds", nargs="+", type=int, default=[42, 43, 44]) + a = p.parse_args() + a.output.mkdir(parents=True, exist_ok=False) + full, f, g = load(a.input) + results = [] + for seed in a.seeds: + s = np.load(a.baseline / f"split-{seed}.npz") + keep = s["eligible_original_rows"] + x = full[keep] + family = f[keep] + genus = g[keep] + split = [s[k] for k in ["train", "validation", "test"]] + tr, va, te = split + + def record(name, features, fit_s, insert_s, inverse=None, extra=None): + row = { + "seed": seed, + "method": name, + "dimensions": features[0].shape[1], + "fit_seconds": fit_s, + "transform_seconds_all": insert_s, + } + row.update(evaluate(features, family, genus, split)) + if inverse: + restored = unit(inverse(features[2])) + row["reconstruction_degrees"] = float(np.degrees(np.arccos(np.clip(np.sum(restored * x[te], axis=1), -1, 1))).mean()) + if extra: + row.update(extra) + results.append(row) + (a.output / "results.json").write_text(json.dumps(results, indent=2)) + print(seed, name, row["ridge_family"], row["gaussian_nb_family"], "fit", round(fit_s, 2), flush=True) + + start = time.perf_counter() + pca = PCA(n_components=None, svd_solver="covariance_eigh").fit(x[tr]) + fit_s = time.perf_counter() - start + start = time.perf_counter() + pc = [pca.transform(x[idx]) for idx in split] + insert_s = time.perf_counter() - start + for dim in [32, 128, 1280]: + for whiten in [False, True]: + if dim == 1280 and not whiten: + continue + scales = np.sqrt(np.maximum(pca.explained_variance_[:dim], 1e-12)) if whiten else np.ones(dim) + features = [z[:, :dim] / scales for z in pc] + record( + f"pca{dim}" + ("_whiten" if whiten else ""), + features, + fit_s, + insert_s, + lambda z: (z * scales) @ pca.components_[:dim] + pca.mean_, + ) + # Fast PNS: PCA of orthogonal tangent coordinates, log projection, + # exp onto S^32, then nested small-sphere least-squares fitting. + start = time.perf_counter() + chart = Coordinates("log_mean").fit(x[tr]) + rot = chart.rotate(x[tr]) + tangent = rot[:, 1:] + smallpca = PCA(n_components=32, svd_solver="randomized", random_state=seed).fit(tangent) + basis = smallpca.components_ + logs = [chart.transform(x[idx]) @ basis.T for idx in split] + + def sphere(z): + r = np.linalg.norm(z, axis=1) + return np.column_stack((np.cos(r), z * np.sinc(r[:, None] / np.pi))) + + spheres = [sphere(z) for z in logs] + preparation = time.perf_counter() - start + record("fast_pns_input_log32", logs, preparation, 0, lambda z: chart.inverse(z @ basis)) + start = time.perf_counter() + pns = PNS().fit(spheres[0]) + fit_s = time.perf_counter() - start + preparation + start = time.perf_counter() + features = [pns.transform(z) for z in spheres] + insert_s = time.perf_counter() - start + error = float(np.max(np.abs(pns.inverse(features[2]) - spheres[2]))) + assert error < 1e-8, error + + def invert_pns(z): + reduced = pns.inverse(z) + return chart.rotate(np.column_stack((reduced[:, 0], reduced[:, 1:] @ basis))) + + record( + "fast_pns32", + features, + fit_s, + insert_s, + invert_pns, + {"reduced_sphere_roundtrip_max_abs": error, "optimizer_stages": pns.optimization}, + ) + # Kernel features for classical linear models; no analytic inverse. + for gamma in [1.0, 5.0, 20.0]: + start = time.perf_counter() + kernel = Nystroem(kernel="rbf", gamma=gamma, n_components=512, random_state=seed).fit(x[tr]) + fit_s = time.perf_counter() - start + start = time.perf_counter() + features = [kernel.transform(x[idx]) for idx in split] + insert_s = time.perf_counter() - start + preimage = Ridge(alpha=0.01).fit(features[0], x[tr]) + record( + f"nystrom512_gamma{gamma}", + features, + fit_s, + insert_s, + preimage.predict, + {"inverse": "ridge preimage, fitted on training only; approximate"}, + ) + print("Complete", flush=True) + + +if __name__ == "__main__": + with threadpool_limits(limits=4): + main() diff --git a/publication/experiments/prototype_linearization/benchmark.py b/publication/experiments/prototype_linearization/benchmark.py new file mode 100644 index 0000000..fa5aa28 --- /dev/null +++ b/publication/experiments/prototype_linearization/benchmark.py @@ -0,0 +1,206 @@ +"""Held-out prototype coordinate benchmark; research only, no training changes.""" + +import argparse +import csv +import gzip +import hashlib +import json +import platform +import time +from pathlib import Path + +import numpy as np +import scipy +import sklearn +from scipy.special import ndtri +from sklearn.cluster import MiniBatchKMeans +from sklearn.decomposition import PCA +from sklearn.linear_model import RidgeClassifier +from sklearn.metrics import accuracy_score, adjusted_rand_score, balanced_accuracy_score +from sklearn.model_selection import train_test_split +from sklearn.naive_bayes import GaussianNB +from sklearn.neighbors import KNeighborsClassifier, NearestNeighbors +from threadpoolctl import threadpool_limits + + +def unit(x): + return x / np.maximum(np.linalg.norm(x, axis=-1, keepdims=True), 1e-15) + + +class Coordinates: + def __init__(self, kind): + self.kind = kind + + def fit(self, x): + self.mu = unit(x.mean(0)) + if self.kind == "log_intrinsic": + for _ in range(40): + c = np.clip(x @ self.mu, -1, 1) + t = x - c[:, None] * self.mu + theta = np.arctan2(np.linalg.norm(t, axis=1), c) + delta = (unit(t) * theta[:, None]).mean(0) + r = np.linalg.norm(delta) + if r < 1e-8: + break + self.mu = unit(np.cos(r) * self.mu + np.sinc(r / np.pi) * delta) + v = self.mu.copy() + v[0] -= 1 + self.w = unit(v) if np.linalg.norm(v) > 1e-12 else np.zeros_like(v) + if self.kind == "log_radial": + radii = np.linalg.norm(self.base(x), axis=1) + self.radii = np.sort(radii) + # Smooth empirical-quantile interpolation, NOT an exact empirical CDF. + # Gaussian radial asymptotic approximation; deliberately a control. + n, d = x.shape + self.targets = np.sqrt(d - 1 - 0.5) + ndtri((np.arange(n) + 0.5) / n) / np.sqrt(2) + return self + + def rotate(self, x): + return x - 2 * (x @ self.w)[..., None] * self.w + + def base(self, x): + y = self.rotate(x) + c, tail = np.clip(y[:, 0], -1, 1), y[:, 1:] + r = np.linalg.norm(tail, axis=1) + if self.kind == "stereographic": + return tail / (1 + c[:, None]) + if self.kind == "equal_area": + return tail * np.sqrt(2 / (1 + c[:, None])) + return unit(tail) * np.arctan2(r, c)[:, None] + + def transform(self, x): + if self.kind == "ambient": + return x.copy() + z = self.base(x) + if self.kind == "log_radial": + z = unit(z) * np.interp(np.linalg.norm(z, axis=1), self.radii, self.targets)[:, None] + return z + + def inverse(self, z): + if self.kind == "ambient": + return unit(z) + if self.kind == "log_radial": + z = unit(z) * np.interp(np.linalg.norm(z, axis=1), self.targets, self.radii)[:, None] + r = np.linalg.norm(z, axis=1) + if self.kind == "stereographic": + s = r * r + return self.rotate(np.column_stack(((1 - s) / (1 + s), 2 * z / (1 + s[:, None])))) + if self.kind == "equal_area": + # Outside valid chart ball, clip for approximate PCA reconstruction. + r = np.minimum(r, 2) + z = unit(z) * r[:, None] + return self.rotate(np.column_stack((1 - r * r / 2, z * np.sqrt(np.maximum(0, 1 - r * r / 4))[:, None]))) + return self.rotate(np.column_stack((np.cos(r), z * np.sinc(r[:, None] / np.pi)))) + + +def scores(y, pred): + return {"accuracy": float(accuracy_score(y, pred)), "balanced_accuracy": float(balanced_accuracy_score(y, pred))} + + +def load(path): + with gzip.open(path, "rt", newline="") as f: + reader = csv.DictReader(f) + rows = list(reader) + cols = [c for c in reader.fieldnames if c.startswith("weight_")] + x = np.array([[r[c] for c in cols] for r in rows], dtype=np.float64) + return unit(x), np.array([r["family_gbif_id"] for r in rows]), np.array([r["genus_gbif_id"] for r in rows]) + + +def main(): + p = argparse.ArgumentParser(description=__doc__) + p.add_argument("--input", type=Path, required=True) + p.add_argument("--output", type=Path, required=True) + p.add_argument("--seeds", type=int, nargs="+", default=[42, 43, 44]) + a = p.parse_args() + a.output.mkdir(parents=True, exist_ok=False) + x, family, genus = load(a.input) + _, counts = np.unique(family, return_counts=True) + labels, counts = np.unique(family, return_counts=True) + eligible = np.isin(family, labels[counts >= 10]) + x, family, genus = x[eligible], family[eligible], genus[eligible] + result = { + "input_sha256": hashlib.sha256(a.input.read_bytes()).hexdigest(), + "shape": list(x.shape), + "excluded_rare_family_rows": int((~eligible).sum()), + "numpy": np.__version__, + "scipy": scipy.__version__, + "sklearn": sklearn.__version__, + "platform": platform.platform(), + "threads": 4, + "rows": [], + } + for seed in a.seeds: + tr, rest = train_test_split(np.arange(len(x)), test_size=0.3, random_state=seed, stratify=family) + va, te = train_test_split(rest, test_size=0.5, random_state=seed, stratify=family[rest]) + np.savez(a.output / f"split-{seed}.npz", train=tr, validation=va, test=te, eligible_original_rows=np.flatnonzero(eligible)) + original_nn = NearestNeighbors(n_neighbors=10).fit(x[tr]).kneighbors(x[te], return_distance=False) + for kind in ["ambient", "log_mean", "log_intrinsic", "stereographic", "equal_area", "log_radial"]: + start = time.perf_counter() + model = Coordinates(kind).fit(x[tr]) + fit_s = time.perf_counter() - start + start = time.perf_counter() + ztr, zva, zte = [model.transform(x[idx]) for idx in [tr, va, te]] + transform_s = time.perf_counter() - start + row = { + "seed": seed, + "method": kind, + "fit_seconds": fit_s, + "transform_seconds_all": transform_s, + "heldout_roundtrip_max_abs": float(np.max(np.abs(model.inverse(zte) - x[te]))), + } + norms = np.linalg.norm(zte, axis=1) + row["radius_mean_sd"] = [float(norms.mean()), float(norms.std())] + # One scalar scaling lets the same regularization grid cover all charts. + scale = np.sqrt(np.mean(np.sum((ztr - ztr.mean(0)) ** 2, axis=1))) + features = [z / scale for z in [ztr, zva, zte]] + best = None + for alpha in [0.01, 0.1, 1, 10, 100]: + clf = RidgeClassifier(alpha=alpha).fit(features[0], family[tr]) + val = balanced_accuracy_score(family[va], clf.predict(features[1])) + if best is None or val > best[0]: + best = (val, alpha, clf) + row["ridge_family"] = scores(family[te], best[2].predict(features[2])) | {"alpha": best[1]} + gnb = GaussianNB().fit(features[0], family[tr]) + row["gaussian_nb_family"] = scores(family[te], gnb.predict(features[2])) + nn = NearestNeighbors(n_neighbors=10).fit(ztr).kneighbors(zte, return_distance=False) + row["original_neighbor_recall10"] = float(np.mean([len(set(a) & set(b)) / 10 for a, b in zip(nn, original_nn)])) + for level, labels in [("family", family), ("genus", genus)]: + covered = np.isin(labels[te], labels[tr]) + clf = KNeighborsClassifier(n_neighbors=5, weights="distance").fit(ztr, labels[tr]) + pred = clf.predict(zte) + row["knn_" + level] = scores(labels[te][covered], pred[covered]) | {"test_coverage": float(covered.mean())} + pca = PCA(n_components=128, svd_solver="randomized", random_state=seed).fit(ztr) + row["pca"] = {} + for dim in [2, 32, 128]: + ptr, pte = pca.transform(ztr)[:, :dim], pca.transform(zte)[:, :dim] + restored = model.inverse(pte @ pca.components_[:dim] + pca.mean_) + angles = np.degrees(np.arccos(np.clip(np.sum(restored * x[te], axis=1), -1, 1))) + row["pca"][str(dim)] = { + "mean_reconstruction_degrees": float(angles.mean()), + "test_coordinate_variance_explained": float( + 1 - np.sum((zte - (pte @ pca.components_[:dim] + pca.mean_)) ** 2) / np.sum((zte - ztr.mean(0)) ** 2) + ), + } + if dim == 32: + km = MiniBatchKMeans(n_clusters=len(np.unique(family)), n_init=3, random_state=seed, batch_size=1024).fit(ptr) + row["pca"]["32"]["kmeans_family_ari"] = float(adjusted_rand_score(family[te], km.predict(pte))) + row["total_seconds"] = time.perf_counter() - start + fit_s + result["rows"].append(row) + (a.output / "results.json").write_text(json.dumps(result, indent=2)) + print( + seed, + kind, + "ridge", + row["ridge_family"], + "knn", + row["knn_genus"]["accuracy"], + "roundtrip", + row["heldout_roundtrip_max_abs"], + flush=True, + ) + print("Complete", a.output, flush=True) + + +if __name__ == "__main__": + with threadpool_limits(limits=4): + main() diff --git a/publication/experiments/prototype_linearization/followup.py b/publication/experiments/prototype_linearization/followup.py new file mode 100644 index 0000000..d61a9d8 --- /dev/null +++ b/publication/experiments/prototype_linearization/followup.py @@ -0,0 +1,98 @@ +"""Bounded follow-up: matched dimensions, broader RBF widths, PNS at 128D.""" + +import argparse +import json +import time +from pathlib import Path + +import numpy as np +from advanced import PNS, evaluate +from benchmark import Coordinates, load, unit +from sklearn.decomposition import PCA +from sklearn.kernel_approximation import Nystroem +from sklearn.linear_model import Ridge +from threadpoolctl import threadpool_limits + + +def main(): + p = argparse.ArgumentParser(description=__doc__) + p.add_argument("--input", type=Path, required=True) + p.add_argument("--baseline", type=Path, required=True) + p.add_argument("--output", type=Path, required=True) + a = p.parse_args() + a.output.mkdir(parents=True, exist_ok=False) + full, f, g = load(a.input) + rows = [] + for seed in [42, 43, 44]: + s = np.load(a.baseline / f"split-{seed}.npz") + keep = s["eligible_original_rows"] + x, family, genus = full[keep], f[keep], g[keep] + split = [s[k] for k in ["train", "validation", "test"]] + tr, va, te = split + + def run(name, fit, transform, inverse): + t = time.perf_counter() + obj = fit() + fit_s = time.perf_counter() - t + t = time.perf_counter() + features = [transform(obj, x[idx]) for idx in split] + transform_s = time.perf_counter() - t + row = {"method": name, "seed": seed, "fit_seconds": fit_s, "transform_seconds_all": transform_s} + row.update(evaluate(features, family, genus, split)) + restored = unit(inverse(obj, features[2])) + row["reconstruction_degrees"] = float(np.degrees(np.arccos(np.clip(np.sum(restored * x[te], axis=1), -1, 1))).mean()) + if isinstance(obj, dict) and "pns" in obj: + row["optimizer_stages"] = obj["pns"].optimization + row["reduced_sphere_roundtrip_max_abs"] = float(np.max(np.abs(obj["pns"].inverse(features[2]) - obj["sphere"](x[te])))) + assert row["reduced_sphere_roundtrip_max_abs"] < 1e-8 + timings = [] + for _ in range(31): + t = time.perf_counter() + transform(obj, x[te[:1]]) + timings.append(time.perf_counter() - t) + row["one_point_median_us"] = float(np.median(timings) * 1e6) + rows.append(row) + (a.output / "results.json").write_text(json.dumps(rows, indent=2)) + print(seed, name, row["ridge_family"], row["gaussian_nb_family"], "fit", fit_s, flush=True) + + for dim in [512]: + for whiten in [False, True]: + run( + f"pca{dim}" + ("_whiten" if whiten else ""), + lambda: PCA(n_components=dim, whiten=whiten, svd_solver="randomized", random_state=seed).fit(x[tr]), + lambda m, z: m.transform(z), + lambda m, z: m.inverse_transform(z), + ) + for gamma in [0.01, 0.1]: + + def fit_kernel(): + k = Nystroem(kernel="rbf", gamma=gamma, n_components=512, random_state=seed).fit(x[tr]) + back = Ridge(alpha=0.01).fit(k.transform(x[tr]), x[tr]) + return k, back + + run(f"nystrom512_gamma{gamma}", fit_kernel, lambda m, z: m[0].transform(z), lambda m, z: m[1].predict(z)) + + def fit_pns(): + chart = Coordinates("log_mean").fit(x[tr]) + basis = PCA(n_components=128, svd_solver="randomized", random_state=seed).fit(chart.rotate(x[tr])[:, 1:]).components_ + + def sphere(z): + log = chart.transform(z) @ basis.T + r = np.linalg.norm(log, axis=1) + return np.column_stack((np.cos(r), log * np.sinc(r[:, None] / np.pi))) + + small = sphere(x[tr]) + pns = PNS().fit(small) + return {"chart": chart, "basis": basis, "sphere": sphere, "pns": pns} + + def inverse_pns(m, z): + small = m["pns"].inverse(z) + return m["chart"].rotate(np.column_stack((small[:, 0], small[:, 1:] @ m["basis"]))) + + run("fast_pns128", fit_pns, lambda m, z: m["pns"].transform(m["sphere"](z)), inverse_pns) + print("Complete", flush=True) + + +if __name__ == "__main__": + with threadpool_limits(limits=4): + main() diff --git a/publication/experiments/prototype_linearization/selection.py b/publication/experiments/prototype_linearization/selection.py new file mode 100644 index 0000000..585e069 --- /dev/null +++ b/publication/experiments/prototype_linearization/selection.py @@ -0,0 +1,78 @@ +"""Validation-selected PCA/Gaussian-NB dimension and chart operation timings.""" + +import argparse +import json +import platform +import time +from pathlib import Path + +import numpy as np +from benchmark import Coordinates, load, scores +from sklearn.decomposition import PCA +from sklearn.metrics import balanced_accuracy_score +from sklearn.naive_bayes import GaussianNB +from threadpoolctl import threadpool_limits + + +def main(): + p = argparse.ArgumentParser(description=__doc__) + p.add_argument("--input", type=Path, required=True) + p.add_argument("--baseline", type=Path, required=True) + p.add_argument("--output", type=Path, required=True) + a = p.parse_args() + a.output.mkdir(parents=True, exist_ok=False) + full, f, _ = load(a.input) + result = {"rows": [], "timings": {}, "cpu": platform.processor()} + for seed in [42, 43, 44]: + s = np.load(a.baseline / f"split-{seed}.npz") + keep = s["eligible_original_rows"] + x, y = full[keep], f[keep] + tr, va, te = [s[k] for k in ["train", "validation", "test"]] + pca = PCA(n_components=None, svd_solver="covariance_eigh").fit(x[tr]) + ztr, zva, zte = [pca.transform(x[idx]) for idx in [tr, va, te]] + candidates = [] + best = None + for d in [32, 128, 256, 512, 768, 1024, 1280]: + clf = GaussianNB().fit(ztr[:, :d], y[tr]) + v = float(balanced_accuracy_score(y[va], clf.predict(zva[:, :d]))) + candidates.append({"dimensions": d, "validation_macro_recall": v}) + if best is None or v > best[0]: + best = (v, d, clf) + v, d, clf = best + row = {"seed": seed, "selected_dimensions": d, "validation_candidates": candidates, "test": scores(y[te], clf.predict(zte[:, :d]))} + result["rows"].append(row) + if seed == 42: + result["training_pca_variance"] = { + str(d): float(pca.explained_variance_ratio_[:d].sum()) for d in [2, 32, 128, 256, 512, 768, 1024, 1280] + } + result["family_count"] = len(np.unique(y)) + result["train_validation_test_sizes"] = [len(tr), len(va), len(te)] + result["training_mean_norm"] = float(np.linalg.norm(x[tr].mean(0))) + for kind in ["ambient", "log_mean", "log_intrinsic", "stereographic", "equal_area", "log_radial"]: + t = time.perf_counter() + chart = Coordinates(kind).fit(x[tr]) + fit = time.perf_counter() - t + q = x[te[:1]] + z = chart.transform(q) + item = {"fit_seconds": fit} + for op, fn in [("insert", lambda: chart.transform(q)), ("inverse", lambda: chart.inverse(z))]: + times = [] + for _ in range(101): + t = time.perf_counter() + fn() + times.append(time.perf_counter() - t) + item[op + "_median_us"] = float(np.median(times) * 1e6) + if kind == "log_intrinsic": + c = np.clip(x[tr] @ chart.mu, -1, 1) + tail = x[tr] - c[:, None] * chart.mu + angle = np.arctan2(np.linalg.norm(tail, axis=1), c) + grad = (tail * (angle / np.maximum(np.linalg.norm(tail, axis=1), 1e-15))[:, None]).mean(0) + item["mean_log_norm_after_40_steps"] = float(np.linalg.norm(grad)) + result["timings"][kind] = item + (a.output / "results.json").write_text(json.dumps(result, indent=2)) + print(row, flush=True) + + +if __name__ == "__main__": + with threadpool_limits(limits=4): + main() diff --git a/publication/experiments/prototype_linearization/summarize.py b/publication/experiments/prototype_linearization/summarize.py new file mode 100644 index 0000000..54baf91 --- /dev/null +++ b/publication/experiments/prototype_linearization/summarize.py @@ -0,0 +1,98 @@ +"""Collect the four benchmark stages and render a small comparison plot.""" + +import argparse +import hashlib +import json +from pathlib import Path + +import matplotlib + +matplotlib.use("Agg") +import matplotlib.pyplot as plt +import numpy as np + +p = argparse.ArgumentParser(description=__doc__) +p.add_argument("--study", type=Path, required=True) +a = p.parse_args() +base = json.loads((a.study / "baseline/results.json").read_text()) +rows = base["rows"] +for name in ["advanced", "followup"]: + rows += json.loads((a.study / name / "results.json").read_text()) +selection = json.loads((a.study / "selection/results.json").read_text()) +fields = { + "ridge_macro": lambda r: r["ridge_family"]["balanced_accuracy"], + "ridge_micro": lambda r: r["ridge_family"]["accuracy"], + "gnb_macro": lambda r: r["gaussian_nb_family"]["balanced_accuracy"], + "genus_knn_micro": lambda r: r["knn_genus"]["accuracy"], +} +summary = {} +for method in dict.fromkeys(r["method"] for r in rows): + rr = [r for r in rows if r["method"] == method] + assert len(rr) == 3, (method, len(rr)) + summary[method] = { + name: {"mean": float(np.mean([fn(r) for r in rr])), "sd": float(np.std([fn(r) for r in rr], ddof=1))} for name, fn in fields.items() + } + summary[method]["fit_seconds_mean"] = float(np.mean([r["fit_seconds"] for r in rr])) +summary["validation_selected_pca_gnb"] = { + "mean": float(np.mean([r["test"]["balanced_accuracy"] for r in selection["rows"]])), + "sd": float(np.std([r["test"]["balanced_accuracy"] for r in selection["rows"]], ddof=1)), + "dimensions": [r["selected_dimensions"] for r in selection["rows"]], +} +(a.study / "summary.json").write_text(json.dumps(summary, indent=2)) +header = ( + "| Representation | Linear family macro recall | Linear family micro accuracy | " + "Gaussian NB family macro recall | Genus 5-NN accuracy |\n|---|---:|---:|---:|---:|\n" +) +for name in [ + "ambient", + "log_mean", + "log_intrinsic", + "stereographic", + "equal_area", + "log_radial", + "pca128", + "pca512", + "pca1280_whiten", + "fast_pns32", + "fast_pns128", + "nystrom512_gamma0.01", +]: + r = summary[name] + header += "| " + name + " | " + " | ".join(f"{100 * r[k]['mean']:.2f} ± {100 * r[k]['sd']:.2f}" for k in fields) + " |\n" +(a.study / "table.md").write_text(header) +methods = ["ambient", "log_mean", "stereographic", "pca128", "pca512", "pca1280_whiten", "fast_pns128", "nystrom512_gamma0.01"] +labels = [ + "Original weights", + "Sphere log map", + "Stereographic", + "PCA 128", + "PCA 512", + "Full PCA whitening", + "Fast PNS 128", + "Nyström 512 (γ=.01)", +] +fig, axes = plt.subplots(1, 2, figsize=(12, 5), layout="constrained") +for ax, key, title in zip(axes, ["ridge_macro", "gnb_macro"], ["Linear family classifier", "Gaussian naive Bayes family classifier"]): + y = np.arange(len(methods)) + vals = [100 * summary[m][key]["mean"] for m in methods] + err = [100 * summary[m][key]["sd"] for m in methods] + ax.barh(y, vals, xerr=err, color="#237f8e", alpha=0.85) + ax.set_yticks(y, labels) + ax.invert_yaxis() + ax.set_xlim(0, 100) + ax.set_xlabel("Held-out macro recall (%)") + ax.set_title(title) + ax.grid(axis="x", alpha=0.2) +fig.suptitle( + "Production prototypes: coordinate usefulness depends on the downstream model\n" + "Three species splits; error bars show split SD, not confidence intervals", + fontsize=12, +) +fig.savefig(a.study / "comparison.png", dpi=160) +fig.savefig(a.study / "comparison.svg") +plt.close(fig) +with (a.study / "SHA256SUMS").open("w") as f: + for item in sorted(a.study.rglob("*")): + if item.is_file() and item.name != "SHA256SUMS" and "__pycache__" not in str(item): + f.write(hashlib.sha256(item.read_bytes()).hexdigest() + " " + str(item.relative_to(a.study)) + "\n") +print(header) diff --git a/publication/experiments/prototype_linearization/test_coordinates.py b/publication/experiments/prototype_linearization/test_coordinates.py new file mode 100644 index 0000000..711c6df --- /dev/null +++ b/publication/experiments/prototype_linearization/test_coordinates.py @@ -0,0 +1,36 @@ +"""Focused numerical checks for the research transforms, not package APIs.""" + +import numpy as np +from advanced import PNS +from benchmark import Coordinates, unit +from numpy.testing import assert_allclose + + +def test_chart_roundtrip_and_batch_insertion(): + rng = np.random.default_rng(7) + train, query = unit(rng.normal(size=(100, 9))), unit(rng.normal(size=(12, 9))) + for kind in ["ambient", "log_mean", "log_intrinsic", "stereographic", "equal_area"]: + model = Coordinates(kind).fit(train) + z = model.transform(query) + assert_allclose(model.inverse(z), query, atol=2e-12) + assert_allclose(model.transform(query[:1]), z[:1], atol=2e-12) + assert_allclose(model.transform(model.mu[None]), 0 if kind != "ambient" else model.mu[None], atol=2e-12) + + +def test_pns_known_small_circle_and_heldout_roundtrip(): + angle = np.linspace(-np.pi, np.pi, 80, endpoint=False) + radius = 0.4 + x = np.column_stack((np.full(len(angle), np.cos(radius)), np.sin(radius) * np.cos(angle), np.sin(radius) * np.sin(angle))) + model = PNS().fit(x) + assert_allclose(model.stages[0][1], radius, atol=1e-5) + q = unit(np.random.default_rng(4).normal(size=(20, 3))) + assert_allclose(model.inverse(model.transform(q)), q, atol=1e-10) + + +def test_truncation_is_lossy_and_radial_endpoints_are_not_invertible(): + rng = np.random.default_rng(4) + x = unit(rng.normal(size=(100, 9))) + model = Coordinates("log_radial").fit(x) + q = model.mu[None] + # The clamped empirical radial mapping cannot encode unseen endpoint radii. + assert np.linalg.norm(model.inverse(model.transform(q)) - q) > 1e-3 diff --git a/publication/experiments/statistics/boot_metrics.py b/publication/experiments/statistics/boot_metrics.py index 3cbccf7..b4d1168 100644 --- a/publication/experiments/statistics/boot_metrics.py +++ b/publication/experiments/statistics/boot_metrics.py @@ -6,6 +6,8 @@ # ] # /// +"""Repeat seeded mini_metrics calibration/evaluation; no wrapper-level resampling.""" + import random from argparse import ArgumentParser from csv import DictWriter @@ -72,13 +74,13 @@ def main(file: str, dst: str, n: int, seed: int | None = None, combinations: str rng = random.Random(seed) seeds = [rng.getrandbits(64) for _ in range(n)] data = MetricDF.from_source(file) - cfg = {"combinations" : combinations} - results = combine(*(proc_one(data, seed, **cfg) for seed in tqdm(seeds, desc="Computing bootstrap iterations", unit="it"))) + cfg = {"combinations": combinations} + results = combine(*(proc_one(data, seed, **cfg) for seed in tqdm(seeds, desc="Evaluating calibration splits", unit="it"))) write_dict_to_csv(dst, results) def cli(): - parser = ArgumentParser("boot-metrics", description="Compute `mini-metric` bootstrap metrics for uncertainty quantification.") + parser = ArgumentParser("boot-metrics", description="Repeat mini_metrics threshold calibration and report metrics by seed and level.") parser.add_argument( "-i", "-I", @@ -90,10 +92,23 @@ def cli(): help="Input file with predictions and labels following the `mini-metric.MetricDF` specification.", ) parser.add_argument( - "-o", "-O", "--output", "--dst", type=str, required=True, dest="dst", help="Path of the combined bootstrap metric results." + "-o", + "-O", + "--output", + "--dst", + type=str, + required=True, + dest="dst", + help="Output CSV of metrics by evaluation seed and taxonomic level.", ) parser.add_argument( - "-n", "--n", type=int, default=100, required=False, dest="n", help="Number of bootstrap iterations. NB: Can be *VERY* slow!" + "-n", + "--n", + type=int, + default=100, + required=False, + dest="n", + help="Number of seeded evaluations; each recalibrates thresholds (default: 100).", ) parser.add_argument( "-s", @@ -103,11 +118,7 @@ def cli(): type=int, default=None, required=False, - help=( - "Set the global seed for the bootstrap procedure. " - "Each individual bootstrap iteration of calculating " - "the metrics will receive an independent seed set deterministically via the global seed." - ), + help="Global seed used to generate reproducible per-evaluation seeds.", ) parser.add_argument( "-C", @@ -115,10 +126,7 @@ def cli(): type=str, default=None, required=False, - help=( - "Path to a 'combinations' CSV file, which include leaf-to-higher order mappings. " - "Mainly useful if the model (outputs) are flat, but the labels/task is inherently hierarchical." - ), + help="Optional CSV mapping leaf classes to higher taxonomy ranks.", ) return vars(parser.parse_args()) diff --git a/pyproject.toml b/pyproject.toml index 38b21a7..ce4f84d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] -name = "mini_trainer" -version = "0.2.0" +name = "mt-trainer" +version = "0.3.0" default-optional-dependency-keys = ["recommended"] dependencies = [ "torch>=2.11", @@ -87,12 +87,12 @@ recommended = [ "wandb", ] all = [ - "mini_trainer[recommended]", - "mini_trainer[notebook]", - "mini_trainer[timm]", - "mini_trainer[bioclip]", - "mini_trainer[transformers]", - "mini_trainer[export]", + "mt-trainer[recommended]", + "mt-trainer[notebook]", + "mt-trainer[timm]", + "mt-trainer[bioclip]", + "mt-trainer[transformers]", + "mt-trainer[export]", ] quantization = ["torchao>=0.17,<0.18"] export = ["onnx>=1.17", "onnxscript>=0.3", "onnxruntime>=1.20"] @@ -161,6 +161,7 @@ build-backend = "uv_build" [tool.uv.build-backend] module-root = "" +module-name = "mini_trainer" source-include = ["mini_trainer/modeling/architectures/blacklist.json"] [tool.pytest.ini_options] diff --git a/tests/README.md b/tests/README.md index 2c9e036..653e9fd 100644 --- a/tests/README.md +++ b/tests/README.md @@ -16,13 +16,14 @@ optional dependencies, expected failures or slow-backbone requirements. | `export/` | ONNX export and native-quantized export contracts | | `integration/` | Full training, lazy data and distributed integration | | `benchmarks/` | Dataset/evaluation orchestration, inference probes, provenance and report storage | -| `logging/` | Console, TensorBoard and W&B logging | +| `releases/` | Deployment adapters, presets, streaming ownership, campaign evidence and packaging | +| `logging/` | Console, TensorBoard, W&B, confusion reports and figure ownership | | `utils/` | General device/plot helpers and the opt-in compatibility utility | Shared test builders and state assertions currently live in the integration and checkpoint modules that define their behavior. Imports and serialized test model -identifiers use those modules' new paths. Keep those paths importable for spawned -processes; avoid changing fixture semantics as part of directory cleanup. +identifiers use those modules. Keep them importable for spawned processes and +checkpoint reconstruction. These folders use ordinary pytest discovery, not custom collections. `dev/check.sh` only selects the existing environment, sets CPU/headless defaults and forwards diff --git a/tests/benchmarks/conftest.py b/tests/benchmarks/conftest.py new file mode 100644 index 0000000..e05bb41 --- /dev/null +++ b/tests/benchmarks/conftest.py @@ -0,0 +1,33 @@ +import os + +import numpy as np +import pytest + + +@pytest.fixture +def tensorrt_add_engine(tmp_path): + """Small shared engine for opt-in timing and memory tests.""" + if os.environ.get("RUN_CUDA_TESTS") != "1": + pytest.skip("Set RUN_CUDA_TESTS=1 in an explicitly prepared GPU environment") + pytest.importorskip("tensorrt") + import torch + + assert torch.cuda.is_available(), "CUDA requested but unavailable" + onnx = pytest.importorskip("onnx") + from dev.benchmarks.inference.tensorrt_build import build + + graph = onnx.helper.make_graph( + [onnx.helper.make_node("Add", ["x", "offset"], ["scores"])], + "two-input", + [ + onnx.helper.make_tensor_value_info("x", onnx.TensorProto.FLOAT, [2, 2]), + onnx.helper.make_tensor_value_info("offset", onnx.TensorProto.FLOAT, [2]), + ], + [onnx.helper.make_tensor_value_info("scores", onnx.TensorProto.FLOAT, [2, 2])], + ) + model, inputs = tmp_path / "model.onnx", tmp_path / "inputs.npz" + onnx.save(onnx.helper.make_model(graph, opset_imports=[onnx.helper.make_opsetid("", 18)], ir_version=10), model) + x, offset = np.arange(4, dtype=np.float32).reshape(2, 2), np.array([0.5, -0.5], dtype=np.float32) + np.savez(inputs, x=x, offset=offset) + build(model, inputs, tmp_path / "build", optimization=0) + return tmp_path / "build/model.engine", inputs, x, offset diff --git a/tests/benchmarks/test_benchmark_calibration.py b/tests/benchmarks/test_benchmark_calibration.py index 408d12f..58c7b46 100644 --- a/tests/benchmarks/test_benchmark_calibration.py +++ b/tests/benchmarks/test_benchmark_calibration.py @@ -131,7 +131,7 @@ def infer(source, target, *args, **kwargs): ) assert report["status"] == "passed" assert report == json.loads((output / "report.json").read_text()) - assert sessions == [(2, 1), (2, 1)] + assert set(sessions) == {(2, 1)} assert inference_paths and all(output in p.parents for p in inference_paths) assert {p.name: p.read_bytes() for p in model.parent.iterdir()} == original assert [b["sample_ids"] for b in report["batches"]] == [b["sample_ids"] for b in metadata["batches"]] diff --git a/tests/benchmarks/test_benchmark_dataset_inference.py b/tests/benchmarks/test_benchmark_dataset_inference.py index 9c925fd..a931a96 100644 --- a/tests/benchmarks/test_benchmark_dataset_inference.py +++ b/tests/benchmarks/test_benchmark_dataset_inference.py @@ -88,6 +88,7 @@ def test_pair_pipeline_runs_real_children_and_preserves_evidence(example, tmp_pa assert report["stages"][0]["command"][0] == sys.executable assert all(level["prediction_changes"] == 0 for level in report["levels"]) assert all(value == 0 for level in report["levels"] for value in level["candidate_minus_baseline"].values()) + assert all(v == pytest.approx(1) for levels in report["models"]["candidate"]["metrics"].values() for v in levels.values()) assert (output / "candidate/scores-00001.npz").is_file() assert "Theil U delta" in (output / "summary.md").read_text() with pytest.raises(FileExistsError): @@ -121,9 +122,10 @@ def test_cpu_deployment_composes_quality_placement_and_alternating_trials(exampl pytest.importorskip("mini_metrics") model, manifest, _ = example output = tmp_path / "deployment" - report = evaluate_cpu(model, model, manifest, tmp_path / "batch-0.npz", output, trials=2, warmup=1, repeats=2, required_ops=["Add"]) + settings = {"threads": 2, "trials": 2, "warmup": 1, "repeats": 2} + report = evaluate_cpu(model, model, manifest, tmp_path / "batch-0.npz", output, **settings, required_ops=["Add"]) assert report["status"] == "evaluated" - assert report["settings"] == {"threads": 1, "trials": 2, "warmup": 1, "repeats": 2} + assert report["settings"] == settings archived = archive(output / "report.json", tmp_path / "history", "cpu", "a" * 40, "CPU integration fixture") assert json.loads(archived.read_text())["comparison"]["requested_settings"] == report["settings"] assert [p["order"] for p in report["pairs"]] == [["baseline", "candidate"], ["candidate", "baseline"]] @@ -132,7 +134,8 @@ def test_cpu_deployment_composes_quality_placement_and_alternating_trials(exampl assert all(level["prediction_changes"] == 0 for level in report["quality"]["levels"]) assert any(op["op"] == "Add" for op in report["execution"]["candidate"]) summary = (output / "summary.md").read_text() - assert "Warm latency ratio" in summary and "Theil U delta" in summary + quality_summary = (output / "quality/summary.md").read_text() + assert quality_summary.strip() and quality_summary in summary with pytest.raises(FileExistsError): evaluate_cpu(model, model, manifest, tmp_path / "batch-0.npz", output) @@ -146,7 +149,6 @@ def test_cpu_deployment_missing_required_operation_stops_before_resource_trials( evaluate_cpu(model, model, manifest, tmp_path / "batch-0.npz", output, required_ops=["QLinearConv"]) report = json.loads((output / "report.json").read_text()) assert report["status"] == "failed" and report["phase"] == "placement" - assert report["settings"] == {"threads": 1, "trials": 3, "warmup": 3, "repeats": 31} assert report["pairs"] == [] and not list(output.glob("trial-*")) assert report["stages"][-1]["status"] == "failed" assert (output / "quality/summary.md").exists() @@ -213,18 +215,6 @@ def test_bundle_rejects_different_labels(example, tmp_path): pair_bundle(baseline, bundle) -def test_cpu_inference_to_real_mini_metrics(example, tmp_path): - pytest.importorskip("onnxruntime") - pytest.importorskip("mini_metrics") - from dev.benchmarks.inference.quality_compare import compare - - model, manifest, _ = example - collect(model, manifest, tmp_path / "baseline") - collect(model, manifest, tmp_path / "candidate", baseline_bundle=tmp_path / "baseline/evaluation.json") - result = compare(tmp_path / "candidate/comparison.json", tmp_path / "metrics") - assert all(v == pytest.approx(1) for levels in result["models"]["candidate"]["metrics"].values() for v in levels.values()) - - def test_cpu_collection_does_not_import_training_or_gpu_packages(example, tmp_path): pytest.importorskip("onnxruntime") model, manifest, _ = example diff --git a/tests/benchmarks/test_benchmark_datasets.py b/tests/benchmarks/test_benchmark_datasets.py index 1d5a39f..c698b62 100644 --- a/tests/benchmarks/test_benchmark_datasets.py +++ b/tests/benchmarks/test_benchmark_datasets.py @@ -1,6 +1,10 @@ import csv import json +import os +import shlex import shutil +import subprocess +import sys from pathlib import Path import pytest @@ -75,23 +79,24 @@ def test_summary_preserves_failures_and_unmeasured_fields(tmp_path, fine_tune): assert "No reports produced" in summarize(Path(tmp_path / "missing")) -@pytest.mark.parametrize("mode", ["qt", "qt-large-batch", "qt-cudagraphs", "qt-optimizer-cudagraphs"]) -def test_shared_harness_records_process_failures(tmp_path, mode): - import os - import shlex - import subprocess - import sys - +@pytest.fixture +def failed_training_python(tmp_path): runner = tmp_path / "python-wrapper" runner.write_text( - '#!/usr/bin/env bash\nif [[ "$1" == "-m" && "$2" == "dev.benchmarks.training.run" ]]; then exit 134; fi\n' - + f'exec {shlex.quote(sys.executable)} "$@"\n' + "#!/usr/bin/env bash\n" + 'if [[ "$1" == "-c" && "$2" == "import mini_metrics" ]]; then exit 0; fi\n' + 'if [[ "$1" == "-m" && "$2" == "dev.benchmarks.training.run" ]]; then exit 134; fi\n' + f'exec {shlex.quote(sys.executable)} "$@"\n' ) runner.chmod(0o755) + return str(runner) + + +@pytest.mark.parametrize("mode", ["qt", "qt-large-batch", "qt-cudagraphs", "qt-optimizer-cudagraphs"]) +def test_shared_harness_records_process_failures(tmp_path, mode, failed_training_python): output = tmp_path / "reports" result = subprocess.run( ["bash", "dev/check-benchmarks.sh", mode, str(output)], - env={**os.environ, "BENCHMARK_PYTHON": str(runner), "BENCHMARK_DATA_ROOT": str(tmp_path)}, + env={**os.environ, "BENCHMARK_PYTHON": failed_training_python, "BENCHMARK_DATA_ROOT": str(tmp_path)}, capture_output=True, text=True, timeout=30, @@ -120,8 +125,6 @@ def test_shared_harness_records_process_failures(tmp_path, mode): def test_benchmark_retains_cuda_peaks_across_phase_resets(tmp_path): - import os - import torch from torch.utils.data import DataLoader @@ -280,26 +283,14 @@ def inspect_optimizer(model, *args, **kwargs): assert indices[0]["class"] == [labels[0] for labels in indices[1]["class"]] -def test_representative_profile_retains_training_and_quality_failures(tmp_path): - import os - import shlex - import subprocess - import sys - - runner = tmp_path / "python-wrapper" - runner.write_text( - "#!/usr/bin/env bash\n" - 'if [[ "$1" == "-c" ]]; then exit 0; fi\n' - 'if [[ "$1" == "-m" && "$2" == "dev.benchmarks.training.run" ]]; then exit 134; fi\n' + f'exec {shlex.quote(sys.executable)} "$@"\n' - ) - runner.chmod(0o755) +def test_representative_profile_retains_training_and_quality_failures(tmp_path, failed_training_python): output = tmp_path / "reports" result = subprocess.run( ["bash", "dev/check-benchmarks.sh", "qt-efficientnet", str(output)], env={ **os.environ, - "BENCHMARK_PYTHON": str(runner), - "BENCHMARK_METRICS_PYTHON": str(runner), + "BENCHMARK_PYTHON": failed_training_python, + "BENCHMARK_METRICS_PYTHON": failed_training_python, "BENCHMARK_DATA_ROOT": str(tmp_path), "BLAIR_CLASS_SPEC": str(tmp_path / "spec.json"), "BENCHMARK_HEAD": "hierarchical", @@ -365,10 +356,6 @@ def test_summary_renders_paired_metrics_without_treating_them_as_training(tmp_pa @pytest.mark.parametrize("seeds", [" ", "42 42", "-1"]) def test_representative_profile_rejects_invalid_seeds_before_output(tmp_path, seeds): - import os - import subprocess - import sys - output = tmp_path / "reports" result = subprocess.run( ["bash", "dev/check-benchmarks.sh", "qt-efficientnet", str(output)], diff --git a/tests/benchmarks/test_benchmark_onnx.py b/tests/benchmarks/test_benchmark_onnx.py index 25a1abd..ae0b4dc 100644 --- a/tests/benchmarks/test_benchmark_onnx.py +++ b/tests/benchmarks/test_benchmark_onnx.py @@ -7,12 +7,11 @@ from dev.benchmarks.inference.onnx_inference import require_operations, run -onnx = pytest.importorskip("onnx") -pytest.importorskip("onnxruntime") - @pytest.fixture def model_and_inputs(tmp_path): + onnx = pytest.importorskip("onnx") + pytest.importorskip("onnxruntime") graph = onnx.helper.make_graph( [ onnx.helper.make_node("MatMul", ["images", "weight"], ["raw_scores"]), @@ -150,7 +149,7 @@ def test_isolated_cpu_memory_probe_records_measurement_or_failure(model_and_inpu assert len(report["seconds"]) == 2 and report["median_seconds"] > 0 assert len(report["model_files"]) == 2 snapshots = list(report["memory"].values()) - assert len(snapshots) == 7 + assert {"before_runtime_import", "after_session", "after_measurement"} <= report["memory"].keys() assert all(s["resident_bytes"] > 0 and s["peak_resident_bytes"] > 0 and s["swap_bytes"] >= 0 for s in snapshots) peaks = [s["peak_resident_bytes"] for s in snapshots] assert peaks == sorted(peaks) diff --git a/tests/benchmarks/test_benchmark_quality.py b/tests/benchmarks/test_benchmark_quality.py index 927b16a..5d0dfc6 100644 --- a/tests/benchmarks/test_benchmark_quality.py +++ b/tests/benchmarks/test_benchmark_quality.py @@ -6,6 +6,13 @@ from dev.benchmarks.inference.quality_compare import COLUMNS, METRICS, compare, read_manifest, read_predictions +def write_predictions(path, rows): + with path.open("w", newline="") as stream: + writer = csv.DictWriter(stream, fieldnames=COLUMNS) + writer.writeheader() + writer.writerows(rows) + + @pytest.fixture def example(tmp_path): classes = [["001", "1"], ["alpha", "beta"]] @@ -40,10 +47,7 @@ def example(tmp_path): ) if mode == "candidate": rows.reverse() - with path.open("w", newline="") as stream: - writer = csv.DictWriter(stream, fieldnames=COLUMNS) - writer.writeheader() - writer.writerows(rows) + write_predictions(path, rows) manifest = tmp_path / "manifest.json" manifest.write_text(json.dumps(metadata)) return manifest, metadata @@ -84,10 +88,7 @@ def test_predictions_reject_mismatched_samples_and_policy(example, kind): rows[0]["confidence"] = "nan" else: artifact["sha256"] = "wrong" - with source.open("w", newline="") as stream: - writer = csv.DictWriter(stream, fieldnames=COLUMNS) - writer.writeheader() - writer.writerows(rows) + write_predictions(source, rows) with pytest.raises(ValueError): read_predictions(source, artifact, metadata) @@ -142,10 +143,7 @@ def test_undefined_theil_u_is_explicit_null_not_invalid_json(example, tmp_path): source = path.parent / metadata[mode]["path"] with source.open() as stream: rows = [r for r in csv.DictReader(stream) if r["instance_id"] == "0"] - with source.open("w", newline="") as stream: - writer = csv.DictWriter(stream, fieldnames=COLUMNS) - writer.writeheader() - writer.writerows(rows) + write_predictions(source, rows) report = compare(path, tmp_path / "undefined") assert report["models"]["baseline"]["metrics"]["theilU"]["0"] is None assert report["levels"][0]["candidate_minus_baseline"]["theilU"] is None diff --git a/tests/benchmarks/test_benchmark_synthetic.py b/tests/benchmarks/test_benchmark_synthetic.py index 7f72b05..d459cf2 100644 --- a/tests/benchmarks/test_benchmark_synthetic.py +++ b/tests/benchmarks/test_benchmark_synthetic.py @@ -1,6 +1,7 @@ import csv import numpy as np +import pytest from PIL import Image from dev.benchmarks.data.synthetic import generate, oracle @@ -33,6 +34,8 @@ def test_synthetic_training_matches_oracle_and_repeats(tmp_path): second = run(tmp_path / "second", cache="RAM", cache_workers=0) finally: torch.set_num_threads(threads) + assert "mt-trainer" in first["versions"] + assert "mini_trainer" not in first["versions"] assert first["cache"] == second["cache"] == "CPU" assert len(first["phase_measurements"]) == 24 assert [phase["phase"] for phase in first["phase_measurements"]] == ["train", "eval"] * 12 @@ -57,7 +60,6 @@ def test_synthetic_training_matches_oracle_and_repeats(tmp_path): def test_requested_gpu_profile_does_not_fall_back_to_cpu(tmp_path, monkeypatch): - import pytest import torch from dev.benchmarks.training.run import run @@ -72,7 +74,6 @@ def test_cli_retains_failure_report(tmp_path, monkeypatch): import json import sys - import pytest import torch from dev.benchmarks.training.run import main @@ -110,8 +111,6 @@ def test_cli_retains_failure_report(tmp_path, monkeypatch): def test_qt_profile_requires_cuda_before_creating_output(tmp_path): - import pytest - from dev.benchmarks.training.run import run with pytest.raises(ValueError, match="require CUDA"): @@ -119,46 +118,22 @@ def test_qt_profile_requires_cuda_before_creating_output(tmp_path): assert not (tmp_path / "qt").exists() -def test_compile_mode_requires_compilation_before_creating_outputs(tmp_path): - import pytest - +@pytest.mark.parametrize( + "options,error", + [ + ({"compile_mode": "reduce-overhead"}, "requires compile=True"), + ({"compile_mode": "invalid"}, "requires compile=True"), + ({"compile": True, "compile_mode": "invalid"}, "Unknown model compile mode"), + ({"optimizer_cudagraphs": True}, "requires compile_optimizer=True"), + ({"device": "cpu", "compile_optimizer": True, "optimizer_cudagraphs": True}, "require CUDA"), + ], +) +def test_invalid_compilation_fails_before_creating_outputs(tmp_path, options, error): from dev.benchmarks.training.run import run from mini_trainer.train import main - from mini_trainer.training.compilation import model_compile_options - - for mode in ("reduce-overhead", "invalid"): - with pytest.raises(ValueError, match="requires compile=True"): - run(tmp_path / "benchmark", compile_mode=mode) - with pytest.raises(ValueError, match="requires compile=True"): - main(input=str(tmp_path / "missing"), output=str(tmp_path / "train"), compile_mode=mode) - with pytest.raises(ValueError, match="Unknown model compile mode"): - model_compile_options(True, "invalid") - assert not list(tmp_path.iterdir()) - - -def test_optimizer_graphs_require_compilation_before_output(tmp_path): - import pytest - from dev.benchmarks.training.run import run - from mini_trainer.train import main - - with pytest.raises(ValueError, match="requires compile_optimizer=True"): - run(tmp_path / "benchmark", optimizer_cudagraphs=True) - with pytest.raises(ValueError, match="requires compile_optimizer=True"): - main(input=str(tmp_path / "missing"), output=str(tmp_path / "train"), optimizer_cudagraphs=True) - assert not list(tmp_path.iterdir()) - - -def test_optimizer_graphs_reject_cpu_before_output(tmp_path): - import pytest - - from dev.benchmarks.training.run import run - from mini_trainer.train import main - - with pytest.raises(ValueError, match="require CUDA"): - run(tmp_path / "benchmark", device="cpu", compile_optimizer=True, optimizer_cudagraphs=True) - with pytest.raises(ValueError, match="require CUDA"): - main( - input=str(tmp_path / "missing"), output=str(tmp_path / "train"), device="cpu", compile_optimizer=True, optimizer_cudagraphs=True - ) + with pytest.raises(ValueError, match=error): + run(tmp_path / "benchmark", **options) + with pytest.raises(ValueError, match=error): + main(input=str(tmp_path / "missing"), output=str(tmp_path / "train"), **options) assert not list(tmp_path.iterdir()) diff --git a/tests/benchmarks/test_benchmark_tensorrt.py b/tests/benchmarks/test_benchmark_tensorrt.py index b040dfa..ce92be3 100644 --- a/tests/benchmarks/test_benchmark_tensorrt.py +++ b/tests/benchmarks/test_benchmark_tensorrt.py @@ -61,20 +61,6 @@ def test_reference_checks_float_tolerance_and_contract(): compare_outputs(actual, wrong, 0, 0) -def test_help_does_not_import_tensorrt_or_torch(): - code = """ -import runpy, sys -sys.argv = ['tensorrt_build', '--help'] -try: - runpy.run_module('dev.benchmarks.inference.tensorrt_build', run_name='__main__') -except SystemExit as error: - assert error.code == 0 -assert 'tensorrt' not in sys.modules -assert 'torch' not in sys.modules -""" - subprocess.run([sys.executable, "-c", code], check=True, capture_output=True, text=True) - - def gpu_dependencies(): if os.environ.get("RUN_CUDA_TESTS") != "1": pytest.skip("Set RUN_CUDA_TESTS=1 in a prepared TensorRT/CUDA environment") @@ -145,3 +131,18 @@ def test_parser_failure_retains_diagnostics_without_engine(tmp_path): assert report["parser_errors"] assert report["messages"] assert not (output / "model.engine").exists() + + +@pytest.mark.parametrize("module", ["tensorrt_build", "tensorrt_memory", "tensorrt_pair", "tensorrt_deployment"]) +def test_help_does_not_import_gpu_libraries(module): + code = """ +import runpy, sys +module = sys.argv[1] +sys.argv = [module, '--help'] +try: + runpy.run_module('dev.benchmarks.inference.' + module, run_name='__main__') +except SystemExit as error: + assert error.code == 0 +assert 'torch' not in sys.modules and 'tensorrt' not in sys.modules +""" + subprocess.run([sys.executable, "-c", code, module], check=True, capture_output=True) diff --git a/tests/benchmarks/test_benchmark_tensorrt_deployment.py b/tests/benchmarks/test_benchmark_tensorrt_deployment.py index 3851df9..6766655 100644 --- a/tests/benchmarks/test_benchmark_tensorrt_deployment.py +++ b/tests/benchmarks/test_benchmark_tensorrt_deployment.py @@ -1,6 +1,5 @@ import json import subprocess -import sys from pathlib import Path from types import SimpleNamespace @@ -77,7 +76,7 @@ def child(command, **kwargs): return SimpleNamespace(returncode=0) monkeypatch.setattr(deployment, "run_pair", quality) - monkeypatch.setattr(deployment.subprocess, "run", child) + monkeypatch.setattr(subprocess, "run", child) return builds, manifest, inputs, calls, quality, child @@ -111,7 +110,7 @@ def test_mismatched_build_artifacts_fail_before_runtime(pipeline, tmp_path, arti assert report["status"] == "failed" and report["phase"] == "inspection" and not calls -@pytest.mark.parametrize("mutation", ["input", "engine", "process"]) +@pytest.mark.parametrize("mutation", ["input", "engine", "process", "status"]) def test_failed_or_changed_resource_stops_pipeline(pipeline, tmp_path, monkeypatch, mutation): builds, manifest, inputs, calls, _, child = pipeline @@ -123,12 +122,14 @@ def change(command, **kwargs): report["inputs"]["sha256"] = "changed" elif mutation == "engine": report["models"]["candidate"]["sha256"] = "changed" + elif mutation == "status": + report["status"] = "failed" else: return SimpleNamespace(returncode=17) path.write_text(json.dumps(report)) return result - monkeypatch.setattr(deployment.subprocess, "run", change) + monkeypatch.setattr(subprocess, "run", change) with pytest.raises((ValueError, RuntimeError)): deployment.evaluate(*builds, manifest, inputs, tmp_path / "result") result = json.loads((tmp_path / "result/report.json").read_text()) @@ -152,23 +153,3 @@ def changed(*args): deployment.evaluate(*builds, manifest, inputs, tmp_path / "result") assert not calls assert json.loads((tmp_path / "result/report.json").read_text())["status"] == "failed" - - -def test_help_is_runtime_independent(): - subprocess.run( - [ - sys.executable, - "-c", - """ -import runpy, sys -sys.argv = ['tensorrt_deployment', '--help'] -try: - runpy.run_module('dev.benchmarks.inference.tensorrt_deployment', run_name='__main__') -except SystemExit as error: - assert error.code == 0 -assert 'torch' not in sys.modules and 'tensorrt' not in sys.modules -""", - ], - check=True, - capture_output=True, - ) diff --git a/tests/benchmarks/test_benchmark_tensorrt_memory.py b/tests/benchmarks/test_benchmark_tensorrt_memory.py index 252d559..caeca1a 100644 --- a/tests/benchmarks/test_benchmark_tensorrt_memory.py +++ b/tests/benchmarks/test_benchmark_tensorrt_memory.py @@ -1,6 +1,4 @@ import json -import os -import subprocess import sys import numpy as np @@ -9,26 +7,6 @@ from dev.benchmarks.inference.tensorrt_memory import measure -def test_help_does_not_import_gpu_libraries(): - subprocess.run( - [ - sys.executable, - "-c", - """ -import runpy, sys -sys.argv = ['tensorrt_memory', '--help'] -try: - runpy.run_module('dev.benchmarks.inference.tensorrt_memory', run_name='__main__') -except SystemExit as error: - assert error.code == 0 -assert 'torch' not in sys.modules and 'tensorrt' not in sys.modules -""", - ], - check=True, - capture_output=True, - ) - - def test_missing_runtime_retains_failure_and_does_not_overwrite(tmp_path, monkeypatch): monkeypatch.setitem(sys.modules, "tensorrt", None) output = tmp_path / "report" @@ -48,30 +26,8 @@ def test_invalid_settings_fail_before_output_creation(tmp_path, settings): @pytest.mark.parametrize("pinned", [False, True]) -def test_real_engine_memory_and_retained_failure(tmp_path, pinned): - if os.environ.get("RUN_CUDA_TESTS") != "1": - pytest.skip("Set RUN_CUDA_TESTS=1 in an explicitly prepared GPU environment") - pytest.importorskip("tensorrt") - onnx = pytest.importorskip("onnx") - from dev.benchmarks.inference.tensorrt_build import build - - graph = onnx.helper.make_graph( - [onnx.helper.make_node("Add", ["x", "offset"], ["scores"])], - "two-input", - [ - onnx.helper.make_tensor_value_info("x", onnx.TensorProto.FLOAT, [2, 2]), - onnx.helper.make_tensor_value_info("offset", onnx.TensorProto.FLOAT, [2]), - ], - [onnx.helper.make_tensor_value_info("scores", onnx.TensorProto.FLOAT, [2, 2])], - ) - model = tmp_path / "model.onnx" - onnx.save(onnx.helper.make_model(graph, opset_imports=[onnx.helper.make_opsetid("", 18)], ir_version=10), model) - inputs = tmp_path / "inputs.npz" - x = np.arange(4, dtype=np.float32).reshape(2, 2) - offset = np.array([0.5, -0.5], dtype=np.float32) - np.savez(inputs, x=x, offset=offset) - build(model, inputs, tmp_path / "build", optimization=0) - engine = tmp_path / "build/model.engine" +def test_real_engine_memory_and_retained_failure(tmp_path, pinned, tensorrt_add_engine): + engine, inputs, x, offset = tensorrt_add_engine result = measure(engine, inputs, tmp_path / "memory", runs=2, pinned=pinned) assert result["status"] == "passed" assert result == json.loads((tmp_path / "memory/report.json").read_text()) diff --git a/tests/benchmarks/test_benchmark_tensorrt_pair.py b/tests/benchmarks/test_benchmark_tensorrt_pair.py index a16cd71..ad749cf 100644 --- a/tests/benchmarks/test_benchmark_tensorrt_pair.py +++ b/tests/benchmarks/test_benchmark_tensorrt_pair.py @@ -1,7 +1,4 @@ import json -import os -import subprocess -import sys import numpy as np import pytest @@ -51,45 +48,9 @@ def execute(_): assert len(trials) == 1 -def test_help_does_not_load_gpu_libraries(): - code = """ -import runpy, sys -sys.argv = ['tensorrt_pair', '--help'] -try: - runpy.run_module('dev.benchmarks.inference.tensorrt_pair', run_name='__main__') -except SystemExit as error: - assert error.code == 0 -assert 'tensorrt' not in sys.modules and 'torch' not in sys.modules -""" - subprocess.run([sys.executable, "-c", code], check=True, capture_output=True) - - @pytest.mark.parametrize("pinned", [False, True]) -def test_real_engine_pair_preserves_named_outputs_and_failures(tmp_path, pinned): - if os.environ.get("RUN_CUDA_TESTS") != "1": - pytest.skip("Set RUN_CUDA_TESTS=1 in an explicitly prepared GPU environment") - pytest.importorskip("tensorrt") - import torch - - assert torch.cuda.is_available(), "CUDA requested but unavailable" - onnx = pytest.importorskip("onnx") - from dev.benchmarks.inference.tensorrt_build import build - - graph = onnx.helper.make_graph( - [onnx.helper.make_node("Add", ["x", "offset"], ["scores"])], - "two-input", - [ - onnx.helper.make_tensor_value_info("x", onnx.TensorProto.FLOAT, [2, 2]), - onnx.helper.make_tensor_value_info("offset", onnx.TensorProto.FLOAT, [2]), - ], - [onnx.helper.make_tensor_value_info("scores", onnx.TensorProto.FLOAT, [2, 2])], - ) - model, inputs = tmp_path / "model.onnx", tmp_path / "inputs.npz" - onnx.save(onnx.helper.make_model(graph, opset_imports=[onnx.helper.make_opsetid("", 18)], ir_version=10), model) - x, offset = np.arange(4, dtype=np.float32).reshape(2, 2), np.array([0.5, -0.5], dtype=np.float32) - np.savez(inputs, x=x, offset=offset) - build(model, inputs, tmp_path / "build", optimization=0) - engine = tmp_path / "build/model.engine" +def test_real_engine_pair_preserves_named_outputs_and_failures(tmp_path, pinned, tensorrt_add_engine): + engine, inputs, x, offset = tensorrt_add_engine output = tmp_path / "pair" report = benchmark(engine, engine, inputs, output, warmup=1, repeats=3, pinned=pinned) assert report["status"] == "passed" and len(report["trials"]) == 3 diff --git a/tests/benchmarks/test_expert_trial.py b/tests/benchmarks/test_expert_trial.py deleted file mode 100644 index 6e85d4a..0000000 --- a/tests/benchmarks/test_expert_trial.py +++ /dev/null @@ -1,89 +0,0 @@ -"""Offline coverage for the bounded staging helper.""" - -import importlib.util -import json -from pathlib import Path - -import pytest - -spec = importlib.util.spec_from_file_location("expert_trial", Path(__file__).parents[2] / "dev/ucloud/expert_trial.py") -trial = importlib.util.module_from_spec(spec) -spec.loader.exec_module(trial) - - -def test_stage_preserves_unknown_folder_and_bytes(tmp_path): - source = tmp_path / "source" - for name in ("111", "999"): - (source / name).mkdir(parents=True) - (source / name / "image.jpg").write_bytes(b"image bytes") - (source / name / "notes.txt").write_text("not selected") - output = tmp_path / "output" - output.mkdir() - destination = tmp_path / "staged" - trial.stage(source, destination, output, 2, 1024, 2) - report = json.loads((output / "staging.json").read_text()) - assert len(report["files"]) == 2 - for name in ("111", "999"): - assert (destination / name / "image.jpg").read_bytes() == b"image bytes" - assert len(trial.select_images(source, 1)) == 1 - - -def test_stage_rejects_byte_budget_before_copy(tmp_path): - source = tmp_path / "source" - (source / "999").mkdir(parents=True) - (source / "999/image.jpg").write_bytes(b"too large") - with pytest.raises(RuntimeError, match="limit"): - trial.stage(source, tmp_path / "staged", tmp_path, 1, 1, 1) - assert not (tmp_path / "staged").exists() - - -def test_reuse_requires_complete_intact_staging(tmp_path): - staged = tmp_path / "ram" - staged.mkdir() - image = staged / "image.jpg" - image.write_bytes(b"image") - previous = tmp_path / "previous" - previous.mkdir() - (previous / "inference.yaml").write_text(json.dumps({"input": str(staged)})) - with pytest.raises(FileNotFoundError): - trial.reuse_stage(previous) - (previous / "staging.json").write_text(json.dumps({"files": [{"staged": str(image), "bytes": 5}]})) - assert trial.reuse_stage(previous)[0] == staged - image.write_bytes(b"truncated") - with pytest.raises(RuntimeError, match="manifest"): - trial.reuse_stage(previous) - - -def test_index_staging_preserves_only_test_rows_and_labels(tmp_path): - source = tmp_path / "source" - source.mkdir() - for name in ("a.jpg", "b.jpg"): - (source / name).write_bytes(name.encode()) - index = source / "data_index.json" - index.write_text( - json.dumps( - { - "path": ["missing-train.jpg", "b.jpg", "missing-val.jpg", "a.jpg"], - "split": ["train", "test", "validation", "test"], - "label": [[1, 2], [999, 3], [4, 5], [888, 6]], - "class": [[0, 0], [-1, 1], [2, 2], [-1, 3]], - } - ) - ) - output = tmp_path / "output" - output.mkdir() - destination = tmp_path / "staged" - trial.stage(source, destination, output, 1, 1024, 2, index) - staged = json.loads((output / "staged-index.json").read_text()) - assert staged["split"] == ["test", "test"] - assert staged["label"] == [[999, 3], [888, 6]] - assert staged["class"] == [[-1, 1], [-1, 3]] - assert [Path(p).read_bytes() for p in staged["path"]] == [b"b.jpg", b"a.jpg"] - assert json.loads((output / "staging.json").read_text())["scope"] == "supplied_test_split" - - -def test_index_rejects_inconsistent_columns(tmp_path): - index = tmp_path / "index.json" - index.write_text(json.dumps({"path": ["a.jpg"], "split": [], "label": [1]})) - with pytest.raises(ValueError, match="lengths"): - trial.test_rows(index) diff --git a/tests/benchmarks/test_io_calibration.py b/tests/benchmarks/test_io_calibration.py index 8c975b3..186950c 100644 --- a/tests/benchmarks/test_io_calibration.py +++ b/tests/benchmarks/test_io_calibration.py @@ -75,35 +75,24 @@ def test_recommendation_prefers_near_best_and_rejects_failed_setting(): assert calibrator.recommend([], 0.05)["workers"] is None -def test_blocked_read_is_terminated_without_hanging_calibration(tmp_path): - import os - import time - from types import SimpleNamespace - - source = tmp_path / "blocked.jpg" - os.mkfifo(source) - args = SimpleNamespace(mode="read", resize=0, max_mib=1, trial_seconds=0.3, max_rss_mib=4096) - row = calibrator.run_trial(args, [str(source)], 1, "sweep", tmp_path, time.monotonic() + 5) - assert row["termination"] == "time_limit" - assert row["completed"] == 0 - assert not row["eligible"] - - -def test_timeout_does_not_consume_unsubmitted_paths(tmp_path): +@pytest.mark.parametrize("count", [1, 100], ids=["blocked-reader", "unsubmitted-paths"]) +def test_blocked_reads_stop_without_consuming_unsubmitted_paths(tmp_path, count): import os import time from types import SimpleNamespace paths = [] - for index in range(100): + for index in range(count): path = tmp_path / f"{index}.jpg" os.mkfifo(path) paths.append(str(path)) args = SimpleNamespace(mode="read", resize=0, max_mib=1, trial_seconds=0.5, max_rss_mib=4096) row = calibrator.run_trial(args, paths, 1, "sweep", tmp_path, time.monotonic() + 5) - assert row["selected"] == 100 + assert row["termination"] == "time_limit" + assert row["selected"] == count assert row["attempted"] == 1 assert row["completed"] == 0 + assert not row["eligible"] def test_byte_limit_shrinks_trial_instead_of_aborting(tmp_path): diff --git a/tests/benchmarks/test_release_history.py b/tests/benchmarks/test_release_history.py index 75f4776..733ff77 100644 --- a/tests/benchmarks/test_release_history.py +++ b/tests/benchmarks/test_release_history.py @@ -102,6 +102,7 @@ def test_interrupted_upload_can_resume_without_deleting_assets(remote, records, remote.corrupt = True with pytest.raises(ValueError, match="readback"): synchronize("owner/repo", tmp_path / "interrupted", records, upload=True) + assert len(remote.assets) == 1 # Keep failed-readback bytes available for inspection/retry. first_asset = remote.assets[1] remote.corrupt = False synchronize("owner/repo", tmp_path / "retry", records, upload=True) @@ -128,13 +129,6 @@ def test_api_failure_is_not_treated_as_empty_storage(remote, records, tmp_path): assert len(remote.calls) == 1 and not remote.releases -def test_upload_requires_successful_readback(remote, records, tmp_path): - remote.corrupt = True - with pytest.raises(ValueError, match="readback"): - synchronize("owner/repo", tmp_path / "corrupt", records, upload=True) - assert len(remote.assets) == 1 # Preserve the uploaded bytes for inspection/retry. - - def test_published_month_cannot_be_appended(remote, records, tmp_path): synchronize("owner/repo", tmp_path / "first", records, upload=True) remote.releases[0]["draft"] = False diff --git a/tests/benchmarks/test_ucloud_comparison.py b/tests/benchmarks/test_ucloud_comparison.py index 10bc5d1..34dec41 100644 --- a/tests/benchmarks/test_ucloud_comparison.py +++ b/tests/benchmarks/test_ucloud_comparison.py @@ -20,21 +20,31 @@ def harness(monkeypatch): @pytest.fixture def config(tmp_path): - source = Path(__file__).resolve().parents[2] / "dev" / "ucloud" / "comparison.json" - value = json.loads(source.read_text()) - value.update(output=str(tmp_path / "output with spaces"), parquet=str(tmp_path / "data.parquet")) - return value + return dict( + output=str(tmp_path / "output with spaces"), + parquet=str(tmp_path / "data.parquet"), + environments={branch: {"python": sys.executable, "commit": pin * 40} for branch, pin in (("master", "a"), ("quant", "b"))}, + gpus=4, + global_batch_size=64, + num_workers_per_rank=0, + epochs=3, + size=32, + seeds=[42], + variants=["master_eager", "quant_eager"], + timeout_seconds=30, + ) @pytest.mark.parametrize("int8_variant", ["quant_int8", "quant_int8_combined"]) def test_launch_topology_and_paired_plan(harness, config, int8_variant): compare, _ = harness + config.update(gpus=4, global_batch_size=64, seeds=[3, 9], variants=["master_eager", "quant_eager", "quant_prefetch"]) compare.validate(config) runs = compare.plan(config) assert runs == compare.plan(config) - assert len(runs) == 18 - for seed in config["seeds"]: - assert sum(r["seed"] == seed for r in runs) == 6 + assert sorted((r["name"], r["seed"]) for r in runs) == sorted( + (f"{variant}_seed{seed}", seed) for seed in config["seeds"] for variant in config["variants"] + ) argv = compare.command(config, runs[0], Path(config["output"]) / "comparison.json") assert "--nproc-per-node=4" in argv assert argv[-3] == str(Path(config["output"]) / "comparison.json") @@ -47,31 +57,6 @@ def test_launch_topology_and_paired_plan(harness, config, int8_variant): compare.validate(config) -def test_combined_int8_plan_isolates_each_added_option(harness): - compare, _ = harness - source = Path(__file__).resolve().parents[2] / "dev" / "ucloud" / "combined-int8.json" - config = compare.validate(json.loads(source.read_text())) - runs = compare.plan(config) - assert [run["name"] for run in runs] == [ - f"{variant}_seed42" - for variant in ( - "quant_eager", - "master_eager", - "quant_compile_model", - "quant_compile_both", - "quant_float_combined", - "quant_int8_combined", - ) - ] - assert runs[3]["options"] == {**runs[2]["options"], "compile_optimizer": True} - assert runs[4]["options"] == {**runs[3]["options"], "cuda_prefetch": True} - assert runs[5]["options"] == {**runs[4]["options"], "quantized_training": True} - assert all(run["branch"] == "quant" for run in runs[2:]) - assert compare.uses_quantized_training(config) - config["variants"].remove("quant_int8_combined") - assert not compare.uses_quantized_training(config) - - @pytest.mark.parametrize("variant", ["quant_compile_both", "quant_float_combined", "quant_int8_combined"]) def test_combined_worker_routes_training_and_loader_options(harness, config, monkeypatch, variant): import torch @@ -716,11 +701,10 @@ def test_resume_hook_verifies_restored_state_before_updates(harness, monkeypatch training.train(start_epoch=2, **objects) -def test_scaling_workers_warm_steps_and_separate_storage(harness, tmp_path): +def test_scaling_workers_warm_steps_and_separate_storage(harness, config, tmp_path): compare, _ = harness scaling = importlib.import_module("scaling") - cfg = json.loads((Path(__file__).resolve().parents[2] / "dev/ucloud/ddp.json").read_text()) - cfg["output"] = str(tmp_path / "baseline") + cfg = dict(config, mode="scaling", qualification={"seed": 42, "train": 32768, "validation": 4096, "test": 128}) Path(cfg["output"]).mkdir() compare.write_json(Path(cfg["output"]) / "prepared.json", {"qualification.parquet": "a" * 64}) base = tmp_path / "base.json" @@ -730,24 +714,14 @@ def test_scaling_workers_warm_steps_and_separate_storage(harness, tmp_path): assert derived["num_workers_per_rank"] == 8 storage = scaling.trial(base, tmp_path / "storage.json", tmp_path / "storage", 128, 3, workers=16, storage=True) assert "reuse_preparation" not in storage - assert storage["epochs"] == 1 and storage["timeout_seconds"] == 600 - assert storage["qualification"]["train"] == 262144 + assert storage["epochs"] == 1 + assert 0 < storage["timeout_seconds"] <= storage["budget_seconds"] + assert storage["qualification"]["train"] > cfg["qualification"]["train"] assert storage["exclude_qualification_sha256"] == "a" * 64 with pytest.raises(ValueError, match="num_workers"): scaling.trial(base, tmp_path / "invalid.json", tmp_path / "invalid", 64, 3, workers=-1) -def test_timing_windows_survive_completed_chunks(harness): - _, worker = harness - saved, synchronized = [], [] - loader = worker.TimedLoader([([1, 2], [0, 1])] * 35, synchronize=lambda: synchronized.append(True), on_window=saved.append) - assert len(list(loader)) == 35 - assert [w["steps"] for w in saved] == [32, 3] - assert [w["samples"] for w in saved] == [64, 6] - assert len(synchronized) == 2 - assert sum(w["loader_wait_seconds"] for w in saved) <= loader.wait_seconds - - def test_torchrun_parser_preserves_worker_run_argument(harness, config): from torch.distributed.run import parse_args diff --git a/tests/core/test_config.py b/tests/core/test_config.py index 855d1af..ace1653 100644 --- a/tests/core/test_config.py +++ b/tests/core/test_config.py @@ -2,7 +2,6 @@ from mini_trainer.config import ( _drop_none, - _nullify, _stringify_types, defaults_from_function, merge_dicts, @@ -10,12 +9,6 @@ ) -def test_nullify(): - d = {"a": 1, "b": {"c": 2, "d": {"e": 3}}} - expected = {"a": None, "b": {"c": None, "d": {"e": None}}} - assert _nullify(d) == expected - - def test_drop_none(): d = {"a": 1, "b": None, "c": {"d": 2, "e": None}, "f": {}} expected = {"a": 1, "c": {"d": 2}} diff --git a/tests/data/test_augmentation.py b/tests/data/test_augmentation.py index 39c3886..2f91ff7 100644 --- a/tests/data/test_augmentation.py +++ b/tests/data/test_augmentation.py @@ -1,26 +1,44 @@ +import pytest import torch +from matplotlib import pyplot as plt from mini_trainer.data import SaltAndPepper, debug_augmentation, salt_and_pepper -def test_debug_augmentation(tmp_path): +@pytest.mark.parametrize("count", [1, 2, 5]) +def test_debug_augmentation(tmp_path, count): + dataset = torch.utils.data.TensorDataset(torch.zeros(count, 3, 10, 10), torch.arange(count)) + caller_figure = plt.figure() + before = plt.get_fignums() + try: + assert debug_augmentation(lambda image: image, dataset, output_dir=str(tmp_path)) is True + assert (tmp_path / "example_augmentation.png").exists() + assert plt.get_fignums() == before + finally: + plt.close(caller_figure) - # Mock dataset - class MockDataset(torch.utils.data.Dataset): - def __len__(self): - return 5 - def __getitem__(self, idx): - return torch.zeros((3, 10, 10)), 0 +@pytest.mark.parametrize("strict", [False, True]) +@pytest.mark.parametrize("failure", ["empty", "augmentation"]) +def test_debug_augmentation_failure_preserves_caller_figure(tmp_path, strict, failure): + dataset = torch.utils.data.TensorDataset(torch.zeros(0 if failure == "empty" else 3, 3, 10, 10)) - ds = MockDataset() + def broken(image): + raise ValueError("broken augmentation") - def aug(x): - return x - - ret = debug_augmentation(aug, ds, output_dir=str(tmp_path), strict=True) - assert ret is True - assert (tmp_path / "example_augmentation.png").exists() + caller_figure = plt.figure() + before = plt.get_fignums() + try: + if strict: + with pytest.raises(ValueError): + debug_augmentation(broken, dataset, str(tmp_path), strict=True) + else: + with pytest.warns(UserWarning, match="debug augmentation"): + assert debug_augmentation(broken, dataset, str(tmp_path), strict=False) is False + assert plt.get_fignums() == before + assert not (tmp_path / "example_augmentation.png").exists() + finally: + plt.close(caller_figure) def test_salt_and_pepper(): diff --git a/tests/data/test_data.py b/tests/data/test_data.py index 4da2ff7..361d55f 100644 --- a/tests/data/test_data.py +++ b/tests/data/test_data.py @@ -169,3 +169,24 @@ def test_folder_resolution_uses_level_count_not_deepest_rank(tmp_path, monkeypat labels, paths = metadata_module.auto_find_images(str(tmp_path), cls2idx={"0": {"111": 0}, "1": {"222": 0}, "2": {"333": 0}}, labels={}) assert labels == [("1775152", "genus-id", "family-id")] assert paths == [str(folder / "image.jpg")] + + +@pytest.mark.parametrize("hierarchical", [False, True]) +def test_metadata_explicit_folder_labels_preserve_order_and_class_indices(tmp_path, hierarchical): + for name in ("b", "a", "unselected"): + (tmp_path / name).mkdir() + (tmp_path / name / "image.jpg").write_bytes(b"\xff\xd8\xff") + labels = [["b", "parent"], ["a", "parent"]] if hierarchical else ["b", "a"] + mapping = OrderedDict(zip(("b", "a"), labels)) + class_spec = {"0": {"a": 0, "b": 1}, "1": {"parent": 0}} if hierarchical else {"a": 0, "b": 1} + expected = { + "path": [str(tmp_path / name / "image.jpg") for name in ("b", "a")], + "class": [[1, 0], [0, 0]] if hierarchical else [1, 0], + "split": ["train", "train"], + "label": [("b", "parent"), ("a", "parent")] if hierarchical else labels, + } + for supplied in (labels, mapping): + result = metadata_module.create_metadata(tmp_path, cls2idx=class_spec, labels=supplied, train_proportion=1, seed=42) + assert result == expected + assert list(mapping) == ["b", "a"] + assert list(mapping.values()) == labels diff --git a/tests/data/test_io.py b/tests/data/test_io.py index 601fc45..501993a 100644 --- a/tests/data/test_io.py +++ b/tests/data/test_io.py @@ -6,7 +6,6 @@ from mini_trainer.data.io import ( CACHE_MODE, - _normalize_to_tuple, generate_indices, guess_cache_mode, is_image, @@ -69,9 +68,3 @@ def test_generate_indices(): assert len(indices) == 6 assert indices.count(0) == 2 assert indices.count(1) == 4 - - -def test_normalize_to_tuple(): - assert _normalize_to_tuple(1) == (1,) - assert _normalize_to_tuple([1]) == [1] - assert _normalize_to_tuple((1,)) == (1,) diff --git a/tests/data/test_loader.py b/tests/data/test_loader.py index c7cb195..ffcd6c3 100644 --- a/tests/data/test_loader.py +++ b/tests/data/test_loader.py @@ -243,12 +243,7 @@ def test_inference_batched_fetch_keeps_tensor_output(metadata): @pytest.mark.parametrize("cache", ["none", "cpu"]) def test_cuda_transfer_batches_are_pinned(metadata, cache): - import os - - if os.environ.get("RUN_CUDA_TESTS") != "1": - pytest.skip("Set RUN_CUDA_TESTS=1 to validate pinned CUDA transfer batches") - if not torch.cuda.is_available(): - pytest.fail("CUDA checks requested but no CUDA device is accessible") + _require_cuda() device = torch.device("cuda:0") _, loaders = get_dataset_dataloader(metadata, resize_size=4, modes=("val",), cache=cache, batch_size=2, num_workers=0, device=device) images, labels = next(iter(loaders[0])) @@ -269,12 +264,7 @@ def unexpected_pool(*args, **kwargs): def test_bounded_cuda_cache_matches_cpu_cache(metadata): - import os - - if os.environ.get("RUN_CUDA_TESTS") != "1": - pytest.skip("Set RUN_CUDA_TESTS=1 to validate CUDA cache construction") - if not torch.cuda.is_available(): - pytest.fail("CUDA checks requested but no CUDA device is accessible") + _require_cuda() device = torch.device("cuda:0") _, cpu_loaders = get_dataset_dataloader( metadata, resize_size=4, modes=("val",), cache="cpu", cache_workers=0, num_workers=0, batch_size=5 @@ -296,17 +286,17 @@ def test_cuda_prefetch_rejects_cpu_target(metadata): get_inference_dataloader(metadata["path"], resize_size=4, num_workers=0, cuda_prefetch=True) -def _require_prefetch_cuda(): +def _require_cuda(): import os if os.environ.get("RUN_CUDA_TESTS") != "1": - pytest.skip("Set RUN_CUDA_TESTS=1 to verify CUDA transfer streams") + pytest.skip("Set RUN_CUDA_TESTS=1 to verify CUDA loader contracts") assert torch.cuda.is_available() @pytest.mark.parametrize("workers", [0, 1]) def test_cuda_prefetch_order_epochs_tail_and_lifetime(metadata, workers): - _require_prefetch_cuda() + _require_cuda() from torch.utils.data import DataLoader datasets, loaders = get_dataset_dataloader( @@ -345,7 +335,7 @@ def test_cuda_prefetch_order_epochs_tail_and_lifetime(metadata, workers): def test_cuda_prefetch_inference_empty_and_failure(metadata): - _require_prefetch_cuda() + _require_cuda() from mini_trainer.data._prefetch import CUDAPrefetchLoader _, loader = get_inference_dataloader( @@ -377,7 +367,7 @@ def __getitem__(self, index): def test_cuda_prefetch_nested_cuda_source(): - _require_prefetch_cuda() + _require_cuda() from mini_trainer.data._prefetch import CUDAPrefetchLoader class Mixed(torch.utils.data.Dataset): @@ -397,7 +387,7 @@ def __getitem__(self, index): def test_pinned_cache_gather_storage_and_indices(metadata): - _require_prefetch_cuda() + _require_cuda() datasets, loaders = get_dataset_dataloader( metadata, modes=("val",), @@ -509,9 +499,8 @@ def test_direct_batches_preserve_shuffled_sampling_and_rng(): assert torch.equal(torch.get_rng_state(), expected_rng) -@pytest.mark.parametrize("cache", ["none", "cpu"]) +@pytest.mark.parametrize("cache,labels", [("none", False), ("none", True), ("cpu", True)]) @pytest.mark.parametrize("workers", [0, 1]) -@pytest.mark.parametrize("labels", [False, True]) def test_default_collator_can_reuse_repository_batch_sampler(metadata, cache, workers, labels): if labels: datasets, loaders = get_dataset_dataloader( @@ -519,9 +508,7 @@ def test_default_collator_can_reuse_repository_batch_sampler(metadata, cache, wo ) dataset, optimized = datasets[0], loaders[0] else: - dataset, optimized = get_inference_dataloader( - metadata["path"], resize_size=4, cache=cache, cache_workers=0, batch_size=2, num_workers=0 - ) + dataset, optimized = get_inference_dataloader(metadata["path"], resize_size=4, batch_size=2, num_workers=0) external = torch.utils.data.DataLoader( dataset, batch_sampler=optimized.batch_sampler, diff --git a/tests/data/test_parquet.py b/tests/data/test_parquet.py index c0b417c..3f20653 100644 --- a/tests/data/test_parquet.py +++ b/tests/data/test_parquet.py @@ -16,8 +16,6 @@ def test_combine_dicts(): assert combined["b"] == [2, 4] -def test_get_keys(): - row = {k: str(i) for i, k in enumerate(KCOLUMNS)} - keys = get_keys(row) - assert len(keys) == len(KCOLUMNS) - assert keys[0] == "0" +def test_get_keys_normalizes_ids_in_taxonomic_order(): + row = {k: f" 00{i} " for i, k in reversed(list(enumerate(KCOLUMNS)))} + assert get_keys(row) == [str(i) for i in range(len(KCOLUMNS))] diff --git a/tests/examples/test_archives.py b/tests/examples/test_archives.py new file mode 100644 index 0000000..6c522ee --- /dev/null +++ b/tests/examples/test_archives.py @@ -0,0 +1,39 @@ +"""Native extraction and Python fallback preserve the same dataset files.""" + +import shutil + +import pytest + +from examples import utils + + +@pytest.mark.parametrize("kind,tool", [("gztar", "tar"), ("zip", "unzip")]) +@pytest.mark.parametrize("backend", ["native", "python", "failed-native"]) +def test_extract_overwrites_files_and_preserves_nested_content(tmp_path, monkeypatch, kind, tool, backend): + source = tmp_path / "source" + (source / "nested/empty").mkdir(parents=True) + (source / "nested/image.bin").write_bytes(bytes(range(256))) + (source / "labels.txt").write_text("species\n") + archive = shutil.make_archive(str(tmp_path / "dataset"), kind, source) + output = tmp_path / "output" + output.mkdir() + (output / "labels.txt").write_text("stale") + (output / "unrelated.txt").write_text("keep") + if backend == "native": + if not shutil.which(tool): + pytest.skip(f"{tool} unavailable") + elif backend == "python": + monkeypatch.setattr(utils.shutil, "which", lambda _: None) + else: + monkeypatch.setattr(utils.shutil, "which", lambda name: name) + + def unavailable(*args, **kwargs): + raise OSError("native extractor failed") + + monkeypatch.setattr(utils.subprocess, "Popen", unavailable) + extract = utils.extract_tar if kind == "gztar" else utils.extract_zip + extract(archive, output) + assert (output / "nested/image.bin").read_bytes() == bytes(range(256)) + assert (output / "nested/empty").is_dir() + assert (output / "labels.txt").read_text() == "species\n" + assert (output / "unrelated.txt").read_text() == "keep" diff --git a/tests/examples/test_cleanup.py b/tests/examples/test_cleanup.py new file mode 100644 index 0000000..a0fef18 --- /dev/null +++ b/tests/examples/test_cleanup.py @@ -0,0 +1,71 @@ +"""Dataset construction owns partial outputs, never successful or unregistered data.""" + +import pytest + +from examples.utils import CleanupOnFailure + + +def test_success_retains_registered_output(tmp_path): + output = tmp_path / "complete" + output.write_text("data") + with CleanupOnFailure() as cleanup: + cleanup.register(output) + assert output.read_text() == "data" + + +@pytest.mark.parametrize("error", [RuntimeError("failed"), KeyboardInterrupt(), SystemExit(1)]) +def test_failure_removes_only_registered_partial_outputs(tmp_path, error): + partial = tmp_path / "partial" + (partial / "nested").mkdir(parents=True) + (partial / "nested/image").write_text("partial") + file = tmp_path / "partial-file" + file.touch() + retained = tmp_path / "retained" + retained.write_text("keep") + with pytest.raises(type(error)) as raised, CleanupOnFailure() as cleanup: + for path in (partial, file, retained, tmp_path / "missing"): + cleanup.register(path) + cleanup.unregister(retained) + raise error + assert raised.value is error + assert not partial.exists() and not file.exists() + assert retained.read_text() == "keep" + + +def test_cleanup_error_does_not_mask_failure_or_skip_later_paths(tmp_path, monkeypatch, capsys): + from examples import utils + + blocked, removable = tmp_path / "blocked", tmp_path / "removable" + blocked.touch() + removable.touch() + remove = utils.os.remove + + def deny_one(path): + if path == blocked: + raise PermissionError("access denied") + remove(path) + + monkeypatch.setattr(utils.os, "remove", deny_one) + original = ValueError("construction failed") + with pytest.raises(ValueError) as raised, CleanupOnFailure() as cleanup: + cleanup.register(blocked) + cleanup.register(removable) + raise original + assert raised.value is original + assert blocked.exists() and not removable.exists() + assert "access denied" in capsys.readouterr().out + + +@pytest.mark.parametrize("dangling", [False, True]) +def test_registered_link_does_not_delete_its_target(tmp_path, dangling): + target = tmp_path / "outside" + target.mkdir() + data = target / "image" + data.write_text("keep") + link = tmp_path / "partial-link" + link.symlink_to(tmp_path / "missing" if dangling else target, target_is_directory=True) + with pytest.raises(RuntimeError), CleanupOnFailure() as cleanup: + cleanup.register(link) + raise RuntimeError("construction failed") + assert not link.is_symlink() + assert data.read_text() == "keep" diff --git a/tests/examples/test_downloads.py b/tests/examples/test_downloads.py new file mode 100644 index 0000000..96d0aa3 --- /dev/null +++ b/tests/examples/test_downloads.py @@ -0,0 +1,45 @@ +"""Failed downloads must not become reusable dataset archives.""" + +import io + +import pytest + +from examples import utils + + +@pytest.mark.parametrize("parallel", [False, True]) +@pytest.mark.parametrize("existing", [False, True]) +@pytest.mark.parametrize("error", [OSError, KeyboardInterrupt]) +def test_download_failure_preserves_destination_and_allows_retry(tmp_path, monkeypatch, parallel, existing, error): + destination = tmp_path / "images.tar.gz" + if existing: + destination.write_bytes(b"previous archive") + before = {p.name: p.read_bytes() for p in tmp_path.iterdir()} + payload = b"image bytes" * (1_000_000 if parallel else 3) + failed = True + + class Response(io.BytesIO): + def info(self): + return {"Content-Length": str(len(payload)), "Accept-Ranges": "bytes" if parallel else "none"} + + def read(self, size=-1): + if failed and self.tell(): + raise error("transfer interrupted") + return super().read(size) + + def open_url(request): + if request.get_method() == "HEAD": + return Response() + # A replacement must stay invisible until the entire transfer succeeds. + assert {p.name: p.read_bytes() for p in tmp_path.iterdir() if p.is_file()} == before + return Response(payload) + + monkeypatch.setattr(utils.urllib.request, "urlopen", open_url) + monkeypatch.setattr(utils.time, "sleep", lambda _: None) + with pytest.raises(error, match="transfer interrupted"): + utils.download_with_progress("https://example.invalid/images.tar.gz", destination) + assert {p.name: p.read_bytes() for p in tmp_path.iterdir()} == before + failed = False + utils.download_with_progress("https://example.invalid/images.tar.gz", destination) + assert list(tmp_path.iterdir()) == [destination] + assert destination.read_bytes() == payload diff --git a/tests/examples/test_inat_constructor.py b/tests/examples/test_inat_constructor.py new file mode 100644 index 0000000..690a4dd --- /dev/null +++ b/tests/examples/test_inat_constructor.py @@ -0,0 +1,58 @@ +import json + +import pytest + +from examples.inat2021.construct import build_data_index + + +def category(genus, prefix="00000"): + return f"{prefix}_Animalia_Arthropoda_Insecta_Lepidoptera_Family_{genus}_species" + + +def write_image(root, relative): + path = root / relative + path.parent.mkdir(parents=True, exist_ok=True) + path.write_bytes(relative.encode()) + + +@pytest.mark.parametrize("collision", ["directory", "file", "planned-target"]) +def test_taxonomy_collision_preserves_all_sources_before_renaming(tmp_path, collision): + taxonomy = {"Early species": ["101", "201"], "Late species": ["102", "202"]} + (tmp_path / "taxonomy_map.json").write_text(json.dumps(taxonomy)) + write_image(tmp_path, f"train_mini/{category('Early')}/first.jpg") + write_image(tmp_path, f"val/{category('Late')}/second.jpg") + if collision == "directory": + write_image(tmp_path, "val/102/existing.jpg") + elif collision == "file": + (tmp_path / "val/102").write_bytes(b"existing file") + else: + write_image(tmp_path, f"val/{category('Late', '00001')}/third.jpg") + (tmp_path / "data_index.json").write_text("previous index") + before = {path.relative_to(tmp_path): path.read_bytes() for path in tmp_path.rglob("*") if path.is_file()} + with pytest.raises(FileExistsError, match="102"): + build_data_index(str(tmp_path), "train_mini", "val") + after = {path.relative_to(tmp_path): path.read_bytes() for path in tmp_path.rglob("*") if path.is_file()} + assert after == before + + +@pytest.mark.parametrize("splits", [("train_mini", "val"), ("train_mini",), ("val",)]) +def test_index_retains_split_order_taxonomy_and_legacy_numeric_folders(tmp_path, splits): + taxonomy = ["101", "201", "301", "401", "501", "601", "701"] + (tmp_path / "taxonomy_map.json").write_text(json.dumps({"Known species": taxonomy})) + for split in splits: + write_image(tmp_path, f"{split}/{category('Known')}/b.PNG") + write_image(tmp_path, f"{split}/{category('Known')}/a.jpg") + write_image(tmp_path, f"{split}/999/unmapped.jpeg") + (tmp_path / split / category("Known") / "ignored.txt").write_text("not an image") + build_data_index(str(tmp_path), "train_mini", "val") + expected = {"path": [], "split": [], "label": []} + for split in splits: + expected["path"].extend(f"{split}/{name}" for name in ("101/a.jpg", "101/b.PNG", "999/unmapped.jpeg")) + expected["split"].extend(["train" if split == "train_mini" else "validation"] * 3) + expected["label"].extend([taxonomy, taxonomy, ["999", "999", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown"]]) + result = json.loads((tmp_path / "data_index.json").read_text()) + assert result == expected + contents = [(tmp_path / name).read_bytes() for name in result["path"]] + build_data_index(str(tmp_path), "train_mini", "val") + assert json.loads((tmp_path / "data_index.json").read_text()) == expected + assert [(tmp_path / name).read_bytes() for name in result["path"]] == contents diff --git a/tests/export/test_onnx.py b/tests/export/test_onnx.py index 0355450..d53f625 100644 --- a/tests/export/test_onnx.py +++ b/tests/export/test_onnx.py @@ -23,7 +23,7 @@ pytestmark = pytest.mark.skipif( any(importlib.util.find_spec(name) is None for name in ("onnx", "onnxscript", "onnxruntime")), - reason="Install mini_trainer[export] to run ONNX integration tests", + reason="Install mt-trainer[export] to run ONNX integration tests", ) diff --git a/tests/integration/test_integration_lazy_dataset.py b/tests/integration/test_integration_lazy_dataset.py index 96aac17..49ea472 100644 --- a/tests/integration/test_integration_lazy_dataset.py +++ b/tests/integration/test_integration_lazy_dataset.py @@ -81,11 +81,8 @@ def test_lazy_dataset_picklable(self, image_paths): from mini_trainer.data import get_dataset_dataloader - metadata = { - "path": image_paths, - "class": [0 if i % 2 == 0 else 1 for i in range(len(image_paths))], - "split": ["train" for _ in image_paths], - } + paths = image_paths[0] + metadata = {"path": paths, "class": [i % 2 for i in range(len(paths))]} datasets, loaders = get_dataset_dataloader( metadata, @@ -100,10 +97,12 @@ def test_lazy_dataset_picklable(self, image_paths): pickled = pickle.dumps(ds) unpickled = pickle.loads(pickled) - assert len(unpickled) == len(ds) - item = unpickled[0] - assert isinstance(item, tuple) - assert len(item) == 2 + assert len(unpickled) == len(ds) == len(paths) + for index in (0, len(paths) - 1): + item = unpickled[index] + assert isinstance(item, tuple) and len(item) == 2 + torch.testing.assert_close(item, ds[index]) + assert item[1].item() == index % 2 def test_lazy_dataset_caching_exception_propagation(self): paths = ["ok1.png", "fail.png", "ok2.png"] diff --git a/tests/integration/test_integration_train.py b/tests/integration/test_integration_train.py index 9227bdd..1c4a06c 100644 --- a/tests/integration/test_integration_train.py +++ b/tests/integration/test_integration_train.py @@ -1,5 +1,3 @@ -import os - import torch import torchvision.transforms as tt from torch.utils.data import DataLoader, TensorDataset @@ -10,21 +8,14 @@ class MockBuilder(BaseBuilder): - @staticmethod - def class_spec(*args, **kwargs): - # Return a dummy spec - return {"num_classes": 2, "cls2idx": {"class_a": 0, "class_b": 1}} - @staticmethod def build_dataloader(batch_size, device, dtype, **kwargs): - # Create synthetic data - # Class 0: mean 0. Class 1: mean 1. + # Distinct class means provide a small learnable dataset. n = 20 c, h, w = 3, 5, 5 data_0 = torch.randn(n, c, h, w) data_1 = torch.randn(n, c, h, w) + 1.0 data = torch.cat([data_0, data_1]) - # labels need to be LongTensor labels = torch.cat([torch.zeros(n, dtype=torch.long), torch.ones(n, dtype=torch.long)]) dataset = TensorDataset(data, labels) @@ -36,12 +27,10 @@ def build_dataloader(batch_size, device, dtype, **kwargs): @staticmethod def build_augmentation(dtype): - # Must return torchvision.transforms.Compose return tt.Compose([]) @staticmethod def build_regularizer(*args, **kwargs): - # Disable regularization to avoid last_layer_weights dependency on Classifier class return lambda x: torch.tensor(0.0) @@ -64,97 +53,58 @@ def forward(self, x): def test_integration_train_cpu(tmp_path): - # Setup paths - input_dir = str(tmp_path / "data") - os.makedirs(input_dir, exist_ok=True) - # create dummy class dirs so validation passes if it checks - os.makedirs(os.path.join(input_dir, "class_a"), exist_ok=True) - os.makedirs(os.path.join(input_dir, "class_b"), exist_ok=True) - - output_dir = str(tmp_path / "output") - - # Run training - args = { - "input": input_dir, - "output": output_dir, - "epochs": 2, - "device": "cpu", - # Use float32 to avoid potential half-precision issues on CPU - # (though modern torch often handles it, cleaner to use float32 for simple test) - "dtype": "float32", - "name": "test_run", - "builder": MockBuilder, - "model_builder_kwargs": {"model_type": TinyMockModel(), "pretrained": False}, - # Be verbose to see output if needed - "logger_builder_kwargs": {"verbose": True, "logger_cls": configure_loggers()}, - # Disable EMA explicitly - "ema": False, - "seed": 42, - } - - main(**args) - - # Check if files were created - run_dir = os.path.join(output_dir, "test_run") - assert os.path.exists(run_dir) - assert os.path.isdir(run_dir) - - # Check weights - weights_dir = os.path.join(run_dir, "weights") - assert os.path.exists(weights_dir) - assert os.path.exists(os.path.join(weights_dir, "last.pt")) - assert os.path.exists(os.path.join(weights_dir, "checkpoint_last.pth")) - - # Check config - assert os.path.exists(os.path.join(run_dir, "config.yaml")) - - # Check class spec - # MockBuilder.class_spec does not write to file, so this file won't exist unless we write it. - # assert os.path.exists(os.path.join(run_dir, "class_spec.json")) - - # Verify we can execute the model on the data - # (Checking if training actually did something is harder without asserting loss decrease, - # but successful execution covers most integration points) - - # Optional: Load best.pt if it exists (it should if validation ran) - # Note: best.pt is only saved if validation happens. - # MockBuilder returns val_loader, so validation should run. - best_weights_path = os.path.join(weights_dir, "best.pt") - assert os.path.exists(best_weights_path) - - # Test autoloading from a single .pt weights file without passing model_type or other args from mini_trainer.modeling import Classifier, classification_module - loaded_model, loaded_preprocess = Classifier.build(weights=best_weights_path) - cls_mod = classification_module(loaded_model) - assert isinstance(cls_mod, Classifier) - assert cls_mod.metadata["backbone_output_name"] == "fc" - assert cls_mod.metadata["backbone_class"] == "tests.integration.test_integration_train:TinyMockModel" - assert loaded_preprocess is not None - # Test that the custom preprocessing function runs - dummy_input = torch.randn(3, 5, 5) - processed = loaded_preprocess(dummy_input) + input_dir = tmp_path / "data" + for label in ("class_a", "class_b"): + (input_dir / label).mkdir(parents=True) + output_dir = tmp_path / "output" + main( + input=str(input_dir), + output=str(output_dir), + epochs=2, + device="cpu", + dtype="float32", + name="test_run", + builder=MockBuilder, + model_builder_kwargs={"model_type": TinyMockModel(), "pretrained": False}, + logger_builder_kwargs={"verbose": True, "logger_cls": configure_loggers()}, + ema=False, + seed=42, + ) + run_dir = output_dir / "test_run" + for artifact in ("config.yaml", "class_spec.json", "weights/last.pt", "weights/checkpoint_last.pth", "weights/best.pt"): + assert (run_dir / artifact).is_file(), artifact + + # Retain the import path: checkpoints reconstruct this shared test backbone. + loaded_model, preprocess = Classifier.build(weights=str(run_dir / "weights/best.pt")) + head = classification_module(loaded_model) + assert isinstance(head, Classifier) + assert head.metadata["backbone_output_name"] == "fc" + assert head.metadata["backbone_class"] == "tests.integration.test_integration_train:TinyMockModel" + processed = preprocess(torch.randn(3, 5, 5)) assert processed.shape == (3, 5, 5) + loaded_model.eval() + with torch.inference_mode(): + predictions = loaded_model(processed.unsqueeze(0)) + assert predictions.shape == (1, 2) + assert torch.isfinite(predictions).all() def test_integration_resume_train(tmp_path): from mini_trainer.config import load_yaml_config - input_dir = str(tmp_path / "data") - os.makedirs(os.path.join(input_dir, "class_a"), exist_ok=True) - os.makedirs(os.path.join(input_dir, "class_b"), exist_ok=True) - - output_dir = str(tmp_path / "output") + input_dir = tmp_path / "data" + for label in ("class_a", "class_b"): + (input_dir / label).mkdir(parents=True) + output_dir = tmp_path / "output" run_name = "resume_test_run" - run_dir = os.path.join(output_dir, run_name) - - # 1. Fresh run with resume=True when no checkpoint exists yet - config_fresh = load_yaml_config(path=None, resume=True, output_dir=run_dir) - assert "checkpoint" not in config_fresh + run_dir = output_dir / run_name + assert "checkpoint" not in load_yaml_config(path=None, resume=True, output_dir=str(run_dir)) args = { - "input": input_dir, - "output": output_dir, + "input": str(input_dir), + "output": str(output_dir), "epochs": 1, "device": "cpu", "dtype": "float32", @@ -166,25 +116,13 @@ def test_integration_resume_train(tmp_path): "seed": 42, } main(**args) - - ckpt_path = os.path.join(run_dir, "weights", "checkpoint_last.pth") - assert os.path.exists(ckpt_path) - - # 2. Resumed run with resume=True when checkpoint exists - config_resumed = load_yaml_config(path=None, resume=True, output_dir=run_dir) - assert "checkpoint" in config_resumed - assert config_resumed["checkpoint"] == os.path.abspath(ckpt_path) - - # Run for 2 epochs using checkpoint - args_resume = args.copy() - args_resume["epochs"] = 2 - args_resume["checkpoint"] = config_resumed["checkpoint"] - - main(**args_resume) - - # Run directory should NOT be incremented to resume_test_run_1 - assert os.path.exists(run_dir) - assert not os.path.exists(os.path.join(output_dir, "resume_test_run_1")) + checkpoint = run_dir / "weights/checkpoint_last.pth" + assert checkpoint.is_file() + config = load_yaml_config(path=None, resume=True, output_dir=str(run_dir)) + assert config["checkpoint"] == str(checkpoint.resolve()) + main(**{**args, "epochs": 2, "checkpoint": config["checkpoint"]}) + assert run_dir.is_dir() + assert not (output_dir / "resume_test_run_1").exists() def test_integration_migration(tmp_path): @@ -206,14 +144,12 @@ def test_integration_migration(tmp_path): migrate_results(src_dir=src_dir, dst_dir=dst_dir, task_dir=task_dir, move=False) - # Check that dst_dir exists dst_config = dst_dir / "runs" / "combo1" / "config.yaml" assert dst_config.exists() content = dst_config.read_text(encoding="utf-8") assert str(dst_dir) in content assert str(src_dir) not in content - # Check that task file was updated task_content = task_file.read_text(encoding="utf-8") assert str(dst_dir) in task_content assert str(src_dir) not in task_content diff --git a/tests/logging/test_collectors.py b/tests/logging/test_collectors.py new file mode 100644 index 0000000..3961df9 --- /dev/null +++ b/tests/logging/test_collectors.py @@ -0,0 +1,43 @@ +import json + +import pytest +import torch +from PIL import Image + +from mini_trainer.hierarchical.integration import HierarchicalResultCollector +from mini_trainer.logging import BaseResultCollector + + +@pytest.mark.parametrize("hierarchical", [False, True], ids=["flat", "hierarchical"]) +@pytest.mark.parametrize("count", [1, 5], ids=["single-observation", "multiple-observations"]) +def test_evaluation_preserves_observations_and_per_rank_support(tmp_path, hierarchical, count): + mappings = {"0": {"s1": 1, "s0": 0, "s2": 2}, "1": {"g1": 1, "g0": 0}} + labels = [("s0", "g0"), ("s1", "g0"), ("s2", "g1"), ("unknown", "g1"), ("s0", "g0")][:count] + species = torch.tensor([[8.0, 0.0, 0.0], [8.0, 0.0, 0.0], [0.0, 0.0, 8.0], [0.0, 8.0, 0.0], [8.0, 0.0, 0.0]])[:count] + genus = torch.tensor([[8.0, 0.0], [8.0, 0.0], [0.0, 8.0], [0.0, 8.0], [0.0, 8.0]])[:count] + cls = HierarchicalResultCollector if hierarchical else BaseResultCollector + collector = cls(cls2idx=mappings if hierarchical else mappings["0"], scientific_names=False) + collector.collect( + paths=[f"{i}.jpg" for i in range(count)], + predictions=[species, genus] if hierarchical else species, + labels=labels if hierarchical else [row[0] for row in labels], + ) + original = json.dumps(collector.data) + results = collector.evaluate(str(tmp_path), prefix="sample_", plot_conf_mat=True) + assert json.dumps(collector.data) == original + assert json.loads((tmp_path / "sample_eval_results.json").read_text()) == json.loads(json.dumps(results)) + ranks = list(results.values()) if hierarchical else [results] + species_result = ranks[0] + assert list(species_result["conf_mat"]) == ["s0", "s1", "s2"] + assert species_result["totals"] == ({"s0": 1, "s1": 0, "s2": 0} if count == 1 else {"s0": 2, "s1": 1, "s2": 1}) + assert species_result["conf_mat"]["s1"]["s0"] == (0 if count == 1 else 1) + assert species_result["micro"] == pytest.approx(1 if count == 1 else 3 / 4) + assert species_result["macro"] == pytest.approx(1 if count == 1 else 2 / 3) + if hierarchical: + assert ranks[1]["totals"] == ({"g0": 1, "g1": 0} if count == 1 else {"g0": 3, "g1": 2}) + assert ranks[1]["micro"] == pytest.approx(1 if count == 1 else 4 / 5) + assert ranks[1]["macro"] == pytest.approx(1 if count == 1 else 5 / 6) + for level in range(len(ranks)): + suffix = f"_level{level}" if hierarchical else "" + with Image.open(tmp_path / f"sample_confusion_matrix{suffix}.png") as image: + image.verify() diff --git a/tests/logging/test_logging_simple.py b/tests/logging/test_logging_simple.py index c76cd03..bcd84c5 100644 --- a/tests/logging/test_logging_simple.py +++ b/tests/logging/test_logging_simple.py @@ -75,7 +75,6 @@ def test_Timer(): assert not t.running assert t.total >= 0.0 - # Test errors with pytest.raises(RuntimeError): t.stop() # already stopped @@ -83,7 +82,7 @@ def test_Timer(): with pytest.raises(RuntimeError): t.start() # already running with pytest.raises(RuntimeError): - _ = t.total # total is invalid while running? -> Code says: raise RuntimeError("Attempting to grab total of a running timer!") + _ = t.total assert "Timer[Running]" in str(t) t.stop() @@ -116,15 +115,9 @@ def test_compute_aligned_steps(): assert steps[0] == 0 assert steps[-1] == 9 - # Validation usually has fewer steps or different freq - # Origin 5, Target 10 + # Fewer validation steps retain the training endpoints, rounding ties to even. steps = compute_aligned_steps(10, 5, 1, 0) assert len(steps) == 5 - # linspace(0, 9, 5) -> 0, 2.25, 4.5, 6.75, 9 - # round: 0, 2, 4 (4.5 rounds to nearest even? or Up? Py3 round ties to even: 4). - # 6.75 -> 7. - # 9 -> 9. - # [0, 2, 4, 7, 9] assert steps == [0, 2, 4, 7, 9] diff --git a/tests/logging/test_tensorboard.py b/tests/logging/test_tensorboard.py index 4640904..ded6bba 100644 --- a/tests/logging/test_tensorboard.py +++ b/tests/logging/test_tensorboard.py @@ -1 +1,84 @@ -# TODO +"""Phase ownership contracts without the optional TensorBoard package or a server.""" + +import sys +from types import SimpleNamespace +from unittest.mock import Mock + +import pytest + +from mini_trainer.logging import MetricLogger, MultiLogger, TensorboardLogger + + +@pytest.fixture +def writers(monkeypatch): + created = [] + + def create(**kwargs): + writer = Mock(spec=["add_scalar", "close"]) + created.append(writer) + return writer + + monkeypatch.setitem(sys.modules, "torch.utils.tensorboard.writer", SimpleNamespace(SummaryWriter=create)) + return created + + +def make_logger(tmp_path, **kwargs): + return MultiLogger([0] * 5, [0] * 5, 1, str(tmp_path), "run", statistics=["loss"], **kwargs) + + +@pytest.mark.parametrize("boundary", ["phase", "finish"]) +def test_phase_boundary_flushes_partial_buffer_and_closes_writer(tmp_path, writers, boundary): + logger = make_logger(tmp_path, logger_cls=[MetricLogger, TensorboardLogger]) + logger.update(0, "train") + for value in (1.0, 3.0): + logger.log_statistic(loss=value) + logger.step() + writer = writers[0] + writer.add_scalar.assert_not_called() + if boundary == "phase": + logger.update(0, "eval") + assert len(writers) == 2 + writers[1].close.assert_not_called() + else: + logger.finish() + writer.add_scalar.assert_called_once_with("loss/train", 2.0, 1) + writer.close.assert_called_once() + if boundary == "phase": + logger.finish() + writers[1].close.assert_called_once() + writer.close.assert_called_once() + + +@pytest.mark.parametrize("failure", ["summary", "flush"]) +def test_finish_closes_all_backends_even_if_saving_fails(tmp_path, writers, monkeypatch, failure): + class OtherLogger(MetricLogger): + close = Mock() + + logger = make_logger(tmp_path, logger_cls=[OtherLogger, TensorboardLogger]) + logger.update(0, "train") + logger.log_statistic(loss=1.0) + if failure == "summary": + monkeypatch.setattr(logger, "_store_summary", Mock(side_effect=OSError("write failed"))) + else: + writers[0].add_scalar.side_effect = OSError("write failed") + with pytest.raises(OSError, match="write failed"): + logger.finish() + writers[0].close.assert_called_once() + OtherLogger.close.assert_called_once() + + +@pytest.mark.parametrize("failure", ["constructor", "statistic"]) +def test_partial_backend_initialization_closes_created_writer(tmp_path, writers, failure): + def fail(*args, **kwargs): + raise RuntimeError("initialization failed") + + options = {"logger_cls": [TensorboardLogger]} + if failure == "constructor": + options["logger_cls"].append(fail) + else: + options["logger_cls_stat_factory"] = [fail] + logger = make_logger(tmp_path, **options) + with pytest.raises(RuntimeError, match="initialization failed"): + logger.update(0, "train") + writers[0].close.assert_called_once() + assert logger.loggers == [] diff --git a/tests/logging/test_wandb.py b/tests/logging/test_wandb.py index fe44579..3d6c415 100644 --- a/tests/logging/test_wandb.py +++ b/tests/logging/test_wandb.py @@ -1,4 +1,4 @@ -from unittest.mock import MagicMock, patch +from unittest.mock import MagicMock import pytest @@ -6,80 +6,73 @@ from mini_trainer.logging import BaseStatistic, WandbLogger -def test_wandb_logger_not_installed(): - with patch.object(wandb_module, "wandb", None): - with pytest.raises(ImportError, match="wandb is not installed"): - WandbLogger(steps=[0, 1], output=None) - - -def test_wandb_logger_init(): - mock_wandb = MagicMock() - mock_wandb.run = None - with ( - patch.object(wandb_module, "wandb", mock_wandb), - patch("socket.gethostname", return_value="dummy_host"), - patch("os.getcwd", return_value="CWD"), - ): - WandbLogger(steps=[0, 1], output="dummy_dir", name="test", project="test_proj") - mock_wandb.init.assert_called_once_with(project="test_proj", name="test", dir="dummy_dir", config=None, tags=["dummy_host", "CWD"]) - - # Test initialization with steps=None - with pytest.raises(TypeError): - WandbLogger(steps=None, output=None) +@pytest.fixture +def sdk(monkeypatch): + sdk = MagicMock() + monkeypatch.setattr(wandb_module, "wandb", sdk) + return sdk -def test_wandb_logger_add_stat(): - mock_wandb = MagicMock() - with patch.object(wandb_module, "wandb", mock_wandb): - logger = WandbLogger(steps=[0, 1], output=None) - logger.add_stat("loss", BaseStatistic) - assert "loss" in logger.statistics - assert isinstance(logger.statistics["loss"], BaseStatistic) +@pytest.mark.parametrize( + ("method", "kwargs"), + [("__init__", {"steps": [0], "output": None}), ("step", {}), ("add_figure", {"name": "plot", "figure": None})], +) +def test_wandb_logger_not_installed(monkeypatch, method, kwargs): + monkeypatch.setattr(wandb_module, "wandb", None) + with pytest.raises(ImportError, match="wandb is not installed"): + getattr(WandbLogger.__new__(WandbLogger), method)(**kwargs) -@pytest.mark.parametrize("rank", [0, 1]) -def test_distributed_trial_id_and_finish_owner(rank): - sdk = MagicMock() +@pytest.mark.parametrize("rank", [None, 0, 1], ids=["local", "primary", "secondary"]) +@pytest.mark.parametrize(("run_id", "run_name"), [(None, None), ("", "batch64"), ("shared-trial", "batch64")]) +def test_new_run_identity_and_finish_owner(sdk, monkeypatch, tmp_path, rank, run_id, run_name): sdk.run = None - with ( - patch.object(wandb_module, "wandb", sdk), - patch.object(wandb_module, "is_dist_avail_and_initialized", return_value=True), - patch.object(wandb_module, "get_rank", return_value=rank), - ): - WandbLogger(steps=[0, 1], output=None, name="model", run_name="batch64", run_id="shared-trial") - assert sdk.init.call_args.kwargs["id"] == "shared-trial" - assert sdk.init.call_args.kwargs["name"] == "batch64" - assert sdk.Settings.call_args.kwargs["x_update_finish_state"] is (rank == 0) - - -def test_wandb_logger_update_and_step(): - mock_wandb = MagicMock() - mock_wandb.run = MagicMock() - mock_wandb.run.step = 0 - with patch.object(wandb_module, "wandb", mock_wandb): - logger = WandbLogger(steps=[0, 10], output=None) - logger.add_stat("loss", BaseStatistic) + monkeypatch.setattr(wandb_module.socket, "gethostname", lambda: "host") + monkeypatch.setattr(wandb_module.os, "getcwd", lambda: "CWD") + monkeypatch.setattr(wandb_module, "is_dist_avail_and_initialized", lambda: rank is not None) + monkeypatch.setattr(wandb_module, "get_rank", lambda: rank) + WandbLogger(steps=[0, 1], output=str(tmp_path), name="model trial/1", project="project", run_name=run_name, run_id=run_id) + expected = dict(project="project", name=run_name or "model trial/1", dir=str(tmp_path), config=None, tags=["host", "CWD"]) + if rank is not None: + sdk.Settings.assert_called_once_with(mode="shared", x_primary=rank == 0, x_update_finish_state=rank == 0, x_label=f"rank_{rank}") + expected.update(id=run_id or "model_trial_1", settings=sdk.Settings.return_value) + else: + sdk.Settings.assert_not_called() + if run_id is not None: + expected["id"] = run_id + sdk.init.assert_called_once_with(**expected) + + +@pytest.mark.parametrize("distributed", [False, True]) +def test_existing_run_is_adopted(sdk, monkeypatch, distributed): + monkeypatch.setattr(wandb_module, "is_dist_avail_and_initialized", lambda: distributed) + WandbLogger(steps=[0, 1], output=None, run_id="must-not-replace-existing") + sdk.init.assert_not_called() + sdk.Settings.assert_not_called() + with pytest.raises(TypeError): + WandbLogger(steps=None, output=None) - logger.update("loss", 1.5) - assert logger._current_step_logs["loss/main"] == 1.5 - logger.step() - mock_wandb.log.assert_called_once_with({"loss/main": 1.5, "global_step": 0}) - assert logger._internal_step == 1 - assert logger._current_step_logs == {} +def test_wandb_logger_update_and_step(sdk): + logger = WandbLogger(steps=[0, 10], output=None) + logger.add_stat("loss", BaseStatistic) + assert isinstance(logger.statistics["loss"], BaseStatistic) + logger.update("loss", 1.5) + logger.step() + sdk.log.assert_called_once_with({"loss/main": 1.5, "global_step": 0}) + assert logger._internal_step == 1 + assert logger._current_step_logs == {} -def test_wandb_logger_add_figure(): +def test_wandb_logger_add_figure(sdk): import matplotlib.pyplot as plt - mock_wandb = MagicMock() - mock_wandb.run = MagicMock() - mock_wandb.run.step = 0 - with patch.object(wandb_module, "wandb", mock_wandb): - logger = WandbLogger(steps=[0, 10], output=None) - fig = plt.figure() - + logger = WandbLogger(steps=[0, 10], output=None) + fig = plt.figure() + try: logger.add_figure("my_plot", fig, epoch=1) logger.step() - mock_wandb.Image.assert_called_once_with(fig) - mock_wandb.log.assert_called_once_with({"my_plot/main": mock_wandb.Image.return_value, "epoch": 1}) + sdk.Image.assert_called_once_with(fig) + sdk.log.assert_called_once_with({"my_plot/main": sdk.Image.return_value, "epoch": 1}) + finally: + plt.close(fig) diff --git a/tests/modeling/test_architectures.py b/tests/modeling/test_architectures.py index 1e1a246..624892e 100644 --- a/tests/modeling/test_architectures.py +++ b/tests/modeling/test_architectures.py @@ -1,58 +1,69 @@ import importlib.util import os +import sys +from types import ModuleType import pytest import torch -from mini_trainer.modeling import get_model, list_supported_backbones +from mini_trainer.modeling import BackboneInfo, get_model, list_supported_backbones +from mini_trainer.modeling.architectures import load from mini_trainer.modeling.classifier import Classifier -# Skip all tests in this file if RUN_SLOW_TESTS is not 1 -pytestmark = pytest.mark.skipif( +slow = pytest.mark.skipif( os.environ.get("RUN_SLOW_TESTS") != "1", reason="Slow architecture tests skipped by default. Set RUN_SLOW_TESTS=1 to run.", ) -def test_list_supported_backbones(): - from mini_trainer.modeling import BackboneInfo - - backbones = list_supported_backbones() - assert isinstance(backbones, list) - assert len(backbones) > 0 - for b in backbones: - assert isinstance(b, BackboneInfo) - # Test attribute-based access - assert hasattr(b, "model") - assert isinstance(b.model, str) - assert isinstance(b.backend, str) - assert isinstance(b.availability, bool) - - # Test tuple sequence properties (ordering) - assert len(b) == 4 - assert b[0] == b.model - assert b[1] == b.backend - assert b[2] == b.availability - assert b[3] == b.blacklisted - - # Test unpacking (guaranteed ordering) - model, backend, availability, blacklisted = b - assert model == b.model - assert backend == b.backend - assert availability == b.availability - assert blacklisted == b.blacklisted - - # Test asdict support - d = b._asdict() - assert d["model"] == b.model - assert d["backend"] == b.backend - assert d["availability"] == b.availability - assert d["blacklisted"] == b.blacklisted - - backends = {b.backend for b in backbones} - assert "torchvision" in backends - - +@pytest.mark.parametrize("available", [False, True]) +def test_list_supported_backbones(available, monkeypatch): + import torchvision + + monkeypatch.setattr(torchvision.models, "list_models", lambda: ["shared", "tv-only"]) + monkeypatch.setattr(load, "get_bioclip_models", lambda: ["local", "blocked"]) + monkeypatch.setattr(load, "load_blacklist", lambda: {"timm": ["shared"], "bioclip": ["blocked"]}) + names = ( + "open_clip", + "timm", + "transformers", + "transformers.models", + "transformers.models.auto", + "transformers.models.auto.configuration_auto", + "transformers.models.auto.modeling_auto", + ) + modules = {name: ModuleType(name) for name in names} + modules["timm"].list_models = lambda: ["shared", "timm-only"] + supported, unsupported = object(), object() + modules[names[-2]].CONFIG_MAPPING = {"vit": supported, "not-an-image-model": unsupported, "swin": supported} + modules[names[-1]].MODEL_FOR_IMAGE_CLASSIFICATION_MAPPING = {supported: object()} + for name, module in modules.items(): + monkeypatch.setitem(sys.modules, name, module if available else None) + + rows = list_supported_backbones() + assert all(isinstance(row, BackboneInfo) for row in rows) + assert rows[:4] == [ + ("shared", "torchvision", True, False), + ("tv-only", "torchvision", True, False), + ("bioclip:local", "bioclip", available, False), + ("bioclip:blocked", "bioclip", available, True), + ] + if available: + assert rows[4:] == [ + ("timm:shared", "timm", True, True), + ("timm:timm-only", "timm", True, False), + ("hf-hub:microsoft/swin-tiny-patch4-window7-224", "transformers", True, False), + ("hf-hub:google/vit-base-patch16-224", "transformers", True, False), + ] + else: + # Missing optional libraries still advertise examples, without promising availability. + assert {row.backend for row in rows[4:]} == {"timm", "transformers"} + for row in rows[4:]: + assert not row.availability and not row.blacklisted + assert row.model.startswith("timm:" if row.backend == "timm" else "hf-hub:") + + +@slow def test_torchvision_model(): model, classifier_name, preprocess_fn, embed_dim, _ = get_model("resnet18") assert classifier_name == "fc" @@ -73,6 +84,7 @@ def test_torchvision_model(): has_transformers = importlib.util.find_spec("transformers") is not None +@slow @pytest.mark.skipif(not has_timm, reason="timm package not installed") def test_timm_model(): # Explicit prefix @@ -97,6 +109,7 @@ def test_timm_model(): assert isinstance(embed_dim, int) +@slow @pytest.mark.skipif(not has_transformers, reason="transformers package not installed") def test_transformers_model(): # Load vit model offline to avoid hitting the internet diff --git a/tests/modeling/test_prediction.py b/tests/modeling/test_prediction.py new file mode 100644 index 0000000..1a8004c --- /dev/null +++ b/tests/modeling/test_prediction.py @@ -0,0 +1,25 @@ +import json +from contextlib import nullcontext + +import pytest +import torch + +from mini_trainer.modeling import Prediction + + +@pytest.mark.parametrize("mapping", [None, {}, {"cat": 1, "bird": 2, "dog": 0}]) +@pytest.mark.parametrize("topk", [1, 2]) +def test_prediction_labels_follow_score_indices(mapping, topk, tmp_path): + logits = torch.tensor([[-1.0, 3.0, 1.0], [2.0, -3.0, 0.0]]) + with pytest.warns(UserWarning, match="experimental") if topk == 2 else nullcontext(): + result = Prediction(logits, cls2idx=mapping, topk=topk) + labels = [["cat", "bird"], ["dog", "bird"]] if mapping else [["1", "2"], ["0", "2"]] + assert result.labels == [row[:topk] for row in labels] + assert result.indices.tolist() == [row[:topk] for row in [[1, 2], [0, 2]]] + torch.testing.assert_close(result.confidence, logits.softmax(-1).gather(-1, result.indices)) + if topk == 1: + path = tmp_path / "predictions.json" + result.save(path) + saved = json.loads(path.read_text()) + assert [item["label"] for item in saved["results"]] == [row[0] for row in labels] + assert [item["index"] for item in saved["results"]] == [1, 0] diff --git a/tests/quantization/test_quantization.py b/tests/quantization/test_quantization.py index fd8199f..2b8c1ec 100644 --- a/tests/quantization/test_quantization.py +++ b/tests/quantization/test_quantization.py @@ -15,7 +15,7 @@ from mini_trainer.trainer import train_one_epoch from tests.training.test_checkpoint_contract import assert_state_equal -pytestmark = pytest.mark.skipif(importlib.util.find_spec("torchao") is None, reason="Install mini_trainer[quantization]") +pytestmark = pytest.mark.skipif(importlib.util.find_spec("torchao") is None, reason="Install mt-trainer[quantization]") def model(head=Classifier, normalized=True): diff --git a/tests/quantization/test_quantized_training.py b/tests/quantization/test_quantized_training.py index 3e332bd..e591ad4 100644 --- a/tests/quantization/test_quantized_training.py +++ b/tests/quantization/test_quantized_training.py @@ -1,4 +1,4 @@ -"""CUDA numerical and saved-storage checks for the QT kernel prototype.""" +"""Native INT8 training arithmetic, storage and compiler regressions.""" import importlib.util import os @@ -6,22 +6,23 @@ import pytest import torch -from dev.benchmarks.training.quantized_training import IntegerLinear, dependencies +from mini_trainer.modeling.quantized_training import IntegerLinear, prepare_quantized_training @pytest.mark.parametrize("gradient_scale", [1.0, 1e-6]) def test_integer_training_gradients_and_saved_storage(gradient_scale): if importlib.util.find_spec("torchao") is None: - pytest.skip("Install mini_trainer[quantization]") + pytest.skip("Install mt-trainer[quantization]") if os.environ.get("RUN_CUDA_TESTS") != "1": pytest.skip("Set RUN_CUDA_TESTS=1 for the native INT8 training kernel test") if not torch.cuda.is_available(): pytest.fail("CUDA requested but unavailable") torch.manual_seed(42) - weight_type, _, _ = dependencies() + from mini_trainer.modeling._quantized_training import TrainingWeight + inputs = torch.randn(32, 64, device="cuda", dtype=torch.float16, requires_grad=True) original_weight = torch.randn(64, 64, device="cuda", dtype=torch.float16) / 8 - weight = torch.nn.Parameter(weight_type.from_float(original_weight)) + weight = torch.nn.Parameter(TrainingWeight.from_float(original_weight)) grad_output = torch.randn(32, 64, device="cuda", dtype=torch.float16) * gradient_scale saved = [] @@ -172,10 +173,12 @@ def test_compiled_integer_parameter_gradients(): pytest.skip("Set RUN_CUDA_TESTS=1 for compiled INT8 gradient validation") if not torch.cuda.is_available(): pytest.fail("CUDA requested but unavailable") - from dev.benchmarks.training.quantized_training import Layer torch.manual_seed(42) - eager = torch.nn.Sequential(Layer(64, True, torch.float16), Layer(64, True, torch.float16)) + eager = torch.nn.Sequential(*(torch.nn.Linear(64, 64, bias=False, device="meta") for _ in range(2))) + for layer in eager: + layer.weight = torch.nn.Parameter(torch.randn(64, 64, device="cuda", dtype=torch.float16) / 8) + prepare_quantized_training(eager) compiled = torch.compile(copy.deepcopy(eager), fullgraph=True) # Ordinary training input does not require gradients. A small mean-reduced # loss exercises scale products below FP16's representable range. @@ -245,10 +248,8 @@ def test_dense_backward_graph_with_fresh_kernel_tuning(monkeypatch): ) assert result.returncode == 0, result.stdout + result.stderr return - from dev.benchmarks.models import DenseImageMLP from mini_trainer.modeling import Classifier, EmbeddingContext from mini_trainer.modeling._quantized_training import matmul - from mini_trainer.modeling.quantized_training import prepare_quantized_training torch._dynamo.reset() torch.manual_seed(42) @@ -262,8 +263,17 @@ def record_tuning(kernel, quantiles): return benchmark(kernel, quantiles) monkeypatch.setattr(matmul._kernel, "_do_bench", record_tuning) - raw = DenseImageMLP() - raw.fc = Classifier(2048, 10, hidden=False, normalized=False) + raw = torch.nn.Sequential( + torch.nn.AdaptiveAvgPool2d((28, 28)), + torch.nn.Flatten(), + torch.nn.Linear(3 * 28 * 28, 2048), + torch.nn.ReLU(), + torch.nn.Linear(2048, 2048), + torch.nn.ReLU(), + torch.nn.Linear(2048, 2048), + torch.nn.ReLU(), + Classifier(2048, 10, hidden=False, normalized=False), + ) raw.cuda() prepare_quantized_training(raw) model = torch.compile(raw, mode="reduce-overhead") diff --git a/tests/quantization/test_quantized_training_model.py b/tests/quantization/test_quantized_training_model.py index 2c68f0e..f66a23e 100644 --- a/tests/quantization/test_quantized_training_model.py +++ b/tests/quantization/test_quantized_training_model.py @@ -9,7 +9,7 @@ from mini_trainer.modeling.quantized_training import load_training_weights, prepare_quantized_training, restore_quantized_training -pytestmark = pytest.mark.skipif(importlib.util.find_spec("torchao") is None, reason="Install mini_trainer[quantization]") +pytestmark = pytest.mark.skipif(importlib.util.find_spec("torchao") is None, reason="Install mt-trainer[quantization]") def test_selection_preserves_ties_and_reports_float_operations(): @@ -353,9 +353,7 @@ def test_tensor_scalar_decay_preserves_integer_codes_and_rng(): def test_cuda_storage_update_rounding_versions_and_rng(operation, dtype): from mini_trainer.modeling._quantized_training import TrainingWeight - if os.environ.get("RUN_CUDA_TESTS") != "1": - pytest.skip("Set RUN_CUDA_TESTS=1 to verify fused storage updates") - assert torch.cuda.is_available() + cuda() torch.manual_seed(29) weight = nn.Parameter(TrainingWeight.from_float(torch.randn(33, 67, device="cuda", dtype=dtype))) update = torch.randn_like(weight.dequantize()) @@ -396,9 +394,7 @@ def apply(target): def test_cuda_mixed_update_matches_materialized_trajectory(dtype, transposed, monkeypatch): from mini_trainer.modeling._quantized_training import TrainingWeight - if os.environ.get("RUN_CUDA_TESTS") != "1": - pytest.skip("Set RUN_CUDA_TESTS=1 to verify mixed-dtype storage updates") - assert torch.cuda.is_available() + cuda() torch.manual_seed(29) weight = nn.Parameter(TrainingWeight.from_float(torch.randn(33, 67, device="cuda"))) reference = nn.Parameter(weight.detach().clone()) @@ -432,9 +428,7 @@ def forbidden_dequantize(self): def test_cuda_storage_update_invalidates_saved_weight(): from mini_trainer.modeling._quantized_training import TrainingWeight - if os.environ.get("RUN_CUDA_TESTS") != "1": - pytest.skip("Set RUN_CUDA_TESTS=1 to verify saved-tensor invalidation") - assert torch.cuda.is_available() + cuda() weight = nn.Parameter(TrainingWeight.from_float(torch.randn(16, 32, device="cuda"))) inputs = torch.randn(8, 32, device="cuda", requires_grad=True) output = nn.functional.linear(inputs, weight) @@ -449,9 +443,7 @@ def test_cuda_storage_kernel_reused_across_parameter_objects_and_rates(monkeypat from mini_trainer.modeling import _quantized_training as backend - if os.environ.get("RUN_CUDA_TESTS") != "1": - pytest.skip("Set RUN_CUDA_TESTS=1 to verify storage-kernel reuse") - assert torch.cuda.is_available() + cuda() counter = CompileCounterWithBackend("inductor") operation = backend.update_int8_rows_ @@ -480,9 +472,7 @@ def test_cuda_local_matmul_tuning_bounds_temporary_memory(monkeypatch): from mini_trainer.modeling._quantized_training import scaled_int8_mm from mini_trainer.modeling._quantized_training.matmul import _kernel - if os.environ.get("RUN_CUDA_TESTS") != "1": - pytest.skip("Set RUN_CUDA_TESTS=1 to verify first-use tuning memory") - assert torch.cuda.is_available() + cuda() assert _kernel is not upstream and _kernel.fn is upstream.fn # Force actual tuning rather than accepting an earlier process's disk cache. monkeypatch.setattr(_kernel, "cache", {}) @@ -511,9 +501,7 @@ def test_cuda_compiled_optimizer_handles_many_quantized_groups(kind): from mini_trainer.modeling._quantized_training import TrainingWeight from mini_trainer.training.compilation import compile_optimizer - if os.environ.get("RUN_CUDA_TESTS") != "1": - pytest.skip("Set RUN_CUDA_TESTS=1 to verify many-group optimizer compilation") - assert torch.cuda.is_available() + cuda() # Measure this optimizer's frames, independently of earlier tests' Dynamo # caches/skip decisions. Never reset between groups or measured updates. torch._dynamo.reset() @@ -564,9 +552,7 @@ def test_cuda_compiled_quantized_update_matches_float_before_rounding(kind, cuda from mini_trainer.modeling._quantized_training import TrainingWeight from mini_trainer.training.compilation import compile_optimizer - if os.environ.get("RUN_CUDA_TESTS") != "1": - pytest.skip("Set RUN_CUDA_TESTS=1 to verify compiled QT update arithmetic") - assert torch.cuda.is_available() + cuda() torch.manual_seed(107) weight = nn.Parameter(TrainingWeight.from_float(torch.randn(32, 64, device="cuda"))) reference = nn.Parameter(weight.dequantize().detach().clone()) @@ -600,9 +586,7 @@ def test_cuda_compiled_stochastic_rounding_preserves_sub_code_updates(): from mini_trainer.modeling._quantized_training import TrainingWeight from mini_trainer.training.compilation import compile_optimizer - if os.environ.get("RUN_CUDA_TESTS") != "1": - pytest.skip("Set RUN_CUDA_TESTS=1 to verify sub-code compiled QT updates") - assert torch.cuda.is_available() + cuda() torch.manual_seed(109) weight = nn.Parameter(TrainingWeight.from_float(torch.ones(128, 1024, device="cuda"))) optimizer = torch.optim.SGD([weight], lr=1, foreach=False) diff --git a/tests/releases/test_deployment.py b/tests/releases/test_deployment.py new file mode 100644 index 0000000..3a9f3d3 --- /dev/null +++ b/tests/releases/test_deployment.py @@ -0,0 +1,794 @@ +"""Small portable inference contracts, without downloading models or importing ORT.""" + +import hashlib +import json +import sys +from pathlib import Path +from types import SimpleNamespace + +import numpy as np +import pytest + +from deployment.mambo_deploy import Predictor +from deployment.mambo_deploy.bundle import Bundle +from deployment.mambo_deploy.preprocessing import RECIPE, preprocess +from deployment.mambo_deploy.results import Prediction, hierarchy + +CLASSES = {"labels": [["a", "b", "c"], ["g0", "g1"], ["f0"]], "parents": [[0, 0, 1], [0, 0]]} + + +@pytest.fixture +def bundle(tmp_path): + payloads = { + "classes.json": json.dumps(CLASSES), + "preprocessing.json": json.dumps(RECIPE), + "presets.json": json.dumps({"europe": {"path": "europe.classes", "count": 2}}), + "europe.classes": "a\nb\n", + } + manifest = { + "schema": "mambo-release-v1", + "model_id": "fixture", + "score_semantics": "hierarchical-leaf-logits-logsumexp-v1", + "files": {}, + } + for name, value in payloads.items(): + data = value.encode() + (tmp_path / name).write_bytes(data) + manifest["files"][name] = {"size": len(data), "sha256": hashlib.sha256(data).hexdigest()} + (tmp_path / "release.json").write_text(json.dumps(manifest)) + return tmp_path + + +@pytest.fixture +def ort(monkeypatch): + runtime = SimpleNamespace( + SessionOptions=SimpleNamespace, + GraphOptimizationLevel=SimpleNamespace(ORT_ENABLE_ALL=99, ORT_DISABLE_ALL=0), + OrtValue=type("FakeOrtValue", (), {}), + get_available_providers=lambda: ["CUDAExecutionProvider", "CPUExecutionProvider"], + InferenceSession=None, + ) + monkeypatch.setitem(sys.modules, "onnxruntime", runtime) + return runtime + + +def test_mask_recomputes_parent_scores_and_normalization(): + leaf = np.log(np.array([[0.1, 0.2, 0.7]], dtype=np.float32)) + raw, labels, indices = hierarchy(leaf, [0, 2], CLASSES) + prediction = Prediction(raw, labels, indices) + assert prediction[0].label == ("c", "g1", "f0") + np.testing.assert_allclose(prediction[0].confidence, [0.875, 0.875, 1], rtol=1e-6) + assert prediction[0].index == (1, 1, 0) + assert prediction.global_indices.tolist() == [[[2, 1, 0]]] + + +def test_tiny_legacy_top1_fixture(): + import tomllib + + fixture = tomllib.loads((Path(__file__).parents[2] / "dev/releases/mambo_v3/compatibility.toml").read_text())["top1"] + raw = [np.array([row], dtype=np.float32) for row in fixture["logits"]] + prediction = Prediction(raw, fixture["classes"], [np.arange(len(names)) for names in fixture["classes"]]) + assert prediction[0].label == tuple(fixture["labels"]) + assert prediction[0].index == tuple(fixture["indices"]) + np.testing.assert_allclose(prediction[0].confidence, fixture["confidence"], rtol=1e-6) + assert prediction.indices.shape == tuple(fixture["array_shape"]) + + +def test_custom_list_replaces_preset_and_predictors_are_isolated(bundle): + first = Predictor(bundle, class_list=["c", "c", "a"]) + second = Predictor(bundle, model="europe") + assert first.class_list == ["a", "c"] + assert second.class_list == ["a", "b"] + first._apply_class_mask(-1) + assert first.class_list == ["a", "b", "c"] + assert second.class_list == ["a", "b"] + with pytest.raises(ValueError, match="Unknown species"): + Predictor(bundle, class_list=["unknown"]) + with pytest.raises(ValueError, match="empty"): + Predictor(bundle, class_list=[]) + with pytest.raises(ValueError, match="mutually exclusive"): + Predictor(bundle, class_list=["a"], class_mask=[0]) + + +def test_hash_failure_and_escape_are_rejected(bundle): + loaded = Bundle(bundle) + with pytest.raises(ValueError, match="escapes"): + loaded.file("../outside") + (bundle / "europe.classes").write_text("c\nb\n") + with pytest.raises(ValueError, match="hash mismatch"): + Predictor(bundle, model="europe") + + +def test_uint8_and_float_inputs_align_and_reject_hwc(): + image = np.arange(3 * 21 * 30, dtype=np.uint8).reshape(3, 21, 30) + np.testing.assert_array_equal(preprocess(image), preprocess(image.astype(np.float32) / 255)) + assert preprocess(image[:1]).shape == (3, 384, 384) + with pytest.raises(ValueError, match="CHW"): + preprocess(image.transpose(1, 2, 0)) + with pytest.raises(ValueError, match="finite"): + preprocess(np.full_like(image, np.nan, dtype=np.float32)) + + +def test_batches_embeddings_and_masked_output_contract(bundle, monkeypatch): + predictor = Predictor(bundle, batch_size=2, class_list=["c"]) + seen = [] + + def fake_backend(images, embeddings): + seen.append(len(images)) + return np.tile([1.0, 2.0, 3.0], (len(images), 1)), np.ones((len(images), 1280), dtype=np.float32) if embeddings else None + + monkeypatch.setattr(predictor, "_onnx", fake_backend) + images = [np.zeros((3, 4, 5), dtype=np.uint8)] * 5 + result, vectors = predictor.predict_with_embeddings(images) + assert seen == [2, 2, 1] + assert len(result) == 5 and vectors.shape == (5, 1280) + assert result[0].label == ("c", "g1", "f0") + assert result[0].confidence == (1.0, 1.0, 1.0) + assert result.metadata["bundle_sha256"] == hashlib.sha256((bundle / "release.json").read_bytes()).hexdigest() + assert result.metadata["preprocessing_id"] == RECIPE["id"] + with pytest.raises(ValueError, match="No images"): + predictor.predict([]) + + +def test_topk_serialization_handles_nested_items(tmp_path): + classes = {"labels": [["a", "b"], ["g0", "g1"], ["f0", "f1"]], "parents": [[0, 1], [0, 1]]} + raw, labels, indices = hierarchy(np.array([[1.0, 2.0]], dtype=np.float32), [0, 1], classes) + result = Prediction(raw, labels, indices, topk=2) + result.save(tmp_path / "result.json") + assert json.loads((tmp_path / "result.json").read_text())["results"][0][0]["label"] == ["b", "g1", "f1"] + with pytest.raises(ValueError, match="smallest retained rank"): + Prediction(raw, labels, indices, topk=3) + + +def test_prediction_vocabulary_is_a_private_snapshot(tmp_path): + raw, labels, indices = hierarchy(np.array([[1.0, 2.0, 3.0]], dtype=np.float32), [0, 2], CLASSES) + first, second = (Prediction(raw, labels, indices) for _ in range(2)) + labels[0][0] = "changed-after-prediction" + expected = {"0": {"a": 0, "c": 1}, "1": {"g0": 0, "g1": 1}, "2": {"f0": 0}} + assert first.cls2idx == expected + first.cls2idx["0"]["a"] = 99 + assert second.cls2idx == expected + second.save(tmp_path / "result.json") + assert json.loads((tmp_path / "result.json").read_text())["config"]["cls2idx"] == expected + + +@pytest.mark.parametrize("dtype", [np.float32, np.float64, np.int64]) +def test_confidence_preserves_readonly_scores(dtype): + values = np.array([[1000, 999, -1000], [-3, -3, -3]], dtype=dtype) + values.flags.writeable = False + original = values.copy() + result = Prediction([values] * 3, [["a", "b", "c"]] * 3, [np.arange(3)] * 3, topk=2) + exp = np.exp(values - values.max(axis=1, keepdims=True)) + expected = exp[:, :2] / exp.sum(axis=1, keepdims=True) + np.testing.assert_array_equal(result.confidence, np.stack([expected] * 3, axis=-1)) + np.testing.assert_array_equal(values, original) + + +def test_native_facade_preserves_container_and_shared_confidence(bundle, monkeypatch): + import torch + + from mini_trainer import deploy + from mini_trainer.hierarchical.model import HierarchicalPrediction + + monkeypatch.setattr(deploy, "_runtime", lambda: Predictor) + facade = deploy.Predictor(device="cpu", bundle=bundle) + # Nonnegative logits summing to one must still be treated as logits. + raw = [np.array([[0.2, 0.8]], dtype=np.float32), np.array([[1.0]], dtype=np.float32), np.array([[1.0]], dtype=np.float32)] + result = Prediction(raw, [["a", "b"], ["g0"], ["f0"]], [np.arange(2), np.arange(1), np.arange(1)]) + monkeypatch.setattr(facade._predictor, "predict", lambda *args, **kwargs: result) + monkeypatch.setattr( + facade._predictor, "predict_with_embeddings", lambda *args, **kwargs: (result, np.ones((1, 1280), dtype=np.float32)) + ) + native = facade("unused") + assert isinstance(native, HierarchicalPrediction) + assert native[0].label == result[0].label + np.testing.assert_array_equal(native.confidence.numpy(), result.confidence) + assert isinstance(native.indices, torch.Tensor) + assert isinstance(facade.predict_with_embeddings("unused")[1], torch.Tensor) + + +@pytest.mark.parametrize(("precision", "use_tf32"), [("fp32", 0), ("auto", 1)]) +def test_requested_cuda_rejects_cpu_only_session(bundle, monkeypatch, precision, use_tf32, ort): + predictor = Predictor(bundle, device="cuda:0", precision=precision) + monkeypatch.setattr(predictor.bundle, "profile", lambda key: bundle / "unused.onnx") + captured = {} + + def session(path, sess_options, providers): + captured["providers"] = providers + return SimpleNamespace(disable_fallback=lambda: None, get_providers=lambda: ["CPUExecutionProvider"]) + + ort.InferenceSession = session + with pytest.raises(RuntimeError, match="refusing CPU-only fallback"): + predictor._onnx(np.zeros((1, 3, 384, 384), dtype=np.float32), False) + assert captured["providers"][0][1]["use_tf32"] == use_tf32 + + +@pytest.mark.parametrize( + ("shape", "digest"), + [ + ((1, 1, 1), "8c0b08b2c1ddc4350fd94ea23ee0365375dae88f5cc5fa0af327ea2b35328931"), + ((3, 2, 17), "cb8727ae82ff291103261fd12beb8cf81febaf8b449e74a7e33218d59558cc71"), + ((3, 17, 2), "f5c44cb3c3481437b552831337baf880ac7b16017b567e199c5e219e488d23e7"), + ((3, 383, 385), "9f33596b74bd0cf7c284ae0ed4bbede8b206724c2d8ee72dbff735bf4e5fe49e"), + ((3, 440, 590), "37954851c9b8d10fcded680ec586885a8dcf8ffac5d7abc94d001b5245a0357a"), + ((4, 24, 15), "e4dfd0c4a4174cd6d4913b1bf4f88bfd8c82a21802ec0d006e12594995bb1d64"), + ], +) +def test_fp32_preprocessing_preserves_geometry_with_bounded_rounding(shape, digest): + array = np.random.default_rng(19).integers(0, 256, size=shape, dtype=np.uint8) + value = preprocess(array) + assert value.dtype == np.float32 and value.flags.c_contiguous + from deployment.mambo_deploy import preprocessing + + # Freeze the FP64 equation itself, independently of production scratch dtypes. + image = np.ascontiguousarray(preprocessing._square(array), dtype=np.float32) + lo, hi = preprocessing._LO, preprocessing._HI + fraction = preprocessing._COORD - lo + rows = image[:, lo] * (1 - fraction)[None, :, None] + image[:, hi] * fraction[None, :, None] + pixels = rows[:, :, lo] * (1 - fraction)[None, None, :] + rows[:, :, hi] * fraction[None, None, :] + legacy = np.rint(pixels).astype(np.float32) + legacy /= 255 + legacy -= preprocessing._MEAN + legacy /= preprocessing._STD + assert hashlib.sha256(legacy.tobytes()).hexdigest() == digest + error_in_pixel_levels = np.abs(value - legacy) * np.array(RECIPE["std"])[:, None, None] * 255 + assert error_in_pixel_levels.max() <= 1.001 + assert error_in_pixel_levels.mean() < 0.001 + np.testing.assert_array_equal(value, preprocess(array.astype(np.float32) / 255)) + + +def test_precision_defaults_and_unsupported_combinations(bundle): + assert Predictor(bundle).effective_precision == "fp32" + assert Predictor(bundle, backend="torch", device="cuda").effective_precision == "fp16" + assert Predictor(bundle, device="cuda").effective_precision == "tf32" + assert Predictor(bundle, device="cuda", precision="fp32").effective_precision == "fp32" + for kwargs in ( + {"precision": "fp16"}, + {"device": "cuda", "precision": "bf16"}, + {"backend": "torch", "device": "cuda", "precision": "tf32"}, + ): + with pytest.raises(ValueError): + Predictor(bundle, **kwargs) + + +def test_native_fp32_head_and_embeddings_override_outer_autocast(bundle): + import torch + + class Head(torch.nn.Module): + def preclassification(self, values): + assert values.dtype == torch.float32 + assert not torch.is_autocast_enabled("cpu") + return torch.nn.functional.normalize(values, dim=-1) + + def forward(self, values): + return [self.preclassification(values)] + + class Model(torch.nn.Module): + _backbone_output_name = "classifier" + + def __init__(self): + super().__init__() + self.backbone = torch.nn.Linear(4, 3) + self.classifier = Head() + + def forward(self, x): + return self.classifier(self.backbone(x)) + + predictor = Predictor(bundle, backend="torch", precision="fp32") + predictor._torch_model = Model().eval() + original = predictor._torch_model.classifier + values = np.ones((2, 4), dtype=np.float32) + with torch.autocast("cpu", dtype=torch.bfloat16): + scores, embeddings = predictor._torch(values, True) + assert scores.dtype == embeddings.dtype == np.float32 + assert predictor._torch_model.classifier is original + np.testing.assert_array_equal(scores, embeddings) + + +@pytest.mark.parametrize("backend", ["torch", "onnx"]) +def test_tta_averages_leaf_logits_before_masking_and_normalizes_embeddings(bundle, monkeypatch, backend): + predictor = Predictor(bundle, backend=backend, tta="hflip", class_list=["a", "c"], batch_size=2, preprocess_workers=1) + seen = [] + + def runtime(images, embeddings, *, tensors=False): + seen.append(images.copy()) + right = images[:, 0, 0, -1] > images[:, 0, 0, 0] + scores = np.array([[4, 9, 0] if x else [0, 1, 6] for x in right], dtype=np.float32) + vectors = np.array([[1, 0] if x else [0, 1] for x in right], dtype=np.float32) + if tensors: + import torch + + scores = [torch.from_numpy(scores)] + return scores, vectors if embeddings else None + + monkeypatch.setattr(predictor, "_" + backend, runtime) + image = np.tile(np.arange(8, dtype=np.uint8), (3, 8, 1)) + result, embedding = predictor.predict_with_embeddings([image] * 3) + assert [len(x) for x in seen] == [2, 2, 1, 1] + np.testing.assert_array_equal(seen[1][0], preprocess(image[..., ::-1])) + np.testing.assert_array_equal(result.raw_logits[0], [[2, 3]] * 3) + np.testing.assert_allclose(embedding, np.full((3, 2), 1 / np.sqrt(2)), rtol=1e-6) + assert result.labels == predictor.predict([image] * 3).labels + assert result.metadata["tta"] == "hflip" + assert result[0].label == ("c", "g1", "f0") + + +def test_tta_rejects_undefined_embedding_and_invalid_options(bundle, monkeypatch): + with pytest.raises(ValueError, match="tta"): + Predictor(bundle, tta="random") + with pytest.raises(ValueError, match="preprocess_workers"): + Predictor(bundle, preprocess_workers=0) + predictor = Predictor(bundle, tta="hflip", threads=2, preprocess_workers=1) + assert predictor.threads == 2 and predictor.preprocess_workers == 1 + monkeypatch.setattr(predictor, "_onnx", lambda x, e: (np.ones((len(x), 3)), np.zeros((len(x), 2)))) + with pytest.raises(RuntimeError, match="undefined mean embedding"): + predictor.predict_with_embeddings(np.zeros((3, 4, 4), dtype=np.uint8)) + + +def test_tta_views_apply_before_the_unchanged_recipe(): + from deployment.mambo_deploy import TTA, View + from deployment.mambo_deploy.augmentation import resolve_tta + + image = np.random.default_rng(31).integers(0, 256, (3, 157, 239), dtype=np.uint8) + views = resolve_tta("five_crop").transforms + np.testing.assert_array_equal(preprocess(views[0](image)), preprocess(image)) + assert len({preprocess(view(image)).tobytes() for view in views}) == 5 + crop = View(crop=(0, 0, 0.5, 1), quarter_turns=1) + assert crop(image).shape == (3, 239, 78) + assert TTA([crop]).transforms == (crop,) + with pytest.raises(ValueError, match="crop"): + View(crop=(0, 0, 0, 1)) + with pytest.raises(ValueError, match="callable"): + TTA([]) + + +@pytest.mark.parametrize(("tta", "views"), [("five_crop", 5), ("ten_crop", 10), ("d4", 8), (True, 3), ("wide_rotation_mixed_padding_5", 5)]) +def test_multicrop_tta_bounds_calls_and_shares_prediction_embedding_path(bundle, monkeypatch, tta, views): + p = Predictor(bundle, tta=tta, batch_size=2, preprocess_workers=2) + observed = [] + + def runtime(x, embeddings): + observed.append(x.copy()) + signal = x.mean(axis=(1, 2, 3)) + return np.stack([signal, signal * 2, -signal], axis=1), np.tile(np.array([1, 0], np.float32), (len(x), 1)) + + monkeypatch.setattr(p, "_onnx", runtime) + images = [np.full((3, 20, 30), 30 + i * 50, np.uint8) for i in range(3)] + result, vectors = p.predict_with_embeddings(images) + assert [len(x) for x in observed] == [2] * views + [1] * views + expected = np.mean([x.mean(axis=(1, 2, 3)) for x in observed[:views]], axis=0) + np.testing.assert_allclose(result.raw_logits[0][:2, 0], expected, rtol=1e-6) + assert result.labels == p.predict(images).labels + np.testing.assert_array_equal(vectors, [[1, 0]] * 3) + + +def test_custom_tta_transforms_are_isolated_and_precede_preprocessing(bundle, monkeypatch): + from deployment.mambo_deploy import TTA, View + + def darken(image): + image[:] = 0 + return image + + p = Predictor(bundle, tta=TTA((darken, View()), name="dark-and-original")) + seen = [] + + def runtime(images, embeddings): + seen.append(images.copy()) + return np.zeros((len(images), 3), dtype=np.float32), None + + monkeypatch.setattr(p, "_onnx", runtime) + source = np.full((3, 7, 11), 255, dtype=np.uint8) + result = p.predict(source) + np.testing.assert_array_equal(source, np.full_like(source, 255)) + np.testing.assert_array_equal(seen[0][0], preprocess(np.zeros_like(source))) + np.testing.assert_array_equal(seen[1][0], preprocess(source)) + assert result.metadata["tta"] == "dark-and-original" + assert result.metadata["tta_views"] == 2 + + +def test_noise_preserves_extent_channels_and_reproducibility(): + from deployment.mambo_deploy import SaltAndPepper + + source = np.full((3, 64, 96), 127, dtype=np.uint8) + noise = SaltAndPepper(proportion=0.2, seed=42) + first = noise(source) + np.testing.assert_array_equal(first, noise(source)) + np.testing.assert_array_equal(first[0], first[1]) + assert first.shape == source.shape and first.dtype == np.uint8 + assert set(np.unique(first)) == {0, 127, 255} + np.testing.assert_array_equal(source, np.full_like(source, 127)) + np.testing.assert_array_equal(SaltAndPepper(proportion=0)(source), source) + assert not np.array_equal(first, SaltAndPepper(proportion=0.2, seed=43)(source)) + with pytest.raises(ValueError, match="proportion"): + SaltAndPepper(proportion=-0.1) + + +@pytest.mark.parametrize( + ("options", "recipe"), [([], None), (["--tta"], "rotation30_pad25_3"), (["--tta", "d4"], "d4"), (["--tta", "none"], None)] +) +def test_cli_tta_optional_recipe(bundle, monkeypatch, options, recipe): + from deployment.mambo_deploy import cli + + class Parsed(Exception): + pass + + def capture(*args, **kwargs): + p = Predictor(*args, **kwargs) + assert (p.tta.name if p.tta else None) == recipe + raise Parsed + + monkeypatch.setattr(cli, "Predictor", capture) + monkeypatch.setattr("sys.argv", ["mambo_predict", "-i", "example.jpg", "--bundle", str(bundle), *options]) + with pytest.raises(Parsed): + cli.run() + + +@pytest.mark.parametrize( + ("option", "settings"), + [ + ("padded_scale", [(0, 0.08), (0, 0.15)]), + (True, [(-30, 0.25), (30, 0.25)]), + ("rotation30_pad25_3", [(-30, 0.25), (30, 0.25)]), + ("wide_rotation_mixed_padding_5", [(-10, 0.15), (10, 0.15), (-30, 0.25), (30, 0.25)]), + ], +) +def test_named_tta_preserves_released_recipe(option, settings): + from deployment.mambo_deploy import EdgePad, RotatePad, View + from deployment.mambo_deploy.augmentation import resolve_tta + + policy = resolve_tta(option) + expected = (View(), *(EdgePad(padding) if degrees == 0 else RotatePad(degrees, padding) for degrees, padding in settings)) + assert policy.transforms == expected + assert policy.name == ("rotation30_pad25_3" if option is True else option) + + +@pytest.mark.parametrize( + "failure", [None, "cudaErrorNoKernelImageForDevice", "cudaErrorInvalidDeviceFunction", "CUDA out of memory", "baseline"] +) +def test_cuda_probe_profiles_and_reuse(bundle, monkeypatch, failure, ort): + p = Predictor(bundle, device="cuda:0") + monkeypatch.setattr(p.bundle, "profile", lambda key: bundle / key) + sessions, calls = [], [] + + def create(path, sess_options, providers): + level = sess_options.graph_optimization_level + sessions.append((path, level)) + + def run(outputs, feed): + calls.append((path, level, len(feed["images"]))) + assert feed["images"].dtype == np.float32 + if failure == "baseline": + raise RuntimeError("cudaErrorNoKernelImageForDevice") + if failure and level == 99: + raise RuntimeError(failure) + return [np.zeros((len(feed["images"]), 3)) for _ in outputs] + + return SimpleNamespace( + run=run, disable_fallback=lambda: None, get_providers=lambda: ["CUDAExecutionProvider", "CPUExecutionProvider"] + ) + + ort.InferenceSession = create + batch = np.zeros((2, 3, 384, 384), dtype=np.float32) + if failure in ("CUDA out of memory", "baseline"): + with pytest.raises(RuntimeError, match="out of memory" if failure != "baseline" else "baseline compatibility"): + p._onnx(batch, False) + assert not p._sessions + assert len(sessions) == (2 if failure == "baseline" else 1) + return + if failure: + with pytest.warns(RuntimeWarning, match="graph optimizations disabled"): + p._onnx(batch, False) + else: + p._onnx(batch, False) + before = len(calls) + p._onnx(batch, False) + assert len(calls) == before + 1 # No second probe on a reused session. + assert [level for _, level in sessions] == ([99, 0] if failure else [99]) + assert p.onnx_session_info["onnx"]["profile"] == ("unoptimized" if failure else "optimized") + assert calls[-1][2] == 2 and calls[0][2] == 1 + if not failure: + p._onnx(batch, True) + assert len(sessions) == 2 + assert "onnx-embedding" in p.onnx_session_info + assert [n for _, _, n in calls[-2:]] == [1, 2] + + +@pytest.mark.parametrize("tta", ["none", "rotation30_pad25_3"]) +@pytest.mark.parametrize("batch_size", [2, 129]) +def test_streaming_api_matches_request(bundle, tmp_path, monkeypatch, tta, batch_size): + from PIL import Image + + predictor = Predictor(bundle, batch_size=batch_size, tta=tta) + + def infer(images, embeddings=False): + values = images.mean(axis=(2, 3)) + return values, values.copy() if embeddings else None + + monkeypatch.setattr(predictor, "_infer", infer) + paths = [] + for i in range(5): + path = tmp_path / f"stream-{i}.png" + Image.fromarray(np.random.default_rng(i).integers(0, 256, (23, 29, 3), dtype=np.uint8)).save(path) + paths.append(path) + expected, vectors = predictor.predict_with_embeddings(paths) + observed = list(predictor.predict_stream(iter(paths), embeddings=True, read_workers=8, prepare_workers=3)) + np.testing.assert_array_equal(np.concatenate([v for _, v in observed]), vectors) + np.testing.assert_array_equal(np.concatenate([r.indices for r, _ in observed]), expected.indices) + np.testing.assert_array_equal(np.concatenate([r.confidence for r, _ in observed]), expected.confidence) + assert [len(result) for result, _ in observed] == [min(batch_size, len(paths) - start) for start in range(0, len(paths), batch_size)] + with pytest.raises(ValueError, match="read_window must cover"): + list(predictor.predict_stream(paths, read_window=1)) + + +@pytest.mark.parametrize("topk", [1, 2]) +@pytest.mark.parametrize( + "raw", + [ + pytest.param([[2, 2, -1], [-3, -3, -3], [0, 2, 1]], id="finite"), + pytest.param([[1, np.nan, 2], [np.nan, np.nan, np.nan], [np.inf, 2, -np.inf]], id="nonfinite"), + ], +) +def test_prediction_preserves_stable_ties_and_nonfinite_order(topk, raw): + raw = np.array(raw, dtype=np.float32) + with np.errstate(invalid="ignore"): + result = Prediction([raw] * 3, [["a", "b", "c"]] * 3, [np.arange(3)] * 3, topk) + expected = np.argsort(-raw, axis=1, kind="stable")[:, :topk] + np.testing.assert_array_equal(result.indices, np.stack([expected] * 3, axis=-1)) + np.testing.assert_array_equal(np.isnan(result.confidence).any(axis=(1, 2)), ~np.isfinite(raw).all(axis=1)) + + +@pytest.mark.parametrize("selected", [[0, 1, 2], [0, 2], [1]]) +def test_batched_hierarchy_matches_original_and_torch(selected): + import torch + + from deployment.mambo_deploy.results import HierarchyPlan + + leaves = np.random.default_rng(9).normal(size=(256, 3)).astype(np.float32) * 100 + plan = HierarchyPlan(selected, CLASSES) + actual = plan.numpy(leaves)[0] + expected = [leaves[:, selected]] + for inverse, _, _ in plan.groups: + grouped = np.full((len(leaves), int(inverse.max()) + 1), -np.inf, dtype=np.float32) + for row in range(len(leaves)): + np.logaddexp.at(grouped[row], inverse, expected[-1][row]) + expected.append(grouped) + native = plan.torch(torch.from_numpy(leaves))[0] + for a, b, c in zip(actual, expected, native, strict=True): + np.testing.assert_allclose(a, b, atol=3e-5, rtol=1e-6) + np.testing.assert_allclose(a, c, atol=3e-5, rtol=1e-6) + + +def test_global_native_ranks_are_reused(monkeypatch): + import torch + + from deployment.mambo_deploy.results import HierarchyPlan + from mini_trainer.hierarchical import utils + + plan = HierarchyPlan([0, 1, 2], CLASSES) + native = [torch.ones((2, n)) for n in (3, 2, 1)] + + def fail(*args, **kwargs): + pytest.fail("Global hierarchy should not be recomputed") + + monkeypatch.setattr(utils, "batched_scatter_logsumexp", fail) + raw, _, _ = plan.torch(native[0], native) + for values, tensor in zip(raw, native, strict=True): + np.testing.assert_array_equal(values, tensor.numpy()) + + +@pytest.mark.parametrize("device", ["cpu", "cuda:0"]) +def test_native_batched_preprocessing_matches_release_geometry(device): + import torch + + from deployment.mambo_deploy.preprocessing import TorchPreprocess, prepare_batch + + if device != "cpu" and not torch.cuda.is_available(): + pytest.skip("Intentional CUDA test; set CUDA_VISIBLE_DEVICES") + source = [ + np.random.default_rng(i).integers(0, 256, size=(3, height, width), dtype=np.uint8) + for i, (height, width) in enumerate(((73, 125), (2048, 3072), (3072, 1024))) + ] + compact = prepare_batch(source, compact=True) + assert compact.dtype == np.uint8 + tensor = TorchPreprocess(torch, device)(torch.from_numpy(compact).to(device)) + assert tensor.is_contiguous() + actual = tensor.cpu().numpy() + expected = prepare_batch(source) + error = np.abs(actual - expected) * np.array(RECIPE["std"])[None, :, None, None] * 255 + assert error.max() <= 1.001 + assert error.mean() < 0.001 + np.testing.assert_array_equal(compact, prepare_batch(source, compact=True)) + + +@pytest.mark.parametrize("compact", [False, True]) +def test_virtual_tta_padding_matches_materialized_pixels(compact): + from deployment.mambo_deploy.augmentation import EdgePad, RotatePad, View, _prepare_view + from deployment.mambo_deploy.preprocessing import prepare_uint8 + + prepare = prepare_uint8 if compact else preprocess + for shape in [(3, 1, 7), (3, 51, 83), (3, 1025, 1537)]: + image = np.random.default_rng(31).integers(0, 256, size=shape, dtype=np.uint8) + original = image.copy() + for transform in [View(), EdgePad(0), EdgePad(0.25), RotatePad(-30), RotatePad(30, 0.15)]: + if isinstance(transform, RotatePad): + from PIL import Image + + rotated = Image.fromarray(image.transpose(1, 2, 0)).rotate( + transform.degrees, resample=Image.Resampling.BILINEAR, expand=True, fillcolor=(124, 116, 104) + ) + expected = prepare(EdgePad(transform.padding)(np.asarray(rotated).transpose(2, 0, 1))) + else: + expected = prepare(transform(image.copy())) + target = np.empty_like(expected) + actual = _prepare_view(image, transform, out=target, compact=compact) + assert actual is target + np.testing.assert_array_equal(actual, expected) + np.testing.assert_array_equal(image, original) + + +def test_builtin_subclass_keeps_custom_transform_copy_isolation(): + from deployment.mambo_deploy.augmentation import View, _prepare_view + + class MutatingView(View): + def __call__(self, image): + image.fill(0) + return image + + image = np.full((3, 9, 11), 255, dtype=np.uint8) + actual = _prepare_view(image, MutatingView(), compact=True) + assert not actual.any() + assert (image == 255).all() + + +@pytest.mark.parametrize("format", ["JPEG", "PNG", "TIFF"]) +def test_native_decode_matches_portable_inputs(tmp_path, format): + import io + + import torch + from PIL import Image + + from deployment.mambo_deploy.preprocessing import TorchDecode, _rgb + + decode = TorchDecode(torch) + source = np.random.default_rng(12).integers(0, 256, (113, 179, 3), dtype=np.uint8) + for image in [Image.fromarray(source), Image.fromarray(source[..., 0])]: + encoded = io.BytesIO() + image.save(encoded, format=format) + data = encoded.getvalue() + path = tmp_path / ("image." + format.lower()) + path.write_bytes(data) + expected = _rgb(data) + np.testing.assert_array_equal(decode(data), expected) + np.testing.assert_array_equal(decode(path), expected) + np.testing.assert_array_equal(decode(image), expected if format != "JPEG" else _rgb(image)) + np.testing.assert_array_equal(decode(source.transpose(2, 0, 1)), source.transpose(2, 0, 1)) + + +def test_native_decode_preserves_high_bit_depth_png_conversion(): + import io + + import torch + from PIL import Image + + from deployment.mambo_deploy.preprocessing import TorchDecode, _rgb + + source = np.array([[0, 128, 255, 256, 32768, 65535]], dtype=np.uint16) + encoded = io.BytesIO() + Image.fromarray(source).save(encoded, format="PNG") + data = encoded.getvalue() + np.testing.assert_array_equal(TorchDecode(torch)(data), _rgb(data)) + + +def test_square_gather_preserves_pixels_across_decoded_and_strided_layouts(): + from deployment.mambo_deploy.preprocessing import prepare_uint8 + + for height, width in [(73, 127), (511, 769)]: + decoded = np.random.default_rng(81).integers(0, 256, (height, width, 3), dtype=np.uint8).transpose(2, 0, 1) + for image in [decoded, np.ascontiguousarray(decoded), decoded[..., ::-1], decoded.transpose(0, 2, 1)]: + for padding in [0, 0.25]: + h, w = image.shape[1:] + py, px = int(np.ceil(h * padding)), int(np.ceil(w * padding)) + grid = np.arange(384, dtype=np.float32) + y = np.clip((grid * np.float32((h + 2 * py) / 384)).astype(np.intp) - py, 0, h - 1) + x = np.clip((grid * np.float32((w + 2 * px) / 384)).astype(np.intp) - px, 0, w - 1) + expected = image[:, y[:, None], x[None, :]] + target = np.empty((3, 384, 384), dtype=np.uint8) + assert prepare_uint8(image, out=target, padding=padding) is target + np.testing.assert_array_equal(target, expected) + + +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_cpu_interpolation_retains_reference_pixels_in_caller_storage(dtype): + from deployment.mambo_deploy import preprocessing as p + + image = np.random.default_rng(915).integers(0, 256, (3, 275, 403), dtype=np.uint8) + square = np.ascontiguousarray(p._square(image, padding=0.25), dtype=np.float32) + rows = square[:, p._LO] * (1 - p._FRACTION)[None, :, None] + square[:, p._HI] * p._FRACTION[None, :, None] + pixels = rows[:, :, p._LO] * (1 - p._FRACTION)[None, None, :] + rows[:, :, p._HI] * p._FRACTION[None, None, :] + expected = np.rint(pixels).astype(dtype) + expected /= 255 + expected -= p._MEAN + expected /= p._STD + # A view into caller-owned batch storage must also work. + out = np.empty((3, 384, 768), dtype=dtype)[:, :, ::2] + assert preprocess(image, out=out, padding=0.25) is out + np.testing.assert_array_equal(out, expected) + + +def test_default_scope_is_global_including_legacy_facade(bundle, monkeypatch): + assert Predictor(bundle).tta is None and Predictor(bundle, tta=False).tta is None + + from mini_trainer import deploy + + monkeypatch.setattr(deploy, "_runtime", lambda: Predictor) + for predictor in (Predictor(bundle), deploy.Predictor(device="cpu", bundle=bundle)._predictor): + assert predictor.preset == "full" + assert predictor.class_list == ["a", "b", "c"] + assert Predictor(bundle, model="europe").class_list == ["a", "b"] + + +@pytest.mark.parametrize("embeddings", [False, True]) +def test_cli_streams_ordered_results_and_publishes_only_complete_output(bundle, tmp_path, monkeypatch, embeddings): + import csv + + from deployment.mambo_deploy import cli + + paths = [tmp_path / "a" / f"{i}.jpg" for i in range(3)] + closed = [] + fail = [False] + + def batches(items, **kwargs): + assert items == paths + assert kwargs == {"topk": 1, "embeddings": embeddings} + try: + for start, size in ((0, 2), (2, 1)): + if fail[0] and start: + raise ValueError("decode failed") + raw, labels, indices = hierarchy(np.tile([3.0, 2.0, 1.0], (size, 1)), [0, 1, 2], CLASSES) + result = Prediction(raw, labels, indices, model_id="fixture", preset="full") + yield (result, np.full((size, 1280), start, dtype=np.float32)) if embeddings else result + finally: + closed.append(True) + + predictor = SimpleNamespace(bundle=SimpleNamespace(classes=CLASSES), predict_stream=batches) + monkeypatch.setattr(cli, "Predictor", lambda *args, **kwargs: predictor) + argv = ["mambo_predict", "-i", *map(str, paths), "-o", str(tmp_path), "--name", "success"] + if embeddings: + argv.append("--embeddings") + monkeypatch.setattr(sys, "argv", argv) + cli.run() + records = json.loads((tmp_path / "success/predictions.json").read_text()) + assert len(records["results"]) == 3 and records["metadata"]["preset"] == "full" + with (tmp_path / "success/mini_metric.csv").open() as stream: + rows = list(csv.DictReader(stream)) + assert [r["filename"] for r in rows[::3]] == list(map(str, paths)) + assert [r["instance_id"] for r in rows[::3]] == ["0", "1", "2"] + assert all(r["correct"] == "1" for r in rows) + if embeddings: + vectors = np.load(tmp_path / "success/embeddings.npy") + assert vectors.shape == (3, 1280) and vectors.dtype == np.float32 + np.testing.assert_array_equal(vectors[:, 0], [0, 0, 2]) + argv[argv.index("success")] = "failed" + fail[0] = True + with pytest.raises(ValueError, match="decode failed"): + cli.run() + assert not (tmp_path / "failed").exists() + assert not list(tmp_path.glob(".mambo-results-*")) + assert len(closed) == 2 + + +def test_reconfigure_keeps_runtime_and_rejects_invalid_state(bundle): + predictor = Predictor(bundle) + session = object() + predictor._sessions["onnx"] = session + predictor.configure(model="europe", tta=True) + assert predictor.class_list == ["a", "b"] and predictor.tta is not None + predictor.configure(class_list=["c"]) + assert predictor.preset == "custom" and predictor.class_list == ["c"] + assert predictor.tta is not None and predictor._sessions["onnx"] is session + with pytest.raises(ValueError, match="Unknown species"): + predictor.configure(class_list=["missing"], tta=False) + assert predictor.class_list == ["c"] and predictor.tta is not None + predictor.configure(model="full", tta=False) + assert predictor.class_list == ["a", "b", "c"] and predictor.tta is None + assert predictor._sessions["onnx"] is session diff --git a/tests/releases/test_gpu_ceiling.py b/tests/releases/test_gpu_ceiling.py new file mode 100644 index 0000000..23899e7 --- /dev/null +++ b/tests/releases/test_gpu_ceiling.py @@ -0,0 +1,32 @@ +from types import SimpleNamespace + +import pytest +import torch + +from dev.releases.mambo_v3.gpu_ceiling import resident_call + + +@pytest.mark.parametrize("device", ["cpu", "cuda:0"]) +def test_resident_call_cycles_bank_and_keeps_native_ranks(device): + if device != "cpu" and not torch.cuda.is_available(): + pytest.skip("Intentional CUDA check") + bank = torch.arange(8, dtype=torch.uint8, device=device).reshape(8, 1, 1, 1) + events = [] + seen = [] + + def infer(images, embeddings, *, tensors): + assert tensors and not embeddings and images.device == bank.device + seen.append(images) + events.append(object()) + return [images.float().flatten(1) + rank for rank in range(3)], None + + plan = SimpleNamespace(torch_values=lambda leaf, native: (native, None, None)) + predictor = SimpleNamespace(_torch=infer, _model_events=events, selected=None, hierarchy_plan=lambda selected: plan) + call = resident_call(predictor, bank, 4) + for i in range(5): + values = call() + assert not events + assert len(values) == 3 and all(v.device == bank.device for v in values) + expected = bank[(i % 2) * 4 : (i % 2 + 1) * 4] + torch.testing.assert_close(values[0], expected.float().flatten(1)) + assert seen[-1].data_ptr() == expected.data_ptr() diff --git a/tests/releases/test_hash_images.py b/tests/releases/test_hash_images.py new file mode 100644 index 0000000..9c72767 --- /dev/null +++ b/tests/releases/test_hash_images.py @@ -0,0 +1,69 @@ +"""Concurrent cold reads retain serial hashes and resumable input identity.""" + +import hashlib +import threading + +import pytest + +from dev.releases.mambo_v3 import hash_images as module + + +def inputs(root, count=12): + records = [] + for i in range(count): + path = root / f"{i}.jpg" + path.write_bytes(f"image {i}".encode()) + records.append({"path": path.name, "labels": ["species", "genus", "family"]}) + return records + + +def test_concurrent_reads_preserve_hashes_order_and_resume(tmp_path, monkeypatch): + records = inputs(tmp_path) + original = module.file_hash + barrier = threading.Barrier(4) + lock = threading.Lock() + calls = [] + + def read(path): + with lock: + calls.append(path) + first = len(calls) <= 4 + if first: + barrier.wait(timeout=5) # A serial implementation cannot complete this. + return original(path) + + monkeypatch.setattr(module, "file_hash", read) + checkpoint = tmp_path / "hashes.sqlite3" + module.hash_images(records, tmp_path, checkpoint, {"snapshot": "original"}, workers=4) + assert len(calls) == 12 + assert [r["sha256"] for r in records] == [hashlib.sha256(f"image {i}".encode()).hexdigest() for i in range(12)] + fresh = [{k: v for k, v in r.items() if k != "sha256"} for r in records] + monkeypatch.setattr(module, "file_hash", lambda path: pytest.fail("Unchanged cached file was reread")) + module.hash_images(fresh, tmp_path, checkpoint, {"snapshot": "original"}, workers=4) + assert fresh == records + (tmp_path / "0.jpg").write_bytes(b"changed image bytes") + monkeypatch.setattr(module, "file_hash", original) + fresh = [{k: v for k, v in r.items() if k != "sha256"} for r in records] + module.hash_images(fresh, tmp_path, checkpoint, {"snapshot": "original"}, workers=4) + assert fresh[0]["sha256"] == original(tmp_path / "0.jpg") + with pytest.raises(ValueError, match="different inputs"): + module.hash_images([], tmp_path, checkpoint, {"snapshot": "other"}, workers=4) + + +def test_failure_saves_completed_hashes_and_rejects_unsafe_paths(tmp_path): + records = inputs(tmp_path) + (tmp_path / "5.jpg").unlink() + checkpoint = tmp_path / "hashes.sqlite3" + with pytest.raises(FileNotFoundError): + module.hash_images(records, tmp_path, checkpoint, {}, workers=1) + import sqlite3 + + with sqlite3.connect(checkpoint) as connection: + assert connection.execute("SELECT COUNT(*) FROM hashes").fetchone()[0] > 0 + with pytest.raises(ValueError, match="Unsafe"): + module.hash_images([{"path": "../escape.jpg"}], tmp_path, tmp_path / "unsafe.sqlite3", {}, workers=1) + + +def test_default_readers_use_allocated_cpu_affinity(monkeypatch): + monkeypatch.setattr(module.os, "sched_getaffinity", lambda pid: set(range(48))) + assert module.default_workers() == 96 diff --git a/tests/releases/test_legacy_evaluation.py b/tests/releases/test_legacy_evaluation.py new file mode 100644 index 0000000..df563b9 --- /dev/null +++ b/tests/releases/test_legacy_evaluation.py @@ -0,0 +1,33 @@ +"""Historical release comparisons must not silently use different code or weights.""" + +from pathlib import Path + +import pytest +import torch + +from dev.releases.mambo_v3 import legacy_evaluation as legacy + + +def test_legacy_source_rejects_modified_file(tmp_path, monkeypatch): + name = "mini_trainer/deploy.py" + (tmp_path / name).parent.mkdir() + (tmp_path / name).write_bytes(b"changed") + monkeypatch.setattr(legacy.subprocess, "check_output", lambda command, **kwargs: name + "\n" if "ls-tree" in command else b"original") + with pytest.raises(ValueError, match="Changed legacy source"): + legacy.verify_source(tmp_path) + + +def test_shared_heads_allow_masks_but_reject_changed_parameters(monkeypatch): + states = { + legacy.FILENAMES["full"]: {"weight": torch.tensor([1.0])}, + legacy.FILENAMES["europe"]: {"weight": torch.tensor([1.0]), "classifier.active_indices": torch.tensor([0])}, + legacy.FILENAMES["north_europe"]: {"weight": torch.tensor([1.0]), "classifier.active_indices": torch.tensor([0])}, + } + monkeypatch.setattr(legacy, "file_hash", lambda path: "verified") + monkeypatch.setattr(legacy.tomllib, "loads", lambda text: {"artifacts": [{"path": name, "sha256": "verified"} for name in states]}) + monkeypatch.setattr(torch, "load", lambda path, **kwargs: states[path.name]) + loaded, _ = legacy.load_states(Path("unused")) + assert len(loaded) == 3 + states[legacy.FILENAMES["europe"]]["weight"] = torch.tensor([2.0]) + with pytest.raises(ValueError, match="Learned legacy parameters differ"): + legacy.load_states(Path("unused")) diff --git a/tests/releases/test_mambo_inventory.py b/tests/releases/test_mambo_inventory.py new file mode 100644 index 0000000..2f33757 --- /dev/null +++ b/tests/releases/test_mambo_inventory.py @@ -0,0 +1,34 @@ +"""Failure-mode coverage for the release input audit, without downloaded weights.""" + +import hashlib + +import pytest +import torch + +from dev.releases.mambo_v3.audit import recover_preset, verify_files + + +def test_integrity_rejects_same_size_corruption(tmp_path): + path = tmp_path / "model" + path.write_bytes(b"good") + inventory = {"artifacts": [{"path": "model", "size": 4, "sha256": hashlib.sha256(b"good").hexdigest()}]} + verify_files(tmp_path, inventory) + path.write_bytes(b"evil") + with pytest.raises(ValueError, match="integrity mismatch"): + verify_files(tmp_path, inventory) + + +def test_integrity_rejects_escape(tmp_path): + with pytest.raises(ValueError, match="escapes"): + verify_files(tmp_path, {"artifacts": [{"path": "../outside"}]}) + + +def test_preset_uses_explicit_indices_not_mapping_insertion_order(): + state = { + "classifier._extra_state": {"cls2idx": {"0": {"species-c": 2, "species-a": 0, "species-b": 1}}}, + "classifier.active_indices": torch.tensor([1, 0]), + } + assert recover_preset(state) == ["species-b", "species-a"] + state["classifier.active_indices"] = torch.tensor([1, 1]) + with pytest.raises(ValueError, match="Duplicate"): + recover_preset(state) diff --git a/tests/releases/test_mambo_presets.py b/tests/releases/test_mambo_presets.py new file mode 100644 index 0000000..ef42563 --- /dev/null +++ b/tests/releases/test_mambo_presets.py @@ -0,0 +1,182 @@ +"""Legacy reconstruction and deliberately overlapping deployment region contracts.""" + +import tomllib + +import pytest + +from dev.releases.mambo_v3.audit import HERE +from dev.releases.mambo_v3.build_presets import ordered_membership, select_region +from dev.releases.mambo_v3.reconstruct_presets import membership, region_counts + +pa = pytest.importorskip("pyarrow") +DEFINITIONS = tomllib.loads((HERE / "preset-definitions.toml").read_text()) +RULES = DEFINITIONS["presets"] + + +def test_continent_is_not_inferred_from_country_and_threshold_is_strict(): + table = pa.table( + { + "speciesKey": ["continental"] * 26 + ["boundary"] * 25 + ["island"] * 30, + "countryCode": ["ES"] * 81, + "continent": ["EUROPE"] * 51 + ["AFRICA"] * 30, + } + ) + counts = region_counts(table, "continent", ["EUROPE"]) + assert counts == {"continental": 26, "boundary": 25} + assert membership(counts, 25) == {"continental"} + assert membership(region_counts(table, "countryCode", ["ES"]), 25) == {"continental", "island"} + + +def test_country_union_counts_rows_across_splits_without_deduplication(): + table = pa.table( + { + "speciesKey": ["shared", "shared", "shared", "outside"], + "countryCode": ["DE", "NL", "DE", "GB"], + "set": ["0", "1", "1", "0"], + "gbifID": ["same", "other", "same", "third"], + } + ) + assert region_counts(table, "countryCode", ["DE", "NL"]) == {"shared": 3} + + +def test_missing_species_identity_fails(): + table = pa.table({"speciesKey": pa.array([None], type=pa.string()), "countryCode": ["DE"]}) + with pytest.raises(ValueError, match="null species"): + region_counts(table, "countryCode", ["DE"]) + + +@pytest.mark.parametrize("legacy", ["europe", "north_europe"]) +def test_updated_european_lists_preserve_geography_and_legacy_membership(legacy): + updated = f"{legacy}_v3" + descriptive = {"label", "scope", "minimum_regional_rows", "minimum_global_rows"} + assert {k: v for k, v in RULES[legacy].items() if k not in descriptive} == { + k: v for k, v in RULES[updated].items() if k not in descriptive + } + assert RULES[updated].get("minimum_regional_rows", DEFINITIONS["minimum_regional_rows"]) == 3 + assert RULES[updated].get("minimum_global_rows", DEFINITIONS["minimum_global_rows"]) == 25 + old = (HERE / "presets" / f"{legacy}.classes").read_text().splitlines() + new = (HERE / "presets" / f"{updated}.classes").read_text().splitlines() + old_members = set(old) + assert old_members < set(new) + assert [label for label in new if label in old_members] == old + changes = tomllib.loads((HERE / "preset-updates.toml").read_text())["updates"][updated] + assert changes["added"] == [label for label in new if label not in old_members] + assert changes["removed"] == [] + + +def countries_selected(name, countries): + table = pa.table({"countryCode": countries, "continent": [""] * len(countries)}) + return select_region(table, RULES[name])["countryCode"].to_pylist() + + +def test_american_regions_intentionally_overlap(): + countries = ["MX", "CR", "PA", "CA", "BR"] + assert countries_selected("north_america", countries) == ["MX", "CA"] + assert countries_selected("central_america", countries) == ["MX", "CR", "PA"] + assert countries_selected("south_america", countries) == ["CR", "PA", "BR"] + + +def test_tasmania_is_australian_state_not_endemism_filter(): + table = pa.table( + { + "countryCode": ["AU", "AU", "AU", "AU", "NZ"], + "stateProvince": ["Tasmania", "Victoria", "", None, "Tasmania"], + "speciesKey": ["widespread"] * 5, + } + ) + assert select_region(table, RULES["australia"]).num_rows == 4 + selected = select_region(table, RULES["tasmania"]) + assert selected.num_rows == 1 + assert selected["speciesKey"].to_pylist() == ["widespread"] + + +def test_union_does_not_duplicate_rows_and_exclusion_overrides_continent(): + table = pa.table({"countryCode": ["ZA", "EG", "SD", ""], "continent": ["AFRICA", "AFRICA", "", None]}) + assert select_region(table, RULES["africa"]).num_rows == 3 + assert select_region(table, RULES["subsaharan_africa"])["countryCode"].to_pylist() == ["ZA", "SD"] + + +def test_membership_preserves_model_order_and_rejects_unknown_species(): + assert ordered_membership({"a": 26, "b": 25, "c": 80}, 26, ["c", "b", "a"]) == ["c", "a"] + assert ordered_membership({"a": 1, "b": 0}, 1, ["b", "a"]) == ["a"] + with pytest.raises(ValueError, match="missing from model"): + ordered_membership({"unknown": 26}, 25, ["a"]) + + +def test_qualification_requires_both_inclusive_minima(): + regional = {"boundary": 3, "few_local": 2, "few_global": 10, "strong": 5, "missing": 3} + worldwide = {"boundary": 25, "few_local": 100, "few_global": 24, "strong": 50} + vocabulary = ["strong", "boundary", "few_local", "few_global", "missing"] + assert ordered_membership(regional, 3, vocabulary, worldwide, 25) == ["strong", "boundary"] + with pytest.raises(ValueError, match="requires global counts"): + ordered_membership(regional, 3, vocabulary, global_minimum=25) + + +def test_misspelled_or_empty_filter_fails_closed(): + table = pa.table({"countryCode": ["AU"]}) + with pytest.raises(ValueError, match="Unknown region fields"): + select_region(table, {"countries": ["AU"], "state_provinc": ["Tasmania"]}) + with pytest.raises(ValueError, match="requires countries, continents or minimum_latitude"): + select_region(table, {}) + + +def test_asia_excludes_cyprus_even_when_continent_matches(): + table = pa.table({"countryCode": ["CY", "JP", "TR"], "continent": ["ASIA", "ASIA", "EUROPE"]}) + assert select_region(table, RULES["asia"])["countryCode"].to_pylist() == ["JP", "TR"] + + +def test_arctic_uses_inclusive_latitude_independent_of_country_or_state(): + table = pa.table( + { + "countryCode": ["US", "US", "RU", "CA", "", "NO"], + "stateProvince": ["Alaska", "Alaska", "", "", "", ""], + "decimalLatitude": ["59.99", "60", "61.5", "90", " 6e1 ", "59"], + } + ) + assert select_region(table, RULES["arctic"])["decimalLatitude"].to_pylist() == ["60", "61.5", "90", " 6e1 "] + + +def test_arctic_excludes_missing_invalid_and_southern_latitudes(): + table = pa.table({"decimalLatitude": [None, "", "bad", "NaN", "inf", "91", "-91", "-60", "1e999"]}) + assert select_region(table, RULES["arctic"]).num_rows == 0 + + +def test_overlap_distinguishes_containment_from_similarity(): + from dev.releases.mambo_v3.plot_overlap import overlap + + assert overlap({"a"}, {"a", "b", "c", "d"}) == (1, 0.25, 1.0) + assert overlap({"a", "b", "c", "d"}, {"a"}) == (1, 0.25, 0.25) + assert overlap({"a"}, {"b"}) == (0, 0.0, 0.0) + + +def test_other_oceania_excludes_records_not_shared_species(): + table = pa.table( + { + "countryCode": ["AU", "NZ", "FJ", "PG", "CK", "MG"], + "continent": ["OCEANIA", "OCEANIA", "OCEANIA", "", "OCEANIA", "AFRICA"], + "speciesKey": ["shared"] * 6, + } + ) + selected = select_region(table, RULES["oceania_excluding_australia_nz"]) + assert selected["countryCode"].to_pylist() == ["FJ", "PG", "CK"] + assert selected["speciesKey"].to_pylist() == ["shared"] * 3 + assert select_region(table, RULES["new_zealand"])["countryCode"].to_pylist() == ["NZ"] + assert select_region(table, RULES["madagascar"])["countryCode"].to_pylist() == ["MG"] + + +def test_northern_africa_intentionally_overlaps_subsaharan_transition(): + countries = ["MA", "EG", "SD", "MR", "ZA", "MG"] + assert countries_selected("north_africa", countries) == ["MA", "EG", "SD", "MR"] + assert countries_selected("subsaharan_africa", countries) == ["SD", "MR", "ZA", "MG"] + + +@pytest.mark.parametrize("preset", ["asia", "east_asia"]) +def test_russian_contribution_requires_asian_continent(preset): + table = pa.table( + { + "countryCode": ["RU", "RU", "RU", "RU", "JP"], + "continent": ["ASIA", "EUROPE", "", None, ""], + "speciesKey": ["asian_russia", "european_russia", "blank", "null", "japan"], + } + ) + assert select_region(table, RULES[preset])["speciesKey"].to_pylist() == ["asian_russia", "japan"] diff --git a/tests/releases/test_publication.py b/tests/releases/test_publication.py new file mode 100644 index 0000000..b864b5f --- /dev/null +++ b/tests/releases/test_publication.py @@ -0,0 +1,77 @@ +"""Publication must reject changed bytes and must not repeat immutable Hub uploads.""" + +import json +import sys +from types import SimpleNamespace + +import pytest + +from dev.releases.mambo_v3.prepare_candidate import digest +from dev.releases.mambo_v3.publish_assets import hub, verified_payload + + +@pytest.fixture +def payload(tmp_path): + (tmp_path / "README.md").write_text("Public model card") + data = { + "source_commit": "a" * 40, + "package_version": "0.3.0", + "model_id": "MAMBO_v3", + "files": {"README.md": digest(tmp_path / "README.md")}, + } + (tmp_path / "publication.json").write_text(json.dumps(data)) + return tmp_path + + +def test_modified_or_uninventoried_file_cannot_be_published(payload): + verified_payload(payload) + (payload / "README.md").write_text("Unreviewed change") + with pytest.raises(ValueError, match="integrity"): + verified_payload(payload) + (payload / "private.txt").write_text("Not a release input") + with pytest.raises(ValueError, match="file set"): + verified_payload(payload) + + +def test_hub_retry_checks_identity_without_reupload(payload, monkeypatch, tmp_path): + remote = tmp_path / "remote.json" + remote.write_bytes((payload / "publication.json").read_bytes()) + # Keep simulated remote state outside the local publication inventory. + remote_state = remote.read_text() + remote.unlink() + calls = [] + api = SimpleNamespace( + token="unused", + list_repo_refs=lambda *a, **kw: SimpleNamespace(tags=[SimpleNamespace(name="v0.3.0")]), + upload_folder=lambda **kw: calls.append(kw), + create_tag=lambda **kw: calls.append(kw), + ) + + def download(*a, **kw): + destination = tmp_path.parent / f"{tmp_path.name}-remote.json" + destination.write_text(remote_state) + return str(destination) + + monkeypatch.setenv("HF_TOKEN", "unused") + monkeypatch.setitem(sys.modules, "huggingface_hub", SimpleNamespace(HfApi=lambda **kw: api, hf_hub_download=download)) + hub(payload, "owner/model", "model") + assert calls == [] + remote_state = json.dumps({"different": "release"}) + with pytest.raises(ValueError, match="Refusing to replace"): + hub(payload, "owner/model", "model") + assert calls == [] + + +def test_hub_tags_exact_uploaded_commit(payload, monkeypatch): + calls = [] + api = SimpleNamespace( + token="unused", + list_repo_refs=lambda *a, **kw: SimpleNamespace(tags=[]), + upload_folder=lambda **kw: SimpleNamespace(oid="reviewed-upload-commit"), + create_tag=lambda **kw: calls.append(kw), + ) + monkeypatch.setenv("HF_TOKEN", "unused") + monkeypatch.setitem(sys.modules, "huggingface_hub", SimpleNamespace(HfApi=lambda **kw: api, hf_hub_download=None)) + hub(payload, "owner/model", "model") + assert calls[0]["revision"] == "reviewed-upload-commit" + assert calls[0]["tag"] == "v0.3.0" diff --git a/tests/releases/test_release_download.py b/tests/releases/test_release_download.py new file mode 100644 index 0000000..0c3675a --- /dev/null +++ b/tests/releases/test_release_download.py @@ -0,0 +1,109 @@ +"""Verified automatic model caching, offline behavior and local-bundle isolation.""" + +import hashlib +import io +import json +from pathlib import Path + +import pytest + +from deployment.mambo_deploy import download +from deployment.mambo_deploy.bundle import Bundle + + +def test_download_publishes_only_verified_bytes_and_reuses_cache(tmp_path, monkeypatch): + payload = b"model bytes" + calls = [] + + def get(url, timeout): + calls.append(url) + return io.BytesIO(payload) + + monkeypatch.setattr(download, "urlopen", get) + target = tmp_path / "weights" + args = dict(size=len(payload), sha256=hashlib.sha256(payload).hexdigest()) + download.fetch_file("https://example.test/weights", target, **args) + download.fetch_file("https://example.test/weights", target, **args, offline=True) + assert target.read_bytes() == payload and len(calls) == 1 + target.write_bytes(b"changed") + with pytest.raises(ValueError, match="integrity"): + download.fetch_file("https://example.test/weights", target, **args) + assert len(calls) == 1 + + +@pytest.mark.parametrize("payload", [b"short", b"bad-data", b"too-long-data"]) +def test_failed_download_never_leaves_a_completed_file(tmp_path, monkeypatch, payload): + monkeypatch.setattr(download, "urlopen", lambda *a, **k: io.BytesIO(payload)) + with pytest.raises(ValueError): + download.fetch_file("https://example.test/weights", tmp_path / "model", size=8, sha256=hashlib.sha256(b"expected").hexdigest()) + assert list(tmp_path.iterdir()) == [] + + +def test_offline_missing_cache_does_not_connect(tmp_path, monkeypatch): + monkeypatch.setattr(download, "urlopen", lambda *a, **k: pytest.fail("network used")) + with pytest.raises(FileNotFoundError, match="not cached"): + download.fetch_file("https://example.test/weights", tmp_path / "model", size=0, sha256="0" * 64, offline=True) + + +def test_packaged_metadata_and_automatic_predictor(tmp_path, monkeypatch): + from deployment.mambo_deploy import Predictor + + monkeypatch.delenv("MAMBO_BUNDLE", raising=False) + monkeypatch.delenv("MAMBO_OFFLINE", raising=False) + monkeypatch.setenv("MAMBO_CACHE", str(tmp_path)) + monkeypatch.setattr(download, "urlopen", lambda *a, **k: pytest.fail("metadata should be packaged")) + p = Predictor() + assert p.bundle.download and p.preset == "full" + monkeypatch.setenv("MAMBO_OFFLINE", "1") + assert Predictor().bundle.root == p.bundle.root + with pytest.raises(FileNotFoundError, match="not cached"): + p.bundle.profile("onnx") + explicit = Predictor(bundle=p.bundle.root) + assert not explicit.bundle.download + with pytest.raises(FileNotFoundError): + explicit.bundle.profile("onnx") + manifest = json.loads((p.bundle.root / "release.json").read_text()) + for relative in manifest["files"]: + if relative not in manifest["origins"]: + Bundle(p.bundle.root).file(relative) + assert Path(download.__file__).with_name("default_bundle.json").exists() + + +@pytest.mark.parametrize("hardlink", [True, False]) +def test_weight_bytes_survive_metadata_revision_offline(tmp_path, monkeypatch, hardlink): + payload = b"same immutable model" + calls = [] + + def get(*args, **kwargs): + calls.append(True) + return io.BytesIO(payload) + + monkeypatch.setattr(download, "urlopen", get) + if not hardlink: + + def deny_link(*args): + raise OSError("cross-filesystem") + + monkeypatch.setattr(download.os, "link", deny_link) + args = dict(cache=tmp_path, size=len(payload), sha256=hashlib.sha256(payload).hexdigest()) + first = tmp_path / "revision-1/models/model.onnx.data" + second = tmp_path / "revision-2/models/model.onnx.data" + download.cached_model_file("https://example.test/model", first, **args) + download.cached_model_file("https://example.test/model", second, **args, offline=True) + assert first.read_bytes() == second.read_bytes() == payload + assert len(calls) == 1 + assert not first.is_symlink() and not second.is_symlink() + assert not list(second.parent.glob(".model-*")) + + +def test_offline_can_materialize_packaged_metadata_without_connecting(tmp_path, monkeypatch): + from deployment.mambo_deploy import Predictor + + monkeypatch.delenv("MAMBO_BUNDLE", raising=False) + monkeypatch.setenv("MAMBO_CACHE", str(tmp_path)) + monkeypatch.setenv("MAMBO_OFFLINE", "1") + monkeypatch.setattr(download, "urlopen", lambda *args, **kwargs: pytest.fail("network used")) + predictor = Predictor() + assert predictor.preset == "full" + with pytest.raises(FileNotFoundError, match="not cached"): + predictor.bundle.profile("onnx") diff --git a/tests/releases/test_release_evaluation.py b/tests/releases/test_release_evaluation.py new file mode 100644 index 0000000..3caba29 --- /dev/null +++ b/tests/releases/test_release_evaluation.py @@ -0,0 +1,261 @@ +"""Release identity, excluded-truth and metric serialization contracts.""" + +import csv +import json + +import numpy as np +import pytest + +from deployment.mambo_deploy.results import Prediction, hierarchy +from dev.releases.mambo_v3.evaluation_data import CSV_COLUMNS, canonical_rows, load_records, prepare_flemming +from dev.releases.mambo_v3.metrics import finite_json + + +def fixture_data(tmp_path): + root = tmp_path / "images" + (root / "outside").mkdir(parents=True) + (root / "outside/photo.jpg").write_bytes(b"image fixture") + reference = tmp_path / "truth.csv" + with reference.open("w", newline="") as stream: + writer = csv.writer(stream) + writer.writerow(CSV_COLUMNS) + for rank, truth in enumerate(("outside", "genus", "family")): + writer.writerow([0, "/old/root/outside/photo.jpg", rank, truth, "unused", 0.5, 0, 0, 1, -1]) + return root, reference + + +def test_archive_truth_join_preserves_unknown_species_and_hashes(tmp_path): + root, reference = fixture_data(tmp_path) + output = tmp_path / "manifest.json" + data = prepare_flemming(root, reference, output) + assert data["records"][0]["labels"] == ["outside", "genus", "family"] + assert len(data["records"][0]["sha256"]) == 64 + _, records = load_records(output, root, 1) + assert records == data["records"] + (root / "outside/extra.jpg").write_bytes(b"extra") + with pytest.raises(ValueError, match="identity mismatch"): + prepare_flemming(root, reference, tmp_path / "other.json") + + +def test_manifest_escape_is_rejected(tmp_path): + root, reference = fixture_data(tmp_path) + output = tmp_path / "manifest.json" + data = prepare_flemming(root, reference, output) + data["records"][0]["path"] = "../truth.csv" + output.write_text(json.dumps(data)) + with pytest.raises(ValueError, match="unsafe image"): + load_records(output, root) + + +def test_canonical_rows_retain_excluded_truth_with_known_parent(): + classes = {"labels": [["inside"], ["genus"], ["family"]], "parents": [[0], [0]]} + result = Prediction(*hierarchy(np.array([[1.0]], dtype=np.float32), [0], classes)) + records = [{"path": "outside/photo.jpg", "labels": ["outside", "genus", "family"]}] + rows = [dict(zip(CSV_COLUMNS, row, strict=True)) for row in canonical_rows(records, result, 13)] + assert len(rows) == 3 and rows[0]["instance_id"] == 13 + assert rows[0]["label"] == "outside" and rows[0]["known_label"] == 0 and rows[0]["correct"] == -1 + assert rows[1]["known_label"] == 1 and rows[1]["correct"] == 1 + assert all(row["prediction_made"] == 1 and row["threshold"] == 0 for row in rows) + with pytest.raises(ValueError, match="count mismatch"): + list(canonical_rows([], result)) + + +def test_metric_json_keeps_undefined_values_explicit(): + assert finite_json({0: np.nan, 1: (np.float64(0.5), np.inf)}) == {"0": None, "1": [0.5, None]} + + +def test_comparison_rejects_changed_truth(tmp_path): + from dev.releases.mambo_v3.compare_quality import compare + + for name, truth in (("left", "a"), ("right", "b")): + directory = tmp_path / name + (directory / "full").mkdir(parents=True) + (directory / "report.json").write_text(json.dumps({"status": "complete", "sample_ids_sha256": "same"})) + with (directory / "full/mini_metric.csv").open("w", newline="") as stream: + writer = csv.writer(stream) + writer.writerow(CSV_COLUMNS) + writer.writerow([0, "image.jpg", 0, truth, "a", 0.5, 0, 1, 1, 1]) + with pytest.raises(ValueError, match="Ground truth"): + compare(tmp_path / "left", tmp_path / "right", ["full"]) + + +def test_ucloud_recovery_checks_original_split_and_taxonomy(tmp_path, monkeypatch): + import pyarrow as pa + import pyarrow.parquet as pq + + from dev.releases.mambo_v3 import prepare_ucloud + from dev.releases.mambo_v3.evaluation_data import write_json + + metadata = tmp_path / "metadata.parquet" + pq.write_table( + pa.table( + { + "filename": ["test.jpg", "train.jpg"], + "set": ["0", "1"], + "speciesKey": ["a", "b"], + "genusKey": ["g", "g"], + "familyKey": ["f", "f"], + } + ), + metadata, + ) + monkeypatch.setattr(prepare_ucloud, "HERE", tmp_path) + (tmp_path / "construction.toml").write_text(f'[source]\nsha256 = "{prepare_ucloud.file_hash(metadata)}"\n') + staging, reference = tmp_path / "staging.json", tmp_path / "truth.csv" + write_json(staging, {"files": [{"source": "/work/global_lepi/images/a/test.jpg", "staged": "/staged/0/1.jpg"}]}) + with reference.open("w", newline="") as stream: + writer = csv.writer(stream) + writer.writerow(["filename", "level", "label"]) + writer.writerows([["/staged/0/1.jpg", i, label] for i, label in enumerate(["a", "g", "f"])]) + records = prepare_ucloud.recover(metadata, staging, reference) + assert records == [{"path": "images/a/test.jpg", "labels": ["a", "g", "f"], "split": "test"}] + with pytest.raises(ValueError, match="membership differs"): + prepare_ucloud.recover(metadata, staging, reference, "1") + + +def test_threaded_preprocessing_is_byte_identical_and_ordered(tmp_path): + from concurrent.futures import ThreadPoolExecutor + + from PIL import Image + + from deployment.mambo_deploy.preprocessing import prepare_batch + + paths = [] + for i in range(5): + path = tmp_path / f"{i}.png" + Image.new("RGB", (11 + i, 13 + i), (i * 30, i * 10, 255 - i * 20)).save(path) + paths.append(path) + serial = prepare_batch(paths) + with ThreadPoolExecutor(max_workers=4) as pool: + threaded = prepare_batch(paths, pool) + np.testing.assert_array_equal(serial, threaded) + assert not np.array_equal(threaded[0], threaded[-1]) + + +def test_loading_observer_preserves_classmethod_and_restores_it(): + import torch + + from dev.releases.mambo_v3.benchmark import observe_loading + from mini_trainer.modeling.classifier import Classifier + + original = Classifier.init_spherical_repulsion.__func__ + values = {} + with observe_loading("torch", values): + layer = torch.nn.Linear(2, 3) + assert Classifier.init_spherical_repulsion(layer, iterations=1) is layer + assert Classifier.init_spherical_repulsion.__func__ is original + assert values["spherical_initialization_within_model_build"] >= 0 + + +def test_pinned_metrics_distinguish_micro_macro_and_known_truth(tmp_path): + import os + import subprocess + + executable = os.environ.get("MAMBO_METRICS_PYTHON") + if not executable: + pytest.skip("Set MAMBO_METRICS_PYTHON to the pinned metric environment") + source = tmp_path / "mini_metric.csv" + with source.open("w", newline="") as stream: + writer = csv.writer(stream) + writer.writerow(CSV_COLUMNS) + for i, truth in enumerate(("a", "a", "a", "outside")): + for rank in range(3): + writer.writerow([i, f"{i}.jpg", rank, truth, "a", 0.8, 0, int(truth == "a"), 1, 1 if truth == "a" else -1]) + output = subprocess.check_output( + [executable, "-m", "dev.releases.mambo_v3.metrics", "--source", str(source), "--output", str(tmp_path / "metrics.json")], + text=True, + ) + ranks = json.loads(output) + for row in ranks.values(): + assert row["micro_accuracy_all"] == pytest.approx(0.75) + assert row["macro_accuracy_all"] == pytest.approx(0.5) + assert row["micro_accuracy_known"] == pytest.approx(1.0) + assert row["abstention_coverage"] == 1 + metrics = json.loads((tmp_path / "metrics.json").read_text()) + assert metrics["all"]["f1"]["0"] == pytest.approx(3 / 7) + assert metrics["known"]["f1"]["0"] == pytest.approx(1) + + +def test_family_audit_export_keeps_predicted_only_groups_without_recall(tmp_path): + from dev.releases.mambo_v3.family_precision_report import export + + # mini_metrics emits no recall group for a family that occurs only in predictions. + row = { + "threshold": 0.95, + "truth_counts": {"present": 2}, + "predicted_counts": {"present": 1, "absent": 1}, + "groups": { + "precision": {"present": [1, 1], "absent": [0, 1]}, + "recall": {"present": [0.5, 1]}, + "f1": {"present": [2 / 3, 1], "absent": [0, 1]}, + }, + } + data = {"taxonomy": {"names": {"absent": "Absent family"}}, "models": {"v3": {"optimized": row}}} + export(data, tmp_path) + with (tmp_path / "mambo-family-precision.csv").open() as stream: + rows = {r["family_id"]: r for r in csv.DictReader(stream)} + assert rows["absent"]["truth_images"] == "0" + assert rows["absent"]["accepted_predictions"] == "1" + assert rows["absent"]["precision"] == "0" + assert rows["absent"]["recall"] == "" + assert rows["absent"]["recall_weight"] == "0" + assert rows["absent"]["f1_weight"] == "1" + + +def test_tail_support_requires_both_domains_and_strict_cutoff(): + from dev.releases.mambo_v3.tail_report import eligible_classes + + truth = {"kept": 6, "at_truth_cutoff": 5, "at_prediction_cutoff": 20, "unpredicted": 30} + accepted = {"kept": 6, "at_truth_cutoff": 30, "at_prediction_cutoff": 5, "predicted_only": 100} + assert eligible_classes(truth, accepted, -1) == set(truth) | set(accepted) + assert eligible_classes(truth, accepted, 0) == {"kept", "at_truth_cutoff", "at_prediction_cutoff"} + assert eligible_classes(truth, accepted, 5) == {"kept"} + assert eligible_classes(truth, accepted, 20) == set() + + +def test_matched_coverage_keeps_ties_and_does_not_use_truth(tmp_path): + import os + import subprocess + + executable = os.environ.get("MAMBO_METRICS_PYTHON") + if not executable: + pytest.skip("Set MAMBO_METRICS_PYTHON to the pinned metric environment") + source = tmp_path / "ties.csv" + with source.open("w", newline="") as stream: + writer = csv.writer(stream) + writer.writerow(CSV_COLUMNS) + for i, confidence in enumerate((0.1, 0.5, 0.5, 0.9)): + for rank in range(3): + writer.writerow([i, f"{i}.jpg", rank, "truth", "prediction", confidence, 0, 0, 1, -1]) + script = """ +import json,sys +from mini_metrics.data import MetricDF +from mini_metrics.metrics import evaluate_file +from dev.releases.mambo_v3.composed_metrics import matched_thresholds +from dev.releases.mambo_v3.metrics import finite_json +d = MetricDF.from_source(sys.argv[1]) +t = matched_thresholds(d, .5) +r = evaluate_file(d, threshold=t, simple=True, hierarchical=False, pattern='^coverage$', verbose=0) +print(json.dumps({'thresholds':t, 'coverage':finite_json(r)['coverage']})) +""" + result = json.loads(subprocess.check_output([executable, "-c", script, str(source)], text=True)) + assert result["thresholds"] == [0.5, 0.5, 0.5] + # A shared score must not be arbitrarily split to manufacture exact target coverage. + assert result["coverage"] == {"0": 0.75, "1": 0.75, "2": 0.75} + + +@pytest.mark.parametrize("revision", [None, "", "different-revision", "pinned"]) +def test_metric_environment_requires_recorded_git_revision(monkeypatch, revision): + from types import SimpleNamespace + + from dev.releases.mambo_v3 import metrics + + commit = metrics.REVISION if revision == "pinned" else revision + metadata = json.dumps({"vcs_info": {"commit_id": commit}}) if revision is not None else None + distribution = SimpleNamespace(read_text=lambda name: metadata) + monkeypatch.setattr(metrics.importlib.metadata, "distribution", lambda name: distribution) + if revision == "pinned": + metrics.require_pinned_metrics() + else: + with pytest.raises(ValueError, match=metrics.REVISION): + metrics.require_pinned_metrics() diff --git a/tests/releases/test_release_monitor.py b/tests/releases/test_release_monitor.py new file mode 100644 index 0000000..850e703 --- /dev/null +++ b/tests/releases/test_release_monitor.py @@ -0,0 +1,55 @@ +"""Monitoring existing logs must not change evidence or invent throughput.""" + +import json +import os + +import pytest + +from dev.monitor_mambo_release import Rate, checkpoint, snapshot + + +@pytest.mark.parametrize("line", ["1600 632913\n", "torch cuda:0: 1600/632913\n", "onnx cpu: 1600/632913\n"]) +def test_reads_existing_formats(tmp_path, line): + path = tmp_path / "job.log" + path.write_text("warning from runtime\n" + line + "another warning\n") + assert checkpoint(path)[:2] == (1600, 632913) + assert path.read_text().endswith("another warning\n") + + +def test_rate_waits_for_progress_and_rejects_stale_or_restarted_logs(): + rate = Rate() + assert rate.estimate(100, 1000, 100, 100) is None + assert rate.estimate(100, 1000, 100, 105) is None + assert rate.estimate(200, 1000, 110, 110) == (10, 80) + assert rate.estimate(200, 1000, 110, 200) is None + assert rate.estimate(32, 1000, 210, 210) is None + + +def test_snapshot_distinguishes_completed_active_queued_and_failed(tmp_path): + plan = {"status": "running", "completed": ["v2"], "jobs": [{"name": n} for n in ("v2", "torch", "onnx")]} + p = tmp_path / "plan.json" + p.write_text(json.dumps(plan)) + log = tmp_path / "torch.log" + log.write_text("torch cuda:0: 32/632913\n") + os.utime(log, (100, 100)) + original = p.read_bytes(), log.read_bytes() + rates = {} + rows, finished = snapshot(tmp_path, rates, 100) + assert not finished + assert "v2: complete" in rows and "onnx: queued" in rows + assert "ETA unavailable" in rows[2] + log.write_text("torch cuda:0: 32/632913\ntorch cuda:0: 1632/632913\n") + os.utime(log, (110, 110)) + rows, _ = snapshot(tmp_path, rates, 110) + assert "160.0 images/s" in rows[2] + assert p.read_bytes() == original[0] + (tmp_path / "torch").mkdir() + (tmp_path / "torch/report.json").write_text('{"status": "failed"}') + rows, _ = snapshot(tmp_path, rates, 110) + assert "FAILED" in rows[2] and "images/s" not in rows[2] + + +def test_partial_plan_write_is_retryable(tmp_path): + (tmp_path / "plan.json").write_text('{"status":') + rows, finished = snapshot(tmp_path, {}, 100) + assert not finished and "Waiting" in rows[0] diff --git a/tests/releases/test_release_route.py b/tests/releases/test_release_route.py new file mode 100644 index 0000000..f1ce1c1 --- /dev/null +++ b/tests/releases/test_release_route.py @@ -0,0 +1,61 @@ +"""Branch preparation must not confuse products or accept mismatched release versions.""" + +import pytest + +from dev.release_route import resolve + + +@pytest.fixture +def repo(tmp_path): + (tmp_path / "pyproject.toml").write_text('[project]\nname="mt-trainer"\nversion="0.3.0"\n') + (tmp_path / "deployment").mkdir() + (tmp_path / "deployment/pyproject.toml").write_text('[project]\nname="mambo-v3"\nversion="0.3.0"\n') + (tmp_path / ".github").mkdir() + (tmp_path / ".github/model-releases.toml").write_text( + '[models.mambo-v3]\nproject="deployment"\nmodule="dev.releases.mambo_v3"\ntag="MAMBO_v3"\ntag_version="0.3.0"\n' + ) + return tmp_path + + +@pytest.mark.parametrize("kind,product", [("packages", "mt-trainer"), ("models", "mambo-v3"), ("demos", "mambo-v3")]) +def test_branch_and_manual_preparation_select_only_the_requested_product(repo, kind, product): + result = resolve(repo, kind, "push", f"refs/heads/release/{kind}/{product}", {}) + assert result["enabled"] == "true" and result["product"] == product + assert resolve(repo, kind, "push", "refs/heads/master", {}) == {"enabled": "false"} + assert resolve(repo, kind, "push", f"refs/tags/{result['tag']}", {}) == {"enabled": "false"} + assert resolve(repo, kind, "workflow_dispatch", "refs/heads/master", {}, product) == result + + +@pytest.mark.parametrize( + "kind,tag,enabled", + [ + ("packages", "packages/mt-trainer/v0.3.0", "true"), + ("models", "MAMBO_v3", "true"), + ("packages", "MAMBO_v3", "false"), + ("models", "packages/mt-trainer/v0.3.0", "false"), + ("models", "unrelated-release", "false"), + ("demos", "MAMBO_v3", "false"), + ], +) +def test_release_routes_are_independent(repo, kind, tag, enabled): + assert resolve(repo, kind, "release", f"refs/tags/{tag}", {"release": {"tag_name": tag}})["enabled"] == enabled + + +def test_mismatched_or_unknown_product_release_is_rejected(repo): + for tag in ("packages/mt-trainer/v0.4.0", "packages/another/v0.3.0"): + with pytest.raises(ValueError): + resolve(repo, "packages", "release", f"refs/tags/{tag}", {"release": {"tag_name": tag}}) + (repo / "deployment/pyproject.toml").write_text('[project]\nname="mambo-v3"\nversion="0.3.1"\n') + with pytest.raises(ValueError, match="Explicit release tag"): + resolve(repo, "models", "release", "refs/tags/MAMBO_v3", {"release": {"tag_name": "MAMBO_v3"}}) + + +def test_future_model_uses_convention_without_workflow_changes(repo): + (repo / "future").mkdir() + (repo / "future/pyproject.toml").write_text('[project]\nname="another-model"\nversion="1.2.0"\n') + with (repo / ".github/model-releases.toml").open("a") as stream: + stream.write('[models.another-model]\nproject="future"\nmodule="dev.releases.another_model"\n') + tag = "models/another-model/v1.2.0" + result = resolve(repo, "models", "release", f"refs/tags/{tag}", {"release": {"tag_name": tag}}) + assert result["product"] == "another-model" and result["module"] == "dev.releases.another_model" + assert resolve(repo, "demos", "push", "refs/heads/release/demos/another-model", {})["product"] == "another-model" diff --git a/tests/releases/test_speed_smoke.py b/tests/releases/test_speed_smoke.py new file mode 100644 index 0000000..7301453 --- /dev/null +++ b/tests/releases/test_speed_smoke.py @@ -0,0 +1,91 @@ +import argparse +import json +from pathlib import Path +from types import SimpleNamespace + +import pyarrow as pa +import pyarrow.parquet as pq +import pytest + +from dev.releases.mambo_v3 import speed_smoke + + +def metadata(tmp_path): + path = tmp_path / "metadata.parquet" + pq.write_table( + pa.table( + { + "filename": [f"{i}.jpg" for i in range(8)], + "set": ["0"] * 6 + ["1"] * 2, + "speciesKey": ["species"] * 8, + "genusKey": ["genus"] * 8, + "familyKey": ["family"] * 8, + } + ), + path, + ) + return path + + +def test_sample_preserves_original_test_membership(tmp_path): + path = metadata(tmp_path) + records = speed_smoke.sample(path, 4) + assert records == speed_smoke.sample(path, 4) + assert len({r["path"] for r in records}) == 4 + assert all(int(Path(r["path"]).stem) < 6 and r["labels"] == ["species", "genus", "family"] for r in records) + with pytest.raises(ValueError, match="Need 7 test images"): + speed_smoke.sample(path, 7) + + +def test_four_variants_reuse_sample_and_route_interpreters(tmp_path, monkeypatch): + path = metadata(tmp_path) + original = speed_smoke.sample + monkeypatch.setattr(speed_smoke, "sample", lambda p: original(p, 4)) + for r in original(path, 4): + image = tmp_path / r["path"] + image.parent.mkdir(parents=True, exist_ok=True) + image.write_bytes(b"sample bytes") + bundle = SimpleNamespace(root=tmp_path, profile=lambda name: None) + monkeypatch.setattr(speed_smoke, "Predictor", lambda: SimpleNamespace(bundle=bundle)) + monkeypatch.setattr(speed_smoke.subprocess, "check_output", lambda *a, **k: "fixture") + calls = [] + + def benchmark(command, **kwargs): + calls.append(command) + output = Path(command[command.index("--output") + 1]) + output.mkdir() + (output / "report.json").write_text( + json.dumps({"cells": [{"streaming": {"images_per_second": 123}, "images_per_second": 100}], "peak_rss_kib_linux": 1024}) + ) + + monkeypatch.setattr(speed_smoke.subprocess, "run", benchmark) + args = argparse.Namespace(metadata=path, output=tmp_path / "results", onnx_python=Path("/separate-onnx/bin/python"), workers=6) + speed_smoke.run(args) + assert [c[0] for c in calls] == [speed_smoke.sys.executable, str(args.onnx_python)] * 2 + assert [c[c.index("--tta") + 1] for c in calls] == ["none", "none", speed_smoke.DEFAULT_TTA, speed_smoke.DEFAULT_TTA] + assert len({c[c.index("--manifest") + 1] for c in calls}) == 1 + assert all(c[c.index("--batches") + 1] == "256" for c in calls) + assert len((args.output / "summary.csv").read_text().splitlines()) == 5 + with pytest.raises(FileExistsError): + speed_smoke.run(args) + + +def test_automatic_runtime_installation_stays_outside_active_environment(tmp_path, monkeypatch): + monkeypatch.setenv("MAMBO_CACHE", str(tmp_path)) + calls = [] + + def install(command, **kwargs): + calls.append(command) + if command[1] == "venv": + interpreter = Path(command[-1]) / "bin/python" + interpreter.parent.mkdir(parents=True) + interpreter.touch() + + monkeypatch.setattr(speed_smoke.subprocess, "run", install) + interpreter = speed_smoke.prepare_onnx_runtime() + assert interpreter.is_relative_to(tmp_path) + assert str(interpreter) != speed_smoke.sys.executable + assert calls[-1][calls[-1].index("--python") + 1] == str(interpreter) + calls.clear() + assert speed_smoke.prepare_onnx_runtime() == interpreter + assert all(c[1:3] == ["pip", "install"] for c in calls) diff --git a/tests/releases/test_streaming.py b/tests/releases/test_streaming.py new file mode 100644 index 0000000..29a2c23 --- /dev/null +++ b/tests/releases/test_streaming.py @@ -0,0 +1,377 @@ +import hashlib +import threading +from contextlib import closing + +import numpy as np +import pytest +from PIL import Image + +from deployment.mambo_deploy import streaming +from deployment.mambo_deploy.augmentation import resolve_tta +from deployment.mambo_deploy.preprocessing import preprocess + + +def inputs(tmp_path, count=9): + items = [] + for i in range(count): + path = tmp_path / f"{i}.png" + Image.fromarray(np.full((20, 30, 3), i, dtype=np.uint8)).save(path) + items.append((path, hashlib.sha256(path.read_bytes()).hexdigest())) + return items + + +@pytest.mark.parametrize("tta", [None, resolve_tta("rotation30_pad25_3")]) +@pytest.mark.parametrize("compact", [False, True]) +def test_order_pixels_and_bounds(tmp_path, tta, compact): + if compact: + import torch + + from deployment.mambo_deploy.preprocessing import TorchPreprocess + + finish = TorchPreprocess(torch, "cpu") + items = inputs(tmp_path) + stats = {} + batches = list( + streaming.prepared_stream( + items, + 2, + tta=tta, + compact=compact, + read_workers=8, + prepare_workers=3, + read_window=8, + prefetch_batches=2, + encoded_budget=400, + stats=stats, + ) + ) + assert [offset for offset, _ in batches] == [0, 2, 4, 6, 8] + for offset, views in batches: + expected = [streaming.prepare_image(p.read_bytes(), tta) for p, _ in items[offset : offset + len(views[0])]] + assert len(views) == len(expected[0]) + for i, view in enumerate(views): + reference = np.stack([image[i] for image in expected]) + if compact: + assert view.dtype == np.uint8 and view.nbytes * 4 == reference.nbytes + np.testing.assert_allclose(finish(torch.from_numpy(view)).numpy(), reference, atol=1e-6) + else: + np.testing.assert_array_equal(view, reference) + assert stats["peak_encoded_bytes"] <= 400 + assert stats["peak_prepared_images"] <= 6 + + +def test_slow_first_read_does_not_block_later_preparation(tmp_path, monkeypatch): + items = inputs(tmp_path) + later = threading.Event() + original_read, original_prepare = streaming.read_image, streaming.prepare_image + + def read(path, size, digest): + if path == items[0][0]: + assert later.wait(3), "later images must prepare while first read waits" + return original_read(path, size, digest) + + def prepare(data, tta, out=None, **kwargs): + result = original_prepare(data, tta, out=out, **kwargs) + later.set() + return result + + monkeypatch.setattr(streaming, "read_image", read) + monkeypatch.setattr(streaming, "prepare_image", prepare) + assert len(list(streaming.prepared_stream(items, 2, read_window=8))) == 5 + + +def test_failure_close_and_empty(tmp_path): + items = inputs(tmp_path) + with pytest.raises(ValueError, match="bytes changed"): + list(streaming.prepared_stream([(items[0][0], "bad")], 2)) + with pytest.raises(ValueError, match="budget"): + list(streaming.prepared_stream(items, 2, encoded_budget=1)) + assert list(streaming.prepared_stream([], 2)) == [] + with closing(streaming.prepared_stream(items, 2)) as stream: + offset, views = next(stream) + assert offset == 0 + np.testing.assert_array_equal(views[0][0], preprocess(items[0][0])) + assert not any(t.name == "mambo-stream" for t in threading.enumerate()) + + +def test_workers_fill_batch_storage_and_errors_propagate(tmp_path, monkeypatch): + items = inputs(tmp_path, 5) + original = streaming.prepare_image + targets = [] + + def prepare(data, tta, out=None, **kwargs): + assert out is not None + targets.append((threading.current_thread().name, out[0])) + return original(data, tta, out=out, **kwargs) + + monkeypatch.setattr(streaming, "prepare_image", prepare) + stats = {} + batches = list(streaming.prepared_stream(items, 2, stats=stats)) + assert len(targets) == 5 + assert all(name.startswith("mambo-prepare") for name, _ in targets) + assert all(any(np.shares_memory(target, views[0]) for _, views in batches) for _, target in targets) + assert stats["preparation_worker_seconds"] > 0 + assert stats["queue_wait_seconds"] == stats["input_wait_seconds"] + + def fail(data, tta, out=None, **kwargs): + raise ValueError("preparation failure") + + monkeypatch.setattr(streaming, "prepare_image", fail) + with pytest.raises(ValueError, match="preparation failure"): + list(streaming.prepared_stream(items, 2)) + assert not any(t.name.startswith("mambo-prepare") for t in threading.enumerate()) + + +def test_result_worker_order_bounds_overlap_and_failure(): + from deployment.mambo_deploy.result_worker import ResultWorker + + release = threading.Event() + started = threading.Event() + + def process(value): + started.set() + assert release.wait(3) + if value < 0: + raise ValueError("result failed") + return value + + with ResultWorker(process) as worker: + worker.submit(1) + assert started.wait(3) + worker.submit(2) # Caller can advance while first result is still blocked. + with pytest.raises(RuntimeError, match="Drain"): + worker.submit(3) + release.set() + assert worker.pop() == 1 + assert worker.pop() == 2 + worker.submit(-1) + with pytest.raises(ValueError, match="result failed"): + worker.pop() + + +def test_reusable_batch_buffers_are_bounded(tmp_path, monkeypatch): + items = inputs(tmp_path, 21) + stats = {} + # Keep the test about ownership/reuse, not expensive image interpolation. + monkeypatch.setattr(streaming, "prepare_image", lambda data, tta, out, **kwargs: out[0].fill(len(data))) + pointers = set() + count = 0 + with closing(streaming.prepared_stream(items, 2, prefetch_batches=2, reuse_buffers=True, stats=stats)) as batches: + for offset, views in batches: + pointers.add(views[0].ctypes.data) + assert offset == count + count += len(views[0]) + assert count == 21 + assert len(pointers) <= 4 + assert stats["host_buffer_allocations"] <= 4 + + +@pytest.mark.parametrize("compact", [False, True]) +def test_cuda_device_slots_and_pinned_source_lifetime(compact): + import torch + + from deployment.mambo_deploy.transfers import device_batches, download_tensors, pinned_factory + + if not torch.cuda.is_available(): + pytest.skip("Intentional CUDA test; set CUDA_VISIBLE_DEVICES") + allocate = pinned_factory("cuda:0", compact=compact) + host = allocate((2, 3, 4, 4)) + assert torch.from_numpy(host).is_pinned() + + def source(): + for i in range(7): + host.fill(i) + yield i * 2, (host[:1] if i == 6 else host,) + + stats = {} + pointers = set() + with closing(device_batches(source(), "torch", "cuda:0", stats)) as batches: + for offset, views, count in batches: + assert views[0].dtype == (torch.uint8 if compact else torch.float32) + pointers.add(views[0].data_ptr()) + result = download_tensors([views[0] * 2], torch=torch)[0] + np.testing.assert_array_equal(result, np.full((count, 3, 4, 4), offset, dtype=np.float32)) + assert len(pointers) == 2 + assert stats["device_buffer_allocations"] == 2 + assert stats["h2d_device_seconds"] >= 0 + + +def test_cuda_deferred_download_retains_outputs_after_slot_reuse(): + import torch + + from deployment.mambo_deploy.transfers import download_tensors + + if not torch.cuda.is_available(): + pytest.skip("Intentional CUDA test; set CUDA_VISIBLE_DEVICES") + stream = torch.cuda.Stream() + source = torch.empty((8, 128), device="cuda") + pending = [] + for index in range(6): + source.fill_(index) + # Completing later must retain this batch, not expose a reused device slot. + pending.append(download_tensors([source[: index + 1], source.sum(1)], torch=torch, defer=True, stream=stream)) + del source + for index, complete in enumerate(pending): + values, sums = complete() + np.testing.assert_array_equal(values, np.full((index + 1, 128), index)) + np.testing.assert_array_equal(sums, np.full(8, index * 128)) + + +def test_ready_work_prioritizes_earliest_batch(tmp_path, monkeypatch): + import time + from concurrent.futures import ThreadPoolExecutor + + items = inputs(tmp_path, 4) + indices = {p.read_bytes(): i for i, (p, _) in enumerate(items)} + preparing_first, release_first, later_read = threading.Event(), threading.Event(), threading.Event() + original = streaming.read_image + order, stats = [], {} + + def read(path, size, digest): + index = int(path.stem) + if index: + assert preparing_first.wait(3) + if index == 1: + assert later_read.wait(3) + data = original(path, size, digest) + if index == 3: + later_read.set() + return data + + def prepare(data, tta, out, **kwargs): + index = indices[data] + order.append(index) + if index == 0: + preparing_first.set() + assert release_first.wait(5) + out[0].fill(index) + + monkeypatch.setattr(streaming, "read_image", read) + monkeypatch.setattr(streaming, "prepare_image", prepare) + with ThreadPoolExecutor(max_workers=1) as pool: + future = pool.submit(list, streaming.prepared_stream(items, 2, read_workers=4, prepare_workers=1, read_window=4, stats=stats)) + try: + deadline = time.monotonic() + 3 + while stats.get("encoded_ready", 0) != 3 and time.monotonic() < deadline: + time.sleep(0.001) + assert stats.get("encoded_ready") == 3 + finally: + release_first.set() + assert len(future.result(timeout=5)) == 2 + assert order == [0, 1, 2, 3] + + +def test_lease_prevents_early_reuse_and_source_errors_propagate(tmp_path, monkeypatch): + items = inputs(tmp_path, 12) + second_prepared = threading.Event() + original = streaming.prepare_image + second_data = items[3][0].read_bytes() + + def prepare(data, tta, out=None, **kwargs): + result = original(data, tta, out=out, **kwargs) + if data == second_data: + second_prepared.set() + return result + + monkeypatch.setattr(streaming, "prepare_image", prepare) + with closing(streaming.prepared_stream(items, 2, prefetch_batches=1, reuse_buffers=True)) as stream: + _, first = next(stream) + assert second_prepared.wait(3) + # Preparing the next batch must not overwrite the batch still held by the consumer. + np.testing.assert_array_equal(first[0], np.stack([preprocess(p) for p, _ in items[:2]])) + _, second = next(stream) + np.testing.assert_array_equal(second[0][0], preprocess(items[2][0])) + + def broken(): + yield items[0] + raise OSError("input iterator failed") + + with pytest.raises(OSError, match="input iterator failed"): + list(streaming.prepared_stream(broken(), 2)) + assert not any(t.name.startswith(("mambo-read", "mambo-prepare", "mambo-stream")) for t in threading.enumerate()) + + +def test_metadata_latency_does_not_block_preparation(tmp_path, monkeypatch): + from pathlib import Path + + items = inputs(tmp_path, 5) + prepared = threading.Event() + original_stat, original_prepare = Path.stat, streaming.prepare_image + threads = [] + + def stat(path, *args, **kwargs): + if path in [p for p, _ in items]: + threads.append(threading.current_thread().name) + if path == items[2][0]: + assert prepared.wait(3), "metadata IO must not stall the preparation owner" + return original_stat(path, *args, **kwargs) + + def prepare(data, tta, out=None, **kwargs): + result = original_prepare(data, tta, out=out, **kwargs) + prepared.set() + return result + + monkeypatch.setattr(Path, "stat", stat) + monkeypatch.setattr(streaming, "prepare_image", prepare) + assert len(list(streaming.prepared_stream(items, 2, read_workers=4, read_window=8))) == 3 + assert all(name.startswith("mambo-read") for name in threads) + + +def test_close_with_pending_byte_admission(tmp_path): + items = inputs(tmp_path, 8) + budget = max(p.stat().st_size for p, _ in items) + with closing(streaming.prepared_stream(items, 1, read_workers=4, read_window=8, prefetch_batches=0, encoded_budget=budget)) as stream: + next(stream) + assert not any(t.name.startswith(("mambo-read", "mambo-prepare", "mambo-stream")) for t in threading.enumerate()) + + +def test_invalid_source_fails_before_starting_workers(): + class InvalidSource: + def __iter__(self): + raise ValueError("cannot iterate source") + + with pytest.raises(ValueError, match="cannot iterate source"): + next(streaming.prepared_stream(InvalidSource(), 1)) + + +def test_full_byte_budget_does_not_occupy_io_workers(tmp_path, monkeypatch): + from concurrent.futures import ThreadPoolExecutor + + items = inputs(tmp_path, 6) + budget = max(p.stat().st_size for p, _ in items) + inspected, reads = [], [] + all_inspected, release_prepare = threading.Event(), threading.Event() + original_metadata, original_read = streaming.image_metadata, streaming.read_image + + def metadata(path, digest): + result = original_metadata(path, digest) + inspected.append(path) + if len(inspected) == len(items): + all_inspected.set() + return result + + def read(path, size, digest): + reads.append(path) + return original_read(path, size, digest) + + def prepare(data, tta, out, **kwargs): + assert release_prepare.wait(5) + out[0].fill(0) + + monkeypatch.setattr(streaming, "image_metadata", metadata) + monkeypatch.setattr(streaming, "read_image", read) + monkeypatch.setattr(streaming, "prepare_image", prepare) + stats = {} + with ThreadPoolExecutor(max_workers=1) as pool: + future = pool.submit( + list, + streaming.prepared_stream(items, 2, read_workers=2, read_window=6, encoded_budget=budget, stats=stats), + ) + try: + assert all_inspected.wait(3), "byte-budget backpressure must leave IO workers available for metadata" + assert len(reads) <= 1 # The reservation includes bytes held by preparation. + finally: + release_prepare.set() + assert len(future.result(timeout=5)) == 3 + assert stats["peak_encoded_bytes"] <= budget + assert stats["encoded_bytes"] == 0 diff --git a/tests/releases/test_ucloud_release.py b/tests/releases/test_ucloud_release.py new file mode 100644 index 0000000..686aec1 --- /dev/null +++ b/tests/releases/test_ucloud_release.py @@ -0,0 +1,303 @@ +"""Offline UCloud plan and evidence-integrity contracts.""" + +import json +from pathlib import Path + +import pytest + +from dev.releases.mambo_v3.ucloud_release import RECIPE, configuration, jobs, validated_report + +CONFIG = Path("dev/releases/mambo_v3/ucloud_release.json") + + +@pytest.mark.parametrize("phase", ["qualification", "full", "benchmark"]) +def test_plan_routes_runtime_loading_and_batch_controls(phase): + config = configuration(CONFIG.resolve()) + config["qualification_count"] = 7 + legacy = {job["name"]: job["command"] for job in jobs(config, phase) if job["legacy"]} + config.update(onnx_python="/isolated/onnx/bin/python", decode_workers=16, prefetch_batches=2, v3_batch_size=256) + for job in jobs(config, phase): + command = job["command"] + interpreter = "onnx_python" if job["variant"].startswith("onnx") else "v2_python" if job["legacy"] else "v3_python" + assert command[0] == config[interpreter] + if job["legacy"]: + assert "-P" in command and "--precision" not in command and "--prefetch-batches" not in command + if phase != "benchmark": + assert command == legacy[job["name"]] + else: + assert command[command.index("--precision") + 1] == "auto" + assert command[command.index("--tta") + 1] == (RECIPE if job["variant"].endswith("tta") else "none") + worker_option = "--stream-workers" if phase == "benchmark" else "--decode-workers" + assert command[command.index(worker_option) + 1] == "16" + assert command[command.index("--prefetch-batches") + 1] == "2" + if phase == "benchmark": + assert command[command.index("--bank-size") + 1] == "256" + sizes = command[command.index("--batches") + 1 : command.index("--bank-size")] + assert ("256" in sizes) == (not job["legacy"] and job["device"] != "cpu") + else: + assert command[command.index("--presets") + 1] == "full" + if not job["legacy"]: + assert command[command.index("--batch-size") + 1] == "256" + if phase == "qualification": + assert command[command.index("--count") + 1] == "7" + else: + assert "--count" not in command + + +def test_benchmark_bank_and_trials_match_across_backends(): + config = configuration(CONFIG.resolve()) + config["gpu_batches"] = [1, 8, 32, 64] + plan = jobs(config, "benchmark") + assert plan and len({j["name"] for j in plan}) == len(plan) + for j in plan: + c = j["command"] + assert c[c.index("--bank-size") + 1] == "64" + if j["legacy"] and j["device"] == "cpu": + assert "--cpu-float32" in c + + +def test_configuration_rejects_regional_only_quality(tmp_path): + config = json.loads(CONFIG.read_text()) + config["quality_presets"] = ["north_europe"] + p = tmp_path / "config.json" + p.write_text(json.dumps(config)) + with pytest.raises(ValueError, match="global"): + configuration(p) + + +def test_completed_job_rejects_changed_predictions(tmp_path): + p = tmp_path / "full" + p.mkdir() + (p / "mini_metric.csv").write_text("changed") + (tmp_path / "report.json").write_text(json.dumps({"status": "complete", "csv_sha256": {"full": "0" * 64}})) + with pytest.raises(ValueError, match="Changed predictions"): + validated_report(tmp_path) + (tmp_path / "report.json").write_text(json.dumps({"status": "failed"})) + with pytest.raises(ValueError, match="Incomplete job"): + validated_report(tmp_path) + + +def test_bank_identity_matches_legacy_and_portable_reports(tmp_path): + from dev.benchmarks.inference.onnx_inference import file_hash + from dev.releases.mambo_v3.evaluation_data import write_json + from dev.releases.mambo_v3.ucloud_release import bank_identity + + records = [{"path": "image.jpg", "sha256": "a" * 64}] + write_json(tmp_path / "samples.json", records) + legacy = {"samples": 1, "sample_ids_sha256": file_hash(tmp_path / "samples.json")} + assert bank_identity(tmp_path, legacy) == bank_identity(tmp_path, {"samples": records}) + write_json(tmp_path / "samples.json", [{"path": "different.jpg"}]) + with pytest.raises(ValueError, match="Changed legacy"): + bank_identity(tmp_path, legacy) + + +def test_summary_preserves_ranks_scopes_and_rejects_changed_evidence(tmp_path): + from dev.benchmarks.inference.onnx_inference import file_hash + from dev.releases.mambo_v3.evaluation_data import write_json + from dev.releases.mambo_v3.metrics import METRIC_SCHEMA, REVISION + from dev.releases.mambo_v3.ucloud_release import VARIANTS + from dev.releases.mambo_v3.ucloud_summary import summarize + + for phase in ("full", "benchmark"): + plan = dict(status="complete", fingerprint={"inputs": "same"}, environment_id="fixture", jobs=[], completed=[], reports_sha256={}) + for variant in VARIANTS: + directory = tmp_path / phase / variant + directory.mkdir(parents=True) + job = dict(name=variant, variant=variant, device="cpu") + plan["jobs"].append(job) + plan["completed"].append(variant) + report = dict(status="complete", peak_rss_kib_linux=1024) + if phase == "full": + (directory / "full").mkdir() + csv = directory / "full/mini_metric.csv" + csv.write_text("fixture predictions") + digest = file_hash(csv) + report.update(samples=632913, sample_ids_sha256="same-population", csv_sha256={"full": digest}) + metrics = dict( + source_sha256=digest, + metric_schema=METRIC_SCHEMA, + mini_metrics_revision=REVISION, + ranks={r: {"images": 632913} for r in ("species", "genus", "family")}, + all={"f1": {str(i): 0.4 for i in range(3)}}, + known={"f1": {str(i): 0.5 for i in range(3)}}, + ) + write_json(directory / "full/metrics.json", metrics) + else: + records = [{"path": "image.jpg"}] + report.update(samples=records, cells=[dict(preset="full", batch_size=8, end_to_end={"seconds": [2] * 7})]) + if variant != "v2": + report["cells"][0]["streaming"] = {"images": 1024, "seconds": [4, 4, 4]} + if variant == "v2": + write_json(directory / "samples.json", records) + report.update(samples=1, sample_ids_sha256=file_hash(directory / "samples.json")) + write_json(directory / "report.json", report) + plan["reports_sha256"][variant] = file_hash(directory / "report.json") + write_json(tmp_path / phase / "plan.json", plan) + result = summarize(tmp_path, tmp_path / "summary") + assert len(result["quality"]) == 30 and len(result["speed"]) == 5 + assert {r["f1"] for r in result["quality"]} == {0.4, 0.5} + assert all(r["images_per_second"] == 4 for r in result["speed"]) + assert len(result["streaming_speed"]) == 4 + assert all(r["images_per_second"] == 256 for r in result["streaming_speed"]) + assert (tmp_path / "summary/streaming_speed.csv").is_file() + (tmp_path / "full/v2/full/mini_metric.csv").write_text("changed") + with pytest.raises(ValueError, match="Changed predictions"): + summarize(tmp_path, tmp_path / "changed-summary") + + +def test_setup_rejects_wrong_metadata_before_downloads(tmp_path, monkeypatch): + from types import SimpleNamespace + + from dev.releases.mambo_v3 import setup_ucloud_release + + path = tmp_path / "wrong.parquet" + path.write_bytes(b"not the original snapshot") + monkeypatch.setattr(setup_ucloud_release, "default_bundle", lambda: pytest.fail("Downloaded before metadata validation")) + with pytest.raises(ValueError, match="metadata snapshot"): + setup_ucloud_release.setup(SimpleNamespace(metadata=path)) + + +def test_legacy_archive_uses_repository_root_from_any_working_directory(tmp_path, monkeypatch): + import subprocess + + from dev.releases.mambo_v3 import setup_ucloud_release as setup + + repository = tmp_path / "repository" + package = repository / "mini_trainer" + package.mkdir(parents=True) + expected = b"# Pinned legacy package\n" + (package / "__init__.py").write_bytes(expected) + (package / "deploy.py").write_text("# Legacy deployment\n") + subprocess.run(["git", "init", str(repository)], check=True, capture_output=True) + subprocess.run(["git", "add", "mini_trainer"], cwd=repository, check=True) + subprocess.run( + ["git", "-c", "user.name=Test", "-c", "user.email=test@example.org", "-c", "commit.gpgsign=false", "commit", "-m", "Legacy"], + cwd=repository, + check=True, + capture_output=True, + ) + commit = subprocess.check_output(["git", "rev-parse", "HEAD"], cwd=repository, text=True).strip() + monkeypatch.setattr(setup, "HERE", repository / "dev/releases/mambo_v3") + monkeypatch.setattr(setup, "COMMIT", commit) + (package / "__init__.py").write_text("# Uncommitted change must not be exported\n") + monkeypatch.chdir(tmp_path) + source = tmp_path / "legacy" / commit + setup.prepare_legacy_source(source) + assert (source / "mini_trainer/__init__.py").read_bytes() == expected + assert (source / "mini_trainer/deploy.py").is_file() + setup.prepare_legacy_source(source) # Reuse the completed extraction on setup retries. + + +def test_configuration_preserves_virtual_environment_interpreter(tmp_path): + import subprocess + import venv + + environment = tmp_path / "runtime" + venv.EnvBuilder(with_pip=False, symlinks=True).create(environment) + interpreter = environment / "bin/python" + config = json.loads(CONFIG.read_text()) + for key in ("v2_python", "v3_python", "metrics_python"): + config[key] = "runtime/bin/python" + path = tmp_path / "config.json" + path.write_text(json.dumps(config)) + loaded = configuration(path) + for key in ("v2_python", "v3_python", "metrics_python"): + assert loaded[key] == str(interpreter) + prefix = subprocess.check_output([loaded["v2_python"], "-c", "import sys; print(sys.prefix)"], text=True).strip() + assert Path(prefix) == environment + + +def test_runtime_evidence_detects_installed_package_changes(tmp_path): + import subprocess + import venv + + from dev.releases.mambo_v3.ucloud_release import runtime_environments + + environment = tmp_path / "runtime" + venv.EnvBuilder(with_pip=False).create(environment) + interpreter = str(environment / "bin/python") + config = {key: interpreter for key in ("v2_python", "v3_python", "metrics_python")} + before = runtime_environments(config) + site = Path(subprocess.check_output([interpreter, "-c", "import sysconfig; print(sysconfig.get_path('purelib'))"], text=True).strip()) + dist = site / "example-1.0.dist-info" + dist.mkdir() + metadata = dist / "METADATA" + metadata.write_text("Metadata-Version: 2.1\nName: example\nVersion: 1.0\n") + installed = runtime_environments(config) + assert before != installed + assert installed[interpreter]["packages"] == [["example", "1.0", None]] + metadata.write_text("Metadata-Version: 2.1\nName: example\nVersion: 2.0\n") + assert runtime_environments(config) != installed + + +def test_new_campaign_reuses_assets_and_preserves_existing_evidence(tmp_path, monkeypatch): + from dev.releases.mambo_v3 import ucloud_release + + original = configuration(CONFIG.resolve()) + original["onnx_python"] = str(tmp_path / "onnx/bin/python") + interpreter = str(tmp_path / "venv/bin/python") + monkeypatch.setattr(ucloud_release.sys, "executable", interpreter) + output = tmp_path / "new-campaign" + updated = ucloud_release.new_campaign(original, output) + assert configuration(output / "config.json") == updated + for key in ("v2_python", "v3_python", "metrics_python"): + assert updated[key] == interpreter + assert original[key] != interpreter + for key in ("manifest", "root", "bundle", "legacy_source", "legacy_weights", "hf_cache"): + assert updated[key] == original[key] + assert updated["onnx_python"] == original["onnx_python"] + assert updated["output"] == str(output) + before = (output / "config.json").read_bytes() + with pytest.raises(FileExistsError): + ucloud_release.new_campaign(original, output) + assert (output / "config.json").read_bytes() == before + + +@pytest.mark.parametrize("tamper", [None, "manifest", "environment", "script", "csv", "samples"]) +def test_reuse_completed_v2_only_when_evidence_matches(tmp_path, tamper): + import copy + + from dev.benchmarks.inference.onnx_inference import file_hash + from dev.releases.mambo_v3.evaluation_data import write_json + from dev.releases.mambo_v3.ucloud_release import reuse_v2 + + source = tmp_path / "old/full" + (source / "v2/full").mkdir(parents=True) + (source / "v2/full/mini_metric.csv").write_text("original predictions") + (source / "v2/samples.json").write_text("[]") + report = dict( + status="complete", + csv_sha256={"full": file_hash(source / "v2/full/mini_metric.csv")}, + sample_ids_sha256=file_hash(source / "v2/samples.json"), + ) + write_json(source / "v2/report.json", report) + inputs = dict( + manifest="manifest", + bundle="bundle", + environments={"python": {"version": "same"}}, + scripts={"legacy.py": "same", "dev/releases/mambo_v3/evaluate.py": "old"}, + ) + job = dict(name="v2", command=["python", "--output", "old-output"]) + plan = dict(completed=["v2"], jobs=[job], fingerprint={"inputs": inputs}, reports_sha256={"v2": file_hash(source / "v2/report.json")}) + write_json(source / "plan.json", plan) + frozen = {"inputs": copy.deepcopy(inputs)} + frozen["inputs"]["scripts"]["dev/releases/mambo_v3/evaluate.py"] = "updated-v3-only" + config = dict(reuse_v2_from=str(source.parent), output=str(tmp_path / "new"), v2_python="python") + if tamper == "manifest": + frozen["inputs"]["manifest"] = "different" + elif tamper == "environment": + frozen["inputs"]["environments"]["python"] = {"version": "different"} + elif tamper == "script": + frozen["inputs"]["scripts"]["legacy.py"] = "different" + elif tamper == "csv": + (source / "v2/full/mini_metric.csv").write_text("changed") + elif tamper == "samples": + (source / "v2/samples.json").write_text("changed") + if tamper: + with pytest.raises(ValueError): + reuse_v2(config, "full", job, frozen) + assert not (tmp_path / "new/full/v2").exists() + else: + result = reuse_v2(config, "full", job, frozen) + assert result["source"] == str(source) + assert (tmp_path / "new/full/v2/full/mini_metric.csv").read_text() == "original predictions" diff --git a/tests/training/test_loss.py b/tests/training/test_loss.py index aa2c623..5a1e13a 100644 --- a/tests/training/test_loss.py +++ b/tests/training/test_loss.py @@ -1,40 +1,47 @@ +import pytest import torch from mini_trainer.training.loss import EvenCrossEntropyLoss, class_weight_distribution_regularization from mini_trainer.utils import kl_distill -def test_EvenCrossEntropyLoss(): - loss_fn = EvenCrossEntropyLoss() - input = torch.randn(4, 10) - target = torch.randint(0, 10, (4,)) - loss = loss_fn(input, target) - # loss is (1,) because of broadcasting with max_CE - assert loss.numel() == 1 - loss = loss.sum() # make scalar - assert loss > 0 - - # Check scaling - # Standard CE - ce = torch.nn.CrossEntropyLoss()(input, target) - expected = ce / torch.tensor(input.size(1)).float().log() - assert torch.allclose(loss, expected) - - -def test_kl_distill(): - logits = torch.randn(4, 10) - ema_logits = torch.randn(4, 10) - loss = kl_distill(logits, ema_logits, T=1.0) - assert loss >= 0 - - -def test_regularizations(): - W = torch.randn(10, 32) - - # class_weight_distribution_regularization - reg1 = class_weight_distribution_regularization(W, sparse=False) - assert reg1.numel() == 1 - - # Test sparse - reg4 = class_weight_distribution_regularization(W, sparse=True) - assert reg4.numel() == 1 +@pytest.mark.parametrize("reduction", ["mean", "sum", "none"]) +def test_even_cross_entropy_uniform_predictions(reduction): + logits = torch.zeros(3, 5, dtype=torch.float64, requires_grad=True) + loss = EvenCrossEntropyLoss(reduction=reduction)(logits, torch.tensor([0, 2, 4])) + expected = torch.ones(3 if reduction == "none" else 1, dtype=logits.dtype) + if reduction == "sum": + expected *= 3 + torch.testing.assert_close(loss, expected) + loss.sum().backward() + assert torch.isfinite(logits.grad).all() and logits.grad.norm() > 0 + + +@pytest.mark.parametrize("temperature", [1.0, 3.0]) +def test_distillation_matches_teacher_kl_without_teacher_gradients(temperature): + student = torch.tensor([[0.2, -0.8], [1.1, 0.4]], requires_grad=True) + teacher = torch.tensor([[1.4, -0.1], [-0.5, 0.8]], requires_grad=True) + expected = ( + torch.distributions.kl_divergence( + torch.distributions.Categorical(logits=teacher.detach() / temperature), + torch.distributions.Categorical(logits=student.detach() / temperature), + ).mean() + * temperature**2 + ) + loss = kl_distill(student, teacher, T=temperature) + torch.testing.assert_close(loss, expected) + loss.backward() + assert teacher.grad is None + assert torch.isfinite(student.grad).all() and student.grad.norm() > 0 + + +@pytest.mark.parametrize("sparse", [False, True]) +def test_regularization_penalizes_clustered_directions(sparse): + # 64 classes exceed the sampling threshold; 96 dimensions allow orthogonality. + orthogonal = torch.eye(64, 96) + torch.testing.assert_close(class_weight_distribution_regularization(orthogonal, sparse=sparse), torch.tensor(0.0)) + clustered = (orthogonal + 1).requires_grad_() + penalty = class_weight_distribution_regularization(clustered, sparse=sparse) + assert penalty.ndim == 0 and torch.isfinite(penalty) and penalty > 0 + penalty.backward() + assert torch.isfinite(clustered.grad).all() and clustered.grad.norm() > 0 diff --git a/tests/training/test_muon.py b/tests/training/test_muon.py index bc86fd8..f781f56 100644 --- a/tests/training/test_muon.py +++ b/tests/training/test_muon.py @@ -8,66 +8,56 @@ def test_to_scalar(): assert _to_scalar(0.5) == 0.5 assert _to_scalar(torch.tensor(0.5)) == 0.5 assert _to_scalar(torch.tensor([0.5])) == 0.5 - # Should keep other tensors as is (though function name implies scalar result, - # the code says "If it is not a tensor... kept as is". - # If tensor dim != 0 -> squeeze. - t = torch.randn(2) - assert _to_scalar(t).shape == (2,) + values = torch.tensor([0.25, 0.5]) + torch.testing.assert_close(_to_scalar(values), values) def test_zeropower_via_newtonschulz(): - # Needs 2D matrix - g = torch.eye(4) - out = _zeropower_via_newtonschulz(g, ns_coefficients=(3.4445, -4.7750, 2.0315), ns_steps=5, eps=1e-7) - assert out.shape == (4, 4) - # Check if close to identity (orthogonal of identity is identity) - # Note: Muon NS is quintic and coefficients are specific. - # But for Identity, it should likely remain Identity. - assert out.shape == (4, 4) - # Muon NS implementation scales singular values, so we don't expect exact Identity for Identity input. - # It produces something like US'V^T where S' is randomized/scaled. - # Just check it returns valid values. - assert torch.isfinite(out).all() + result = _zeropower_via_newtonschulz(torch.eye(4), ns_coefficients=(3.4445, -4.7750, 2.0315), ns_steps=5, eps=1e-7) + assert result.shape == (4, 4) + assert torch.isfinite(result).all() -def test_adjust_lr(): - # original: sqrt(max(1, A/B)) - lr = 0.1 - # Square: A=B=10. ratio=1. adjusted=0.1 - adj = _adjust_lr(lr, "original", torch.Size([10, 10])) - assert adj == 0.1 +@pytest.mark.parametrize( + "mode,shape,expected", + [("original", [10, 10], 0.1), ("original", [100, 10], 0.316227766), ("match_rms_adamw", [100, 10], 0.2)], +) +def test_adjust_lr(mode, shape, expected): + assert _adjust_lr(0.1, mode, torch.Size(shape)) == pytest.approx(expected) - # Rect: A=100, B=10. A/B=10. sqrt(10) ~ 3.16. - adj = _adjust_lr(lr, "original", torch.Size([100, 10])) - assert abs(adj - 0.1 * 3.16) < 0.01 - # match_rms_adamw - # 0.2 * sqrt(max(A, B)) - # A=100. 0.2 * 10 = 2.0. - adj = _adjust_lr(lr, "match_rms_adamw", torch.Size([100, 10])) - assert abs(adj - 0.1 * 2.0) < 1e-5 +def test_muon_rejects_nonmatrix_parameters(): + with pytest.raises(ValueError, match="only supports 2D"): + Muon([torch.ones(10)]) -def test_Muon_init(): - p = torch.randn(10, 10) - opt = Muon([p], lr=1e-3) - assert opt.defaults["lr"] == 1e-3 - - # Muon only supports 2D - p_bad = torch.randn(10) - with pytest.raises(ValueError): - Muon([p_bad]) - - -def test_Muon_step(): - p = torch.randn(10, 10, requires_grad=True) - opt = Muon([p], lr=0.1) - - loss = (p**2).sum() +def test_muon_step_reduces_quadratic_loss(): + parameter = torch.nn.Parameter(torch.eye(4)) + optimizer = Muon([parameter], lr=0.1, weight_decay=0) + loss = parameter.square().sum() loss.backward() - - # Step - opt.step() - - # Check if params changed - assert not torch.allclose(p, torch.zeros_like(p)) # well, they were random before. + optimizer.step() + assert torch.isfinite(parameter).all() + assert parameter.square().sum() < loss.detach() + + +@pytest.mark.parametrize("name,use_muon", [("head", True), ("head_nomuon", False)]) +def test_composite_routes_parameters_and_exposes_child_groups(name, use_muon): + from mini_trainer.training.muon import MuonAuxAdamW + + matrix = torch.nn.Parameter(torch.eye(4)) + bias = torch.nn.Parameter(torch.ones(4)) + optimizer = MuonAuxAdamW([{"name": name, "params": [matrix, bias]}], lr=0.01) + expected = {"muon": [matrix], "adamw": [bias]} if use_muon else {"adamw": [matrix, bias]} + assert list(optimizer.optimizers) == list(expected) + for child_name, parameters in expected.items(): + child = getattr(optimizer, child_name) + assert [id(p) for group in child.param_groups for p in group["params"]] == [id(p) for p in parameters] + assert all(any(group is exposed for exposed in optimizer.param_groups) for group in child.param_groups) + # Scheduler changes through the composite must reach every child optimizer. + scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=1, gamma=0.5) + (matrix.sum() + bias.sum()).backward() + optimizer.step() + scheduler.step() + assert optimizer._step_count == 1 + assert all(getattr(optimizer, child).param_groups[0]["lr"] == 0.005 for child in expected) diff --git a/tests/utils/run_compatibility_tests.py b/tests/utils/run_compatibility_tests.py index f629792..b02608b 100755 --- a/tests/utils/run_compatibility_tests.py +++ b/tests/utils/run_compatibility_tests.py @@ -84,7 +84,6 @@ def run_integration_test(model_name: str, online: bool, temp_dir: str) -> tuple[ os.makedirs(os.path.join(input_dir, "class_a"), exist_ok=True) os.makedirs(os.path.join(input_dir, "class_b"), exist_ok=True) - # Configure model_args model_args: dict[str, Any] = {"pretrained": False} if not online: model_args["local_files_only"] = True @@ -114,7 +113,6 @@ def run_integration_test(model_name: str, online: bool, temp_dir: str) -> tuple[ "seed": 42, } - # Redirect standard output/error to silence train prints sys.stdout.flush() sys.stderr.flush() @@ -363,36 +361,26 @@ def main_cli(): print(f" - {m}") print("-" * 60) - # Print blacklist updates - if not args.dry_run: - if added_to_blacklist or removed_from_blacklist: - print("Blacklist Updates:") - if added_to_blacklist: - print(" Added to blacklist:") - for m in sorted(added_to_blacklist): - print(f" - {m}") - if removed_from_blacklist: - print(" Removed from blacklist:") - for m in sorted(removed_from_blacklist): - print(f" - {m}") - else: - print("No blacklist changes detected.") - print("-" * 60) - # Save results once more to be safe - save_results(results) - else: + if args.dry_run: print("Dry-run mode: blacklist updates and result caching were skipped.") if added_to_blacklist or removed_from_blacklist: print("Pending Blacklist Updates (if run without --dry-run):") - if added_to_blacklist: - print(" Would add to blacklist:") - for m in sorted(added_to_blacklist): - print(f" - {m}") - if removed_from_blacklist: - print(" Would remove from blacklist:") - for m in sorted(removed_from_blacklist): - print(f" - {m}") - print("-" * 60) + elif added_to_blacklist or removed_from_blacklist: + print("Blacklist Updates:") + else: + print("No blacklist changes detected.") + + headings = ( + ("Would add to blacklist", "Would remove from blacklist") if args.dry_run else ("Added to blacklist", "Removed from blacklist") + ) + for heading, models in zip(headings, (added_to_blacklist, removed_from_blacklist), strict=True): + if models: + print(f" {heading}:") + for model in sorted(models): + print(f" - {model}") + print("-" * 60) + if not args.dry_run: + save_results(results) if __name__ == "__main__": diff --git a/tests/modeling/test_init.py b/tests/utils/test_core.py similarity index 78% rename from tests/modeling/test_init.py rename to tests/utils/test_core.py index 779b520..cb161e7 100644 --- a/tests/modeling/test_init.py +++ b/tests/utils/test_core.py @@ -1,5 +1,6 @@ import csv from collections import OrderedDict +from typing import Annotated, Union import pytest @@ -9,6 +10,7 @@ filter_ordered_dict, float_signif_decimal, increment_name_dir, + multithread_vectorize, recursive_dfs_attr, write_csv_from_dict, ) @@ -108,3 +110,18 @@ def test_cosine_schedule_with_warmup(): assert fn(i + 1) < fn(i) assert 0.0 < fn(i) < 1.0 assert fn(10) == 0.0 + + +@pytest.mark.parametrize( + "annotation", + [str | int, Union[str, int], Annotated[str | int, "identifier"]], # noqa: UP007 - legacy caller annotations +) +@pytest.mark.parametrize("threshold", [1, 100]) +def test_vectorize_preserves_scalars_and_ordered_iterables(annotation, threshold): + @multithread_vectorize(min_items_to_multithread=threshold, disable=True, max_workers=2) + def convert(value: annotation, factor=2): + return int(value) * factor + + assert convert("12") == convert(12) == 24 + assert convert(["3", 1, "2"], factor=3) == [9, 3, 6] + assert convert(iter(["3", 1, "2"]), factor=3) == [9, 3, 6] diff --git a/tests/utils/test_dendrogram.py b/tests/utils/test_dendrogram.py index 9a60131..1355348 100644 --- a/tests/utils/test_dendrogram.py +++ b/tests/utils/test_dendrogram.py @@ -1,4 +1,4 @@ -"""Large-tree plotting regressions; no network or model downloads.""" +"""Dendrogram metadata and rendering regressions; no network or model downloads.""" import io import sys @@ -7,10 +7,12 @@ import numpy as np import pytest +import torch from matplotlib import pyplot as plt from matplotlib import rc_context import mini_trainer.visualization.dendrogram as d +from mini_trainer.visualization import plot_probabilistic_dendrogram from mini_trainer.visualization._dendrogram_layout import linkage_layout pytestmark = pytest.mark.skipif(not d._HAS_DENDROGRAM_DEPS, reason="Optional dendrogram dependencies missing") @@ -24,6 +26,47 @@ def offline_labels(monkeypatch): d._resolve_labels.cache_clear() +@pytest.mark.parametrize( + "metadata", + [ + pytest.param({"idx2cls": dict(enumerate(("5219173", "2435261", "7429082", "9117798")))}, id="flat"), + pytest.param( + { + "cls2idx": { + "0": { + "Carnivora - Canidae - dog": 0, + "Carnivora - Felidae - cat": 1, + "Rodentia - Muridae - mouse": 2, + "Perissodactyla - Equidae - horse": 3, + } + } + }, + id="hierarchical-json", + ), + pytest.param( + { + "idx2cls": { + 0: {"order": "Carnivora", "species": "dog"}, + 1: {"order": "Carnivora", "species": "cat"}, + 2: {"order": "Rodentia", "species": "mouse"}, + 3: {"order": "Perissodactyla", "species": "horse"}, + } + }, + id="dictionary-labels", + ), + ], +) +def test_model_metadata_forms_render_offline(metadata, monkeypatch): + monkeypatch.setattr(d, "classification_module", lambda _: MagicMock(metadata=metadata)) + monkeypatch.setattr(d, "class_distance", lambda _: [torch.ones(4, 4) - torch.eye(4)]) + fig, info = plot_probabilistic_dendrogram(None)[0] + try: + assert isinstance(info, dict) and all(len(values) == 4 for values in info.values()) + assert len(fig.axes[0].texts) == 4 + finally: + plt.close(fig) + + def test_iterative_layout_matches_existing_newick_geometry(): from Bio import Phylo diff --git a/tests/utils/test_plot.py b/tests/utils/test_plot.py index 23e58df..ab1b002 100644 --- a/tests/utils/test_plot.py +++ b/tests/utils/test_plot.py @@ -1,126 +1,28 @@ -import importlib.util -from unittest.mock import MagicMock, patch - import numpy as np import pytest -import torch from mini_trainer.training import raw_confusion_matrix -from mini_trainer.visualization import plot_probabilistic_dendrogram from mini_trainer.visualization.plot import ( + MIN_DISPLAY_DIM_HEATMAP, _aggregate_matrix_max, + _get_colorbar_ticks_and_labels, _get_scaled_matrix_for_display, ) -has_dendrogram_deps = ( - importlib.util.find_spec("scipy") is not None - and importlib.util.find_spec("Bio") is not None - and importlib.util.find_spec("pycirclize") is not None -) - def test_raw_confusion_matrix(): - # 3 classes: 0, 1, 2 - labels = [0, 1, 2, 0] - preds = [0, 1, 0, 0] - - # Class 0: 2 instances. Both predicted as 0. Correct: 2. Total: 2. - # Class 1: 1 instance. Predicted as 1. Correct: 1. Total: 1. - # Class 2: 1 instance. Predicted as 0. Correct: 0. Total: 1. - - # Confusion matrix (normalized by row/true label) - # Row 0: 2/2 -> column 0=1.0 - # Row 1: 1/1 -> column 1=1.0 - # Row 2: 1 total. Pred 0. -> column 0=1.0 - - cm = raw_confusion_matrix(labels, preds, n_classes=3) - - assert cm.shape == (3, 3) - assert cm[0, 0] == 1.0 - assert cm[1, 1] == 1.0 - assert cm[2, 0] == 1.0 - assert cm[2, 2] == 0.0 + cm = raw_confusion_matrix([0, 1, 2, 0], [0, 1, 0, 0], n_classes=3) + np.testing.assert_array_equal(cm, [[1, 0, 0], [0, 1, 0], [1, 0, 0]]) def test_aggregate_matrix_max(): - mat = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]) - # Aggregate 2x2 blocks by max - # Block (0,0): [[1,2],[5,6]] -> max 6 - # Block (0,1): [[3,4],[7,8]] -> max 8 - # Block (1,0): [[9,10],[13,14]] -> max 14 - # Block (1,1): [[11,12],[15,16]] -> max 16 - - agg = _aggregate_matrix_max(mat, (2, 2)) - expected = np.array([[6, 8], [14, 16]]) - np.testing.assert_array_equal(agg, expected) + mat = np.arange(1, 17).reshape(4, 4) + np.testing.assert_array_equal(_aggregate_matrix_max(mat, (2, 2)), [[6, 8], [14, 16]]) def test_get_scaled_matrix_for_display(): - # Create large matrix - mat = np.zeros((100, 100)) - scaled = _get_scaled_matrix_for_display(mat) - # Should scale up to meet MIN_DISPLAY_DIM_HEATMAP (500) - # 100 < 500. So upscaled by at least 5x5 blocks. - assert scaled.shape[0] >= 500 - assert scaled.shape[1] >= 500 - - -@pytest.mark.skipif(not has_dendrogram_deps, reason="Dendrogram dependencies (scipy, biopython, pycirclize) not installed") -def test_plot_probabilistic_dendrogram(monkeypatch): - import mini_trainer.visualization.dendrogram as dendrogram - - dendrogram._resolve_labels.cache_clear() - monkeypatch.setattr(dendrogram, "resolve_name_or_id", MagicMock(side_effect=ValueError("offline test labels"))) - mock_model = MagicMock() - mock_model_module = MagicMock() - - # 1. Test flat metadata dictionary - mock_model_module.metadata = {"idx2cls": {0: "5219173", 1: "2435261", 2: "7429082", 3: "9117798"}} - - dummy = torch.rand(4, 4) - dummy = dummy + dummy.T # Make it symmetric - dummy.fill_diagonal_(0) # Make diagonal zero - dummy = [dummy] - - with patch("mini_trainer.visualization.dendrogram.classification_module", return_value=mock_model_module): - with patch("mini_trainer.visualization.dendrogram.class_distance", return_value=dummy): - fig, clustering = plot_probabilistic_dendrogram(mock_model)[0] - assert fig is not None - assert isinstance(clustering, dict) and all(len(v) == 4 for v in clustering.values()) - - # 2. Test hierarchical metadata dictionary (e.g. from JSON) - mock_model_module.metadata = { - "cls2idx": { - "0": { - "Carnivora - Canidae - dog": 0, - "Carnivora - Felidae - cat": 1, - "Rodentia - Muridae - mouse": 2, - "Perissodactyla - Equidae - horse": 3, - } - } - } - - with patch("mini_trainer.visualization.dendrogram.classification_module", return_value=mock_model_module): - with patch("mini_trainer.visualization.dendrogram.class_distance", return_value=dummy): - fig, clustering = plot_probabilistic_dendrogram(mock_model)[0] - assert fig is not None - assert isinstance(clustering, dict) and all(len(v) == 4 for v in clustering.values()) - - # 3. Test pathological hierarchical metadata with unhashable dictionaries directly in idx2cls - mock_model_module.metadata = { - "idx2cls": { - 0: {"order": "Carnivora", "species": "dog"}, - 1: {"order": "Carnivora", "species": "cat"}, - 2: {"order": "Rodentia", "species": "mouse"}, - 3: {"order": "Perissodactyla", "species": "horse"}, - } - } - - with patch("mini_trainer.visualization.dendrogram.classification_module", return_value=mock_model_module): - with patch("mini_trainer.visualization.dendrogram.class_distance", return_value=dummy): - fig, clustering = plot_probabilistic_dendrogram(mock_model)[0] - assert fig is not None - assert isinstance(clustering, dict) and all(len(v) == 4 for v in clustering.values()) + scaled = _get_scaled_matrix_for_display(np.zeros((100, 100))) + assert min(scaled.shape) >= MIN_DISPLAY_DIM_HEATMAP @pytest.mark.parametrize("cmap_name", ["magma", "viridis"]) @@ -147,3 +49,16 @@ def test_chunked_heatmap_matches_previous_rgb_pixels(cmap_name, percent): np.testing.assert_array_equal(actual, expected) np.testing.assert_array_equal(values, original) assert (actual_min, actual_max) == (vmin, vmax) + + +@pytest.mark.parametrize("limit", [0, 1, 2, 8]) +@pytest.mark.parametrize("percent", [False, True]) +def test_colorbar_ticks_are_ordered_bounded_and_labeled(limit, percent): + ticks, labels = _get_colorbar_ticks_and_labels(0.001, 1.0, limit, percent) + assert ticks == sorted(set(ticks)) + assert len(ticks) == len(labels) == (2 if limit == 0 else limit) + assert ticks[0] == 0.001 + assert all(0.001 <= tick <= 1.0 for tick in ticks) + if limit != 1: + assert ticks[-1] == 1.0 + assert all(label.endswith("%") == percent for label in labels) diff --git a/uv.lock b/uv.lock index 0165a65..a8aaad7 100644 --- a/uv.lock +++ b/uv.lock @@ -2,24 +2,60 @@ version = 1 revision = 3 requires-python = ">=3.12" 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 != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform == 'win32'", - "python_full_version < '3.13' and sys_platform == 'win32'", - "python_full_version == '3.13.*' and sys_platform == 'emscripten'", - "python_full_version < '3.13' and sys_platform == 'emscripten'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.14' and sys_platform == 'darwin'", - "python_full_version == '3.13.*' and sys_platform == 'darwin'", - "python_full_version < '3.13' and sys_platform == 'darwin'", + "python_full_version >= '3.14' and sys_platform == 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132'", + "python_full_version >= '3.14' and sys_platform == 'emscripten' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132'", + "python_full_version < '3.13' and sys_platform == 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132'", + "python_full_version < '3.13' and sys_platform == 'emscripten' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132'", + "python_full_version >= '3.14' and sys_platform == 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version >= '3.14' and sys_platform == 'emscripten' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version < '3.13' and sys_platform == 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version < '3.13' and sys_platform == 'emscripten' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version >= '3.14' and sys_platform == 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version >= '3.14' and sys_platform == 'emscripten' and extra != 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version < '3.13' and sys_platform == 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version < '3.13' and sys_platform == 'emscripten' and extra != 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version >= '3.14' and sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version >= '3.14' and sys_platform == 'emscripten' and extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version < '3.13' and sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version < '3.13' and sys_platform == 'emscripten' and extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version >= '3.14' and sys_platform == 'darwin' and extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version < '3.13' and sys_platform == 'darwin' and extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version >= '3.14' and sys_platform == 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version >= '3.14' and sys_platform == 'emscripten' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version < '3.13' and sys_platform == 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version < '3.13' and sys_platform == 'emscripten' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", ] conflicts = [[ - { package = "mini-trainer", extra = "cpu" }, - { package = "mini-trainer", extra = "cu126" }, - { package = "mini-trainer", extra = "cu130" }, - { package = "mini-trainer", extra = "cu132" }, + { package = "mt-trainer", extra = "cpu" }, + { package = "mt-trainer", extra = "cu126" }, + { package = "mt-trainer", extra = "cu130" }, + { package = "mt-trainer", extra = "cu132" }, ]] [[package]] @@ -55,7 +91,7 @@ version = "4.13.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "idna" }, - { name = "typing-extensions", marker = "python_full_version < '3.13' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "typing-extensions", marker = "python_full_version < '3.13' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/19/14/2c5dd9f512b66549ae92767a9c7b330ae88e1932ca57876909410251fe13/anyio-4.13.0.tar.gz", hash = "sha256:334b70e641fd2221c1505b3890c69882fe4a2df910cba14d97019b90b24439dc", size = 231622, upload-time = "2026-03-24T12:59:09.671Z" } wheels = [ @@ -125,7 +161,7 @@ name = "cffi" version = "2.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "pycparser", marker = "implementation_name != 'PyPy' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "pycparser", marker = "implementation_name != 'PyPy' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] 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 = [ @@ -255,7 +291,7 @@ name = "click" version = "8.4.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "colorama", marker = "sys_platform == 'win32' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/9b/98/518d8e5081007684232226f475082b30087d0f585e8457db087298259f49/click-8.4.1.tar.gz", hash = "sha256:918b5633eddf6b41c32d4f454bf0de810065c74e3f7dbf8ee5452f8be88d3e96", size = 353007, upload-time = "2026-05-22T04:08:37.769Z" } wheels = [ @@ -435,12 +471,12 @@ name = "cuda-bindings" version = "12.9.6" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "cuda-pathfinder", marker = "(sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-12-mini-trainer-cu126') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "cuda-pathfinder", marker = "extra == 'extra-10-mt-trainer-cu126' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/50/04/8a4d45dc154a8a32982658cc55be291e9778d1197834b15d33427e2f65c1/cuda_bindings-12.9.6-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ea331bc47d9988cc61f0ecc5fa8df9dd188b4493ae1c6688bb1ee8ce8ba1af4", size = 7050347, upload-time = "2026-03-11T14:47:35.221Z" }, @@ -465,12 +501,12 @@ name = "cuda-bindings" version = "13.2.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "cuda-pathfinder", marker = "(sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "cuda-pathfinder" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/52/c8/b2589d68acf7e3d63e2be330b84bc25712e97ed799affbca7edd7eae25d6/cuda_bindings-13.2.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e865447abfb83d6a98ad5130ed3c70b1fc295ae3eeee39fd07b4ddb0671b6788", size = 5722404, upload-time = "2026-03-11T00:12:44.041Z" }, @@ -500,9 +536,9 @@ name = "cuda-toolkit" version = "12.6.3" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] wheels = [ { url = "https://files.pythonhosted.org/packages/ad/88/2dbc37975fffb874418b14380418a1b99cb36f2101fd1d08c54e06ee8c95/cuda_toolkit-12.6.3-py2.py3-none-any.whl", hash = "sha256:79d8605baeb6c2f695761e0efb54bc62dbc3c9e32eb0742df7669c07befaa8f7", size = 2288, upload-time = "2025-08-13T02:03:05.283Z" }, @@ -510,37 +546,37 @@ wheels = [ [package.optional-dependencies] cublas = [ - { name = "nvidia-cublas-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cublas-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] cudart = [ - { name = "nvidia-cuda-runtime-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cuda-runtime-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] cufft = [ - { name = "nvidia-cufft-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cufft-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] cufile = [ - { name = "nvidia-cufile-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cufile-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] cupti = [ - { name = "nvidia-cuda-cupti-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cuda-cupti-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] curand = [ - { name = "nvidia-curand-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-curand-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] cusolver = [ - { name = "nvidia-cusolver-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cusolver-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] cusparse = [ - { name = "nvidia-cusparse-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cusparse-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] nvjitlink = [ - { name = "nvidia-nvjitlink-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-nvjitlink-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] nvrtc = [ - { name = "nvidia-cuda-nvrtc-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cuda-nvrtc-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] nvtx = [ - { name = "nvidia-nvtx-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-nvtx-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] [[package]] @@ -548,9 +584,9 @@ name = "cuda-toolkit" version = "13.0.2" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] wheels = [ { url = "https://files.pythonhosted.org/packages/57/b2/453099f5f3b698d7d0eab38916aac44c7f76229f451709e2eb9db6615dcd/cuda_toolkit-13.0.2-py2.py3-none-any.whl", hash = "sha256:b198824cf2f54003f50d64ada3a0f184b42ca0846c1c94192fa269ecd97a66eb", size = 2364, upload-time = "2025-12-19T23:24:07.328Z" }, @@ -558,34 +594,34 @@ wheels = [ [package.optional-dependencies] cudart = [ - { name = "nvidia-cuda-runtime", version = "13.0.96", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'linux' and extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cuda-runtime", version = "13.0.96", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, ] cufft = [ - { name = "nvidia-cufft", version = "12.0.0.61", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'linux' and extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cufft", version = "12.0.0.61", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, ] cufile = [ - { name = "nvidia-cufile", version = "1.15.1.6", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'linux' and extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cufile", version = "1.15.1.6", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, ] cupti = [ - { name = "nvidia-cuda-cupti", version = "13.0.85", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'linux' and extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cuda-cupti", version = "13.0.85", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, ] curand = [ - { name = "nvidia-curand", version = "10.4.0.35", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'linux' and extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-curand", version = "10.4.0.35", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, ] cusolver = [ - { name = "nvidia-cusolver", version = "12.0.4.66", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'linux' and extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cusolver", version = "12.0.4.66", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, ] cusparse = [ - { name = "nvidia-cusparse", version = "12.6.3.3", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'linux' and extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cusparse", version = "12.6.3.3", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, ] nvjitlink = [ - { name = "nvidia-nvjitlink", version = "13.0.88", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'linux' and extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-nvjitlink", version = "13.0.88", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, ] nvrtc = [ - { name = "nvidia-cuda-nvrtc", version = "13.0.88", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'linux' and extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cuda-nvrtc", version = "13.0.88", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, ] nvtx = [ - { name = "nvidia-nvtx", version = "13.0.85", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'linux' and extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-nvtx", version = "13.0.85", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, ] [[package]] @@ -593,9 +629,9 @@ name = "cuda-toolkit" version = "13.2.1" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] wheels = [ { url = "https://files.pythonhosted.org/packages/bd/6a/f79c134fa8e6d5fe028584933be063ce7961b1a85ce217f261cdda176e48/cuda_toolkit-13.2.1-py2.py3-none-any.whl", hash = "sha256:646d0e3668ce6f78f2312bb9cc0f668b9cbfcbef187eaa6a39eb2ea6dbec2a31", size = 2612, upload-time = "2026-04-14T01:10:36.163Z" }, @@ -603,43 +639,43 @@ wheels = [ [package.optional-dependencies] cublas = [ - { name = "nvidia-cublas", version = "13.4.0.1", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-cuda-nvrtc", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cublas", version = "13.4.0.1", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-cuda-nvrtc", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, ] cudart = [ - { name = "nvidia-cuda-runtime", version = "13.2.75", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cuda-runtime", version = "13.2.75", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, ] cufft = [ - { name = "nvidia-cufft", version = "12.2.0.46", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-nvjitlink", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cufft", version = "12.2.0.46", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-nvjitlink", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, ] cufile = [ - { name = "nvidia-cufile", version = "1.17.1.22", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cufile", version = "1.17.1.22", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (platform_machine == 'aarch64' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (platform_machine == 'x86_64' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform != 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] cupti = [ - { name = "nvidia-cuda-cupti", version = "13.2.75", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cuda-cupti", version = "13.2.75", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, ] curand = [ - { name = "nvidia-curand", version = "10.4.2.55", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-curand", version = "10.4.2.55", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, ] cusolver = [ - { name = "nvidia-cublas", version = "13.4.0.1", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-cusolver", version = "12.2.0.1", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-cusparse", version = "12.7.10.1", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-nvjitlink", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cublas", version = "13.4.0.1", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-cusolver", version = "12.2.0.1", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-cusparse", version = "12.7.10.1", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-nvjitlink", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, ] cusparse = [ - { name = "nvidia-cusparse", version = "12.7.10.1", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-nvjitlink", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cusparse", version = "12.7.10.1", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-nvjitlink", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, ] nvjitlink = [ - { name = "nvidia-nvjitlink", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-nvjitlink", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, ] nvrtc = [ - { name = "nvidia-cuda-nvrtc", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cuda-nvrtc", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, ] nvtx = [ - { name = "nvidia-nvtx", version = "13.2.75", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-nvtx", version = "13.2.75", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, ] [[package]] @@ -988,7 +1024,7 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "filelock" }, { name = "fsspec" }, - { name = "hf-xet", marker = "platform_machine == 'AMD64' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'arm64' or platform_machine == 'x86_64' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "hf-xet", marker = "platform_machine == 'AMD64' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'arm64' or platform_machine == 'x86_64' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, { name = "httpx" }, { name = "packaging" }, { name = "pyyaml" }, @@ -1039,7 +1075,7 @@ name = "ipykernel" version = "7.2.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "appnope", marker = "sys_platform == 'darwin' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "appnope", marker = "sys_platform == 'darwin' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, { name = "comm" }, { name = "debugpy" }, { name = "ipython" }, @@ -1063,12 +1099,12 @@ name = "ipython" version = "9.13.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "colorama", marker = "sys_platform == 'win32' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, { name = "decorator" }, { name = "ipython-pygments-lexers" }, { name = "jedi" }, { name = "matplotlib-inline" }, - { name = "pexpect", marker = "(sys_platform != 'emscripten' and sys_platform != 'win32') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "pexpect", marker = "(sys_platform != 'emscripten' and sys_platform != 'win32') or (sys_platform == 'emscripten' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'emscripten' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'emscripten' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'emscripten' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, { name = "prompt-toolkit" }, { name = "psutil" }, { name = "pygments" }, @@ -1416,8 +1452,58 @@ wheels = [ ] [[package]] -name = "mini-trainer" -version = "0.2.0" +name = "ml-dtypes" +version = "0.6.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/12/72/307d7c4bd0600601c7133fba5cb78af7db968152951c1cd473abb1cda782/ml_dtypes-0.6.0.tar.gz", hash = "sha256:5e60251d32ced5598972e4d5e06a2f044341f9291402551a3f6f0ec44f9299b0", size = 3032327, upload-time = "2026-08-13T14:14:40.215Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/84/6a/441eb053b078954f7fea284dfb288701884d0a1404d39babb858e1649023/ml_dtypes-0.6.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:5359c588cc62de6f78d7430f06b65853d884955494d86d6ad90b6dd64a3f3a08", size = 565447, upload-time = "2026-08-13T14:14:01.737Z" }, + { url = "https://files.pythonhosted.org/packages/ed/cf/87e8a6c57eed63a91782a0d229856ddf73e138ce004dd71e2799a9dcdb33/ml_dtypes-0.6.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:37da32aa97749251025666d62372775019594577b9c9e9cfda83bed48d778fdb", size = 360227, upload-time = "2026-08-13T14:14:02.938Z" }, + { url = "https://files.pythonhosted.org/packages/c7/f9/7d76c1eae866f5d4636401b31b6d6dd90e4b4ced1fa7cfdfcca9c60e4bd3/ml_dtypes-0.6.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3b4a480aa8fd54a1805b8ac10f3f91763926a74f73c0c364c10f9231854f4170", size = 409890, upload-time = "2026-08-13T14:14:04.248Z" }, + { url = "https://files.pythonhosted.org/packages/ba/db/9c61ec2760b5cbfb1c6558d5c991a6d8fd3271053c32db20506a9a90272b/ml_dtypes-0.6.0-cp312-cp312-win_amd64.whl", hash = "sha256:2a3e9d53925597fbffafd2a37048dadeddd0bdaba58058f6ae0869ed709a184d", size = 439333, upload-time = "2026-08-13T14:14:05.501Z" }, + { url = "https://files.pythonhosted.org/packages/6a/57/780ca3e5ab135b9fbdd8e5441abf5f801b30398371b691291e05ab9834c0/ml_dtypes-0.6.0-cp312-cp312-win_arm64.whl", hash = "sha256:6eaed129a4afe90694b8685e2f9b6294849f5eda4af9a15be83a4326eeebd775", size = 552268, upload-time = "2026-08-13T14:14:06.866Z" }, + { url = "https://files.pythonhosted.org/packages/50/51/fd1582b8f5ed8a9e7be0e161a6ea0dff70cb280479a12178df0b3a72700e/ml_dtypes-0.6.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:084dfe51a7ad58b171f05115f8226ed4233a454a1611371947e806e76f0c638d", size = 565468, upload-time = "2026-08-13T14:14:08.5Z" }, + { url = "https://files.pythonhosted.org/packages/d2/22/20fd70ca6ed12446cb92d5b2a7745bd185f9d8b8cdeeadad976574398e6b/ml_dtypes-0.6.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:28d676428b104bb9717b0928bc5c5129f2d6b51b6727587cc4289e7bf8713cb5", size = 360232, upload-time = "2026-08-13T14:14:09.873Z" }, + { url = "https://files.pythonhosted.org/packages/89/a5/da8ae6c6f1babe4b68e3e55d43d39b529e29774f10e0910671a6b8c86eb8/ml_dtypes-0.6.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:26b1f1fa4f0435a2946859823f6e2bf06796f1e9f10f5a05b08a5e3c8f46ff69", size = 410169, upload-time = "2026-08-13T14:14:11.036Z" }, + { url = "https://files.pythonhosted.org/packages/e2/55/4561acefa00fa4bcbfb82ca6a48578b41f372cd7dd7cdd6eb4720abc2e5f/ml_dtypes-0.6.0-cp313-cp313-win_amd64.whl", hash = "sha256:fb87f46b4f7ad7b5d3ad8f4b452b024bd4229d44c8ff934798c1fe656210387a", size = 439357, upload-time = "2026-08-13T14:14:12.172Z" }, + { url = "https://files.pythonhosted.org/packages/b1/5d/6a01538e507ef0ed5e879985b13a92467bf8960696fb1131f8b8cadc60ff/ml_dtypes-0.6.0-cp313-cp313-win_arm64.whl", hash = "sha256:57ed0d6b4ac5e7868361303a9c57fbcf63b768236ee14456f585dfcf260d0292", size = 552278, upload-time = "2026-08-13T14:14:13.539Z" }, + { url = "https://files.pythonhosted.org/packages/d9/7a/97dc35667b7c9db33c5344c673cd27f87e34771875ea7100138726132ac9/ml_dtypes-0.6.0-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:84fa136b8602c8c39e3b6cb24918960cd6f36cade7a70376f56770729cd56510", size = 562551, upload-time = "2026-08-13T14:14:14.774Z" }, + { url = "https://files.pythonhosted.org/packages/db/48/77f0ede10558d0d935da2e3276ed7e9c8cc2bad3463b9a0b66b03fc60be2/ml_dtypes-0.6.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:317be9967fb84b0ce4e80e6b1bf71213d21971621cf6f1e501a63602a95297bf", size = 360334, upload-time = "2026-08-13T14:14:16.079Z" }, + { url = "https://files.pythonhosted.org/packages/1c/b1/1831dd8c9b06c013085d31a2ac4f03392d43bd36bfc6ff591a08bcedc1cf/ml_dtypes-0.6.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8f490c003369ce60e514a0c3b12374f05274c101fee1bead6740ec8a564032b0", size = 409966, upload-time = "2026-08-13T14:14:17.477Z" }, + { url = "https://files.pythonhosted.org/packages/ff/ad/9c32c53f823dda3742df19a79c10bc198365937873ea125ba65747440c23/ml_dtypes-0.6.0-cp314-cp314-win_amd64.whl", hash = "sha256:d574c2b28921dc72e869df248f1a278f6eee176a1f237c8642e1a71eb15f3977", size = 457224, upload-time = "2026-08-13T14:14:18.608Z" }, + { url = "https://files.pythonhosted.org/packages/41/3d/dd98205418a13353d41c52bf5326d8cbec515aace46174e23c6ea01c2978/ml_dtypes-0.6.0-cp314-cp314-win_arm64.whl", hash = "sha256:f4adb4af61516510d786cf8c01851a66f6d3ddfa79e1144deaa5b40d8507231e", size = 568378, upload-time = "2026-08-13T14:14:19.843Z" }, + { url = "https://files.pythonhosted.org/packages/65/36/32e7beef3281fed74883451477ad976364323206dbfaa95e948ba788dac7/ml_dtypes-0.6.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:3e169214e0d80ff1c038e1b3017e33c23e43bdf948d42d31de8283111c7e2fa3", size = 590177, upload-time = "2026-08-13T14:14:20.971Z" }, + { url = "https://files.pythonhosted.org/packages/d7/a2/99b3d9b3c984b3bd1e81d8244f1fa2f812e44060d853205b2df6271aa17c/ml_dtypes-0.6.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:573b11f3c327e17ef3826d266e676cf1149a1f3016f822a05f2306c55d8246bf", size = 363142, upload-time = "2026-08-13T14:14:22.463Z" }, + { url = "https://files.pythonhosted.org/packages/0c/fb/8091c0aee7f2712de99c7fd4b1642382644dec6a4962effe4f5b9d16a973/ml_dtypes-0.6.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b76fa1d3f92967d58289ac47ab7458ede66e6f3527fff3e59142aee57d9307cd", size = 430645, upload-time = "2026-08-13T14:14:23.737Z" }, + { url = "https://files.pythonhosted.org/packages/c4/6f/962d2c589513b5930d05b6eae5fbd22ad8bbcf26bb763449f3d8f912360f/ml_dtypes-0.6.0-cp314-cp314t-win_amd64.whl", hash = "sha256:3be9911d953f97cddded4b9961d7b650473b7e55806d20f6176f8356dfe7b38e", size = 465667, upload-time = "2026-08-13T14:14:25.04Z" }, + { url = "https://files.pythonhosted.org/packages/aa/ca/bcb25e246edd19af5fa1cf6267040bd9977a7afca846e6cfd4a52078b44f/ml_dtypes-0.6.0-cp314-cp314t-win_arm64.whl", hash = "sha256:e74266ca8e97874a937b7646378c178025650a236584f7474d10d8086a6edea3", size = 572706, upload-time = "2026-08-13T14:14:26.296Z" }, + { url = "https://files.pythonhosted.org/packages/12/42/46cb442648e3c774d8cb25f2e1e41d496cdcc91fbe9c2a6f75c0b8df7af6/ml_dtypes-0.6.0-cp315-cp315-macosx_10_15_universal2.whl", hash = "sha256:b1b503864fada3f74fabf8d9fee7b4c1cbe956301e6fdece975d5f77c2fce958", size = 562550, upload-time = "2026-08-13T14:14:27.542Z" }, + { url = "https://files.pythonhosted.org/packages/07/56/844eff5af7a2d1a09d75df12c70225c3a6b6a771f95876b2bf5f7d10ad44/ml_dtypes-0.6.0-cp315-cp315-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c6ad60af4102789a5c09824004beade2f7f28cd1cd581ee5c170d9dc2fbb00e", size = 360332, upload-time = "2026-08-13T14:14:28.767Z" }, + { url = "https://files.pythonhosted.org/packages/b6/29/b7165a3a76364a5baa6aa4ee82a0adf73a3c014b8cd126120b62cc087992/ml_dtypes-0.6.0-cp315-cp315-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d4f1b9329a251e4affe3bb58f4d3e2db22a714396fd7ffb40d0b5db423c24d17", size = 409964, upload-time = "2026-08-13T14:14:30.023Z" }, + { url = "https://files.pythonhosted.org/packages/c8/2e/f61c54a0544b6a170ac1bb89bcf406af53fb2deffc5476b6d2d3df5ba13e/ml_dtypes-0.6.0-cp315-cp315-win_amd64.whl", hash = "sha256:488c99ab181a2f59d9ec3b12c5fa11ec904e92be2c4ba18cded54dd7501208fe", size = 457249, upload-time = "2026-08-13T14:14:31.213Z" }, + { url = "https://files.pythonhosted.org/packages/63/00/bee1bc9faa02a46e7a851019fd23f47ca1f906609edbec8b6ba5decc3cc3/ml_dtypes-0.6.0-cp315-cp315-win_arm64.whl", hash = "sha256:de9d14748dbf3968951436ef514a29c9d1fe438aa680d110134ee2f7a9f9df18", size = 568381, upload-time = "2026-08-13T14:14:32.548Z" }, + { url = "https://files.pythonhosted.org/packages/72/f7/9a5edede28f73185fd51d75030ef7f11d76997bab3a92427d986e54fe2eb/ml_dtypes-0.6.0-cp315-cp315t-macosx_10_15_universal2.whl", hash = "sha256:e25bb3b0ad1217b60626e4ed45b10ca170c41d99fbe44a12bebc1e07ec4aad55", size = 589877, upload-time = "2026-08-13T14:14:33.695Z" }, + { url = "https://files.pythonhosted.org/packages/fd/81/d5924a141b850b606eb027493c9c3ca3c665cca5163af3f5b6e5e3345503/ml_dtypes-0.6.0-cp315-cp315t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:31f1ce979d31a357e95aa81812f20412c8c954fa43c44ee3ead1e1c8a78575ef", size = 362788, upload-time = "2026-08-13T14:14:34.996Z" }, + { url = "https://files.pythonhosted.org/packages/59/8f/3298e3f334832bc28dd144af6b99cdc93502a8687e71922ea68b0a319929/ml_dtypes-0.6.0-cp315-cp315t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e2d6149f3a57f405bcad5fb41e03218b8373936253f23e1ca84c0108abbc3392", size = 430823, upload-time = "2026-08-13T14:14:36.44Z" }, + { url = "https://files.pythonhosted.org/packages/93/d2/f2dbf118f42ce4c325a139c9236737f436b7f8e00cd18701c99ef2405e6f/ml_dtypes-0.6.0-cp315-cp315t-win_amd64.whl", hash = "sha256:ce7563e0b1a4482cbc1b4a6272145e54e4489e54fe7428f94908c3d87103abfa", size = 465119, upload-time = "2026-08-13T14:14:37.776Z" }, + { url = "https://files.pythonhosted.org/packages/5a/ff/bda40387b5c5c64254595f4d81a12351770856acc5de4e6d43606a31f161/ml_dtypes-0.6.0-cp315-cp315t-win_arm64.whl", hash = "sha256:f6cb525101b6b903779188c1e9e9490c343b455ab822883e02cf01e5547338d2", size = 572666, upload-time = "2026-08-13T14:14:38.993Z" }, +] + +[[package]] +name = "mpmath" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e0/47/dd32fa426cc72114383ac549964eecb20ecfd886d1e5ccf5340b55b02f57/mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f", size = 508106, upload-time = "2023-03-07T16:47:11.061Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c", size = 536198, upload-time = "2023-03-07T16:47:09.197Z" }, +] + +[[package]] +name = "mt-trainer" +version = "0.3.0" source = { editable = "." } dependencies = [ { name = "diskcache" }, @@ -1425,18 +1511,18 @@ dependencies = [ { name = "numpy" }, { name = "psutil" }, { name = "pyyaml" }, - { name = "torch", version = "2.12.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torch", version = "2.12.0", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu130' and extra != 'extra-12-mini-trainer-cu132')" }, - { name = "torch", version = "2.12.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torch", version = "2.12.0+cu126", source = { registry = "https://download.pytorch.org/whl/cu126" }, marker = "extra == 'extra-12-mini-trainer-cu126' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torch", version = "2.12.0+cu130", source = { registry = "https://download.pytorch.org/whl/cu130" }, marker = "extra == 'extra-12-mini-trainer-cu130' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torch", version = "2.12.0+cu132", source = { registry = "https://download.pytorch.org/whl/cu132" }, marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torchvision", version = "0.27.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torchvision", version = "0.27.0", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu130' and extra != 'extra-12-mini-trainer-cu132')" }, - { name = "torchvision", version = "0.27.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torchvision", version = "0.27.0+cu126", source = { registry = "https://download.pytorch.org/whl/cu126" }, marker = "extra == 'extra-12-mini-trainer-cu126' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torchvision", version = "0.27.0+cu130", source = { registry = "https://download.pytorch.org/whl/cu130" }, marker = "extra == 'extra-12-mini-trainer-cu130' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torchvision", version = "0.27.0+cu132", source = { registry = "https://download.pytorch.org/whl/cu132" }, marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "torch", version = "2.12.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torch", version = "2.12.0", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132')" }, + { name = "torch", version = "2.12.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torch", version = "2.12.0+cu126", source = { registry = "https://download.pytorch.org/whl/cu126" }, marker = "extra == 'extra-10-mt-trainer-cu126' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torch", version = "2.12.0+cu130", source = { registry = "https://download.pytorch.org/whl/cu130" }, marker = "extra == 'extra-10-mt-trainer-cu130' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torch", version = "2.12.0+cu132", source = { registry = "https://download.pytorch.org/whl/cu132" }, marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torchvision", version = "0.27.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torchvision", version = "0.27.0", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132')" }, + { name = "torchvision", version = "0.27.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torchvision", version = "0.27.0+cu126", source = { registry = "https://download.pytorch.org/whl/cu126" }, marker = "extra == 'extra-10-mt-trainer-cu126' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torchvision", version = "0.27.0+cu130", source = { registry = "https://download.pytorch.org/whl/cu130" }, marker = "extra == 'extra-10-mt-trainer-cu130' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torchvision", version = "0.27.0+cu132", source = { registry = "https://download.pytorch.org/whl/cu132" }, marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, { name = "tqdm" }, ] @@ -1463,10 +1549,10 @@ bioclip = [ { name = "open-clip-torch" }, ] cpu = [ - { name = "torch", version = "2.12.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torch", version = "2.12.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torchvision", version = "0.27.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torchvision", version = "0.27.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "torch", version = "2.12.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torch", version = "2.12.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torchvision", version = "0.27.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torchvision", version = "0.27.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] cu126 = [ { name = "torch", version = "2.12.0+cu126", source = { registry = "https://download.pytorch.org/whl/cu126" } }, @@ -1524,12 +1610,12 @@ requires-dist = [ { name = "ipykernel", marker = "extra == 'notebook'" }, { name = "ipywidgets", marker = "extra == 'notebook'" }, { name = "matplotlib" }, - { name = "mini-trainer", extras = ["bioclip"], marker = "extra == 'all'" }, - { name = "mini-trainer", extras = ["export"], marker = "extra == 'all'" }, - { name = "mini-trainer", extras = ["notebook"], marker = "extra == 'all'" }, - { name = "mini-trainer", extras = ["recommended"], marker = "extra == 'all'" }, - { name = "mini-trainer", extras = ["timm"], marker = "extra == 'all'" }, - { name = "mini-trainer", extras = ["transformers"], marker = "extra == 'all'" }, + { name = "mt-trainer", extras = ["bioclip"], marker = "extra == 'all'" }, + { name = "mt-trainer", extras = ["export"], marker = "extra == 'all'" }, + { name = "mt-trainer", extras = ["notebook"], marker = "extra == 'all'" }, + { name = "mt-trainer", extras = ["recommended"], marker = "extra == 'all'" }, + { name = "mt-trainer", extras = ["timm"], marker = "extra == 'all'" }, + { name = "mt-trainer", extras = ["transformers"], marker = "extra == 'all'" }, { name = "numpy", specifier = ">=2.4.0" }, { name = "onnx", marker = "extra == 'export'", specifier = ">=1.17" }, { name = "onnxruntime", marker = "extra == 'export'", specifier = ">=1.20" }, @@ -1545,16 +1631,16 @@ requires-dist = [ { name = "tensorboard", marker = "extra == 'recommended'" }, { name = "timm", marker = "extra == 'timm'" }, { name = "torch", specifier = ">=2.11" }, - { name = "torch", marker = "extra == 'cpu'", specifier = ">=2.11", index = "https://download.pytorch.org/whl/cpu", conflict = { package = "mini-trainer", extra = "cpu" } }, - { name = "torch", marker = "extra == 'cu126'", specifier = ">=2.11", index = "https://download.pytorch.org/whl/cu126", conflict = { package = "mini-trainer", extra = "cu126" } }, - { name = "torch", marker = "extra == 'cu130'", specifier = ">=2.11", index = "https://download.pytorch.org/whl/cu130", conflict = { package = "mini-trainer", extra = "cu130" } }, - { name = "torch", marker = "extra == 'cu132'", specifier = ">=2.11", index = "https://download.pytorch.org/whl/cu132", conflict = { package = "mini-trainer", extra = "cu132" } }, + { name = "torch", marker = "extra == 'cpu'", specifier = ">=2.11", index = "https://download.pytorch.org/whl/cpu", conflict = { package = "mt-trainer", extra = "cpu" } }, + { name = "torch", marker = "extra == 'cu126'", specifier = ">=2.11", index = "https://download.pytorch.org/whl/cu126", conflict = { package = "mt-trainer", extra = "cu126" } }, + { name = "torch", marker = "extra == 'cu130'", specifier = ">=2.11", index = "https://download.pytorch.org/whl/cu130", conflict = { package = "mt-trainer", extra = "cu130" } }, + { name = "torch", marker = "extra == 'cu132'", specifier = ">=2.11", index = "https://download.pytorch.org/whl/cu132", conflict = { package = "mt-trainer", extra = "cu132" } }, { name = "torchao", marker = "extra == 'quantization'", specifier = ">=0.17,<0.18" }, { name = "torchvision" }, - { name = "torchvision", marker = "extra == 'cpu'", index = "https://download.pytorch.org/whl/cpu", conflict = { package = "mini-trainer", extra = "cpu" } }, - { name = "torchvision", marker = "extra == 'cu126'", index = "https://download.pytorch.org/whl/cu126", conflict = { package = "mini-trainer", extra = "cu126" } }, - { name = "torchvision", marker = "extra == 'cu130'", index = "https://download.pytorch.org/whl/cu130", conflict = { package = "mini-trainer", extra = "cu130" } }, - { name = "torchvision", marker = "extra == 'cu132'", index = "https://download.pytorch.org/whl/cu132", conflict = { package = "mini-trainer", extra = "cu132" } }, + { name = "torchvision", marker = "extra == 'cpu'", index = "https://download.pytorch.org/whl/cpu", conflict = { package = "mt-trainer", extra = "cpu" } }, + { name = "torchvision", marker = "extra == 'cu126'", index = "https://download.pytorch.org/whl/cu126", conflict = { package = "mt-trainer", extra = "cu126" } }, + { name = "torchvision", marker = "extra == 'cu130'", index = "https://download.pytorch.org/whl/cu130", conflict = { package = "mt-trainer", extra = "cu130" } }, + { name = "torchvision", marker = "extra == 'cu132'", index = "https://download.pytorch.org/whl/cu132", conflict = { package = "mt-trainer", extra = "cu132" } }, { name = "tqdm" }, { name = "transformers", marker = "extra == 'transformers'" }, { name = "wandb", marker = "extra == 'recommended'" }, @@ -1569,56 +1655,6 @@ dev = [ { name = "ruff", specifier = ">=0.14.5" }, ] -[[package]] -name = "ml-dtypes" -version = "0.6.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/12/72/307d7c4bd0600601c7133fba5cb78af7db968152951c1cd473abb1cda782/ml_dtypes-0.6.0.tar.gz", hash = "sha256:5e60251d32ced5598972e4d5e06a2f044341f9291402551a3f6f0ec44f9299b0", size = 3032327, upload-time = "2026-08-13T14:14:40.215Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/84/6a/441eb053b078954f7fea284dfb288701884d0a1404d39babb858e1649023/ml_dtypes-0.6.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:5359c588cc62de6f78d7430f06b65853d884955494d86d6ad90b6dd64a3f3a08", size = 565447, upload-time = "2026-08-13T14:14:01.737Z" }, - { url = "https://files.pythonhosted.org/packages/ed/cf/87e8a6c57eed63a91782a0d229856ddf73e138ce004dd71e2799a9dcdb33/ml_dtypes-0.6.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:37da32aa97749251025666d62372775019594577b9c9e9cfda83bed48d778fdb", size = 360227, upload-time = "2026-08-13T14:14:02.938Z" }, - { url = "https://files.pythonhosted.org/packages/c7/f9/7d76c1eae866f5d4636401b31b6d6dd90e4b4ced1fa7cfdfcca9c60e4bd3/ml_dtypes-0.6.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3b4a480aa8fd54a1805b8ac10f3f91763926a74f73c0c364c10f9231854f4170", size = 409890, upload-time = "2026-08-13T14:14:04.248Z" }, - { url = "https://files.pythonhosted.org/packages/ba/db/9c61ec2760b5cbfb1c6558d5c991a6d8fd3271053c32db20506a9a90272b/ml_dtypes-0.6.0-cp312-cp312-win_amd64.whl", hash = "sha256:2a3e9d53925597fbffafd2a37048dadeddd0bdaba58058f6ae0869ed709a184d", size = 439333, upload-time = "2026-08-13T14:14:05.501Z" }, - { url = "https://files.pythonhosted.org/packages/6a/57/780ca3e5ab135b9fbdd8e5441abf5f801b30398371b691291e05ab9834c0/ml_dtypes-0.6.0-cp312-cp312-win_arm64.whl", hash = "sha256:6eaed129a4afe90694b8685e2f9b6294849f5eda4af9a15be83a4326eeebd775", size = 552268, upload-time = "2026-08-13T14:14:06.866Z" }, - { url = "https://files.pythonhosted.org/packages/50/51/fd1582b8f5ed8a9e7be0e161a6ea0dff70cb280479a12178df0b3a72700e/ml_dtypes-0.6.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:084dfe51a7ad58b171f05115f8226ed4233a454a1611371947e806e76f0c638d", size = 565468, upload-time = "2026-08-13T14:14:08.5Z" }, - { url = "https://files.pythonhosted.org/packages/d2/22/20fd70ca6ed12446cb92d5b2a7745bd185f9d8b8cdeeadad976574398e6b/ml_dtypes-0.6.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:28d676428b104bb9717b0928bc5c5129f2d6b51b6727587cc4289e7bf8713cb5", size = 360232, upload-time = "2026-08-13T14:14:09.873Z" }, - { url = "https://files.pythonhosted.org/packages/89/a5/da8ae6c6f1babe4b68e3e55d43d39b529e29774f10e0910671a6b8c86eb8/ml_dtypes-0.6.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:26b1f1fa4f0435a2946859823f6e2bf06796f1e9f10f5a05b08a5e3c8f46ff69", size = 410169, upload-time = "2026-08-13T14:14:11.036Z" }, - { url = "https://files.pythonhosted.org/packages/e2/55/4561acefa00fa4bcbfb82ca6a48578b41f372cd7dd7cdd6eb4720abc2e5f/ml_dtypes-0.6.0-cp313-cp313-win_amd64.whl", hash = "sha256:fb87f46b4f7ad7b5d3ad8f4b452b024bd4229d44c8ff934798c1fe656210387a", size = 439357, upload-time = "2026-08-13T14:14:12.172Z" }, - { url = "https://files.pythonhosted.org/packages/b1/5d/6a01538e507ef0ed5e879985b13a92467bf8960696fb1131f8b8cadc60ff/ml_dtypes-0.6.0-cp313-cp313-win_arm64.whl", hash = "sha256:57ed0d6b4ac5e7868361303a9c57fbcf63b768236ee14456f585dfcf260d0292", size = 552278, upload-time = "2026-08-13T14:14:13.539Z" }, - { url = "https://files.pythonhosted.org/packages/d9/7a/97dc35667b7c9db33c5344c673cd27f87e34771875ea7100138726132ac9/ml_dtypes-0.6.0-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:84fa136b8602c8c39e3b6cb24918960cd6f36cade7a70376f56770729cd56510", size = 562551, upload-time = "2026-08-13T14:14:14.774Z" }, - { url = "https://files.pythonhosted.org/packages/db/48/77f0ede10558d0d935da2e3276ed7e9c8cc2bad3463b9a0b66b03fc60be2/ml_dtypes-0.6.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:317be9967fb84b0ce4e80e6b1bf71213d21971621cf6f1e501a63602a95297bf", size = 360334, upload-time = "2026-08-13T14:14:16.079Z" }, - { url = "https://files.pythonhosted.org/packages/1c/b1/1831dd8c9b06c013085d31a2ac4f03392d43bd36bfc6ff591a08bcedc1cf/ml_dtypes-0.6.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8f490c003369ce60e514a0c3b12374f05274c101fee1bead6740ec8a564032b0", size = 409966, upload-time = "2026-08-13T14:14:17.477Z" }, - { url = "https://files.pythonhosted.org/packages/ff/ad/9c32c53f823dda3742df19a79c10bc198365937873ea125ba65747440c23/ml_dtypes-0.6.0-cp314-cp314-win_amd64.whl", hash = "sha256:d574c2b28921dc72e869df248f1a278f6eee176a1f237c8642e1a71eb15f3977", size = 457224, upload-time = "2026-08-13T14:14:18.608Z" }, - { url = "https://files.pythonhosted.org/packages/41/3d/dd98205418a13353d41c52bf5326d8cbec515aace46174e23c6ea01c2978/ml_dtypes-0.6.0-cp314-cp314-win_arm64.whl", hash = "sha256:f4adb4af61516510d786cf8c01851a66f6d3ddfa79e1144deaa5b40d8507231e", size = 568378, upload-time = "2026-08-13T14:14:19.843Z" }, - { url = "https://files.pythonhosted.org/packages/65/36/32e7beef3281fed74883451477ad976364323206dbfaa95e948ba788dac7/ml_dtypes-0.6.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:3e169214e0d80ff1c038e1b3017e33c23e43bdf948d42d31de8283111c7e2fa3", size = 590177, upload-time = "2026-08-13T14:14:20.971Z" }, - { url = "https://files.pythonhosted.org/packages/d7/a2/99b3d9b3c984b3bd1e81d8244f1fa2f812e44060d853205b2df6271aa17c/ml_dtypes-0.6.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:573b11f3c327e17ef3826d266e676cf1149a1f3016f822a05f2306c55d8246bf", size = 363142, upload-time = "2026-08-13T14:14:22.463Z" }, - { url = "https://files.pythonhosted.org/packages/0c/fb/8091c0aee7f2712de99c7fd4b1642382644dec6a4962effe4f5b9d16a973/ml_dtypes-0.6.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b76fa1d3f92967d58289ac47ab7458ede66e6f3527fff3e59142aee57d9307cd", size = 430645, upload-time = "2026-08-13T14:14:23.737Z" }, - { url = "https://files.pythonhosted.org/packages/c4/6f/962d2c589513b5930d05b6eae5fbd22ad8bbcf26bb763449f3d8f912360f/ml_dtypes-0.6.0-cp314-cp314t-win_amd64.whl", hash = "sha256:3be9911d953f97cddded4b9961d7b650473b7e55806d20f6176f8356dfe7b38e", size = 465667, upload-time = "2026-08-13T14:14:25.04Z" }, - { url = "https://files.pythonhosted.org/packages/aa/ca/bcb25e246edd19af5fa1cf6267040bd9977a7afca846e6cfd4a52078b44f/ml_dtypes-0.6.0-cp314-cp314t-win_arm64.whl", hash = "sha256:e74266ca8e97874a937b7646378c178025650a236584f7474d10d8086a6edea3", size = 572706, upload-time = "2026-08-13T14:14:26.296Z" }, - { url = "https://files.pythonhosted.org/packages/12/42/46cb442648e3c774d8cb25f2e1e41d496cdcc91fbe9c2a6f75c0b8df7af6/ml_dtypes-0.6.0-cp315-cp315-macosx_10_15_universal2.whl", hash = "sha256:b1b503864fada3f74fabf8d9fee7b4c1cbe956301e6fdece975d5f77c2fce958", size = 562550, upload-time = "2026-08-13T14:14:27.542Z" }, - { url = "https://files.pythonhosted.org/packages/07/56/844eff5af7a2d1a09d75df12c70225c3a6b6a771f95876b2bf5f7d10ad44/ml_dtypes-0.6.0-cp315-cp315-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c6ad60af4102789a5c09824004beade2f7f28cd1cd581ee5c170d9dc2fbb00e", size = 360332, upload-time = "2026-08-13T14:14:28.767Z" }, - { url = "https://files.pythonhosted.org/packages/b6/29/b7165a3a76364a5baa6aa4ee82a0adf73a3c014b8cd126120b62cc087992/ml_dtypes-0.6.0-cp315-cp315-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d4f1b9329a251e4affe3bb58f4d3e2db22a714396fd7ffb40d0b5db423c24d17", size = 409964, upload-time = "2026-08-13T14:14:30.023Z" }, - { url = "https://files.pythonhosted.org/packages/c8/2e/f61c54a0544b6a170ac1bb89bcf406af53fb2deffc5476b6d2d3df5ba13e/ml_dtypes-0.6.0-cp315-cp315-win_amd64.whl", hash = "sha256:488c99ab181a2f59d9ec3b12c5fa11ec904e92be2c4ba18cded54dd7501208fe", size = 457249, upload-time = "2026-08-13T14:14:31.213Z" }, - { url = "https://files.pythonhosted.org/packages/63/00/bee1bc9faa02a46e7a851019fd23f47ca1f906609edbec8b6ba5decc3cc3/ml_dtypes-0.6.0-cp315-cp315-win_arm64.whl", hash = "sha256:de9d14748dbf3968951436ef514a29c9d1fe438aa680d110134ee2f7a9f9df18", size = 568381, upload-time = "2026-08-13T14:14:32.548Z" }, - { url = "https://files.pythonhosted.org/packages/72/f7/9a5edede28f73185fd51d75030ef7f11d76997bab3a92427d986e54fe2eb/ml_dtypes-0.6.0-cp315-cp315t-macosx_10_15_universal2.whl", hash = "sha256:e25bb3b0ad1217b60626e4ed45b10ca170c41d99fbe44a12bebc1e07ec4aad55", size = 589877, upload-time = "2026-08-13T14:14:33.695Z" }, - { url = "https://files.pythonhosted.org/packages/fd/81/d5924a141b850b606eb027493c9c3ca3c665cca5163af3f5b6e5e3345503/ml_dtypes-0.6.0-cp315-cp315t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:31f1ce979d31a357e95aa81812f20412c8c954fa43c44ee3ead1e1c8a78575ef", size = 362788, upload-time = "2026-08-13T14:14:34.996Z" }, - { url = "https://files.pythonhosted.org/packages/59/8f/3298e3f334832bc28dd144af6b99cdc93502a8687e71922ea68b0a319929/ml_dtypes-0.6.0-cp315-cp315t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e2d6149f3a57f405bcad5fb41e03218b8373936253f23e1ca84c0108abbc3392", size = 430823, upload-time = "2026-08-13T14:14:36.44Z" }, - { url = "https://files.pythonhosted.org/packages/93/d2/f2dbf118f42ce4c325a139c9236737f436b7f8e00cd18701c99ef2405e6f/ml_dtypes-0.6.0-cp315-cp315t-win_amd64.whl", hash = "sha256:ce7563e0b1a4482cbc1b4a6272145e54e4489e54fe7428f94908c3d87103abfa", size = 465119, upload-time = "2026-08-13T14:14:37.776Z" }, - { url = "https://files.pythonhosted.org/packages/5a/ff/bda40387b5c5c64254595f4d81a12351770856acc5de4e6d43606a31f161/ml_dtypes-0.6.0-cp315-cp315t-win_arm64.whl", hash = "sha256:f6cb525101b6b903779188c1e9e9490c343b455ab822883e02cf01e5547338d2", size = 572666, upload-time = "2026-08-13T14:14:38.993Z" }, -] - -[[package]] -name = "mpmath" -version = "1.3.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e0/47/dd32fa426cc72114383ac549964eecb20ecfd886d1e5ccf5340b55b02f57/mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f", size = 508106, upload-time = "2023-03-07T16:47:11.061Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c", size = 536198, upload-time = "2023-03-07T16:47:09.197Z" }, -] - [[package]] name = "nest-asyncio" version = "1.6.0" @@ -1703,12 +1739,12 @@ name = "nvidia-cublas" version = "13.1.1.3" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "nvidia-cuda-nvrtc", version = "13.0.88", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu132') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cuda-nvrtc", version = "13.0.88", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-10-mt-trainer-cu130' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu132')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/a7/a1/0bd24ee8c8d03adac032fd2909426a00c88f8c57961b1277ded97f91119f/nvidia_cublas-13.1.1.3-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:b7a210458267ac818974c53038fbec2e969d5c99f305ab15c72522fa9f001dd5", size = 542848918, upload-time = "2026-04-08T18:46:22.985Z" }, @@ -1721,12 +1757,12 @@ name = "nvidia-cublas" version = "13.4.0.1" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "nvidia-cuda-nvrtc", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cuda-nvrtc", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/d0/48/8571e55aaabbd112f06a39a71fbc3abf0b8a0d450921816a13a6d5e8fa0b/nvidia_cublas-13.4.0.1-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:705d7d214fbb20f134415ecadc488abf74f444c155a6555dec5687404afb18a9", size = 513051304, upload-time = "2026-04-13T09:49:32.758Z" }, @@ -1749,9 +1785,9 @@ name = "nvidia-cuda-cupti" version = "13.0.85" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] wheels = [ { url = "https://files.pythonhosted.org/packages/2a/2a/80353b103fc20ce05ef51e928daed4b6015db4aaa9162ed0997090fe2250/nvidia_cuda_cupti-13.0.85-py3-none-manylinux_2_25_aarch64.whl", hash = "sha256:796bd679890ee55fb14a94629b698b6db54bcfd833d391d5e94017dd9d7d3151", size = 10310827, upload-time = "2025-09-04T08:26:42.012Z" }, @@ -1764,9 +1800,9 @@ name = "nvidia-cuda-cupti" version = "13.2.75" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] wheels = [ { url = "https://files.pythonhosted.org/packages/4e/e2/b7bbe4e39781024fcc698fa3d0a788cd9559d9cba5e23fdbcff0a27783e4/nvidia_cuda_cupti-13.2.75-py3-none-manylinux_2_25_aarch64.whl", hash = "sha256:003157a0ca04d34a1f83a764dcbe36eabceda5a771e9a2cc85a461b2765888b6", size = 11759634, upload-time = "2026-04-13T09:40:35.162Z" }, @@ -1791,9 +1827,9 @@ name = "nvidia-cuda-nvrtc" version = "13.0.88" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] wheels = [ { url = "https://files.pythonhosted.org/packages/c3/68/483a78f5e8f31b08fb1bb671559968c0ca3a065ac7acabfc7cee55214fd6/nvidia_cuda_nvrtc-13.0.88-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:ad9b6d2ead2435f11cbb6868809d2adeeee302e9bb94bcf0539c7a40d80e8575", size = 90215200, upload-time = "2025-09-04T08:28:44.204Z" }, @@ -1806,9 +1842,9 @@ name = "nvidia-cuda-nvrtc" version = "13.2.78" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] wheels = [ { url = "https://files.pythonhosted.org/packages/5f/96/237b40b171e06eb65905375c4ad5c96f78c2f861ac6e8ae7f650d95e1dfd/nvidia_cuda_nvrtc-13.2.78-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:a9049031da08cbedd0c20e3470e5a978dc330af0e0326b3b05774718c665dc3e", size = 47019062, upload-time = "2026-04-13T09:45:33.875Z" }, @@ -1831,9 +1867,9 @@ name = "nvidia-cuda-runtime" version = "13.0.96" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] wheels = [ { url = "https://files.pythonhosted.org/packages/87/4f/17d7b9b8e285199c58ce28e31b5c5bbaa4d8271af06a89b6405258245de2/nvidia_cuda_runtime-13.0.96-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ef9bcbe90493a2b9d810e43d249adb3d02e98dd30200d86607d8d02687c43f55", size = 2261060, upload-time = "2025-10-09T08:55:15.78Z" }, @@ -1846,9 +1882,9 @@ name = "nvidia-cuda-runtime" version = "13.2.75" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] wheels = [ { url = "https://files.pythonhosted.org/packages/f1/40/56a70b5a4e0a2881a1b7c172fea8025ab6b3cfb2de61c743fb7974d1ded4/nvidia_cuda_runtime-13.2.75-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:36e539e8deb01568025830c1454216c26ef4b4529507220b1d8ef739bf5c6439", size = 2339755, upload-time = "2026-04-13T09:37:53.791Z" }, @@ -1873,7 +1909,7 @@ name = "nvidia-cudnn-cu12" version = "9.10.2.21" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-cublas-cu12", marker = "(sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-12-mini-trainer-cu126') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cublas-cu12", marker = "extra == 'extra-10-mt-trainer-cu126' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/fa/41/e79269ce215c857c935fd86bcfe91a451a584dfc27f1e068f568b9ad1ab7/nvidia_cudnn_cu12-9.10.2.21-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:c9132cc3f8958447b4910a1720036d9eff5928cc3179b0a51fb6d167c6cc87d8", size = 705026878, upload-time = "2025-06-06T21:52:51.348Z" }, @@ -1886,8 +1922,8 @@ name = "nvidia-cudnn-cu13" version = "9.20.0.48" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-cublas", version = "13.1.1.3", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu132') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-cublas", version = "13.4.0.1", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cublas", version = "13.1.1.3", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-10-mt-trainer-cu130' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-cublas", version = "13.4.0.1", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/56/c5/83384d846b2fd17c44bd499b36c75a45ed4f095fbbb2252294e89cea5c5c/nvidia_cudnn_cu13-9.20.0.48-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:e31454ae00094b0c55319d9d15b6fa2fc50a9e1c0f5c8c80fb75258234e731e1", size = 444574296, upload-time = "2026-03-09T19:28:27.751Z" }, @@ -1900,12 +1936,12 @@ name = "nvidia-cufft" version = "12.0.0.61" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "nvidia-nvjitlink", version = "13.0.88", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu132') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-nvjitlink", version = "13.0.88", source = { registry = "https://pypi.org/simple" } }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/8b/ae/f417a75c0259e85c1d2f83ca4e960289a5f814ed0cea74d18c353d3e989d/nvidia_cufft-12.0.0.61-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2708c852ef8cd89d1d2068bdbece0aa188813a0c934db3779b9b1faa8442e5f5", size = 214053554, upload-time = "2025-09-04T08:31:38.196Z" }, @@ -1918,12 +1954,12 @@ name = "nvidia-cufft" version = "12.2.0.46" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "nvidia-nvjitlink", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-nvjitlink", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/be/b1/6e36381739b51e692d91646298ad5685c562929b899331c2bb6e9722a176/nvidia_cufft-12.2.0.46-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2e8f3a22c2745f95327b7639ba2868ea2cbd5d3131ebe6313394e24164054f41", size = 218244743, upload-time = "2026-04-13T09:51:24.75Z" }, @@ -1936,7 +1972,7 @@ name = "nvidia-cufft-cu12" version = "11.3.0.4" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-nvjitlink-cu12", marker = "(sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-12-mini-trainer-cu126') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-nvjitlink-cu12", marker = "extra == 'extra-10-mt-trainer-cu126' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/1f/37/c50d2b2f2c07e146776389e3080f4faf70bcc4fa6e19d65bb54ca174ebc3/nvidia_cufft_cu12-11.3.0.4-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d16079550df460376455cba121db6564089176d9bac9e4f360493ca4741b22a6", size = 200164144, upload-time = "2024-11-20T17:40:58.288Z" }, @@ -1951,9 +1987,9 @@ name = "nvidia-cufile" version = "1.15.1.6" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] wheels = [ { url = "https://files.pythonhosted.org/packages/3f/70/4f193de89a48b71714e74602ee14d04e4019ad36a5a9f20c425776e72cd6/nvidia_cufile-1.15.1.6-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:08a3ecefae5a01c7f5117351c64f17c7c62efa5fffdbe24fc7d298da19cd0b44", size = 1223672, upload-time = "2025-09-04T08:32:22.779Z" }, @@ -1965,9 +2001,9 @@ name = "nvidia-cufile" version = "1.17.1.22" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] wheels = [ { url = "https://files.pythonhosted.org/packages/fe/fd/4b4157512a131a51e1514d40d0199b1c5b7b10c6856db274ff22e5fe15be/nvidia_cufile-1.17.1.22-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:bec33d7f1f12691dce330275246587569c2ed90b1ce43b0f94b3e1ce9268744b", size = 1226736, upload-time = "2026-04-13T09:52:40.142Z" }, @@ -1988,9 +2024,9 @@ name = "nvidia-curand" version = "10.4.0.35" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] wheels = [ { url = "https://files.pythonhosted.org/packages/1e/72/7c2ae24fb6b63a32e6ae5d241cc65263ea18d08802aaae087d9f013335a2/nvidia_curand-10.4.0.35-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:133df5a7509c3e292aaa2b477afd0194f06ce4ea24d714d616ff36439cee349a", size = 61962106, upload-time = "2025-08-04T10:21:41.128Z" }, @@ -2003,9 +2039,9 @@ name = "nvidia-curand" version = "10.4.2.55" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] wheels = [ { url = "https://files.pythonhosted.org/packages/ee/7c/7c2042b5badc251236bc1f23627d5554cf2ecff37e92ea0a9d39dfc20a61/nvidia_curand-10.4.2.55-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:342e40ddcaedc92aedc72839e0c10064096fceea2f1d0eb57951f86d2901f8c0", size = 62372157, upload-time = "2026-04-13T09:53:32.34Z" }, @@ -2030,14 +2066,14 @@ name = "nvidia-cusolver" version = "12.0.4.66" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "nvidia-cublas", version = "13.1.1.3", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu132') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-cusparse", version = "12.6.3.3", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu132') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-nvjitlink", version = "13.0.88", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu132') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cublas", version = "13.1.1.3", source = { registry = "https://pypi.org/simple" } }, + { name = "nvidia-cusparse", version = "12.6.3.3", source = { registry = "https://pypi.org/simple" } }, + { name = "nvidia-nvjitlink", version = "13.0.88", source = { registry = "https://pypi.org/simple" } }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/c8/c3/b30c9e935fc01e3da443ec0116ed1b2a009bb867f5324d3f2d7e533e776b/nvidia_cusolver-12.0.4.66-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:02c2457eaa9e39de20f880f4bd8820e6a1cfb9f9a34f820eb12a155aa5bc92d2", size = 223467760, upload-time = "2025-09-04T08:33:04.222Z" }, @@ -2050,14 +2086,14 @@ name = "nvidia-cusolver" version = "12.2.0.1" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "nvidia-cublas", version = "13.4.0.1", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-cusparse", version = "12.7.10.1", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-nvjitlink", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cublas", version = "13.4.0.1", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-cusparse", version = "12.7.10.1", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-nvjitlink", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/94/21/21e5c491a8285a6ed039cbb8c60ec13ff3aff60c669e1caa4adaeb71f997/nvidia_cusolver-12.2.0.1-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:c9def09fcf300b9465cdf800142abf10149df28c4290bdf9e7b4a700480d31d7", size = 249744985, upload-time = "2026-04-13T09:54:33.757Z" }, @@ -2070,9 +2106,9 @@ name = "nvidia-cusolver-cu12" version = "11.7.1.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-cublas-cu12", marker = "(sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-12-mini-trainer-cu126') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-cusparse-cu12", marker = "(sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-12-mini-trainer-cu126') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-nvjitlink-cu12", marker = "(sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-12-mini-trainer-cu126') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cublas-cu12", marker = "extra == 'extra-10-mt-trainer-cu126' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-cusparse-cu12", marker = "extra == 'extra-10-mt-trainer-cu126' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-nvjitlink-cu12", marker = "extra == 'extra-10-mt-trainer-cu126' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/93/17/dbe1aa865e4fdc7b6d4d0dd308fdd5aaab60f939abfc0ea1954eac4fb113/nvidia_cusolver_cu12-11.7.1.2-py3-none-manylinux2014_aarch64.whl", hash = "sha256:0ce237ef60acde1efc457335a2ddadfd7610b892d94efee7b776c64bb1cac9e0", size = 157833628, upload-time = "2024-10-01T17:05:05.591Z" }, @@ -2087,12 +2123,12 @@ name = "nvidia-cusparse" version = "12.6.3.3" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "nvidia-nvjitlink", version = "13.0.88", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu132') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-nvjitlink", version = "13.0.88", source = { registry = "https://pypi.org/simple" } }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/f8/94/5c26f33738ae35276672f12615a64bd008ed5be6d1ebcb23579285d960a9/nvidia_cusparse-12.6.3.3-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:80bcc4662f23f1054ee334a15c72b8940402975e0eab63178fc7e670aa59472c", size = 162155568, upload-time = "2025-09-04T08:33:42.864Z" }, @@ -2105,12 +2141,12 @@ name = "nvidia-cusparse" version = "12.7.10.1" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "nvidia-nvjitlink", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-nvjitlink", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/b5/09/9f1fa88dd305e838b71f2ca4e50064e7cbdf2e15cd6410d9e1b74066cc41/nvidia_cusparse-12.7.10.1-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:80cc98b38fdcf054a80bd9782fe2e63c66f90e202cac269f641357ccac5fe7e3", size = 168860233, upload-time = "2026-04-13T09:55:48.891Z" }, @@ -2123,7 +2159,7 @@ name = "nvidia-cusparse-cu12" version = "12.5.4.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-nvjitlink-cu12", marker = "(sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-12-mini-trainer-cu126') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-nvjitlink-cu12", marker = "extra == 'extra-10-mt-trainer-cu126' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/eb/eb/6681efd0aa7df96b4f8067b3ce7246833dd36830bb4cec8896182773db7d/nvidia_cusparse_cu12-12.5.4.2-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d25b62fb18751758fe3c93a4a08eff08effedfe4edf1c6bb5afd0890fe88f887", size = 216451147, upload-time = "2024-11-20T17:44:18.055Z" }, @@ -2176,9 +2212,9 @@ name = "nvidia-nvjitlink" version = "13.0.88" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] wheels = [ { url = "https://files.pythonhosted.org/packages/56/7a/123e033aaff487c77107195fa5a2b8686795ca537935a24efae476c41f05/nvidia_nvjitlink-13.0.88-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:13a74f429e23b921c1109976abefacc69835f2f433ebd323d3946e11d804e47b", size = 40713933, upload-time = "2025-09-04T08:35:43.553Z" }, @@ -2191,9 +2227,9 @@ name = "nvidia-nvjitlink" version = "13.2.78" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] wheels = [ { url = "https://files.pythonhosted.org/packages/1e/b5/dae67f0c45516cfaff2d7fba873c7425c2866d4c9ede5c14a269d89ed79b/nvidia_nvjitlink-13.2.78-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:27964b6702aeceee05fc0ab47b4c97e3f8966bd47d05d9827e913c49a025656b", size = 41370766, upload-time = "2026-04-13T09:59:28.799Z" }, @@ -2234,9 +2270,9 @@ name = "nvidia-nvtx" version = "13.0.85" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] wheels = [ { url = "https://files.pythonhosted.org/packages/c2/f3/d86c845465a2723ad7e1e5c36dcd75ddb82898b3f53be47ebd429fb2fa5d/nvidia_nvtx-13.0.85-py3-none-manylinux1_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:4936d1d6780fbe68db454f5e72a42ff64d1fd6397df9f363ae786930fd5c1cd4", size = 148047, upload-time = "2025-09-04T08:29:01.761Z" }, @@ -2249,9 +2285,9 @@ name = "nvidia-nvtx" version = "13.2.75" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] wheels = [ { url = "https://files.pythonhosted.org/packages/b0/cc/314eac684677dced22b913b5d1b3d03adcbe59d6c7332c5d04f864cdb079/nvidia_nvtx-13.2.75-py3-none-manylinux1_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2d7c24fc582d841493c6dc2cf017c25e4428cf583a3bd9e9325a65f0ecc65f73", size = 153460, upload-time = "2026-04-13T09:46:23.256Z" }, @@ -2372,18 +2408,18 @@ dependencies = [ { name = "regex" }, { name = "safetensors" }, { name = "timm" }, - { name = "torch", version = "2.12.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torch", version = "2.12.0", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu130' and extra != 'extra-12-mini-trainer-cu132')" }, - { name = "torch", version = "2.12.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torch", version = "2.12.0+cu126", source = { registry = "https://download.pytorch.org/whl/cu126" }, marker = "extra == 'extra-12-mini-trainer-cu126' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torch", version = "2.12.0+cu130", source = { registry = "https://download.pytorch.org/whl/cu130" }, marker = "extra == 'extra-12-mini-trainer-cu130' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torch", version = "2.12.0+cu132", source = { registry = "https://download.pytorch.org/whl/cu132" }, marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torchvision", version = "0.27.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torchvision", version = "0.27.0", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu130' and extra != 'extra-12-mini-trainer-cu132')" }, - { name = "torchvision", version = "0.27.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torchvision", version = "0.27.0+cu126", source = { registry = "https://download.pytorch.org/whl/cu126" }, marker = "extra == 'extra-12-mini-trainer-cu126' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torchvision", version = "0.27.0+cu130", source = { registry = "https://download.pytorch.org/whl/cu130" }, marker = "extra == 'extra-12-mini-trainer-cu130' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torchvision", version = "0.27.0+cu132", source = { registry = "https://download.pytorch.org/whl/cu132" }, marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "torch", version = "2.12.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torch", version = "2.12.0", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132')" }, + { name = "torch", version = "2.12.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torch", version = "2.12.0+cu126", source = { registry = "https://download.pytorch.org/whl/cu126" }, marker = "extra == 'extra-10-mt-trainer-cu126' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torch", version = "2.12.0+cu130", source = { registry = "https://download.pytorch.org/whl/cu130" }, marker = "extra == 'extra-10-mt-trainer-cu130' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torch", version = "2.12.0+cu132", source = { registry = "https://download.pytorch.org/whl/cu132" }, marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torchvision", version = "0.27.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torchvision", version = "0.27.0", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132')" }, + { name = "torchvision", version = "0.27.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torchvision", version = "0.27.0+cu126", source = { registry = "https://download.pytorch.org/whl/cu126" }, marker = "extra == 'extra-10-mt-trainer-cu126' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torchvision", version = "0.27.0+cu130", source = { registry = "https://download.pytorch.org/whl/cu130" }, marker = "extra == 'extra-10-mt-trainer-cu130' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torchvision", version = "0.27.0+cu132", source = { registry = "https://download.pytorch.org/whl/cu132" }, marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, { name = "tqdm" }, ] sdist = { url = "https://files.pythonhosted.org/packages/4a/1f/2bc9795047fa2c1ad2567ef78ce6dfc9a7b763fa534acee09a94da2a5b8f/open_clip_torch-3.3.0.tar.gz", hash = "sha256:904b1a9f909df8281bb3de60ab95491cd2994a509177ea4f9d6292a84fe24d6d", size = 1503380, upload-time = "2026-02-27T00:32:46.74Z" } @@ -2407,7 +2443,7 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, { name = "python-dateutil" }, - { name = "tzdata", marker = "sys_platform == 'emscripten' or sys_platform == 'win32' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "tzdata", marker = "sys_platform == 'emscripten' or sys_platform == 'win32' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/f8/87/4341c6252d1c47b08768c3d25ac487362bf403f0313ddae4a2a26c9b1b4c/pandas-3.0.3.tar.gz", hash = "sha256:696a4a00a2a2a35d4e5deb3fc946641b96c944f02230e4f76137fe35d806c4fc", size = 4651414, upload-time = "2026-05-11T18:54:29.21Z" } wheels = [ @@ -2466,7 +2502,7 @@ name = "pexpect" version = "4.9.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "ptyprocess", marker = "(sys_platform != 'emscripten' and sys_platform != 'win32') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "ptyprocess" }, ] sdist = { url = "https://files.pythonhosted.org/packages/42/92/cc564bf6381ff43ce1f4d06852fc19a2f11d180f23dc32d9588bee2f149d/pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f", size = 166450, upload-time = "2023-11-25T09:07:26.339Z" } wheels = [ @@ -2826,7 +2862,7 @@ name = "pytest" version = "9.0.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "colorama", marker = "sys_platform == 'win32' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, { name = "iniconfig" }, { name = "packaging" }, { name = "pluggy" }, @@ -2914,7 +2950,7 @@ name = "pyzmq" version = "27.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "cffi", marker = "implementation_name == 'pypy' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "cffi", marker = "implementation_name == 'pypy' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/04/0b/3c9baedbdf613ecaa7aa07027780b8867f57b6293b6ee50de316c9f3222b/pyzmq-27.1.0.tar.gz", hash = "sha256:ac0765e3d44455adb6ddbf4417dcce460fc40a05978c08efdf2948072f6db540", size = 281750, upload-time = "2025-09-08T23:10:18.157Z" } wheels = [ @@ -3289,18 +3325,18 @@ dependencies = [ { name = "huggingface-hub" }, { name = "pyyaml" }, { name = "safetensors" }, - { name = "torch", version = "2.12.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torch", version = "2.12.0", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu130' and extra != 'extra-12-mini-trainer-cu132')" }, - { name = "torch", version = "2.12.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torch", version = "2.12.0+cu126", source = { registry = "https://download.pytorch.org/whl/cu126" }, marker = "extra == 'extra-12-mini-trainer-cu126' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torch", version = "2.12.0+cu130", source = { registry = "https://download.pytorch.org/whl/cu130" }, marker = "extra == 'extra-12-mini-trainer-cu130' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torch", version = "2.12.0+cu132", source = { registry = "https://download.pytorch.org/whl/cu132" }, marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torchvision", version = "0.27.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torchvision", version = "0.27.0", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu130' and extra != 'extra-12-mini-trainer-cu132')" }, - { name = "torchvision", version = "0.27.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torchvision", version = "0.27.0+cu126", source = { registry = "https://download.pytorch.org/whl/cu126" }, marker = "extra == 'extra-12-mini-trainer-cu126' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torchvision", version = "0.27.0+cu130", source = { registry = "https://download.pytorch.org/whl/cu130" }, marker = "extra == 'extra-12-mini-trainer-cu130' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torchvision", version = "0.27.0+cu132", source = { registry = "https://download.pytorch.org/whl/cu132" }, marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "torch", version = "2.12.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torch", version = "2.12.0", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132')" }, + { name = "torch", version = "2.12.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torch", version = "2.12.0+cu126", source = { registry = "https://download.pytorch.org/whl/cu126" }, marker = "extra == 'extra-10-mt-trainer-cu126' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torch", version = "2.12.0+cu130", source = { registry = "https://download.pytorch.org/whl/cu130" }, marker = "extra == 'extra-10-mt-trainer-cu130' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torch", version = "2.12.0+cu132", source = { registry = "https://download.pytorch.org/whl/cu132" }, marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torchvision", version = "0.27.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torchvision", version = "0.27.0", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132')" }, + { name = "torchvision", version = "0.27.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torchvision", version = "0.27.0+cu126", source = { registry = "https://download.pytorch.org/whl/cu126" }, marker = "extra == 'extra-10-mt-trainer-cu126' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torchvision", version = "0.27.0+cu130", source = { registry = "https://download.pytorch.org/whl/cu130" }, marker = "extra == 'extra-10-mt-trainer-cu130' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torchvision", version = "0.27.0+cu132", source = { registry = "https://download.pytorch.org/whl/cu132" }, marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/08/54/ece85b0eef3700c90db8271a43669b05a0ebbe2edb1962329c34374a297e/timm-1.0.27.tar.gz", hash = "sha256:315dfe63186ca9fb7ff941268941231fd5be259f2b4bb4afa28560ae1015cb9a", size = 2439861, upload-time = "2026-05-08T19:38:36.844Z" } wheels = [ @@ -3343,13 +3379,13 @@ resolution-markers = [ "python_full_version < '3.13' and sys_platform == 'darwin'", ] dependencies = [ - { name = "filelock", marker = "(sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "fsspec", marker = "(sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "jinja2", marker = "(sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "networkx", marker = "(sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "setuptools", marker = "(sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "sympy", marker = "(sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "typing-extensions", marker = "(sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "filelock", marker = "(sys_platform == 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "fsspec", marker = "(sys_platform == 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "jinja2", marker = "(sys_platform == 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "networkx", marker = "(sys_platform == 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "setuptools", marker = "(sys_platform == 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "sympy", marker = "(sys_platform == 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "typing-extensions", marker = "(sys_platform == 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] wheels = [ { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.12.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:b41339df93d491435e790ff8bcbae1c0ce777175889bfd1281d119862793e6a2", upload-time = "2026-05-12T16:20:12Z" }, @@ -3366,33 +3402,30 @@ source = { registry = "https://pypi.org/simple" } 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 != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", "python_full_version == '3.13.*' and sys_platform == 'win32'", - "python_full_version < '3.13' and sys_platform == 'win32'", "python_full_version == '3.13.*' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform == 'win32'", "python_full_version < '3.13' and sys_platform == 'emscripten'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.14' and sys_platform == 'darwin'", - "python_full_version == '3.13.*' and sys_platform == 'darwin'", - "python_full_version < '3.13' and sys_platform == 'darwin'", -] -dependencies = [ - { name = "cuda-bindings", version = "13.2.0", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu130' and extra != 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "cuda-toolkit", version = "13.0.2", source = { registry = "https://pypi.org/simple" }, extra = ["cudart", "cufft", "cufile", "cupti", "curand", "cusolver", "cusparse", "nvjitlink", "nvrtc", "nvtx"], marker = "(sys_platform == 'linux' and extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu130' and extra != 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "filelock", marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu130' and extra != 'extra-12-mini-trainer-cu132')" }, - { name = "fsspec", marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu130' and extra != 'extra-12-mini-trainer-cu132')" }, - { name = "jinja2", marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu130' and extra != 'extra-12-mini-trainer-cu132')" }, - { name = "networkx", marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu130' and extra != 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-cublas", version = "13.1.1.3", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu130' and extra != 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-cudnn-cu13", marker = "(sys_platform == 'linux' and extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu130' and extra != 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-cusparselt-cu13", marker = "(sys_platform == 'linux' and extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu130' and extra != 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-nccl-cu13", marker = "(sys_platform == 'linux' and extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu130' and extra != 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-nvshmem-cu13", marker = "(sys_platform == 'linux' and extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu130' and extra != 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "setuptools", marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu130' and extra != 'extra-12-mini-trainer-cu132')" }, - { name = "sympy", marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu130' and extra != 'extra-12-mini-trainer-cu132')" }, - { name = "triton", marker = "(sys_platform == 'linux' and extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu130' and extra != 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "typing-extensions", marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu130' and extra != 'extra-12-mini-trainer-cu132')" }, + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +dependencies = [ + { name = "cuda-bindings", version = "13.2.0", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "cuda-toolkit", version = "13.0.2", source = { registry = "https://pypi.org/simple" }, extra = ["cudart", "cufft", "cufile", "cupti", "curand", "cusolver", "cusparse", "nvjitlink", "nvrtc", "nvtx"], marker = "(sys_platform == 'linux' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "filelock", marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132')" }, + { name = "fsspec", marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132')" }, + { name = "jinja2", marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132')" }, + { name = "networkx", marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-cublas", version = "13.1.1.3", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-cudnn-cu13", marker = "(sys_platform == 'linux' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-cusparselt-cu13", marker = "(sys_platform == 'linux' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-nccl-cu13", marker = "(sys_platform == 'linux' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-nvshmem-cu13", marker = "(sys_platform == 'linux' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "setuptools", marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132')" }, + { name = "sympy", marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132')" }, + { name = "triton", marker = "(sys_platform == 'linux' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "typing-extensions", marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/ef/bb/285d643f254731294c9b595a007eac39db4600a98682d7bca688f42ca164/torch-2.12.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:b41339df93d491435e790ff8bcbae1c0ce777175889bfd1281d119862793e6a2", size = 88010197, upload-time = "2026-05-13T14:55:35.414Z" }, @@ -3426,20 +3459,20 @@ resolution-markers = [ "python_full_version >= '3.14' and sys_platform == 'emscripten'", "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", "python_full_version == '3.13.*' and sys_platform == 'win32'", - "python_full_version < '3.13' and sys_platform == 'win32'", "python_full_version == '3.13.*' and sys_platform == 'emscripten'", - "python_full_version < '3.13' and sys_platform == 'emscripten'", "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform == 'win32'", + "python_full_version < '3.13' and sys_platform == 'emscripten'", "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "filelock", marker = "(sys_platform != 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "fsspec", marker = "(sys_platform != 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "jinja2", marker = "(sys_platform != 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "networkx", marker = "(sys_platform != 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "setuptools", marker = "(sys_platform != 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "sympy", marker = "(sys_platform != 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "typing-extensions", marker = "(sys_platform != 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "filelock", marker = "(sys_platform != 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "fsspec", marker = "(sys_platform != 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "jinja2", marker = "(sys_platform != 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "networkx", marker = "(sys_platform != 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "setuptools", marker = "(sys_platform != 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "sympy", marker = "(sys_platform != 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "typing-extensions", marker = "(sys_platform != 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] wheels = [ { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.12.0%2Bcpu-cp312-cp312-linux_s390x.whl", hash = "sha256:b9d0e8eed0af9321ffb12b75f4aca371b071254f12cf75875d5a8e7cc8f52b51", upload-time = "2026-05-12T23:16:33Z" }, @@ -3473,32 +3506,29 @@ source = { registry = "https://download.pytorch.org/whl/cu126" } 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 != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", "python_full_version == '3.13.*' and sys_platform == 'win32'", - "python_full_version < '3.13' and sys_platform == 'win32'", "python_full_version == '3.13.*' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform == 'win32'", "python_full_version < '3.13' and sys_platform == 'emscripten'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.14' and sys_platform == 'darwin'", - "python_full_version == '3.13.*' and sys_platform == 'darwin'", - "python_full_version < '3.13' and sys_platform == 'darwin'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "cuda-bindings", version = "12.9.6", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "cuda-toolkit", version = "12.6.3", source = { registry = "https://pypi.org/simple" }, extra = ["cublas", "cudart", "cufft", "cufile", "cupti", "curand", "cusolver", "cusparse", "nvjitlink", "nvrtc", "nvtx"], marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "filelock", marker = "extra == 'extra-12-mini-trainer-cu126' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "fsspec", marker = "extra == 'extra-12-mini-trainer-cu126' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "jinja2", marker = "extra == 'extra-12-mini-trainer-cu126' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "networkx", marker = "extra == 'extra-12-mini-trainer-cu126' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-cudnn-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-cusparselt-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-nccl-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-nvshmem-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "setuptools", marker = "extra == 'extra-12-mini-trainer-cu126' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "sympy", marker = "extra == 'extra-12-mini-trainer-cu126' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "triton", marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "typing-extensions", marker = "extra == 'extra-12-mini-trainer-cu126' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "cuda-bindings", version = "12.9.6", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "cuda-toolkit", version = "12.6.3", source = { registry = "https://pypi.org/simple" }, extra = ["cublas", "cudart", "cufft", "cufile", "cupti", "curand", "cusolver", "cusparse", "nvjitlink", "nvrtc", "nvtx"], marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "filelock", marker = "extra == 'extra-10-mt-trainer-cu126' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "fsspec", marker = "extra == 'extra-10-mt-trainer-cu126' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "jinja2", marker = "extra == 'extra-10-mt-trainer-cu126' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "networkx", marker = "extra == 'extra-10-mt-trainer-cu126' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-cudnn-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-cusparselt-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-nccl-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-nvshmem-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "setuptools", marker = "extra == 'extra-10-mt-trainer-cu126' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "sympy", marker = "extra == 'extra-10-mt-trainer-cu126' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "triton", marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "typing-extensions", marker = "extra == 'extra-10-mt-trainer-cu126' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] wheels = [ { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.12.0%2Bcu126-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:7b13d35e799c5b970403ba8ed7f33041ae5c1c0a2b6320ba3288082df3df3a45", upload-time = "2026-05-12T23:26:44Z" }, @@ -3525,33 +3555,30 @@ source = { registry = "https://download.pytorch.org/whl/cu130" } 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 != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", "python_full_version == '3.13.*' and sys_platform == 'win32'", - "python_full_version < '3.13' and sys_platform == 'win32'", "python_full_version == '3.13.*' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform == 'win32'", "python_full_version < '3.13' and sys_platform == 'emscripten'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.14' and sys_platform == 'darwin'", - "python_full_version == '3.13.*' and sys_platform == 'darwin'", - "python_full_version < '3.13' and sys_platform == 'darwin'", -] -dependencies = [ - { name = "cuda-bindings", version = "13.2.0", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "cuda-toolkit", version = "13.0.2", source = { registry = "https://pypi.org/simple" }, extra = ["cudart", "cufft", "cufile", "cupti", "curand", "cusolver", "cusparse", "nvjitlink", "nvrtc", "nvtx"], marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "filelock", marker = "extra == 'extra-12-mini-trainer-cu130' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "fsspec", marker = "extra == 'extra-12-mini-trainer-cu130' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "jinja2", marker = "extra == 'extra-12-mini-trainer-cu130' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "networkx", marker = "extra == 'extra-12-mini-trainer-cu130' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-cublas", version = "13.1.1.3", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-cudnn-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-cusparselt-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-nccl-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-nvshmem-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "setuptools", marker = "extra == 'extra-12-mini-trainer-cu130' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "sympy", marker = "extra == 'extra-12-mini-trainer-cu130' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "triton", marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "typing-extensions", marker = "extra == 'extra-12-mini-trainer-cu130' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +dependencies = [ + { name = "cuda-bindings", version = "13.2.0", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "cuda-toolkit", version = "13.0.2", source = { registry = "https://pypi.org/simple" }, extra = ["cudart", "cufft", "cufile", "cupti", "curand", "cusolver", "cusparse", "nvjitlink", "nvrtc", "nvtx"], marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "filelock", marker = "extra == 'extra-10-mt-trainer-cu130' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "fsspec", marker = "extra == 'extra-10-mt-trainer-cu130' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "jinja2", marker = "extra == 'extra-10-mt-trainer-cu130' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "networkx", marker = "extra == 'extra-10-mt-trainer-cu130' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-cublas", version = "13.1.1.3", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-cudnn-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-cusparselt-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-nccl-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-nvshmem-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "setuptools", marker = "extra == 'extra-10-mt-trainer-cu130' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "sympy", marker = "extra == 'extra-10-mt-trainer-cu130' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "triton", marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "typing-extensions", marker = "extra == 'extra-10-mt-trainer-cu130' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] wheels = [ { url = "https://download-r2.pytorch.org/whl/cu130/torch-2.12.0%2Bcu130-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:cb95bd4626150e41aeea2b60e4635a878ebe01e63f3344409f4b7353fdb7998c", upload-time = "2026-05-12T23:49:12Z" }, @@ -3578,32 +3605,29 @@ source = { registry = "https://download.pytorch.org/whl/cu132" } 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 != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", "python_full_version == '3.13.*' and sys_platform == 'win32'", - "python_full_version < '3.13' and sys_platform == 'win32'", "python_full_version == '3.13.*' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform == 'win32'", "python_full_version < '3.13' and sys_platform == 'emscripten'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.14' and sys_platform == 'darwin'", - "python_full_version == '3.13.*' and sys_platform == 'darwin'", - "python_full_version < '3.13' and sys_platform == 'darwin'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "cuda-bindings", version = "13.2.0", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "cuda-toolkit", version = "13.2.1", source = { registry = "https://pypi.org/simple" }, extra = ["cublas", "cudart", "cufft", "cufile", "cupti", "curand", "cusolver", "cusparse", "nvjitlink", "nvrtc", "nvtx"], marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "filelock", marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "fsspec", marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "jinja2", marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "networkx", marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-cudnn-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-cusparselt-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-nccl-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-nvshmem-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "setuptools", marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "sympy", marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "triton", marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "typing-extensions", marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "cuda-bindings", version = "13.2.0", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "cuda-toolkit", version = "13.2.1", source = { registry = "https://pypi.org/simple" }, extra = ["cublas", "cudart", "cufft", "cufile", "cupti", "curand", "cusolver", "cusparse", "nvjitlink", "nvrtc", "nvtx"], marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "filelock", marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "fsspec", marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "jinja2", marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "networkx", marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-cudnn-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-cusparselt-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-nccl-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-nvshmem-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "setuptools", marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "sympy", marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "triton", marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "typing-extensions", marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, ] wheels = [ { url = "https://download-r2.pytorch.org/whl/cu132/torch-2.12.0%2Bcu132-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:21909235cbbc94a938d737f1721b53cc61316cd7787aa459b4d458b840fc0309", upload-time = "2026-05-13T00:07:47Z" }, @@ -3642,9 +3666,9 @@ resolution-markers = [ "python_full_version < '3.13' and sys_platform == 'darwin'", ] dependencies = [ - { name = "numpy", marker = "(sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "pillow", marker = "(sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torch", version = "2.12.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "numpy", marker = "(sys_platform == 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "pillow", marker = "(sys_platform == 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torch", version = "2.12.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] wheels = [ { url = "https://download-r2.pytorch.org/whl/cpu/torchvision-0.27.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:1a6dd742a150645126df9e0b2e449874c1d635897c773b322c2e067e98382dfe", upload-time = "2026-05-12T16:20:37Z" }, @@ -3661,21 +3685,18 @@ source = { registry = "https://pypi.org/simple" } 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 != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", "python_full_version == '3.13.*' and sys_platform == 'win32'", - "python_full_version < '3.13' and sys_platform == 'win32'", "python_full_version == '3.13.*' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform == 'win32'", "python_full_version < '3.13' and sys_platform == 'emscripten'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.14' and sys_platform == 'darwin'", - "python_full_version == '3.13.*' and sys_platform == 'darwin'", - "python_full_version < '3.13' and sys_platform == 'darwin'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "numpy", marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu130' and extra != 'extra-12-mini-trainer-cu132')" }, - { name = "pillow", marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu130' and extra != 'extra-12-mini-trainer-cu132')" }, - { name = "torch", version = "2.12.0", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu130' and extra != 'extra-12-mini-trainer-cu132')" }, + { name = "numpy", marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132')" }, + { name = "pillow", marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132')" }, + { name = "torch", version = "2.12.0", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/9e/c8/5cd91932f7f3671b0743dc4ae1a4c16b1d0b45bf4087976277d325bda718/torchvision-0.27.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:1a6dd742a150645126df9e0b2e449874c1d635897c773b322c2e067e98382dfe", size = 1758824, upload-time = "2026-05-13T14:57:15.227Z" }, @@ -3709,16 +3730,16 @@ resolution-markers = [ "python_full_version >= '3.14' and sys_platform == 'emscripten'", "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", "python_full_version == '3.13.*' and sys_platform == 'win32'", - "python_full_version < '3.13' and sys_platform == 'win32'", "python_full_version == '3.13.*' and sys_platform == 'emscripten'", - "python_full_version < '3.13' and sys_platform == 'emscripten'", "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform == 'win32'", + "python_full_version < '3.13' and sys_platform == 'emscripten'", "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "numpy", marker = "(sys_platform != 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "pillow", marker = "(sys_platform != 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torch", version = "2.12.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "numpy", marker = "(sys_platform != 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "pillow", marker = "(sys_platform != 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torch", version = "2.12.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] wheels = [ { url = "https://download-r2.pytorch.org/whl/cpu/torchvision-0.27.0%2Bcpu-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:1b06f42d48b62098114923d8a3fe9fa864182715db06584a515155db0aa8eb30", upload-time = "2026-05-12T16:20:36Z" }, @@ -3745,21 +3766,18 @@ source = { registry = "https://download.pytorch.org/whl/cu126" } 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 != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", "python_full_version == '3.13.*' and sys_platform == 'win32'", - "python_full_version < '3.13' and sys_platform == 'win32'", "python_full_version == '3.13.*' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform == 'win32'", "python_full_version < '3.13' and sys_platform == 'emscripten'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.14' and sys_platform == 'darwin'", - "python_full_version == '3.13.*' and sys_platform == 'darwin'", - "python_full_version < '3.13' and sys_platform == 'darwin'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "numpy", marker = "extra == 'extra-12-mini-trainer-cu126' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "pillow", marker = "extra == 'extra-12-mini-trainer-cu126' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torch", version = "2.12.0+cu126", source = { registry = "https://download.pytorch.org/whl/cu126" }, marker = "extra == 'extra-12-mini-trainer-cu126' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "numpy", marker = "extra == 'extra-10-mt-trainer-cu126' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "pillow", marker = "extra == 'extra-10-mt-trainer-cu126' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torch", version = "2.12.0+cu126", source = { registry = "https://download.pytorch.org/whl/cu126" }, marker = "extra == 'extra-10-mt-trainer-cu126' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] wheels = [ { url = "https://download-r2.pytorch.org/whl/cu126/torchvision-0.27.0%2Bcu126-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:a4bcd3ea7e9124fb40674dd143a3a28cbde63adc8de6d6ffe1d6810cd40032be", upload-time = "2026-05-12T16:20:41Z" }, @@ -3786,21 +3804,18 @@ source = { registry = "https://download.pytorch.org/whl/cu130" } 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 != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", "python_full_version == '3.13.*' and sys_platform == 'win32'", - "python_full_version < '3.13' and sys_platform == 'win32'", "python_full_version == '3.13.*' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform == 'win32'", "python_full_version < '3.13' and sys_platform == 'emscripten'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.14' and sys_platform == 'darwin'", - "python_full_version == '3.13.*' and sys_platform == 'darwin'", - "python_full_version < '3.13' and sys_platform == 'darwin'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "numpy", marker = "extra == 'extra-12-mini-trainer-cu130' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "pillow", marker = "extra == 'extra-12-mini-trainer-cu130' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torch", version = "2.12.0+cu130", source = { registry = "https://download.pytorch.org/whl/cu130" }, marker = "extra == 'extra-12-mini-trainer-cu130' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "numpy", marker = "extra == 'extra-10-mt-trainer-cu130' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "pillow", marker = "extra == 'extra-10-mt-trainer-cu130' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torch", version = "2.12.0+cu130", source = { registry = "https://download.pytorch.org/whl/cu130" }, marker = "extra == 'extra-10-mt-trainer-cu130' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] wheels = [ { url = "https://download-r2.pytorch.org/whl/cu130/torchvision-0.27.0%2Bcu130-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:0a839a2921410b1135add4c3d90f784c9d1e9e9f3c7b401b216d356ddca23ab2", upload-time = "2026-05-12T16:20:44Z" }, @@ -3827,21 +3842,18 @@ source = { registry = "https://download.pytorch.org/whl/cu132" } 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 != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", "python_full_version == '3.13.*' and sys_platform == 'win32'", - "python_full_version < '3.13' and sys_platform == 'win32'", "python_full_version == '3.13.*' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform == 'win32'", "python_full_version < '3.13' and sys_platform == 'emscripten'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.14' and sys_platform == 'darwin'", - "python_full_version == '3.13.*' and sys_platform == 'darwin'", - "python_full_version < '3.13' and sys_platform == 'darwin'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "numpy", marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "pillow", marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torch", version = "2.12.0+cu132", source = { registry = "https://download.pytorch.org/whl/cu132" }, marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "numpy", marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "pillow", marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torch", version = "2.12.0+cu132", source = { registry = "https://download.pytorch.org/whl/cu132" }, marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, ] wheels = [ { url = "https://download-r2.pytorch.org/whl/cu132/torchvision-0.27.0%2Bcu132-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:f60fb51914eb9d9e3bc38d164309fb20b55a3786d0348ec2fcd65855147b4a7a", upload-time = "2026-05-12T16:20:46Z" }, @@ -3883,7 +3895,7 @@ name = "tqdm" version = "4.67.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "colorama", marker = "sys_platform == 'win32' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/09/a9/6ba95a270c6f1fbcd8dac228323f2777d886cb206987444e4bce66338dd4/tqdm-4.67.3.tar.gz", hash = "sha256:7d825f03f89244ef73f1d4ce193cb1774a8179fd96f31d7e1dcde62092b960bb", size = 169598, upload-time = "2026-02-03T17:35:53.048Z" } wheels = [